Statsmodel 多元线性回归误差 - Python

Win*_*981 3 python linear-regression statsmodels

我正在运行(我认为是)作为使用 Stats 模型拟合的相当简单的多元线性回归模型。

我的代码如下:

y = 'EXITS|20:00:00'
all_columns = "+".join(y_2015piv.columns - ['EXITS|20:00:00'])
reg_formula = "y~" + all_columns

lm= smf.ols(formula=reg_formula, data=y_2015piv).fit()
Run Code Online (Sandbox Code Playgroud)

因为我有大约 30 个因子变量,所以我使用 Python 字符串操作创建公式。“y”如上所示。all_columns 是没有“y”的数据框 y_2015piv 列。

这是 all_columns:

DAY_Fri+DAY_Mon+DAY_Sat+DAY_Sun+DAY_Thu+DAY_Tue+DAY_Wed+ENTRIES|00:00:00+ENTRIES|04:00:00+ENTRIES|08:00:00+ENTRIES|12:00:00+ENTRIES|16:00:00+ENTRIES|20:00:00+EXITS|00:00:00+EXITS|04:00:00+EXITS|08:00:00+EXITS|12:00:00+EXITS|16:00:00+MONTH_Apr+MONTH_Aug+MONTH_Dec+MONTH_Feb+MONTH_Jan+MONTH_Jul+MONTH_Jun+MONTH_Mar+MONTH_May+MONTH_Nov+MONTH_Oct+MONTH_Sep
Run Code Online (Sandbox Code Playgroud)

数据框中的值是连续数值变量和 0/1 虚拟变量。

当我尝试拟合模型时,出现此错误:

PatsyError: numbers besides '0' and '1' are only allowed with **
    y~DAY_Fri+DAY_Mon+DAY_Sat+DAY_Sun+DAY_Thu+DAY_Tue+DAY_Wed+ENTRIES|00:00:00+ENTRIES|04:00:00+ENTRIES|08:00:00+ENTRIES|12:00:00+ENTRIES|16:00:00+ENTRIES|20:00:00+EXITS|00:00:00+EXITS|04:00:00+EXITS|08:00:00+EXITS|12:00:00+EXITS|16:00:00+MONTH_Apr+MONTH_Aug+MONTH_Dec+MONTH_Feb+MONTH_Jan+MONTH_Jul+MONTH_Jun+MONTH_Mar+MONTH_May+MONTH_Nov+MONTH_Oct+MONTH_Sep
Run Code Online (Sandbox Code Playgroud)

网上没有任何内容可以解决这可能是什么。任何帮助表示赞赏。

顺便说一下,当我在 Scikit-learn 中拟合这个模型时,它工作正常。所以我认为数据是有序的。

提前致谢。

小智 5

我得到的第一个错误是:

PatsyError: numbers besides '0' and '1' are only allowed with **
Temp ~ MEI+ CO2+ CH4+ N2O+ CFC-11+ CFC-12+ TSI+ Aerosols
                               ^^
Run Code Online (Sandbox Code Playgroud)

根据此链接:http : //patsy.readthedocs.io/en/latest/builtins-reference.html#patsy.builtins.Q 您可以在公式中使用 Q("var") 来消除错误。我遇到了同样的错误,但已解决。

linMod = smf.ols('Temp ~ MEI+ CO2+ CH4+ N2O+ Q("CFC-11")+ Q("CFC-12")+ TSI+ Aerosols',data = trainingSet).fit()
Run Code Online (Sandbox Code Playgroud)

这是解决的代码行。我试过了

linMod = smf.ols('Temp ~ MEI+ CO2+ CH4+ N2O+ Q("CFC-11 + CFC-12")+ TSI+ Aerosols',data = trainingSet).fit()
Run Code Online (Sandbox Code Playgroud)

但这不起作用。似乎在使用公式时,数字和变量恰好具有某些含义,不允许使用某些名称。在我的情况下,错误是:

PatsyError: Error evaluating factor: NameError: no data named 'CFC-11+ CFC-12' found
Temp ~ MEI+ CO2+ CH4+ N2O+ Q("CFC-11+ CFC-12")+ TSI+ Aerosols
                           ^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)