我正在运行滞后分布模型普通最小二乘法,其中一组单位在同一年都被处理。我包括2个滞后和2个潜在客户,看看是否有任何"预期"或者"长期"通过在前几年和后几年产生相同的治疗状态来产生影响。但是,当我运行模型时,所有标准错误都是相同的。例如:
set.seed(123)
data <- data.frame(y = rnorm(100), id = sort(rep(1:10,10)), years = rep(2000:2009,10))
tr <- ifelse(data$years == 2005 & data$id %in% c(2,3,4,5,6),1,0)
lead.2003 <- ifelse(data$year == 2003 & data$id %in% c(2,3,4,5,6), 1, 0)
lead.2004 <- ifelse(data$year == 2004 & data$id %in% c(2,3,4,5,6), 1, 0)
lag.2006 <- ifelse(data$year == 2006 & data$id %in% c(2,3,4,5,6), 1, 0)
lag.2007 <- ifelse(data$year == 2007 & data$id %in% c(2,3,4,5,6), 1, 0)
data <- cbind(data, tr, lead.2003, lead.2004, lag.2006 , lag.2007)
summary(lm(y ~ tr + lead.2003 + lead.2004 + lag.2006 + lag.2007, data = data))
为什么会这样?谢谢。
答案 0 :(得分:1)
tr /超前/滞后变量的方差是相同的,它们是正交的,因此它们最终均匀地分割均方误差。 SE由sigma ^ 2 *(X&#39; X)^ - 1计算。看一下协方差矩阵的逆对角线(公式中的(X&#39; X)^ - 1)。
fit <- lm(y ~ tr + lead.2003 + lead.2004 + lag.2006 + lag.2007, data = data)
X <- as.matrix(cbind(1, data[,4:ncol(data)]))
diag(solve(t(X) %*% X))
# 1 tr lead.2003 lead.2004 lag.2006 lag.2007
# 0.01333333 0.21333333 0.21333333 0.21333333 0.21333333 0.21333333
所以,当你把它乘以均方误差(公式中的sigma ^ 2,我们可以从anova得到它),并取平方根来得到标准误差
mse <- anova(fit)[[3]][6] # mean square error
sqrt(diag(mse * solve(t(X) %*% X))) # SE
# 1 tr lead.2003 lead.2004 lag.2006 lag.2007
# 0.1059099 0.4236397 0.4236397 0.4236397 0.4236397 0.4236397
你最终会得到相同的标准错误。
如果变量具有不同的差异,您会得到不同的标准错误,例如,更改lead.2003
,并重新运行相同的模型(变量仍然是正交的)
## changed 2:6 to 3:6
lead.2003 <- ifelse(data$year == 2003 & data$id %in% 3:6, 1, 0)
## ... rerun model ...
summary(fit)$coefficients[,2] # standard errors
# (Intercept) tr lead.2003 lead.2004 lag.2006 lag.2007
# 0.1048613 0.4220586 0.4689540 0.4220586 0.4220586 0.4220586
或者,如果变量不正交,则标准误差会不同。
## again changing lead.2003
lead.2003 <- sample(c(rep(1,5), rep(0,95)), 100)
## .. rerun ..
summary(fit)$coefficients[,2]
# (Intercept) tr lead.2003 lead.2004 lag.2006 lag.2007
# 0.1057283 0.4272960 0.4316341 0.4316341 0.4272960 0.4272960