Guide: Flernivåregressionsanalys, del 2

I den här guiden ska vi gå igenom:

  • Hur man lägger in fixerade effekter på nivå 1 och nivå 2
  • Hur man låter effekten av nivå 1-variabler variera mellan nivå 2-enheterna
  • Visualisering av varierande effekter
  • Hur man kan förklara variation i effekt

I den första delen av den här guiden undersökte vi data om priser på bostadsrätter i Göteborg. Vi fann då att det fanns signifikant variation i pris mellan olika stasdelar (nivå 2-enheterna). Nu ska vi undersöka om nivå 1-variabler, alltså egenskaper för varje enskild lägenhet, kan påverka priset, om stadsdelsegenskaper kan påverka priset, och slutligen om nivå 1-egenskaperna varierar mellan stadsdelarna. Data för den som vill följa med kan laddas ned härifrån.

Innehåll:
Hur man lägger in fixerade effekter – nivå 1
Hur man lägger in fixerade effekter – nivå 2
Hur man lägger in en varierande nivå 1-effekt
Visualisering av den varierande effekten
Sista steget: Försöka förklara variationen i effekt av nivå 1-variabeln

 

Hur man lägger in fixerade effekter – nivå 1

Det första vi ska göra är att lägga in en fixerad nivå 1-effekt. Variabeln vi ska använda oss av är lägenhetens storlek i kvadratmeter. Det är mycket troligt att större lägenheter kostar mer än mindre. Vi går in på ”Analyze->Mixed models->Linear”, lägger in Område i Göteborg i rutan ”Subjects”, lägger in ”Pris i 1000-tals kronor” som beroende variabel. Vi lägger in variabeln ”kvadrat” i rutan covariates. Det räcker dock inte – man måste också ange att kvadrat är en fixerad effekt. Det gör man genom att klicka på knappen ”Fixed”, markera ”kvadrat” och klicka på ”add”. Det ska se ut som i Bild 8.

Bild 8. Hur man lägger in en fixerad effekt.

 

Man anger ingenstans att det här är en nivå 1-effekt – det får man hålla reda på själv. Men vi vet att det är det eftersom den varierar mellan lägenheter, inte bara mellan stadsdelar. Vi har kvar samma inställningar som vi hade i första delen av den här guiden. En sammanfattning av det vi ska ha iklickat:
På knappen ”Random” ska rutan ”include intercept” vara iklickad.
Variabeln ”Område i Göteborg” ska också vara i rutan ”Combinations”.

På rutan ”Statistics” ska boxarna ”Parameter estimates” och ”Tests for covariance parameters” vara iklickade. När allt är färdigt trycker man på OK och får ut outputen som vi ser i Bild 9.

Bild 9. Output med en fixerad effekt – lägenhetens storlek i kvadratmeter.

 

Nu har vi flera intressanta saker att titta på. Det första vi tittar på är i tabellen ”Estimates of Fixed effects”. På raden där det står ”kvadrat” ser vi effekten av lägenhetens storlek. Koefficienten är 36,18 och är signifikant. Det betyder att om lägenheten ökar en kvadratmeter i storlek förväntas priset öka med 36176 kronor, eftersom den beroende variabeln pris är mätt i tusentals kronor. Det låter dyrt men rimligt. Interceptet visar genomsnittspriset för en lägenhet som är 0 kvadrat stor. Det är -674 tusen kronor, vilket är orimligt, men det är också orimligt att en lägenhet är 0 kvadrat stor, så det är inte så konstigt att interceptet blir konstigt.

Vi kollar sedan i tabellen ”Estimates of covariance parameters”. Den visar hur mycket oförklarad varians vi har kvar i modellen, alltså variation i lägenheters pris som inte förklaras av att lägenheter är olika stora. Det kan ju till exempel vara lägenhetens skick eller läge. På raden ”Intercept [subject=omrade] ser vi hur mycket variation det finns kvar mellan stadsdelar. Innan vi la in lägenheters storlek som variabel så var den här talet 702500, som man kan se i Bild 6. Nu har det sjunkit till 438201. Det här är uttryckt i varians. För att få ut den mer lättbegripliga standardavvikelsen tar vi roten ur talen. Då får vi fram att standardavvikelsen innan var 838, och nu är 662.

