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

问题描述 投票:12回答:2

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

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

python regression statsmodels
2个回答
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(...)

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()
© www.soinside.com 2019 - 2024. All rights reserved.