在statsmodels中进行多重OLS回归时忽略缺失值
我正在尝试使用statsmodels和pandas数据框进行多重OLS回归。我的数据中有些列在不同的行里有缺失值,但我一直收到这个错误信息:
ValueError: 数组不能包含无穷大或NaN(缺失值)。
我看到这个StackOverflow的问题,虽然有点类似,但并没有完全解决我的问题:statsmodel.api.Logit: valueerror array must not contain infs or nans
我想做的是在回归时忽略掉那些缺失变量的行。现在我的代码是:
import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
df = pd.read_csv('cl_030314.csv')
results = sm.ols(formula = "da ~ cfo + rm_proxy + cpi + year", data=df).fit()
我想要的效果是设置missing = "drop"。
如果有任何建议,我将非常感激。非常感谢。
2 个回答
3
来自 jseabold 的回答 很有效,但如果你想对预测值和真实值进行一些计算,比如使用 mean_squared_error
这个函数,那可能就不够了。在这种情况下,最好是彻底去掉 NaN 值。
df = pd.read_csv('cl_030314.csv')
df_cleaned = df.dropna()
results = sm.ols(formula = "da ~ cfo + rm_proxy + cpi + year", data=df_cleaned).fit()
31
你自己回答了自己的问题。只需要传入
missing = 'drop'
给ols
import statsmodels.formula.api as smf
...
results = smf.ols(formula = "da ~ cfo + rm_proxy + cpi + year",
data=df, missing='drop').fit()
如果这样还不行,那就是个bug,请在github上用一个最小可重现示例(MWE)来报告。
顺便提一下,注意上面的导入。并不是所有东西都可以在formula.api这个命名空间里找到,所以你应该把它和statsmodels.api分开。或者直接使用
import statsmodels.api as sm
sm.formula.ols(...)