Różnice w różnicach z danymi panelu poszczególnych poziomów


11

Jaki jest prawidłowy sposób określenia różnicy w modelu różnicowym z danymi panelu poszczególnych poziomów?

Oto konfiguracja: Załóżmy, że mam dane panelu na poziomie indywidualnym osadzone w miastach przez wiele lat, a leczenie różni się w zależności od roku. Formalnie, niech być wynikiem indywidualnej I w miasto s i rok t i D s t być obojętne dla czy interwencja miasta mającego problemy s w roku t . Typowy estymator DiD, taki jak przedstawiony w Bertrand i wsp. (2004, s. 250), opiera się na prostym modelu OLS ze stałymi warunkami efektu dla miasta i roku:yististDstst

yist=As+Bt+cXist+βDst+ϵist

Ale czy estymator ignoruje strukturę paneli na poziomie indywidualnym (tj. Wiele obserwacji dla każdej osoby w miastach)? Czy sensowne jest rozszerzenie tego modelu o termin stałym poziomie indywidualnym ? Wiele aplikacji DiD korzysta z powtarzających się danych przekroju bez danych panelu na poziomie indywidualnym.Si


Bertrand, Marianne, Esther Duflo i Sendhil Mullainathan. 2004. „Jak bardzo powinniśmy ufać szacunkom różnic w różnicach?” Quarterly Journal of Economics 119 (1): 249–75.


Jeśli chcesz uchwycić efekty manekinów bytu, dlaczego nie zrobić modelu z efektami stałymi? DID jest równoważne FE z 2 przedziałami czasowymi, więc włączenie manekinów, a następnie wykonanie DID spowoduje ich wypadnięcie.
VCG

Popraw mnie, jeśli się mylę, ale widzę dwie różnice: a) model fe użyłby porównania wewnątrz jednostki w celu oszacowania efektu (np. Czy dochód jest wyższy lub niższy po pewnym wydarzeniu życiowym). Ideą podejścia DiD jest wykorzystanie innych obserwacji jako trendu kontrolnego do uchwycenia tego, co by się stało bez leczenia. b) DiD koncentruje się na leczeniu grupowym, a nie indywidualnym. Teraz pytanie brzmi, co się stanie, jeśli po prostu dodam do równania indywidualny poziom fe do mojego przykładu. Czy to wykorzystuje sterowanie jako trend kontroli? Jednak wszystkie kontrole nie różnią się w zależności od leczenia ...
greg

Odpowiedzi:


11

yist=Ag+Bt+βDst+cXist+ϵist
i uzyskaj efekt przyczynowy leczenia jako oczekiwaną różnicę po wyniku przed leczeniem minus oczekiwaną różnicę po zakończeniu leczenia dla kontroli.

yit=αi+Bt+βDit+cXit+ϵit
Dit autor: Steve Pischke.

Ag

Oto przykład kodu, który pokazuje, że tak jest. Używam Staty, ale możesz to powtórzyć w wybranym pakiecie statystycznym. „Osoby” tutaj są w rzeczywistości krajami, ale nadal są pogrupowane według niektórych wskaźników leczenia.

* load the data set (requires an internet connection)
use "http://dss.princeton.edu/training/Panel101.dta"

* generate the time and treatment group indicators and their interaction
gen time = (year>=1994) & !missing(year)
gen treated = (country>4) & !missing(country)
gen did = time*treated

* do the standard DiD regression
reg y_bin time treated did

------------------------------------------------------------------------------
       y_bin |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        time |       .375   .1212795     3.09   0.003     .1328576    .6171424
     treated |   .4166667   .1434998     2.90   0.005       .13016    .7031734
         did |  -.4027778   .1852575    -2.17   0.033    -.7726563   -.0328992
       _cons |         .5   .0939427     5.32   0.000     .3124373    .6875627
------------------------------------------------------------------------------

 * now repeat the same regression but also including country fixed effects
 areg y_bin did time treated, a(country)

------------------------------------------------------------------------------
       y_bin |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        time |       .375    .120084     3.12   0.003     .1348773    .6151227
     treated |          0  (omitted)
         did |  -.4027778   .1834313    -2.20   0.032    -.7695713   -.0359843
       _cons |   .6785714    .070314     9.65   0.000       .53797    .8191729
-------------+----------------------------------------------------------------

Widzisz więc, że współczynnik DiD pozostaje taki sam, gdy uwzględniane są poszczególne efekty stałe ( aregjest to jedno z dostępnych poleceń szacowania efektów stałych w Stata). Standardowe błędy są nieco ściślejsze, a nasz oryginalny wskaźnik leczenia został pochłonięty przez poszczególne ustalone efekty i dlatego spadł w regresji.

W odpowiedzi na komentarz
wspomniałem przykład Pischke, aby pokazać, kiedy ludzie używają indywidualnych ustalonych efektów, a nie wskaźnika grupy leczenia. Twoje ustawienie ma dobrze zdefiniowaną strukturę grupy, więc sposób, w jaki napisałeś swój model, jest w porządku. Standardowe błędy powinny być grupowane na poziomie miasta, tj. Na poziomie agregacji, na którym następuje leczenie (nie zrobiłem tego w przykładowym kodzie, ale w ustawieniach DiD standardowe błędy należy poprawić, jak wykazali Bertrand i in. ).

Dstst

c=[E(yist|s=1,t=1)E(yist|s=1,t=0)][E(yist|s=0,t=1)E(yist|s=0,t=0)]

