首页 文章

最小二乘回归系数非线性函数的标准误差和置信区间

提问于
浏览
2

我在R中运行OLS回归,从中得到几个系数 . 这是代码的一部分:

Attacks <- Treat.Terr.Dataset$Attacks[2:30]
Attackslag <- Treat.Terr.Dataset$Attacks[1:29]
TreatmentEffect <- Treat.Terr.Dataset$TreatmentEffect[2:30]
TreatmentEffectlag <- Treat.Terr.Dataset$TreatmentEffect[1:29]

olsreg <- lm(TreatmentEffect ~ TreatmentEffectlag + Attacks + Attackslag)
coeffs<-olsreg$coefficients

然后我需要计算: (Attacks + Attackslag) / (1 - TreatmentEffectlag) . 问题是我可以使用 (coeffs[3] + coeffs[4]) / (1 - coeffs[2]) 在R上执行此操作,但结果是固定数字,没有任何p值或置信区间,就像计算器会显示我一样 .

有没有人知道我是否可以使用任何函数来计算这个置信区间?


Editor note

如果目标数量是回归系数的线性函数,那么问题就会减少到可能进行精确推理的一般线性假设检验 .

2 回答

  • 3
    ## variance-covariance of relevant coefficients
    V <- vcov(olsreg)[2:4, 2:4]
    ## point estimate (mean) of relevant coefficients
    mu <- coef(olsreg)[2:4]
    
    ## From theory of OLS, coefficients are normally distributed: `N(mu, V)`
    ## We now draw 2000 samples from this multivariate distribution
    beta <- MASS::mvrnorm(n = 2000, mu, V)
    
    ## With those 2000 samples, you can get 2000 samples for your target quantity
    z <- (beta[, 2] + beta[, 3]) / (1 - beta[, 1])
    
    ## You can get Monte Carlo standard error, and Monte Carlo Confidence Interval
    mean(z)
    sd(z)
    quantile(z, prob = c(0.025, 0.975))
    
    ## You can of course increase sample size from 2000 to 5000
    
  • 4

    这是一个使用'car'包中的delta方法的自包含示例:

    # Simulate data
    dat <- data.frame(Attacks = rnorm(30), Trt=rnorm(30))
    dat <- transform(dat, AttacksLag = lag(Attacks), TrtLag = lag(Trt))
    dat <- dat[2:30,]
    
    # Fit linear model
    m1 <- lm(Trt ~  TrtLag + Attacks + AttacksLag, data=dat)
    
    # Use delta method
    require("car")
    del1 <- deltaMethod(m1, "(Attacks + AttacksLag) / (1 - TrtLag)")
    
    # Simple Wald-type conf int
    del1$Est +  c(-1,1) * del1$SE * qt(1-.1/2, nrow(dat)-length(coef(m1)))
    # [1] -0.2921529  0.6723991
    

相关问题