问题描述
我想使用空间回归模型,使用 Python 中的 spreg 包。我的数据由数字变量组成,但我还有一个分类土地覆盖变量(有 7 个类),我需要将其包含在模型中。使用 statsmodels 可以很好地工作,但我一直无法弄清楚如何在 spreg 中执行此操作。
我尝试手动创建虚拟变量(使用 pd.get_dummies(data['land_cover'])
),但这会导致我的 spreg.OLS 模型出现错误消息:
RuntimeWarning: sqrt se_result 中遇到无效值 =np.sqrt(方差)
运行时警告:在 sqrt tStat = 中遇到无效值 betas[list(range(0,len(vm)))].reshape(len(vm),) / np.sqrt(variance)
所有虚拟变量在结果的 Std.Error、t-Statistic 和 Probability 部分也有 nan 值(参见下面的摘录)。
Variable Coefficient Std.Error t-Statistic Probability
CONSTANT -142.9375000 nan nan nan
temperature 0.0136240 0.0001169 116.4984154 0.0000000
precipitation 0.0000003 0.0000000 153.7448775 0.0000000
cover_1 141.9375000 nan nan nan
cover_2 142.0625000 nan nan nan
cover_3 141.6875000 nan nan nan
cover_4 142.0625000 nan nan nan
cover_5 141.9375000 nan nan nan
cover_6 141.6875000 nan nan nan
cover_7 141.8125000 nan nan nan
使用具有相同数据/变量的 statsmodels,OLS 模型的输出是这样的:
coef std err t P>|t|
temperature -0.0004 2.72e-05 -15.115 0.000
precipitation -1.62e-08 4.12e-10 -39.294 0.000
cover_1 0.0706 0.001 119.653 0.000
cover_2 0.0290 0.001 29.431 0.000
cover_3 0.0100 0.001 7.120 0.000
cover_4 0.0491 0.000 122.972 0.000
cover_5 0.0327 0.000 79.698 0.000
cover_6 0.0140 0.000 35.541 0.000
cover_7 -0.0026 0.001 -4.223 0.000
如何将我的分类数据包含到 spreg 模型中(例如 spreg.GM_Lag)?
解决方法
我的猜测是你遇到了“虚拟变量陷阱”。
statsmodels 版本中没有常量,但它包含在 spreg 版本中。
如果您不降低分类变量中的参考水平,那么它将与常量完美共线。设计矩阵将是奇异的,标准产品矩阵 x'x 不可逆。