在statsmodels中进行多重OLS回归时忽略缺失值

19 投票
2 回答
26990 浏览
提问于 2025-04-17 21:11

我正在尝试使用statsmodels和pandas数据框进行多重OLS回归。我的数据中有些列在不同的行里有缺失值,但我一直收到这个错误信息:
ValueError: 数组不能包含无穷大或NaN(缺失值)。
我看到这个StackOverflow的问题,虽然有点类似,但并没有完全解决我的问题: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 个回答

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

你自己回答了自己的问题。只需要传入

missing = 'drop'

给ols

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

撰写回答