E(yist|s=1,t=1)E(yist|s=0,t=1). Aby wyjaśnić, dlaczego identyfikacja wynika z różnic grupowych w czasie, a nie od osób poruszających się, możesz to sobie wyobrazić za pomocą prostego wykresu. Przypuśćmy, że zmiana wyniku jest naprawdę tylko z powodu leczenia i że ma równoczesny efekt. Jeśli mamy osobę, która mieszka w leczonym mieście po rozpoczęciu leczenia, ale następnie przenosi się do miasta kontrolnego, ich wynik powinien powrócić do stanu sprzed leczenia. Jest to pokazane na poniższym stylizowanym wykresie.

wprowadź opis zdjęcia tutaj

Nadal możesz chcieć myśleć o przeprowadzkach z innych powodów. Na przykład, jeśli leczenie ma trwały efekt (tj. Nadal wpływa na wynik, nawet jeśli osoba się przeprowadziła)


2
Niezła odpowiedź. Czy poleciłbyś również grupowanie błędów na poziomie miasta tutaj?
Dimitriy V. Masterov,

Świetna odpowiedź, dzięki. Twój eq to eq 3 ze strony 12, prawda? Pischke wprowadza tę część: „Jednak czasami nie ma naturalnych jednostek, do których przypisane jest leczenie. Zamiast tego niektóre osoby są leczone w określonym momencie, a inne nie”. Ale tak nie jest. Leczenie JEST na poziomie miasta (lub dowolnej grupy) w moim ustawieniu + mam dane panelowe. To może być nadal właściwy model, może z klastrowym se. Co byś powiedział? Co się stanie, jeśli jednostki będą mogły przemieszczać się między miastami przez lata? W takim przypadku coef dla „poddanego obróbce” zostałby zidentyfikowany na podstawie podmiotów przeprowadzających, prawda?
greg

@ DimitriyV.Masterov Bertrand i wsp. Zaleciliby zgrupowanie standardowych błędów na poziomie grupy, na której następuje leczenie. Alternatywnie możesz użyć blokowego bootstrapu z zamiennikiem, chociaż będzie to również na poziomie miasta.
Andy,

@greg Zredagowałem odpowiedź, aby odpowiedzieć nieco bardziej szczegółowo na Twój komentarz. Mam nadzieję, że to pomoże :-)
Andy,

czy robi to różnicę, jeśli używamy wielu okresów? manekin D_i_t będzie wynosił zero dla wszystkich okresów przed wydarzeniem i będzie taki sam dla wszystkich okresów po wydarzeniu. czy nie byłoby tak samo, gdybym użył tylko dwóch kropek? @Andy
Jinhua Wang

1

Krótka odpowiedź jest taka, że ​​zastosowanie stałego efektu na poziomie jednostki lub leczonej grupy nie zmienia oszacowania, a jedynie wnioskowanie. Zazwyczaj użycie jednostkowego efektu stałego absorbuje większą zmienność, a zatem będziesz miał mniejsze standardowe błędy.

To, czy jednostki znajdują się w tej samej grupie zagregowanej, nie zmienia tego wyniku (zmienia jedynie sposób definiowania poziomu leczonej grupy oraz fakt, że potrzebujesz panelu zamiast powtarzanych przekrojów).

Zauważ jednak, że równoważność obowiązuje tylko wtedy, gdy nie ma współzmiennej X. Gdy tylko masz X, wyniki są różne, niezależnie od tego, czy używasz efektów jednostkowych, czy grupowych.

Poniższy przykład porównuje 3 estymatory, w dwóch przypadkach, z X i bez X. Estymatory to:

  1. OLS
  2. FE z (leczonym) efektem stałej grupy
  3. FE z jednostkowym efektem stałym

#>              OLS         FE treated  FE unit   OLS x       FE treated x  FE unit x
#> ----------------------------------------------------------------------------------
#> (Intercept)   0.500 ***                         0.491 ***                         
#>              (0.094)                           (0.107)                            
#> did          -0.403 *    -0.403 *    -0.403 *  -0.407 *    -0.407 *      -0.460 * 
#>              (0.185)     (0.185)     (0.183)   (0.189)     (0.189)       (0.187)  
#> x1                                              0.018       0.018         0.220   
#>                                                (0.104)     (0.104)       (0.165)  
#> ----------------------------------------------------------------------------------
#> Num. obs.    70          70          70        70          70            70       
#> ==================================================================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05

Kod:

library(tidyverse)
library(haven)
library(texreg)
library(lfe)


dat <- read_dta("http://dss.princeton.edu/training/Panel101.dta")  %>% 
  mutate(time = (year>=1994) ,
         treated = (country>4),
         did = time*treated)

reg_ols <- lm(y_bin~ time+ treated+ did, data = dat)
reg_fe_a <- felm(y_bin~ did | time+ treated, data = dat)
reg_fe_b <- felm(y_bin~ did | time+ country, data = dat)

reg_ols_x <- update(reg_ols, .~.+x1)
reg_fe_a_x <- update(reg_fe_a, .~.+x1)
reg_fe_b_x <- update(reg_fe_b, .~.+x1)



screenreg(list(reg_ols, reg_fe_a, reg_fe_b, reg_ols_x, reg_fe_a_x, reg_fe_b_x), 
          omit.coef = "time|treated", digits=3, 
          include.rsquared = FALSE, include.adjrs = FALSE, include.rmse = FALSE,
          custom.model.names = c("OLS", "FE treated", "FE unit", "OLS x", "FE treated x", "FE unit x"))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.