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
Kommentar veröffentlichen