为何对数转换会导致回归模型中出现系数缺失值(NA)?
为何对数转换后回归模型中人均GDP平方的系数出现NA?
我拥有CO₂排放量、人均GDP、人均GDP平方、游客到访人数四个数据集,试图构建模型分析游客到访对CO₂排放的影响,推导旅游诱导型环境库兹涅茨曲线(Tourism induced Environmental Kuznets Curve)。以下是未做对数转换与做对数转换的R代码及回归结果:
未做对数转换的模型
Yt<-Data$`CO2 emissions` X1t<-Data$`GDP per capita` X2t<-Data$`GDP per caita square` # 注:此处应为GDP per capita square X3t<-Data$`Number of Tourist arrival` model<-lm(Yt~X1t+X2t+X3t) summary(model)
回归结果:
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.238e-02 7.395e-03 1.674 0.100187 X1t -2.581e-05 6.710e-05 -0.385 0.702139 X2t 1.728e-07 4.572e-08 3.780 0.000413 *** X3t 1.928e-07 3.501e-08 5.507 1.2e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.02252 on 51 degrees of freedom Multiple R-squared: 0.9475, Adjusted R-squared: 0.9444 F-statistic: 306.5 on 3 and 51 DF, p-value: < 2.2e-16
对数转换后的模型
LYt<-(log(Yt)) LX1t<-(log(X1t)) LX2t<-(log(X2t)) LX3t<-(log(X3t)) model1<-lm(LYt~LX1t+LX2t+LX3t) summary(model1)
回归结果:
Coefficients: (1 not defined because of singularities) Estimate Std. Error t value Pr(>|t|) (Intercept) -9.38623 0.46040 -20.387 < 2e-16 *** LX1t 0.83679 0.09834 8.509 2.01e-11 *** LX2t NA NA NA NA LX3t 0.17802 0.06888 2.585 0.0126 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.2863 on 52 degrees of freedom Multiple R-squared: 0.9074, Adjusted R-squared: 0.9038 F-statistic: 254.7 on 2 and 52 DF, p-value: < 2.2e-16
问题解答
核心原因是两种情况下的共线性性质完全不同:
未对数转换时:仅存在高度多重共线性,而非完全共线性
原始的X2t是X1t的平方,二者是二次函数关系,并非线性依赖。即使数据中X1t和X2t的相关性极高,但它们并不满足严格的线性等式(比如X2t = a*X1t + b,其中a、b为常数),因此线性回归模型仍然可以计算出系数估计值——只是共线性会导致X1t的系数标准误差变大、显著性降低(这也解释了为什么X1t的p值高达0.7)。对数转换后:出现完全共线性
当对X2t(人均GDP平方)取对数时,根据对数运算规则:log(X1t²) = 2 * log(X1t)也就是
LX2t = 2 * LX1t,这是严格的线性依赖关系。此时设计矩阵的列向量线性相关,导致矩阵不满秩,线性回归无法唯一估计LX2t的系数,因此R会标记该系数为NA,并提示“1 not defined because of singularities”。
如果你想在对数模型中保留库兹涅茨曲线的二次形式,正确的做法是构造对数人均GDP的平方项,而非对人均GDP平方取对数,即:
LX1t_sq <- LX1t^2 model_correct <- lm(LYt ~ LX1t + LX1t_sq + LX3t) summary(model_correct)
这样既保留了二次项的非线性关系,又不会出现完全共线性问题。
内容的提问来源于stack exchange,提问作者Siddhartha Rayamajhi
相关产品推荐
相关产品推荐

