GNU R: lm
Einführung
[Bearbeiten]Die lineare Regression (kurz: LR) wird in diesem GNU-R-Wikibook behandelt, um diesen Spezialfall der Regressionsanalyse in R mit der Funktion lm(...)
implementieren zu können. Man lernt dadurch mit einem statistisches Verfahren konkrete Daten auszuwerten, für die linearer Zusammenhang zwischen einer beobachteten abhängige Variable und mehreren unabhängigen Variablen zu untersuchen. Bei der linearen Regression wird dabei ein lineares Modell (kurz: LM) angenommen.
Funktionsgerade als Approximation
[Bearbeiten]Im einfachsten Fall entsteht als lineare Modell eine Gerade als Funktionsgraph.
Die Funktionvorschrift von hat dabei zwei Parameter mit .
- ist die Steigung der Gerade,
- ist die -Achsenabschnitt, bei dem der Graph der Funktion die -Achse schneidet.
Bestimmung der Funktionsparameter
[Bearbeiten]Man sieht in dem obigen Diagramm, dass die Funktiongerade zu den Datenpunkten laufen kann, weil die Datenpunkte nicht alle auf einer Geraden liegen. Die mit lm(y~x) berechnete Regressionsgerade gibt dabei die beste Näherung für die Funktionswerte an.
Einsatz der Funktion lm()
[Bearbeiten]Als erstes Beispiel verwenden wir den Datensatz aus Beispiel 5, welcher das Gewicht eines Babys an verschiedenen Lebenstagen enthält.
Annahme eines linearen Zusammenhangs
[Bearbeiten]Dabei wird angenommen, dass der Zusammenhang zwischen Alter und Gewicht linear ist.
Bemerkung - Annahme
[Bearbeiten]Die Annahme eines linearen Zusammenhangs benötigt ein inhaltliches Verständnis für die die Daten, denn im fortgeschrittenen Alter als Erwachsener kann dieser mit lm(X~Y)
nicht mehr angenommen werden.
Vektoren als Eingabedaten
[Bearbeiten]Es werden Vektoren als Eingabedaten und Ausgabedaten definiert, die in einem linearen Zusammenhang stehen.
x <- c(1, 3, 6, 11, 12, 15, 19, 23, 28, 33, 35, 39, 47, 60, 66, 73)
y <- c(3180, 2960, 3220, 3270, 3350, 3410, 3700, 3830, 4090, 4310, 4360, 4520, 4650, 5310, 5490, 5540)
Datenpunkte plotten
[Bearbeiten]Der Definitionsbereich des linearen Modells für ist eindimensional und der Wertebereich des linearen Modells für ist ebenfalls eindimensional. Damit ist der Graph zweidimensional und die Punktdaten können in einem zweidimensionalen Graphen geplottet werden.
plot(x,y)
In höherdimensionalen linearen Modellen ist graphische Darstellung nicht mehr so einfach möglich. Wenn die Summe der Ein- und Ausgabedimensionen 3 ist kann man die Daten noch in einem 3D-Plot anzeigen.
Regressionsgerade plotten
[Bearbeiten] plot(x,y)
abline(lm(y~x))
Anwendung der Linearen Regressionanalyse
[Bearbeiten]Die Vektoren sollten die gleiche Länge haben.
Dies kann man in R mit dem Befehl length(...)
überprüfen.
## Ausgabe der Vektordimension von x
length(x)
## Ausgabe der Vektordimension von y
length(y)
## Lineares Modell berechnen
lm(y~x)
Man erhält die folgende Ausgabe für lm(y~x)
:
Call: lm(formula = y ~ x) Coefficients: (Intercept) x 2971.13 37.48
Dabei ist Intercept der und die Steigung der Geraden ist .
Dataframe erzeugen
[Bearbeiten]Aus den Ein-Ausgabedaten wird nun ein Dataframe erzeugt und dem Anwendungsbeispiel sinnvollen Spaltenüberschriften versehen (x Lebenstag, y Gewicht). Diese Benennung ist auch für die Lesbarkeit und Interpretierbarkeit der Daten wichtig. Das Ergebnis ist eine Wertetabelle mit den Spaltennamen "Lebenstag" und "Gewicht"
wertetabelle <- data.frame(x,y)
colnames(wertetabelle) <- c("Lebenstag", "Gewicht")
Regressionsanalyse mit lm() durchführen
[Bearbeiten]Nun verwendet man die erste und zweite Spalte aus dem Dataframe für die Regressionsanalyse mit lm()
lm(wertetabelle[,2]~wertetabelle[,1])
Plotten der Daten mit Regressionsgerade
[Bearbeiten]Beachten Sie, dass lm(...)
als Eingaben y~x
erhält, wobei die Vektoren in umgekehrter Reihenfolge angegeben werden und durch ein Tilde-Symbol getrennt sind. Dagegen erhält plot
den x-Vektor aus dem Definitionsbereich und dann den y-Vektor aus dem Wertebereich als Funktionsparameter erhält (standardmäßig durch ein Komma getrennt).
plot(wertetabelle[,1]~wertetabelle[,2]))
abline(lm(wertetabelle[,2]~wertetabelle[,1]))
Definition einer eigenen Funktion
[Bearbeiten]Mit der Definition einer eigenen Funktion kann man mehrere Befehlschritte durch einen Funktionsaufruf ersetzen. Mit der Funktion plot4linreg(x,y,name4x,name4y)
möchte man als Parameter einen Vektor als unabhängige Variable übergeben und Vektor als abhängig Variable und dann
- (1) Steigung und y-Achsenabschnitt der linearen Regression mit
lm(...)
berechnet - (2) die Datenpunkte zusammen mit der Regressionsgerade zeichnen.
Grundlegende Befehlsfolge für Plot
[Bearbeiten]In dem folgenden Beispiel wird die grundlegende Befehlsfolge für den Plot gezeigt:
## Datenvektor x - unabhängige Variable
x <- c(1, 3, 6, 11, 12, 15, 19, 23, 28, 33, 35, 39, 47, 60, 66, 73)
## Datenvektor y - abhängige Variable
y <- c(3180, 2960, 3220, 3270, 3350, 3410, 3700, 3830, 4090, 4310, 4360, 4520, 4650, 5310, 5490, 5540)
## Lineare Regression berechnen
lm(y~x)
## Plot der Datenpunkte
plot(x,y)
## Regressiongerade ergänzen
abline(lm(y~x))
Achsenbezeichnung ergänzen
[Bearbeiten]In der obigen Abbildung erkennt man dass die Bezeichnungen an den Achsen jeweils "x" und "y" sind. In Analogie zu dem Beispieldaten entspricht "x" der Anzahl der Tage nach der Geburt, an dem das Baby gewogen wurde. "y" als anhängige Variable bezeichnet das Gewicht des Kindes an dem Tag "x". Um andere Achsenbezeichnungen zu erhalten verwendet man "xlab" und "ylab".
## Datenvektor x - unabhängige Variable
x <- c(1, 3, 6, 11, 12, 15, 19, 23, 28, 33, 35, 39, 47, 60, 66, 73)
## Datenvektor y - abhängige Variable
y <- c(3180, 2960, 3220, 3270, 3350, 3410, 3700, 3830, 4090, 4310, 4360, 4520, 4650, 5310, 5490, 5540)
## Plot der Datenpunkte
plot(x,y,xlab="Tage nach der Geburt",ylab="Gewicht in g")
## Regressiongerade ergänzen
abline(lm(y~x))
Plot Sie diese Funktion in R.
Funktionsdefinition plot4linreg()
[Bearbeiten]Nun können sind die Vorbereitungen getroffen den Plot für die lineare Regression als Funktion zu definieren.
plot4linreg <- function (x,y,name4x,name4y) {
## x : Vektor - unabhängige Variable
## y : Vektor - abhängige Variable
## xlab : String- Bezeichnung der x-Achse
## ylab : String- Bezeichnung der y-Achse
## Plot der Datenpunkte
plot(x,y,xlab=name4x,ylab=name4y)
## Regressionsgerade zeichnen
abline(y~x))
}
Die obige Funktionsdefinition beginnt 4 Kommentarzeilen, die die Bedeutung der erwarteten Parameter erläutert, Wenn man nach längerer Zeit wieder in die Funktionsdefinition schaut, helfen diese Kommentar dabei, den Code nachvollziehen. Dies hilft insbesondere, wenn man Code zwischen Lernenden austauscht.
Funktionsaufruf plot4linreg()
[Bearbeiten]Die Definition der Funktion kann nur verwendet werden, um die Plots für unterschiedliche Eingabevektoren x1,x2,x3,...
und unterschiedliche Ausgabevektoren y1,y2,y3,...
zu berechnen.
plot4linreg(x1,y1,"Bezeichnung für x1","Bezeichnung für y1")
plot4linreg(x2,y4,"Bezeichnung für x2","Bezeichnung für y4")
plot4linreg(x3,y5,"Tage","Gewicht")
plot4linreg(x3,y6,"Tage","Größe")
Bemerkung - Daten - Dataframe
[Bearbeiten]Die unterschiedliche Vektoren x1,x2,x3,...
und y1,y2,y3,...
sind in der Regel Spaltenvektoren, die aus einem Dataframe stammen bzw. aus eine Tabelle in ein Dataframe eingeladen wurden.
Siehe auch
[Bearbeiten]- affines Modell
- Multiple lineare Regression
- Mehrdimensionale lineare Regression - Wikiversity
- GNU R: Regression
- Kurs:Maschinelles Lernen
Einzelnachweise
[Bearbeiten]
Seiten-Information
[Bearbeiten]Wikipedia2Wikiversity
[Bearbeiten]Diese Seite wurde auf Basis der folgenden [[w:de:Lineare Regression|Wikipedia-Quelle] erstellt: