我确实对贝叶斯统计的最基本起点感到困惑:为什么使用先验有用?
在我看来,如果有的话,他们的伤害远不止帮助。此外,贝叶斯主义者总是说“你得到的证据越多,先验变得越不重要”。那么为什么首先使用它们呢?
特别是如果您从一个非常遥远的先验开始,那么您将损害您的估计。
对我来说,“Frequentist”方法似乎更简单、更直接。
我想在这里讨论一个在贝叶斯入门课程/解释中非常典型的例子(例如this、this或this)
示例 1——法国人粗鲁吗?
想象一下,我有兴趣估计法国人是否粗鲁(以二元方式:粗鲁与非粗鲁)。
想象一下,真正的参数$\theta$是 0.3,30% 的法语是粗鲁的。
我有 100 个人的随机样本,其中包含关于“粗鲁”的数据。
一个简单的“Frequentist”方法是:计算样本的置信区间,然后......你完成了。我们知道真实$\theta$位于 CI 内的概率是多少,并且我们知道平均而言,由于中心极限定理,我们的样本平均值将接近真实参数。
true_theta = 0.3
set.seed(111)
# population
X = rbinom(n = 10000, size = 1, prob = true_theta)
# sample of 100
x = sample(X, size = 100)
p_hat = prop.table(table(x))[2]
margin_error = 1.96 * sqrt( (p_hat*(1-p_hat)) / 100
ci_low = p_hat - margin_error
ci_high = p_hat + margin_error
data.frame(p_hat, ci_low, ci_high)
现在贝叶斯将尝试将先验纳入其中。为什么?
我们可以想象,大多数人都会认为法国人很粗鲁。(使用 Beta 分布)根据个人经验,某人通常会有这样的先前分布:他们认识 10 个法国人,而 7 个是粗鲁的。所以这是他们的先决条件。
结果如上图所示。在底部面板上,我围绕样本均值绘制了置信区间。
在我看来,频率论者的方法会给我们一个更准确、更直接的答案。
我在这里想念什么?
示例 2——预测剔除
想象一下,我对预测终极格斗锦标赛 (UFC) 中的淘汰赛 (KO) 感兴趣。
我的基本频率论方法是这样的。
研究这项运动,看看哪些变量在预测一名拳手击倒另一名拳手时发挥了作用(例如拳手的年龄、连胜纪录、主场优势……)。
然后我将采样 30 个 UFC 事件并开始构建我的模型。我会使用最大似然的简单逻辑回归。我没有先验知识,但我有一个建立在理论知识基础上的现实模型,就像任何科学家一样,无论是否贝叶斯。我最初的模型是年龄和格斗风格(泰拳斗士 vs BJJ)将是预测 KO 的最重要因素。
我从逻辑回归中检索估计值。然后我会交叉验证,获取另一个样本并将我的初始模型应用于新数据,看看它是如何执行的。
让我们想象它的性能不太好。然后,我将尝试改进我的模型,更仔细地研究这项运动。我发现考虑到受伤和拳击手年龄之间的相互作用是 KO 最重要的预测因素之一。我用这个重新运行我的回归并再次交叉验证,现在模型表现良好。
现在我有一个预测模型告诉我 KO 的概率,我可以用它来赌钱。
此外,我知道某些特殊的事件,比如跨年夜事件,会有更多的 KO,所以我可以根据这个事实调整我的模型。
在贝叶斯意义上,先验在哪里有用?像所有科学家一样的频率论者都使用模型来测试现实并随着时间的推移改进他们的模型,但不同之处在于他们没有为事物设定正式的初始概率。我仍然不明白为什么,你会想要这样做。
# code for the Figure
theta_range <- seq(0, 1, by = 0.01)
prior <- dbeta(x = theta_range, shape1 = 7, shape2 = 3)
# observed success
success_obs = table(x)[2]
failure_obs = table(x)[1]
# sampling distribution #
likelihood <- dbinom(x = success_obs, size = 100,
prob = theta_range) * 100
# posterior
posterior_density <- likelihood * prior
df <- data.frame(theta = theta_range,
likelihood = likelihood,
prior_dist = prior,
posterior_distribution = posterior_density)
df_melt = melt(df, id.vars = 'theta')
df_melt %>%
ggplot(aes(x = theta, y = value, color = variable)) +
geom_line(size = 1.2) +
scale_x_continuous(breaks = seq(0, 1, by = 0.1)) +
geom_vline(xintercept = p_hat, size = 1.5) +
geom_vline(xintercept = ci_low, colour = 'gray',
size = 1.5) +
geom_vline(xintercept = ci_high, colour = 'gray',
size = 1.5) + theme_minimal() +
ggtitle("Bayesian + Frequentist Confidence Intervals")
