Модель фиксированных эффектов с использованием линейных моделей Python

Меня немного смущает требование для MultiIndex с использованием линейных моделей PanelOLS. Я пытаюсь создать модель вида y = pid(i) + rid(j) + e(ij), где e - термин ошибки. Мои данные по сути выглядят так: изображение в формате Dataframe

В этом случае я хочу получить 6 коэффициентов: p1,p2,p3,r1,r2,r3

Настроить:

import pandas as pd
df = pd.DataFrame()
df['pid'] = [1,1,1,2,2,2,3,3,3]
df['rid'] = [1,2,3,1,2,3,1,2,3]
df['y'] = [100,102,101,98,96,101,101,100,103]

Попытка использовать это:

from linearmodels.panel import PanelOLS
mod = PanelOLS(df.y, df[['pid','rid']], entity_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)

Это дает ошибку, говоря, что мне нужен 2-уровневый MultiIndex. Я не уверен, из чего это должно состоять, поэтому помощь будет высоко ценится!

Я попробовал подход, чтобы изменить его на нормальную линейную регрессию путем перекрестного табулирования массива, чтобы иметь 6 полей и значения 1 и 0 в значениях, но это не подходит для моего фактического набора данных, так как он имеет около 5000 значений p и 1000 значения r

1 ответ

Привет, Даниэль, тебе просто нужно создать подходящий мультииндекс, добавив в свой код следующие строки:

import pandas as pd
df = pd.DataFrame()
df['pid'] = [1,1,1,2,2,2,3,3,3]
df['rid'] = [1,2,3,1,2,3,1,2,3]
df['y'] = [100,102,101,98,96,101,101,100,103]

df['individual'] = ['a','a','a','b','b','b','c','c','c']
df['time'] = [10,11,12,10,11,12,10,11,12]
df = df.set_index(['individual','time'])


from linearmodels.panel import PanelOLS
mod = PanelOLS(df.y, df[['pid','rid']], entity_effects=False)
res = mod.fit(cov_type='clustered', cluster_entity=True)
print(res.params)

pid    22.756410
rid    23.589744
Name: parameter, dtype: float64

Это потому, что переменные панели имеют многоиндексный X_it для его идентификации.

Другие вопросы по тегам