使用statsmodels进行多元OLS回归时如何处理缺失值

18
我想使用statsmodels和pandas数据框运行多个OLS回归。不同的行有不同列中的缺失值,但是我一直收到以下错误消息: ValueError:数组不得包含无穷大或NaN 我看到了这个与问题类似的SO问题,但并没有完全回答我的问题: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个回答

29

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

missing = 'drop'

工具

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(...)

2
非常感谢您的帮助。如果其他人遇到此问题,您还需要使用以下代码删除任何可能的无穷大值:pd.set_option('use_inf_as_null', True) - user2649353
这个信息在文档中缺失。看起来 **kwargs 用于 missing= 参数。但是文档没有说明该参数传递给哪个函数。 - buhtz
这个信息在文档中没有提到。似乎**kwargs用于missing=。但是文档没有说明这个参数传递给哪个函数。 - undefined

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接