Anledningen till det är att det antagligen är så att lägenheter i vissa stadsdelar i genomsnitt är större än lägenheter i andra stadsdelar. När vi tar hänsyn till att lägenheterna har olika storlek så försvinner en viss del av variationen. Förut var standardavvikelsen i genomsnittspris mellan de olika stadsdelarna 838 tusen kronor, nu är den 662 tusen kronor.

På raden ”Residual” ser vi hur mycket variation som finns kvar mellan lägenheterna, alltså på nivå 1. Förut, i Bild 6, var det talet 1464546, nu är det 389826. Vi tar roten ur och får fram att standardavvikelsen förut var 1210, och nu är 624. En dramatisk nedgång, vilket inte är så konstigt med tanke på att en lägenhets storlek är en av de faktorer som man tänker sig är det viktigaste för priset. När vi tar hänsyn till det försvinner en stor del av variationen mellan lägenheterna men det återstår ändå en hel del, vilket kan tänkas förklaras av saker som lägenhetens skick, om man har balkong eller inte, avgiften, osv.

 

Hur man lägger in fixerade effekter – nivå 2

Nu ska vi lägga in en fixerad effekt på nivå 2, alltså en stadsdelsegenskap. Variabeln vi ska lägga in är medelinkomsten i området. Man kan ju tänka sig att folk gillar att flytta inom samma område, och om många då tjänar mycket pengar i området så är de antagligen beredda att betala mer, vilket borde driva upp priset. Detta är helt klart en nivå 2-variabel, eftersom den bara varierar mellan stadsdelar. Alla lägenheter i Linnéstaden har till exempel samma värde på variabeln ”medelinkomst i stadsdelen” som ju är Linnéstaden.

Vi lägger in variabeln ”medelinkomst” under ”covariates”, trycker på ”Fixed”, markerar ”medelinkomst” och klickar på ”add”. Det är viktigt att man inte har både kvadrat och medelinkomst markerat när man trycker add, av en anledning som jag ska förklara lite senare. Man behöver markera dem en och en och trycka på add. Det ska se ut som i Bild 10.

Bild 10. Hur man lägger in en till fixerad effekt, på nivå 2.

 

Sedan behöver man inte ändra något mer utan man kan trycka på OK. Outputen ser då ut som i Bild 11. Återigen kollar vi först på effekten av medelinkomstvariabeln. Den är 8,4. Variabeln medelinkomst är mätt i tusentals kronor i medelinkomst per år. Koefficienten betyder alltså att för varje 1000-tal kronor som folk i staden tjänar mer per år så kommer priset på lägenheterna öka med i snitt 8400 kronor. Effekten är signifikant. Koefficienten för kvadrat har inte ändrats nämnvärt, vilket inte är konstigt.

Bild 11. Output från en modell med en nivå 1 och en nivå 2-effekt.

 

Sedan går vi till tabellen ”Estimates of Covariance parameters”. Om man jämför med Bild 9 ser vi att båda talen har minskat, men framförallt talet på raden ”Intercept…”, som ju visar den återstående variationen i genomsnittspris mellan stadsdelarna. Förut var standardavvikelsen 662, och nu tar vi roten ur variansen 208061 och får då fram standardavvikelsen 456. När vi la in medelinkomsten i stadsdelarna lyckades vi delvis förklara varför genomsnittspriserna skiljer sig mellan stadsdelarna. Men det finns fortfarande kvar en signifikant variation mellan stadsdelarna, som vi ser i kolumnen (Sig.). Ett exempel på en ytterligare variabel som vi skulle kunna lägga in är stadsdelens avstånd från centrum. Det är ju troligt att lägenheter närmare centrum kostar mer.

 

