Direkt zum Hauptbereich

Übungen zur Linearen Regression und Kreuzvalidierung

Hallo! Die folgenden Übungen fassen den Stand des bisherigen Seminars zusammen. Die Lösung wird dann nach Montag nachgereicht. Comments welcome!

library(MASS)
df = Boston
?Boston
summary(df)
# Aufgabe: Fitte eine lineare Regression in der die Kriminalitätsrate
# (crim) vom Anteil der schwarzen Bevölkerung (black) abhängt!
# Gibt es einen Zusammenhang?
# Wie stark ist der Zusammenhang und ist er signifikant?

# Erstelle einen Scatterplot und füge eine Regressionsgrade hinzu!
# Wie interpretierst du den Plot?

# Multi-Linear-Regression
# Fitte ein Modell für crim mit allen möglichen Predictoren!
# Erstelle Diagnoseplots und interpretiere sie!

# Lade die Leaps-Bibliothek, führe die folgenden Befehle aus und
# identifiziere das beste Modell nach dem Cp-Wert!
# requires "leaps"
library(leaps)
X = df[,-1]
y = df[,1]
out = summary(regsubsets(X, y, nbest=2, nvmax=ncol(X)))
tab = cbind(out$which, out$rsq, out$adjr2, out$cp)
tab

# Erstelle einen Vector sel, der die Namen der Spalten (in "")
# enthält, die du auf Basis von regsubsets als Predictoren
# nimmst!

# Der folgende Befehl erstellt eine Tabelle, die nur noch
# die Ausgewählten Predictoren und die Response enthält.
df.sel=subset(df, select= c("crim", sel))

# Fitte eine lineare Regression mit den ausgewählten Predictoren
# und analysiere das Summary und die Diagnose Plots.

# Crossvalidierung
set.seed(1)
# Unterteile die Daten in ein Trainings- und Testset!
# Dafür ziehst du ein Zufallssample mit der Größe 2/3 der
# Zeilenzahl aus der Menge der Zahlen 1 bis Zeilenzahl. Dieses
# Sample weist du dem Objekt train zu. Tipp: Du kannst den round()
# Befehl nutzen, um einen ganzzahligen Wert zu bekommen.

# Die Berechnung des Modells erfolgt nun auf den Trainingsdaten
# mit folgendem Befehl:
fit4 = lm(crim~., data=df.sel[train,])

# Benutze nun die übrigen (Test-)Daten, um mit dem Modell fit4
# die Werte für crim vorherzusagen! Dazu nimmt man die predict()-
# Funktion. Speicher die Ergebnisse in einem Objekt pred!

# Folgender Befehl erstellt eine neue Function, um den
# Root Mean Square Error zu berechnen:
RMS <- function(num) sqrt(sum(num^2)/length(num))
real.values = df.sel$crim[-train]
RMS(real.values-pred)

# Wie hoch ist der RMSE für das Modell auf den gesamten Daten?

# Wiederhole die Kreuzvalidierung 5 mal, ohne set.seed und bilde
# den Mittelwert der RMSE! Die Werte können in folgenden Vector
# gespeichert werden:
RMSEs = rep(0,5)

Kommentare