invisible header

Dies ist das Dokument mit Lösungen

Klick hier, um die Lösungen auszublenden.

Zum European Social Survey

In vielen Übungen arbeiten wir mit Daten des European Social Survey (ESS). Dies ist ein internationaler Datensatz mit repräsentativen Stichproben aus mehreren europäischen Ländern. Die Befragungen des ESS werden in zweijährlichen Abständen durchgeführt. Wir arbeiten ausschliesslich mit Daten aus der Erhebung 2016. Die Hauptthemen des Datensatzes sind Einstellungen, Normen und Werte. Aufgrund dieser Schwerpunktsetzung ist er in der Soziologie besonders populär. Weitere Überblicksinformationen zum ESS finden Sie auf der Homepage: https://www.europeansocialsurvey.org/ Die Daten sind ebenfalls auf der Homepage des ESS frei erhältlich.

Zur Vorbereitung

ESS8-Datensatz einlesen.

Working directory setzen (z.B. "C:/daten")
setwd("mein_laufwerk/mein_datenverzeichnis")
# Daten einlesen
library(haven)
ess8 <- read_dta("daten.dta")

Ein neues Übungsskript erstellen.

# Statistik 2: R Tutorat
# Übungsskript zum Thema Linearität und Ausreisser
# Datum: 27.04.2021
# AutorIn: XXX
# install.packages("dplyr")
library(dplyr)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("olsrr")
library(olsrr)
# install.packages("moderndive")
library(moderndive)

 

I.Datenaufbereitung & Inspektion

1. In dieser Übung werden wir uns mit dem Zusammenhang zwischen den Merkmalen imbgeco und eduyrs in der Schweiz auseinandersetzen.

ess8.CH <- filter(ess8, cntry == "CH")
ess8.CH <- select(ess8.CH, bildung = eduyrs, meinung_mig = imbgeco)
dim (ess8.CH)
## [1] 1525    2

Der Datensatz hat jetzt nur noch 1525 Merkmalsträger.
eduyrs misst die Bildungsjahre eines Merkmalsträgers, während imbgeco auf einer Zehnerskala angibt, ob eine Person der Meinung ist, dass Migration schlecht(0) oder gut(10) für die Wirtschaft ist.

2. Schaffe dir nun einen kurzen statistischen Überblick dieser zwei Variablen. Gibt es Werte die umkodiert werden müssen? Eliminiere nach einer allfälligen Umkodierung nun alle NAs aus dem Datensatz.

summary(ess8.CH$bildung)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##     0.0     9.0    10.0    11.3    13.0    26.0       3
attributes(ess8.CH$bildung)
## $label
## [1] "Years of full-time education completed"
## 
## $format.stata
## [1] "%12.0g"
## 
## $labels
##    Refusal Don't know  No answer 
##         NA         NA         NA 
## 
## $class
## [1] "haven_labelled" "vctrs_vctr"     "double"
sd(ess8.CH$bildung, na.rm=TRUE)
## [1] 3.496909
summary(ess8.CH$meinung_mig)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.000   5.000   6.000   6.022   8.000  10.000      29
attributes(ess8.CH$meinung_mig)
## $label
## [1] "Immigration bad or good for country's economy"
## 
## $format.stata
## [1] "%20.0g"
## 
## $labels
##  Bad for the economy                    1                    2                    3 
##                    0                    1                    2                    3 
##                    4                    5                    6                    7 
##                    4                    5                    6                    7 
##                    8                    9 Good for the economy              Refusal 
##                    8                    9                   10                   NA 
##           Don't know            No answer 
##                   NA                   NA 
## 
## $class
## [1] "haven_labelled" "vctrs_vctr"     "double"
sd(ess8.CH$meinung_mig, na.rm=TRUE)
## [1] 2.123648
ess8.CH <- na.omit(ess8.CH)

Mit dem summary() und attributes()-Befehl sehen wir, dass alle fehlenden Werte richtig als NAs kodiert sind. Im Durchschnitt haben SchweizereInnen eine Bildung von 11.3 Jahren (sd = 3.5) und sind der Migration gegenüber leicht positiv eingestellt (mean = 6.022 mit sd =2.12).

3. Stelle die univariaten Verteilungen der Variablen bildung und meinung_mig auf geeignete Art und Weise dar.

