
本研究借助 Stata 面向基础统计学教学的可视化工具,阐释抽样分布、标准误、置信区间(CI)与 p 值的理论内涵。设定核心研究问题:美国得克萨斯州大学城(CSTX)糖尿病确诊人群的平均身体质量指数(BMI),相较于非糖尿病人群是否存在更高水平?
总体如果你有一个可用作总体的数据集,那就太好了!直接使用。或者你可以让学生收集数据,从每个 11 年级学生中收集。否则,你需要模拟一个总体数据集。由于我无法从CSTX中的每个人那里收集数据,所以我将使用模拟人群进行演示。首先,我新建一个名为population的数据框架,并切换至该数据集。
. frame create population
. frame change populations
我设置了一个随机数种子以确保结果可重复,并设置了观测次数。我使用135,000,因为这是CSTX地区居民的估计人数,即我的总体规模。
. set seed 12
. set obs 135000
Number of observations (_N) was 0, now 135,000.
然后我们将使用Stata的随机数生成器来模拟人群中的BMI和糖尿病发病率。有关可用分布的完整列表,请参见[FN] 随机数函数,或在Stata的命令窗口中输入help random number functions。我们将采用正态分布生成体质指数(BMI)数据,采用二项分布生成糖尿病患病数据。我快速查阅网络资料获取这两种分布的超参数,也就是美国人群 BMI 的均值与标准差,以及糖尿病确诊人群的占比。本次二项分布的试验次数设为 1,因为我们仅模拟单一结局:是否患有糖尿病。我给所有糖尿病人群的 BMI 数值统一加 2,使其平均 BMI 比非糖尿病人群高出 2 个单位。
. generate diabetes = rbinomial(1,0.12)
. generate bmi = rnormal(27,6) + 2 * diabetes
为生成的变量分配标签和值标签(如适用)是很好的做法。
. label variable bmi "Body mass index"
. label variable diabetes "Diabetes diagnosis"
. label define diab 0 "Not diabetic" 1 "Diabetic"
. label values diabetes diab样本我们可以使用sample命令从该总体中提取一个样本,仅抽取总体的0.1%。我们首先使用preserve命令来保存我们的总体数据。
. preserve
. sample 0.1
(134,865 observations deleted)
我们对这个样本进行t检验,以测试糖尿病组的平均BMI是否不同。

前两部分提供了各组及其合并样本的一些信息。最后一行标有“diff”,是我们要检验的内容。该样本中BMI均值的差异为1.19(标准误=1.30;95%置信区间[-3.76, 1.39])。结果表中的均值差异估计值为负数,是因为计算时用非糖尿病患者的平均BMI减去了糖尿病患者的平均BMI。
t统计量就是均值差除以其标准误。我们可以利用返回结果中的平均值和标准误差的差异来手动计算。

我们使用保存为r(mu_diff)的均值差和保存为r(se)的标准误来计算t值。
. display r(mu_diff)/r(se)
-.91326163
这与结果表中报告的t统计量相同。如果你不确定某个统计量是如何计算的,可参阅[R] ttest中的Methods and formulas。使用这个样本,我们没有足够的证据得出两组之间存在差异的结论,t(133) = 0.91,p = 0.181。我们使用下尾p值,因为我们的假设是糖尿病组的平均BMI高于非糖尿病组。如果我们采样了一组不同的观测值会怎样?首先,让我们恢复并再次保存总体。
. restore
. preserve
现在,我们使用不同的随机数种子,然后重新抽样并检验。

使用这个样本,我们有证据表明平均BMI存在群体差异,t(133) = 2.00,p = 0.024。
将这个样本放入名为sample的框架中,然后恢复我们的总体。
. frame put *, into(sample)
. restore
样本间的变异性是进行统计推断的关键。因为我们拥有总体,所以可以构建抽样分布来亲眼观察这种变异。抽样分布我们首先创建一个名为sampling的新数据框,包含变量diff、se、ub和lb。
. frame create sampling diff se ub lb然后,我们使用for循环收集100个样本,每个样本包含总体的0.1%。我们对每个样本进行t检验,并将平均值、标准误差和CI上下限的估计差异发布到sampling框架中。我们在sample和ttest前加上quietly以抑制输出。
. forvalues i = 1/100 {
2. preserve
3. quietly sample 0.1
4. quietly ttest bmi, by(diabetes)
5. frame post sampling (r(mu_diff)) (r(se)) (r(ub_diff)) (r(lb_diff))
6. restore
7. }
我们切换到刚创建的sampling数据框。
. frame change sampling
我们先看一下均值差的直方图。
. histogram diff
(bin=10, start=-6.039753, width=.72761365)

