[英]Mathematical formula underlying t.test function in R
有人知道R使用哪个数学公式来执行t检验吗?
如果我在互联网上查找,如果找到不同的可能数学公式:我尝试使用以下 3 个公式“手动”进行 t 检验(您可以在以下 2 个图片中看到):
然而,如果我将找到的 p 值与 R 中的 t.test 函数给我的 p 值进行比较,我会得到非常不同的结果。 -> 当我尝试使用 3 个不同的公式时,每次都会得到不显着的 p 值。 -> 当我尝试使用 r 函数时,我得到了一个显着的 p 值。
这是我的代码:
#Loading the data
library("lingpsych")
data("df_gibsonwu")
#Preparing the data
bysubj <- aggregate(rt~subj + type, mean, data=df_gibsonwu)
ORSR <- bysubjOR$rt - bysubjSR$rt
meanOR <- mean(bysubjOR$rt)
meanSR <- mean(bysubjSR$rt)
# Paired t-test by hand:
n <- 37
SE0 <- sqrt(((sd(bysubjOR$rt)^2) /n)+((sd(bysubjSR$rt)^2)/n))
SE1 <- sqrt(((n * sum(ORSR))^2 - (sum(ORSR)))^2 / n-1)
SE2 <- sd(bysubj$rt) / sqrt(n)
tvalue0 <- (meanOR - meanSR) / SE0
tvalue1 <- (sum(ORSR)) / SE1 #Which I think, is the correct formula for a paired-t-test?
tvalue2 <- (meanOR - meanSR) / SE2
critT <- qt(0.975,n-1)
pvalue0 <- 2*(pt(tvalue0, n-1, lower.tail=FALSE))
pvalue1 <- 2*(pt(tvalue1, n-1, lower.tail=FALSE))
pvalue2 <- 2*(pt(tvalue2, n-1, lower.tail=FALSE))
# Paired t-test using the R function:
t.test(bysubj$rt ~ bysubj$type, paired=TRUE)
结果如下:pvalue0 = 1.959, pvalue1 = 1.000, pvalue2 = 1.994,
r 函数的 p 值:0.01248
预先感谢您的帮助! :)
您需要确保正确重新排列/配对数据。
bysubj <- aggregate(rt~subj + type, mean, data=df_gibsonwu)
dd <- data.frame(obj = bysubj[bysubj$type=="obj-ext", "rt"],
subj = bysubj[bysubj$type=="subj-ext", "rt"])
xdiff <- dd[,1] - dd[,2]
n <- nrow(dd)
tstat <- mean(xdiff)/sqrt(var(xdiff)/n)
## -2.63007
正如@rawr 在评论中建议的那样,我通过查看stats:::t.test.default
的代码得到了这个
使用2*pt(abs(), ..., lower.tail = FALSE)
可以得到负或正 t 统计量的双尾 p 值。
df <- n - 1
2*pt(abs(tstat), df, lower.tail = FALSE)
## 0.01248
使用t.test()
:
t.test(dd$subj, dd$obj, paired = TRUE)
## t = 2.6301, df = 36, p-value = 0.01248
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.