什么样的公式用于计算`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