Игнорирование отсутствующих значений в множественной регрессии OLS с помощью statsmodels

Я пытаюсь запустить множественную регрессию OLS, используя statsmodels и pandas dataframe. В разных столбцах для разных строк отсутствуют значения, и я получаю сообщение об ошибке: ValueError: array не должен содержать infs или NaNs Я видел этот SO-вопрос, похожий, но точно не отвечающий на мой вопрос: statsmodel.api.Logit: valueerror array не должен содержать infs или 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". Любые предложения будут ценны. Большое спасибо.

Ответ 1

Вы ответили на свой вопрос. Просто пройдите

missing = 'drop'

to ols

import statsmodels.formula.api as smf
...
results = smf.ols(formula = "da ~ cfo + rm_proxy + cpi + year", 
                 data=df, missing='drop').fit()

Если это не работает, тогда это ошибка и сообщите об этом с помощью MWE на github.

FYI, обратите внимание на импорт выше. Не все доступно в пространстве имен formula.api, поэтому вы должны держать его отдельно от statsmodels.api. Или просто используйте

import statsmodels.api as sm
sm.formula.ols(...)

Ответ 2

Ответ от 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()