为什么标准误差在 R 的滞后分布模型中相同?
Why are standard errors the same in lag-distributed model in R?
我正在 运行 建立一个滞后分布模型普通最小二乘法,其中一组单位都在同一年处理。我包括 2 个滞后和 2 个导联,以查看是否存在任何 "anticipation" 或 "long-term" 效果,方法是在前几年和后几年产生相同的治疗状态。但是,当我 运行 模型时,所有标准误差都是相同的。例如:
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))
知道这是为什么吗?谢谢。
您的 tr/lead/lag 变量的方差相同并且它们是正交的,因此它们最终平均分配均方误差。 SE 由 sigma^2 * (X'X)^-1 计算。看一下协方差矩阵的反对角线(公式中的(X'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,我们可以从方差分析中得出),然后取平方根得到标准误差
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
我正在 运行 建立一个滞后分布模型普通最小二乘法,其中一组单位都在同一年处理。我包括 2 个滞后和 2 个导联,以查看是否存在任何 "anticipation" 或 "long-term" 效果,方法是在前几年和后几年产生相同的治疗状态。但是,当我 运行 模型时,所有标准误差都是相同的。例如:
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))
知道这是为什么吗?谢谢。
您的 tr/lead/lag 变量的方差相同并且它们是正交的,因此它们最终平均分配均方误差。 SE 由 sigma^2 * (X'X)^-1 计算。看一下协方差矩阵的反对角线(公式中的(X'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,我们可以从方差分析中得出),然后取平方根得到标准误差
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