ggplot(ess8.CH, aes(bildung))+
  geom_histogram(binwidth = 1, fill = "slategray2", color = "blue")+
  labs(title="Verteilung der Bildungsjahre", 
       x = "Bildungsjahre",
       y = "Häufigkeit",
       caption = "Eigene Darstellung, Quelle: ESS 2016 Teilstichprobe CH (N=1493)")+
  scale_x_continuous(breaks=seq(from = 0, to = 30, by = 3))+
  theme_bw()

ggplot(ess8.CH, aes(meinung_mig))+
  geom_bar(fill = "slategray2", color = "blue")+
  labs(title=" Migration ist schlecht oder gut für die Wirtschaft?", 
       x = "Migrationseinstellung",
       y = "Häufigkeit",
       caption ="Eigene Darstellung, Quelle: ESS 2016 Teilstichprobe CH (N=1493)")+
  scale_x_continuous(breaks = seq(0, 10), labels = c("0=schlecht",1,2,3,4,5,6,7,8,9, "10=gut"))+
  theme_bw()

bildung stellen wir mit einem Histogram dar, weil es eine numerische Variable ist. meinung_mig stellen wir mit einem Säulendiagramm dar, weil es eine ordinalskalierte Variable ist.

 

II. Regressionsanalyse

1. Wir kommen nun zur Regressionsanalyse. Was vermutest du für einen Zusammenhang zwischen Bildung und Einstellungen zur Migration? Formuliere auf deinen Überlegungen aufbauend eine Hypothese.

Eine mögliche Hypothese wäre: Zunehmende Bildung führt zu einer positiveren Einstellung gegenüber Migration. Achte dich, dass du dich in der Hypothese auf Konzepte und nicht auf Messungen beziehst. Wenn du einen Kausalzusammenhang behauptest, formuliere deine Hypothese so, dass die Kausalität erkennbar ist. Mit anderen Worten: UV führt zu AV und nicht lediglich, dass es einen Zusammenhang zwischen der UV und der AV gibt.

2a. Welche Gründe sprechen gegen einen linearen Zusammenhang?

2b. Welche Gründe sprechen für einen linearen Zusammenhang?

Welche Begründung findet ihr überzeugender?

3. Stelle die bivariate Verteilung der Variablen mit einer Heatmap dar. Nebst einem passenden Titel und Achsenbeschriftungen, verändere die Achsen wie folgt: Auf der Y-Achse sollten die Zahlen von 0 bis 10 in 1er-Schritten aufgeführt sein. Auf der X-Achse sollten die Zahlen von 0 bis 27 in 3-er Schritten aufgeführt sein. Deute die Heatmap mit Blick auf die Linearitätsfrage.
Achte dich darauf, dass deine Heatmap durchgehend ist und nicht verstückelt aussieht. Nutze dazu die bins= Anweisung oder verändere die Grösse der Quadrate mit der binwidth= Anweisung. Die Skalen der Achsen kannst du über die Befehle scale_y_continuous, resp. scale_x_continuous verändern.

heatplot <- ggplot(ess8.CH, aes(x = bildung, y = meinung_mig)) + 
  geom_bin2d(bins = 10)+
  scale_y_continuous(breaks = seq(from = 0, to = 10, by = 1))+
  scale_x_continuous(breaks = seq(from = 0, to = 30, by = 3))+
  scale_fill_gradient(low = "white", high = "hotpink") +
  labs(x = "Bildungsjahre", 
       y = "Migration ist gut(10) oder schlecht(0) für die Wirschaft",
       title = " Bildungjahre und Einstellung zum Effekt zwischen Migration und Wirtschaft",
       caption = "Quelle: ESS 2016, Teilstichprobe CH, gültige Fälle N = 1493")
heatplot

Ein positiver, näherungsweise linearer Zusammenhang wird zwischen der Anzahl Bildungsjahren und der Einstellung zur Einwanderung deutlich erkennbar. Auf Grundlage unserer Vermutungen zur Form des Zusammenhangs und der visuellen Inspektion des Streudiagramms scheint eine substanzielle Abweichung von der Linearität weder theoretisch zwingend noch empirisch gegeben. In diesem Fall können wir an dieser Stelle ohne weitere empirische Inspektionen (z.B. Multigruppenanalyse) die Lineariätsfrage vorläufig als geklärt betrachten.

4. Ermittle nun den Achsenabschnitt und den Koeffizienten deiner linearen Regressionsgerade, indem du ein Modell namens “model_mig” erstellst. Finde eine angemessene Interpretation für den Koeffizienten.

