zoukankan      html  css  js  c++  java
  • 两样本检验

    Two Sample t-test

    两样本t检验用于检验两个总体的均值是否相等。两总体都是未知的,且我们不想或不易测量出总体所有的个体,来求得总体均值。所以我们从总体中随机抽样得到样本。对两样本进行统计检验,来看两样本差异是否显著。

    案例

    1. 若我们想知道两个不同物种的乌龟的平均重量是否相等。我们可以进行随机抽样选择部分乌龟来代表总体乌龟。由于存在误差,两个物种样本的平均重量是存在差异的。而我们可以通过two sample t-test知道它们之间的差异是否显著。

    前提假设

    为使 two sample t-test结果有效,需要满足一些条件。

    1. 两总体相互独立
    2. 两总体均服从正太分布,且两总体方差相等,若不相等考虑Welch’s t-test
      • 样本应近似正太分布,以及两样本方差也因近似相等

    假设检验步骤

    1. 确定零假设:

      • (H_{0}: mu_{1}=mu_{2}), 假设l两总体均值相等,(mu_{1})等于(mu_{2})
    2. 确定备择假设,这里有3种假设方法,根据实际问题进行假设:

      • (H_{1}: mu_{1} emu_{2}), 双侧检验,总体均值(mu_{1})不等于(mu_{2})
      • (H_{1}: mu_{1}<mu_{2}), 双侧检验,总体均值(mu_{1})小于(mu_{2})
      • (H_{1}: mu_{1}>mu_{2}), 双侧检验,总体均值(mu_{1})大于(mu_{2})
    3. 计算检验统计量(t):
      (t=frac{(ar{X_{1}}-ar{X_{2}})}{S_p(frac{1}{n_{1}}-frac{1}{n_{2}})})
      其中:
      - (ar{x_1}, ar{x_2}): 样本均数
      - (n_1, n_2): 样本大小
      - (S_{p})计算 (S_p = sqrt{frac{(n_1-1)S^{2}_{1}+(n_2-1)S^{2}_{2} }{n_{1}+{n_{2}-2}}})
      - (S^{2}_{1}, S^{2}_{2}): 样本方差

    4. 计算p-value:
      选择一个显著性水准(alpha),(一般为0.01,0.05,0.1),然后根据(alpha)和自由度(df)((n-1)),去找到相应的P-value。可以去查t界值表或者通过程序计算出来。

    实例计算

    以之前乌龟为例,若样本数据为:

    • 样本大小: (n_1 = 40), $ n_2=38$
    • 样本均值: (ar{X_1} = 300)(ar{X_2}=305)
    • 样本标准差: (S_1 = 18.5), $ S_2=16.7$

    建立检验假设,检验水准

    • (H_{0}: mu_{1}=mu_{2}) ,即假设两物种乌龟总体平均重量相等
    • (H_{1}: mu_{1} emu_{2}),即两物种乌龟总体平均重量不相等
    • (alpha=0.05)

    计算t检验统计量:

    [S_p=sqrt{frac{(n_1-1)S^{2}_{2} + (n_2-1)S^{2}_{2} }{n_1+n_2-2}} = sqrt{frac{(40-1)18.5^2+(38-1)16.7^2}{40+38-2 }} = 17.647 ]

    [t=frac{(ar{X_{1}}-ar{X_{2}})}{S_p(frac{1}{n_{1}}-frac{1}{n_{2}})}= frac{300-305}{17.647(sqrt{frac{1}{40}+frac{1}{38}})} = -1.2508 ]

    [df = n_1+n_2-2=40+38-2=76 ]

    ( u=76、|t|=|-1.2508|=1.2508) 为输入通过程序T Score to P Value Calculator计算,可得出(P=0.21484)

    确定结论
    (p=0.21484>alpha=0.05), 故不拒绝零假设(H_{0}),差异无统计学意义。没有充分理由说明两个乌龟物种的平均重量不相等。

    Python 代码实现

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

    import numpy as np
    import scipy.stats as stats
    
    ## 研究者想知道两种植物的平均高度是否相等,所以他们各搜集了20株植物
    ## group1,group2分别为两个植物样本身高
    group1 = np.array([14, 15, 15, 16, 13, 8, 14, 17, 16, 14, 19, 20, 21, 15, 15, 16, 16, 13, 14, 12])
    group2 = np.array([15, 17, 14, 17, 14, 8, 12, 19, 19, 14, 17, 22, 24, 16, 13, 16, 13, 18, 15, 13])
    
    # 确定总体方差是否相等
    # 根据经验,如果较大的样本方差与较小的样本方差之比小于4:1,我们可以假定总体具有相同的方差。
    print(np.var(group1), np.var(group2))
    # 7.73 12.26  # 12.26 / 7.73 = 1.586,小于4。这意味着我们可以假设总体方差相等
    
    
    ## 通过stats.ttest_ind 进行两样本t检验
    res = stats.ttest_ind(a=group1, b=group2, equal_var=True)
    print("t statistic: ", res.statistic)
    print("P Value: ", res.pvalue)
    ## output
    ## t statistic:  -0.6337397070250238
    ## P Value:  0.5300471010405257
    

    stats.ttest_ind 的参数ab分布是第一个样本和第二个样本;equal_var只两个总体方差是否相等。默认为True,若为False应使用Welch’s t-test

    结果说明:

    (H_{0}: mu_{1}=mu_{2}) 假设两种植物平均高度相等
    (H_{1}: mu_{1} emu_{2}) 该植物平均高度不相等

    因为此次检验p-value(0.53005) 大于 (alpha=0.05), 不能拒绝(H_{0}),所以没有充分的证据说明两植物的平均高度不同。

    R代码

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

    > group1 <- c(14, 15, 15, 16, 13, 8, 14, 17, 16, 14, 19, 20, 21, 15, 15, 16, 16, 13, 14, 12)
    > group2 <- c(15, 17, 14, 17, 14, 8, 12, 19, 19, 14, 17, 22, 24, 16, 13, 16, 13, 18, 15, 13)
    > ?t.test
    > t.test(group1, group2, alternative = "two.sided", var.equal = T, mu=0)
    
    	Two Sample t-test
    
    data:  group1 and group2
    t = -0.63374, df = 38, p-value = 0.53
    alternative hypothesis: true difference in means is not equal to 0
    95 percent confidence interval:
     -2.726335  1.426335
    sample estimates:
    mean of x mean of y 
        15.15     15.80 
    

    t.test 中的参数设置:

    • alternative设置备择假设的单双尾检验,默认为"two.sided" ,双尾检验,单位设置成"greater"或"less"
    • 参数mu,为两总体的差异均值,这里设为0,因为假设了两总体均值相等。所以差值为0。
    • var.equal, 两总体方差是否相等

    最后的结果和Python中的一样,甚至更详细。

    参考

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

  • 相关阅读:
    修改MySQL密码
    struts入门
    监听
    游戏外挂教程(转)
    “无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性 “之解决
    C# PropertyGrid控件应用心得
    登录时的"记住我"
    自动登录、记住我(保存登陆状态)实现
    UpdatePanel的使用方法
    asp.net中使用基于角色role的Forms验证
  • 原文地址:https://www.cnblogs.com/huanping/p/14094494.html
Copyright © 2011-2022 走看看