Hur man lägger in en varierande nivå 1-effekt

Nu kommer vi till det riktigt finurliga med flernivåregressionsanalys. Vi har nu räknat fram att för varje kvadratmeter större en lägenhet är så förväntas priset öka med 36000 kronor. Men vi har ju också kommit fram till att genomsnittspriset på lägenheter varierar mellan olika stadsdelar. Är det då så att det så att säga bara är ”startavgiften” som varierar mellan stadsdelar, och att priset per kvadrat är detsamma? Eller, mer troligt, är det så att priset per kvadrat också varierar mellan stadsdelar? Det senare låter rimligt. Lägenheter i Bergsjön är antagligen billigare än lägenheter i Örgryte överlag, men det är nog också större skillnad på små och stora lägenheter i Örgryte än vad det är i Bergsjön.

För att ta hänsyn till det här i vår modell ska vi låta effekten av variabeln ”kvadrat” variera mellan nivå 2-enheterna, stadsdelarna. Vi gör som förut, men klickar nu på knappen ”Random”. Här ska vi ändra på två saker. Först ska vi i menyn ”Covariance type” byta från ”Variance components” som är default-läget till ”Unstructured”. Det här betyder att vi inte antar någonting om korrelationen mellan interceptet i en stadsdel, dvs vad lägenheter som är 0 kvadrat kostar, och effekten av kvadrat, dvs priset per kvadratmeter. Om man har kvar det på ”Variance components” så måste modellen räkna fram att det inte finns någon sådan korrelation, vilket ofta är orealistiskt. Ändra därför till ”Unstructured”.

Därefter markerar man ”kvadrat” och klickar in den i rutan ”model”. Det betyder att vi vill att effekten av kvadrat ska kunna vara olika mellan stadsdelar. Det ska nu se ut som i Bild 12. Tryck Continue och OK.

Bild 12. Hur man lägger in en varierande (”random”) effekt av en nivå 1-variabel.

 

Outputen man får ut ska nu se ut som i Bild 13. Först kollar vi på de fixerade effekterna i rutan ”Estimates of fixed effects”. Effekten av ”kvadrat” har nu sjunkit något, och är 29,7. Eftersom den nu tillåts variera mellan stadsdelarna betyder det här talet nu genomsnittseffekten. Snittpriset per kvadratmeter i de olika stadsdelarna är 29600 kronor. Men det riktigt intressanta hittar vi i tabellen ”Estimates of covariance parameters”. Vi har nu fyra rader – dels raden Residual som visar den oförklarade variationen på lägenhetsnivå, samt UN (1,1), UN(2,1) och UN(2,2).

Bild 13. Output från en modell med en fixerad nivå 1-effekt, en fixerad nivå 2-effekt, samt en varierande nivå 1-effekt.

 

UN (1,1) är stadsdelsinterceptsvariansen, den som vi diskuterat förut. UN (2,2) är variansen i effekten av kvadrat. Nu gäller det att ha tungan rätt i mun. Vi har alltså antagit att priset per kvadratmeter kan variera mellan stadsdelarna, och det här är ett mått på den variationen. Återigen tar vi roten ur 219 för att få fram standardavvikelsen, vilken blir 14,8. Det betyder att genomsnittspriset per kvadratmeter för en bostadsrätt i Göteborg är 29700 kronor, med en standardavvikelse på 14800 kronor. I kolumnen Sig. ser vi också att den här variationen i pris per kvadratmeter är signifikant. Vi hittar alltså de flesta stadsdelarna i intervallet 29700-14800=14900 kronor till 29700+14800=44500 kronor.

Den sista raden UN(2,1) visar på kovariansen mellan stadsdelsinterceptet och pris per kvadrat i stadsdelen. Den är negativ, vilket betyder att i de stadsdelar där en lägenhet som är 0 kvadrat kostar mycket så är priset per kvadrat lågt, och vice versa. Det är inte särskilt intressant i det här fallet och vi struntar därför i det.

 

