单样本t检验

单样本t检验用于检测一个总体的均值One Sample t-test - 图1是否等于某个特定值。通常该总体均值One Sample t-test - 图2,未知不易测量,我们通过抽样得到样本均数One Sample t-test - 图3来代表总体均数One Sample t-test - 图4。通常抽样存在一定误差,不太可能等于总体均数One Sample t-test - 图5 ,所以我们需要关注样本均数One Sample t-test - 图6与特定值之间的差异是否存在统计学意义。

使用场景

  1. 若我们想知道某地乌龟的平均重量是否等于310磅。这里该地乌龟平均重量是总体均值,而310磅是特定值。一个一个找出该地乌龟来测量,显然不是很容易的事,所以我们可以进行随机抽样选择部分乌龟来代表总体乌龟。然后通过统计检验来检验是否该地乌龟平均重量是否等于310磅。
    One Sample t-test - 图7
  2. 若我们想尽快了解到长期从事铅作业的男性工人血红蛋白含量均数是否不等于正常男性血红蛋白含量均数One Sample t-test - 图8(一般该均数为理论值,标准值或经过大量观察所得的稳定值),可以随机抽样选择部分从事铅作业工人的血红蛋白含量样本均数。然后通过统计检验来检验是否从事铅作业的男性工人血红蛋白含量均数是否不等于正常男性血红蛋白含量均数One Sample t-test - 图9

前提假设

为使单样本t检验结果有效,需要满足一些条件。

  1. 样本之间相互独立
  2. 总体服从正太分布, 取样样本分布应近似于正态分布,
    1. 可以通过创建直方图来检查其分布形状是否大致像一个钟形
  3. 样本无异常值,可创建一个箱型图来检查

假设检验步骤

  1. 确定零假设:
    • One Sample t-test - 图10, 假设总体均值$\mu$等于$\mu_{0}$
  2. 确定备择假设,这里有3种假设方法,根据实际问题进行假设:
    • One Sample t-test - 图11, 双侧检验,总体均值One Sample t-test - 图12不等于特定值One Sample t-test - 图13
    • One Sample t-test - 图14, 双侧检验,总体均值One Sample t-test - 图15小于特定值One Sample t-test - 图16
    • One Sample t-test - 图17, 双侧检验,总体均值One Sample t-test - 图18大于特定值One Sample t-test - 图19
  3. 计算检验统计量One Sample t-test - 图20:
    One Sample t-test - 图21
    其中:
    • One Sample t-test - 图22: 样本均数
    • One Sample t-test - 图23: 特定值
    • One Sample t-test - 图24: 样本均值
    • One Sample t-test - 图25: 样本大小
  4. 计算p-value:
    选择一个显著性水准$\alpha$,(一般为0.01,0.05,0.1),然后根据One Sample t-test - 图26和自由度$df$One Sample t-test - 图27,去找到相应的P-value。可以去查t界值表或者通过程序计算出来。

实例计算

以之前乌龟的那个案例为例,若随机取样选择40个乌龟,其平均重量为$\bar{X}=300$,标准差$S=18.5$,则建立检验假设,确认检验水准$\alpha$:

  • One Sample t-test - 图28 ,即假设乌龟总体平均重量等于310磅
  • One Sample t-test - 图29,即乌龟总体平均重量不等于310磅
  • $\alpha=0.05$
    计算t检验统计量:
    One Sample t-test - 图30
    One Sample t-test - 图31
    One Sample t-test - 图32 查t界值表可知(若是通过程序T Score to P Value Calculator计算,可得出P=0.00149),One Sample t-test - 图33, 可知One Sample t-test - 图34, 故可以拒绝零假设One Sample t-test - 图35,接受One Sample t-test - 图36, 可认为该地乌龟的平均重量不等于310磅。

Python 代码实现

一般常见的算法,都是有Python库封装好的了,我们直接调用它给的接口就行了。
这里借助一个Python科学计算库 scipy, 一般可以通过命令pip install scipy安装。

  1. import scipy.stats as stats
  2. ## 数据就使用下面这个data,当作样本,作为演示
  3. ## 分别为某种植物12株植物的高度,单位英寸。
  4. data = [14, 14, 16, 13, 12, 17, 15, 14, 15, 13, 15, 14]
  5. ## 假设该种植物总体平均高度为15
  6. popmean = 15
  7. ## 通过stats.ttest_1samp 进行单样本t检验和P-value 计算
  8. res = stats.ttest_1samp(a=data, popmean=15)
  9. print("t statistic: ", res.statistic)
  10. print("P Value: ", res.pvalue)
  11. ## output
  12. ## t statistic: -1.6848470783484626
  13. ## P Value: 0.12014460742498101

结果说明:
One Sample t-test - 图37 假设该植物平均高度为15英寸
One Sample t-test - 图38 该植物平均高度不为15英寸
因为此次检验p-value(0.1201) 大于 $\alpha=0.05$, 不能拒绝$H_{0}$,所以没有的证据说明该植物的平均高度不同于15英寸。

R代码

t-test在R里使用t.test进行计算

  1. > data <- c(14, 14, 16, 13, 12, 17, 15, 14, 15, 13, 15, 14)
  2. > t.test(data, alternative = "two.sided", mu=15)
  3. One Sample t-test
  4. data: data
  5. t = -1.6848, df = 11, p-value = 0.1201
  6. alternative hypothesis: true mean is not equal to 15
  7. 95 percent confidence interval:
  8. 13.46244 15.20423
  9. sample estimates:
  10. mean of x
  11. 14.33333

t.test 中的参数alternative设置备择假设的单双尾检验,默认为”two.sided” ,双尾检验,单位设置成”greater”或”less”, 参数mu,假设的总体均值。结果和Python的一样,甚至更详细。

参考

One Sample t-test: Definition, Formula, and Example