панели категориальных переменных

Для моей PanelOLS я люблю включать категориальные переменные. Это моя модель:

import statsmodels.api as sm

exog_vars = ['x1', 'x2', 'x3']
exog = sm.add_constant(df[exog_vars])
mod = PanelOLS(df.y, exog, entity_effects=True, time_effects=True)
result = mod.fit(cov_type='clustered', cluster_entity=True)

Категориальная переменная - это число для отрасли. Этот номер хранится в моем фрейме данных (df['x4']). Вы знаете, как включать категориальные переменные? Или вам нужна дополнительная информация, чтобы ответить на вопрос.

Мой фрейм данных:  введите описание изображения здесь

Я пытался:

df['x4'] = pd.Categorical(gesamt.x4)

mod = PanelOLS(gesamt.CAR, exog, other_effects=df['x4'], entity_effects=True, time_effects=True)

Произошла следующая ошибка:

raise ValueError('At most two effects supported.')

ValueError: поддерживается не более двух эффектов.


person Pytno    schedule 31.12.2019    source источник
comment
x1, x2, x3 числовые?   -  person ignoring_gravity    schedule 31.12.2019
comment
да, все столбцы числовые   -  person Pytno    schedule 31.12.2019


Ответы (1)


Самый простой способ сделать это - быстро закодировать столбец x4.

Если у вас есть

df = pd.DataFrame({'x1': [1,2,3], 'x4': ['bob', 'cat' ,'cat']})
df

который выглядит как

   x1   x4
0   1  bob
1   2  cat
2   3  cat

тогда

pd.get_dummies(df, 'x4')

дает тебе

   x1  x4_bob  x4_cat
0   1       1       0
1   2       0       1
2   3       0       1

В качестве альтернативы,

df['x4'] = pd.Categorical(df.x4).codes
df

даст тебе

   x1  x4
0   1   0
1   2   1
2   3   1
person ignoring_gravity    schedule 31.12.2019
comment
спасибо за ваше решение. В моем случае у меня около 100 различных отраслей. Знаете ли вы, есть ли другой способ, кроме создания новых столбцов для каждой отрасли? - person Pytno; 31.12.2019
comment
Можете ли вы указать в своем вопросе пример ваших данных? Не уверен, что понимаю, извините - person ignoring_gravity; 31.12.2019
comment
@Pytno Я обновил свой ответ - возможно, это то, что вам нужно? - person ignoring_gravity; 31.12.2019
comment
(Кстати, если вы используете LightGBM в качестве модели, вы можете напрямую использовать категориальные столбцы без необходимости их кодирования) - person ignoring_gravity; 31.12.2019