针对某个值测试模型系数(回归斜率)

机器算法验证 r 回归 t检验
2022-01-20 22:25:23

在 R 中,当我有一个(广义)线性模型(lm, glm, gls, glmm, ...)时,如何针对除 0 之外的任何其他值测试系数(回归斜率)?在模型的摘要中,自动报告了系数的t检验结果,但仅用于与0进行比较。我想将其与另一个值进行比较。

我知道我可以使用重新参数化的技巧,y ~ x测试值y - T*x ~ x在哪里T,并运行这个重新参数化的模型,但我寻求更简单的解决方案,这可能适用于原始模型。

3个回答

这是一个更广泛的解决方案,适用于任何包,或者即使您只有回归输出(例如来自论文)。

取系数及其标准误。

计算的 df的测试相同。t=β^βH0s.e.(β^)tH0:β=0

您可以使用 Glen_b 建议的简单 t 检验或更通用的 Wald 检验。

Wald 检验允许在多个参数上检验多个假设。它被表述为:其中 R 选择(组合)系数,q 表示要测试的值,是标准回归系数。Rβ=qβ

在您的示例中,您对一个参数只有一个假设,R 是一个行向量,所讨论的参数的值为 1,其他地方的值为 0,并且 q 是一个带有测试限制的标量。

在 R 中,您可以使用car中的函数linearHypothesis()运行 Wald 测试。假设您要检查第二个系数(由参数hypothesis.matrix表示)是否不同于 0.1(参数rhs):

reg <- lm(freeny)
coef(reg)

# wald test for lag.quarterly.revenue =0.1
>library(car)
>linearHypothesis(reg, hypothesis.matrix = c(0, 1, rep(0,3)), rhs=0.1)
#skip some result, look at last value on last row, of Pr(>F) 
  Res.Df       RSS Df  Sum of Sq      F Pr(>F)
1     35 0.0073811                            
2     34 0.0073750  1 6.0936e-06 0.0281 0.8679

对于 t 检验,此函数实现 Glen_b 所示的 t 检验:

ttest <- function(reg, coefnum, val){
  co <- coef(summary(reg))
  tstat <- (co[coefnum,1]-val)/co[coefnum,2]
  2 * pt(abs(tstat), reg$df.residual, lower.tail = FALSE)
}

> ttest(reg, 2,0.1)
[1] 0.8678848

对于第二个系数为零的标准假设,让我们通过比较 Wald、我们的 t 检验和 R 默认 t 检验来确保我们得到了正确的程序:

> linearHypothesis(reg, hypothesis.matrix = c(0, 1, rep(0,3)), rhs=0)[["Pr(>F)"]][2]
[1] 0.3904361
> ttest(reg, 2,0)
[1] 0.3904361
## The 'right' answer from R:
> coef(summary(reg))[2,4]
[1] 0.3904361

这三个过程应该得到相同的结果。

最后,最简单的解决方案是进行重新参数化:

gls(I(y - T*x) ~ x, ...)