当前位置: 首页 > news >正文

【深度学习】图形模型基础(5):线性回归模型第四部分:预测与贝叶斯推断

1.引言

贝叶斯推断超越了传统估计方法,它包含三个关键步骤:结合数据和模型形成后验分布,通过模拟传播不确定性,以及利用先验分布整合额外信息。本文将通过实际案例阐释这些步骤,展示它们在预测和推断中的挑战和应用。

2 利用后验模拟传播推断中的不确定性

在本文后续部分,我们将讨论先验分布的重要性。但首先,我们关注如何使用stan_glm函数进行模型拟合,并通过R中的模拟来表达推断和预测中的不确定性。

示例:以之前文章的选举预测模型为例,我们有以下估计结果摘要:

  • 截距(Intercept):中位数 46.3,MAD_SD 1.7
  • 增长(growth):中位数 3.0,MAD_SD 0.7
  • 残差标准差(sigma):中位数 3.9,MAD_SD 0.7

这些数值来源于对参数向量 ( a , b , σ ) (a, b, σ) a,b,σ的模拟矩阵,代表截距、斜率和回归的残差标准差。我们得到的是一系列后验模拟,而非单一的点估计,这反映了对参数的不确定性。

通过R语言提取模拟矩阵:

sims <- as.matrix(M1)

然后,我们可以直接从模拟中计算中位数和MAD_SD,以验证摘要的准确性:

Median <- apply(sims, 2, median)
MAD_SD <- apply(sims, 2, mad)
print(cbind(Median, MAD_SD))

这里的MAD_SD是后验模拟的缩放中位数绝对偏差,它比标准误差或后验标准差更稳定,因此我们有时称之为“标准误差”。

2.1 回归系数的不确定性及回归线的隐含不确定性

