在 R 中,当我有一个(广义)线性模型(lm
, glm
, gls
, glmm
, ...)时,如何针对除 0 之外的任何其他值测试系数(回归斜率)?在模型的摘要中,自动报告了系数的t检验结果,但仅用于与0进行比较。我想将其与另一个值进行比较。
我知道我可以使用重新参数化的技巧,y ~ x
测试值y - T*x ~ x
在哪里T
,并运行这个重新参数化的模型,但我寻求更简单的解决方案,这可能适用于原始模型。
在 R 中,当我有一个(广义)线性模型(lm
, glm
, gls
, glmm
, ...)时,如何针对除 0 之外的任何其他值测试系数(回归斜率)?在模型的摘要中,自动报告了系数的t检验结果,但仅用于与0进行比较。我想将其与另一个值进行比较。
我知道我可以使用重新参数化的技巧,y ~ x
测试值y - T*x ~ x
在哪里T
,并运行这个重新参数化的模型,但我寻求更简单的解决方案,这可能适用于原始模型。
这是一个更广泛的解决方案,适用于任何包,或者即使您只有回归输出(例如来自论文)。
取系数及其标准误。
计算。的 df与的测试相同。
您可以使用 Glen_b 建议的简单 t 检验或更通用的 Wald 检验。
Wald 检验允许在多个参数上检验多个假设。它被表述为:其中 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, ...)