使用AER包ivreg与手动2SLS得到不同R²的技术疑问
问题:IV回归中ivreg函数出现负R²的疑惑
我在R语言中使用AER包的ivreg函数做IV回归时,输出了我认为不可能存在的负R²;但手动用2SLS方法跑相同回归时,得到的R²虽小但为正。
分析后发现差异源于AER包用真实的X而非第一阶段的拟合值计算残差,这种情况在拟合效果极差时会出现,且ivreg和手动2SLS的R²始终存在差异。我想知道:AER包的R²计算是否存在错误?还是这种情况下R²确实可以为负?
复现代码
library(AER) set.seed(40) n <- 100 # 生成数据 Z <- rnorm(n, 10, 2) X <- 2 * Z + rnorm(n, 0, 10000) Y <- 3 * X + rnorm(n, 0, 1000000) df <- data.frame(Z, X, Y) # IV回归 ivreg1 <- ivreg(Y ~ X | Z, data = df) summary(ivreg1) # 手动2SLS方法 lm1 <- lm(X ~ Z, data = df) df$predict <- predict(lm1) lm2 <- lm(Y ~ predict, data = df) summary(lm2)
ivreg函数输出结果
Call: ivreg(formula = Y ~ X | Z, data = df) Residuals: Min 1Q Median 3Q Max -3513062 -843258 -33611 845922 4533273 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 43430.1 165298.8 0.263 0.793 X -114.1 131.9 -0.865 0.389 Residual standard error: 1553000 on 98 degrees of freedom Multiple R-Squared: -1.665, Adjusted R-squared: -1.692 Wald test: 0.7479 on 1 and 98 DF, p-value: 0.3893
解答
1. ivreg的R²计算并非错误
AER包的ivreg函数计算R²的逻辑和手动2SLS完全不同:
- 手动2SLS中,你用第一阶段拟合出的
predict(即$\hat{X}$)作为自变量回归Y,此时计算的是Y对$\hat{X}$的OLS拟合优度,符合普通R²的定义,自然非负。 - 而
ivreg计算R²时,用的是真实的X和IV回归得到的系数生成预测值$\hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X$,再通过公式$R^2 = 1 - \frac{\sum(Y - \hat{Y})^2}{\sum(Y - \bar{Y})^2}$计算。当IV回归的预测效果比仅用Y的均值预测还差时,残差平方和会大于总平方和,R²就会变成负数。
2. 负R²在IV场景下是合理的
IV回归的核心目标是解决内生性问题,而非最大化拟合优度。当工具变量Z和内生变量X的相关性极弱(比如你例子中X的扰动项方差极大,Z对X的解释力几乎为0),IV估计出的系数会严重偏离真实值,导致用真实X计算的预测值$\hat{Y}$对Y的解释能力还不如直接用Y的均值,此时就会出现负R²。
这种情况不是计算错误,而是IV回归拟合效果极差的直观体现——意味着你的工具变量可能无效,需要重新考量工具变量的选择。
内容的提问来源于stack exchange,提问作者user27435905
相关产品推荐
相关产品推荐