这是根据糖尿病诊断情况得出的BMI均值差异的抽样分布。我们可以看到,大多数样本值集中在-2附近,这与预期一致,但数据存在较大的离散程度。同时注意到,该分布近似正态分布。这是由于中心极限定理所致,该定理指出,随着样本量的增加,独立、同分布随机变量的样本均值分布接近正态分布,而与原始总体的分布无关。
标准误差抽样分布的标偏差称为标准误差。当我们对样本进行t检验时,也会得到标准误差的估计值。它告诉我们样本估计值与总体参数之间预期的距离。

根据该抽样分布估计的标准误为1.48。我们发现,即使仅使用100个样本,样本的平均估计标准误差1.61也接近这一数值。随着抽样分布中样本数量的增加,这两个数值将逐渐趋近,其均值之差也将趋于-2。
你也可以让学生在构建抽样分布时使用不同的样本量,以观察这如何影响标准误。使用sample命令的count选项可直接抽取特定数量的观测值,而不是按百分比抽样。
CICI是思考样本间变异性的另一种方式。如果我们重复抽样过程多次,所构建的95%置信区间中有95%将包含真实的、未知的总体参数。由于我们的抽样分布中有100个样本,我们预计其中95个样本包含-2,即真实的差异。让我们看看我们从采样分布中的每个样本中收集的CI。我们先排序,然后创建变量i,按点估计从小到大在x轴上排序,接着使用twoway rpcap进行可视化。
. sort diff
. generate i = _n
. twoway (rpcap lb ub diff i)

让我们在真正的差异处添加一条-2的参考线,并添加标题。
. twoway (rpcap lb ub diff i), ytitle("Difference in means") yline(-2)
> xtitle("") xlabel(none, nolabels) title("100 95% confidence intervals")
> subtitle("95 contain the true population parameter (dashed line)")

我们可以看到,第一个置信区间和最后四个置信区间都不包含真实值。
当我们在样本中计算置信区间时,它表示的是我们有95%的把握认为真实总体参数落在该范围内。通过本次演示我们可以清晰看出,“95% 置信” 指的是:在重复抽样得到的众多置信区间中,包含真实总体参数的区间所占的百分比;而非一种常见的错误解读--认为由单次样本构建出的区间有95%的可能性(0.95的概率)包含真实参数。
p值还有一个概念我想介绍一下:p值。它们常常被误解和误用,因此我认为让学生理解p值是什么以及它真正告诉我们什么非常重要。要理解p值,需要构建一个零假设的抽样分布,即从没有影响的总体中提取采样分布。要创建零假设的抽样分布,我们可以遵循构建备择抽样分布的相同流程,但不给糖尿病组加2,但我们其实不必这样做。我们确切地知道,来自零假设总体的t统计量分布会是什么样子:它们将服从t分布!这正是我们一开始就费心构建检验统计量的原因。
我们首先使用twoway function 图来可视化 t 分布。
. twoway (function density = tden(133,x), range(-3 3)), xtitle({it:t))

这是来自糖尿病组与非糖尿病组平均 BMI 无差异总体的 t 值抽样分布。如预期所示,该分布以0为中心。
让我们再次查看上一个样本的t检验。

我们得到一个t统计量为-1.99,底部看到三个p值:下尾、双尾和上尾。
下尾p值告诉我们,如果总体中BMI的均值没有差异,计算得到小于-1.99的t统计量的概率为0.024,即约2%。我们可以使用累积学生t分布函数t(df, t)来重复这个数值,其中df是样本的自由度133,t是样本的t统计量-1.9976。
. display t(133,- 1.9976)
.02390008
该函数计算 t 分布累积到 -1.9976 的概率。为可视化这一点,我们在t分布图中添加了一条x轴线。
. twoway (function density = tden(133,x), range(-3 3)),
> xtitle({it:t}) xline(-2)

2.4%的分布位于虚线左侧。
上尾p值告诉我们,如果总体中BMI的均值没有差异,计算得到大于-1.99的t统计量的概率为0.976,约98%。同样,我们可以使用累积分布函数复现这个数值,这次用1 减去它。
. display 1 - t(133,- 1.9976)
.97609992
现在我们计算图中虚线右侧的概率,即1减去左侧概率。双尾p值就是较小p值的两倍,此处即下尾p值的两倍。
. display 2 * t(133,- 1.9976)
.04780016
它告诉我们计算t统计量小于-1.99或大于1.99的概率。我们可以在图表中添加第二条线来直观地展示这一点。
. twoway (function density = tden(133,x), range(-3 3)), xtitle({it:t})
> xline(-2) xline(2)

双尾p值是第一条虚线左侧的比例加上第二条虚线右侧的比例。换句话说,它告诉我们,如果组间没有真正的差异,得到与我们样本中计算的统计量一样极端或更极端的 t 统计量的概率为5%。
结论在本文中,我们通过模拟和可视化探讨了如何演示统计推断的以下核心内容:抽样分布、标准误、置信区间和p值。
只有当学生能够自主观测、厘清总体和样本之间的逻辑关系,统计学的魅力才能充分显现。