在R中改变lmtest中的零假设

时间:2014-01-04 03:25:34

标签: r regression linear-regression lm

我有一个使用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)

3 个答案:

答案 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

我的代码有两个注释:

  1. 您可以使用summary(mdl)将t检验设为0。
  2. 您正在使用具有协方差结构的lmtest(这将更改t检验值),但您的原始lm模型没有。也许这可能是个问题?也许您应该使用glm并从一开始就指定相关结构。