Кластерные стандартные ошибки в статистических моделях с категориальными переменными (Python)

Я хочу запустить регрессию в статистических моделях, использующих категориальные переменные и кластеризованные стандартные ошибки.

У меня есть набор данных со столбцами: учреждение, лечение, год и зачисление. Лечение - пустышка, учреждение - строка, а все остальное - числа. Я убедился, что удалил все нулевые значения.

df.dropna()    
reg_model = smf.ols("enroll ~ treatment + C(year) + C(institution)", df)
.fit(cov_type='cluster', cov_kwds={'groups': df['institution']})

Получаю следующее:

ValueError: веса и список имеют разную длину.

Есть ли способ исправить это, чтобы мои стандартные ошибки кластерились?


person tower489    schedule 24.01.2019    source источник
comment
Оказывается, dropna () не ловит некоторые нули, которые мне пришлось заменить с помощью fillna(, inplace=True), и тогда он работал нормально   -  person tower489    schedule 24.01.2019
comment
Вы неправильно используете dropna. Без аргумента inplace=True df.dropna() просто возвращает копию вашего DataFrame без нулей - он не сохраняет ее в объекте df. Более того, если переменных больше, чем вы указали, но вы хотите отбросить только нули среди подмножества в вашей регрессии, вам также понадобится аргумент subset. Вместо этого вы могли бы reg_model = smf.ols("enroll ~ treatment + C(year) + C(institution)", df.dropna(subset = ['enroll','treatment','year','institution']))   -  person Gene Burinsky    schedule 16.10.2019


Ответы (1)


Вам нужен cov_type='cluster' в форме.

cov_type является аргументом ключевого слова и находится не в правильной позиции, когда ключевые слова используются в качестве позиционных аргументов. http://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLS.fit.html

В общем, statsmodels не гарантирует обратной совместимости, когда аргументы ключевого слова используются в качестве позиционных аргументов, то есть позиции ключевых слов могут измениться в будущих версиях.

Однако я не понимаю, откуда взялось ValueError. Python имеет очень информативные трассировки, и при задании вопросов очень полезно добавить либо полную трассировку, либо, по крайней мере, несколько последних строк, которые показывают, где возникает исключение.

person Josef    schedule 24.01.2019