Aşağıdaki verileri simüle ettiğim aşağıdaki grafiği düşünün. Gerçek olma olasılığı 1 olan siyah çizgi ile gösterilen ikili sonucuna . Bir ortak değişken ve arasındaki fonksiyonel ilişki , lojistik bağlantı ile 3. dereceden polinomdur (bu nedenle çift yönlü doğrusal değildir).
Yeşil çizgi, 3. dereceden polinom olarak tanıtıldığı GLM lojistik regresyon uyumudur. Kesikli yeşil çizgiler tahmini etrafında% 95 güven aralığıdır , burada takılan regresyon katsayılarıdır. Ben kullandım ve bunun için.R
glm
predict.glm
Benzer şekilde, pruple çizgisi, Bayes lojistik regresyon modelinin için% 95 güvenilir bir aralık ile arka ünitenin ortalamasıdır . Bunun için işlevli paketi kullandım (ayar önceden üniform bilgi vermez).MCMCpack
MCMClogit
B0=0
Kırmızı noktalar veri kümesinde olan siyah noktaları, olan gözlemlerdir . Sınıflandırma / ayrık analizde yaygın olarak değil gözlenmediğine dikkat edin.
Birkaç şey görülebilir:
- Ben bunu bilerek simüle sol taraftan seyrek. Bilgi eksikliği (gözlemler) nedeniyle burada güven ve güvenilir aralığın genişlemesini istiyorum.
- Her iki tahmin de solda yukarıya doğru eğimlidir. Bu yanlılık, gözlemini gösteren dört kırmızı noktadan kaynaklanır , bu da yanlış bir şekilde gerçek fonksiyonel formun buraya çıkacağını gösterir. Algoritma, gerçek fonksiyonel formun aşağı doğru büküldüğü sonucuna varmak için yeterli bilgiye sahip değildir.
- Beklendiği gibi güvenilir aralık yapar oysa güven aralığı, daha geniş olur değil . Aslında güven aralığı, bilgi eksikliğinden dolayı olması gerektiği gibi tam parametre alanını kapsamaktadır.
Görünen o ki, bir kısmı için güvenilir aralık yanlış / çok iyimser . Bilgiler seyrekleştiğinde veya tamamen olmadığında güvenilir aralığın daralması gerçekten istenmeyen bir davranıştır. Genellikle güvenilir bir aralık bu şekilde tepki vermez. Birisi açıklayabilir mi:
- Bunun nedenleri nelerdir?
- Daha güvenilir bir aralığa gelmek için hangi adımları atabilirim? (yani, en azından gerçek fonksiyonel formu çevreleyen veya daha iyisi güven aralığı kadar genişler)
Grafikte tahmin aralıkları elde etmek için kod burada yazdırılır:
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)
Veri erişimi : https://pastebin.com/1H2iXiew teşekkürler @DeltaIV ve @AdamO
dput
Verileri içeren veri çerçevesinde kullanabilir ve ardından dput
çıktıyı kodunuza çıktı olarak ekleyebilirsiniz .