手动计算 t 检验的 p 值:如何避免值大于11?

机器算法验证 r t检验 p 值
2022-04-04 20:11:19

这两种计算 p 值的方法应该是等价的:

t.test(rats.drug,mu=1.2)$p.value
2*pt((mean(rats.drug)-1.2)*sqrt(n)/sd(rats.drug),df=n-1)

第二种方法的问题是存在获得大于的值的风险(实际上最多):12

2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1)
[1] 2

这当然可以通过

2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1,lower=F)
[1] 3.245916e-08

我的问题
显然,t检验函数的算法足够智能,可以区分这两种情况(样本均值是大于还是小于给定均值)。是否有一种简单的方法可以手动复制 p 值的计算,因为它是由 t 检验函数完成的?

我目前的解决方案是一个 if 语句,它检查结果值是否大于,在这种情况下,使用 lower=F 选项再次进行相同的计算,但也许有更好的方法。1

2个回答

您可以abs在分子中使用 (因此它始终 > 0)并保留lower.tail=FALSE.

Glen_b 是绝对正确的abs,但是,我发现在某些数据集中,这些值需要-abs达到预期的效果。我无法解释原因,但我会将这行代码留在这里,以防遇到类似问题的任何人找到这个线程。

  t.value <- betacoeff/standard error of the beta coefficients
  p.value <- 2 * pt(-abs(t.value), df = nrow(data)-2)

应 mdewey 的要求扩展了答案。