Игнорирование отсутствующих значений в множественной регрессии 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()