如何在线性回归中手动计算 t 统计量的 p 值

How to manually compute the p-value of t-statistic in linear regression

我对自由度为 178 的双尾 t 检验进行了线性回归。 summary 函数为我的两个 t 值提供了两个 p 值。

t value Pr(>|t|)
5.06    1.04e-06 ***
10.09    < 2e-16 ***
...
...
F-statistic: 101.8 on 1 and 178 DF, p-value: < 2.2e-16

我想用这个公式手动计算 t 值的 p 值:

p = 1 - 2*F(|t|)

p_value_1 <- 1 - 2 * pt(abs(t_1), 178)
p_value_2 <- 1 - 2 * pt(abs(t_2), 178)

我没有得到与模型摘要中相同的 p 值。因此,我想知道 summary 函数 Pr(>|t|) 与我的公式有何不同,因为我找不到 Pr(>|t|).

的定义

你能帮帮我吗?非常感谢!

2 * pt(-abs(t_value), df)

例如:

2 * pt(-5.06, 178)
#[1] 1.038543e-06

2 * pt(-10.09, 178)
#[1] 3.223683e-19

或者,使用

2 * pt(abs(t_value), df, lower.tail = FALSE)

我们可以通过以下不同的方式计算 pPr(>|t|)

tval <- 5.06
df <- 178

# compute area under the t-pdf 
integrate(function(x) dt(x, df), -Inf, -tval)$value + integrate(function(x) dt(x, df), tval, Inf)$value # sum of two areas
# [1] 1.038543e-06
1-integrate(function(x) dt(x, df), -tval, tval)$value
# [1] 1.038543e-06
# 2-sided t-test: Pr_T(|t|>|tval|) = 2*(1 - F_T(|tval|)) = 2*F_T(-|tval|), where T~t(df=178)
2*(1 - pt(tval, df)) 
# [1] 1.038543e-06
2*pt(tval, df, lower.tail = FALSE)
# [1] 1.038543e-06
1 - (pt(tval, df) - pt(-tval, df))
# [1] 1.038543e-06
2*pt(-tval, df)
# [1] 1.038543e-06

下面用不同的(不太极端的)t统计值说明了相同的几何图形,我们可以看到,有两个(对称的)蓝色区域一起代表相应的概率,在2边t检验。

df <- 178
x <- seq(-6, 6,0.01)
y <- dt(x, df)
tval <- 1.25
plot(x, y, type='l', main='t-distribution and p-value (5% significance level, 2-sided t-test)')
abline(h=0)
abline(v = c(tval, -tval), col='red')
index1 <- which(x >= -tval)[1]
index2 <- which(x >= tval)[1]
polygon(x = c(x[1:index1], x[index1], x[1]), 
        y = c(y[1:index1], 0, 0),
        col = "blue")
polygon(x = c(x[index2], x[index2], x[index2:length(x)]), 
        y = c(0, y[index2], y[index2:length(y)]),
        col = "blue")