【问题标题】:change null hypothesis in lmtest in R在 R 中更改 lmtest 中的零假设
【发布时间】:2014-01-21 21:05:54
【问题描述】:

我有一个使用lm 生成的线性模型。我使用包lmtest 中的coeftest 函数,用sandwich 包中的我想要的vcov 测试一个假设。默认的零假设是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)

【问题讨论】:

    标签: r regression linear-regression lm


    【解决方案1】:

    执行此操作的正式正确方法:

    require(multcomp)
    zed = glht(model=mdl, linfct=matrix(c(0,1), nrow=1, ncol=2), rhs=1, alternative="two.sided", vcov.=NeweyWest)
    summary(zed)
    

    【讨论】:

      【解决方案2】:

      据我所知,没有默认函数可以针对任意值测试模型系数(在您的情况下为1)。另一个答案中提出了offset 技巧,但这并不是那么简单(并且始终要小心此类模型修改)。所以,你的表达式(b-1)/se实际上是a good way to do it

      我对您的代码有两个注释:

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

      【讨论】:

      • 感谢您的回答。我刚刚发布了一个答案,描述了我在寻找什么。
      【解决方案3】:

      使用 -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 中的相同。

      【讨论】:

      • 您能详细说明一下吗?什么是抵消?关于这个主题的 R 文档非常模糊
      • Offset 增加(或减去)线性预测器中假定没有误差的量。它不需要与“x”相关,但这是您在这种情况下所需要的。
      • “向线性预测变量添加数量”是什么意思?道歉,但我不熟悉这个术语
      • 我本可以写成+offset(-1*x)
      • 感谢您的回答。我刚刚发布了我使用multcomp 包实际寻找的内容
      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 2015-12-17
      • 2018-08-26
      • 2020-06-30
      • 2018-06-10
      • 2021-07-13
      • 2021-01-11
      • 2021-03-18
      相关资源
      最近更新 更多