Tvärsnittsdata (cross-section) innebär att vi har data från många analysenheter, vid en tidpunkt.
Tidsseriedata (time-series) innebär att vi har data från en analysenhet, vid många tidpunkter.
Paneldata (time-series cross-section) innebär att vi har data från många analysenheter, vid många tidpunkter.
Med paneldata kan man göra intressantare analyser än med både tvärsnittsdata och tidsseriedata, som ger oss bättre möjligheter att utesluta alternativa förklaringar (och därmed göra det lättare att tala om orsak och verkan).
I Stata kan man använda tidsseriekommandon (se separat guide för dem!) i paneldata för att skapa laggade och ledande variabler. Vi kan också använda speciella regressionkommandon som är anpassade till paneldata, som xtreg
.
Men först måste man berätta för Stata att datan är paneldata. Om detta handlar denna guide.
Paneldata kan vara strukturerad på två olika sätt: "long" eller "wide", alltså "lång" eller "bred". Säg till exempel att vi har data på länder, över tid.
Med bred (wide) data motsvara varje rad i datasetet ett land, och varje kolumn en variabel, vid en tidpunkt. Till exempel ett lands befolkningsstorlek, ett visst år. Såhär:
country | population2000 | population2001 | population2002 |
---|---|---|---|
Sweden | 8872284 | 8888675 | 8911899 |
Norway | 4491572 | 4514907 | 4537240 |
Det kan verka intuitivt vid första anblicken, och gör det lätt att jämföra enskilda år. Men det blir svårare att göra mer avancerade analyser, och med många olika variabler (befolkning, BNP, arbetslöshet, osv) blir det väldigt många kolumner.
Oftast är det istället bättre att ha datan i långt format. Där är varje rad ett land ett år, och varje kolumn en variabel. Vi måste bara se till att ha en variabel som visar vilket år det är. Ovanstående tabell i långt format skulle se ut såhär:
country | year | population |
---|---|---|
Sweden | 2000 | 8872284 |
Sweden | 2001 | 8888675 |
Sweden | 2002 | 8911899 |
Norway | 2000 | 4491572 |
Norway | 2001 | 4514907 |
Norway | 2002 | 4537240 |
Samma data, i ett annat format. Här får vi istället en väldig massa rader, men det är lättare att hantera i Stata. För att byta format från wide till long, eller från long till wide, använd kommandot reshape
. Om detta kommer en egen guide. Resten av guiden förutsätter att datan är i långt format.
xtset
¶Vi behöver ange två variabler för Stata: en panelvariabel och en tidsvariabel. Panelvariabeln är i det här fallet land - alla observationer för Sverige hänger ihop, alla observationer för Norge hänger ihop, osv. Tidsvariabeln är i det här fallet år.
Vi gör det med kommandot xtset
. Man skriver bara xtset country year
till exempel. Låt oss prova, med QoG-institutets paneldatamängd, som innehåller just information om länder, över tid. Datan är i långt format.
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_ts_jan18.dta", clear
I variabeln "cname" står det vad varje land heter, och i variabeln "year" står det vilket år det är. Men om vi prövar att skriva in detta med xtset
så får vi ett felmeddelande:
xtset cname year
Stata klagar här på att panelvariabeln "cname" är text. Stata vill att det ska vara en sifferkod. I QoG-datan finns det sådana variabler, till exempel variabeln "ccode". Men i andra fall, till exempel när vi sätter ihop datan själv, kanske det inte finns någon sådan kod. Då får vi göra en själv. Det gör man lätt med kommandot egen
kombinerat med group()
:
egen countryid = group(cname)
Det som händer här är att Stata går igenom alla unika värden på variabeln "cname". Varje unikt värde får en egen sifferkod, från 1 och uppåt. Den här variabeln kan vi nu använda som vår panelvariabel.
xtset countryid year
Nu fungerade det! Vi ser att vår nya variabel "countryid" är panelvariabeln, och att tidsvariabeln är year.
Ett annat vanligt felmeddelande man kan få är "repeated time values within panel". Det betyder att det finns dubletter. De två variablerna man ställer in med xtset
måste ge unika kombination för alla observationer. Om till exempel Sverige år 2000 finns med flera gånger i datasetet så vet Stata inte hur de observationerna ska hanteras, och då får man felmeddelandet.
Såhär ser det ut:
xtset countryid year
Tyvärr berättar Stata inte närmare vilka observationer det är som är problematiska. Men vi kan använda kommandot duplicates
för att hitta dem. Vi skriver då duplicates list
följt av variablerna i fråga, båda två. Om vi till exempel skriver duplicates list countryid
så kommer vi få ut en massa observationer, eftersom varje land finns med många gånger. Men om vi skriver duplicates list countryid year
får vi bara ut de observationer som är dubletter på båda variablerna.
duplicates list countryid year
Här ser vi nu att det är 8 observationer som ställer till det. De har värdet 483 på variabeln countryid, och värdet 2000 på variabeln year.
När vi nu vet vilka observationer det är som strular behöver vi fundera på varför de finns med flera gånger. I det här fallet är det för att jag själv skapade dem, för att kunna visa felmeddelandet. Det går alltså bra att bara ta bort dem. Men i verkligheten är det inte givet vilka observationer som är de riktiga, så att säga. Då kan man inte bara ta bort dem hur som helst. Här gäller det alltså att ställa en diagnos just för det enskilda fallet.
Om man vill ta bort dem använder man i alla fall kommandot drop
i kombination med en if-sats. Här nedan anger vi att alla observationer med värdet 483 på countryid och 2000 på year ska tas bort.
drop if countryid==483 & year==2000
Och efter det ska det gå bra att använda xtset
som det är tänkt.
xtset countryid year
Nu är vi redo att börja använda datan. Vi kan till exempel prova att göra en laggad variabel som visar befolkningen föregående år. Här använder vi vanliga tidsseriekommandon.
gen lag_pop = l.unna_pop
Om vi nu tittar på ett utsnitt av datan så ser vi att det fungerade:
list cname year unna_pop lag_pop if cname=="Sweden" & year>2010
Värdet på variabeln "unna_pop" är för Sverige år 2011 9462352 personer. Året efter har variabeln lag_pop också värdet 9462352. Som planerat! Det finurliga är också nu att Stata inte bara flyttat alla rader i kolumnen ett steg, utan tar hänsyn till att länderna byts. Det ena landets sista år blir inte till det första i nästa eller så.
Det kan vara lite trix med att ställa in paneldata på rätt sätt, så att Stata fattar hur datan ska hanteras. Det är viktigt att datan är i långt format, så att varje rad är ett landår, och att man har en egen variabel som visar vilket år det är. Med kommandot reshape
kan man omvandla dataset från långt till brett, eller från brett till långt. Om detta kommer det en egen guide.