2016-12-22 10 views
2

Я запускаю регрессию OLS в R, из которой получаю пару коэффициентов. Вот часть кода:Стандартный погрешность и доверительный интервал для нелинейной функции коэффициентов регрессии наименьших квадратов

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). Проблема в том, что я могу сделать это на R, используя (coeffs[3] + coeffs[4])/(1 - coeffs[2]), но результатом является фиксированное число без какого-либо p-значения или доверительного интервала, как показал бы калькулятор.

Кто-нибудь знает, есть ли какая-либо функция, которую я мог бы использовать для расчета этого с доверительным интервалом?


Редактор примечание

Если целевая величина является линейной функцией коэффициентов регрессии, то задача сводится к линейной проверке гипотез, где точный вывод можно.

+0

'bootstrap' его. – user20650

+0

Добро пожаловать в StackOverflow! Пожалуйста, прочитайте информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com/questions/ 5963269/как к Make-A-пра-р-воспроизводимая-пример/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

Ницца. Я собирался сделать это по дельта-методу. Для объяснения того, что здесь происходит, вы можете ссылаться на OP в раздел 5 (в частности, 5.3) https://ms.mcmaster.ca/~bolker/emdbook/chap7A.pdf –

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 

 Смежные вопросы

  • Нет связанных вопросов^_^