Я пытаюсь выполнить анализ Разница в различиях (с панельными данными и фиксированными эффектами) с использованием Python и панды. У меня нет экономического образования, и я просто пытаюсь отфильтровать данные и запустить метод, который мне сказали. Однако, насколько я мог узнать, я понял, что базовая модель diff-in-diffs выглядит так:
То есть я имею дело с многомерной моделью.
Здесь следует простой пример в R:
https://thetarzan.wordpress.com/2011/06/20/differences-in-differences-estimation-in-r-and-stata/
Как видно, регрессия принимает в качестве входных данных одну зависимую переменную и древовидные наборы наблюдений.
Мои входные данные выглядят так:
Name Permits_13 Score_13 Permits_14 Score_14 Permits_15 Score_15
0 P.S. 015 ROBERTO CLEMENTE 12.0 284 22 279 32 283
1 P.S. 019 ASHER LEVY 18.0 296 51 301 55 308
2 P.S. 020 ANNA SILVER 9.0 294 9 290 10 293
3 P.S. 034 FRANKLIN D. ROOSEVELT 3.0 294 4 292 1 296
4 P.S. 064 ROBERT SIMON 3.0 287 15 288 17 291
5 P.S. 110 FLORENCE NIGHTINGALE 0.0 313 3 306 4 308
6 P.S. 134 HENRIETTA SZOLD 4.0 290 12 292 17 288
7 P.S. 137 JOHN L. BERNSTEIN 4.0 276 12 273 17 274
8 P.S. 140 NATHAN STRAUS 13.0 282 37 284 59 284
9 P.S. 142 AMALIA CASTRO 7.0 290 15 285 25 284
10 P.S. 184M SHUANG WEN 5.0 327 12 327 9 327
В ходе некоторых исследований я обнаружил, что это способ использования фиксированных эффектов и данных панели с Pandas:
Исправлен эффект в Pandas или Statsmodels
Я выполнил некоторые преобразования, чтобы получить данные Multi-index:
rng = pandas.date_range(start=pandas.datetime(2013, 1, 1), periods=3, freq='A')
index = pandas.MultiIndex.from_product([rng, df['Name']], names=['date', 'id'])
d1 = numpy.array(df.ix[:, ['Permits_13', 'Score_13']])
d2 = numpy.array(df.ix[:, ['Permits_14', 'Score_14']])
d3 = numpy.array(df.ix[:, ['Permits_15', 'Score_15']])
data = numpy.concatenate((d1, d2, d3), axis=0)
s = pandas.DataFrame(data, index=index)
s = s.astype('float')
Однако я не понял, как передать все эти переменные в модель, как это можно сделать в R:
reg1 = lm(work ~ post93 + anykids + p93kids.interaction, data = etc)
Здесь 13, 14, 15 представляют данные за 2013, 2014, 2015 годы, которые, как мне кажется, следует использовать для создания панели. Я назвал модель так:
reg = PanelOLS(y=s['y'],x=s[['x']],time_effects=True)
И это результат:
Мне сказал (экономист), что это, похоже, не работает с фиксированными эффектами.
--ИЗМЕНИТЬ--
Что я хочу проверить, так это влияние количества разрешений на счет с учетом времени. Количество разрешений — это лечение, это интенсивное лечение.
Образец кода можно найти здесь: https://www.dropbox.com/sh/ped312ur604357r/AACQGloHDAy8I2C6HITFzjqza?dl=0.