model_mig<-lm(meinung_mig~bildung, data=ess8.CH)
summary(model_mig)
## 
## Call:
## lm(formula = meinung_mig ~ bildung, data = ess8.CH)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.9864 -1.1421  0.1956  1.3645  5.5465 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.11574    0.17791   23.13   <2e-16 ***
## bildung      0.16886    0.01505   11.22   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.038 on 1491 degrees of freedom
## Multiple R-squared:  0.07785,    Adjusted R-squared:  0.07723 
## F-statistic: 125.9 on 1 and 1491 DF,  p-value: < 2.2e-16
predict(model_mig, data.frame(bildung = 12))
##        1 
## 6.142106
predict(model_mig, data.frame(bildung = 15))
##        1 
## 6.648697
3*0.16
## [1] 0.48
0.16/sd(ess8.CH$bildung)
## [1] 0.04563943
predict(model_mig, data.frame(bildung = 12))/sd(ess8.CH$bildung)
##        1 
## 1.752014

5. Bilde nun in deiner Heatmap die Regressionsgeade ab. Hinweis: Da wir schon bei Aufgabe 4. unseren ggplot als das Objekt heatmap abgespeichert haben, müssen wir hier nicht wieder den ganzen ggplot-Befehl aufführen.

heatplot+
  geom_smooth(method="lm", se=F)

 

III. Ex Post - Linearitätsprüfung

1. In dieser Bearbeitung haben wir das Linearitätsthema relativ zügig abgehandelt. Manchmal kann es hilfreich sein, sich nach der Hauptanalyse noch mal mit dem Thema zu beschäftigen, z.B. um gewappnet zu sein, wenn jemand mit Euch über die Linearität des Zusammenhangs diskutieren möchte. Inspiziere die Heatmap und überlege noch mal, ob sich Anhaltspunkte für eine Linearitätsabweichung finden.

Im ersten Drittel der Bildungsverteilung ist kein Zusammenhang erkennbar, im zweiten und dritten Drittel dagegen ein deutlich positiver.

2. Nun zur Multigruppenanalyse: Überlege dir, bei welchem Wert bzw. bei welchen Werten ein Split sinnvoll wäre.

summary(ess8.CH$bildung)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    9.00   10.00   11.29   13.00   26.00

Wir nehmen hier den Median als Wert für den Split, um so zwei gleich grosse Gruppen zu schaffen.

3. Nachdem du deinen Splitwert bzw. deine Splitwerte ausgesucht hast, teile nun den Datensatz ess8.CH in die Teildatensätze auf (benenne sie jeweils “split1”, “split2”, etc.). Hinweis: Achte dich darauf, dass deine Teildatensätze disjunkt sind.

split1 <- filter(ess8.CH, bildung<10)
split2 <- filter(ess8.CH, bildung>=10)

4. Berechne nun für die jeweiligen Teildatensätze je ein Regressionsmodell. Benenne deine Modelle jeweils, “model_split1”, “model_split2”, etc., und vergleiche sie. Bewerte die Linearität des Zusammenhangs erneut.

model_split1 <- lm(meinung_mig~bildung, data = split1)
model_split2 <- lm(meinung_mig~bildung, data = split2)
model_split1
## 
## Call:
## lm(formula = meinung_mig ~ bildung, data = split1)
## 
## Coefficients:
## (Intercept)      bildung  
##     6.12355     -0.06598
model_split2
## 
## Call:
## lm(formula = meinung_mig ~ bildung, data = split2)
## 
## Coefficients:
## (Intercept)      bildung  
##      3.7630       0.1949

Im unteren Bildungsbereich ist der Zusammenhang nahe 0 (bzw. ganz schwach negativ), im oberen Bereich ist er deutlich positiv. Es gibt also keine zwingende Umkehr des Trends und auch nicht die Notwendigkeit einer Relativierung der berichteten Regressionsergebnisse. Gleichwohl könnte es hilfreich bei der Bewertung des Zusammenhangs sein, auf die bereichsspezifischen Unterschiede in der Auswertung hinzuweisen. Neben der Multigruppenanalyse könnten dazu die Ergebnisse einer Modellierung mit quadrierter UV berichtet werden.

