什么样的公式用于计算`t.test`中的p值?
What kind of formula is used to calculate the p-value in `t.test`?
所以,只是一些背景故事。在过去的 4-5 个月里,我一直在大学学习生物统计学,在此之前学习了 6 个月的生物数学。大约 5 天前,我才开始深入研究编程。
我一直在尝试用我自己的函数重做 t.test()
。
test2 = function(t,u){
T = (mean(t) - u) / ( sd(t) / sqrt(length(t)))
t1=round(T, digits=5)
df=length(t)
cat(paste('t - value =', t1,
'\n','df =', df-1,
'\n','Alternative hipotézis: a minta átlag nem egyenlő a hipotetikus átlaggal'))
}
我尝试搜索 p 值的公式,我找到了一个,但是当我使用它时,我的值与 t.test 中的不同。
t 值和 df 匹配 t.test()
。
我非常感谢任何帮助,谢谢。
P.s: 不要担心最后一行,它是匈牙利语。
R 正在做的事情的最终来源是源代码。如果您查看 stats:::t.test.default
的源代码(您可以通过在控制台中输入 stats:::t.test.default
来获得它,末尾没有括号并按回车键),您会看到 single-sample 像你在上面尝试做的那样测试,你会得到以下结果:
nx <- length(x)
mx <- mean(x)
vx <- var(x)
df <- nx - 1
stderr <- sqrt(vx/nx)
tstat <- (mx - mu)/stderr
if (alternative == "less") {
pval <- pt(tstat, df)
}
else if (alternative == "greater") {
pval <- pt(tstat, df, lower.tail = FALSE)
}
else {
pval <- 2 * pt(-abs(tstat), df)
}
这些是相关的部分(里面还有很多代码)。
p-value可以推导出t分布的概率函数pt
。使用这个并使符号在样本 x
和总体均值 mu
中更常见,我们可以使用类似的东西:
test2 <- function(x, u){
t <- (mean(x) - u) / (sd(x) / sqrt(length(x)))
df <- length(x) - 1
cat('t-value =', t, ', df =', df, ', p =', 2 * (1 - pt(q=t, df=df)), '\n')
}
set.seed(123) # remove this for other random values
## random sample
x <- rnorm(10, mean=5.5)
## population mean
mu <- 5
## own function
test2(x, mu)
## one sample t-test from R
t.test(x, mu=mu)
我们自己拿test2
:
t-value = 1.905175 , df = 9, p = 0.08914715
和 R 的 t.test
One Sample t-test
data: x
t = 1.9052, df = 9, p-value = 0.08915
alternative hypothesis: true mean is not equal to 5
95 percent confidence interval:
4.892330 6.256922
sample estimates:
mean of x
5.574626
所以,只是一些背景故事。在过去的 4-5 个月里,我一直在大学学习生物统计学,在此之前学习了 6 个月的生物数学。大约 5 天前,我才开始深入研究编程。
我一直在尝试用我自己的函数重做 t.test()
。
test2 = function(t,u){
T = (mean(t) - u) / ( sd(t) / sqrt(length(t)))
t1=round(T, digits=5)
df=length(t)
cat(paste('t - value =', t1,
'\n','df =', df-1,
'\n','Alternative hipotézis: a minta átlag nem egyenlő a hipotetikus átlaggal'))
}
我尝试搜索 p 值的公式,我找到了一个,但是当我使用它时,我的值与 t.test 中的不同。
t 值和 df 匹配 t.test()
。
我非常感谢任何帮助,谢谢。
P.s: 不要担心最后一行,它是匈牙利语。
R 正在做的事情的最终来源是源代码。如果您查看 stats:::t.test.default
的源代码(您可以通过在控制台中输入 stats:::t.test.default
来获得它,末尾没有括号并按回车键),您会看到 single-sample 像你在上面尝试做的那样测试,你会得到以下结果:
nx <- length(x)
mx <- mean(x)
vx <- var(x)
df <- nx - 1
stderr <- sqrt(vx/nx)
tstat <- (mx - mu)/stderr
if (alternative == "less") {
pval <- pt(tstat, df)
}
else if (alternative == "greater") {
pval <- pt(tstat, df, lower.tail = FALSE)
}
else {
pval <- 2 * pt(-abs(tstat), df)
}
这些是相关的部分(里面还有很多代码)。
p-value可以推导出t分布的概率函数pt
。使用这个并使符号在样本 x
和总体均值 mu
中更常见,我们可以使用类似的东西:
test2 <- function(x, u){
t <- (mean(x) - u) / (sd(x) / sqrt(length(x)))
df <- length(x) - 1
cat('t-value =', t, ', df =', df, ', p =', 2 * (1 - pt(q=t, df=df)), '\n')
}
set.seed(123) # remove this for other random values
## random sample
x <- rnorm(10, mean=5.5)
## population mean
mu <- 5
## own function
test2(x, mu)
## one sample t-test from R
t.test(x, mu=mu)
我们自己拿test2
:
t-value = 1.905175 , df = 9, p = 0.08914715
和 R 的 t.test
One Sample t-test
data: x
t = 1.9052, df = 9, p-value = 0.08915
alternative hypothesis: true mean is not equal to 5
95 percent confidence interval:
4.892330 6.256922
sample estimates:
mean of x
5.574626