首页 > 解决方案 > 使用 R 中的 delta 方法估计线性回归截距的标准误差

问题描述

我试图通过“car”包中的“deltaMethod”函数使用delta方法从线性回归中估计转换后的截距(10 ^ a)的SE。但是 deltaMethod 总是为截距的 SE 或其任何变换给出零!例如,对于未转换的截距:

> x <- 1:100; y <- rnorm(100, 4*x, 5)
> m1<-lm(y~x) 
> library(car)
> deltaMethod(m1, "Intercept")
          Estimate      SE   2.5 %  97.5 %
Intercept  -1.9561  0.0000 -1.9561 -1.9561

根据“deltaMethod”函数,截距是 0.000,但应该是 0.9034276:

> (summary(m1))$ coefficients [1,2]
[1] 0.9034276

"msm" 包中的函数 "deltamethod" 给出了截距 SE 的正确值:

> library(msm)
> deltamethod (~ x1, coef(m1), vcov(m1))
[1] 0.9034276

但是我在“car”包中的“deltaMethod”函数代码有什么问题?(出于某种原因,我更喜欢使用“car”包而不是“msm”)。谢谢!

标签: rlinear-regressionintercept

解决方案


我似乎无法重现您的问题。我们可以测试这一点的一种方法是编写一个重复创建数据、拟合模型并返回 SE 的函数,就像您在上面所做的那样。我们可以将它传递给replicate函数并多次重复该过程。这是使用您的代码进行调查的一种方法:

set.seed(42)

library(car)

delta_sim <- function(){
  x <- 1:100; y <- rnorm(100, 4*x, 5)
  m1<-lm(y~x) 
  a <- deltaMethod(m1, "Intercept")
  list(a)
}

out <- replicate(1000, delta_sim())

out <- do.call(rbind, out)

hist(out$SE)

这将产生以下结果:

SE的直方图不包括1

重新启动您的 R 会话以确保您没有任何本地变量潜入您的函数可能是值得的。


推荐阅读