5.a Nehme eine intrinsische Linearisierung vor. Integriere hierfür einen quadrierten Term in deine Regressionsanalyse und benenne dieses neue Model “model_sqr”. Interpretiere den Koeffizienten des quadrierten Terms.
Hinweis: Denk daran, dass du vor dem lm() Befehl separat die quadrierte Variable in den Datensatz integrierst.

ess8.CH$bildung_sqr <- ess8.CH$bildung^2
model_sqr <- lm(meinung_mig~bildung + bildung_sqr, data = ess8.CH)
model_sqr
## 
## Call:
## lm(formula = meinung_mig ~ bildung + bildung_sqr, data = ess8.CH)
## 
## Coefficients:
## (Intercept)      bildung  bildung_sqr  
##    5.013991     0.015728     0.005944

Da der Koeffizient des quadratischen Gliedes positiv ist, wissen wir, dass es ein U-förmiger Verlauf ist: Mit zunehmender Bildung wird die Einstellung zunächst negativer. Ab einem Zeitpunkt wechselt dann aber die Effektrichtung und zusätzliche Bildungsjahre erzeugen eine positivere Einstellung.

5.b Ermittle nun den den Scheitelpunkt der Variable.

model_sqr_fun <- function(x){
  5.014 + 0.016*x + 0.006*x^2
}
optimise(model_sqr_fun, interval=c(-400,30) ,maximum = F)
## $minimum
## [1] -1.333333
## 
## $objective
## [1] 5.003333

Der Tiefpunkt der Parabel liegt bei Personen mit -1.3 Bildungsjahren. Dieser Wert liegt ausserhalb unseres Messbereichs und ist auch im Fall der Bildungsjahre unsinnig. Wir wissen aber jetzt, dass unsere Vorhersagen sich alle im aufsteigenden Bereich der Parabel befinden, also einen positiven Zusammenhang darstellen. Dies konnten wir allerdings schon mit einer einfachen linearen Regression feststellen, weshalb in diesem Fall eine intrinsische Linearisierug nicht notwendig erscheint.

6. Welche Vorhersagen machen die Modelle für Personen mit 3, 9 oder 18 Bildungsjahren? Hinweis: Der predict() Befehl funktioniert nur für lineare Modelle. Deswegen spezifizieren wir hier separat das quadratische Modell als Funktion.

predict(model_mig, data.frame(bildung = 3))
##        1 
## 4.622334
predict(model_mig, data.frame(bildung = 9))
##        1 
## 5.635515
predict(model_mig, data.frame(bildung = 18))
##        1 
## 7.155287
model_sqr_fun <- function(x){
  5.014 + 0.016*x + 0.006*x^2
}

model_sqr_fun(3)
## [1] 5.116
model_sqr_fun(9)
## [1] 5.644
model_sqr_fun(18)
## [1] 7.246

Wir stellen fest, dass die Vorhersagen des quadratischen Modells den Vorhersagen des linearen Modells weitgehend ähnlich sind, die Unterschiede sind an den äußeren Enden der Verteilung etwas deutlicher. In der folgenden Aufgabe 8. unterstützt die grafische Darstellung der Parabel und der Geraden diese Aussage.

7. Welches Modell ist besser geeignet, um Vorhersagen zu treffen?

summary(model_mig)
## 
## Call:
## lm(formula = meinung_mig ~ bildung, data = ess8.CH)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.9864 -1.1421  0.1956  1.3645  5.5465 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.11574    0.17791   23.13   <2e-16 ***
## bildung      0.16886    0.01505   11.22   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.038 on 1491 degrees of freedom
## Multiple R-squared:  0.07785,    Adjusted R-squared:  0.07723 
## F-statistic: 125.9 on 1 and 1491 DF,  p-value: < 2.2e-16
summary(model_sqr)
## 
## Call:
## lm(formula = meinung_mig ~ bildung + bildung_sqr, data = ess8.CH)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.9992 -1.0587  0.2343  1.3630  4.9308 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 5.013991   0.498514  10.058   <2e-16 ***
## bildung     0.015728   0.080813   0.195    0.846    
## bildung_sqr 0.005944   0.003082   1.929    0.054 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.036 on 1490 degrees of freedom
## Multiple R-squared:  0.08015,    Adjusted R-squared:  0.07891 
## F-statistic: 64.91 on 2 and 1490 DF,  p-value: < 2.2e-16

Wir vergleichen die R-Quadrate und sehen, dass die Erklärungskraft der beiden Modelle nahezu gleich ist. Dies stärkt weiter unseren ursprünglichen Ansatz, der auf intrinsische Linearisierung verzichtet.

