/* Mikroekonometria Zajecia 13 - Ocena efektów działania CC BY: Mikolaj Czajkowski, Wiktor Budzinski */ * cd "C:\Users\..." // 1.1 Wczytaj zbiór danych me.math.dta use me.math.dta, clear des sum // 1.2 Sprawdź jak nowy program nauczania matematyki w szkole wpływa na wynik uczniów na teście z algebry (American College Testing Program) // 1.2.1 Wykorzystaj Parowanie współczynników skłonności // Zauważamy, że mamy poziomy zmiennych objaśniających, które determinują nam czy ktoś został poddany działaniu sum treat if grade == 12 sum treat if crcd == 4 sum treat if gradeexp == 1 sum treat if gradeexp == 0 // Pozbywamy sie tych obserwacji drop if grade == 12 | crcd == 4 | gradeexp == 1 | gradeexp == 0 // Liczmy regresję logistyczną, w której wyjaśniamy czy ktoś został poddany działaniu // Nie uwzględniamy tutaj w ogóle zmiennej która nas tak naprawdę interesuje, tj. outcome global socio sex i.grade afam amind cauc mexam aspifi pr global scores pretest aikpos aikneg i.crnum i.cralg i.crspace i.crmeas i.crcd i.gradeexp logit treat $socio $scores // Sprawdzamy istotność części zmiennych i pozbywamy się ich z modelu test sex 2.crnum 3.crnum 4.crnum 2.crspace 3.crspace 4.crspace 2.crcd 3.crcd 2.crmeas 3.crmeas 4.crmeas amind mexam aspifi pr global socio i.grade afam cauc global scores pretest aikpos aikneg i.cralg i.gradeexp logit treat $socio $scores // Liczymy Parowanie współczynników skłonności // outcome to zmienna która nas interesuje (wynik na teście) // w drugim nawiasie wstawiamy równanie dla regresji logistycznej teffects psmatch (outcome) (treat $socio $scores) // Oszacowany efekt wynosi -3.4, tzn. uczniom, którzy mieli nowy program poszło gorzej na teście teffects overlap // porównanie przewidywanych p-stw bycia poddanym działaniu w grupie, która nie była poddana działaniu, oraz w grupie która była // Przecięcie pola pod tymi wykresami powinno być dość spore - w przeciwnym wypadku ciężko byłoby znaleźć dobrą "parę" teffects psmatch (outcome) (treat $socio $scores), generate(po) //opcja generate tworzy zmienne, które mówią kogo dobrano do pary teffects psmatch (outcome) (treat $socio $scores), nneighbor(2) // Możemy wymusić, żeby STATA dobierała conajmiej dwie osoby "do pary" dla każdego respondenta teffects psmatch (outcome) (treat $socio $scores, probit), caliper(0.06) osample(err) // Możemy chcieć wymusić żeby "pary" były dopierane tylko jeśli współczynników skłonności są bliższe niż (przykładowo) 0.06 // Model się nie liczy bo dla niektórych obserwacji nie da się znaleźć takiej "pary" (zmienna err wskazuje obserwacje dla których ten problem występuje) // Można próbować poprawić model logistyczny, albo wyrzucić te obserwacje tab err treat // Widzimy, że problem jest głównie w obserwacjach poddanych działaniu teffects psmatch (outcome) (treat $socio $scores, probit) // Alternatywnie można wykorzystać probit zamiast logit (dostępny jest jeszcze hetprobit) teffects psmatch (outcome) (treat $socio $scores), atet // opcja atet liczy średni efekt działania dla osób, które zostały poddane działaniu // 1.2.2 Porównaj wyniki ze zwykłą regresją liniową reg outcome treat $socio $scores // Widzimy, że wynik jest bardzo zbliżony // 2.1 Wczytaj zbiór danych me. medexp3.dta use me.medexp3.dta, clear des sum global xlist totchr age female blhisp linc // 2.2 Sprawdź czy logarytm wydatków na leki zależy od tego ktoś posiada dodatkowe ubezpieczenie od pracodawcy // 2.2.1 Porównaj modele MNK oraz 2MNK reg ldrugexp hi_empun $xlist // logarytm wydatków na leki objaśniany przez posiadanie ubezpieczenia oraz dodatkowe zmienne kontrolne ivregress 2sls ldrugexp $xlist (hi_empun = ssiratio) // Używamy 2MNK aby dodatkowo kontrolować endogeniczność naszego działania // Jako zmiennej instrumentalnej używamy ssiratio, która mówi jaka część dochodu respondenta pochodzi z zasiłków // Kontrolowanie endogeniczności zmienia znak efektu działania // 2.3 Wykorzystaj model z endogenicznym działaniem etregress ldrugexp $xlist, treat(hi_empun = ssiratio $xlist) // składnia podobna do 2MNK, różnicą jest, że w drugim równaniu musimy dodać xlist // Interpretacja pierwszego rownania taka sama jak w regresji liniowej. tzn. posiadanie ubezpieczenia zmniejsza wydatki na leki o 141% // Interpretacja równania drugiego jak w regresji probitowej, tzn. wzrost ssiratio zwiększa p-stwo posiadania ubezpieczenia // Na dole test na endogeniczność - ponieważ p-value jest niskie, odrzucamy hipotezę zerową o braku endogeniczności // 2.4 Rozszerz powyższy model o osobne błędy losowe dla osób poddanych działaniu oraz osób niepoddanych działaniu etregress ldrugexp $xlist, treat(hi_empun = ssiratio $xlist) poutcomes //Dodajemy opcję poutcomes // Widzimy, że oszacowania rho i sigmy różnią się w zależności od tego czy ktoś został poddany działaniu czy nie. // Obserwujemy też znaczącą poprawę LL // 3.1 Wczytaj zbiór danych me.senate.dta use me.senate.dta, clear des sum // Musimy zainstalować odpowiedni pakiet help rdrobust // Margin jest dokładnie zdefiniowane jako: //Democratic vote share minus the vote share of the strongest opponent and ranging from -100 to 100 percentage points. // 3.2 Sprawdź jak zwycięstwo partii demokratycznej w poprzednich wyborach do senatu wpływa na ich wynik w kolejnych wyborach // Nieciągłość jest w 0, tzn. Margin > 0 odpowiada wygranej w poprzednich wyborach rdrobust vote margin // regresja z nieciągłością // Okazuje się, że wygrana w poprzednich wyborach zwiększa wynik w następnych o 7.42 punkty procentowe // Algorytm automatycznie wybiera jakie obserwacje uwzględniamy w regresji, tutaj BW est. (h) = 17.708 // Tzn. uwzględniamy obserwacje, dla których wynik w poprzednich wyborach (margin) był od -17.708 do 17.708 rdrobust vote margin, all // raportuje dodatkowe oszacowania z korektą // Robust różni się tylko oszacowaniem błędu standardowego rdrobust vote margin, h(15) // możemy ręcznie wybrać h rdrobust vote margin, p(4) // możemy również wybrać jak przybliżać funkcję m(S) // Domyślnie wykorzystuje się wielomian pierwszego stopnia // Im wyższy poziom wielomianu tym więcej obserwacji potrzebnych - zwiększa się h rdplot vote margin // Wykres przedstawiający graficznie regresje z nieciągłością rdplot vote margin, h(17.708) p(1) // Wykres z parametrami, które nam wyszły z komendy rdrobust rdplot vote margin if abs(margin) < 20, ci(95) shade h(17.708) p(1) // Zbliżenie wykresu // W rzeczywistości dane nie wyglądają tak "ładnie" scatter vote margin if abs(margin) < 20 // 4.1 Wczytaj zbiór danych me.minwage.dta use me.minwage.dta, clear des sum // 4.2 Sprawdź czy wzrost płacy minimalnej w New Jersey w 1992 roku spowodował spadek zatrudnienia w zatrudnienia w sektorze fast-foodów. // 4.2.1 Policz model regresji liniowej reg fte i.t##i.treated // Prosty model regresji liniowej // Interesujący nas współczynnik to interakcja między t i treated. Tutaj wychodzi nieistotna reg fte i.t##i.treated i.bk i.kfc i.roys // Dodajemy dodatkowe zmienne mówiące o rodzaju restauracji // Po dodaniu dodatkowych zmiennych efekt staje się (ledwo) istotny // Efekt jest pozytywny, tzn. wzrost płacy minimalnej zwiększył zatrudnienie o 2.94 // 4.2.2 Wykorzystaj modele efektów losowych i efektów stałych. xtset id t // definiujemy panel xtreg fte i.t##i.treated i.bk i.kfc i.roys, re // Model efektów losowych xtreg fte i.t##i.treated i.bk i.kfc i.roys, fe // Model efektów stałych // Współczynnik jest teraz silnie istotny // Możemy spróbować policzyć model na logarytmie hist fte gen lfte = log(fte+1) hist lfte xtreg lfte i.t##i.treated i.bk i.kfc i.roys, re xtreg lfte i.t##i.treated i.bk i.kfc i.roys, fe // Efekt staje się nieistotny // Widzimy, że efekt działania jest silnie zależny od postaci funkcyjnej modelu