Politikwissenschaft

 

Webseite durchsuchen

lineare Regression mit R

Benjamin Schlegel | 29. März 2016

PDF

Ein lineares Modell kann in R mit dem Befehl lm() gerechnet werden. Was eine lineare Regression ist, kann im Artikel lineare Regression nachgelesen werden.

In diesem Artikel wird die lineare Regression in R anhand eines Beispiels mit dem Datensatz world_data.csv gezeigt. Der Datensatz kann unter Daten heruntergeladen werden.

Der Datensatz enthält die meisten Länder der Erde mit den durchschnittlichen Anzahl Kindern im Jahr 2012 (fertility_2012), den Anzahl Jahren obligatorische Schulzeit im Jahr 2012 (educ_2012) und einen Index, welcher die politischen Rechte der Frauen im Jahr 2011 misst (woman_right_2011). Der Index kann die Werte 0, 1, 2 und 3 annehmen (0: keine Rechte im Gesetz; 3: (alle) Rechte im Gesetz und in der Praxis).

In einem ersten Schritt müssen die Daten eingelesen werden.


data = read.csv2(file.choose(),stringsAsFactors = FALSE)

Als nächstes müssen die Variablen rekodiert werden.


data$fertility_2012 = as.numeric(data$fertility_2012)
data[which(data$woman_right_2011==-77),"woman_right_2011"] = 0
data$woman_right_2011 = as.factor(data$woman_right_2011)

Jetzt können wir uns einen Überblick über den Datensatz schaffen.


head(data)

                 CTRY fertility_2012 educ_2012 woman_right_2011
1         Afghanistan          5.141         9                2
2             Albania          1.760         9                2
3             Algeria          2.820        11                2
4             Andorra          5.979         6                3
5              Angola          2.102        11                3
6 Antigua and Barbuda          2.188        13                3

summary(data)

     CTRY           fertility_2012    educ_2012      woman_right_2011
 Length:182         Min.   :1.260   Min.   : 0.000   0:  1           
 Class :character   1st Qu.:1.792   1st Qu.: 7.000   1: 19           
 Mode  :character   Median :2.405   Median : 9.000   2:133           
                    Mean   :2.901   Mean   : 8.313   3: 29           
                    3rd Qu.:3.842   3rd Qu.:10.000                   
                    Max.   :7.574   Max.   :15.000  

Modell mit einer stetigen Variable

Nun sind wir soweit und können mit der linearen Regression beginnen. In einem ersten Schritt wollen wir die Hypothese überprüfen: "Je länger die obligatorische Bildung in einem Land dauert, desto weniger Kinder haben die Frauen."

Um die Hypothese zu überprüfen verwenden wir die Methode lm(). Als Parameter geben wir die Formel an, wobei zuerst die abhängige Variable kommt, dann ein Tilde und dann die unabhängigen Variablen. Der Datensatz wird mit dem Parameter data angegeben.


model1 = lm(fertility_2012 ~ educ_2012, data=data)
summary(model1)

