• R语言代写Wilcoxon符号秩检验与配对学生t检验


    原文链接:http://tecdat.cn/?p=3172

    在这篇文章中,我们将探索比较两组依赖(即成对)定量数据的测试:Wilcoxon符号秩检验和配对学生t检验。这些测试之间的关键区别在于Wilcoxon的测试是非参数测试,而t测试是参数测试。在下文中,我们将探讨这种差异的后果。

    睡眠数据集

    我们来考虑睡眠数据集。数据集通过提供服用药物后睡眠时间与基线相比的变化来对比两种催眠药物(即安眠药)的效果:

     
    ##    extra group ID
    ## 1    0.7     1  1
    ## 2   -1.6     1  2
    ## 3   -0.2     1  3
    ## 4   -1.2     1  4
    ## 5   -0.1     1  5
    ## 6    3.4     1  6
    ## 7    3.7     1  7
    ## 8    0.8     1  8
    ## 9    0.0     1  9
    ## 10   2.0     1 10
    ## 11   1.9     2  1
    ## 12   0.8     2  2
    ## 13   1.1     2  3
    ## 14   0.1     2  4
    ## 15  -0.1     2  5
    ## 16   4.4     2  6
    ## 17   5.5     2  7
    ## 18   1.6     2  8
    ## 19   4.6     2  9
    ## 20   3.4     2 10

    extra表示与基线测量相比睡眠中的增加/减少(正/负值),表示药物,ID表示患者ID。为了更清楚,我将重命名为药物

     >colnames(sleep)[which(colnames(sleep) ==  

    注意,睡眠数据集包含每个患者的两个测量值。因此,它适合于展示配对测试,例如我们正在处理的测试。

    我们测试的是什么?

    假设我们在一家制药公司工作,这些是刚从临床试验中获得的数据。现在,我们必须决定你应该推出哪两种药物用于市场释放。选择药物的合理方法是确定表现更好的药物。更具体地说,问题是:用更大的值相关联的药物之一额外的比其他药物?

    为了直观了解这两种药物的有效性,让我们绘制相应的值:

    该图显示药物1的睡眠时间的中值增加接近0,而药物2的中值增加接近2小时。因此,根据这些数据,似乎药物2比药物1更有效。但是,我们仍需要确定我们的发现是否具有统计学意义。

    零假设

    该测试的零假设是两种药物之间的额外睡眠时间没有任何差异。由于我们想知道药物2是否优于药物1,我们不需要双尾测试(测试任何药物是否具有优异的性能),而是单尾测试。因此,零假设的备选方案是药物2与更大的值相关联的额外的比药物1。

     Wilcoxon符号秩检验

    Wilcoxon签名等级测试使用签名等级的总和作为测试统计 w ^w ^:

    w ^= Σi = 1ñ[ sgn(x2 ,我- x1 ,我)⋅ ř一世]w ^=Σ一世=1ñ[SGN⁡(X2,一世- X1,一世)⋅[R一世]

    在这里, 一世一世- 的 ññ 测量对用表示 X一世= (x1 ,我,x2 ,我)X一世=(X1,一世,X2,一世) 和 [R一世[R一世表示该对的等级。等级仅表示观察在有序列表中的位置| X2 ,我- x1 ,我||X2,一世- X1,一世|。测试统计量的存在是具有大的绝对差异的对将具有大的等级[R一世[R一世。因此,这些对是决定因素w ^w ^,虽然表现出小的绝对差异的对具有低 [R一世[R一世因此对测试结果的影响很小。由于检验统计量是基于排名而不是测量值本身,因此Wilcoxon符号秩检验可以被认为是测试两组之间中值变化。

    要在R中执行测试,我们可以使用该wilcox.test功能。但是,我们必须明确设置配对参数,以表明我们正在处理匹配的观察。要指定单尾测试,我们将替代参数设置为更大。以这种方式,测试的替代方案是药物2是否与睡眠持续时间的较大增加相关联而不是药物1。

     code>x <- sleep$extra[sleep$drug == <span style="color:#880000">2</span>]
    y <- sleep$extra[sleep$drug == <span style="color:#880000">1</span>]
    res <- wilcox.test(x, y, paired = <span style="color:#78a960">TRUE</span>, 
                       alternative = <span style="color:#880000">"greater" 
    ## Warning in wilcox.test.default(x, y, paired = TRUE, alternative =
    ## "greater"): cannot compute exact p-value with ties
    ## Warning in wilcox.test.default(x, y, paired = TRUE, alternative =
    ## "greater"): cannot compute exact p-value with zeroes

     警告

    在获得结果之前,我们应该调查执行测试所产生的两个警告。

    警告1:关系

    出现第一个警告是因为测试extra对对的值进行了排序。如果两对共享相同的差异,则在排名期间会出现关系。我们可以通过计算对之间的差异来验证这一点

    <span style="color:#000000"><code>x - y</code></span>
    ##  [1] 1.2 2.4 1.3 1.3 0.0 1.0 1.8 0.8 4.6 1.4

    并发现对3和4都具有1.3的相同差异。为什么领带有问题?分配给关系的等级基于它们所跨越的等级的平均值。因此,如果存在许多联系,则会降低检验统计量的表现力,使得Wilcoxon检验不合适。由于我们这里只有一个关系,这不是问题。

    警告2:零值

    第二个警告涉及差异为0的对。在睡眠数据集中,来自第5个患者的情况就是这种情况(见上文)。为什么零是个问题?请记住,零假设是对的差异以0为中心。但是,观察值恰好为0的差异并不能为我们提供任何拒绝零的信息。因此,在计算测试统计量时丢弃这些对。如果许多对的情况如此,则测试的统计功效将大幅下降。同样,这对我们来说不是问题,因为只存在一个零值。

    调查结果

    测试的主要结果是它的p值,可以通过以下方式获得:

    <span style="color:#000000"><code>res$p.value</code></span>
    ## [1] 0.004545349

    由于p值小于5%的显着性水平,这意味着我们可以拒绝零假设。因此,我们倾向于接受替代假设,该假设指出药物2优于药物1。

    配对学生的t检验

    配对Student's t检验是对两组配对定量测量方法的参数检验。这里,参数意味着t检验假设样本之间的平均差异是正态分布的。测试依赖于确定两组的测量值的平均差异,X¯dX¯d 大于 μdμd,哪里 μdμd通常设置为0以查找是否存在任何差异。测试统计,

    t = X.¯d- μ0小号dñ√,Ť=X¯d- μ0小号dñ,

    使用差异的标准差归一化, 小号d小号d,以及对的数量 ññ。按照规范化小号dñ√小号dñ,检验统计量根据样本数量调整检验统计量的值(| t ||Ť| 随着样本的增加而增加)和差异的标准差(| t ||Ť| 如果偏差增加则减少)。

    在R中,我们可以使用该t.test函数执行配对t检验。请注意,t.test假设人口差异不相等。在这种情况下,测试也称为Welch的t检验。为了获得原始t检验,假设人口方差相等,我们可以将equal.var参数设置为TRUE。在这里,我们将使用默认设置:

    <span style="color:#000000"><code>t.result <- t.test(x,y, paired = <span style="color:#78a960">TRUE</span>, alternative = <span style="color:#880000">"greater"</span>)
    print(t.result$p.value)</code></span>
    ## [1] 0.001416445

    同样,p值小于0.05。因此,我们倾向于接受替代假设:药物2与平均睡眠持续时间的增加相关,而不是药物1。

    检查学生t检验的假设

    t检验要求样本均值是正态分布的。通过中心极限定理,来自总体的样本的均值接近正常分布的足够数量的样本。因此,只要存在足够数量的样本,即使对于非正常测量,也满足t检验的假设。由于睡眠数据仅包含10对配对测量,因此应该有理由担心。因此,我们应检查测量之间的差异是否正常分布,以验证t检验是否有效:

    <span style="color:#000000"><code>diff.df <- data.frame(diff = sleep$extra[sleep$drug == <span style="color:#880000">1</span>] - sleep$extra[sleep$drug == <span style="color:#880000">2</span>])
    ggplot(diff.df, aes(x = diff)) + geom_histogram()</code></span>
    ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

    查看直方图,数据似乎比正态分布更均匀。为了进一步了解,我们将差异与使用QQ(分位数 - 分位数)图的正态分布预期的值进行比较:

    <span style="color:#000000"><code><strong>require</strong>(car) <span style="color:#888888"># load car package to use 'qqp' rather than native 'qqplot' function</span></code></span>
    ## Loading required package: car
    <span style="color:#000000"><code>qqp(diff.df$diff)</code></span>

    QQ图显示,除了重尾之外,差异非常适合普通模型。由此,我们可以得出结论,充分满足了t检验的假设。尽管如此,我们还是对t检验是否是这些数据最合适的选择感到不确定。

    摘要:Wilcoxon符号秩检验与配对学生t检验

    在这项分析中,Wilcoxon符号秩检验和配对学生t检验导致拒绝零假设。但总的来说,哪种测试更合适?答案是,它取决于几个标准:

    • 假设:学生的t检验是一种比较均衡的方法,而Wilcoxon则测试数据的排序。例如,如果您正在分析具有许多异常值的数据,例如个人财富(少数亿万富翁可能会极大地影响结果),那么Wilcoxon的测试可能更合适。
    • 解释:虽然也可以计算Wilcoxon检验的置信区间,但在t检验中平均值的置信区间似乎比Wilcoxon检验的假医生更为自然。
    • 假设的实现:对于小样本量,可能无法满足学生t检验的假设。在这种情况下,选择参数测试通常更安全。然而,如果满足t检验的假设,它具有比Wilcoxon检验更大的统计功效。

    由于睡眠数据集的样本量很小,我更喜欢Wilcoxon的测试这些数据。

    你会用哪种测试?一般来说,你更喜欢一个测试吗?

    • 如果您有任何疑问,请在下面发表评论。 

  • 相关阅读:
    C#计算两个时间年份月份天数(根据生日计算年龄)差,求时间间隔
    C#四舍五入保留一位小数
    给Editplus去掉.bak文件
    $().each() 与 $.each()解析
    VS 2013+Qt 5.4.1
    HDU 5228 ZCC loves straight flush( BestCoder Round #41)
    产品经理的修炼:如何把梳子卖给和尚
    c++ STL unique , unique_copy函数
    linux定时备份mysql数据库文件
    Python——异常基础
  • 原文地址:https://www.cnblogs.com/tecdat/p/10820878.html
Copyright © 2020-2023  润新知