Taloustieteen kursseilla käytetään lähtökohtaisesti R-ohjelmointikieltä. Niin yliopistolla kuin tutkimuslaitoksissa käytetään kuitenkin usein Stataa. Missä sitä Stataa sitten voi oppia? Tässä artikkelissa käymme läpi Statan peruskäyttöä sen verran, että työhaastattelussa kehtaa sanoa osaavansa ainakin perusteet ja CV:ssä “working knowledge”.
R:ään tottuneelle Stata on melko erilainen kokemus. Ensijärkytyksen jälkeen Statan syntaksi on kuitenkin huomattavasti R:ää yksinkertaisempaa, minkä lisäksi mukavana yllätyksenä useimmat upouudetkin ekonometriset menetelmät on usein implementoitu Stata-paketteina. Monimutkaistenkin asioiden koodaaminen on siis nopeaa ja helppoa.
Varjopuolena kuitenkin on se, että mata-kieli, jolla nämä paketit on usein kirjoitettu, ei ole ihan helpoimmasta päästä. Niinpä silloin, kun pitää itse kirjoittaa esimerkiksi estimaattoreita, kannattaa harkita muiden kielten käyttämistä.
Koska tämä ei ole mikään IT-tuki, emme käy läpi Statan asentamista. Kun saat Statan auki, voit aloittaa vaihtamalla värit yötilaan, koska yhdenkään itseään kunnioittavan ekonomistin silmät eivät kestä kelmeää valkoista valoa. Sitten voimme aloittaa.
Voimme käyttää Statan sisäänrakennettuja aineistoja kirjoittamalla sysuse auto, clear, jossa clear kertoo, että haluamme tyhjentää nykyisen aineiston ja avata sp500-nimisen aineiston sen tilalle. Komennolla sysuse dir pääsee katsomaan myös muita Statan sisäänrakennettuja datoja. Erona R:ään ja useisiin muihinkin ohjelmointikieliin Statassa on lähtökohtaisesti käytössä yksi aineisto kerralla (frame-toiminnoilla on kuitenkin mahdollista avata useampi data kerralla).
Auto-aineisto on poikkileikkaus autojen hinta- ja teknisistä tiedoista. Komennolla summarize (tai lyhennettynä sum) voimme katsoa yhteenvetotunnuslukuja koko aineistosta, tai lisäämällä komennon perään yhden tai useamman muuttujan, pelkästään niistä. Komento describe puolestaan kertoo muuttujien tietotyypeistä.
Komennolla histogram (eli hist) voimme piirtää hienon histogrammin haluamastamme muuttujasta, joka olkoon nyt hinta: kirjoitamme siis hist price, ja saamme hienon histogrammin. Komennolla help hist näkee komennon dokumentaation, ja saa selvitettyä esimerkiksi, miten muokata pylväiden leveyttä, akselien otsikoita jne. Muita peruskuvaajia saat piirrettyä esimerkiksi komennoilla scatter ja line, kun taas komennolla tabulate saa ristiintaulukoitua muuttujia.
Tehdään sitten vähän regressioita. Tätä varten otetaan käyttöön Statan sisäänrakennettu väestönlaskenta-aineisto käyttäen komentoa sysuse census, clear. Tämä aineisto sisältää väestötietoja Yhdysvaltain osavaltioista. Oletetaan, että haluamme tarkastella väestöllisten muuttujien yhteyttä avioerojen määrään (tässä mallissa ei juurikaan mitään järkeä, mutta se ei nyt ole oleellista).
Tätä varten voimme käyttää yksinkertaista lineaarista regressiota, jonka saa ajettua komennolla regress. Käytetään kuitenkin sen uudempaa ja monikäyttöisempää versiota, joka on nimeltään reghdfe (HDFE=high-dimensional fixed effects). Tämä komento ei ole sisäänrakennettu Stataan, joten sen asentamiseksi täytyy ajaa rivi ssc install reghdfe, joka asentaa komennon Stata Software Centeristä.
Mallinnamme nyt siis avioerojen määrää käyttäen selittävinä muuttujina osavaltion eri-ikäisen väestön määrää, mediaani-ikää ja kaupungissa asuvaa väestöä. Lisäksi haluamme alueelliset kiinteät vaikutukset, sekä klusteroida keskivirheet aluetasolla. Absorb-optio nimensä mukaisesti “absorboi” kiinteät vaikutukset, eikä siis estimoi niille kertoimia. Tämä nopeuttaa estimointia ja on erityisen hyödyllistä silloin, kun emme ole varsinaisesti kiinnostuneita kiinteiden vaikutusten suuruudesta ja/tai niitä on todella paljon (eli lähes aina). Jos haluaisimme nähdä kiinteät vaikutukset, voisimme lisätä regionin faktorimuuttujana (eli i.region) popurbanin perään. Komento näyttää siis seuraavalta:
reghdfe divorce poplt5 pop5_17 pop18p pop65p medage popurban, absorb(region) cluster(region)
Tulokset viittaavat tilastollisesti merkitsevään positiiviseen korrelaatioon alle 5-vuotiaiden lasten määrän ja avioerojen määrän sekä mediaani-iän ja avioerojen välillä. Vaikka saman lopputuloksen saa komennolla reg (hieman eri syntaksilla tosin), on reghdfe huomattavasti käytännöllisempi useimmissa sovelluksissa, sillä sen avulla voi kätevästi sisällyttää haluamansa määrän kiinteitä vaikutuksia ja klusteroida niin monella tasolla kuin haluaa.
Vaihdetaan sitten kolmanteen aineistoon. Komennolla sysuse sp500, clear voimme avata S&P 500 -indeksin päivittäisiä kurssitietoja vuoden ajalta sisältävän (sisäänrakennetun) aineiston. Komennolla tsset date voimme määritellä aineiston aikasarjaksi (vastaava komento paneeliaineistolle olisi xtset panelunit date, mutta tässä aineistossa ei ole paneelirakennetta), minkä jälkeen komennolla tsset open high low close saamme hienon, joskin hieman vaikealukuisen aikasarjakuvaajan koko aineistosta.
Entäpä jos haluaisimme tietää, missä kuussa on ollut keskimäärin parhaat tuotot tai suurin kaupankäynnin volyymi? Tätä varten voimme tehdä taulukon kuukausitason keskiarvoista. Tämä onnistuu helposti komennolla tabstat, jolla saa yhdellä rivillä julkaisukelpoisia taulukoita. Nyt tarvitsemme kuitenkin myös toisen rivin, jolla määrittelemme kuukausi-muuttujan päivämäärästä. Koodimme on siis seuraavanlainen:
gen month = month(date)
tabstat change open high low close volume, by(month)
month | change | open | high | low | close | volume |
1 | 4.137 | 1333.469 | 1345.714 | 1321.763 | 1335.639 | 13252.29 |
2 | -6.635267 | 1312.398 | 1318.743 | 1295.958 | 1305.752 | 11391.79 |
3 | -3.618636 | 1189.469 | 1200.07 | 1172.458 | 1185.85 | 12639.37 |
4 | 4.4565 | 1185.381 | 1201.693 | 1173.554 | 1189.837 | 12704.99 |
5 | .2890902 | 1270.225 | 1278.08 | 1260.102 | 1270.369 | 11148.14 |
6 | -1.49714 | 1240.208 | 1247.655 | 1230.402 | 1238.71 | 11784.78 |
7 | -.6261916 | 1205.077 | 1213.393 | 1195.311 | 1204.45 | 11330.34 |
8 | -3.376088 | 1181.881 | 1188.086 | 1171.793 | 1178.504 | 10156.17 |
9 | -6.176001 | 1050.82 | 1060.683 | 1031.279 | 1044.644 | 16683.53 |
10 | .8191343 | 1075.77 | 1084.312 | 1064.607 | 1076.59 | 13022.3 |
11 | 3.793806 | 1125.89 | 1135.15 | 1118.555 | 1129.683 | 12538.1 |
12 | .4315002 | 1144.447 | 1151.905 | 1138.166 | 1144.93 | 12564.28 |
Total | -.5473282 | 1194.884 | 1204.044 | 1183.334 | 1194.179 | 12320.68 |
Taulukosta näemme kätevästi, että huhtikuu on ollut tuottoisin kuukausi, kun taas syyskuu on puolestaan ollut huonoin. Kaupankäyntiä on myös ollut eniten syyskuussa (kenties tällä on jokin yhteys tuottoon?).
Tabstat on todella monikäyttöinen komento, jonka avulla saa esitettyä isommankin aineiston jakaumatunnuslukuja selkeässä muodossa. Optiolla statistic() saa lisättyä haluamiaan tunnuslukuja, kuten keskihajonnan, varianssin, kvantiileja jne.
Selvitetään vielä lopuksi, onko indeksin avaustasolla jokin yhteys päivän tuottoon. Tätä varten teemme ensin hajontakuvaajan näistä muuttujista, ja sitten vielä yksinkertaisen regression tilastollista testaamista varten. Voimme myös yhdistää sovitetun suoran hajontakuvaajaan twoway-komennolla, joka mahdollistaa kahden (tai useamman) kuvaajan yhdistämisen samaan kuvaan. Twoway-komennon avulla saa piirrettyä myös aikaisemman aikasarjakuvaajan, joskin tällöin tarvittava koodi on hieman pidempi. Yleisesti twoway on kuitenkin joustavampi esimerkiksi kuvaajatyyppien suhteen.
Nyt komentomme on siis twoway (scatter change open) (lfit change open). Sovitettu suora on lievästi negatiivinen, mutta ei tilastollisesti merkitsevä, kuten komento reg change open, r (jossa huomioimme myös mahdollisen heteroskedastisuuden robust-optiolla, jonka voi lyhentää kirjaimella r) paljastaa. (Huomaa jälleen, että tämäkään malli ei ole mielekäs, ja tarkoitus on vain havainnollistaa komentojen käyttöä.)
Näillä muutamilla komennoilla pääsee jo pitkälle empiirisen analyysin tekemisessä. Kuten mainittu, Statan dokumentaatio on hyvä, ja sieltä on helppo selvittää esimerkiksi komentojen optioita, kuten akselien tai selitteen muokkaamista. Apua löytyy hyvin myös esimerkiksi Statalist-foorumilta, jossa henkilö nimeltä Nick Cox on miettinyt lähes kaikki mahdolliset ongelmatilanteet puolestasi. Jos nimi Nick Cox ei sano sinulle mitään, et ole vielä päässyt kunnolla Statan makuun. Vielä.