Walter Zucchini
Georg-August-Universität GöttingenKristin Neumann
Institut für Statistik und ÖkonometrieAndreas Stadie

EINFÜHRUNG IN R

Mit R können Datenanalysen und Modellanpassungen anschaulich und übersichtlich ausgeführt werden. Im Bereich der graphischen Datenanalysen stehen beispielsweise Histogramme, Boxplots, Quantil-Quantil-Plots und viele weitere Plot-Möglichkeiten zur Verfügung. Das Programm ist sowohl im Bereich der Zeitreihenanalyse als auch für die im Rahmen der Varianzanalyse und der verallgemeinerten linearen Modelle erforderlichen Modellanpassungen geeignet. Auch für die Anwendung von Bootstrap-Verfahren ist eine leistungsfähige Software unverzichtbar.
Ist die grundsätzliche Arbeitsweise von R einmal verstanden, kann das Programmpaket auch für das Programmieren eigener Funktionen und somit zum Lösen anwenderspezifischer Probleme verwendet werden.
Durch die folgende Einführung soll das erste Arbeiten mit R ermöglicht und erleichtert werden - sie kann allerdings selbständiges Üben und Erfahrungsammeln durch Ausprobieren nicht ersetzen. Die in den Abschnitten jeweils wichtigen behandelten Befehle werden am Textrand nochmals genannt, um ein schnelleres Wiederholen und eine bessere Übersicht zu gewährleisten.
Möchte man R verlassen, kann man entweder den Befehl q() hinter dem Prompt-Zeichen (mit nachfolgender Enter-Taste) eingeben, oder man klickt auf der Menüleiste (am oberen Bildschirmrand) rechts in der Ecke das Kreuz zum Schließen des R-Fensters an. In beiden Fällen erscheint in einem Dialogfenster die Frage, ob die in der Sitzung gewonnenen Daten für ein weiteres Arbeiten in der nächsten Sitzung gespeichert werden sollen. Klickt man `yes' an, werden die Daten gespeichert, ansonsten nicht.
Eine weitere Möglichkeit zur Inanspruchnahme der Hilfefunktion besteht in der Nutzung menügesteuerter Hilfen: Auf der Menüleiste (oberer Bildschirmrand) befindet sich der Menüpunkt `Help', unter dem sowohl die Standardhilfe von R (hier wird nach Aufruf in einem Dialogfenster wiederum nach dem Befehl gefragt, über den Informationen gewünscht sind) als auch eine Hilfe im html-Format aufgerufen werden kann (bei Verwendung dieser Hilfe muß man sich nicht im Internet anmelden). Wird letztere verwendet, kann über den Link `Functions' auf die Hilfe zu allen verfügbaren, alphabetisch geordneten Funktionen zugegriffen werden. Vorteil dieser Hilfe ist, daß zum einen alle Funktionen alphabetisch aufgelistet sind und daß man zum anderen bei Hinweisen auf andere in diesem Zusammenhang wichtige Funktionen direkt durch Anklicken auf diese zugreifen kann, während die Standardhilfe für den ``Folgebefehl'' wieder neu aufgerufen werden muß. Die jeweilige Hilfeseite kann durch Klicken auf das Kreuz rechts oben in der Ecke geschlossen werden.
Für eine ausführliche Dokumentation von R steht unter dem Menüpunkt `Hilfe' zusätzlich das sogenannte `manual' zur Verfügung.
|
| >3+5 | Addiert 3 zu 5 |
| >3-5 | Subtrahiert 5 von 3 |
| >3*5 | Multipliziert 3 mit 5 |
| >3/5 | Dividiert 3 durch 5 |
| >3^ 5 | Berechnet 3 ``hoch'' 5 |
| >sqrt(3) | Berechnet die Quadratwurzel aus 3 |
| >log(3) | Berechnet den natürlichen Logarithmus von 3 |
|
Durch die Zeichenfolge <- wird dem Namen summe das Ergebnis der nachfolgenden Operation zugewiesen.
Nach Ausführen des Befehls erscheint das Ergebnis also nicht auf dem Bildschirm, sondern die
Return-Taste bewirkt lediglich das Abspeichern des Ergebnisses der Operation unter summe.
Möchte man sich das Ergebnis ansehen, ist dies durch Eingabe von summe mit nachfolgender
Return-Eingabe möglich:
|
Mit dem unter summe abgespeicherten Ergebnis kann dann wie mit einer
gewöhnlichen Zahl weitergerechnet werden, beispielsweise folgendermaßen:
|
Hiermit wird das Produkt aus summe und 4 berechnet und das Ergebnis (hier 32) dem Namen produkt zugewiesen. Durch Eingabe von produkt überzeuge man sich von der Richtigkeit des Ergebnisses!
Allgemein werden alle Ergebnisse von Operationen, denen ein Name zugewiesen wurde, auch Objekte genannt.
|
Benötigt man eines der
Objekte nicht mehr, kann man dieses löschen,
indem man den Befehl
|
eingibt. Das Objekt mit dem Namen name ist dann gelöscht.
Klammersetzung
Da beim Arbeiten mit R sehr viele Klammern verwendet werden, passiert es häufig, daß Befehle
nicht ausgeführt werden können, da Klammern nicht korrekt gesetzt sind. Zu beachten ist dabei auch, daß
R runde, eckige und geschweifte Klammern verwendet und diese auch unterscheidet, daß einer geöffneten eckigen Klammer also
``irgendwann'' eine geschlossene eckige Klammer folgen muß.
Ist ein Befehl bei Eingabe der Return-Taste noch nicht vollständig, erscheint in der
nächsten Zeile statt des Prompt-Zeichens ein +, das zur Vervollständigung des Befehls auffordert:
|
Möchte man den Befehl vervollständigen, gibt man in diesem Fall nach dem +
eine runde Klammer ein und drückt Return:
|
Findet man den Fehler nicht oder möchte man den Befehl aus anderen Gründen nicht vervollständigen, bricht man den Befehl mit der Esc-Taste oder durch Anklicken des roten Stop-button in der Menüleiste ab; es erscheint ohne Ausgabe eines Ergebnisse das Prompt-Zeichen.
Groß- und Kleinschreibung
R unterscheidet Klein- und Großbuchstaben. Weist man also einem Ergebnis den
Namen summe zu und versucht man, das Ergebnis mit dem Befehl Summe abzurufen,
wird folgende Fehlermeldung erscheinen (soweit man nicht vorher ein Objekt Summe definiert hat):
|
Überschreiben von Objekten
Hat man einen Namen vergeben und verwendet diesen zur Zuordnung ein
zweites Mal, überschreibt R das vorher unter diesem Namen gespeicherte Objekt
ohne Warnung, das alte unter diesem Namen gespeicherte Objekt kann nicht
mehr abgerufen werden. Beispiel:
|
Standardmäßig interpretiert R alle Daten als numerisch. Um Daten als
alphabetische Daten kenntlich zu machen, müssen diese in Anführungszeichen gesetzt werden.
Versucht man, Kristin unter dem Namen vorname abzuspeichern, funktioniert dies
folglich nur, wenn folgender Befehl eingegeben wird:
|
Werden die Anführungszeichen weggelassen, gibt R die folgende Fehlermeldung aus, weil
R ein unter diesem Namen gespeichertes Objekt sucht und kein solches findet:
|
Hingegen werden die Ausdrücke T und F für die logischen Werte `wahr' (True) respektive `falsch' (False)
ohne besondere Kennzeichnung als logische Daten erkannt:
|
Im weiteren Sinn können auch die in Abschnitt 5 behandelten Funktionen als R-Objekte bezeichnet werden.
Vektoren
Vektoren sind eindimensionale Datenfelder.
In Vektoren können mehrere einzelne Elemente zu einer Einheit zusammengefaßt werden.
Vektoren können entweder aus
numerischen, logischen oder alphabetischen Daten bestehen.
Die Daten werden beispielsweise durch den Befehl c(d1,d2,...) verbunden,
wobei d1,d2,... für die zu verbindenden Elemente stehen (weitere Befehle zur Erzeugung von Vektoren finden sich in Abschnitt 5.2.1).
Ein Beispiel mit numerischen Daten ist:
|
Selbstverständlich kann dieser Ausdruck dann auch wieder unter einem Namen
abgespeichert und dadurch abrufbar gemacht werden:
|
Ein Vektor kann auch aus logischen Daten
|
oder aus alphabetischen Daten bestehen:
|
Die Datenarten sollten allerdings in einem Vektor nicht gemischt werden, da
R dann alle Daten in eine Datenart (je nach Art der eingegebenen Daten, im Beispiel in Character-Daten) umwandelt:
|
Matrizen
Matrizen sind zweidimensionale Datenfelder.
Der Umfang solcher Matrizen wird durch die Angabe der
Anzahl von Zeilen und der Anzahl von Spalten festgelegt. Mit
matrix(data,ncol,nrow,byrow)
können solche Matrizen erstellt werden. Eine Erklärung zu den kursiv gedruckten Argumenten der Funktion kann auch
der Hilfefunktion entnommen werden. Als erstes Argument werden die Daten
eingegeben, wobei diese in Vektorform eingegeben werden müssen.
Mit ncol wird die Anzahl der Spalten der Matrix festgelegt, mit nrow die Anzahl der
Zeilen der Matrix. Es reicht aus, eines der beiden letztgenannten Argumente anzugeben, da der Aufbau der Matrix durch die
Anzahl der Elemente im Datenvektor in Verbindung mit der Angabe eines der beiden Argumente bereits vollständig festgelegt ist.
Standardmäßig werden die Daten eingelesen, indem zuerst die erste Spalte von oben nach unten vollständig gefüllt wird, dann die zweite Spalte, die
dritte Spalte usw. Wird die Option byrow allerdings auf T (True) gesetzt, erfolgt das Auffüllen der Matrix zeilenweise.
Hier einige Beispiele:
|
|
|
In Matrizen können - analog zu den Vektoren - auch andere Datenarten als numerische Daten stehen. Es gelten die dort genannten Regeln.
|
Für die manuelle Erfassung von Daten wird der Befehl scan(...) eher
selten gebraucht. Es ist mit diesem Befehl aber auch möglich, Daten aus einer
Datei einzulesen. Hierbei wird als Argument file der Funktion die
Quelle der einzulesenden Daten in Anführungszeichen eingegeben. Angenommen,
man möchte aus der Datei K:\Splus\daten\foodx.dat Daten unter dem Namen speisen einlesen, lautet der
zugehörige Befehl (wichtig ist die korrekte Eingabe der doppelten backslashs!):
|
Hierbei ist darauf zu achten, daß
mit diesem Befehl nur Daten im Vektorformat gelesen werden können und daß das Ergebnis dieser Form des Einlesens
ein Vektor ist. Möchte man Tabellen (eventuell mit Zeilen- und Spaltennamen) einlesen und diese auch als Tabellen erhalten, ist der Befehl
read.table(...) besser geeignet. Auch dieser Befehl hat mehrere Argumente, von denen
an dieser Stelle nur zwei erläutert werden. Angenommen, es sollen die
Daten K:\Splus\daten\icecream.dat unter dem Namen eis eingelesen werden (Hinweis: Der Datensatz
enthält den Eiskonsum in den USA mit mehreren, eventuell den Konsum erklärenden Einflußvariablen).
Der
zugehörige Befehl lautet
|
R weist den Spalten und Zeilen automatisch Variablennamen und Zeilennummern zu.
Wird das Objekte eis betrachtet, wird deutlich, daß in der Quelldatei bereits Variablennamen
enthalten sind. Möchte man diese auch als Variablennamen kennzeichnen, kann dies durch die
Option header=T geschehen:
|
In der Regel ist es sinnvoll, sich die Daten vor dem Einlesen in einem Editor anzuschauen, um sich über den passenden Einlesebefehl klarzuwerden. Immer wenn die Daten beispielsweise Variablenbezeichnungen enthalten, kann der Befehl scan(...) wegen der unterschiedlichen Datenformate nicht verwendet werden.
HINWEIS: R kann Verzeichnisse und Dateien nur dann lesen, wenn die jeweiligen Verzeichnis- und Dateinamen nicht mehr als 8 Buchstaben umfassen (von den Dateiendungen abgesehen).
In diesem Zusammenhang ist auch
von Interesse, wie Daten und Funktionen aus R im ASCII-Format
abgespeichert werden können (dies ist beispielsweise hilfreich, um Daten/Funktionen
nach Hause zu ``transportieren'').
Mit dem Befehl sink(file="...",appart) wird bewirkt, daß die Ausgabe der nachfolgenden
Befehlsergebnisse nicht auf dem Bildschirm, sondern in der in Klammern genannten Datei im ASCII-Format
erfolgt. Ist appart=F, werden in der genannten Datei eventuell bereits vorhandene Daten nicht überschrieben (die neuen Daten werden hinten angehängt), ist die Option
T, wird die Datei komplett mit den neuen Daten überschrieben.
Möchte man beispielsweise das Objekt eis auf einer Diskette in einer Datei mit dem Namen `Eisdat.txt' abspeichern, geschieht das mit der
Befehlsfolge
|
Mit dem letzten Befehl wird bewirkt, daß die Ausgabe der folgenden Befehlsergebnisse nicht mehr in der genannten Datei, sondern wieder auf dem Bildschirm erfolgt. Ebenso ist es mit derselben Vorgehensweise möglich, R-Funktionen (siehe Abschnitt 5) abzuspeichern. Wenn solche Funktionen wieder in R eingelesen werden sollen, kann allerdings nicht der Befehl scan(...) verwendet werden, sondern der entsprechende Befehl heißt source(file="..."), wobei file durch die Pfadangabe der einzulesenden Datei ersetzt werden muß.
|
Genauso verhält es sich bei der Multiplikation zweier Vektoren (es sei angenommen, daß die
oben definierten Vektoren vek1 und vek2 bereits existieren):
|
R bildet also an dieser Stelle nicht das Skalarprodukt dieser beiden Vektoren,
sondern multipliziert auch hier komponentenweise. Analoges gilt für das
Arbeiten mit Matrizen:
|
Soll eine Matrizenmultiplikation
ausgeführt (oder das Skalarprodukt zweier Vektoren gebildet) werden, muß dies explizit
durch den Befehl %*% gekennzeichnet werden:
|
In diesem Zusammenhang
sollen zwei weitere, für das Arbeiten
mit Matrizen wesentliche Befehle
genannt werden: t(...) und solve(...).
Mit dem Befehl t(...)
wird die transponierte Matrix berechnet (angenommen,
die oben verwendete Matrix mat1 ist bereits vorhanden):
|
Mit dem Befehl solve(...) kann (u.a.) die Inverse einer Matrix berechnet werden:
|
In dem letzten Teil dieses Abschnitts wird erläutert,
wie man auf einzelne Elemente
von Vektoren und Matrizen direkt zugreifen kann.
Zu diesem Zweck wird der Ausdruck ...[...] verwendet. In den
eckigen Klammern wird näher spezifiziert, welches Element angesprochen wird. Beispiel:
|
Soll ein Element des Vektors nicht genannt werden, so wird das durch
ein Minus-Zeichen in den eckigen Klammern kenntlich gemacht:
|
Beim Ansprechen eines einzelnen Elementes aus einer Matrix müssen
zwei Dimensionen genannt werden, um das Element genau zu spezifizieren: Die
gewünschte Zeile und die gewünschte Spalte. Dies geschieht, indem
in den eckigen Klammern zunächst die Zeile genannt wird und nachfolgend die Spalte (durch Komma getrennt):
|
Soll eine ganze Zeile einer Matrix angesprochen werden, so wird auf die
Angabe der Spalte verzichtet und die Eingabe der Spezifikation mit dem Komma abgschlossen:
|
Analoges gilt für das Ansprechen einer Spalte.
Die hier am Beispiel von Vektoren und Matrizen ausgeführten Rechenoperationen gelten in den Grundzügen auch für das Arbeiten mit Data Frames und Arrays.
Funktionen (oder auch Programme) stellen eine definierte Abfolge von Befehlen dar. Sie vereinfachen den Umgang mit R, indem sie den Dialogablauf rationalisieren: Ist man beispielweise an der Berechnung der Spaltensummen einer Matrix interessiert und möchte die berechneten Summen in einem Vektor abspeichern, so wäre es zu umständlich, für jede Spalte die Summe zu berechnen und anschließend das Ergebnis dem zuvor definierten Vektor zuzuweisen. Statt dessen wird einfach eine Funktion verwendet, die die erforderlichen Befehle hintereinander ausführt.
Grundsätzlich bestehen Funktionen aus einem Eingabe-, einem Verarbeitungs- und einem Ausgabeteil. Übertragen auf das Beispiel benötigt man demnach eine Funktion, die als Eingabe eine Matrix beinhalten muß, in ihrem Verarbeitungsteil den Vektor der Spaltensummen berechnet und diesen Vektor als Ausgabe zur Verfügung stellt.
Man kann Funktionen unterscheiden, die in R bereits vorhanden sind und Funktionen, die vom Anwender selbst programmiert werden. Bei den erstgenannten Funktionen handelt es sich um Funktionen, die ``häufig'' benötigt werden. Die wichtigsten dieser Funktionen bilden den Gegenstand des folgenden Abschnitts 5.2.2 Die selbst programmierten Funktionen werden für Problemstellungen benötigt, für die keine Standardfunktionen von R zur Verfügung stehen. In Abschnitt 5.3 wird dargestellt, wie man solche Funktionen für individuelle Problemstellungen programmieren kann.
Vor der Erläuterung der einzelnen Funktionen werden an dieser Stelle die allgemeinen Regeln erläutert, die bei dem Umgang mit Funktionen zu beachten sind. Verdeutlicht werden diese an der Funktion matrix(...), die bereits in Abschnitt 3.2 dargestellt wurde: Zunächst ist die Bezeichnung der auszuführenden Funktion einzutippen. Im Beispiel also matrix. Im Anschluß an die Funktionsbezeichnung ist der Eingabeteil der Funktion in runden Klammern zu definieren. Der Eingabeteil besteht aus einer bestimmten Anzahl von Argumenten, denen Werte zuzuordnen sind. Die Argumente der Funktion matrix sind data, ncol, nrow und byrow. Diese sind in den runden Klammern, in dieser Reihenfolge und durch ein Komma getrennt zu spezifizieren. Beispielsweise ist also matrix(1:4,2,2,F) einzugeben. Für andere Funktionen ist die Reihenfolge zu verwenden, die in der Hilfe der entsprechenden Funktion angegeben ist. Zwei Dinge sind noch zu erwähnen: Zum einen kann auf die Einhaltung der Reihenfolge verzichtet werden, wenn die Bezeichnungen der Argumente in den Eingabeteil aufgenommen werden. So liefert zum Beispiel die Eingabe von matrix(byrow=F,ncol=2,data=1:4,nrow=2) dieselbe Matrix wie oben. Zum anderen ist zu bemerken, daß es Argumente gibt, die nicht definiert werden müssen. Solche sogenannten optionalen Argumente können definiert werden. Wird auf die Definition eines optionalen Arguments verzichtet, wird ihm automatisch ein Default-Wert von R zugeordnet. Ein solches Argument der Funktion matrix(...) ist beispielsweise byrow, dem automatisch der Default-Wert F zugeordnet wird, wenn auf dessen explizite Definition verzichtet wird. Auch die Eingabe von matrix(1:4,2,2) liefert also dieselbe Matrix wie oben.
Erzeugung eines Vektors mit beliebigen Elementen
Zur Erzeugung eines Vektors mit einzeln zu spezifizierenden Komponenten wird die
Funktion
c(...) verwendet. Diese Funktion wurde bereits erläutert (siehe Abschnitt
3.2), so daß hier nicht mehr darauf eingegangen wird.
Erzeugung eines Vektors der Länge n mit identischen Elementen
Ein Vektor mit bestimmter Länge n, der nur identische Elemente enthält,
ist mit der Funktion
rep(x,times,length) zu erzeugen. Hier werden die
beiden ersten Argumente dieser Funktion erläutert: Das erste Argument beschreibt die
zu replizierenden Vektorelemente, und das zweite
Argument (times) dient zur Definition der Anzahl von Wiederholungen. Um beispielsweise
den Vektor (5,5,5)¢ zu generieren, ist die Funktion rep(5,3) auszuführen:
|
Erzeugung eines Vektors mit ganzen Zahlen von a bis b
Wenn man eine Zahlenreihe von einem Startwert a bis zu einem Endwert
b aus ganzen Zahlen erzeugen möchte, so ist der Befehl a:b
zu verwenden. Zum Beispiel liefert die Eingabe 3:5 den Vektor (3,4,5)¢:
|
Erzeugung eines Vektors von a bis b mit definierter Länge oder definierter
Schrittweite
Der Befehl seq(a,b,length,by) kann entweder zur Erzeugung eines Vektors mit definierter
Länge oder definierter Schrittweite verwendet werden. Um z.B. einen
Vektor von a = 3 bis b = 4 mit 3 Elementen zu erzeugen, ist die Funktion
seq(3,4,length=3) auszuführen. Das Ergebnis ist der Vektor (3,3.5,4)¢:
|
Möchte man statt der Länge eine Schrittweite definieren, so ist hingegen das Argument by zu spezifizieren. Zum Beispiel liefert die Ausführung der Funktion seq(3,3.2,by=0.1) den Vektor (3,3.1,3.2)¢:
|
Berechnung des Mittelwertes
Die Funktion, die den Mittelwert eines Vektors
oder einer Matrix berechnet,
heißt mean(x). Soll beispielsweise der Mittelwert des Vektors (3,5)¢
berechnet werden, so liefert mean(c(3,5)) das Ergebnis, also den Wert
4:
|
Neben dem einfachen Mittelwert ist es möglich, mit der Funktion weighted.mean(...) einen gewichteten Durchschnitt zu berechnen. Weitere Informationen zu dieser Funktion sind der Hilfe zu entnehmen.
Berechnung der Varianz
Die Varianz eines Datensatzes wird mit der Funktion var(x) berechnet. Die
Eingabe
var(c(3,5)) liefert als Ergebnis den Wert 2:
|
Wie man an diesem Beispiel leicht
erkennt, wird mit R also der erwartungstreue
Schätzer der Varianz S* = åi(xi-[`x])2/(n-1) bestimmt.
Um S = åi(xi-[`x])2/n , also den Schätzer mit dem kleineren
mittleren quadratischen Fehler zu berechnen, ist das Ergebnis der Funktion
var mit
(n-1)/n zu multiplizieren. Im Beispiel muß also var(c(3,5))*1/2
berechnet werden. Das Ergebnis ist dann 1:
|
Berechnung von Minimum und Maximum
Die Befehle min(x) bzw. max(x) dienen zur
Bestimmung des Minimums bzw. Maximums eines Datensatzes.
Demnach liefert min(c(3,5)) den Wert 3 undmax(c(3,5)) den
Wert 5.
|
|
Berechnung von Kovarianz und Korrelation
Um die Kovarianz zweier Vektoren zu berechnen, wird
die Funktion cov(x,y) verwendet. Zur Ausführung der Funktion
müssen zwei Vektoren als Argumente definiert werden.
Die Kovarianz der Vektoren (3,4,5)¢ und (3,4,6)¢
beträgt beispielsweise 1.5:
|
Die Berechnung der Korrelation erfolgt analog zur Berechnung der Kovarianz mit dem Befehl cor(x,y):
|
Die Korrelation der Vektoren beträgt also ca. 0.98. Ferner kann in den Befehlen als einziges Argument eine Matrix definiert werden. Dann berechnet R die Kovarianz- bzw. Korrelationsmatrix der Spaltenvektoren dieser Matrix.
Die Funktionen für Verteilungen werden in vier Gruppen unterteilt:
Diese Funktionen existieren für zahlreiche Verteilungen. Man kann sich vorstellen, daß sie sich aus zwei Teilen zusammensetzen: Der erste Buchstabe kennzeichnet die Funktionsgruppe. Beispielsweise wird ein r verwendet, um Zufallszahlen zu erzeugen. Direkt im Anschluß, d.h. ohne Leerzeichen, folgt die Kennzeichnung der Verteilung. Beispielsweise wird pois verwendet, um eine Poissonverteilung zu kennzeichnen. Die zusammengesetzte Funktionsbezeichnung lautet demnach rpois.
Die Funktionsgruppen werden hier beispielhaft an der Normalverteilung veranschaulicht, da die Verwendung der Funktionen bei anderen Verteilungen analog erfolgt (mit Ausnahme der anzugebenden Parameter; Informationen zu anderen Verteilungen sind in der Hilfe erhältlich).
Berechnung des Funktionswertes einer Dichtefunktion
Die Berechnung des Funktionswertes der Dichtefunktion einer Normalverteilung
erfolgt mit der Funktion pnorm(q,mean,sd). Dabei sind neben dem Abszissenwert
q der
Erwartungswert mean und die Standardabweichung sd festzulegen.
Werden m und s nicht definiert, so gilt m = 0
und
s = 1 (diese Default-Werte gelten auch für die übrigen Funktionen zur Normalverteilung).
Um zum Beispiel den
Wert der Dichtefunktion an der Stelle 1.644854 einer Standardnormalverteilung
zu berechnen, ist folgende Funktion auszuführen:
|
Diese Funktion wird beispielsweise für graphische Darstellungen der Dichtefunktion verwendet (siehe Abschnitt 6).
Berechnung des Funktionswertes einer Verteilungsfunktion
Der Wert der Verteilungsfunktion an der Stelle x gibt die Wahrscheinlichkeit
an, daß ein Wert kleiner oder gleich x realisiert wird. Die Wahrscheinlichkeit für eine Realisation kleiner/gleich
1.644854 beträgt bei einer Standardnormalverteilung 0.95. Mit R ist dieser Wert
so zu berechnen:
|
Berechnung von Quantilen
Diese Werte geben die Ausprägung x an, die mit definierter Wahrscheinlichkeit nicht überschritten wird. Möchte man beispielsweise wissen, welcher Wert bei einer Standardnormalverteilung mit einer Wahrscheinlichkeit von 0.95 nicht überschritten wird, liefert qnorm(0.95,0,1) das richtige Ergebnis:
|
Erzeugung von Zufallszahlen einer Verteilung
Um Zufallszahlen aus einer Standardnormalverteilung zu erzeugen, ist die Funktion
rnorm(n,mean,sd) zu verwenden. Es ist dabei notwendig,
die Anzahl n der zu erzeugenden
Zufallszahlen anzugeben. Die Erzeugung von drei Zufallszahlen einer Standardnormalverteilung
könnte beispielsweise zu dem folgenden Ergebnis führen:
|
Berechnung der Länge eines Datensatzes
Gelegentlich möchte man die Anzahl der Elemente eines Vektors oder einer Matrix
bestimmen. Dazu verwendet man die Funktion length(x). Beispielsweise enthält
der Vektor (3,4,5)¢ drei Elemente:
|
Sortieren eines Datensatzes
Um die Elemente eines Vektors oder einer Matrix in sortierter Reihenfolge zu
erhalten, wird die Funktion sort(x) eingesetzt. Sortiert man zum Beispiel
den Vektor (4,5,3)¢, so erhält man als sortierten Vektor (3,4,5)¢:
|
Summe/Produkt eines Datensatzes
Zur Berechnung der Summe bzw. des Produkts werden die Funktionen sum(...) bzw.
prod(...) verwendet. Um beispielsweise den Wert 12 als Summe der Vektorelemente
des Vektors (3,4,5)¢ zu berechnen, ist die Ausführung der Funktion sum(c(3,4,5))
erforderlich:
|
Analog dazu liefert prod(c(3,4,5)) den Wert 60:
|
Erzeugen von Stichproben aus individuell festzulegenden Grundgesamtheiten
Möchte man eine Stichprobe nicht
aus einer bestimmten Verteilung einer
Zufallsvariablen ziehen, sondern die Grundgesamtheit individuell festlegen,
hilft der Befehl sample(x,size,replace,prob).
Hierbei wird mit x der Vektor von möglichen Werten in der Grundgesamtheit
vorgegeben, size ist die Stichprobengröße und mit replace wird spezifiziert, ob die
Stichprobe mit (replace=T) oder ohne Zurücklegen (replace=F, Default-Wert) gezogen wird.
Mit prob wird dem Vektor der möglichen Werte ein Vektor der zu den einzelnen Werten gehörenden Wahrscheinlichkeiten zugeordnet. Fehlt die Angabe für prob, wird für alle Werte die gleiche Wahrscheinlichkeit angenommen.
Möchte man beispielsweise
einen dreimaligen Würfelwurf simulieren, kann dies mit R folgendermaßen geschehen:
|
Die im letzten Abschnitt behandelten Funktionen sind in R bereits enthalten. Sie stellen nur einen sehr kleinen Ausschnitt aus den vorhanden Funktionen dar, wie man sich mit einem Blick in die Hilfe leicht klar macht. Dennoch gibt es häufig individuelle Problemstellungen, für die in R keine entsprechenden Funktionen zur Verfügung stehen. Es wird deshalb in diesem Abschnitt gezeigt, wie man in solchen Situationen eigene Funktionen programmieren kann, um das Problem zu lösen.
Im letzten Abschnitt wurden zwei Standardfunktionen zur Berechnung eines Mittelwertes vorgestellt: R stellt Funktionen zur Berechnung eines einfachen und eines gewichteten arithmetischen Mittels zur Verfügung. Angenommen man möchte den geometrischen Mittelwert Pixi1/n eines Vektors bestimmen. Für diesen Fall steht keine Standardfunktion von R zur Verfügung. Im folgenden wird gezeigt, wie man für diese Problemstellung eine einfache Funktion programmieren kann.
Zunächst muß man einen Namen für die Funktion wählen. Es ist sinnvoll, einen Namen zu verwenden, der inhaltlich die Funktion charakterisiert. Im Beispiel wird der Name geo.mean verwendet.
Nach der Wahl eines Namens muß man diesen als Funktionsobjekt in R definieren. Dies erfolgt durch den folgenden Befehl:
|
Nach der Eingabe des Befehls, liegt in R ein Objekt der Art `Funktion' mit dem Namen geo.mean vor. Allerdings besitzt dieses Funktion noch keinerlei Verarbeitungslogik. Diese ist in einem nächsten Schritt festzulegen. Dazu muß zunächst ein Editor mit dem Befehl fix(Funktion) geöffnet werden:
|
Der nach Eingabe des Befehls auf dem Bildschirm erscheinende Editor dient zur Programmierung der Funktion, d.h. in diesem Fenster wird die entsprechende Befehlsfolge eingegeben. Die Berechnung des geometrischen Mittelwerts eines Vektors könnte wie folgt programmiert werden:
|
Anhand dieser einfachen Funktion werden nun die allgemeinen Regeln der Programmierung mit R erläutert: Hinter dem Ausdruck function werden in runden Klammern die Argumente der Funktion beschrieben. Dieser Eingabeteil der Funktion ist im Beispiel ein Vektor, der mit dem Variablennamen x bezeichnet wurde. Wenn also die Funktion später verwendet wird, um beispielsweise das geometrische Mittel des Vektors (2,8)¢ zu berechnen, ist die Funktion wie folgt auszuführen:
|
Nach dem Eingabeteil folgt der Verarbeitungsteil in geschweiften Klammern. Im Beispiel wird zunächst die Länge des Vektors der Variablen n zugewiesen. Anschließend wird das geometrische Mittel der Variablen mittelwert durch die entsprechende Rechenoperation zugewiesen. Danach folgt der Ausgabeteil der Funktion, der ebenfalls innerhalb der geschweiften Klammern zu programmieren ist. Hier erfolgt durch den Befehl return(mittelwert) die Ausgabe des Mittelwerts auf dem Bildschirm.
Nach der vollständigen Erfassung des Funktionstextes ist der Editor zu schließen, indem entweder der Menüpunkt `Datei ® Schließen' gewählt wird oder auf das ` ×' am rechten, oberen Rand des Editors geklickt wird. Bevor der Editor geschlossen wird, fragt R, ob die Änderungen gespeichert werden sollen. Diese Frage ist mit `ja' zu beantworten (es sei denn, die Änderungen sollen ausnahmsweise verworfen werden). Nachdem der Editor geschlossen worden ist, befindet man sich wieder auf der R-Oberfläche, und die Funktion geo.mean kann verwendet werden.
Abschließend hier noch zwei Hinweise, die bei der Programmierung einer Funktion hilfreich sind: Beim Schließen des Editors überprüft R die formale Korrektheit der Funktion (beispielsweise wird überprüft, ob alle Klammern richtig gesetzt worden sind). Wenn dabei ein Fehler auftritt, erscheint eine Fehlermeldung auf der Oberfläche von R, die einen Hinweis auf die Art und den Ort (Angabe durch eine Zeilennummer, die sich auf den Text im Editor bezieht) des Fehlers enthält. Dabei ist zu bemerken, daß R den Funktionstext im Falle eines Fehlers nicht speichert, d.h. bei einem erneuten Aufruf des Editors mit dem Befehl fix(geo.mean) erscheint der Funktionstext ohne die Änderungen der letzten Bearbeitung. Um dies zu umgehen, d.h. die fehlerhafte Funktion inkl. der letzten Änderungen im Editor zu bearbeiten, ist der Befehl edit() auszuführen:
|
Ferner kommt es vor, daß man beim Arbeiten mit der programmierten Funktion und bereits von R gespeicherten logische Fehler bemerkt oder daß der Funktionstext nachträglich erweitert werden muß. Für diesen Fall wird einfach erneut der Befehl fix ausgeführt und anschließend der Funktionstext im erscheinenden Editor bearbeitet:
|
|
Es wird automatisch ein Graphikfenster eröffnet, in dem das Histogramm erscheint. Bei der Eingabe neuer Befehle muß darauf geachtet werden, daß das Kommandofenster aktiv ist - dies wird erreicht, indem letzteres angeklickt wird, so daß das zuletzt verwendete Graphikfenster deaktiviert wird. Wenn das Histogramm individueller gestaltet werden soll, kann dieses durch die Eingabe spezifischer Optionen geschehen. Mehr dazu findet sich in der Hilfefunktion.
|
Auch hier gilt wieder der Verweis auf die Hilfefunktion, wenn der Boxplot individuell gestaltet werden soll.
|
Möchte man, daß die Punkte in der Graphik verbunden werden, so
gibt man als Option
type="l" ein:
|
Oftmals möchte man
mehrere Graphiken zugleich betrachten und vergleichen.
Mit dem Befehl par(mfrow=c(...)) ist es möglich, das Graphikfenster
aufzuteilen, wobei durch den Vektor
c(...) die Anzahl der Zeilen und Spalten des
Fensters bestimmt werden. Möchte man Polynome nullten, ersten, zweiten und dritten Grades
gleichzeitig betrachten, führt folgende Befehlsfolge zum Ziel:
|
Soll die Unterteilung des Fensters für eine andere Graphik aufgehoben werden, das Bild also insgesamt nur noch aus
einer Zeile und einer Spalte bestehen, stellt der Befehl
par(mfrow=c(1,1)) den
ursprünglichen Zustand wieder her.
Weiterhin gibt es noch viele andere Optionen, um Graphiken den individuellen Wünschen anzupassen. Näheres hierzu findet man - wie bereits erwähnt - in den Hilfen zu den Funktionen plot(...) und par(...).
Ein Beispiel für einen Plot direkt aus dem statistischen Bereich ist der Plot der
Dichte einer Standardnormalverteilung. Der erste Schritt ist in diesem Zusammenhang die
Berechnung der Funktionswerte (vgl. Abschnitt 5.2.3) über dem betrachteten Intervall (hier -4 bis 4).
Danach kann die gewünschte Dichte geplottet werden.
|
Einige der hier verwendeten Graphikbefehle und die daraus resultierenden Graphiken sind auf der Titelseite wiederzuerkennen.
a) Für die Windows-Version:
http://www.ci.tuwien.ac.at/R/bin/windows/windows-NT/base
b) Für die Linux-Version:
http://www.ci.tuwien.ac.at/R/bin/linux/
Im folgenden werden die Schritte erläutert, die unternommen werden müssen, um das Basis-Paket und Zusatzpakete in der Windows-Version zu installieren. Für die Installation in Unix sei auf die Internetseite `http://www.ci.tuwien.ac.at/' verwiesen, auf der unter `R& CRAN', `Contributed Extensions', `R Frequently Asked Questions List' unter dem Punkt 2.5.1 Installationshinweise gegeben werden.
Die Funktionen des neuen Paketes sollten nun verfügbar sein.
Alternativ kann man das entsprechende Paket auch mit einem Entpacker in das `library'-Unterverzeichnis von R direkt entpacken und dann die ab 10 beschriebenen Schritte durchführen.
HINWEIS: Für die Unix-Version finden sich die zu installierenden Pakete auf der Seite
http://www.ci.tuwien.ac.at/R/src/contrib/PACKAGES.html.
1Beispielsweise kann mit Hilfe solcher Objektarten ein Objekt `Kunde' erstellt werden, unter dem Eigenschaften wie Name, Vorname, Anschrift... zusammengefaßt werden können.
2 Einige solcher Funktionen (beispielsweise solve(matrix) zur Berechnung der Inversen einer Matrix) sind bereits dargestellt worden, ohne daß explizit auf den Begriff der Funktion eingegangen wurde (siehe Abschnitt4).