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

Posted

技术标签:

【中文标题】使用 statsmodels 忽略多个 OLS 回归中的缺失值【英文标题】:Ignoring missing values in multiple OLS regression with statsmodels 【发布时间】:2014-04-09 16:26:52 【问题描述】:

我正在尝试使用 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()

我想要像缺失 =“drop”这样的东西。 任何建议将不胜感激。非常感谢。

【问题讨论】:

【参考方案1】:

您回答了自己的问题。路过

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

【讨论】:

非常感谢您的帮助。万一其他人遇到这种情况,您还需要使用以下方法删除任何可能的无穷大: pd.set_option('use_inf_as_null', True)【参考方案2】:

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

【讨论】:

以上是关于使用 statsmodels 忽略多个 OLS 回归中的缺失值的主要内容,如果未能解决你的问题,请参考以下文章

使用 statsmodels.formula.api 中的 ols - 如何删除常数项?

AttributeError:模块“statsmodels.formula.api”没有属性“OLS”

statsmodels 中的面板 OLS(因为它在 Pandas 中已被弃用?)

Statsmodels - 线性回归模型 (OLS) 中系数趋势显着性的 Wald 检验

为啥当我使用 statsmodels 进行 OLS 和使用 scikit 进行 PooledOLS 时得到相同的结果?

为啥 `sklearn` 和 `statsmodels` 的 OLS 回归实现给出不同的 R^2?