Einführung in die Software R: Unterstützung für Teilnehmer der Veranstaltung „Statistische Methodenlehre 1“ 2. Veranstaltung 07.11.2000 Befehle in R werden in der R-Console nach dem Promptzeichen (>) eingegeben. Unvollständige oder längere Befehle können in einer weiteren Zeile nach dem Folgeprompt (+) fortgesetzt werden. R rechnet mit Vektoren, die komponentenweise addiert, subtrahiert und auch komponentenweise multipliziert und dividiert werden. Funktionen (wie log, sqrt oder sin) werden auf jede Komponente des Vektors angewendet. Es gibt in R viele implementierte Funktionen. Diese werden mit ihrem Namen, gefolgt von einem runden Klammerpaar aufgerufen. In dieser Klammer können Argumente stehen. Es wird unterschieden zwischen verlangten Argumenten, die immer eingegeben werden müssen und optionalen Argumenten, denen in der Definition der Funktion Standard- (oder Default-)Werte zugewiesen wurden, die verwendet werden, wenn sie bei Aufruf der Funktion nicht explizit eingegeben werden, z.B. hat die Funktion log die beiden Argumente x und base. Dabei ist x, das sind die Werte, für die der Logarithmus berechnet werden soll, ein verlangtes Argument, und base, das ist die Basis des Logarithmus, ist ein optionales Argument. Wenn ich nichts anderes vereinbare, wird als Basis die Zahl e=2.7818282 verwendet. Argumente werden durch Kommata voneinander getrennt, z.B. log(100,10). Wie erfahre ich, welche Argumente eine Funktion hat. Dazu gibt es die Funktion args, die so angewendet wird. > args(log)# der Name der Funktion, deren Argumente ich erfahren möchte, ist als Argument zu args einzugeben. function (x, base = exp(1)) NULL Diese Ausgabe besagt log ist eine Funktion mit den Argumenten x und base. Durch base = exp(1) wird angedeutet, dass base der Defaultwert exp(1) zugewiesen ist. Die Argumente einer Funktion werden in den runden Klammern angegeben. Sie sind entweder in der richtigen Reihenfolge durch Komma voneinander getrennt oder mit Namen des Arguments und Gleichheitszeichen einzugeben. Um also den Logarithmus von 64 zur Basis 4 auszurechnen, gibt es die folgenden Möglichkeiten: 1.) log(64,4) 2.) log(x=64,base=4) 3.) log(x=64,4) 4.) log(64,base=4) 5.) log(base=4,x=64) Nur in der letzten Variante ist die Angabe der Namen der Argumente erforderlich. Ausführlichere Informationen finden Sie in der Hilfe, die Sie mit ?log oder help(log) aufrufen. Eine etwas komfortablere Form der Hilfe mit Suchmöglichkeiten und Links zu verwandten Funktionen ist die HTML-Version der Hilfe, die Sie über Help in der Kommandozeile erreichen. Die Hilfe ist nach einem bestimmten Schema aufgebaut, das wir uns jetzt am Beispiel der Funktion log ansehen wollen. Sie beginnt mit einer kurzen Beschreibung (Description), in der gesagt wird, was diese Funktion macht. Wenn nötig werden ausführlichere Informationen unter (Details, siehe weiter unten bei der Besprechung der Funktion sample) gegeben. Unter Usage wird gesagt, wie die Funktion benutzt, d.h. wie sie aufzurufen ist. Dabei erscheinen in den runden Klammern die Argumente, deren Bedeutung unter Arguments erklärt wird, hier erfahren wir dann auch den Defaultwert von base. Die verlangten Argumente stehen vorn. Unter Value erfahren wir, welche Werte ausgegeben werden, nämlich ein Vektor mit derselben Länge wie x. Außerdem erfahren wir, was ausgegeben wird, wenn man log(0)eingibt, das bekanntlich nicht definiert ist. Unter See Also erhalten wir Hinweise auf verwandte Funktionen. In der HTML-Version ist hier ein Link gesetzt. Unter Examples werden Beispiele gegeben, wie die Funktion angewendet wird. Wir wollen uns jetzt die Hilfe zu der Funktion plot anschauen, die wir in der ertsen Veranstaltung benutzt haben, um den Logarithmus von 1 bis 10 zu plotten. Von den drei unter Usage genannten Möglichkeiten, haben wir die zweite benutzt, d.h. wir haben x und y- Koordinaten eingegeben. Wir sehen, dass plot die weiteren optionalen Argumente xlim=range(x) und ylim=range(y) hat, dabei ist range eine R-Funktion, die Minimum und Maximum der übergebenen Werte bestimmt, z.B. > x<-1:10 # Eingabe x ist Folge von 1:10 > x # Zur Überprüfung [1] 1 2 3 4 5 6 7 8 9 10 # Ausgabe > range(x) # Bestimmung des Minimums und Maximums [1] 1 10 # Ausgabe Minimum ist 1 und Maximum ist 10 Mit den Argumenten xlim und ylim werden die Grenzen der x- und y-Achse im Plot festgelegt. Standardmäßig wird der Plot von Minimum bis Maximum gezeichnet. Möchte ich die Grenzen der x-Achse nicht von 1 bis 10, sondern von 0 bis 10, so muss ich für das optionale Argument xlim=c(0,10) setzen. Das nächste optionale Argument der Funktion plot ist type=“p“. Das bedeutet, standardmäßig werden in einem Plot Punkte gezeichnet. Wir haben in der vorigen Veranstaltung Linien gezeichnet. Dazu hatten wir type=“l“ (für weitere Optionen von type schauen Sie bitte unter Arguments) gesetzt. Weitere Argumente zu plot sind main, xlab und ylab. Damit können ein Titel und die Beschriftung der Achsen bestimmt werden, z.B. x<-1:10 plot(x,log(x),xlim=c(0,10),type=“l“,main=”Natürlicher Logarithmus”,xlab=”x”,ylab=”ln(x)”) Unter Details erfahren wir dann weitere Einzelheiten, z.B. das für ganz einfache Plots, wie in unserem Beispiel intern die Funktion plot.default verwendet wird. Sie sehen in der Hilfe zu plot.default weitere Argumente (genauer graphische Parameter) zur Gestaltung Ihrer Graphik. Die wichtigsten seien hier nur in Kürze genannt. sub Untertitel pch Punktsymbole lty Linientyp col Farbe für Linien und Punkte cex Schriftgröße lwd Linienstärke Unter See Also: werden Hinweise auf verwandte Funktionen gegeben, in der HTML-Version mit entsprechendem Link. Nützlich sind hier die Hinweise auf die Funktionen points und lines. Mit points werden in eine vorhandene Graphik Punkte gezeichnet, mit lines kann man zusätzliche Linien zeichnen. Bevor wir das an einem Beispiel zeigen, wollen wir eine neue Möglichkeit kennenlernen, eine Funktion in R graphisch darzustellen. Unter Examples finden wir Anwendungsbeispiele für die gerade betrachtete Funktion. Interessant ist : plot(sin,-pi,2*pi) Dieser Befehl zeichnet die Sinusfunktion von -bis 2. Man braucht also nur den Funktionsnamen, den Anfangspunkt und den Endpunkt als Argumente zu plot anzugeben. Dies ist die unter Details genannte spezielle Methode für Funktionen. Beim letzten Mal waren wir bei der Darstellung der Logarithmusfunktion den mühsamen Weg über x-Folge und yFolge gegangen. Der folgende Weg ist einfacher: plot(log,1,10) # zeichnet natürlichen Logarithmus von 1 bis 10 > points(1:10,log(1:10),pch=15,cex=4,col=2) # zeichnet Punkte mit dem Plotsymbol 15, in der Schriftgöße 4 und in der Farbe 2. plot(log,1,10) # zeichnet natürlichen Logarithmus von 1 bis 10 > points(1:10,log(1:10),pch=15,cex=4,col=“blue“) # zeichnet Punkte mit dem Plotsymbol 15, in der Schriftgöße 4 und in blauer Farbe > plot(log,0,10) # zeichnet natürlichen Logarithmus von 0 bis 10 Wir wollen den Zehnerlogarithmus zusätzlich einzeichen. > x<-seq(0,10,by=0.01)# Folge von x-Werten, für die log10 berechnet werden soll > lines(x,log10(x),lwd=4,col="red") # zeichnet Zehnerlogarithmus in rot mit Linienstärke 4 > lines(x,log(x),lwd=4,col="blue") # zeichnet natürlichen Logarithmus in blau mit Linienstärke 4 Wir wollen die x-Achse bei y=0 sehen. > abline(h=0,lwd=2) # zeichnet horizontale (h=0) Linie mit Linienstärke (lwd=2) 2 Was macht abline? Die Funktion abline zeichnet eine Gerade in einen vorhandenen Plot. Die ersten drei Formen sind für uns relevant. Bei der ersten Form gibt man Achsenabschnitt und Steigung (y=b*x+a) an. Die beiden nächsten Formen zeichnen eine horizontale oder vertikale Linien an den mit h bzw. mit v bestimmten Koordinaten. Wir wollen noch die y-Achse an der Stelle x=0 einzeichnen. > abline(v=0,lwd=2) # Zeichnet vertikale Linie bei x=0 Wir möchten die Tangente im Punkt x=1,y=0 einzeichnen. Die Steigung ist 1, der yachsenabschnitt ist –1. > abline(-1,1,col="green",lwd=4) # zeichnet Tangente in (1,0) Wir wollen uns jetzt die Hilfe zur Funktion sample ansehen. Wie wir der Description entnehmen, zieht diese Funktion eine Stichprobe aus der mit x spezifizierten Grundgesamtheit, der Stichprobenumfang kann angegeben werden, und wir können bestimmen, ob wir die Stichprobe mit oder ohne Zurücklegen ziehen wollen. Welche Argumente hat diese Funktion und wie sind diese einzugeben? Das erfahren wir unter Usage und Arguments. Die Grundgesamtheit wird angegeben durch x, wobei x ein Vektor oder eine positive ganze Zahl ist. Der Vektor kann aus reellen oder komplexen Zahlen , Buchstaben oder logischen Werten bestehen. Wie die Grundgesamtheit aussieht, wenn x eine positive ganze Zahl ist, erfahren wir hier nicht, in solchen Fällen müssen wir weiter unten unter Details schauen. Dort erfahren wir, dass die Grundgesamtheit dann aus 1:x besteht, das ist die Folge der ganzen Zahlen von 1 bis x. Unter Arguments erfahren wir, dass der Stichprobenumfang durch size festgelegt wird. Unter Details erfahren wir dazu, dass size standardmäßig auf length(x) gesetzt ist. Dabei ist length eine weitere R-Funktion, die die Länge eines Vektors x bestimmt. Da bei Default replace=FALSE gesetzt ist, d.h. standardmäßig wird ohne Zurücklegen gezogen, wird ohne Angabe von size die Grundgesamtheit zufällig permutiert. > sample(6) # Stichprobe der Größe 6 aus ganzen Zahlen von 1 bis 6, ohne Zurücklegen, d.h. zufällige Permutation [1] 5 2 3 6 4 1 > sample(6) [1] 3 6 4 1 2 5 > sample(6) [1] 3 6 1 4 2 5 > sample(6) [1] 6 4 3 1 5 2 > sample(6,replace=T) # Stichprobe der Größe 6 aus ganzen Zahlen von 1 bis 6, mit Zurücklegen [1] 3 1 2 2 2 2 > sample(6,replace=T) [1] 1 2 6 4 4 6 > sample(1:6,replace=T) [1] 3 2 6 1 1 4 > sample(1:6,replace=T) [1] 2 6 6 3 5 5 > sample(6,size=20,replace=T) # Stichprobe der Größe 20 aus ganzen Zahlen von 1 bis 6 mit Zurücklegen [1] 2 3 4 6 2 1 5 2 3 4 3 1 4 2 2 1 1 2 5 4 Mit dem optionalen Argument prob können Wahrscheinlichkeiten festgelegt werden, mit denen die einzelnen Elemente der Grundgesamtheit gezogen werden sollen. Standardmäßig werden alle Elemente der Grundgesamtheit mit der gleichen Wahrscheinlichkeit gezogen. Beim Ziehen ohne Zurücklegen werden die Wahrscheinlichkeiten nach jeder Ziehung proportional zu den Wahrscheinlichkeiten der noch verbliebenen Elemente neu berechnet. Addieren sich die Komponenten des Vektors prob nicht zu 1 auf, so wird der Vektor intern von R normiert. Man kann also auch Verhältnisse eingeben. > sample(1:6,prob=c(3,2,1,1,1,1)) [1] 1 6 3 2 4 5 > sample(1:6,size=20,replace=T) [1] 6 1 5 2 4 3 3 4 3 6 6 3 5 6 5 3 5 3 1 5 Wir möchten jetzt zählen, wie oft die einzelnen Elemente gezogen wurden. Dazu speichern wir jetzt eine neue Stichprobe in einen Vektor stich. Danach wenden wir die Funktion table auf diesen Vektor an. > stich<-sample(1:6,size=20,replace=T) > stich [1] 5 2 3 2 5 3 2 4 1 4 1 6 4 4 4 1 4 3 4 4 > table(stich) stich 1 2 3 4 5 6 3 3 3 8 2 1 Wir möchten jetzt eine graphische Darstellung dieser beobachteten Häufigkeiten. Dazu verwenden wir die Funktion barplot. > barplot(table(stich)) R-Befehle können also ineinander verschachtelt werden. Wir schreiben jetzt statt stich die ursprüngliche Definition von stich und erzeugen damit eine neue Stichprobe, die dann ausgezählt wird und graphisch dargestellt wird. > barplot(table(sample(6,size=20,replace=T))) > barplot(table(sample(6,size=1000,replace=T))) # Stichprobenumfang 1000 Wir wollen statt der absoluten Häufigkeiten die relativen Häufigkeiten darstellen und müssen dazu die von table erzeugten Werte durch den Stichprobenumfang dividieren. > barplot(table(sample(6,size=1000,replace=T))/1000) Diese Verschachtelung wird jetzt jedoch unübersichtlich. Wir werden beim nächsten Mal eine Funktion schreiben, in der die einzelnen Schritte klar erkennbar sind und bei der wir Argumente, wie den Stichprobenumfang eingeben können. Außerdem wollen wir durch ein Argument bestimmen können, ob die absoluten oder relativen Häufigkeiten dargestellt werden sollen.