Visualisering av den varierande effekten

Det här kan vara väldigt abstrakt att ta in, och det kan därför vara bra att illustrera det här på något lättfattligt sätt för en läsare. Vi gör därför om analysen med samma inställningar, men klickar på knappen ”Save”. Där klickar vi i ”Predicted values” under rubriken ”Predicted values and residuals”, som i Bild 14. Det innebär att vi vill spara de predicerade värdena för alla lägenheter, alltså hur mycket vår modell tror att lägenheter ska kosta.

Bild 14. Hur man sparar predicerade värden.

 

Vi får nu fram en ny variabel som heter ”PRED_1”. Vi går nu in på ”Graphs->Chart builder”, väljer alternativet ”Line” och ”Multiple line”. Sedan drar vi in ”PRED_1” till y-axeln, ”kvadrat” till X-axeln, och ”Område i Göteborg” till rutan ”Set color”. Det betyder att vi vill ha en linje för sambandet mellan lägenhetens storlek och det förväntade priset, och att vi vill ha en separat linje för varje stadsdel. Det ska nu se ut som i Bild 15.

Bild 15. Hur man illustrerar den varierande effekten av lägenhetsstorlek.

 

Tryck OK. Nu får vi ut en graf som i Bild 16.

Bild 16. En graf med predicerade värden för varje stasdsdel.

 

Varje stadsdel har nu sin egen linje. Vi ser att alla lutar uppåt: större lägenheter kostar mer än små lägenheter. Men vi ser också att lutningen varierar kraftigt. Den röda linjen längst ner är för stadsdelen Hisings Backa. Där är det väldigt liten skillnad på stora och små lägenheter. Priset per kvadratmeter är väldigt lågt. Den brantaste lila linjen högst upp i diagrammet är för den attraktiva stadsdelen Örgryte. Där ser vi att priset per kvadratmeter är betydligt högre. Det är variationen i lutning (pris per kvadratmeter) mellan stadsdelarna vi fångar in i en flernivåmodell. I en vanlig regressionsanalys hade vi bara kunnat räkna fram en linje, om vi inte gjort en regressionsanalys för varje stadsdel. Hade vi gjort det hade vi fått fram något liknande som det vi ser nu.

 

Sista steget: Försöka förklara variationen i effekt av nivå 1-variabeln

Nu kommer vi till det sista steget i analysen. Vi har nu slagit fast att priset per kvadratmeter varierar mellan stadsdelarna. Nu vill man förstås veta varför priset varierar – vi vill förklara variationen. Det gör man genom att skapa en interaktionsvariabel mellan kvadrat och någon nivå 2-variabel bland de fixerade effekterna, och sedan ser man om det fortfarande finns kvar någon variation i pris per kvadratmeter. Om inte, så har vi lyckats förklara varför priset per kvadratmeter varierar mellan stadsdelarna.

Vi ska helt enkelt pröva om det är så att medelinkomsten i stadsdelen kan förklara skillnaden i pris per kvadratmeter. Om folk har råd att betala mer borde lägenheterna också bli dyrare ju större de blir. I vanliga fall behöver vi göra en ny interaktionsvariabel som är kvadrat*medelinkomst, men det går att göra automatiskt i Mixed Model-menyn. Vi gör om analysen, och klickar nu på ”Fixed ” igen. Därefter markerar vi både medelinkomst och kvadrat. Sedan ändrar vi i menyn från ”Factorial” till ”Interaction”. Därefter klickar vi på add. Då ska det dyka upp en term i rutan ”Model” som heter medelinkomst*kvadrat.

Rullgardinsmenyn låter en konstruera variabler bara för den här analysen. ”Interaction” skapar interaktionstermer. Om man väljer ”Main effects” så får man bara variablerna som de är. Väljer man ”Factorial” får man både de vanliga effekterna och interaktionseffekten. När man är klar ska det se ut som i Bild 17.