8. Integriere nun in deine Heatmap von vorher sowohl die Regressionsgerade, wie auch die “Regressionsparabel”. Ist der Gebrauch eines quadrierten Modells in diesem Fall sinnvoll? Hinweis: Du musst die Funktion geom_smooth() mit fromula = y~poly(x,2) ergänzen.

ggplot(ess8.CH, aes(x = bildung, y = meinung_mig)) + 
  geom_bin2d(bins = 10)+
  scale_y_continuous(breaks = seq(from = 0, to = 10, by = 1))+
  scale_x_continuous(breaks = seq(from = 0, to = 30, by = 3))+
  geom_smooth(method = "lm", color = "black", se = F)+
  geom_smooth(method = "lm", formula = y~poly(x,2), color = "blue", se = F)+
  scale_fill_gradient(low = "white", high = "hotpink") +
  labs(x = "Bildungsjahre", 
       y = "Migration ist gut(10) oder schlecht(0) für die Wirschaft",
       title = " Bildungjahre und Einstellung zum Effekt zwischen MIgration und Wirtschaft",
       caption = "Quelle: ESS 2016, Teilstichprobe CH, gültige Fälle N = 1493")

In diesem Fall reicht eine normale Regression aus, da wir in unserem Messbereich keine relevanten Unterschiede zwischen der Parabel und Gerade erkennen können.

 

III. Ausreissertest

1. Warum (und wann) können Ausreisser problematisch werden?

Ausreisser sind dann kritisch, wenn sie einen starken Einfluss auf das Regressionsergebnis ausüben. Dies passiert, wennn ein Merkmalsträger eine extrem untypische Kombination von unabhängiger und abhängiger Variable aufweist.

2. Benutze als Erstes die doppelte Standardabweichung der Residuen als Schwellenwert für kritische Ausreisser. Berechne diesen Wert und finde heraus, ob solche kritische Ausreisser vorliegen. Benutze den befehl get_regression_points() vom Package moderndive, um ein Objekt mit den Residuen zu erstellen.

library(moderndive)

reg_point<-get_regression_points(model_mig)
2*sd(reg_point$residual, na.rm = T)
## [1] 4.074844
summary(reg_point$residual)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -6.986000 -1.142000  0.196000 -0.000159  1.364000  5.547000

Wir sehen die doppelte Standardabweichung der Residuen beträgt 4.07. Da unsere Residuen eine Range von -6.98 und 5.54 haben, gibt es somit Ausreisser in unserem Datensatz.

3. Jetzt benutzen wir die “dfbetas”, um mögliche kritische Ausreisser zu ermitteln. Verschaffe dir zuerst eine graphische Übersicht über mögliche kritische Werte.

ols_plot_dfbetas(model_mig)

4. Bestimme nun den Schwellenwert nach der Formel von Belsley et al. Hinweis: Denk daran: R ist auch ein Taschenrechner.

2/sqrt(1493)
## [1] 0.05176069

Der Grenzwert beträgt 0.05. Das heisst alle dfbetas zwischen -0.05 und 0.05 sind für uns als Ausreisser zu betrachten.

5. Jetzt benutzen wir die “dfbetas”, um mögliche kritische Ausreisser zu ermitteln. Erstelle zuerst ein Objekt, das die “dfbetas” für die verschiedenen Messpunkte beinhaltet. Bennene dieses Objekt “model_mig_dfb”.

model_mig_dfb <- dfbetas(model_mig)

6. Gibt es nun kritische Werte?

summary(model_mig_dfb)
##   (Intercept)            bildung          
##  Min.   :-8.308e-02   Min.   :-1.881e-01  
##  1st Qu.:-8.544e-03   1st Qu.:-1.133e-02  
##  Median :-1.486e-03   Median : 2.210e-03  
##  Mean   : 2.780e-06   Mean   :-3.730e-06  
##  3rd Qu.: 1.444e-02   3rd Qu.: 1.048e-02  
##  Max.   : 2.007e-01   Max.   : 8.558e-02

Ja es gibt kritische Werte, denn die dfbetas haben eine Range von -0.18 bis 0.08. Dies bestätigt, was wir bereits visuell beim ols_plot_dfbetas feststellen konnten.

7. Wie könnten die kritischen Ausreisser erklärt werden?

