问题描述
如何为有序回归中的每个预测变量生成每个结果的后验概率分布?
例如 我要找的是这个:
library(rstanarm)
fit_f <- MASS::polr(tobgp ~ agegp,data = esoph)
predict(fit_f,newdata=data.frame(agegp=factor(levels(esoph$agegp))),type = "probs")
现在使用 rstanarm:
fit <- stan_polr(tobgp ~ agegp,data = esoph,method = "logit",prior = R2(0.2,"mean"),init_r = 0.1,seed = 12345)
但是我如何获得单个结果/预测变量的分布? 我确实使用 epred 获得了概率分布,但我不明白哪个结果/预测变量?
posterior_epred(fit,newdata=data.frame(agegp=factor(levels(esoph$agegp))))
解决方法
在 rstanarm 中最简单的方法是使用 posterior_predict
函数获得后验预测,然后通过观察计算落在每个结果类别中的预测比例。在代码中,
PPD <- posterior_predict(fit) # uses esoph
probs <- t(apply(PPD,MARGIN = 2,FUN = table) / nrow(PPD))
名为 probs
的矩阵的行等于观察数(在 esoph
中),列等于 tobgp
中的类别数,并且其每一行的总和为 1。
head(probs)
0-9g/day 10-19 20-29 30+
1 0.26400 0.26250 0.22875 0.24475
2 0.25650 0.26750 0.23050 0.24550
3 0.25175 0.27975 0.22450 0.24400
4 0.25575 0.26000 0.24025 0.24400
5 0.26350 0.26625 0.23575 0.23450
6 0.28275 0.26025 0.21500 0.24200