################################################ ### Vorbereitungen ################################################# ?library ### Datensatz laden und überprüfen (vorher bei Bedarf das notwendige Paket AER installieren) install.packages("AER") # Installation install.packages("car") ### !! WICHTIG !! # 1. install.packages("AER") # 2. Bei Frage y/n: n für nicht Neuinstallation vom package lm4 # 3. Einbinden von AER via: library(AER) # Einbinden data(CPS1985) help(CPS1985) summary(CPS1985) attach(CPS1985) # Auf einzelne Variablen zugreifen # Bei plot handelt es sich um eine generische Funktion, die je nach Klasse des zugrundeliegenden Objekts # zu einem anderen Ergebnis (hier: unterschiedliche Plots) führt. class(CPS1985) # data.frame class(wage) # numerischer Vektor class(occupation) # Faktor occupation vec <- rep(1:2, each=6) class(vec) vec_factor <- factor( vec , labels=c("gut", "schlecht") ) vec_factor vec_ordered <- ordered(vec , labels = c("gut", "schlecht")) vec_ordered ### Analyse der Variablen im Datensatz je nach Variablentyp plot(CPS1985) # Klasse data.frame plot(wage) # Variablentyp numeric range(education) plot(education) # Variablentyp integer (wird von plot behandelt wie numeric) plot(occupation) # Variablentyp factor ### Übersicht: Arten von Plots (High-Level Plots) barplot # Säulen- bzw. Balkendiagramm pie # Kuchendiagramm (package plotrix mit pie3d) boxplot # Boxplot contour # Gut geeignet für Höhenkarten, d.h. f: R^2 -> R; filled.contour für farbibe Höhenkarten coplot # conditioning plot: Für einen factor mehrfach ausgegebene Plots curve # Linienplot, aber einfache Funktionsübergabe durch curve(f(x)= ..., x=, from=, to) dotchart # auch mit Scatterplot erzeugbar; besonders sinnvoll für sehr viele Faktoren mit einer Ausprägung hist # Histogramm mosaicplot# Mosaikplot; sinnvoll für Zusammensetzungen in der Zeit pairs # Sinnvoll zur Korrelationsüberprüfung image # Zum Zeichnen... persp # Wieder zum Zeichen von 3d Graphen, inklusive Koordinatenkreuzwahl scatterplot3d # das gleiche qqplot # Quantile-Quantile-Plot ################################################ ### Einzelne Variablen ################################################# ### EINE stetige Variable boxplot(wage) ?hist hist(wage , breaks = 20) plot(density(wage)) ### EINE diskrete Variable - Kategorien mit Buchstaben codiert plot(occupation) # ist ein barplot der table(occupation , gender) # Häufigkeit der einzelnen Kategorien ?table barplot(table(occupation)) # pie(table(occupation)) # funktioniert analog zu barplot ### ZWEI stetige Variablen plot(x = education, y = wage) # Scatterplot als Ausgangspunkt der meisten Überlegungen ### ZWEI diskrete Variablen plot(gender ~ occupation) # beruht auf mosaicplot mosaicplot(occupation ~ gender) ### ZWEI gemischte Variablen plot(wage ~ occupation) boxplot(wage ~ occupation) ### DREI ODER MEHR Variablen # nacheinander plot(wage ~ education + occupation) # wage wird nacheinander gegen education und occupation geplottet plot(wage ~ education) plot(wage ~ occupation) # gleichzeitig plot(CPS1985) # unübersichtlich plot(CPS1985[, 1:4]) # wesentlich besser pairs(CPS1985[, 1:4]) # falls man plot auf einen Datensatz anwendet, wird pairs ausgeführt coplot(wage ~ education | occupation) coplot(wage ~ education | occupation + gender) ################################################# ### Konfigurieren der Grafikfunktionen ################################################# # Beachte weitere Optionen der Grafikfunktionen summary(education) hist(education, breaks = 3) hist(education, breaks = 16) hist(education, breaks = 100) # Linie statt Punkte (sinnvoll bei Zeitreihen) ?plot() plot(wage) plot(wage, type="p") plot(wage, type="l") # Überschrift plot(age, wage) plot(x = age, y = wage, main = "Streudiagramm von Alter und Stundenlohn") # Achsenbeschriftung plot(age, wage, xlab = "Alter in Jahren", ylab = "Stundenlohn in ???/h", main = "Streudiagramm von Alter und Stundenlohn") # Falls die Hilfe der jeweiligen Funktion, z.B. boxplot nicht weiterhilft, # gibt es häufig in der Funktion par() eine passende Option ?par par() # (Standard-) Einstellungen von par # Sinnvoll: Zu Beginn Einstellungen speichern um später darauf zurückzugreifen können original_parameter <- par(no.readonly = TRUE) str(original_parameter) # Beispiel 1: Hintergrundfarbe anpassen par(bg = "yellow") plot(age) par(bg = "transparent") plot(age) # Alle Graphikeinstellungen löschen dev.off() # ursprünglichen Hintergrund wieder herstellen graphics.off() # schaltet alle offenen grafik-devices aus ?par # Beispiel 2: Seitenrand (mai) und Abstand der Labels (mgp) ändern par(cex = 2) range(age) dev.off() par(original_parameter) # ursprünglichen Hintergrund wieder herstellen plot(age) # Übersicht: Häufig genutzte Argumente von Grafikfunktionen axes # Achsenangabe bg # Backgroundfarbe cex # Faktor, der die Vergrößerung zum Standard angeben soll col # Plotfarbe las # Achsenbeschriftungen parallel, horizontal, senkrecht, usw... log # xlog und ylog für logarithmische Skalen lty, lwd # Linientyp und -dicke mai # 4-Vektor über die Ränder unten, links, oben, rechts main, sub # Titel, Untertitel mar # Rand mfcol, mfrow# column und row Matrix für Plots wird angelegt, die nacheinander gefüllt werden mgp # Grenzlinie für Achentitel, -labels und -linie pch # Pointcharakter (1-16) type # Linientyp usr # Die Extremalstellen für einen plot xlab, ylab # x und y Beschriftung xlim, ylim # x und y Begrenzung xpd # In welchem Bereich wird geplottet ################################################# ### Weitere (low-level) Elemente ################################################# ### Funktionen aus Tabelle 8.4 in Ligges (2008), S. 168 lines # Linien einzeichnen abline # Schnell für horizontale, vertikale Geraden und Geraden in Geradengleichung y = mx+t points # Punkte arrows # Pfeile polygon # Beliebige Vielecke (-> Christbaum) segments # Unausgemalte Vielecke axis # Achsen grid # Gitter rug # "Dichteteppich" title # Titel legend # Legende text # Text durch (x,y) Koordinaten mtext # Text durch Positionsangebae wie side=1,...,4 ### Plot zusammensetzen/ergänzen # vorhandenen Graphen modifizieren plot(x = education, y = wage, pch = 16, axes = FALSE) range(education) ticks <- seq(from = -100, to = 100, by = 0.5) # Achse (Nummerierung im Uhrzeigersinn mit side = 1 als Abszisse) axis(side = 1, at = ticks, labels = paste(ticks,"y")) # Markierungen bei -100, -99, -98, ... axis(side = 2, at = seq(-100,100, 0.5)) # Markierungen bei -100, -99, -98, ... ?axis() # Datenpunkte auf oben Seite rug(wage, side = 2) # Geraden ?abline abline(a = -0.7460, b=0.7505, col="blue") # Achsenabschnitt und Steigung angeben (woher die Zahlen? -> Siehe später) abline(h = mean(wage), lty=2, col = "red", lwd = 8) # Horizontal abline(v = mean(education), lty=3, col = "orange", lwd = 4) # Vertikal # Strecken zwischen zwei und mehr Punkten, hier drei lines(x = c(2, 7, 10), y = c(20, 30, 25), col="darkgreen", lwd = 3) #p1: (2,20) #p2: (7,10) #p3: (10,25) # Beachte: x = c(x-Wert erster Punkt, x-Wert zweiter Punkt, ..., x-Wert letzter Punkt), y analog # Glatte Kurven (Verbinden sehr vieler Punkte!) x <- seq(2 , 10 , by = 0.01 ) x length(x) y <- log((x-5)^2)+x+35 y lines(x = x, y = y, lwd=2, col="darkblue") # analog lines(x=x, y=x^2, col="orange") # Punkte xPoints <- 1:20 points(x = xPoints , y=sin(xPoints)+20, col = "darkred") # Flächen polygon(x = c(3, 3, 10, 8), y = c(10,20,20,10),col="yellow") # Pfeile arrows(x0 = 10, y0 = 40, x1 = 13.8, y1 = 44.2, lwd = 2, col = "darkgreen") # Überschrift title("Lohn versus Ausbildung") ?par # Text im Diagramm text(x = 11.5, y = 39, labels = paste("Beobachtung Nr. ", which(wage > 40), sep = ""), cex=1.5) text(x = 11.5, y = 39, labels = paste("Beobachtung Nr. ", which.max(wage), sep = ""), cex=1.5) # Legende ?legend() legend(x="topright", # wo? legend = c( expression(paste("Datenpunkte ", e^2, sep="")) , "Linie"), # Text lty = c(NA, 1), # Linientyp pch = c(2, NA), # Punkttyp lwd = c(1, 3), # Linienbreite col = c(1, "red")) # Einrücken von der Ecke aus ### Aufgabe C1 # Zeichnen Sie einen Plot der Funktion f(x)=e^x+2 im Bereich von -2 bis +2, Linienfarbe grün # Erstellen Sie eine Legende oben links mit dem Eintrag e^2 und der Linie. # # Hinweis: Um mathematische Beschriftungen in eine Legende zu machen, benötigen Sie die # "mathematical annotations", die hier http://stuff.mit.edu/afs/sipb/project/r-project/arch/i386_rhel3/lib/R/library/graphics/html/plotmath.html # zu finden sind. Mit paste() und expression() dürfte es danach kein Problem mehr sein. ### Aufgabe C2 # Erzeugen Sie einen Scatterplot aus education und wage, # bei dem Frauen als rote und Männer als blaue Punkte erscheinen. # Erzeugen Sie eine Legende, die dies illustriert. ### Aufgabe C3 - Zeitreihenplot install.packages("tseries") library(tseries) # a) Laden Sie mit Datastream oder auf http://de.finance.yahoo.com/ # Tageswerte von einer Aktie oder Dax und TecDax vom 1.1.2003 bis 06.10.2015. # b) Plotten Sie den Dax- und TecDax-Verlauf einzeln mit plot # c) Verwenden Sie die plot.ts Funktion # d) Wandeln Sie den DAX-Verlauf in ein zoo-Objekt um (Paket zoo) # und plotten Sie dieses # e) Plotten Sie die Indizes gemeinsam. Verwenden Sie plot.ts, ts.plot und wieder zoo. ### Mathematische Beschriftungen mit expression etc. ?plotmath # Erläuterung der mathematischen Beschriftung x <- seq(0,3,0.01) f1 <- function(x) sin(x^2-0.4) f2 <- function(x) sin(x-0.4)^2 plot(x, f1(x),type="l",lwd=2,main="Some Functions", xlab="x", ylab=expression(f[j](x))) # expression(...) ersetzt "..."-Text lines(x,-f2(x),lwd=2,lty=2) text(2, 0.6, expression(f[1](x)==sin(x^2-0.4)) ) text(1.3, -0.3, expression(f[2](x)==sin(x-0.4)^2) ) text(0.3, 0.8, expression(e^(frac(alpha,beta*gamma))), cex=2, col="blue") ### Spezial: Titel in unterschiedlichen Farben plot(1) mtext("ATC, ",col='black',line=2,adj=0.4) mtext("AVC, ",col='blue',line=2,adj=0.45) mtext("AFC, ",col='red',line=2,adj=0.5) mtext("MC",col='green',line=2,adj=0.54) ################################################# ### Grafik-Ausgabemöglichkeiten ################################################# ### Übersicht: Arten der Ausgabe bitmap bmp jpeg pdf pictex png postscript tiff xfig X11 install.packages("AER") library(AER) data(CPS1985) attach(CPS1985) plot(education, wage) ?pdf pdf("graphs/education_wage.pdf", width=10) # Idee: Speichere in PDF # Was? plot(education, wage) abline(v=10) dev.off() ### Mehrere Graphen je Seite eine Device pdf("graphs/vierergraph.pdf", width=10) # Idee: Speichere in PDF par(mfrow = c(2, 2)) # 4 Graphen pro Device, in 2 Zeilen und 2 Spalten hist(wage) hist(log(wage)) plot(wage ~ education) plot(log(wage) ~ education) dev.off() # Alternativen: split.screen und layout png(file = "graphs/vierergraph.png", width = 1500, height = 1500, pointsize = 50) par(mfrow = c(2, 2)) # 4 Graphen pro Device, in 2 Zeilen und 2 Spalten hist(wage) hist(log(wage)) plot(wage ~ education) plot(log(wage) ~ education) dev.off() # Beachte: # Je kleiner width und height, desto größer erscheinen die Zeichen! # Für das Einbinden in (LaTex- oder Word-) Dokumente ausreichend große Zeichen! ### Aufgabe C4 # Versuchen Sie einen Christbaum zu zeichnen (z. B. mit polygon). Speicheren Sie diesen # als .pdf in einem "graphs"-Ordner ab.