使用贝叶斯方法重建传统的零假设检验

机器算法验证 r 贝叶斯 最大似然 马尔可夫链蒙特卡罗
2022-04-02 13:11:52

我试图通过计算空(H0)和替代(H1)模型的贝叶斯因子来重新创建(在R中)贝叶斯的常客假设检验。

该模型只是一个简单的线性回归,它试图检测全球温度的趋势。1995 年至 2009 年的数据(此处)。因此,H0 是没有趋势的(即斜率=0),或者类似地,H0 模型是一个只有截距的线性模型。

因此,我计算了lm()两个模型的对数似然值,得出了显着不同的负对数似然值。H1 lm() 模型的 p 值为 0.0877。

我还通过使用MCMCpack以贝叶斯方式计算了这一点,我得到了与超级超级不同的负对数似然值。对数似然值 13.7 和 4.3 的似然比大约相差 10000 倍(其中>100 被认为是“决定性的”)。

估计的均值和标准差非常相似,那么为什么我会得到如此不同的似然值呢?(特别是对于贝叶斯 H0 模型)我觉得我对边际可能性的理解存在差距,但我无法确定问题所在。

谢谢

library(MCMCpack)

## data: http://www.cru.uea.ac.uk/cru/data/temperature/hadcrut3gl.txt

head(hadcru, 2)
##  Year      1      2      3      4      5      6      7      8      9     10
## 1 1850 -0.691 -0.357 -0.816 -0.586 -0.385 -0.311 -0.237 -0.340 -0.510 -0.504
## 2 1851 -0.345 -0.394 -0.503 -0.480 -0.391 -0.264 -0.279 -0.175 -0.211 -0.123
##       11     12    Avg
## 1 -0.259 -0.318 -0.443
## 2 -0.141 -0.151 -0.288

hadcru.lm <- lm(Avg ~ 1 + Year, data = subset(hadcru, (Year <= 2009 & Year >= 1995)))
hadcru.lm.zero <- lm(Avg ~ 1, data = subset(hadcru, (Year <= 2009 & Year >= 1995)))

hadcru.mcmc <- MCMCregress(Avg ~ 1 + Year, data = subset(hadcru, (Year <= 2009 & Year >= 1995)), thin = 100, mcmc = 100000, b0 = c(-20, 0), B0 = c(.00001, .00001), marginal = "Laplace")
hadcru.mcmc.zero <- MCMCregress(Avg ~ 1, data = subset(hadcru, (Year <= 2009 & Year >= 1995)), thin = 100, mcmc = 100000, b0 = c(0), B0 = c(.00001), marginal = "Laplace")

-logLik(hadcru.lm)
## 'log Lik.' -14.55338 (df=3)
-logLik(hadcru.lm.zero)
## 'log Lik.' -12.80723 (df=2)

attr(hadcru.mcmc, "logmarglike")
##           [,1]
## [1,] -13.65188
attr(hadcru.mcmc.zero, "logmarglike")
##           [,1]
## [1,] -4.310564

替代文字

3个回答

当您计算贝叶斯因子时,先验很重要。即使您拥有大量数据,先验的影响也会持续存在。当您进行后验推断时,先验的影响会随着您收集更多数据而消失,但贝叶斯因子则不然。

此外,如果您的无效和替代先验具有不相交的支持,您将获得更快的收敛。详情在这里

我注意到我确实遵循了 R 代码,因为我只使用了 R 一次或两次,但在我看来,你好像在比较模型的边际可能性,只有截距而没有斜率(hadcru.mcmc.zero ) 以及具有斜率和截距的模型的边际似然 (hadcru.mcmc)。然而,虽然 hadcru.mcmc.zero 似乎是 H0 的正确模型,但 hadcru.mcmc 在我看来并不能正确表示 H1,因为据我所知,没有任何东西可以将斜率限制为正。斜率的先验是否使其严格为正(我对 R 中的 MCMC 知之甚少)?如果不,

这个问题的 H0 是否应该是斜率正好为零是有争议的,没有人会相信这是先验的。可能是使用贝叶斯因子对斜率严格为正 (H1) 的模型与斜率为零或负 (H0) 的模型进行测试。

HTH(我不只是混淆事物)

我不知道您正在使用的软件包或它们的内部工作,但也许先验的选择很重要?也许,您应该考虑使用不同的先验结构来查看 mcmc 边际似然对您的先验选择的敏感程度。

特别是,我怀疑随着先验变得更加分散,mcmc 和传统可能性可能会更好地收敛。请注意,在 mcmc 中,边际似然是通过整合关于先验的似然函数来计算的。因此,我觉得先验的“扩散性”可能很重要(在这个问题上可能是错误的,但值得一试)。