Call:
lm(formula = fertility_2012 ~ educ_2012, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.8819 -1.1009 -0.5064  1.1004  4.6031 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.34393    0.26128  12.798   <2e-16 ***
educ_2012   -0.05329    0.02866  -1.859   0.0646 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.447 on 180 degrees of freedom
Multiple R-squared:  0.01884,	Adjusted R-squared:  0.01339 
F-statistic: 3.457 on 1 and 180 DF,  p-value: 0.06461

Der Output sagt folgendes: Zuerst zeigt er nochmals an, mit welcher Formal gerechnet wurde. Danach zeigt er die Streuung der Fehler an. Unter Coefficients zeigt der Output den Achsenabschnitt an (Intercept), welcher 3.3439 ist. In einem Land ohne obligatorische Schulzeit kriegt eine Frau Durchschnittlich 3.34 Kinder. Der Koeffizient educ_2012 gibt uns die Steigung an. In diesem Fall kann er folgendermassen Interpretiert werden: Pro zusätzlichen Jahr an obligatorischer Schulzeit nimmt die durchschnittliche Anzahl an Kindern um 0.05 ab. Der Wert ist jedoch nur schwach signifikant mit einem p-Wert von 0.064. Der sagt uns, dass wir mit 6.4 prozentiger Wahrscheinlichkeit falsch liegen. In der Wissenschaft wird in der Regel bei einem p-Wert kleiner als 0.05 von einem signifikanten Resultat gesprochen.

Weiter unten kommen die R-Quadrate. Das Multiple R-squared wird mit jedoch zusätzlichen Variable im Modell grösser. Da mehr Variablen nicht zwingend besser sind, bestraft das Adjusted R-squared die Anzahl Variablen, so dass eine zusätzliche Variable auch wirklich einen Mehrwert bringen muss. Das Multiple R-squared zeigt uns, welchen Anteil der Varianz das Modell erklären kann. Das R-squared liegt immer zwischen 0 und 1. In der Sozialwissenschaft gilt ein Wert von um die 0.3 bereits als sehr gut. In diesem Fall ist jedoch das R-squared sehr tief, weshalb obligatorische Schulzeit kaum erklären kann, weshalb in gewissen Ländern die Frauen mehr Kinder zur Welt bringen als in anderen.

Der p-Wert des F-Tests wird interessant, wenn das Modell mehr als eine Variable enthält. In diesem Beispiel gibt er uns keinen Mehrwert.

Im nächsten Schritt stellen wir das Ergebnis grafisch dar. Dazu verwenden wir die Bibliothek ggplot2. Mit geom_smooth() zeigt die Grafik die Regressionslinie mit dem Konfidenzintervall an. Mit se=FALSE kann die Gerade ohne das Konfidenzintervall gezeichnet werden. Mit geom_point() zeigt uns die Grafik die Punkte an.


library(ggplot2)
ggplot(data, aes(x=educ_2012,y=fertility_2012)) + geom_point() +
  geom_smooth(method="lm") + theme_classic() +
  ylab("Anzahl Kinder / number of children") +
  xlab("obligatorische Schulzeit / mandatory school")
lineare Regression

Es zeigt sich, dass die Streuung sehr hoch ist.

Modell mit einer nominal/ordinalen Variable

Beim obigen Beispiel war die unabhängige Variable stetig. Das nächste Beispiel zeigt eine lineare Regression mit einer nominalen oder ordinalen Variable: Der Einfluss von woman_right_2011 auf die Kinderrate der Frauen. Die Hypothese dazu könnte folgendermassen lauten: "Je mehr politische Rechte die Frauen in einem Land haben, desto tiefer ist die durchschnittliche Kinderrate.


model2 = lm(fertility_2012 ~ woman_right_2011, data=data)
summary(model2)

Call:
lm(formula = fertility_2012 ~ woman_right_2011, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.6186 -1.0932 -0.4893  0.8874  4.6954 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)          6.667      1.439   4.634 6.92e-06 ***
woman_right_20111   -3.557      1.476  -2.410  0.01699 *  
woman_right_20112   -3.788      1.444  -2.623  0.00947 ** 
woman_right_20113   -3.930      1.463  -2.685  0.00793 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.439 on 178 degrees of freedom
Multiple R-squared:  0.04126,	Adjusted R-squared:  0.0251 
F-statistic: 2.553 on 3 and 178 DF,  p-value: 0.05703

Wie im Output zu erkennen ist, macht R aus der Variable woman_right_2011 drei Variablen. Das liegt daran, dass die Variable woman_right_2011 aus vier verschiedenen Werten besteht. 0 wird als Basiswert genommen, für alle anderen wird eine Dummy-Variable (0/1) erstellt.

Die Koeffizienten der Dummy-Variablen werden anders als die stetige Variable im obigen Beispiel interpretiert. Die Werte stellen keine Steigung dar sondern eine Änderung des Achsenabschnittes. Der Achsenabschnitt alleine bildet den Basiswert ab. In diesem Beispiel ist das 0. In einem Land ganze ohne Rechte für die Frauen, bekommt eine Frau durchschnittlich 6.67 Kinder. Im Datensatz hat nur Somalia den Wert 0, weshalb dieses Ergebnis mit Vorsicht interpretiert werden sollte. In einem Land mit Wert 1 bei den politischen Frauenrechten sind es 3.56 Kinder weniger pro Frau, also 3.11 Kinder. In einem Land mit Wert 3 sind es 3.93 Kinder weniger, also 2.74 Kinder pro Frau. Die Koeffizienten sind alle signifikant. Das R-squared ist minimal höher als beim obigen Beispiel aber immer noch tief.

Das gesamte Modell hat einen p-Wert von 0.06. Deshalb ist es ganz knapp nicht signifikant, beziehungsweise nur schwach signifikant. Dieser Wert kann beim F-Test abgelesen werden und testet, ob das gesamte Modell signifikant von 0 abweicht.

Multivariates Modell

Im letzten Beispiel wird eine lineare Regression mit mehrere Variablen gezeigt. Dazu werden beide Variablen aus den obigen Beispielen verwendet.


model3 = lm(fertility_2012 ~ educ_2012 + woman_right_2011, data=data)
summary(model3)

Call:
lm(formula = fertility_2012 ~ educ_2012 + woman_right_2011, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.7675 -1.0892 -0.4935  0.9359  4.6375 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)        6.66700    1.43437   4.648 6.53e-06 ***
educ_2012         -0.04186    0.02880  -1.454   0.1478    
woman_right_20111 -3.21351    1.49051  -2.156   0.0324 *  
woman_right_20112 -3.43749    1.45986  -2.355   0.0196 *  
woman_right_20113 -3.58075    1.47855  -2.422   0.0165 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.434 on 177 degrees of freedom
Multiple R-squared:  0.05257,	Adjusted R-squared:  0.03116 
F-statistic: 2.455 on 4 and 177 DF,  p-value: 0.0475

Die Bildung ist nun nicht mehr signifikant. Auch das adjusted R-squared ist etwas besser geworden, aber immer noch tief. Der F-Test zeigt uns eine Signifikanz für das gesamte Modell an, da der p-Wert mit 0.048 unter 0.05 liegt.

Die Koeffizienten können wie folgt interpretiert werden: In einem Land ohne politischen Rechte für die Frauen und ohne obligatorische Schulbildung haben Frauen durchschnittlich 6.667 Kinder. Pro zusätzliches Jahr an obligatorischer Bildung nimmt die Kinderrate pro Frau um 0.04 ab ceteris paribus (= unter Konstanthalten alle anderen Faktoren), wobei der Wert nicht signifikant ist. Ein Land mit politischen Rechten für die Frauen von 3 hat eine um 3.58 tiefere Kinderrate als ein Land mit einem Wert von 0, ceteris paribus. Der Wert ist signifikant.

Die relative Wichtigkeit der einzelnen Variablen kann mit der calc.relimp() aus der Bibliothek relaimpo berechnet werden.


library(relaimpo)
calc.relimp(model3, type="lmg",rela=T,rank=T)

Response variable: fertility_2012 
Total response variance: 2.1236 
Analysis based on 182 observations 

4 Regressors: 
Some regressors combined in groups: 
        Group  woman_right_2011 : woman_right_20111 woman_right_20112 woman_right_20113 

 Relative importance of 2 (groups of) regressors assessed: 
 woman_right_2011 educ_2012 
 
Proportion of variance explained by model: 5.26%
Metrics are normalized to sum to 100% (rela=TRUE). 

Relative importance metrics: 

                       lmg
woman_right_2011 0.7131772
educ_2012        0.2868228

Average coefficients for different model sizes: 

                       1group    2groups
educ_2012         -0.05328508 -0.0418609
woman_right_20111 -3.55721053 -3.2135105
woman_right_20112 -3.78842481 -3.4374857
woman_right_20113 -3.93006897 -3.5807470

Hier sieht man, dass die Variable woman_right_2011 71.3 Prozent von 5.26 Prozent der Varianz erklärt und educ_2012 28.7 Prozent von 5.26 Prozent. Bei rela=FALSE werden die absoluten Werte ausgegeben, was 3.75 Prozent und 1.51 Prozent sind.