Reducera datamängder med collapse

Av Anders Sundell

När vi har datamängder med många obserationer från samma enhet kan vi ibland vara intresserade av att uttala oss om mängden som helhet. Vi kanske har individer i kommuner, och vill säga något om snitten i kommunerna. Eller så har vi många observationer av ett land över tid, och vill jämföra länderna som helhet, eller åren. Eller så har vi elever i klasser och vill säga något om klasserna.

I de fallen kan det vara lämpligt att använda sig av kommandot collapse. Det låter oss "koka ner" en datamängd, och få ut sammanfattande statistik för enheter som vi väljer.

Vi kan få ut en mängd olika uppgifter. Här är ett urval:

Kod Betydelse
mean Medelvärde
median Median
p90 90:e percentilen - funkar även med andra siffror, tex p10 eller p25
sd Standardavvikelse
sum Summa
count Antal observationer med giltiga värden
percent Andel observationer med giltiga värden
min Minsta värde
max Största värde

Men det finns ännu fler att välja på. Man kan få en fullständig lista genom att skriva help collapse.

Skära kakan åt ena hållet

I det här exemplet ska vi använda oss av QoG-institutets "Basic Time series cross section" dataset, som har information om världens länder, över tid. Varje land är alltså med en gång för varje år. Perioden börjar 1946.

I koden nedan händer tre saker. Först laddas datamängden in, med use.

Sedan kommer det viktiga kommandot collapse. Efter själva kommandot kommer (mean), som visar att vi vill spara medelvärden, och vi gör det för variablen wdi_empagr (andel anställda inom jordbruket). Sedan kommer ett nytt statistikkommando, (median), som vi vill ha för variabeln wdi_gdpcapcon2010 (BNP per capita). Vi hade också kunnat lista flera variabler för varje sorts statistikuppgift, eller haft ännu fler olika typer av statistik. Varje parentes innehåller den statistik vi vill ha, följt av variablerna.

Vi anger också option by(year). Våra statistikuppgifter beräknas en gång för varje värde på variabeln year.

Slutligen gör vi en graf som visar sambandet mellan BNP per capita och andelen anställda inom jordbruket, med twoway (scatter).

In [2]:
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_ts_jan18.dta", clear

collapse (mean) wdi_empagr (median) wdi_gdpcapcon2010, by(year)

twoway (scatter wdi_empagr wdi_gdpcapcon2010, mlabel(year) mlabsize(tiny))
(Quality of Government Basic dataset 2018 - Time-Series)
Stata Graph - Graph 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 0 10 20 30 40 50 (mean) wdi_empagr 2000 3000 4000 5000 6000 (p 50) wdi_gdpcapcon2010




Ursprungligen hade vi alltså en observation per land och år. I vår reducerade datamängd har vi nu en observation per år. Vi kan i grafen se att år då BNP per capita varit högre i genomsnitt är andelen anställda i jordbruket lägre i världens länder, i genomsnitt.

Skära kakan åt andra hållet

Låt oss nu säga att vi ville göra det på ett lite annat sätt. Vi struntar nu i tidsaspekten, och vill titta på landgenomsnitt istället. Vi ska nu ta fram samma uppgifter: medelvärdet för andelen anställda inom jordbruket, och BNP per capita, fast inte beräknat per år, utan för varje land. Vi byter då ut variabelnamnet i by(), till landsvariabeln.

Viktigt är att vi nu behöver ladda in den ursprungliga datamängden igen. När man kör collapse förstörs den ursprungliga datan. Det gör inget, så länge man inte sparar över sitt dataset. Vi kan bara ladda in det i original och göra om vår analys.

In [4]:
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_ts_jan18.dta", clear
collapse (mean) wdi_empagr (median) wdi_gdpcapcon2010, by(cname)
twoway (scatter wdi_empagr wdi_gdpcapcon2010, mlabel(cname) mlabsize(tiny))
(Quality of Government Basic dataset 2018 - Time-Series)
Stata Graph - Graph Albania Algeria Angola Antigua and Barbuda Argentina Armenia Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bhutan Bolivia Bosnia and Herzegovina Botswana Brazil Brunei Bulgaria Burkina Faso Cambodia Cameroon Canada Chile China Colombia Costa Rica Cote d'Ivoire Croatia Cuba Cyprus (1975-) Czech Republic Denmark Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Estonia Ethiopia (1993-) Finland France (1963-) Gabon Gambia Georgia Germany Germany, West Ghana Greece Grenada Guatemala Guyana Haiti Honduras Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy Jamaica Japan Jordan Kazakhstan Kiribati Korea, South Kuwait Kyrgyzstan Latvia Lesotho Liberia Libya Lithuania Luxembourg Macedonia Madagascar Malaysia (1966-) Maldives Mali Malta Marshall Islands Mauritius Mexico Moldova Mongolia Montenegro Morocco Myanmar Namibia Nepal Netherlands New Zealand Nicaragua Nigeria Norway Oman Pakistan (1971-) Palau Panama Papua New Guinea Paraguay Peru Philippines Poland Portugal Qatar Romania Russia Rwanda Samoa Sao Tome and Principe Saudi Arabia Senegal Serbia Seychelles Sierra Leone Singapore Slovakia Slovenia South Africa Spain Sri Lanka St Kitts and Nevis St Lucia Suriname Sweden Switzerland Tajikistan Tanzania Thailand Timor-Leste Tonga Trinidad and Tobago Tunisia Turkey Uganda Ukraine United Arab Emirates United Kingdom United States Uruguay Uzbekistan Vanuatu Venezuela Vietnam Yemen Zambia Zimbabwe 0 20 40 60 80 (mean) wdi_empagr 0 50000 100000 150000 (p 50) wdi_gdpcapcon2010




Den här grafen ser helt annorlunda ut. I den förra var varje prick ett år; nu är det ett land. Vi ser då att i länder som haft hög BNP, i snitt, är det också färre som har arbetat i jordbruket.

Reducera på två variabler

Vi får alltså ut olika information beroende på vilken variabel vi väljer att kollapsa på. Men vi kan också använda oss av kombinationer av variabler. Säg att vi vill titta på andelen anställda inom jordbruket per år, fast uppdelat på världsdel. Då kan vi ange både en världsdelsvariabel och årsvariabeln i option by(). I det här fallet blir det alltså by(ht_region year).

Därefter gör vi en graf som visar utvecklingen av jordbruksanställda år per år för Västeuropa (blå linje) och Afrika söder om Sahara (röd linje).

In [5]:
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_ts_jan18.dta", clear
collapse (mean) wdi_empagr (median) wdi_gdpcapcon2010, by(ht_region year)
twoway (line wdi_empagr year if ht_region==5) (line wdi_empagr year if ht_region==4)
(Quality of Government Basic dataset 2018 - Time-Series)
Stata Graph - Graph 0 20 40 60 80 100 (mean) wdi_empagr 1940 1960 1980 2000 2020 Year (mean) wdi_empagr (mean) wdi_empagr




Avslutning

Collapse är ett väldigt flexibelt verktyg för att visa information från mer komplicerade datastrukturer på ett enkelt sätt. Vi hade till exempel också kunnat ta fram genomsnitt per världsdel och visat det med ett stapeldiagram. Tänk bara på att du måste ladda in datamängden igen om du vill jobba med den oreducerade datan!