2016-12-22 54 views
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值或置信区间的固定数字,就像计算器会显示我一样。

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


编者注

如果目标量是回归系数的线性函数,那么问题降低到一般的线性假设检验,其中精确推断是可能的。

+0

'bootstrap'它。 – user20650

+0

欢迎来到StackOverflow!请阅读关于[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)以及如何给出[可重现的示例]的信息(http://stackoverflow.com/questions/ 5963269 /如何对化妆一个伟大-R-重复性,例如/ 5963610)。这会让其他人更容易帮助你。 – Jaap

+0

你打算如何使用这些?这将决定最佳的回应。 – Elin

回答

4
## 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 
+2

不错。我打算用delta方法来做这件事。有关此处发生的情况的解释,可以参考OP至https://ms.mcmaster.ca/~bolker/emdbook/chap7A.pdf的第5部分(具体为5.3) –

3

下面是使用增量方法从 '汽车' 包的自包含例如:

# 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