Pertimbangkan plot di bawah ini di mana saya mensimulasikan data sebagai berikut. Kami melihat hasil biner yang kemungkinan benar menjadi 1 ditunjukkan dengan garis hitam. Hubungan fungsional antara kovariat x dan p ( y o b s = 1 | x ) adalah polinomial urutan ke-3 dengan tautan logistik (sehingga bersifat non-linear dalam dua arah).
Garis hijau adalah kecocokan regresi logistik GLM di mana diperkenalkan sebagai polinomial orde ketiga. Garis hijau putus-putus adalah interval kepercayaan 95% sekitar prediksi p ( y o b s = 1 | x , β ) , di mana β koefisien regresi dipasang. Saya menggunakan dan untuk ini.R
glm
predict.glm
Demikian pula, garis pruple adalah rata-rata posterior dengan interval kredibel 95% untuk dari model regresi logistik Bayesian menggunakan seragam sebelumnya. Saya menggunakan paket dengan fungsi untuk ini (pengaturan memberikan seragam sebelumnya tidak informatif).MCMCpack
MCMClogit
B0=0
Titik-titik merah menunjukkan pengamatan dalam set data yang , titik-titik hitam adalah pengamatan dengan y o b s = 0 . Perhatikan bahwa seperti biasa dalam klasifikasi / analisis diskrit y tetapi tidak p ( y o b s = 1 | x ) diamati.
Beberapa hal dapat dilihat:
- Saya disimulasikan dengan sengaja bahwa jarang di tangan kiri. Saya ingin agar interval kepercayaan dan kredibilitas melebar di sini karena kurangnya informasi (pengamatan).
- Interval kepercayaan semakin lebar seperti yang diharapkan, sedangkan interval yang kredibel tidak . Bahkan interval kepercayaan mencakup ruang parameter yang lengkap, sebagaimana seharusnya karena kurangnya informasi.
- Apa alasannya?
- Langkah apa yang bisa saya ambil untuk mencapai interval kredibel yang lebih baik? (Yaitu, yang menutupi setidaknya bentuk fungsional yang sebenarnya, atau lebih baik selebar interval kepercayaan)
Kode untuk mendapatkan interval prediksi dalam grafik dicetak di sini:
fit <- glm(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
x_pred <- seq(0, 1, by=0.01)
pred <- predict(fit, newdata = data.frame(x=x_pred), se.fit = T)
plot(plogis(pred$fit), type='l')
matlines(plogis(pred$fit + pred$se.fit %o% c(-1.96,1.96)), type='l', col='black', lty=2)
library(MCMCpack)
mcmcfit <- MCMClogit(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
gibbs_samps <- as.mcmc(mcmcfit)
x_pred_dm <- model.matrix(~ x + I(x^2) + I(x^3), data=data.frame('x'=x_pred))
gibbs_preds <- apply(gibbs_samps, 1, `%*%`, t(x_pred_dm))
gibbs_pis <- plogis(apply(gibbs_preds, 1, quantile, c(0.025, 0.975)))
matlines(t(gibbs_pis), col='red', lty=2)
Akses data : https://pastebin.com/1H2iXiew terima kasih @DeltaIV dan @AdamO
dput
pada kerangka data yang berisi data, dan kemudian memasukkan dput
output sebagai kode dalam posting Anda.