Bild 17. En automatisk interaktionsterm.

 

Därefter trycker vi på ”Continue” och ”OK” och behöver inte ändra något annat. Om man vill kan man trycka på ”Save” och ta bort de att vi ska spara predicerade värden. Outputen ska se ut som i Bild 18.

Bild 18. Output från modell med interaktionseffekt.

 

Först kollar vi på de fixerade effektena. Det intressanta är nu interaktionstermen – medelinkomst*kvadrat. Den är positiv, som man kunde förvänta sig – ju högre medelinkomst, desto högre är priset per kvadratmeter. Den är däremot inte signifikant: signifikansvärdet är ,175. Det indikerar att det inte är troligt att vi kan förklara så mycket av variationen i pris per kvadrat mellan stadsdelarna. För att undersöka det går vi till tabellen ”Estimates of Covariance Parameters” igen. Det intressanta är här raden UN(2,2) där vi ser variansen för pris per kvadrat. I Bild 13 kunde vi se att variansen var 219. Nu är den 207, och är fortfarande signifikant. Vi har alltså inte lyckats förklara särskilt stor del av variansen, och gör nog bäst i att leta efter en variabel som bättre kan förklara variationen i pris per kvadrat.

7 reaktioner till “Guide: Flernivåregressionsanalys, del 2

  1. Tack för en mkt bra guide som rätade ut flera frågetecken.

    När jag kör flernivåanalys får jag följande varning i SPSS ”Positive non-integer case weights are encountered. These values are rounded to the nearest integers for the analysis”.

    Av det jag kunnat läsa mig till så har detta att göra med att SPSS inte tycker om sannolikhetsviktningar och därför rundar av för att användas som frekvens viktningar.

    Vad betyder felmeddelandet på ren svenska, och vad kan man göra åt det?
    Måste man göra ngt åt det eller påverkar det inte resultaten nämnvärt?

  2. Min fråga är: Jag har en uppgift där jag ska undersöka om det föreligger en statistisk signifikant skillnad gällande handstyrka hos en grupp på 26 personer i en kommun mv=16,2 kg och jämfört med medelvärde gällande handstyrka i allmänhet= mv 17 kg. Hur löser jag detta?

  3. Vilken blogg! Välskriven, lätt att förstå. Tack!
    En fråga.
    Jag vill undersöka hur en biologisk markör förändrar sig över tid och om möjligt kunna se hur mycket som av variansen som är stabil. Vi har 100 individer med mättillfällen vid fyra olika tidpunkter. Vi har gjort en regressionsanalys som visar att markören är korrelerad över tid men precis som du beskriver så tar den ju inte hänsyn till om variablerna är beroende av varandra! Det finnas ex MANOVA som analyserar på gruppnivå, men, Individual growth curve analysis verkar vara ett bra modell att använda!? Erfarenheter? Vet du månne hur man utför en sådan?

    1. Hej!
      Nej, har inte provat det själv, så kan egentligen inte säga någonting om det!
      Möjligen går det att hantera inom det vanliga regressionsramverket genom att använda sig av tekniker för panelanalys. Till exempel genom att lägga in fixed effects (motsv. dummyvariabler) för varje person.

      Men har tyvärr ingen erfarenhet av growth curve analysis.

      /Anders

  4. Hej! Jag skulle vilja göra en flernivåregressionsanalys där jag undersöker hur individ- respektive arbetsplatsfaktorer sammanhänger med byte av arbetsplats. I exemplet med lägenhetspriserna var ju utfallet kontinuerligt, medan utfallet i mitt fall bara har tre möjliga värden (bytt, stannat, blivit utan arbete). Hur gör jag då?

  5. Hej! hur skall man tänka när man lägger in sina variabler i mixed model, vad är skillnaden om man lägger en variabel som covariate och factor, och vad är det som avgör?

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com-logga

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s