【问题标题】:Ignoring missing values in multiple OLS regression with statsmodels使用 statsmodels 忽略多个 OLS 回归中的缺失值
【发布时间】: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”这样的东西。 任何建议将不胜感激。非常感谢。

【问题讨论】:

    标签: python regression statsmodels


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 2015-12-31
      • 2016-05-03
      • 2015-07-22
      • 1970-01-01
      • 2014-03-30
      • 2014-12-19
      • 2016-12-29
      • 1970-01-01
      相关资源
      最近更新 更多