Statistik mit R The R Bootcamp |
from
gourmet-blog.de
Am Ende des Practicals wirst du wissen…
Öffne dein TheRBootcamp
R project.
Öffne ein neues R Skript. Schreibe deinen Namen, das Datum und “Lineare Modelle Practical” als Kommentare an den Anfang des Skripts.
## NAME
## DATUM
## Lineare Modelle Practical
Speichere das neue Skript unter dem Namen
lineare_modelle_practical.R
im 2_Code
Ordner.
Lade das Paket tidyverse
.
library(tidyverse)
read_csv()
Funktion um
wein.csv
einzulesen.# Lese Daten ein
wein <- read_csv(file = "1_Data/wein.csv")
Printe den Datensatz.
Verwende names(XX)
, summary(XX)
, und
View(XX)
um einen weiteren Überblick über die Daten zu
bekommen.
Führe den Code unten aus um sicherzustellen, dass alle
character
Variablen als Faktoren vorliegen. Das hilft den
statistischen Modellen kategoriale Variablen richtig zu
interpretieren.
# Konvertiere alle character zu factor
wein <- wein %>% mutate_if(is.character, factor)
Restzucker
(Prädiktor) auf die wahrgenommene
Qualität
(Kriterium) des Weines zu prüfen. Verwende das
template unten, um ein entsprechendes lineares Modell zu rechnen und in
das Objekt wein_lm
zu speichern.# Einfache Regression
wein_lm <- lm(formula = XX ~ XX,
data = XX)
wein_lm <- lm(formula = Qualität ~ Restzucker,
data = wein)
wein_lm
. Welche Informationen
werden dir angezeigt? Was sagen dir die Werte?wein_lm
Call:
lm(formula = Qualität ~ Restzucker, data = wein)
Coefficients:
(Intercept) Restzucker
5.85532 -0.00679
lm
-Objekten ist nicht sehr
informativ. Er zeigt nur den Code und die Schätzungen für die zwei
Parameter: den Intercept und das Gewicht für Restzucker
.
Verwende summary()
um einen informativeren Output zu
erhalten.# Zeige Ergebnisse
summary(XX)
summary(wein_lm)
Call:
lm(formula = Qualität ~ Restzucker, data = wein)
Residuals:
Min 1Q Median 3Q Max
-2.851 -0.808 0.158 0.229 3.217
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.85532 0.01645 355.89 <2e-16 ***
Restzucker -0.00679 0.00228 -2.98 0.0029 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.873 on 6495 degrees of freedom
Multiple R-squared: 0.00137, Adjusted R-squared: 0.00121
F-statistic: 8.89 on 1 and 6495 DF, p-value: 0.00287
Welche Sektion zeigt an, welchen Einfluss Restzucker
auf
die Qualität des Weines hat?
Die Sektion Coefficients
zeigt an, welche Werte für
die Parameter geschätzt wurden und ob sie signifikant (gegeben H0) sind.
Welcher Paramterwert bzw. welches Gewicht (Estimate
) wurde
für Restzucker
ermittelt? Was bedeutet dieser
Wert?
Ein Anstieg von 1
(g/ml) geht mit einer Veränderung
von -.0067
in der Qualität einher. Also je süsser der Wein,
desto niedriger die eingeschätzte Qualität. Aber ist dieser Effekt
signifikant? Was zeigt der p-Wert für Restzucker
an?
Der Effekt von Restzucker
ist signifikant von Null
verschieden. Beginne nachzuverfolgen wie R zu diesem Wert kommt.
Erinnere dich, der p-Wert folgt aus der Teststatistik, in diesem Fall
t. Was ist der t-Wert für Restzucker
?
Der t-Wert ist -2.982
. D.h., das beobachtete
Ergebnis hat in der t-Verteilung mit 6,495 Freiheitsgraden (siehe
Schlussabschnitt des Outputs) eine eben solche Ausprägung. Der p-Wert
ist nun der relative Anteil möglicher, extremerer Werte in der
Verteilung. Die Funktion pt()
gibt für bestimmte t-Werte
die Anteile der niedrigeren Werte raus. Probiert einmal was ihr
erhaltet, wenn ihr den ermittelten t-Wert (q
für Quantil)
und die Freiheitsgrade (df
) in die Funktion eingebt. Wie
könnte der Zusammenhang zum p-Wert im Ergebnis aussehen?
# Berechne Fläche unter t-Wert
pt(q = XX, df = XX)
# Berechne Fläche unter t-Wert
pt(q = -2.982, df = 6495)
[1] 0.00144
Der ermittelte Wert ist genau die Hälfte des p-Werts. Das hat damit zu tun, dass R-automatisch zweiseitig testet, d.h., Abweichungen in die positive und negative Richtung gleichermassen berücksichtigt. Hätte man eine klar gerichtete Hypothese, könnte man also den p-Wert im Ergebnis halbieren.
Es gibt noch weitere Werte, die du miteinander verknüpfen kannst.
Der t-Wert ergibt sich nämlich unmittelbar aus dem Gewicht
(Estimate
) und dem Standardfehler (Std.Error
).
Kannst du den Zusammenhang erkennen?
Der t-Wert ist nichts anderes als das Gewicht geteilt
durch den Standardfehler. Betrachte nun die erste Zeile des
Coefficients
Outputs. Wie interpretierst du sie? Die Zeile
gibt die Ergebnisse für den Intercept an, d.h., den Wert des Kriterium,
wenn der Prädiktor Null ist. Nicht leicht zu interpretieren, oder? Es
gibt nämlich keinen Wein mit Restzucker
gleich Null. Später
mehr dazu.
Lenke nun deine Aufmerksamkeit auf den Schlussteil. Hier siehst
du eine Zusammenfassung über die Gesamtqualität des Modells. Von
besonderem Interesse ist das Multiple R-squared
. Es gibt an
wie viel Varianz das Modell insgesamt am Kriterium erklären kann. Was
meinst du, ist der Wert gross oder klein?
Der Wert ist eher klein. Nur .1% der Varianz kann aufgeklärt werden, was wirklich nicht viel ist. Zeit weitere Prädiktoren hinzuzunehmen.
Qualität
(Kriterium) des Weines. Inkludiere neben
Restzucker
auch pH_Wert
, Alkohol
,
und Sulphate
. Verwende das Template unten, um ein
entsprechendes lineares Modell zu rechnens und al wein_lm
zu speichern.# Multiple Regression
wein_lm <- lm(formula = XX ~ XX + XX + XX + XX,
data = XX)
wein_lm <- lm(formula = Qualität ~ Restzucker + pH_Wert + Alkohol + Sulphate,
data = wein)
wein_lm
Call:
lm(formula = Qualität ~ Restzucker + pH_Wert + Alkohol + Sulphate,
data = wein)
Coefficients:
(Intercept) Restzucker pH_Wert Alkohol Sulphate
1.8422 0.0280 -0.0767 0.3669 0.4171
I()
steht und führe das Modell aus. Speichere
es aber nicht.# Multiple Regression
lm(formula = XX ~ XX + XX + I(XX / 10) + XX,
data = XX)
lm(formula = Qualität ~ Restzucker + pH_Wert + I(Alkohol/10) + Sulphate,
data = wein)
Call:
lm(formula = Qualität ~ Restzucker + pH_Wert + I(Alkohol/10) +
Sulphate, data = wein)
Coefficients:
(Intercept) Restzucker pH_Wert I(Alkohol/10) Sulphate
1.8422 0.0280 -0.0767 3.6687 0.4171
Rgressionsgewichte müssen immer relativ zur Skalierung
interpretiert werden. Nichtsdestotrotz ist bereits etwas interessantes
an den Gewichten ablesbar. Schau dir das Regressionsgewicht für
Restzucker
an. War das nicht mal negativ? Führt mehr Zucker
plötzlich zu höherer wahrgenommener Qualität?
So einfach ist das leider nicht. In der multiplen Regression
hängt alles mit allem zusammen. D.h., das Gewicht von
Restzucker
hängt von den anderen Gewichten mit ab und ist
konditional zu interpretieren, was bei mehreren Prädiktoren schwierig
werden kann!
Schaue dir nun die summary()
an. Welche Effekte
gehen in welche Richtung, welche Effekte sind signifikant?
summary(wein_lm)
Call:
lm(formula = Qualität ~ Restzucker + pH_Wert + Alkohol + Sulphate,
data = wein)
Residuals:
Min 1Q Median 3Q Max
-3.494 -0.501 -0.035 0.492 3.099
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.84215 0.22155 8.32 < 2e-16 ***
Restzucker 0.02800 0.00225 12.43 < 2e-16 ***
pH_Wert -0.07671 0.06256 -1.23 0.22
Alkohol 0.36687 0.00864 42.49 < 2e-16 ***
Sulphate 0.41713 0.06646 6.28 3.7e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.772 on 6492 degrees of freedom
Multiple R-squared: 0.219, Adjusted R-squared: 0.219
F-statistic: 456 on 4 and 6492 DF, p-value: <2e-16
Alkohol, Sulphate, und Restzucker hängen alle drei signifikant positiv mit der Qualität zusammen, der pH-Wert dagegen negativ, jedoch nicht signifikant. Auf Basis der Summary, kannst du jetzt ausmachen, welcher Prädiktor die grösste Bedeutung hat? Welchen Wert würdest du zu Rate ziehen?
Am besten zieht man den t-Wert heran. Je grösser dieser ist,
desto grösser ist das Signal für den assoziierten Prädiktor. Richte nun
deine Aufmerksamkeit auf den Schlussteil. Wie gross ist
R-squared
?
Das R-squared
hat sich deutlich erhöht. Nun werden
knapp 22% der Varianz des Kriteriums erklärt. Auch dies ist etwas, dass
wir unmittelbar nachvollziehen können. Speichert mit dem Template unten
zunächst das Kriterium, die Residuen und die gefitteten Werte. Für
letztere beiden gibt es, wie ihr seht, nützliche Funktionen.
# Residuen & gefittete Werte
kriterium <- wein$XX
residuen <- residuals(XX)
gefitted <- fitted(XX)
# Residuen & gefittete Werte
kriterium <- wein$Qualität
residuen <- residuals(wein_lm)
gefitted <- fitted(wein_lm)
Jetzt teilt ihr einmal die Varianz der gefitteten Werte
(var(gefitted)
) durch die Varianz des Kriteriums
(var(kriterium)
).
Et voilà, ihr habt R-squared
gefunden. Ihr könnt
jetzt auch einmal die Varianz der Residuen und die der gefitteten Werte
addieren und mit der Varianz des Kriteriums vergleichen.
Farbe
)
auf die wahrgenommene Qualität
(Kriterium) des Weines. Um
alle Prädiktoren zu inkludieren kann man einfach .
verwenden, und um einen auszuschliessen -
. Verwende das
Template unten, um ein entsprechendes lineares Modell zu rechnen und als
wein_lm
zu speichern.# Multiple Regression aller Prädiktoren ausser Farbe
wein_lm <- lm(formula = XX ~ . - XX,
data = XX)
# Multiple Regression aller Prädiktoren ausser Farbe
wein_lm <- lm(formula = Qualität ~ . - Farbe,
data = wein)
Restzucker
als
einzigen Prädiktor. Inkludiere nacheinander jeweils einen anderen
Prädiktor und studiere, wie sich das Gewicht und die Signifikanz von
Restzucker verändert.# Multiple Regression aller Prädiktoren ausser Farbe
wein_lm <- lm(formula = XX ~ Restzucker + XX,
data = XX)
# Multiple Regression aller Prädiktoren ausser Farbe
lm(formula = Qualität ~ Restzucker + Alkohol,
data = wein)
Call:
lm(formula = Qualität ~ Restzucker + Alkohol, data = wein)
Coefficients:
(Intercept) Restzucker Alkohol
1.8754 0.0259 0.3624
cor(wein %>% select(-Farbe))['Restzucker',]
und in
cor(wein %>% select(-Farbe))['Qualität',]
, d.h., den
bivariaten Korrelationen zwischen Restzucker und den jeweils anderen
Prädiktoren und Qualität und den jeweils anderen Prädiktoren. Beides
fliesst in die Berechnung des Gewichts für Restzucker
mit
ein. Siehe die Folien.# Regression mit R
library(tidyverse)
# Model:
# Sagt der Hubraum (displ) die pro gallone
# fahrbaren Meilen voraus?
hwy_mod <- lm(formula = hwy ~ displ,
data = mpg)
# Ergebnisse
summary(hwy_mod)
coef(hwy_mod)
# Gefittete Werte
hwy_fit <- fitted(hwy_mod)
hwy_fit
# Residuums
hwy_resid <- residuals(hwy_mod)
hwy_resid
Datei | Zeile | Spalte |
---|---|---|
wein.csv | 6497 | 13 |
Der wein.csv
Datensatz enthält aus den Jahren 2004 bis
2007 des Comissão De Viticultura Da Região Dos Vinhos Verdes, der
Offiziellen Zertifizierungsagentur des Vinho Verde in Portugal.
Name | Beschreibung |
---|---|
Qualität | Qualitätsurteil über den Wein von 1-9 |
Farbe | Roter oder weisser Wein |
Gelöste_Säure | Konzentration der im Wein gelösten Säuren |
Freie_Säure | Konzentration der verflüchtigbaren Säuren |
Citronensäure | Citronensäurekonzentration im Wein |
Restzucker | Zuckerkonzentration im Wein |
Chloride | Chloridkonzentration im Wein |
Freie_Schwefeldioxide | Konzentration der verflüchtigbaren Schwefeldioxide |
Gesamt_Schwefeldioxide | Konzentration der Schwefeldioxide insgesamt |
Dichte | Dichte des Weins |
pH_Wert | pH-Wert des Weins. Je kleiner, desto saurer. |
Sulphate | Sulphatkontration im Wein |
Alkohol | Alkoholkonzentration im Wein in % |
Package | Installation |
---|---|
tidyverse |
install.packages("tidyverse") |
Function | Package | Description |
---|---|---|
lm |
stats |
Fitte ein lineares Modell |
fitted |
stats |
Extrahiere vorhergesagte Werte |
residuals |
stats |
Extrahiere Residuen |