【问题标题】:Using categorical variable in spreg models在 spreg 模型中使用分类变量
【发布时间】:2021-08-17 08:42:04
【问题描述】:

我想采用空间回归模型,使用 Python 中的 spreg 包。我的数据由数字变量组成,但我还有一个分类土地覆盖变量(有 7 个类),我需要将其包含在模型中。使用 statsmodels 可以很好地工作,但我无法弄清楚如何在 spreg 中执行此操作。

我曾尝试手动创建虚拟变量(使用 pd.get_dummies(data['land_cover'])),但这会导致我的 spreg.OLS 模型出现错误消息:

RuntimeWarning:在 sqrt se_result 中遇到无效值 =np.sqrt(方差)

RuntimeWarning:在 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)?

【问题讨论】:

    标签: python regression categorical-data pysal spatial-regression


    【解决方案1】:

    我的猜测是你遇到了“虚拟变量陷阱”。

    您在 statsmodels 版本中没有常量,但它包含在 spreg 版本中。

    如果您不在分类变量中删除参考水平,那么它将与常数完全共线。设计矩阵是奇异的,标准乘积矩阵 x'x 是不可逆的。

    【讨论】:

    • 非常感谢您的快速回答!我不知道“虚拟变量陷阱”。在指定参考水平后它确实起作用了。
    猜你喜欢
    • 2021-11-06
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2019-09-08
    相关资源
    最近更新 更多