以下のようにデータをシミュレーションした下のプロットを考えてみます。1になる真の確率が黒い線で示されているバイナリの結果を調べます。共変量xとp (y o b s = 1 | x )の間の関数関係は、ロジスティックリンクを持つ3次多項式です(したがって、双方向で非線形です)。
緑の線はGLMロジスティック回帰近似で、は3次多項式として導入されています。破線の緑の線は、予測の周りの95%信頼区間であるP (Y O B S = 1 | X 、β)ここで、βフィット回帰係数。私はこれを使用しました。R
glm
predict.glm
同様に、プルプルラインは、均一な事前分布を使用したベイジアンロジスティック回帰モデルのについて95%信頼できる区間をもつ事後の平均です。私はこのために機能付きのパッケージを使用しました(設定により、事前に情報のない均一な情報が提供されます)。MCMCpack
MCMClogit
B0=0
赤い点は、のデータセット内の観測を示し、黒い点はy o b s = 0 の観測です。分類/離散分析では一般的ですが、pではなくy (y o b s = 1 | x )が観察されることに注意してください。
いくつかのことがわかります。
- 左側でがスパースであることを意図的にシミュレーションしました。情報(観察)が不足しているため、ここでは信頼と信頼できる間隔を広くしてほしい。
- 信頼区間は期待どおりに広くなりますが、信頼区間はそうではありません。実際、信頼区間は完全なパラメータ空間を囲みます。情報が不足しているためです。
- これの理由は何ですか?
- より良い信頼できる間隔に到達するためにどのようなステップを踏めますか?(つまり、少なくとも真の関数形を囲むもの、またはより良いものは信頼区間と同じくらい広くなります)
グラフィックで予測区間を取得するためのコードを次に示します。
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)
データ アクセス:https : //pastebin.com/1H2iXiew感謝@DeltaIVおよび@AdamO
dput
データを含むデータフレームで使用し、dput
出力をコードとして投稿に含めることができます。