Möglicherweise sind es Personen, die trotz hoher Bildung sehr negativ gegenüber Migration eingestellt sind.

8. Wir möchten nun eine Re-Analyse ohne Ausreisser durchführen. Wandle hierfür zuerst das Objekt model_mig_dfb in ein “data.frame” um. Spezifiziere den Befehl, so dass vor den Variablen der Präfix “betas” steht. Hinweis: mit dem head() Befehl kannst du dir jeweils einen schnellen Überblick eines data.frames verschaffen.

model_mig_dfb <- data.frame(betas = model_mig_dfb)
class(model_mig_dfb)
## [1] "data.frame"
head(model_mig_dfb)

9. Füge diesen data.frame dem Analysedatensatz (“ess8.CH”) hinzu. Achtung!: Wir können nur Spalten miteinander verbinden, die die gleiche Länge haben, sprich die gleiche Anzahl an Merkmalsträgern.

ess8.CH <- cbind(ess8.CH, model_mig_dfb)
head(ess8.CH)

10. Eliminiere jetzt aus diesem erweiterten Datensatz alle Merkmalsträger, deren “dfbetas” kritische Werte aufweisen. Benenne diesen neuen Datensatz “ess8.noOut.” Hinweis: Denk daran wir entfernen dfbetas mit zu kleinen und zu grossen Werten. Sprich alles was nicht im Bereich [-Grenzwert;Grenzwert] liegt, ist ein Ausreisser.

ess8.noOut <- filter(ess8.CH, betas.bildung>(-0.05) & betas.bildung<(0.05))

11. Nachdem du so alle kritischen Werte entfernt hast, berechne ein neues Regressionsmodell. Bennene es “model_noOut”.

model_noOut <- lm(meinung_mig~bildung, data = ess8.noOut)

12. Vergleiche nun die Modelle mit und ohne Ausreisser. Verzerren die Ausreisser das Ergebnis substantiell?

summary(model_noOut)
## 
## Call:
## lm(formula = meinung_mig ~ bildung, data = ess8.noOut)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.1495 -1.1495  0.2445  1.4415  4.4415 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   3.7854     0.1840   20.57   <2e-16 ***
## bildung       0.1970     0.0159   12.39   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.927 on 1415 degrees of freedom
## Multiple R-squared:  0.09789,    Adjusted R-squared:  0.09726 
## F-statistic: 153.6 on 1 and 1415 DF,  p-value: < 2.2e-16
summary(model_mig)
## 
## Call:
## lm(formula = meinung_mig ~ bildung, data = ess8.CH)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.9864 -1.1421  0.1956  1.3645  5.5465 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.11574    0.17791   23.13   <2e-16 ***
## bildung      0.16886    0.01505   11.22   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.038 on 1491 degrees of freedom
## Multiple R-squared:  0.07785,    Adjusted R-squared:  0.07723 
## F-statistic: 125.9 on 1 and 1491 DF,  p-value: < 2.2e-16

Die Veränderung des Koeffizienten ist minimal. Somit stellen diese Ausreisser kein Problem dar und wir können unser ursprüngliches Analyseergebnis beibehalten.

13. Bilde auf deiner Heatmap die Regressionsgerdade mit und ohne Ausreisser ab.

ggplot(ess8.CH, aes(x = bildung, y = meinung_mig)) + 
  geom_bin2d(bins = 10)+
  scale_y_continuous(breaks = seq(from = 0, to = 10, by = 1))+
  scale_x_continuous(breaks = seq(from = 0, to = 30, by = 3))+
  geom_smooth(method = "lm", aes(color = "erste Farbe"), se = F)+
  geom_smooth(method = "lm", aes(color = "zweite Farbe"), se = F, data=ess8.noOut)+
  scale_fill_gradient(low = "white", high = "hotpink") +
  scale_color_manual(values = c("black", "orange"), labels = c("mit Ausreisser", "ohne Ausreisser"))+
  labs(x = "Bildungsjahre", 
       y = "Migration ist gut(10) oder schlecht(0) für die Wirschaft",
       title = " Bildungjahre und Einstellung zum Effekt zwischen MIgration und Wirtschaft",
       caption = "Quelle: ESS 2016, Teilstichprobe CH, gültige Fälle N = 1493")

logo.utf8

Conforti, E., Dürr, R., Siefart, F., Strassmann Rocha, D., Giesselmann, M. (2021): “Regressionsanalysen mit R”