我有一个使用lm
生成的线性模型。我使用coeftest
包中的lmtest
函数来测试vcov
包中我想要的sandwich
的假设。默认的零假设是beta = 0
。例如,如果我想测试beta = 1
该怎么办?我知道我可以简单地取估计系数,减1并除以提供的标准误差,得到我的假设的t-stat。但是,R中必须有这方面的功能。正确的方法是什么?
MWE:
require(lmtest)
require(sandwich)
set.seed(123)
x = 1:10
y = x + rnorm(10)
mdl = lm(y ~ x)
z = coeftest(mdl, df=Inf, vcov=NeweyWest)
b = z[2,1]
se = z[2,2]
mytstat = (b-1)/se
print(mytstat)
答案 0 :(得分:2)
正式的正确方法:
require(multcomp)
zed = glht(model=mdl, linfct=matrix(c(0,1), nrow=1, ncol=2), rhs=1, alternative="two.sided", vcov.=NeweyWest)
summary(zed)
答案 1 :(得分:1)
使用-1 * x
的偏移量mdl<-lm(y~x)
mdl2 <- lm(y ~ x-offset(x) )
> mdl
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept) x
0.5255 0.9180
> mdl2
Call:
lm(formula = y ~ x - offset(x))
Coefficients:
(Intercept) x
0.52547 -0.08197
您可以查看summary(mdl2)
以查看p值(它与mdl
中的相同。
答案 2 :(得分:1)
据我所知,没有默认函数来测试模型系数对任意值(在你的情况下为1
)。在另一个答案中提出了offset
技巧,但并不是那么简单(并且总是要小心这些模型修改)。因此,您的表达式(b-1)/se
实际上是a good way to do it。
我的代码有两个注释:
summary(mdl)
将t检验设为0。lmtest
(这将更改t检验值),但您的原始lm
模型没有。也许这可能是个问题?也许您应该使用glm
并从一开始就指定相关结构。