背景:我拥有社会心理学博士学位,在我的定量课程中几乎没有涉及理论统计和数学。通过本科和研究生学校,我通过“经典”常客制框架得到了教育(可能与社会科学中的许多人一样)。现在,我也很喜欢R和使用模拟方法来验证方法,使工作方式对我来说,比数学上的证明更有意义(再次:定量社会科学的背景,而不是理论统计)。惯常方法和模拟方法对我来说意义非凡。因为常客将概率视为长期可能性(例如,如果我执行任意多次,并且这种情况发生在50%的时间中,那么就有50%的概率)。我们可以使用蒙特卡洛方法来模拟这种长期运行!
并发症:由于大学阶段,我已经很清楚的贝叶斯方法,并一直存在的人在我的生命给我打电话贝叶斯一边,说,结果更容易解释,我们得到概率的一个假设,而不是数据我真的很喜欢这个,参加了贝叶斯课程,阅读了一些贝叶斯书籍和论文,现在对Stan及其相关的R包非常熟悉。
输入Mayo:在思考了一段时间的“贝叶斯可能是未来之路”之后,我读了Deborah Mayo的“ 统计推断”作为“严格测试”。她说,她在书的开头并没有选择任何一方,但她这样做:她是一名常客,许多书都在捍卫常客的方法论。我不想讨论我们是否认为她认为证据有效的方式,但这让我思考:贝叶斯真的是广告宣传的全部吗?我的意思是,贝叶斯人群是如此分散,以至于我什至不知道经常在贝叶斯框架中分析数据的“正确”方法。通常我会用rstanarm
现在的点估计值和可信区间...这通常与常客的估计和置信区间非常接近。我可能会进行模型比较,但是我总是害怕将贝叶斯因素描述为后验概率比较等。
更多思考:在梅奥的书中,我一直在思考:有一种方法可以使用计算机来确保我们的常客方法有效,因为从长远来看,概率是可以看到的,并且可以模拟。看来,贝叶斯人甚至不能就概率的确切性达成共识,这取决于贝叶斯学派(默认,主观等)。这引出我的问题:
问题:如果长期未将概率定义为费率,贝叶斯主义者如何使用蒙特卡罗模拟方法验证他们的方法是否正确定义了不确定性(即,计算有效的可信区间和后验分布)?
示例:我创建一个数据生成器。这只是从伯努利分布中以0.5的概率进行模拟:
set.seed(1839)
p <- .50
n <- 100
gen_dat <- function(n, p) {
rbinom(n, 1, p)
}
现在,假设我要确保逻辑回归中的置信区间实际上是有效的。我可以多次模拟回归,并确保实际总体值在95%的时间内处于95%的置信区间内。这是一个仅拦截的模型,所以我只想确保自己估计p
正确:
set.seed(1839)
iter <- 10000
results <- sapply(seq_len(iter), function(zzz) {
mod <- glm(gen_dat(n, p) ~ 1, binomial)
conf <- suppressMessages(confint(mod))
log(p / (1 - p)) < max(conf) & log(p / (1 - p)) > min(conf)
})
mean(results)
这需要几分钟的时间,但最终还是mean(results)
给我们打电话0.9416
。这大约是95%,我有信心说该glm
命令以一种有效的方式描述了不确定性。我敢肯定,如果我iter
升级并想在笔记本电脑上等待更长的时间,它将以95%靠近鼻子。
另一方面,让我们将贝叶斯模型拟合为同一件事:
library(rstanarm)
set.seed(1839)
dat <- data.frame(y = gen_dat(n, p))
stan_mod <- stan_glm(y ~ 1, binomial, dat)
summary(stan_mod)
在某种程度上,这给了我:
Estimates:
mean sd 2.5% 25% 50% 75% 97.5%
(Intercept) -0.1 0.2 -0.5 -0.2 -0.1 0.0 0.3
mean_PPD 0.5 0.1 0.3 0.4 0.5 0.5 0.6
log-posterior -73.0 0.7 -75.1 -73.1 -72.7 -72.5 -72.5
由于贝叶斯并没有像从长远来看那样将概率定义为概率,因此与stan_glm
准确捕获不确定性相比,我该如何使用仿真方法进行验证?也就是说,使用模拟方法,我怎么能相信这些可信的间隔是正确的?现在,我什至都没有定义先验-包括先验如何在这里发挥作用,因为这将影响我们的不确定性度量?
当我一次尝试从头开始用Stan的障碍模型组件编写beta回归时,有人建议我:“模拟数据。做很多次,真正的估计应该在大约95的可信区间内% 的时间。” 但是对我来说,这与贝叶斯主义者所信奉的恰恰相反!这取决于对概率的常识性理解!那么,贝叶斯如何使我相信,从summary()
调用到模型的可信区间就是使用模拟方法准确地描述了不确定性?
问题的目的:这是一个简单的例子,但是很多时候客户给我带来了难题。并且我尝试一些我不熟悉的事情,因此我经常进行模拟研究以确保我所做的事情是有效的。如果我要用Stan编写自定义模型,我怎么知道我在做的事情是合法的?我如何使用模拟方法来验证我在Stan中所做的事情实际上是要告诉我我想知道的事情?