为了理解贝叶斯不确定性分布的概念,绘制系数的模拟抽样图是有帮助的。图9.1展示了拟合的选举预测模型的截距和斜率的后验模拟直方图。我们叠加了每个参数的估计值±1和2个MAD_SD,以展示数值摘要与模拟之间的关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IqdgBs4b-1720276810932)(https://i-blog.csdnimg.cn/direct/ed9e86bb81324432b72649ef638c816f.png)]
图2.1 回归模型y = a + bx + error中a和b的后验模拟。对于每个参数,我们都展示了由stan_glm产生的模拟抽样,以及后验中位数±1和2倍的稳健标准误差(mad sd)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ab4oGiZb-1720276810934)(https://i-blog.csdnimg.cn/direct/abe225faf2ef46dd95e8d2f88e83d939.png)]
图2.2 (a) 使用stan_glm拟合的选举预测模型y = a + bx + error中,(a, b)的4000个后验模拟结果。(b) 对应于这些(a, b)模拟结果中的100个的y = a + bx直线图。

图2.2a的散点图显示了截距和斜率的后验分布。每个点 ( a , b ) (a, b) a,b可以映射到一条线 y = a + b x y = a + bx y=a+bx,图2.2b展示了这些线中的100条,反映了拟合回归的推断不确定性。随着样本量的增加,系数的标准误差减小,推断的精度提高。

2.2 使用后验模拟矩阵表达对参数估计或参数估计函数的不确定性

模拟总结推断的优势在于,我们可以直接使用这些模拟来传播不确定性。例如,如果我们想要得到参数比率a/b的估计值和标准误差,可以直接使用模拟矩阵:

a <- sims[, "Intercept"]
b <- sims[, "growth"]
z <- a / b
print(c(median(z), mad(z)))

这种方法允许我们直接从后验模拟中提取信息,对参数的函数进行推断,而不必依赖于传统的点估计和标准误差。

通过这种方式,贝叶斯推断提供了一种灵活的方法来处理不确定性,并通过模拟使我们能够对模型参数及其函数进行深入的分析和预测。

3. 预测与不确定性:点预测、后验线性预测和后验预测

在拟合了线性回归模型 y = a + b x + error y = a + bx + \text{error} y=a+bx+error 后,我们可以利用它来预测一个或多个新数据点,其中预测变量为 x new x_{\text{new}} xnew。我们可以进行三种不同级别的预测,这些预测反映了不确定性的不同程度:

  • 点预测 a ^ + b x ^ new \hat{a} + b\hat{x}_{\text{new}} a^+bx^new:根据拟合模型,这是对于具有新 x x x 值的新数据点 y y y 的平均值的最佳点估计。这里使用 a ^ \hat{a} a^ b ^ \hat{b} b^ 是因为点预测忽略了不确定性。
  • 带不确定性的线性预测器 a + b x new a + bx_{\text{new}} a+bxnew,传播了参数 ( a , b ) (a, b) (a,b) 的推断不确定性:这代表了对于具有预测变量 x new x_{\text{new}} xnew 的新数据点 y y y 的预期或平均值的不确定性分布。
  • 新观察的预测分布 a + b x new + error a + bx_{\text{new}} + \text{error} a+bxnew+error:这代表了具有预测变量 x new x_{\text{new}} xnew 的新观察 y y y 的不确定性。

例如,假设有一项研究预测血压 y y y 基于药物剂量 x x x。对于任何给定的 x new x_{\text{new}} xnew,点预测是人群平均血压的最佳估计,条件是剂量 x new x_{\text{new}} xnew;线性预测器是人群中剂量为 x new x_{\text{new}} xnew 的人的平均血压模型,其不确定性对应于参数 a a a b b b 的推断不确定性;预测分布代表了从这个人群中随机抽取的一个人的血压,在模型条件下指定的 x new x_{\text{new}} xnew

随着样本大小接近无穷大,参数 a a a b b b 被估计得越来越精确,线性预测器的不确定性接近零,但新观察的预测分布的不确定性不会接近零;它接近残差标准差 σ \sigma σ

3.1.使用 p r e d i c t predict predict进行点预测

以预测选举经济为例,我们预测现任政党的得票率,条件是经济增长 2.0%。拟合的模型 M 1 M1 M1 出现在第 113 页。我们首先创建一个包含假设值 x x x 的新数据集:

new <- data.frame(growth=2.0)

然后我们可以计算点预测:

y_point_pred <- predict(M1, newdata=new)

或者,我们可以“手动”执行这个计算:

new <- 2.0
a_hat <- coef(M1)[1]
b_hat <- coef(M1)[2]
y_point_pred <- a_hat + b_hat * new

无论哪种方式,点预测都是一个单一的数字,例如 46.3 + 3.0 × 2 = 52.3 46.3 + 3.0 \times 2 = 52.3 46.3+3.0×2=52.3

3.2.带不确定性的线性预测器

我们可以使用 posterior_linpred 来获取拟合回归线的不确定性值:

y_linpred <- posterior_linpred(M1, newdata=new)

这返回一个后验模拟向量,其均值等于上面获得的点预测,其标准差代表拟合模型的不确定性。

或者,我们可以使用函数 posterior_epred,它返回新数据点的预期预测。对于线性回归,期望值 E ( y ∣ x new ) E(y|x_{\text{new}}) E(yxnew) 与线性预测器 X new β X_{\text{new}}\beta Xnewβ 相同,但对于非线性模型,这两个量是不同的。

3.3.新观察构建预测分布

最后,我们可以构建一个向量,表示单个选举的预测不确定性:

y_pred <- posterior_predict(M1, newdata=new)

要“手动”使用模拟获得这个结果,我们只需在之前的计算中加上一个误差项:

n_sims <- nrow(sims)
sigma <- sims[,3]
y_pred <- a + b * as.numeric(new) + rnorm(n_sims, 0, sigma)

在任何情况下,我们可以通过图形和数字来总结模拟向量:

hist(y_pred)
y_pred_median <- median(y_pred)
y_pred_mad <- mad(y_pred)
win_prob <- mean(y_pred > 50)
cat("Predicted Clinton percentage of 2-party vote: ", round(y_pred_median, 1),", with s.e. ", round(y_pred_mad, 1), "\nPr (Clinton win) = ", round(win_prob, 2), sep="")

这是结果:

Predicted Clinton percentage of 2-party vote: 52.3, with s.e. 3.9
Pr (Clinton win) = 0.72

3.4.给定一系列输入值的预测

我们还可以使用 predictposterior_linpredposterior_predict 来生成一系列预测值,例如预测经济增长从 -2% 到 +4% 的可能值范围的选举结果:

new_grid <- data.frame(growth=seq(-2.0, 4.0, 0.5))
y_point_pred_grid <- predict(M1, newdata=new_grid)
y_linpred_grid <- posterior_linpred(M1, newdata=new_grid)
y_pred_grid <- posterior_predict(M1, newdata=new_grid)

结果是长度为 13 的向量(y_point_pred_grid)和两个n_sims × \times × 13 矩阵(y_linpred_grid) 和y_pred_grid,对应于为增长指定的每个13 个值的预测。

3.5.传播不确定性

在上述计算中,我们表达了在各种预设的经济增长值条件下的选举结果的不确定性。但是,在选举前,增长只能估计得相当近似,而且后来政府经常会修正这些数字。因此,在应用我们的模型时,考虑到这个预测变量的不确定性是有意义的。

假设在选举前,我们对经济增长的最佳估计是 2.0%,但有一些不确定性,我们将这种不确定性表示为标准差为 0.3% 的正态分布。然后我们可以传播这个预测变量的不确定性,以获得一个更完整地表达我们不确定性的预测分布。

我们只需要在我们的 R 代码中添加一行来模拟预测的分布:

x_new <- rnorm(n_sims, 2.0, 0.3)
y_pred <- rnorm(n_sims, a + b * x_new, sigma)

然后像以前一样总结,得到这个结果:

Predicted Clinton percentage of 2-party vote: 52.3, with s.e. 4.1
Pr (Clinton win) = 0.71.

点预测保持不变,为两党投票的 52.3%,但标准差略有增加,以反映这种额外的不确定性。

3.6.线性预测器和新观察模拟的不确定性讨论

示例:我们再次使用一个模型来预测体重(以磅为单位)从身高(以英寸为单位),来自一个调查,其回答已经被清理并保存在一个名为 earnings 的数据框中:

fit_1 <- stan_glm(weight ~ height, data=earnings)
print(fit_1)

这产生了截距和高度的中位数、MAD_SD 值以及辅助参数 sigma 的中位数和 MAD_SD 值。

截距很难解释 - 它代表了一个身高为零英寸的人的预测体重 - 所以我们进行转换:

earnings$c_height <- earnings$height - 66
fit_2 <- stan_glm(weight ~ c_height, data=earnings)
print(fit_2)

这个回归中的预测变量是相对于 66 英寸的身高。这种近似中心化的预测变量使得回归系数的推断更稳定和可解释。

3.7.使用拟合的回归进行推断

在将拟合的回归应用于新的数据点 x new x_{\text{new}} xnew 时,我们可以对线性预测器 a + b x new a + bx_{\text{new}} a+bxnew 或预测值 y new = a + b x new + ϵ y_{\text{new}} = a + bx_{\text{new}} + \epsilon ynew=a+bxnew+ϵ 进行推断。

例如,让我们预测一个身高 70 英寸的人的体重,使得 c height = height − 66 = 4 c_{\text{height}} = \text{height} - 66 = 4 cheight=height66=4

  • 线性预测器: a + 4.0 b a + 4.0b a+4.0b
  • 预测值: a + 4.0 b + ϵ a + 4.0b + \epsilon a+4.0b+ϵ

有时我们对预测的期望或线性预测器感兴趣,因为它代表这个身高的所有人在人群中的平均体重;在其他情况下,我们想要预测一个个体的体重。这取决于上下文,我们需要能够评估每个的不确定性。

对于身高为70英寸的人,我们的模型预测其体重为153.2 + 4.0 * 4.9 = 172.8磅。如果此方程直接反映了真实世界的规律,而非基于数据的估计模型,那么我们可以将 σ ^ \hat{\sigma} σ^ = 29.1视为预测值标准差的一个合理估计。然而,在实际应用中,由于回归参数(如斜率b和截距a)的估计存在不确定性,这种估计误差的标准差往往会略高于 σ ^ \hat{\sigma} σ^ 。这种复杂性促使我们在一些回归分析的文献中见到了特定的预测标准差计算公式。

在标准的线性回归模型 y = a + b x + ε y = a + bx + ε y=a+bx+ε中,线性预测器 a + b x a + bx a+bx的标准差可以通过以下公式计算:

σ ^ linpred = 1 n + ( x new − x ˉ ) 2 ∑ i = 1 n ( x i − x ˉ ) 2 σ ^ (3.1) \hat{\sigma}_{\text{linpred}} = \sqrt[\hat{\sigma}]{\frac{1}{n} + \frac{(x_{\text{new}} - \bar{x})^2}{\sum_{i=1}^{n}(x_i - \bar{x})^2}}\quad \text{(3.1)} σ^linpred=σ^n1+i=1n(xixˉ)2(xnewxˉ)2 (3.1)

而包含随机误差项ε的完整预测值 a + b x + ε a + bx + ε a+bx+ε的标准差则为:

σ ^ prediction = 1 + 1 n + ( x new − x ˉ ) 2 ∑ i = 1 n ( x i − x ˉ ) 2 σ ^ (3.2) \hat{\sigma}_{\text{prediction}} = \sqrt[\hat{\sigma}]{1 + \frac{1}{n} + \frac{(x_{\text{new}} - \bar{x})^2}{\sum_{i=1}^{n}(x_i - \bar{x})^2}} \quad \text{(3.2)} σ^prediction=σ^1+n1+i=1n(xixˉ)2(xnewxˉ)2 (3.2)

值得注意的是,尽管这些公式在简单线性模型中非常有用,但它们并不总是适用于更复杂的模型或非线性预测场景。因此,一个更为灵活且强大的方法是利用模拟来评估预测的不确定性。

在R语言中,当我们使用stan_glm函数拟合模型后,可以通过posterior_linpredposterior_predict函数分别获得线性预测器和完整预测值的后验模拟。这两种预测方式在平均值上是一致的,即都等于点预测 a ^ + b ^ x new \hat{a} + \hat{b}x_{\text{new}} a^+b^xnew。然而,它们在不确定性方面存在差异:随着样本量n的增加,线性预测器的标准差逐渐减小(与 1 / n 1/\sqrt{n} 1/n 成正比),而完整预测值的标准差则趋近于一个非零值 σ σ σ,这反映了即使模型参数完全已知,预测新数据点时仍会存在固有的不确定性。

3.8.后验模拟

在使用 stan_glm 拟合模型后,我们可以使用 posterior_linpredposterior_predict 获取两种预测的后验模拟。

我们使用身高和体重示例进行演示,使用上述的贝叶斯回归结果 fit_2,然后定义一个数据框,用于身高为 70 英寸的新人(因此中心化身高为 4.0 英寸):

new <- data.frame(c_height=4.0)

我们可以计算点预测:

y_point_pred_2 <- predict(fit_2, newdata=new)

和线性预测器的模拟:

y_linpred_2 <- posterior_linpred(fit_2, newdata=new)

这产生了一个向量,表示可能的 a + 4.0 b a + 4.0b a+4.0b 值,变化来自系数的后验不确定性。

我们可以为身高为 70 英寸的单个新人计算后验预测模拟:

y_postpred_2 <- posterior_predict(fit_2, newdata=new)

产生了一个模拟向量,代表可能的 a + 4.0 b + ϵ a + 4.0b + \epsilon a+4.0b+ϵ 值。

在任何情况下,我们都可以通过中位数、mad sd、直方图等进行总结。

4. 先验信息与贝叶斯综合分析

传统统计学方法根据单一数据集提供汇总和推断。与之相对,贝叶斯方法将数据模型与先验知识结合起来,以期获得与这两类信息源相一致的推断结果。

要全面理解统计推断,无论是贝叶斯还是传统方法,所需的概率论知识往往超出了本书的覆盖范围。但是,即便不完全理解概率论的数学基础,统计学的用户也能取得显著进展。本书的核心理念是直接深入探讨方法本身以及理解这些方法的方式,希望那些希望深入研究的读者可以在之后进一步学习相关理论和推导。本文末尾的参考文献注释为有兴趣深入了解的读者提供了一些指导。

4.1.数据和先验信息的统一度量

我们首先介绍正态分布的贝叶斯推断公式,这里用 θ \theta θ 表示我们想要估计的连续参数。我们的目标是将先验估计 θ prior \theta_{\text{prior}} θprior(带有先验标准误差 s e prior se_{\text{prior}} seprior)与数据估计 θ data \theta_{\text{data}} θdata(带有标准误差 s e data se_{\text{data}} sedata)结合起来。

最终,我们得到的贝叶斯估计是 θ Bayes \theta_{\text{Bayes}} θBayes,其标准误差为 s e Bayes se_{\text{Bayes}} seBayes,具体公式如下:

θ ^ Bayes = θ ^ prior s e prior 2 + θ ^ data s e data 2 1 s e prior 2 + 1 s e data 2 (4.1) \hat{\theta}_{\text{Bayes}} = \frac{\frac{\hat{\theta}_{\text{prior}}}{se_{\text{prior}}^2} + \frac{\hat{\theta}_{\text{data}}}{se_{\text{data}}^2}}{\frac{1}{se_{\text{prior}}^2}+\frac{1}{se_{\text{data}}^2}}\tag{4.1} θ^Bayes=seprior21+sedata21seprior2θ^prior+sedata2θ^data(4.1)

s e Bayes = 1 1 s e prior 2 + 1 s e data 2 (4.2) se_{\text{Bayes}} = \frac{1}{\sqrt{\frac{1}{se_{\text{prior}}^2} + \frac{1}{se_{\text{data}}^2}}}\tag{4.2} seBayes=seprior21+sedata21 1(4.2)

这些公式虽然初看可能有些复杂,但它们实际上揭示了在这种简单情况下贝叶斯推断是如何在先验知识和数据之间做出权衡的。特别是,公式 (4.1) 实质上是先验估计和数据估计的加权平均,每个估计的权重与其标准误差的平方成反比。公式 (4.1) 可以理解为将 1 / s e 2 1/se^2 1/se2 视为精度,并认识到后验精度等于来自先验的精度加上来自数据的精度。

分享这些公式的原因是,这种加权平均的概念是理解贝叶斯逻辑的有用途径。权衡的具体细节取决于先验和数据的标准误差:如果两个标准误差相等,贝叶斯估计将正好位于先验和数据估计的中间;如果不相等,则贝叶斯估计将更接近于具有较低标准误差的信息源。

公式 (4.2) 可能不太直观,但可以理解为先验和数据的逆方差相加,因此 s e Bayes se_{\text{Bayes}} seBayes 必然低于 s e prior se_{\text{prior}} seprior s e data se_{\text{data}} sedata 中的任何一个:信息的结合提高了精确度。

4.2.贝叶斯信息聚合实例

我们通过一个简单的例子来演示如何使用公式 (4.1) 和 (4.2) 来结合先验信息和数据,进行后验估计和标准误差的计算。假设即将举行一场选举,基于经济和政治情况的先前模型预测民主党候选人将获得两党票数的 52.4%,预测不确定性为 4.1%。按照上面的符号,我们有 θ prior = 0.524 \theta_{\text{prior}} = 0.524 θprior=0.524 s e prior = 0.041 se_{\text{prior}} = 0.041 seprior=0.041

现在,我们进行了一项包含 400 人的调查,其中 190 人表示将投票给民主党候选人,210 人支持共和党。如果这项调查是选民的简单随机样本,并且在调查和选举之间没有选民改变主意,那么数据估计为 θ data = 190 400 = 0.475 \theta_{\text{data}} = \frac{190}{400} = 0.475 θdata=400190=0.475,标准误差为 s e data = 0.475 ( 1 − 0.475 ) 400 = 0.025 se_{\text{data}} = \sqrt{\frac{0.475(1 - 0.475)}{400}} = 0.025 sedata=4000.475(10.475) =0.025。如果考虑到可能的非抽样误差,更现实的分析可能会增加标准误差,也可能改变点估计,但这里我们不讨论这种情况。

图 4.1a 展示了上述两段中描述的先验分布和可能性(数据中的信息)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwOyjexx-1720276810935)(https://i-blog.csdnimg.cn/direct/bd0c2cfe01ae44858897b39023da9355.png)]
图4.1 (a) 似然性(代表数据估计和标准误差的分布)和先验分布,这个例子结合了民意调查(数据)的估计值和拟合模型(先验)的预测值。在这种情况下,数据估计值为0.475,标准误差为0.025,先验估计值为0.524,先验标准误差为0.041。(b) 贝叶斯推断得出后验分布,它是似然性和先验之间的折衷。在这个例子中,数据比先验更具信息量,因此后验分布更接近似然性分布而不是先验分布。
现在,我们结合先验和数据估计,这里的关键假设是,先验和数据代表两种不同的信息来源,这是完全合理的。更准确地说,我们假设两个估计的不确定性在统计上是独立的。

这里,先验分布是基于过往选举的预测以及当前经济表现的衡量,预测不确定性来自于拟合模型中的非零残差。数据来自于新选举中潜在选民的调查,数据估计的不确定性来自于抽样变异性,以及分析中考虑的任何非抽样误差。

在这个例子中,先验标准误差为 4.1%,数据标准误差为 2.5%,因此数据比先验提供了更多的信息,贝叶斯估计将更接近数据。

我们可以轻松地进行如下计算:

theta_hat_prior <- 0.524
se_prior <- 0.041
n <- 400
y <- 190
theta_hat_data <- y / n
se_data <- sqrt((y/n) * (1 - y/n) / n)
theta_hat_bayes <- (theta_hat_prior / (se_prior^2) + theta_hat_data / (se_data^2)) / (1 / (se_prior^2) + 1 / (se_data^2))
se_bayes <- sqrt(1 / (1 / (se_prior^2) + 1 / (se_data^2)))

计算结果为 θ Bayes = 0.488 \theta_{\text{Bayes}} = 0.488 θBayes=0.488 s e Bayes = 0.021 se_{\text{Bayes}} = 0.021 seBayes=0.021。估计值确实位于先验和数据估计之间,更接近数据,如图 4.1b 所示。

现在考虑相同的情况,但数据不确定性更大。只需取相同的点估计,并将数据标准误差 s e data se_{\text{data}} sedata 从 0.025 增加到 0.075,贝叶斯估计值变为 0.512;现在它更接近先验。0

4.3.分配先验分布和执行贝叶斯计算的不同方式

统计学中可能令人困惑的一点是,相似的分析可以用不同的方法执行。例如,在第 7.3 节中我们讨论了如何将两个组的比较表达为对指示变量的回归,相应的标准误差可以使用公式 (4.1) 计算,或者使用最小二乘回归的代数方法。

同样,贝叶斯推断,至少在具有单一先验信息源和单一数据源的简单例子中,可以直接使用方程 (4.1) 和 (4.2) 来执行,或者使用回归分析的线性代数,如 stan_glm 函数实现的那样。

另一个复杂性在于,贝叶斯推断可以应用于任何不确定的量。在上述例子中,不确定的量是可观察的结果,即下次选举中现任政党的得票率。在后续文章中,不确定的量是不同类别父母生女孩概率的差异。在第6节中,我们讨论了更一般的问题,其中不确定的量是回归系数或一组回归系数。

在这些不同情况下,先验分布的设置将不同。对于投票的例子,基于过去数据的回归模型提供了单个可观察结果的预测推断,这可以作为与当前选举民意调查结合时的先验信息。在出生的例子中,我们需要有关人口差异的先验信息。在一般回归建模的例子中,我们必须为所有系数指定先验信息,这在实践中通常意味着对那些我们知之甚少或不想做出强假设的系数设置弱先验。

5. 贝叶斯推断实例:美貌与性别比

5.1.美貌与性别比研究案例

我们能够利用先验信息来提高从嘈杂研究中得出的估计的精确度。举例来说,若干年前,一位研究者通过对3000名美国人的调查数据分析,发现了父母外貌吸引力与他们孩子性别之间的某种相关性。这项调查将成年人分为五个吸引力等级,并发现在最高吸引力等级的父母中,有56%的子女是女性,而在其他等级中这一比例为48%。观察到的8个百分点的差异,其标准误差(基于比例差异的标准公式)为3个百分点。

这种观察差异超过零的两个标准误差,满足了统计显著性的标准。事实上,关于外貌更有吸引力的父母更有可能拥有女儿的说法,已经发表在科学期刊上,并受到了广泛关注。

5.2.先验信息的应用

然而,我们还有更多已知信息。众所周知,人类性别比的变化范围非常有限。例如,美国最近的一项统计报告显示,在白人中女孩的比例为48.7%,在黑人中为49.2%。在基于出生顺序、母亲年龄或出生季节等因素的比较中,也发现了少于0.5个百分点的类似微小差异。鉴于外貌吸引力本身只是一个主观测量,我们很难相信,更有吸引力和较无吸引力父母之间的差异会达到0.5%。现在,我们使用贝叶斯推断方法来进一步分析。这里我们关注的参数 θ \theta θ 是指美貌父母生女儿的概率与其他父母相比,在全美人群中的差异。通常,我们关注的是 θ \theta θ 与零的比较:是否有充分证据表明 θ > 0 \theta > 0 θ>0,这将意味着更有吸引力的父母更有可能生女儿?

5.3.先验估计及标准误差

我们可以将我们的科学认知表达为 θ \theta θ 的先验分布,平均值为0%,标准偏差为0.25%。先验平均值的零表示,在看到数据之前,我们没有理由预期外貌更有吸引力的父母生女儿的比率会有任何提高或降低。先验标准偏差的0.25%表示,我们认为 θ \theta θ 的真实值超过0.5%或低于-0.5%的可能性非常低。

为了方便,我们在百分比尺度上表达我们的估计和不确定性,避免使用如0.0025这样的表达式,以免在计算中丢失小数点。

按照百分比尺度,这项调查提供了 θ data = 8 % \theta_{\text{data}} = 8\% θdata=8% 的估计值,以及 s e data = 3 % se_{\text{data}} = 3\% sedata=3% 的标准误差。我们现在可以看到,与数据相比,先验信息具有更高的信息量:数据的标准误差是先验不确定性的10倍以上。

5.4.贝叶斯估计

使用公式 (4.1) 和 (4.2) 结合先验和数据,我们得到 θ Bayes = 0.6 % \theta_{\text{Bayes}} = 0.6\% θBayes=0.6% s e Bayes = 0.25 % se_{\text{Bayes}} = 0.25\% seBayes=0.25%:根据贝叶斯方法,美貌和非美貌父母生女孩比例的差异估计为0.06%(即不到0.1个百分点),标准误差为0.25%。这一估计值非常小,远低于标准误差,表明这项调查的数据实际上并没有提供有关性别比变化的有价值信息。

怎么会这样?3000的样本量听起来相当不错,但为何它在这里几乎未提供任何信息?原因是我们在这个研究中需要比一般调查设置更高的精确度。以下是一些快速计算来说明这一点:

  • 来自大小为3000的简单随机样本的估计比例的标准误差 p ( 1 − p ) 3000 \sqrt\frac{p(1-p)}{3000} 3000p(1p) ,如果 p p p 接近0.5,大约是 0.5 × 0.5 3000 = 0.009 \sqrt{\frac{0.5 \times 0.5}{3000}} = 0.009 30000.5×0.5 =0.009。3000人的调查让我们能够将比例估计在大约1%的精度内。
  • 现在考虑比较两个各为1500人的群体的比例差异。这些比例差异的标准误差 p 1 ( 1 − p 1 ) 1500 + p 2 ( 1 − p 2 ) 1500 \sqrt{\frac{p_1(1-p_1)}{1500} + \frac{p_2(1-p_2)}{1500}} 1500p1(1p1)+1500p2(1p2) ,如果 p 1 p_1 p1 p 2 p_2 p2 接近0.5,大约是 2 × 0.5 × 0.5 1500 = 0.018 \sqrt{\frac{2 \times 0.5 \times 0.5}{1500}} = 0.018 15002×0.5×0.5 =0.018。因此,在最佳条件下,我们可以将比例差异估计在大约2个百分点内。
  • 来自调查的实际标准误差稍高,为3.3个百分点,因为两个比较组的人数并不相等;大约只有10%的受访者被标记为“非常有魅力”。例如, 0.5 × 0.5 300 + 0.5 × 0.5 2700 = 0.03 \sqrt{\frac{0.5 \times 0.5}{300} + \frac{0.5 \times 0.5}{2700}} = 0.03 3000.5×0.5+27000.5×0.5 =0.03
  • 对比例差异的估计达到2或3个百分点的精度已经相当不错,对于许多目的来说已经足够。但是,对于研究性别比的差异,我们需要更高的精确度,更接近0.1个百分点的尺度。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BfulBshE-1720276810935)(https://i-blog.csdnimg.cn/direct/2928cca9a89748a4baf94a82b2a9a29d.png)]
    图4.1 (a) :线性回归y = a + bx + error中参数a和b的似然函数,用于描述经济增长xi上的选举结果yi。(b) :似然函数在众数处的模式,椭圆总结了众数处对数似然函数的逆二阶导数矩阵。© 从对应于平坦先验的后验分布中随机抽取的4000个(a, b)模拟值。

6. 回归中的均匀先验、弱信息先验和信息先验

在前面的章节中,我们通过模拟执行了贝叶斯分析,默认使用了均匀先验来捕捉估计和预测中的不确定性。在那些例子中,现有数据相对于其他容易获得的信息来说较为强大,因此我们并不过分担忧先验分布的选择。然而,当数据提供的信息较少时,我们就需要更慎重地考虑分析中应包含哪些先验信息。在本节中,我们将更正式地讨论这个话题,并探讨如何使用stan_glm来处理均匀先验、弱信息先验和信息先验。

6.1.均匀先验分布

均匀先验,也称为非信息性先验,意味着我们对参数的先验知识是中立的。在这种情况下,后验分布仅仅是似然函数乘以一个常数,最大似然估计也成为了后验分布的众数。stan_glm可以通过设置prior参数为NULL来使用均匀先验:

M3 <- stan_glm(vote ~ growth, data=hibbs,prior_intercept=NULL, prior=NULL, prior_aux=NULL)sims <- as.data.frame(M3)a <- sims[,1]b <- sims[,2]plot(a, b)

为了理解似然与先验的关系,我们可以提取系数的后验模拟并将其可视化。

6.2.默认先验分布

默认情况下,stan_glm使用的是弱信息先验,这种先验足以在数据较少时保持推断结果在合理范围内。对于一个具有形式 y = a + b 1 x 1 + b 2 x 2 + . . . + b K x K + e r r o r y = a + b1 x1 + b2 x2 + ... + bK xK + error y=a+b1x1+b2x2+...+bKxK+error的模型,每个系数 b k b_k bk都有一个均值为0、标准差为 2.5 × s d ( y ) s d ( x k ) 2.5\times \frac{sd(y)} {sd(x_k)} 2.5×sd(xk)sd(y)的正态先验分布。截距 a a a没有直接赋予先验分布,而是将先验赋予了在数据中预测变量 x x x的平均值处的 y y y的预期值,即:
a + b 1 x ˉ 1 + b 2 x ˉ 2 + . . . + b K x ˉ K a + b1 \bar{x}_1 + b2 \bar{x}_2 + ... + bK \bar{x}_K a+b1xˉ1+b2xˉ2+...+bKxˉK
这个居中的截距被赋予了一个均值为 μ y \mu_y μy、标准差为 2.5 × s d ( y ) 2.5\times{sd(y)} 2.5×sd(y)的正态先验分布。残差标准偏差 σ σ σ被赋予了一个速率参数为 1 / s d ( y ) 1/sd(y) 1/sd(y)的指数先验分布。

stan_glm中使用先验分布时,我们需要注意,默认的先验设置实际上并不是纯粹的贝叶斯先验,因为它们是依赖于数据来确定其具体形态的。按照贝叶斯理论,先验分布应当在我们观察到数据之前就已经确定。技术上,我们可以把stan_glm的默认先验看作是对理想贝叶斯先验的一种近似处理,这种处理方式本意是根据变量( x )和( y )在总体中的均值和标准差来进行缩放,而在实际操作中,我们通常使用样本的均值和标准差作为这些参数的估计。

若要展示通过stan_glm拟合的模型中所使用的先验分布,我们可以利用prior_summary()函数来达成这一目的。

在R语言环境中,通过输入vignette("priors", package="rstanarm")可以调阅有关rstanarm包中先验工作机制的更详尽的说明。

为了深入理解默认先验的含义,我们应该回忆一下,回归系数本质上表示了在预测变量 x x x上相差一个单位的两个人在结果 y y y上的预期差异。如果我们已经对 x x x y y y进行了标准化处理,那么这个系数就代表了 x x x每变化一个标准差, y y y中标准差的预期变化量。通常,我们预期这种差异的绝对值会小于1。因此,一个均值为0、标准差为2.5的正态先验分布能够帮助我们将不稳定的系数估计值向这个范围内聚合。选择2.5作为缩放因子可能看起来有些随意,但这是为了在估计过程中引入一定的稳定性,同时确保当数据本身提供的信息量达到中等水平时,对系数估计的影响降到最低。

默认先验分布可以隐式指定:

M1 <- stan_glm(vote ~ growth, data=hibbs)

或者显式指定:

sd_x <- sd(hibbs$growth)
sd_y <- sd(hibbs$vote)
mean_y <- mean(hibbs$vote)
M1a <- stan_glm(vote ~ growth, data=hibbs, prior=normal(0, 2.5*sd_y/sd_x),prior_intercept=normal(mean_y, 2.5*sd_y), prior_aux=exponential(1/sd_y))

这两个模型本质上是相同的,唯一的区别在于对于M1a我们直接指定了先验分布。

6.3.弱信息先验的设定

默认的先验设置旨在确保推断结果的稳健性。然而,在许多情况下,通过引入针对具体问题量身定制的先验信息,我们可以进一步提高分析的准确性。以选举预测为例,即使不依赖现有数据,我们也能对模型中的系数提出一些假设,该模型表达为: vote = a + b × growth + error \text{vote} = a + b \times \text{growth} + \text{error} vote=a+b×growth+error

先看截距项。在stan_glm函数中,prior_intercept参数默认根据预测变量的平均值来设定,即 a + b x ˉ a + b \bar{x} a+bxˉ。在此背景下,它反映了当经济增长处于历史平均水平时,现任政党所获得的两党票数的平均比例。即使不参考现有数据,我们也知道投票百分比 y y y 应在0到100之间,很可能接近50%。因此,我们可能会选择为 a + b x ˉ a + b \bar{x} a+bxˉ 设定一个均值为50、标准差为10的正态先验分布。

接下来考虑经济增长对现任政党票数百分比的影响系数 b b b。直觉上,我们可能期望 b b b 为正,但仅凭先验知识过于确定是不明智的;我们需要保留对数据可能揭示的意外情况的开放性。那么, b b b 的大小可能在什么范围内呢?过去一个世纪的经济增长通常在0到4%之间变动,而经济增长变量 x x x 以百分比形式编码。1%的经济增长差异是否可能导致预测的票数差异达到10%?这是有可能的,但很难想象 b b b 的值会更大。因此,我们为 b b b 指定一个均值为5、标准差为5的正态先验分布,这表明 b b b 很可能是正的,并且很可能小于10。

这些先验选择并非唯一合理的,但它们展示了如何利用对问题结构的了解来设定一个弱信息先验,为预期结果提供一个大致范围。

现在,我们可以整合这些信息来拟合模型:

M4 <- stan_glm(vote ~ growth, data=hibbs,prior=normal(5, 5), prior_intercept=normal(50, 10))

拟合模型后,我们打印出结果:

Median MAD_SD
(Intercept) 46.2 1.7
growth 3.1 0.7
Auxiliary parameter(s):
Median MAD_SD
sigma 3.9 0.7

这些推断结果与之前使用非信息性先验和默认先验得到的结果基本一致,这在当前例子中是合理的,因为我们的先验与数据相比包含的信息量较少(可以从 b b b 的后验标准误差0.7远小于先验标准差5这一事实中看出)。

6.4.信息先验的应用示例:美貌与性别比

在选举预测的案例中,加入信息先验虽无伤大雅,但并非必要。然而,有些情况下,由于数据的噪声较大,先验信息在维持合理的估计结果方面显得尤为重要。

作为示例,我们再次审视第9.4节中提到的美貌与性别比的关系,并将其放入回归分析的框架中考察。

相关数据来源于对美国青少年的吸引力进行评估的一项研究,这些评估是通过面对面调查,由访问员根据五分制量表进行的。多年后,这些受访者中的许多人已育有子女,图9.5a展示了不同吸引力等级的父母所生女孩的百分比。原先对这些数据的分析是将“极具吸引力”的父母的孩子性别比与所有其他父母的孩子性别比进行比较(这也是第9.4节中讨论的8个百分点估计值的来源),但在这里,我们将美貌视为一个连续的预测变量,使用lm进行最小二乘回归分析,得到以下结果:

coef.est coef.se
(Intercept) 49.4 1.9
x 1.5 1.4

图6.1b展示了最小二乘回归线。从斜率的标准误差可以看出,斜率非常不确定,这表明仅凭数据本身,我们对xy之间关系的了解非常有限。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8oY6nJE-1720276810936)(https://i-blog.csdnimg.cn/direct/413c636729de43d492c7c6610e5b54be.png)]
图6.1 (a) 一项调查显示,来自五个不同吸引力类别的父母所生的女孩出生百分比数据;(b) 带有拟合回归线的数据。图9.6展示了拟合中的不同不确定性表达方式。

接下来,我们使用默认先验进行贝叶斯推断:

fit_default <- stan_glm(y ~ x, data=sexratio)
print(fit_default)

得到的结果如下:

Median MAD_SD
(Intercept) 49.4 2.0
x 1.4 1.4
Auxiliary parameter(s):
Median MAD_SD
sigma 4.6 1.7

这与最小二乘估计几乎相同,这是合理的,因为默认先验设计得较弱。

然后,我们考虑一个信息先验。如第9.4节所讨论的,女孩出生的百分比通常非常稳定,在48.5%到49%之间。我们可以利用这些信息为回归系数设定弱信息先验:

  • 对于截距 a a astan_glm中的prior_intercept是针对数据中预测变量的平均值设定的;因此我们需要一个针对平均美貌水平父母的女孩百分比的先验。对于这个未知量,我们选择一个以48.8为中心,标准差为0.5的正态分布,表明在平均吸引力水平下y的预期值大致在48.8 ± 0.5的范围内。
  • 对于斜率 b b b,我们选择一个以0为中心,标准差为0.2的正态分布,表明我们没有先验期望女孩的出生与父母的美貌呈正相关或负相关,我们期望该系数大致在-0.2到0.2之间。数据中的预测变量x的范围为4,因此这相当于说,我们期望在人群中,最高和最低吸引力类别之间女孩出生百分比的差异不超过0.8。

然后我们拟合一个信息先验回归:

fit_post <- stan_glm(y ~ x, data=sexratio,prior=normal(0, 0.2), prior_intercept=normal(48.8, 0.5))
print(fit_post)

拟合模型的摘要如下:

Median MAD_SD
(Intercept) 48.8 0.5
x 0.0 0.2
Auxiliary parameter(s):
Median MAD_SD
sigma 4.3 1.3

x的估计系数并不完全是零;如果我们感兴趣,我们可以将结果显示到更多的有效数字,但无论如何,显然任何估计都被不确定性所淹没。在这种情况下,数据提供的信息如此之少,以至于后验基本上与先验相同。

图6.2展示了使用默认先验(上图)和信息先验(下图)拟合的模型的 ( a , b ) (a, b) (a,b)的后验模拟以及相应的回归线 y = a + b x y = a + bx y=a+bx。在这种情况下,先验比数据提供了更多的信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKLl2IFE-1720276810937)(https://i-blog.csdnimg.cn/direct/2afced9cba6b4e7a9df18618513c20ff.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KGENFoF9-1720276810937)(https://i-blog.csdnimg.cn/direct/7742c9930a3f496da31ee65f445108b4.png)]
图6.2 系数和回归线的100次后验模拟,针对图6.1中的美丑与性别比例数据,在给定两种不同的先验下拟合。顶部图展示了与数据和默认先验一致的参数值及其对应的回归线的广泛范围。底部图展示了使用信息先验拟合模型的结果,这极大地缩小了可能性的范围。在给定这个先验的情况下,数据几乎没有为a和b提供任何证据。

7.文献注释

想要深入了解贝叶斯方法论、相关技术和应用案例的读者,我们有以下推荐。首先,可以阅读 Gelman 等人在 2013 年出版的书籍,以及 McElreath 在 2020 年的著作。在当代,贝叶斯推断大多通过模拟手段而非解析公式来执行,尽管如此,我们认为像公式(4.1)和公式(4.2)这样的解析表达式对于理解先验信息与局部数据之间的相对权重具有启发性作用。对于那些对弱信息先验感兴趣的读者,我们建议阅读 Gelman、Simpson 和 Betancourt 在 2017 年的研究成果。

此外,关于美貌与性别比的案例分析,Gelman 和 Weakliem 在 2009 年的论文中进行了深入探讨。这篇论文不仅展示了在统计分析中如何运用贝叶斯方法和非贝叶斯方法来利用先验信息,而且对于理解贝叶斯分析在实际问题中的应用提供了宝贵的视角。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 即插即用篇 | YOLOv5/v7引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块
  • 精准注入:掌握Conda包依赖注入的艺术
  • Python不使用元类的ORM实现
  • 开源数字人项目Hallo
  • hutool ExcelUtil 导出导入excel
  • 微服务节流阀:Eureka中服务限流策略的精妙实现
  • Knife4j的原理及应用详解(四)
  • 4.MkDocs样式
  • 『C + ⒈』‘\‘
  • [ABC275A] Find Takahashi 题解
  • 基于go 1.19的站点模板爬虫
  • 记录一次排查api接口不通的问题
  • NI SCXI-1001 模块处理器控制器
  • 【work】AI八股-神经网络相关
  • 骏网一卡通之类的游戏卡有什么用?
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Electron入门介绍
  • go语言学习初探(一)
  • k个最大的数及变种小结
  • laravel with 查询列表限制条数
  • MD5加密原理解析及OC版原理实现
  • Node + FFmpeg 实现Canvas动画导出视频
  • Protobuf3语言指南
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • 回流、重绘及其优化
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 前端技术周刊 2019-02-11 Serverless
  • 深度解析利用ES6进行Promise封装总结
  • 想写好前端,先练好内功
  • 小试R空间处理新库sf
  • 一个JAVA程序员成长之路分享
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 数论-逆元
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #laravel 通过手动安装依赖PHPExcel#
  • #Linux(make工具和makefile文件以及makefile语法)
  • #pragma 指令
  • (1)STL算法之遍历容器
  • (12)Hive调优——count distinct去重优化
  • (2)Java 简介
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (day18) leetcode 204.计数质数
  • (笔试题)分解质因式
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (离散数学)逻辑连接词
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)