使用statsmodel忽略多个OLS回归中的缺失值

时间:2014-03-06 19:55:47

标签: python regression statsmodels

我正在尝试使用statsmodels和pandas数据帧运行多个OLS回归。不同行的不同列中缺少值,我不断收到错误消息: ValueError:数组不能包含infs或NaN 我看到了这个问题,这个问题很相似,但并没有完全回答我的问题: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()

我想要丢失的东西=“掉落”。 任何建议将不胜感激。非常感谢。

2 个答案:

答案 0 :(得分:20)

你回答了自己的问题。只需通过

missing = 'drop'

到ols

import statsmodels.formula.api as smf
...
results = smf.ols(formula = "da ~ cfo + rm_proxy + cpi + year", 
                 data=df, missing='drop').fit()

如果这不起作用那么这是一个错误,请在github上用MWE报告。

仅供参考,请注意上面的导入。并非所有在formula.api命名空间中都可用,因此您应该将它与statsmodels.api分开。或者只是使用

import statsmodels.api as sm
sm.formula.ols(...)

答案 1 :(得分:0)

answer from 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()