Панель пробит в Python - PullRequest
       96

Панель пробит в Python

0 голосов
/ 10 июня 2018

Мой набор данных ( "prob" ) представляет собой несбалансированную панель, которая выглядит следующим образом:

     index                               x1      x2      x3     y (dummy 0/1)
(100, Timestamp('2016-01-26 09:10:00')) 19.9    13.44  -0.006   0
(100, Timestamp('2016-01-26 09:15:00')) 17.2    13.25  -0.046   0                     
(200, Timestamp('2016-01-26 09:20:00')) 19.4    19.06   0.04    1                        

Я хотел бы оценить модель пробита панели в Python (у меня слева -переменная стороны, x1, x2, x3 - переменные правой части).В сущности панели должны быть идентификаторы, которые находятся в первой части индекса фрейма данных (100, 200 и т. Д.). Насколько я понимаю, мне нужна функция Python, аналогичная Stata "xtprobit" . * 1008.*

Единственный способ, с помощью которого я придумал:

mod = PanelOLS (prob.dummy, prob [['x1', 'x2', 'x3']], entity_effects = True)
res = mod.fit (cov_type = 'clustered', cluster_entity = True)
print (res)

Является ли это панельной пробит-моделью?

Выходные данные выглядят иначе, чем у модели пробита (полученной через функцию "sm.Probit" из statsmodels ), и я не знаю, как я могу оценить предельные эффекты пробита.Или я должен каким-то образом изменить "sm.Probit", чтобы сделать его пробитом панели?(теперь я знаю только, как использовать его в «временных рядах» только для одного объекта).

1 Ответ

0 голосов
/ 10 июня 2018

Немного предыстории:

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

statsmodels в основном использует термин groups для обозначения сущностей.

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

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

Таким образом, в этом случае мы можем просто использовать фиктивные переменные для эффекта группы или сущности, например, автоматически создавая эффекты сущности с помощью patsy, используя интерфейс формул, где data - это объект DataFrame для панд или диктованный объект с именами переменных какключи.

mod = probit('y ~ x1 + x2 + x3 + C(group_id)', data)

Пэтси создает манекены с фиксированными эффектами для C(group_id).Если включена константа, которой она является по умолчанию, то один опорный уровень будет отброшен, чтобы избежать «ловушки фиктивной переменной».

Аналогичное различие между длинными и широкими панелями применимо к стандартным ошибкам, которые устойчивы к групповой корреляции.

cov_type='cluster' предполагает, что у нас есть широкий панельный случай, то есть большое количество объектов итолько несколько наблюдений на единицу.Вычисление предполагает, что количество объектов или кластеров больше, чем количество наблюдений в кластерах, IIRC.

Для длинных панелей с последовательной корреляцией внутри объектов мы можем использовать HAC cov_type внутри объектов.В этом случае statsmodels имеет cov_types "hac-panel" и "hac-groupsum".

statsmodels по-прежнему не имеет центрального местоположения для документирования сэндвич-cov_types, но оно такое же в моделях, которые его поддерживают.Доступные типы cov_typs и требуемая дополнительная информация приведены здесь:

http://www.statsmodels.org/devel/generated/statsmodels.regression.linear_model.RegressionResults.get_robustcov_results.html

Для широких панелей основной моделью, доступной в statsmodels, является GEE.Недавно был добавлен байесовский MixedGLM.Пока нет доступных моделей MixedGLM для частых, единственной доступной является линейная Gaussian MixedLM.

...