Direkt zum Hauptbereich

Posts

Es werden Posts vom Mai, 2014 angezeigt.

Ü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 (i

Getting Data

Ein kleines Beispiel, wie sich Eurostat-Daten direkt in R einlesen lassen... ##### Getting Data ##### library(SmarterPoland) View(grepEurostatTOC("Health")) health = getEurostatRaw("hlth_hlye") View(health) View(grepEurostatTOC("working hours")) wh = getEurostatRaw("lfso_04vawkhwus") View(wh) wh.sub = wh[101,] View(wh.sub) health = subset(health, grepl("F_0_DFLE,", health[,1])) dim(health) health = health[, c(1,10)] View(health) health[,1]=sub("F_0_DFLE,", "" , health[,1]) colnames(wh.sub) = sub(" ", "", colnames(wh.sub)) health$wh=NA for(i in 1:dim(health)[1]){   if (any(colnames(wh.sub)==health[i,1]))     health$wh[i] = wh.sub[1, which(colnames(wh.sub)==health[i,1])] }

Cross-Validation

Im Folgenden geht es um drei Methoden der Cross-Validation: hold-out, leave one out, und k-fold. Bei der Kreuzvalidierung geht es hauptsächlich darum, zu vermeiden, dass das Modell zu gut ist. Häufig ist ein Modell so stark an die Daten angepasst, dass es bei der Schätzung neuer Werte versagt (overfitting). Bei der ersten Methode wird der Datensatz in ein Trainings- und ein Testsample unterteilt. Das Modell wird nur auf die Trainingsdaten gefittet und die Testdaten werden dann geschätzt. Bei der zweiten Variante wird immer ein Wert bei der Modellbildung ausgelassen und dann vom Modell geschätzt - und das für alle Werte (großer Rechenaufwand!). Die dritte Variante teilt den Datensatz in k Teile und schätzt dann jeden einzelnen mit allen anderen. Eine Ausführliche Einführung hierzu gibt es in: James, Gareth; Witten, Daniela; Hastie, Trevor und Robert Tibshirani. 2013. An introduction to statistical learning. New York [u.a.]: Springer.   df = read.csv("recs2009_public.csv"

Klima-Politik-Wandel als stochastischer Prozess

Die Wahrscheinlichkeit, dass die USA ihre Ausgaben für Umweltschutz in einem der kommenden zehn Jahre verdoppeln, liegt bei 8 Prozent. Wie sich das Klima in den kommenden Jahren verändern wird, hängt davon ab, wieviel Geld Staaten bereit sind, in den Klimaschutz zu investieren. Aus der Policy-Forschung wissen wir, dass sich Staatsausgaben nicht linear entwickeln, sondern heftigen Schwankungen ausgesetzt sind. Bryan Jones, Frank Baumgartner u. a. beschreiben dies in ihrer Punctuated Equilibrium Theory und weisen empirisch nach, dass dies für alle Industriestaaten gilt. [1] Aufbauend auf diesen Arbeiten ist es nun möglich, Haushaltsdaten mit Extremwertverteilungen zu analysieren. Dadurch können wir die Wahrscheinlichkeit für große Politikumbrüche in einzelnen Politikbereichen stochastisch ermitteln. Methodisch wird eine Gumbel-Verteilung mit maximum-likelihood-Verfahren geschätzt, aus der sich dann Wahrscheinlichkeitswerte ableiten lassen. Im Bereich Klimaschutz sind

Linear Regression in R

In diesem Script geht es um lineare Regressionen mit mehreren Prediktoren. Angelehnt ist das Script an  Ledolter, Johannes. 2013. Business analytics and data mining with R. Hoboken, New Jersey: Wiley .  Die Daten sind dieselben wie schon in " Know Your Data ". df = read.csv("recs2009_public.csv") meta = read.csv("public_layout.csv") dfm = subset(df, select = c("AIA_Zone","YEARMADE","TOTROOMS", "AGERFRI1", "WASHLOAD", "TVCOLOR", "NUMPC", "EQUIPAGE", "HHSEX", "HHAGE", "MONEYPY", "KWH")) # example plots plot(KWH~TOTROOMS, data=dfm) plot(KWH~WASHLOAD, data=dfm) # linear regression with all predictors fit = lm(KWH ~., data=dfm) summary(fit) # predictors are correlated cor(dfm) # pairs(dfm) # calculate all possible models # requires "leaps" library(leaps) X = dfm[,1:11] y = dfm[,12] out = summary(regsubsets(X

Lineare Regression erklärt für Nicht-StatistikerInnen

Eine Regression beschreibt einen Zusammenhang zwischen einer abhängigen Variable (response) und einem oder mehreren unabhängigen Variablen (predictors). bei der linearen Regression geht man davon aus, dass die Response-Variable auf die Predictor-Variable immer gleich reagiert: Wenn z. B. der Predictor von 4 auf 5 steigt, und dass zu einer Veränderung der Response von vorher 12.5 auf 13 führt, dann würde man erwarten, dass die Response auf 13.5 steigt, wenn der Predictor den Wert von 6 annimmt. Die Frage ist, was heißt „würde man erwarten“ genau:   Im Prinzip ist damit gemeint, dass 13.5 der wahrscheinlichste Wert ist, der AUF BASIS DER ANNAHMEN DES MODELLS zu erwarten ist. Das heißt also nicht, dass nicht auch ein anderer Wert auftreten kann, sondern nur, dass jeder andere Wert unwahrscheinlicher ist, sofern die Annahmen des Modells zutreffen. Welche Annahmen und welches Modell überhaupt? Mathematisch lässt sich der angenommene Zusammenhang zwischen Response und Predicto

Twitter dates

Wer Twitter-Daten in R einliest, stößt auf Datumsvariablen ("created_at" und "user_created_at"). Diese Daten landen dann als character in R "Tue Apr 08 04:51:44 +0000 2014" Offenbar habe nicht nur ich Probleme damit, die Daten als Datum zu formartieren: stackoverflow Hier ist die Lösung: d  =  "Tue Apr 08 04:51:44 +0000 2014" d = as.Date(d, format = "%a %b %d %H:%M:%S %z %Y", tz="") Ein häufiges Ergebenis ist dann allerdings NA. Dies liegt daran, dass in R-Environment eingestellt ist, dass Zeiten und Daten "German" formatiert sind und R deshalb "Tue" nicht als Wochentag erkennt. Diese Einstellung lässt sich so ändern: Sys.setlocale("LC_TIME", "English") Interessant ist eventuell noch folgendes: Angenommen, ich habe einen data.frame df mit einer Spalte d, in der Daten im obigen Format gespeichert sind. Dann kann ich den folgenden Befehl nutzen, um die gesamte Spalte in