Medelvärden i grupper

av Anders Sundell

Ett väldigt intuitivt och enkelt sätt att visa på samband mellan en kategorisk och en kontinuerlig variabel är att räkna ut medelvärden på den kontinuerliga variabeln för varje värde på den kategoriska variabeln.

Till exempel: Vad är medelinkomsten bland män och kvinnor? Vad är medellivslängden i olika länder? Vad är tilliten till andra människor bland infödda och invandrare? Och så vidare.

Mer avancerade statistiska analyser är ofta nödvändiga för att utesluta alternativa förklaringar och stärka de kausala anspråken, men presentationen blir nästan alltid bättre av att man först visar huvuddragen i sambandet på ett enkelt sätt, till exempel med medelvärden eller korstabeller.

För att ha något att jobba med kommer vi i det här exemplet att använda oss av QoG basic-datamängden. Här har jag skrivit in sökvägen till datamängden direkt på internet, men man kan givetvis ladda ned den till sin dator och öppna den därifrån istället - det är vanligtvis att rekommendera.

In [1]:
use "https://www.qogdata.pol.gu.se/data/qog_bas_cs_jan18.dta", clear
(Quality of Government Basic dataset 2018 - Cross-Section)

Med hjälp av sum och bysort

I det här exemplet ska vi titta närmare på sambandet mellan ett lands BNP per capita och dess grad av demokrati. BNP mäter vi med variabeln gle_rgdpc, och demokrati med fh_status, från organisationen Freedom House.

Med kommandot summarize (förkortat sum) får vi snabbt ut medelvärdet på BNP per capita:

In [3]:
sum gle_rgdpc
    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
   gle_rgdpc |        192     12596.3     15803.7     285.95   95696.97

I snitt har de 192 länderna i datamängden 12596,3 dollar i bruttonationalprodukt per invånare. Men vi ser här inte hur demokratier skiljer sig från ickedemokratier.

Ett sätt att få fram den informationen är att använda sig av bysort-kommandot. Det är ett sorts förkommando, där vi kan ange en variabel, och sedan körs det vanliga kommandot en gång för varje värde på den första variabeln. Såhär:

In [6]:
bysort fh_status: sum gle_rgdpc
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-> fh_status = Free

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
   gle_rgdpc |         89    18777.71    17191.11     293.11   95696.97

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-> fh_status = Partly Free

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
   gle_rgdpc |         54    5902.896    9931.133     430.73   56760.12

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-> fh_status = Not Free

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
   gle_rgdpc |         49    8745.244    14377.83     285.95   91787.54

Vi fick nu ut tre analyser, där sum-kommandot först kördes för de 89 länder som räknas som "Free", sedan för de 54 som räknas som "Partly free" och sist för de 49 som räknas som "Not free".

Tabellerna ser lite röriga ut, men vi får i alla fall ut de viktigaste siffrorna, och kan då se att medelvärdet för BNP per capita är högst i de fria länderna (18777,71), näst högst i de ofria (8745,244) och lägst i de mellanfria länderna (5902,896). Om detta finns det en del skrivet, men man kan tänka på att det finns många oljerika länder bland de värsta diktaturerna (oljeinkomsterna kan till och med underlätta förtrycket!).

Här fick vi också ut lite bonusinformation, men generellt vill vi använda kommandon som ger oss det vi efterfrågar och inte så mycket annat. Nu var vi bara intresserade av medelvärdet, och då finns det en bättre metod.

Med hjälp av table

table-kommandot, som inte ska förväxlas med tab-kommandot, är ett flexibelt och bra kommando som ger oss information om värden i olika grupper.

Upplägget är att man skriver vilken variabel man vill ha uppdelad, och med hjälp av options skriver man vilken information man vill ha om de olika grupperna man skapat. Om vi vill ha medelvärdet av BNP per capita uppdelat på fh_status skriver vi:

In [7]:
table fh_status, contents(mean gle_rgdpc)
----------------------------
Freedom     |
Status      | mean(gle_rg~c)
------------+---------------
       Free |       18777.71
Partly Free |       5902.896
   Not Free |       8745.244
----------------------------

table fh_status visade alltså att vi ville dela upp analysenheterna efter de olika värdena på fh_status. Med option contents() skriver vi vad vi vill ha för information - i det här fallet medelvärdet (mean) på gle_rgdpc. Men medelvärde är inte det enda man ta fram. Skriv help table för att se den fullständiga listan, men några av de vanligare är sd variabel, median variabel, max variabel, min variabel och count variabel. Den sista visar hur många observationer det är i varje grupp.

Man kan fylla på med upp till fem olika informationspunkter, till exempel såhär:

In [12]:
table fh_status, contents(mean gle_rgdpc sd gle_rgdpc min gle_rgdpc max gle_rgdpc count gle_rgdpc)
----------------------------------------------------------------------------------
Freedom     |
Status      | mean(gle_~c)  sd(gle_rg~c)  min(gle_r~c)  max(gle_r~c)  N(gle_rgdpc)
------------+---------------------------------------------------------------------
       Free |     18777.71      17191.11        293.11      95696.97            89
Partly Free |     5902.896      9931.133        430.73      56760.12            54
   Not Free |     8745.244      14377.83        285.95      91787.54            49
----------------------------------------------------------------------------------

Den här tabellen blir mycket prydligare än det vi fick med sum-kommandot, och innehåller precis samma information. I sin rapport eller uppsats ska man dock aldrig klistra in tabeller direkt från Stata - de går alltid att göra snyggare. Men det är ju bekvämare att börja med något som är lite mer lättöverskådligt.

Medelvärden uppdelade på två variabler med hjälp av table

Tablekommandot låter oss också dela upp på fler variabler (max tre), och visa information i de ännu mer finfördelade grupperna. Det är då bara att skriva variablerna efter varandra, innan kommatecknet för options. Nedan delar vi upp analysenheterna inte bara utifrån graden av demokrati, utan också utifrån om landet tillämpar proportionell representation eller inte i sitt valsystem.

In [14]:
table fh_status dpi_pr, contents(mean gle_rgdpc count gle_rgdpc)
--------------------------------
            |    Proportional   
Freedom     |   Representation  
Status      |        0         1
------------+-------------------
       Free | 15483.75   19800.8
            |       17        54
            | 
Partly Free |  7853.29  4703.716
            |       21        30
            | 
   Not Free | 6351.004  5930.194
            |       22        16
--------------------------------

På så vis får vi mer finfördelad information. Men när man delar upp i fler grupper blir också antalet analysenheter i varje grupp mindre, vilket man får vara uppmärksam på. Därför kan det vara en bra idé att använda count. Vi ser till exempel att det bara är 16 länder som inte är fria och som samtidigt har proportionell representation. Slutsatserna om den gruppen blir därför mindre säkra än för gruppen där det ingår 54 länder.

Avslutning

Presentationen av statistiska resultat ska alltid vara så pedagogisk som möjligt. Att redovisa medelvärden i olika grupper är ofta lämpligt, och ger enkla siffror att hålla sig i när man tolkar resultaten av mer avancerade analyser. Table-kommandot är ett bra sätt att snabbt få ut den relevanta informationen.