在t检验中根据t值手动计算P值


48

我有一个31个值的样本数据集。我使用R进行了两尾t检验,以检验真实均值是否等于10:

t.test(x=data, mu=10, conf.level=0.95)

输出:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

现在,我正在尝试手动执行相同的操作:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

使用此方法计算的t值与t检验R函数的输出相同。但是,p值为3.025803e-12。

有什么想法我做错了吗?

谢谢!

编辑

这是完整的R代码,包括我的数据集:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)

Answers:


43

使用pt并使其成为两尾。

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
我认为缺少一个细节:何时使用lower = F?-请在这里查看我的问题:stats.stackexchange.com/questions/133091/…–
vonjd

3
该值必须为正数,因此,如果将其与可能为负数的变量一起使用,请使用abs
亚伦-恢复莫妮卡2015年

3
对于两尾测试,您正在寻找该值小于-11.244或大于+11.244的可能性。lower = F告诉R计算该值大于第一个参数的概率。否则,它使您有可能该值小于第一个参数。因此,您也可以执行2 * pt(-11.244,30)。就我个人而言,我通常会做2 * pt(-abs(q),df = n-1),因为R默认为lower = T。
阿希奇

9

我将其发布为评论,但是当我想添加更多编辑内容时,它变得太长了,因此将其移至此处。

编辑:您的测试统计信息和df是正确的。另一个答案指出了对的调用中尾部面积的计算pt()以及两个尾部加倍的问题,从而解决了您的差异。不过,我将保留先前的讨论/评论,因为它使有关极端情况下的p值的讨论更为笼统:

可能您可能没有做错任何事情,但仍然会有所作为,但是如果您发布可复制的示例,则有可能进一步调查您是否有错误(例如在df中)。

这些东西是从近似值计算出来的,这些近似值在最极端的尾部可能不是特别准确。

如果这两件事不使用相同的近似值,它们可能不会紧密一致,但是缺乏一致就无关紧要(因为确切的尾部区域远远超出了有意义的数字,所以所需的假设必须保持惊人的程度)。准确性)。您真的有完全正态性,完全独立性,完全恒定的方差吗?

2×10-123×10-120.0001


6

手动计算的最佳方法是:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1个


0

我非常喜欢@Aaron提供的答案以及abs评论。我发现一个方便的确认是要运行

pt(1.96, 1000000, lower.tail = F) * 2

产生0.04999607

在这里,我们使用众所周知的属性,即正态分布下95%的面积出现在〜1.96标准偏差下,因此〜0.05的输出给出了我们的p值。我使用1000000,因为当N很大时,t分布几乎与正态分布相同。运行它使我在@Aaron的解决方案中感到安慰。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.