显示贝叶斯模型平均(BMA)优点的简单示例


12

我将贝叶斯模型平均(BMA)方法纳入研究,并将很快向同事介绍我的工作。但是,BMA在我的领域并没有那么知名,因此在向他们介绍所有理论之后并将其实际应用于我的问题之前,我想提出一个简单而有启发性的示例,说明BMA为何起作用。

我在考虑一个简单的示例,其中有两个模型可供选择,但是真正的数据生成模型(DGM)介于两者之间,证据并不真正支持其中的任何一个。因此,如果您选择一个并继续进行下去,则将忽略模型不确定性并产生错误,但是BMA尽管真实模型不是模型集的一部分,但至少可以正确给出感兴趣参数的后验密度。例如,每天有两个天气预报(A和B),并且一个人希望最好地预测天气,因此在经典统计中,您首先会尝试找到两者之间的最佳天气预报者,但是如果真相介于两者之间,该怎么办? (也就是说,有时A是正确的,有时B是正确的)。但是我无法将其形式化。那样的东西,但是我很愿意接受想法。我希望这个问题足够具体!

在文献中,到目前为止,我还没有找到任何很好的例子:

  • Kruschke(2011)虽然很好地介绍了贝叶斯统计,但并没有真正关注BMA,而他在第4章中介绍的抛硬币示例对于介绍贝叶斯统计非常有用,但并没有真正说服其他研究人员使用BMA。(“为什么我又有三个模型,一个为什么说硬币是公平的,而另一个说它在任一方向上都有偏见?”)
  • 我阅读的所有其他内容(Koop 2003Koop / Poirier / Tobias(2007)Hoeting等人(1999)以及大量其他文章)都是很好的参考,但是我还没有在其中找到一个简单的玩具示例。

但是也许我只是错过了一个很好的消息来源。

那么,有没有人有介绍BMA的好榜样?也许甚至显示出可能性和后继者,因为我认为这将很有启发性。


一个简短的更新:我刚刚在第2节中看到了涉及Freedman悖论的演示文稿。有一个简短的示例,其中模拟了39个随机协变量,如果只寻找最佳模型,则最终会发现重要的协变量。模型平均显然可以解决该问题。我不会在这里发布带有代码的解决方案,因为坦率地说,我不知道那里的数字是如何得出的。
Christoph_J

(续)它们的平均精确值是多少?最好的参数?所有参数(我认为仅在此特定示例中才有意义)。不过,我认为将图表与Freedman悖论的提示结合起来还是很有帮助的。也许有帮助。
Christoph_J

Answers:


8

我最近做了类似的事情。与其说服别人,不如说是个小项目,让我对BMA有所了解。我要做的是生成一个具有二进制响应,三个对响应有影响的独立变量和七个对响应没有任何影响的变量的数据集。然后,我将BMA结果与logistic回归中的常客估计进行了比较。我认为至少在这种情况下,BMA方法似乎相当不错。如果要使其更易于访问,则始终可以命名变量或其他名称,而不用将它们称为通用和。ÿXy

下面介绍了我为此使用的R代码。希望它能启发您!

# The sample size
n <- 100

# The 'true' coefficient vector
Beta <- cbind(c(-1.5, 0.45, -3))

# Generate the explanatory variables which have an effect on the outcome
set.seed(1)
X <- cbind(rnorm(n, 0, 1), rnorm(n, 4, 2), rnorm(n, 0.5, 1))

# Convert this into probabilities
prob <- 1/(1+exp(-X %*% Beta))

# Generate some uniform numbers. If the elements are smaller than the corresponding elements in the prob vector, then return 1.
set.seed(2)
runis <- runif(n, 0, 1)
y <- ifelse(runis < prob, 1, 0)

# Add the nonsense variables
X <- cbind(X, rpois(n, 3))        # Redundant variable 1 (x4)
X <- cbind(X, rexp(n, 10))        # Redundant variable 2 (x5)
X <- cbind(X, rbeta(n, 3, 10))    # Redundant variable 3 (x6)
X <- cbind(X, rbinom(n, 10, 0.5)) # Redundant variable 4 (x7)
X <- cbind(X, rpois(n, 40))       # Redundant variable 5 (x8)
X <- cbind(X, rgamma(n, 10, 20))  # Redundant variable 6 (x9)
X <- cbind(X, runif(n, 0, 1))     # Redundant variable 7 (x10)


# The BMA
library(BMA)
model <- bic.glm(X, y,  glm.family="binomial", factor.type=FALSE, thresProbne0 = 5, strict = FALSE)

# The frequentist model
model2 <- glm(y~X, family = "binomial")

old.par <- par()
par(mar=c(3,2,3,1.5))
plot(model, mfrow=c(2,5))
par(old.par)

summary(model)
summary(model2)

2
这是一个很好的示例,因此对其+1。但是,正如您已经指出的那样,说服他人使用BMA并没有真正帮助。实际上,我运行了它,甚至花了一些时间说服我BMA比经典方法更好:最好的模型不是真正的模型(最好的模型仅包含x2和x3),而model2的参数却不是至少在相关参数方面有这么大的差距。但是,它显示了一些不应该存在的重要参数x5和x6,并且BMA在告诉您这不重要方面做得很好,因此对于BMA来说是一个加分项。
Christoph_J

2

一个很好的资源是:
Stefan Zeugner的BMS平均贝叶斯模型(2012)

它使用R-package BMS,可以在这里找到更多信息:http :
//bms.zeugner.eu/

可在此处找到两个动手实践教程,以重现该软件包的真实示例:

下面是对贝叶斯方法的更一般的激励和最新介绍:

时机已到:组织科学中的贝叶斯数据分析方法,作者:John K. Kruschke,Herman Aguinis和Harry Joo


感谢您提供的链接,但它们并不是我真正想要的。我以前确实知道并使用过该软件包(很棒),并且我同意他们的文档确实具有指导意义。但是同样,作者的意图不是要说服某人(希望在不到5分钟的时间内)使用BMA的原因,而是鉴于他们想使用BMA,以及如何使用其软件包。因此,从attitude示例开始,如果滚动浏览第一个链接,实际上没有任何表或图可以尖叫:“天哪,我很高兴使用BMA!”
Christoph_J

续:明确一点,这当然不是对他们文档的批评:最初不是他们的意图。也许给我一个例子。假设您要在线性回归中解释离群值问题。您可能会从这里的图表开始。当然,真实数据中的问题将从未如此简单。如何定义离群值等会很困难。但是有了这样一个图表,每个人都知道发生了什么。
Christoph_J

3
@Christoph_J:您知道这篇论文吗:indiana.edu/~kruschke/articles/KruschkeAJ2012.pdf-与其说的是BMA 无关,不如说是说服某人使用贝叶斯方法-也许这对有所帮助您:-)
vonjd 2013年

1
我不知道这是什么,它是贝叶斯方法的很好的入门论文,因此链接为+1。谢谢。
Christoph_J

@Christoph_J:我相应地编辑了该帖子:您的答案+1无效,仍然为0(?!?),所以请您再做一次-谢谢:-)
vonjd 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.