Eine Einführung in die Statistik-Software R

Embed Size (px)

Citation preview

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    1/81

    Eine Einfhrung in die

    Statistik-Software R

    Daniel Jones

    16. September 2013

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    2/81

    Dieses Skript basiert auf dem RRZN-Handbuch Statistik mit R- Grundlagen der Da-

    tenanalyse, 1. Auflage, Mai 2011 sowie dem Buch Programmieren mit R von Uwe

    Ligges, 3. Auflage, Juli 2008, sowie zu Teilen auf dem Skript Programmieren und Sta-

    tistik mit R zum gleichnamigen Kurs von Tina Felber aus dem Sommersemester 2012.

    Es stellt nur eine Einfhrung dar und erhebt keinen Anspruch auf Vollstndigkeit. Ins-besondere wird es durch die zugehrigen bungen ergnzt, so dass nicht alle Befehle

    und Erklrungen im Skript auftauchen.

    2

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    3/81

    Inhaltsverzeichnis

    1 Einfhrung 5

    1.1 ber R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.1.1 Was ist R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.1.2 WarumR? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.1.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    1.1.4 Starten vonR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.1.5 Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    1.2 Rals Taschenrechner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.3 Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.4 Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.5 Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.6 Der Arbeitsplatz (Workspace) . . . . . . . . . . . . . . . . . . . . . . . . 12

    1.7 Das Skriptfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.8 Zusatzpakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    2 Datentypen und -strukturen 16

    2.1 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.2 Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.2.1 Folgen und Wiederholungen . . . . . . . . . . . . . . . . . . . . . 18

    2.2.2 Rechnen mit Vektoren . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.2.3 Indizierung von Vektoren . . . . . . . . . . . . . . . . . . . . . . . 20

    2.3 Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.3.1 Rechnen mit Matrizen . . . . . . . . . . . . . . . . . . . . . . . . 222.3.2 Indizierung von Matrizen . . . . . . . . . . . . . . . . . . . . . . . 23

    2.4 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.5 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    2.6 Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    2.7 Verschiedenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    2.7.1 Eigenschaften von Datenstrukturen . . . . . . . . . . . . . . . . . 25

    3

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    4/81

    2.7.2 Faktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    3 Programmieren 27

    3.1 Eigene Funktion definieren . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    3.2 Bedingte Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.3 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.4 Vektorwertiges Programmieren . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.5 Sonstiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    4 Datenmanagement 40

    4.1 Data frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    4.1.1 Indizierung und Teilauswahl . . . . . . . . . . . . . . . . . . . . . 41

    4.1.2 Umbenennen und Lschen von Variablen . . . . . . . . . . . . . . 44

    4.1.3 Hinzufgen neuer Variablen . . . . . . . . . . . . . . . . . . . . . 474.1.4 Aufteilen und Zusammenfhren von Datenstzen . . . . . . . . . 47

    4.1.5 Verschiedenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    4.2 Datenimport und Datenexport . . . . . . . . . . . . . . . . . . . . . . . . 51

    4.2.1 Dateneingabe inR . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    4.2.2 Einlesen von externen Datenstzen . . . . . . . . . . . . . . . . . 53

    4.2.3 Daten exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    5 Grafik 60

    5.1 High-level Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.2 Konfigurierbarkeit von Grafiken . . . . . . . . . . . . . . . . . . . . . . . 62

    5.3 Low-level Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    5.4 Mathematische Beschriftung . . . . . . . . . . . . . . . . . . . . . . . . . 72

    5.5 Grafiken exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    6 Statistik 76

    6.1 Verteilungen und Stichproben . . . . . . . . . . . . . . . . . . . . . . . . 76

    6.2 Einfache lineare Regression . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    6.3 Statistische Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.4 Ntzliche Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    4

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    5/81

    Kapitel 1

    Einfhrung

    Dieses Kapitel beinhaltet eine (zum Teil) sehr knapp gehaltene Einfhrung.

    1.1 ber R1.1.1 Was ist R?

    Frei verfgbare Programmiersprache

    Programmpaket zur statistischen Datenanalyse und Grafikerstellung

    Basiert auf der Programmiersprache S (heute: S-PLUS)

    Homepage von R:http://www.r-project.org/

    Installation von R:

    http://cran.r-project.org/mirrors.html

    1.1.2 Warum R?

    Vorteile von R:

    kostenlos Open-Source-Software

    keine Blackbox, alles kann nachvollzogen werden

    Flexibilitt

    Auf allen gngigen Rechnersystemen (Windows, Macintosh, UNIX) lauffhig

    5

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    6/81

    Aktualitt (Zusatzpakete)

    weit verbreitetschnelle Hilfe

    Nachteile von R:

    Keine vollkommene Sicherheit bei der Verwendung

    Keine graphische Oberflche, Zusatzpakete wie der R-Commander schaffen hierAbhilfe.

    1.1.3 Literatur

    Statistik mit R, RRZN-Handbuch. (Erhltlich im HRZ.)

    Ligges, U. Programmieren mit R. Springer.

    Wollschlger, D. Grundlagen der Datenanalyse mit R. Springer.

    Chambers, J. Software for Data Analysis: Programming with R (Statistics andComputing). Springer.

    1.1.4 Starten von R

    Bei Rechnern im Mathebau ist R schon vorinstalliert. Start: Terminal aufrufen und ReingebenKonsole ffnet sich, siehe Abbildung

    1.1

    Nach dem Prompt (>) werden die Befehle eingegeben.

    Durch Drcken von ENTER werden diese ausgefhrt.

    1.1.5 Hinweise

    R unterscheidet Gro- und Kleinschreibung. Kommentare knnen nach einer # eingegeben werden, Befehle nach einer # werden

    ignoriert.

    Leerzeichen sind erlaubt und machen Programme bersichtlicher.

    ber .Last.valuekann der letzte berechnete Wert angesprochen werden

    6

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    7/81

    Abbildung 1.1: Screenshot der R Console unter Windows

    1.2 R als Taschenrechner

    Die blichen Rechenregeln werden natrlich beachtet.

    Besteht der Imaginrteil einer komplexen Zahl nur ausimuss dieser mit 1ieinge-geben werden.

    Per Voreinstellung zeigt R genau 7 Stellen des Ergebnisses an. Mitoptions(digits = a) werden a-stellige Ergebnisse (a 22) ausgegeben. Freine einmalige Ausgabe eines hherstelligen Ergebnisses bietet sich der Befehl

    print(Berechnung, digits= a)an.

    Viele elementare Funktionen sind in R bereits vorporgrammiert (vgl. Tabelle 1.1).

    Funktionsaufruf geschieht wie folgt: funktionsname(Argument1 = x1,Argument2 = x2,...)

    Fr manche Argumente gibt es Voreinstellungen (default). Diese mssen dannnicht zwingend angegeben werden

    Beispiel: round(5.2) ergibt keine Fehlermeldung, da als Voreinstellung 0 Nach-kommastellen eingestellt sind.

    7

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    8/81

    Voreinstellungen fr Argumente findet man auf der Hilfeseite der Funktionen (siehenchster Abschnitt)

    Symbol, Funktion Beschreibung

    +, Addition, Subtraktion, / Multiplikation, Division

    oder Potenz%/% Ganzzahlige Division

    %% Modulo Division

    max(), min() Maximum, Minimum

    abs() Betrag

    factorial() Fakultt

    choose(n,k) Binomialkoeffizientnk

    sqrt() Quadratwurzel

    sum(), prod() Summe, Produkt

    log(), log10(), log2(), log(x, base=b) Logarithmen

    exp() Exponentialfunktion

    sin(), cos(), tan(), asin(), ... trigonometrische Funktionen

    round(), floor(), ceiling() Runden

    pi

    Inf, -Inf Unendlichkeit (infinity)

    NaN nicht definiert (Not a Number)NA fehlende Werte (Not Available)

    NULL leere Menge

    Tabelle 1.1: Einige elementare Funktionen (und Symbole), die in R bereits vorporgram-

    miert sind.

    1.3 Hilfe

    Die Benutzung der Hilfe gehrt zum Prozess des Lernens einer neuen Programmierspra-

    che dazu. R bietet drei Klassen an Hilfemglichkeiten an, die ntzlich sind, wenn z.B.

    nach einer korrekten Spezifikation der Argumente einer Funktion oder sogar nach dem

    Namen der Funktion selbst gesucht wird.

    8

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    9/81

    1. Hilfe in Form von Literatur:

    Es gibt sehr viele Bcher ber R (meist in englischer Sprache) und Handbcher.

    Einige werden in der Regel mit dem Programm gleich mitinstalliert. Man findet

    diese als pdf-Datei entweder im Men (nur Windows) unter Hilfe Handb-cher (PDF)oder in dem Ordnerverzeichnis, in dem R installiert wurde (meist un-terC:/Programme/R/R-2.12.1). Im Unterverzeichnis... /doc/manualssind

    dann die Handbcher zugnglich. Ansonsten ffnet der Aufruf von help.start()

    die R-Dokumentation (unabhngig vom Betriebssystem), auch dort findet man

    Handbcher und FAQs.

    2. Hilfe, die im Programm integriert ist:

    Mit ?helpffnet sich das integrierte Hilfesystem von R und gibt eine kurze ber-

    sicht ber die unterschiedlichen Arten, Hilfe in Anspruch zu nehmen.

    Befehl Beschreibung

    help(Name) Hilfe zur Funktion Name()

    ?Name Hilfe zur Funktion Name()

    example(Name) Kurzes Beispiel zur Funktion Name()

    help.search(Nam) Durchsucht alle Hilfeseiten nach Nam

    ??Nam Durchsucht alle Hilfeseiten nach Nam

    apropos(Nam) Sucht Funktionen, in denen Nam vorkommt

    Beendet wird die Hile im Terminal unter Linux mit der Taste q. Die Informationen

    werden sehr knapp prsentiert, was am Anfang vielleicht etwas irritierend ist. Mit

    etwas bung im Lesen solcher Hilfeseiten wird man jedoch irgendwann diesen

    przisen Prsentationsstil zu schtzen wissen.

    3. Hilfe, die online verfgbar ist:

    ber die Mailingliste R-help. In Mailinglisten stellen Benutzer Fragen zum

    Umgang mit R, ber die sie weder in der Literatur noch auf Hilfesei-

    ten/Archiven fndig geworden sind. Meist wird die Frage innerhalb krzesterZeit von der R-Gemeinde umfassend beantwortet. Eine bersicht erhlt man auf

    http://www.R-projct.org/mail.html.

    9

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    10/81

    1.4 Zuweisungen

    Ergebnisse sollen beim Programmieren oft als Objekte gespeichert werden, damit

    sie spter weiter verwendet werden knnen. Hierfr wird der Zuweisungspfeil ( a a # Erst nach Eingabe des Objektes . . .

    [1] 3 # . . . wird das Ergebnis ausgegeben.

    > (a a < pi # Falls Leerzeichen im Zuweisungspfeil, . . .[1] FALSE # . . . keine Zuweisung logische Abfrage.

    > A # Gro- und Kleinschreibung wird beachtet.

    Error: object A not found

    1.5 LogikUm spter Funktionen zu schreiben, aber auch zur Analyse von Daten, werden logische

    Ausdrcke bentigt.

    Funktion, Operator, Wert Beschreibung

    ==, != gleich, ungleich

    >, >= grer als, grer gleich

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    11/81

    Die AbkrzungenT und F sind trgerisch, da man diese unter Umstnden als Variablen-

    namen verwendet. Am besten sowohl diese beiden Abkrzungen, als auch die Belegung

    von T und F vermeiden.

    Zur Verdeutlichung der Operatoren einige Beispiele:

    4< 3 FALSE(3 + 1) != 3 TRUE-3

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    12/81

    Fehlende Werte

    Eine weitere logische Konstante ist NA, was fr fehlenden Wert steht (Not Available).

    Auch undefinierte Werte NaN(Nota Number) werden wie NAs behandelt. Weitere Ope-

    rationen:

    is.na()(Test auf fehlende Werte eines Vektors)

    is.nan()(Test auf undefinierte Werte eines Vektors)

    na.omit()(reduziert Vektoren um die fehlenden Werte)

    1.6 Der Arbeitsplatz (Workspace)

    Ergebnisse von Berechnungen ohne Zuweisung werden direkt in der Konsole ausgegeben,wohingegen Zuweisungen von R gespeichert und im sogenannten Workspace gelagert

    werden.

    Befehl Beschreibung

    ls() Anzeigen aller Objekte im Workspace

    rm(Objektname) Lschen eines Objektes aus Workspace

    rm(list=ls()) Lschen aller Objekte aus dem Workspace

    save(file=Pfadname.RData, Speichert die Objekte O1,..., On

    O1,..., On) in eigenen Workspacesave.image(file=Pfadname.RData) Speichert den aktuellen Workspace

    load(Pfadname.RData) Laden eines gespeicherten Workspaces

    q() Beenden von R

    getwd() Zeigt das Arbeitsverzeichnis an

    setwd(Pfadname) ndert das Arbeitsverzeichnis

    history() Anzeige der zuletzt eingegebenen Befehle

    Die zugewiesenen Objekte werden nur fr die aktuelle R-Sitzung gespeichert. NachSchlieen von R und erneutem ffnen stehen diese Objekte dann nicht mehr zur Verf-

    gung, es sei denn, man hat den Workspace vorher gespeichert. Um beim Speichern des

    Workspaces mitsave.image(file=C:/R/Ausgaben/Test.RData)die Eingabe des

    oft langen Pfadnamens zu vermeiden, kann man ihn mit save.image(Test.RData) im

    Arbeitsverzeichnis speichern. Bei Schlieen von R wird man gefragt, ob der Workspace

    12

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    13/81

    gesichert werden soll. Klickt man auf Ja, wird der aktuelle Workspace in der Da-

    tei .RDataim Arbeitsverzeichnis gespeichert. Zustzlich wird die history in der Datei

    .Rhistory im Arbeistverzeichnis gespeichert. Diese beinhaltet eine komplette Liste der

    bei der letzten R-Sitzung eingegebenen Befehle.

    1.7 Das Skriptfenster

    Das Skriptfenster (nur unter Windows) bietet sich besonders bei der Eingabe von hufig

    verwendeten und langen Befehlen an. Man ffnet es im Men ber Datei NeuesSkript. Durch Markieren des Codes und Drcken von Strg+R wird die Funktion dann

    in der Konsole ausgefhrt. Das Speichern der Skriptdatei geschieht ebenfalls ber das

    Men, das Laden mit source(Pfadname.r).

    Alternativ dazu bietet der R Commander eine graphische Oberflche (vgl. Abb. 1.2),

    welche auch unter Linux luft. Paket installieren: install.packages(Rcmdr). Laden

    und erstmaliges ffnen:library(Rcmdr). Ab dann mit Commander().

    1.8 Zusatzpakete

    ber 4500 Zusatzpakete zu diversen Themen sind erhltlich, darunter z.B. Themen wie

    Differential Equations

    13

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    14/81

    Abbildung 1.2: Screenshot des RCommanders

    Finance

    Graphics

    Optimization

    Time Series

    (...)

    Eine bersicht (auch nach Themen geordnet) ber alle Zusatzpakete findet man unter

    http://cran.r-project.org/web/packages/.

    14

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    15/81

    Befehl Beschreibung

    install.packages(nortest) Installiert das Paket nortest

    update.packages(nortest) Fhrt ein Update fr das Paketnortestdurch

    update.packages(ask=FALSE) Alle installierten Pakete werden upgedatet

    remove.packages(nortest) Lscht das Paket nortestsearch() Zeigt alle aktuell geladenen Pakete an

    library() Zeigt installierten Pakete an

    library(nortest) Ldt das Paket nortest in den Workspace

    library(help=nortest) ffnet das Hilfefenster zum Paket nortest

    detach(package:cluster) Entfernt das Paket nortest aus dem Workspace

    15

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    16/81

    Kapitel 2

    Datentypen und -strukturen

    In Rist alles ein Objekt (Vektoren, Matrizen, (...), Funktionen). Je nach Struktur ha-

    ben die Objekte verschiedene Eigenschaften. In diesem Kapitel sollen die wichtigsten

    Datenstrukturenvorgestellt werden. Hierbei handelt es sich um eine Art der Darstellung

    von Daten. Je nach Problemstellung und Art der Daten gibt es verschiedene geeignete

    Datenstrukturen. Wir werden kennenlernen:

    Vektoren, Matrizen, Arrays

    Listen

    Dataframes

    2.1 Datentypen

    Bevor wir auf Datenstrukturen eingehen, ist es wichtig zu wissen, was fr Datentypenes

    gibt. R unterscheidet je nach Werten eines Ob jektes zwischen verschiedenen Datentypen:

    Tabelle 2.1: Die verschiedenen Datentypen.

    Datentyp Beschreibung Beispiel

    NULL die leere Menge NULL

    logical logische Werte FALSE

    numeric ganze und reelle Zahlen 3.14

    complex komplexe Zahlen 2.13+5i

    character Buchstaben, Zeichenfolgen Hallo

    16

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    17/81

    Die leere Menge ist bei den Datentypen ein Sonderfall und wird nur der Vollstndigkeit

    halber in der Tabelle mit aufgefhrt. Fr die restlichen aufgefhrten Datentypen gilt,

    dass jeder Datentyp durch die in der Tabelle unter ihm liegenden Datentypen dargestellt

    werden kann, aber nicht umgekehrt. Man kann z.B. eine reelle Zahl immer als komplexe

    Zahl interpretieren, (bei der der Imaginrteil Null ist,) aber niemals umgekehrt. BeimDatentyp logicalwird TRUE als 1und FALSE als 0 gespeichert:

    >TRUE + FALSE + TRUE

    [1]2

    Wichtige Funktionen im Zusammenhang mit Datentypen:

    Befehl Beschreibung

    mode() Abfragen des Datentyps (Modus)is.Datentyp() Test, ob Objekt bestimmten Datentyp hat

    as.Datentyp() Erzwingen eines Datentyps

    Beispiel:

    mode(3.7) "numeric"is.complex(3.7) FALSEas.complex(3.7)

    3.7+0i

    2.2 Vektoren

    Vektoren sind diegrundlegende Datenstruktur in R, denn fast alle Datentypen werden

    programmintern als Vektoren interpretiert. Mit der Funktion c() (steht fr combine

    bzw. concatenate) kann man am einfachsten Vektoren erzeugen:

    >(xx

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    18/81

    Ein Vektor muss nicht nur aus Zahlen bestehen, beliebige Elemente aus Tabelle 2.1 sind

    mglich. Dabei werden dann alle Elemente des Vektors als der im Vektor vorkommende

    Datentyp interpretiert, der in der Tabelle am weitesten unten steht.

    >(yc(WertA = 5, WertB = 4) # Benennen der Elemente

    WertA WertB

    5 4

    2.2.1 Folgen und Wiederholungen

    Ist es notwendig, Vektoren mit bestimmtem Regelmigkeiten zu erstellen (zum Beispiel

    Indexvektoren), so existieren effektivere Mglichkeiten als c():

    Befehl Beschreibung

    a:b Ganzzahlige Zahlenfolge (a, b )seq(Startwert, Endwert, by=Schrittweite) Zahlenfolge beliebigen gleichen Abstands

    seq(Startwert, Endwert, length=Lnge) Zahlenfolge mit vorgegebener Lnge

    rep(Objekt, Anzahl der Wiederholungen) Wiederholen desselben Objektes

    Beispiel:

    >4:2 # Ganzzahlige Zahlenfolge[1]4 3 2 1 0 -1 -2

    >seq(-1, 1, by = 0.5) # Zahlenfolge mit beliebigem Abstand

    [1]-1.0 -0.5 0.0 0.5 1.0

    >rep(c(1,2), 3) # 3-maliges Wiederholen des Vektors (1, 2)t

    [1]1 2 1 2 1 2

    18

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    19/81

    >rep(c(1,2), each=3)

    [1]1 1 1 2 2 2

    >rep(c(1,2,3), 2:4 )

    [1]1 1 2 2 2 3 3 3 3

    2.2.2 Rechnen mit Vektoren

    Das Rechnen mit Vektoren geschieht komponentenweise. Wenn die Lngen zweier Vekto-

    ren nicht bereinstimmen, die Lnge des greren Vektors aber ein Vielfaches der Lnge

    des kleineren Vektors ist, wird der krzere Vektor so oft wie ntig wiederholt. Stimmen

    die Dimensionen auch nicht in Vielfachen berein, wird so lange aufgefllt, bis die

    Dimension wieder passend ist, es erscheint jedoch eine Warnmeldung.

    > (-2 : 2) 4 # komponentenweise[1] -8 -4 0 4 8

    > c(1,2,3,4) c(0,10) # Wiederholung des krzeren[1]0 20 0 40 # Vektors

    > c(1,2,3) c(0,10) # Wiederholung des krzeren[1] 0 20 0 # Vektors mit Warnmeldung

    Warnmeldung: In a b : Lnge deslngeren Objektes ist kein Vielfaches

    der Lnge des krzeren Objektes

    Mchte man keine komponentenweise Multiplikation durchfhren, sondern eine Matrix-

    multiplikation, so verwendet man den Operator % %:

    > t((1:3)) %% (4:6) # Skalarprodukt[, 1]

    [1, ] 32

    Hier wird ersichtlich, dass R Vektoren standardmig als stehende Vektoren interpre-

    tiert. Dasselbe Ergebnis erhlt man durch Eingabe von (1:3) %% (4:6). Wenn dieDimensionen nmlich nicht passen, aber durch Transponieren des ersten Vektors passend

    gemacht werden knnen, berechnet R das Skalarprodukt. Das Matrixprodukt erhlt man

    durch

    19

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    20/81

    > (1:3) %% t((4:6)) # Matrixprodukt: 2. Vektor transponieren![, 1] [, 2] [, 3]

    [1, ] 4 5 6

    [2, ] 8 10 12

    [3, ] 12 15 18

    Auch die Anwendung der elementaren Funktionen aus Tabelle 1.1 ist mglich und ge-

    schieht wieder komponentenweise. Weitere ntzliche Funktionen im Zusammenhang mit

    Vektoren sind

    Befehl Beschreibung

    crossprod() schneller als %%length() Lnge eines Vektors

    mean() Arithmetisches Mittel aller Eintrge

    sum() Summe aller Eintrge

    cumsum() Kumulierte Summe aller Eintrge

    prod() Produkt aller Eintrge

    cumprod() Kumuliertes Produkt aller Eintrge

    sort() Sortieren

    order() Vektor der zum Sortieren gehrenden Indexzahlen

    rank() Vektor der Rnge

    rev() Umkehren eines Vektorsunique() entfernt mehrfach vorkommende Elemente

    which() Index der Elemente, die TRUE sind

    which.max() Zeigt den Index des maximalen Wertes an

    numeric(n) erzeugt einen Vektor mit nNullen

    2.2.3 Indizierung von VektorenEinzelne, aber auch mehrere Elemente eines Vektors gleichzeitig knnen mit Hilfe der

    zugerigen Indizes angesprochen werden. Dabei ist es mglich, sich die Werte ausgeben

    zu lassen, diese aber auch durch neue Werte zu ersetzen. Dies geschieht durch Nachstellen

    der Indizes in eckigen Klammern. Mchte man also auf das 5. Element des Vektors x

    zugreifen, so geschieht das durch x[5]. Die Indizierung ist aber nicht auf eine einzelne

    ganze Zahl beschrnkt:

    20

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    21/81

    Es knnen mehrere Indizes auf einmal angesprochen werden.

    Ein vorangestelltes Minuszeichen whlt alleauerden entsprechenden Indizes aus.

    Auch logische Indizierung ist mglich, wobei TRUE bedeutet, dass ein Elementausgewhlt wird. Hierbei muss die Lnge des Indexvektors mit dem des angespro-chenen bereinstimmen.

    Benannte Elemente werden ber ihren Namen angesprochen.

    Eine Ersetzung von Elementen erfolgt durch den Zuweisungspfeil.

    Eine leere eckige Klammer []ersetzt alle Elemente eines Vektors, anstatt ihn zuberschreiben.

    Beispiele:

    x

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    22/81

    2.3 Matrizen

    Matrizen kann man mit der Funktionmatrix()erstellen. Die Argumente dieser Funktion

    sind

    Argumentname Beschreibungdata Vektor mit Daten

    nrow Zeilenzahl

    ncol Spaltenzahl

    byrow Falls TRUE, wird Matrix zeilenweise aufgebaut

    Tabelle 2.2: Argumente der Funktion matrix().

    Beispiel:

    >(A (B

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    23/81

    Befehl Beschreibung

    det() Determinante

    diag() Abfragen und Setzen der Hauptdiagonalen

    dim(), nrow(), ncol() Anzahl von Zeilen und Spalten

    dimnames() Zeilen- und Spaltennamencbind(), rbind() Matrizen/Vektoren spalten-/zeilenweise zusammenfgen

    eigen() Eigenwerte und -vektoren

    kappa() Konditionszahl einer Matrix

    qr() QR-Zerlegung

    solve() Berechnen der Inversen bzw. Auflsen des GLSAx= b

    svd() Singulrwertzerlegung

    2.3.2 Indizierung von Matrizen

    Auch hier gilt die Analogie zu den Vektoren. Auf das Element mit Index (i, j)der Matrix

    A greift man mit A[i, j]zu. Mchte man die i-te Zeile betrachten, so geschieht dies

    ber A[i, ]. Vllig analog fr die j-te Spalte A[ ,j]. Beispiel mit der Matrix B von

    oben:

    B[1,2] 2B[3,1]

    5

    B[2, ] 3 4B[ ,1] 4 3 5

    Hierbei wurden jetzt jeweils immer Vektoren zurckgegeben. Mchte man die Daten

    wieder als Matrix auslesen, so muss das Argumentdropmit FALSEbelegt werden, mehr

    dazu in den bungen.

    2.4 ArraysArrayssind eine Verallgemeinerung von Matrizen und knnen beliebig viele Dimensionen

    besitzen. Arrays werden mit dem Befehl array()gebildet:

    23

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    24/81

    >(A (L1

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    25/81

    > L1[[1]] # 1. Element von L1

    [1] 1 2 5 4

    > L1[[2]][2, 1] # Element[2, 1]des 2. Elements von L1

    [1] 2

    > L1[[c(3, 2)]] # Rekursiv: zunchst das 3. Element von L1,[1] Welt # dann davon das 2.

    Wie auch Vektoren knnen die Elemente einer Liste benannt sein. Dies kann bei kom-

    plizierten Objekten von Vorteil sein.

    >L2

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    26/81

    Beispiel:

    > (X class(X)

    [1]matrix"

    > length(X)

    [1]6

    > mode(X)

    [1]numeric"

    > attributes(X) # Eine Matrix hat Dimensionsattribute

    $dim[ 1 ] 2 3

    2.7.2 Faktoren

    Mchte man qualitative (diskrete) Merkmale darstellen, so bedient man sich des Daten-

    typs Faktor. Dieser ist kein atomarer Datentyp im Sinne von Tabelle 2.1. Intern wird bei

    der Erzeugung von Faktoren durch factor()eine Nummer vergeben, nach auen wirddiese aber durch einen Namen reprsentiert.

    > (geschlecht (factor.geschlecht

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    27/81

    Kapitel 3

    Programmieren

    In diesem Kapitel sollen die wesentlichen Elemente bereitgestellt werden, die man zum

    Programmieren von eigenen Programmen bentigt. Dabei wird zunchst erklrt, wie man

    eine eigene Funktion definiert. Anschlieend werden verschiedene Konstrukte wie zum

    Beispiel Schleifen erklrt. Zum Abschluss wird noch auf den Vorteil von vektorwertigem

    Programmieren eingegeangen.

    3.1 Eigene Funktion definieren

    Wir haben R bereits als berdimensionalen Taschenrechner kennengelernt. Hat man

    nun eine ganze Folge solcher Berechnungen auf einmal durchzufhren und mchte dabei

    evtl. sogar Parameter und Startwerte variieren, so bietet es sich an, dafr eine eigene

    Funktion zu schreiben. Eine Funktionsdefinition hat die Form

    Funktionsname standardabweichung

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    28/81

    + sqrt((1 / (n-1)) sum((y-mean(y)) 2))

    + }

    kann die empirische Standardabweichung

    Sn=

    1n 1

    ni=1

    (yi y)2

    fr y= (y1, y2, . . . , yn)berechnet werden und mit

    > standardabweichung(rnorm(1000))

    [1] 0.9816088

    wird die empirische Standardabweichung von 1000 standardnormalverteilten Zufalls-zahlen berechnet. Hierbei ist zu beachten, dass als Ergebnis des Funktionsaufrufes

    immer das zuletzt definierte Objekt zurckgegeben wird. Der Aufruf der Funktion

    standardabweichung2()definiert durch

    > standardabweichung2

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    29/81

    Man kann bei der Definition der Funktion auch Voreinstellungen definieren:

    Funktionsname< function(Argument1 = Vorgabe1, Argument2 = Vorgabe2,...){Befehlsfolge}

    Wrde man die Funktion standardabweichung()ohne Argument aufrufen, so gbe eseine Fehlermeldung. Spezifiziert man aber ein Argument als Voreinstellung, so geschieht

    dies nicht mehr:

    > standardabweichung4

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    30/81

    um Abbruchkriterien fr bestimmte Programmablufe zu definieren

    zur Abfrage der Korrektheit von Funktionsargumenten

    if ... elseDie klassische if ... else-Abfrage wird bei R wie folgt umgesetzt:

    if (Bedingung.1) {Ausdruck.1}else if (Bedingung.2) {Ausdruck.2}

    else {Ausdruck.k}

    Dabei wird zunchst geprft, ob die Bedingung.1 erfllt ist, hierbei muss es sich also um

    einen Wahrheitswert handeln. Gilt Bedingung.1=TRUE, so wird Ausdruck.1 ausgewer-

    tet. Hierbei kann es sich um einen Funktionsaufruf handeln, um eine weitere Abfrage,

    um die Zuweisung eines Objektes etc. Die weiteren Ausdrcke mit vorangestelltem else

    ifwerden in diesem Falle nicht ausgewertet. Gilt Bedingung.1=FALSE, so wird Bedin-

    gung.2 berprft usw. Es wird also der erste Ausdruck ausgewertet, dessen zugehrige

    Bedingung TRUE ist. Ist keiner der Ausdrcke TRUE, so wird der Ausdruck nach dem

    elseausgewertet.

    Beispiel:

    > g h if (g

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    31/81

    Da g 0 gilt, wird die erste Anweisung ignoriert und stattdessen direkt die zweiteAnweisung durchgefhrt. Htte man zum Beispiel g switch(2, a=11,b=12,c=13,d=14)

    [1] 12

    Hierbei wurde als Expr die Zahl 2 verwendet, womit der zweite mgliche Fall eintritt.

    Es ist auch mglich, auf die benannten Elemente zuzugreifen:

    > switch(c, a=11,b=12,c=13,d=14)

    [1] 13

    3.3 Schleifen

    Sollen bestimmte Rechenoperationen oft wiederholt werden, so lsst sich das durch

    Schleifen bewerkstelligen. Ein klassisches Besipiel ist die Monte-Carlo-Simulation, in der

    die gleiche Rechenoperation immer wieder mit verschiedenen (Pseudo-) Zufallszahlen

    durchgefhrt wird. Eine bersicht ber die einzelnen Mglichkeiten fr Schleifen:

    31

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    32/81

    Schleife bzw. Kontrollwort Beschreibung

    repeat{Ausdruck} Wiederholung des Ausdruckswhile (Bedingung){Ausdruck} Wiederholung solange Bedingung erfllt istfor (i in M){Ausdruck} Wiederhole Ausdruck fr jedesiMnext Sprung in den nchsten Interationsschrittbreak Sofortiges Verlassen der Schleife

    Repeat

    Eine einfache Schleifenkonstruktion wird durch repeat{Ausdruck}erzeugt. Dabei wird

    der Ausdruck in der Klammer immer wieder wiederholt, wenn die Schleife nicht durch

    das Kontrollwort break abgebrochen wird. Da ein einfaches Einfgen von break zum

    sofortigen Abbruch der Schleife fhren wrde, bietet sich eine bedingte Abfrage an.

    Beispiel fr eine Endlosschleife:

    > j repeat{j j repeat{

    + j 4) break}

    Die repeat-Schleife wird in der Regel nicht so hufig benutzt, wie die anderen Schlei-

    fenkonstrukte.

    While

    Bei der while-Schleife wird ein Ausdruck immer wieder berprft und im Falle eines

    TRUEder nachstehende Ausdruck ausgewertet. Tritt einmal der Wert FALSEauf, bricht

    die Schleife ab. Die Beispiele von oben lassen sich auch mit whilebewerkstelligen:

    32

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    33/81

    > j while(j > -1){

    + j j while(j < 5){

    + j M for(j in M){

    + print(j2)}

    Bei der Menge M muss es sich aber nicht um einen Vektor ganzer Zahlen handeln, M

    kann ein beliebiges Objekt sein:

    > M for(j in M){

    + print(j[1])}

    [1] 3

    [1] Test

    Ntzlich im Zusammenhang mit der for-Schleife ist das Argument along der Funk-

    tion seq(), die wir bereits kennengelernt haben. Durch die Anweisung for (i in

    33

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    34/81

    seq(along=d))wird jeder Index des Objektes ddurchlaufen, was manchmal sehr ntz-

    lich sein kann. Da bei dieser Anweisung auch der Fall abgegolten ist, dass das Objekt

    ddie Lnge 0 besitzt, ist sie der Anweisung for (i in 1:length(d))vorzuziehen. In

    Fall length(d)=0 wrde bei for (i in seq(along=d)) nichts passieren, wohingegen

    bei for (i in 1:length(d))unerwnschterweise der Vektor(1, 0)durchlaufen werdenwrde.

    3.4 Vektorwertiges Programmieren

    In Kapitel 2 wurde bereits angesprochen, dass Vektorendiegrundlegende Datenstruktur

    inRsind. Deshalb sollte man, wann immer dies mglich ist, auch vektorwertig program-

    mieren und Schleifen vermeiden. Natrlich existieren zu dieser Regel auch Ausnahmen,

    zum Beispiel wenn der Speicherplatz nicht ausreicht. Trotzdem sollte man das vektor-

    wertige Programmieren immer im Hinterkopf haben. Insbesondere sind Funktionen, die

    in Rbereits vorimplementiert sind und vektorwertig arbeiten, immer vorzuziehen.

    Beispiel (schlecht):

    > d for (i in seq( along = d)) {

    + d[i] d

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    35/81

    Tabelle 3.1: Funktionen fr vektorwertiges Programmieren

    Funktion Beschreibung

    colSums(), rowSums() schnelle Spalten-/ Zeilensummen

    colMeans(), rowMeans() schnelle Spalten-/ Zeilenmittel

    apply() spalten- und zeilenweises Anwenden einer

    Funktion auf Matrizen bzw. Arrays

    lapply() elementweises Anwenden einer Funktion auf

    Listen, Datenstze und Vektoren

    sapply() wielapply(), gibt einfaches Objekt zurck

    mapply() multivariates lapply()

    tapply() Tabellen gruppiert nach Faktoren

    apply()

    Die Funktionapply()(engl: anwenden) eignet sich zur Anwendung von Funktionen auf

    Spalten oder Zeilen von Matrizen, ohne das das Programmieren einer Schleife notwendig

    wird. Analog kann sie auch auf Arrays eingesetzt werden. Die allgemeine Form der

    Funktion sieht wie folgt aus:

    apply(X, MARGIN, FUN, ...)

    Als Argumente gehen dabei die Matrix/der Array Xein, die beizubehaltende Dimension

    MARGINsowie die anzuwendende Funktion FUN. Auerdem knnen durch ... noch Ar-

    gumente der Funktion FUNweitergegeben werden. Als einfaches Beispiel betrachten wir

    die Matrix A:

    > (A

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    36/81

    > for(i in 1 : (dim(A)[1]))

    + print(max(A[i, ]))

    [1] 4

    [1] 4[1] 5

    Einfacher geht es durch Anwendung von apply():

    > apply(A,1,max)

    [1] 4 4 5

    Analog die spaltenweisen Maxima:

    > apply(A,2,max)

    [1] 4 5

    Es ist auch mglich, anonyme(unbenannte) Funktionen zu verwenden:

    > apply(A,2, function(x) diff(range(x)) )

    [1] 2 2

    Hierbei wurde die sogenannte Spannweite der beiden Spalten der Matrix berechnet, alsodie Differenz aus dem maximalen und dem minimalen Wert. Die Funktion function(x)

    diff(range(x))heit deshalb anonym, weil sie keinem Objekt zugweisen wurde. Aus

    diesem Grund ist sie nach dem Aufruf von apply()auch nicht mehr verfgbar.

    lapply() und sapply()

    Mit lapply()(l fr list) lassen sich Funktionen elementweise in hoher Geschwindigkeit

    auf Listen, Datenstze (dataframes, siehe nchstes Kapitel) und Vektoren anwenden. Die

    Argumente sind dabei analog zu denen von apply() mit der Ausnahme, dass MARGIN

    nicht bentigt wird. Es wird eine Liste ausgegeben, deren Lnge der des ursprnglichen

    Objektes entspricht.

    Beispiel:

    36

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    37/81

    > L lapply(L, mean)

    $x

    [1] 5.5

    $y

    [1] 3+0i

    $z

    [1] 3.5

    In diesem Falle wird eine Liste zurckgegeben, die Datentypen werden beibehalten. Die

    Funktionsapply()arbeitet vllig analog zu lapply(), versucht aber, das auszugebende

    Objekt zu vereinfachen. Sind die auszugebenden Werte pro Element Skalare, so wirdanstelle einer Liste ein Vektor mit der entsprechenden Lnge ausgegeben:

    > L sapply(L, mean)

    x y z

    5.5+0i 3.0+0i 3.5+0i

    Um einen Vektor auszugeben zu knnen, wurden alle Datentypen in complexumgewan-

    delt.

    mapply()

    Bei mapply() handelt es sich um eine Art multivariate Version von sapply(). Ihre

    Funktionsweise lsst sich am besten an einem Beispiel erklren:

    > mapply(sum, 1:10, 10:1, 5) # 1+10+5, 2+9+5, 3+8+5, ...

    [1] 16 16 16 16 16 16 16 16 16 16

    Hier werden die drei Objekte elementweise summiert, wobei der Skalar wie gewohntentsprechend solange erweitert wird, bis die Lngen bereinstimmen.

    tapply()

    Diese Funktion kann verwendet werden, um Statistiken von Daten nach Faktoren zu-

    sammenzufassen. Argumente sind ein Vektor mit Daten, ein Faktor, nach dem gruppiert

    werden soll (mit gleicher Lnge wie der Datenvektor) sowie die Funktion, die angewendet

    werden soll.

    37

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    38/81

    Als Beispiel wird der irisDatensatz verwendet, der bereits aus der Beispielsitzung aus

    der bung bekannt ist2:

    > attach(iris) # Datensatz anhngen

    > tapply(Sepal.Length, Species, mean)

    setosa versicolor virginica

    5.006 5.396 6.588

    > tapply(Sepal.Width, Species, range)

    $setosa

    [1] 2.3 4.4

    $versicolor

    [1] 2.0 3.4

    $virginica

    [1] 2.2 3.8

    > detach(iris)

    Hier wurde zunchst nach Arten (Species) getrennt die mittlere Kelchblattlnge

    (Sepal.Length) ermittelt. Anschlieend wurde durch die Funktion range() pro Art

    das Minimum und Maximum der Kelchblattbreiten ausgegeben. An der Art der Aus-

    gabe wird die hnlichkeit zur Funktion sapply() deutlich: Im ersten Fall wurden die

    Skalare zu einem Vektor zusammengefasst. Im zweiten war dies nicht mglich, weshalb

    die Ausgabe als Liste erfolgte.

    3.5 Sonstiges

    Es wurde bereits angesprochen, dass Programmschleifen wenn mglich zu vermeiden

    sind. Hier noch ein paar kleine Anmerkungen/Tipps:

    Zu Beginn Objekte, die pro Schleifendurchlauf wachsen, vollstndig initialisieren.Beispiel (schlecht):

    2Der Aufrufattach() zum Anhngen von Datenstzen wird im Folgekapitel behandelt.

    38

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    39/81

    > a for(j in 1:n){

    + a a for(j in 1:n){

    + a[j] a for(j in 1:n){

    + a[j] for(j in 1:n){

    + a[j] a

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    40/81

    Kapitel 4

    Datenmanagement

    In diesem Kapitel werden die Mglichkeiten vorgestellt, auf Datenstzen zu operieren

    und diese zu manipulieren. Zunchst wird die wichtige Datenstruktur data frames ein-

    gefhrt.

    4.1 Data frames

    Die meisten Datenstze in R sind als sogenannte data framesgespeichert. Dabei han-

    delt es sich um eine spezielle Liste mit der Eigenschaft, dass alle Listeneintrge dieselbe

    Lnge haben mssen. Insbesondere knnen also unterschiedliche Listeneintrge unter-

    schiedliche Datentypen enthalten. Durch diese Eigenschaften ensteht eine matrixhnli-

    che Struktur, die sich anbietet, um multidimensionale Datenstze zu reprsentieren: Die

    Spalten der Matrix entsprechen den verschiedenen Variablen, die Zeilen entsprechen denBeobachtungen.

    Als Beispiel kann man sich Daten zum Verlauf einer bestimmten Aktie vorstellen. In den

    Spalten stehen die Variablen Tag Tageshoch, Tagestief Schlusskurs etc. Greift man

    eine bestimmte Zeile heraus, so erhlt man zu einem gegebenen Tag das Tageshoch, das

    Tegestief sowie den Schlusskurs der Aktie.

    Um die verschiedenen Mglichkeiten der Operation auf data frames zu veranschaulichen,

    soll als Beispiel die folgende Einkaufsliste betrachtet werden:

    > Einkaufen

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    41/81

    So sieht das Ergebnis der Liste aus:

    > Einkaufen

    Produkt Abteilung Menge

    1 Apfelsaft Getrnke 4

    2 Quark Milchprod. 2

    3 Joghurt Milchprod. 2

    . . . . # usw.

    Betrachten wir die Struktur des Datensatzes:

    > str(Einkaufen) # Struktur des data frame:

    data.frame: 7 obs. of 3 variables:

    $ Produkt: Factor w/ 7 levels Apfelsaft,Bier,..: 1 4 3 ..

    $ Abteilung: Factor w/ 3 levels Fleischw.,Get..,..: 2 3 3 ..

    $ Menge: num 4 2 2 1 3 1 2

    Hierbei fllt auf, dass die Zeichenketten als Faktoren interpretiert wurden. Im Falle

    der Variable Abteilung macht dies sicherlich Sinn. Mchte man, dass die Funktion

    data.frame()Zeichenketten nicht als Faktoren interpretiert, so muss man dies durch

    das Argument stringsAsFactors spezifizieren.

    4.1.1 Indizierung und Teilauswahl

    Wegen der Nhe zur Datenstruktur Liste funktioniert die Indizierung von Dataframes

    zum einen vllig anaolg zu der von Listen. Zum anderen ist ein dataframe auch eine Art

    Matrix, weshalb auch diese Indizierung mglich ist.

    Mchte man zum Beispiel auf das zweite Element des Eintrages Menge zugreifen, so

    ist dies durch die folgenden Befehle mglich:

    Einkaufen[[3]][2]

    Einkaufen$Menge[2]

    Einkaufen[2,3]

    Einkaufen[2,Menge]

    Oft interessiert man sich bei einem Datensatz fr fr eine Teilmenge von Beobachtun-

    gen, fr die bestimmte Kriterien erfllt sind. Dazu sind logische Operatoren ntig, hier

    nocheinmal eine bersicht:

    41

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    42/81

    R-Code Bedeutung

    == gleich

    !< ungleich

    > grer

    >= grer gleich< kleiner

    Einkaufen[Einkaufen$Abteilung == Getrnke, ]

    Produkt Abteilung Menge

    1 Apfelsaft Getrnke 4

    5 Wasser Getrnke 3

    7 Bier Getrnke 2

    Hierbei wurde die matrixhnliche Struktur des Datensatzes ausgenutzt. Zunchst wur-

    de dabei ein Vektor mit logischen Werten produziert. Dieser hat dieselbe Lnge wie esBeobachtungen gibt und berprft den Listeneintrag Abteilung auf bereinstimmun-

    gen mit Getrnke. Anschlieend werden durch diesen Vektor alle Zeilen der Matrix

    extrahiert, die die gewnschte Eigenschaft besitzen. Diese Vorgehensweise erfllt ihren

    Zweck, fr Dataframes gibt es aber eine bersichtlichere Methode:

    subset()

    Die Funktion subset()lsst sich am besten am Beispiel erklren: Die gleiche Auswahl

    wie oben erhlt man durch

    > subset(Einkaufen, Abteilung == Getrnke)

    Es ist auch mglich, mehrere Filterkriterien zu kombinieren:

    42

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    43/81

    > subset(Einkaufen, Abteilung == Getrnke & Menge > 3)

    Produkt Abteilung Menge

    1 Apfelsaft Getrnke 4

    Ebenso ist die Verwendung eines logischen ODERs mglich:

    > subset(Einkaufen, Abteilung == Getrnke | Abteilung == Milchprod.)

    Produkt Abteilung Menge

    1 Apfelsaft Getrnke 4

    2 Quark Milchprod. 2

    3 Joghurt Milchprod. 2

    5 Wasser Getrnke 3

    7 Bier Getrnke 2

    Eine elegantere Art, zu diesem Ergebnis zu kommen, ist

    > subset(Einkaufen, Abteilung %in% c(Getrnke,Milchprod.)).

    Diese bietet sich an, wenn viele solcher Kriterien zu berprfen sind. Die erste Lsung

    kann dann doch schnell unbersichtlich werden.

    Weiterhin bietet die Funktion subset()die Mglichkeit, Variablen aus dem Datensatz

    auszuschlieen. Im ersten Beispiel wird die Spalte Abteilung des Datensatzes ber-flssig, da die gefilterten Daten alle in der gleichen Abteilung zu finden sind. Um diese

    Spalte zu entfernen, wird das Argument selectverwendet:

    > subset(Einkaufen, Abteilung == Getrnke, select=-2)

    Produkt Menge

    1 Apfelsaft 4

    5 Wasser 3

    7 Bier 2

    Kennt man die betroffene Spaltenzahl nicht, so kann man sich folgendermaen helfen:

    > subset(Einkaufen, Abteilung == Getrnke,

    + select=names(Einkaufen)!=Abteilung)

    43

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    44/81

    4.1.2 Umbenennen und Lschen von Variablen

    Umbenennen von Variablen

    Wie gerade gesehen, greift man auf die Variablennamen eines Datensatzes mit der Funk-

    tion names()zu:

    > names(Einkaufen)

    [1] Produkt Abteilung Menge

    Diese Ausgabe wird vonRals Vektor angesehen und kann dementsprechend manipuliert

    werden. Der Befehl

    > names(Einkaufen)[3] Einkaufen

    Produkt Abteilung Anzahl

    1 Apfelsaft Getrnke 4

    2 Quark Milchprod. 2

    3 Joghurt Milchprod. 2

    . . . . # usw.

    Der allgemeinere Lsungsansatz fr diese Zuweisung ist der folgende:

    > names(Einkaufen)[names(Einkaufen)==Menge] Einkaufen$Abteilung

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    45/81

    > Einkaufen

    Produkt Anzahl

    1 Apfelsaft 4

    2 Quark 2

    3 Joghurt 2. . . . # usw.

    Zur Lschung mehrerer Variablen bietet sich folgendes an:

    > Einkaufen Einkaufen[order(Einkaufen$Menge),]

    Produkt Abteilung Menge

    4 Schinken Fleischw. 16 Wurst Fleischw. 1

    2 Quark Milchprod. 2

    3 Joghurt Milchprod. 2

    7 Bier Getrnke 2

    . . . . # usw.

    45

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    46/81

    Fr ein absteigendes Sortieren, kann man im Falle von quantitativen Merkmalen (statt

    das Zusatzargument decreasing=TRUE zu verwenden) dem Vektor, nach dem sortiert

    werden soll, ein Minuszeichen voranstellen:

    > Einkaufen[order(-Einkaufen$Menge),]

    Produkt Abteilung Menge

    1 Apfelsaft Getrnke 4

    5 Wasser Getrnke 3

    7 Bier Getrnke 2

    3 Joghurt Milchprod. 2

    . . . . # usw.

    Bei der Sortierung nach einer einzelnen Variable wurde an der Reihenfolge sonst nichts

    verndert. Das erkennt man zum Beispiel daran, dass der Indexvektor ganz links inner-

    halb von Beobachtungen mit der gleichen Anzahl immer noch geordnet ist. Es ist auch

    mglich, nach verschiedenen Variablen gleichzeitig zu sortieren. Der Befehl

    > Einkaufen[order(Einkaufen$Menge,Einkaufen$Produkt),]

    Produkt Abteilung Menge

    4 Schinken Fleischw. 1

    6 Wurst Fleischw. 1

    7 Bier Getrnke 2

    3 Joghurt Milchprod. 2

    2 Quark Milchprod. 2

    5 Wasser Getrnke 3

    1 Apfelsaft Getrnke 4

    .

    sortiert den Datensatz zunchst nach der Variablen Menge. Existieren innerhalb dieser

    Sortierung ties, also identische Beobachtungen, so wird hier nach dem zweiten Vektor

    sortiert. Die Reihenfolge der Vektoren, die anorder()bergeben werden, spielt also eine

    Rolle. Im Beispiel ist die Zeile mit Bier am weitesten oben von allen Beobachtungen

    mit Menge=2, da im zweiten Schritt alphabetisch sortiert wurde.

    Hinweis: Daten vom Typ Charakter werden alphabetisch sortiert. Faktoren hingegen

    werden nach ihrem inneren Wert geordnet, unabhngig von der alphabetischen Reihen-

    folge der labels. Im Beispiel wurde die Spalte mit den Produkten beim Erstellen des

    Dataframe als Faktor kodiert. Bei diesem Vorgang wurden die inneren Werte entspre-

    chend der alphabetischen Sortierung vergeben. So kam es zufllig zur alphabetischen

    Sortierung im vorigen Beispiel.

    46

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    47/81

    4.1.3 Hinzufgen neuer Variablen

    Mit dem Befehl

    Preis (Preis (Einkaufen Einkaufen

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    48/81

    $Fleischw.

    Produkt Abteilung Menge Preis

    4 Schinken Fleischw. 1 1.77

    6 Wurst Fleischw. 1 0.09

    $Getrnke

    Produkt Abteilung Menge Preis

    1 Apfelsaft Getrnke 4 0.58

    5 Wasser Getrnke 3 1.88

    7 Bier Getrnke 2 1.06

    $Milchprod.

    Produkt Abteilung Menge Preis

    2 Quark Milchprod. 2 1.58

    3 Joghurt Milchprod. 2 0.82

    Jeder Eintrag in dieser Liste ist wieder ein Dataframe, der alle Beobachtungen des ur-

    sprnglichen Datensatzes enthlt, die zur entsprechenden Ausprgung der Variable Ab-

    teilung gehren. Der Aufruf von unsplit() mit den entsprechenden Faktoren, nach

    denen aufgeteilt wurde, macht die Aufteilung des Datensatzes rckgngig.

    Die Liste kann jetzt nach den bekannten Regeln aus Kapitel 2.5 bearbeitet werden.

    Insbesondere kann man durch

    split(Einkaufen, Einkaufen$Abteilung)$Abteilungsname

    den Teil-Datensatz der Einkaufsliste herausgreifen, fr den die Variable Abteilung den

    Wert Abteilungsname annimmt.

    merge()

    In manchen Fllen liegen einem zwei Datenstze vor, die zu einer oder mehreren iden-tischen Variablen komplementre Zusatzinformationen beinhalten. Diese knnen mit

    merge()zu einem allumfassenden Datensatz zusammengefhrt werden. Wir fhren das

    Beispiel der Einkaufsliste fort. Angenommen, bei gewissen Produkten kennen wird die

    Marke, die immer am gnstigsten ist. Diese Information haben wir in folgendem Dataf-

    rame abgespeichert:

    48

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    49/81

    > Marken merge(Einkaufen,Marken)

    Produkt Abteilung Menge Preis Marke

    1 Apfelsaft Getrnke 4 0.58 Nein!-Apfelsaft

    2 Joghurt Milchprod. 2 0.82 Nein!-Joghurt

    3 Wasser Getrnke 3 1.88 Nein!-Wasser

    4 Wurst Fleischw. 1 0.09 Nein!-Wurst

    Da die Dataframes unterschiedliche Lngen besaen, wurden nur die Zeilen mit berein-

    stimmungen zusammengefasst. Mchte man trotzdem alle Produkte in der Einkaufsliste

    stehen haben, so lsst sich dies durch

    > merge(Einkaufen,Marken, all.x=TRUE)

    Produkt Abteilung Menge Preis Marke

    1 Apfelsaft Getrnke 4 0.58 Nein!-Apfelsaft

    2 Bier Getrnke 2 1.06

    3 Joghurt Milchprod. 2 0.82 Nein!-Joghurt

    4 Quark Milchprod. 2 1.58

    5 Schinken Fleischw. 1 1.77

    6 Wasser Getrnke 3 1.88 Nein!-Wasser

    7 Wurst Fleischw. 1 0.09 Nein!-Wurst

    erreichen. Zum besseren Verstndnis der diversen Argumente empfiehlt es sich, die Hil-

    feseite von merge()aufzurufen, und das angegebene Beispiel nachzuvollziehen.

    4.1.5 Verschiedenes

    Einhngen eines Datensatzes in den Suchpfad

    Mchte man auf bestimmte Variablen eines Datensatzes immer wieder zugreifen, so ist

    es umstndlich, jedes Mal mit dem $ Operator oder einer Indizierung zu arbeiten. Hier

    schafft die Funktion attach() Abhilfe. Der Befehl attach(Einkaufen) ermglicht es,

    die Variable Produktdirekt anzusprechen:

    49

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    50/81

    Anstatt

    > Einkaufen$Produkt

    kann man nun

    > Produkt

    schreiben. Vorsicht ist allerdings geboten bei neuen Zuweisungen. Mchte man das

    Original-Objekt verndern, so muss man weiterhin mit Einkaufen$Produkt arbeiten.

    Die Zuweisung

    > Produkt[1] data(package = .packages(all.available=TRUE))

    ein. Der Befehl ohne Zusatzargumente zeigt alle momentan verfgbaren Datenstze an.

    > data()

    Diese Liste ist evtl. krzer als die erste, da Datenstze nur verfgbar sind, wenn das

    entsprechende Zusatzpaket geladen ist. Das Laden eines Zusatzpaketes wurde in Kapitel

    1.8 beschrieben. Ist das Zusatzpaket geladen, so kann man den Datensatz mitattach()

    in den Suchpfad einhngen und damit arbeiten. Eine bersicht ber die Datenstze eines

    Paketes erhlt man ber die Funktion try(). Zum Beispiel gibt

    > try(data(package=datasets))

    eine Liste aller Datenstze des Paketes datasets.

    50

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    51/81

    Um Informationen ber einen Datensatz zu erhalten, kann man sich der Funktion help()

    bedienen:

    > help(Orange)

    gibt eine bersicht ber den Datensatz Orange aus dem Paket datasets.

    4.2 Datenimport und Datenexport

    Im vorigen Kapitel haben wir gesehen, wie man mit Datenstzen arbeitet. Das For-

    mat des Dataframe spielt auch deshalb in R eine groe Rolle, weil viele Datenstze,

    die zum Beispiel als Excel-Datei abgespeichert sind, bereits diese Grundform besitzen.

    In diesem Kapitel werden die wesentlichen Mglichkeiten dargestellt, solche externen

    Datenstze einzulesen, um sie dann in R weiterbearbeiten zu knnen. Auch auf die ma-nuelle Dateneingabe sowie das Exportieren von Daten aus R in andere Dateiformate

    wird eingegangen.

    4.2.1 Dateneingabe in R

    Dateingabe mit scan()

    Eine sehr einfache Mglichkeit, Daten in R einzulesen, ist durch die Funktion scan()

    gegeben. Die Zuweisung einer Variablen geschieht wie folgt:

    > y

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    52/81

    Die Funktion data.frame()

    Die Funktion data.frame() haben wir bereits kennengelernt. Hat man whrend einer

    RSitzung verschiedene Vektoren erzeugt, die Variablen eines Datensatzes entsprechen,

    so kann man diese mit data.frame()zu einem Datensatz zusammenfgen:

    > x y Daten Daten

    x y

    1 1 22 2 4

    3 3 6

    4 4 8

    5 5 10

    6 6 12

    7 7 14

    8 8 16

    9 9 18

    10 10 20

    Manuelle Dateneingabe und -Bearbeitung

    Die rudimentrste Methode der Dateneingabe bei R ist die manuelle Dateneingabe.

    Dazu wird zunchst durch

    > Daten fix(Daten)

    manuell bearbeiten.

    52

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    53/81

    Durch den Aufruf ffnet sich der Dateneditor (vgl. Abbildung 4.1).

    Abbildung 4.1: Screenshot der manuellen Dateneingabe.

    Jetzt kann man nach einem Klick auf die Variablenfelder in der ersten Zeile deren Namen

    und Typ (numeric oder character) festlegen. Anschlieend kann man die einzelnen Zellen

    durch einen Klick anwhlen und Werte eintragen. Ist der Datensatz fertiggestellt, soschliet man den Editor wieder.

    4.2.2 Einlesen von externen Datenstzen

    Im Allgemeinen wird man Daten selten so einlesen, wie es im vorangegangen Kapitel

    erklrt wurde. In der Praxis kommen die Daten im Regelfall aus anderen Quellen und lie-

    gen in Formaten wie.xls,.txtoder.csvvor. In diesem Kapitel werden die gngigsten

    Mglichkeiten zum Einlesen von externen Datenstzen vorgestellt.

    ASCII-Dateien

    Am einfachsten und sichersten ist der Import von externen Daten, wenn sie im ASCII1-

    Format (z.B. .txtoder .csv) vorliegen.

    1Die Abkrzung ASCII steht fr American Standard Code for Information Interchange.

    53

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    54/81

    Liegt eine Datei in einem solchen Format vor, so kann sie beispielsweise ber die

    Funktionen read.table(), read.csv(), oder read.csv2() eingelesen werden. Eine

    der am hufigsten verwendeten Methoden zum Einlesen von externen Daten in R ist

    read.table(). Die Funktionsweise soll an einem Beispiel erklrt werden.

    Beispiel

    Die Dateikino.txt2 enthlt Daten zu einer fiktiven Umfrage. 20 Personen wurden nach

    Alter, Geschlecht und der Anzahl der Kinobesuche im vergangenen Jahr befragt. Bevor

    man die Daten importiert, empfiehlt es sich, den Originaldatensatz zu betrachten, um

    Informationen darber zu erhalten, welche Trennzeichen verwendet wurden.

    Abbildung 4.2: Der Datensatzkino.txtgeffnet im Editor.

    In Abbildung 4.2 sieht man, dass als Trennzeichen das Semikolon verwendet wurde.Dezimaltrennzeichen sind nicht vorhanden, da es nur ganzzahlige Eintrge gibt.

    2Kann heruntergeladen werden unter

    http://www.rrzn.uni-hannover.de/buch.html?no_cache=1&titel=statistik_r

    54

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    55/81

    Die Datei kann nun durch den Befehl

    > kino kino

    id gender alter kino

    1 A1 mnnlich 26 1

    2 A2 mnnlich 43 5

    3 A3 weiblich 17 9

    ...

    18 A18 weiblich 31 3

    19 A19 mnnlich 40 1

    20 A20 weiblich 38 0

    eingelesen werden und steht im Workspace zur Verfgung. Die Argumente von

    read.table()erklren sich wie folgt:

    file:Der Pfad mit sich anschlieendem Dateinamen. Ist das entsprechende Ver-zeichnis bereits als Arbeitsverzeichnis ausgewhlt, so reicht der Dateiname.

    header:Ein Wahrheitswert. Gilt header=TRUE, so wird die erste Zeile des Daten-satzes fr die Variablennamen verwendet. Voreinstellung ist FALSE.

    sep(kurz fr separator): Legt fest, welches Zeichen als Trennzeichen zwischen denSpalten des Datensatzes interpretiert werden soll. Voreinstellung ist, es wird also

    jeglicher Leerraum als Trennzeichen verwendet - Tabulatoren oder Leerzeichen.

    dec(decimal points): Dieses Zeichen bestimmt das Dezimaltrennzeichen. Vorein-stellung ist..

    Liegt eine Datei im csv3-Format vor, so bietet sich je nach Trennzeichen read.csv()

    oder read.csv2()zum Einlesen an, vergleiche Tabelle 4.2.2.

    Funktion header sep dec

    read.table() FALSE .

    read.csv() TRUE , .

    read.csv2() TRUE ; ,

    3Die Abkrzung steht fr comma seperated values.

    55

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    56/81

    Manuelles Einlesen von Daten

    Es ist auch mglich, Datenstze ber das Ordner-Men einzulesen, wie man es auch sonst

    von Windows kennt. Diese Vorgehensweise spart die Spezifizierung des Argumentesfile.

    Um Daten auf diese Weise einzulesen, verwendet man die Funktion file.choose().

    Nach Eingabe des Befehls

    > kino

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    57/81

    Der Umweg ber die zwischenzeitliche Abspeicherung in einem anderen Format scheint

    umstndlich, wird aber wegen der geringen Fehleranflligkeit in der Literatur meist

    empfohlen.

    Es existieren Zusatzpakete, die das direkte Einlesen von Excel-Dateien ermglichen,zum Beispiel RODBC, xlsReadWrite oder gdata. Auf diese wird hier aber nicht

    eingegangen.

    Mchte man nur einzelne Spalten eines Datensatzes einlesen, so kann man mit der Funk-

    tion scan()arbeiten (vgl. Kapitel 4.2.1).

    4.2.3 Daten exportieren

    Auslesen eines einzelnen Vektors

    Hat man whrend einer Sitzung einen einzelnen Vektor produziert, auf den man auch

    auerhalb von R zugreifen mchte, so kann man diesen mit write() exportieren. Mit

    dem folgenden Befehl erzeugen wir zunchst 100 standardnormalverteilte Zufallszahlen:

    > Datenvektor write(Datenvektor, "C:/R/Datensaetze/Datenvektor.txt", ncolumns=1)

    kann man den Vektor jetzt in einer .txt Datei abspeichern. Das Argument ncolumns

    wurde deshalb spezifiziert, weil die Voreinstellung fnf Spalten vorsieht. Dadurch wrde

    der Vektor auf fnf Spalten aufgeteilt werden.

    Nach dem Abspeichern kann man den Datensatz mit dem Texteditor ffnen (vgl. Abbil-

    dung 4.4).

    Auslesen eines Datensatzes

    Mchte man nicht nur einen einzelnen Vektor abspeichern, sondern einen ganzen

    Datensatz, so verwendet man die Funktionen write.table(), write.csv(), oder

    write.csv2(). Diese sind derart aufgebaut, dass man die gespeicherten Dateien mit

    den Voreinstellungen ihrer Pendants read(vgl. Tabelle 4.2.2) wieder einlesen kann.

    57

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    58/81

    Abbildung 4.4: Der mit write()ausgelesene Datenvektor.

    Als Beispiel betrachten wir den Datensatz Datenaus Kapitel 4.2.1:

    > Daten

    x y

    1 1 2

    2 2 4

    3 3 6

    4 4 8

    5 5 10

    6 6 12

    7 7 14

    8 8 16

    9 9 18

    10 10 20

    Dieser wird mit dem Befehl

    > write.table(Daten, "C:/R/Datensaetze/Datensatz.txt")

    exportiert. Das mit dem Editor geffnete Ergebnis kann man in Abbildung 4.5 betrach-

    ten. Mchte man verhindern, dass dem Datensatz die fortlaufenden Nummern als Extra-

    spalte vorangestellet werden, so muss man das Argument row.namesaufFALSEsetzen.

    Die Anfhrungsstriche bei den Variablennamen unterdrckt man durch das Argument

    quote.

    58

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    59/81

    Abbildung 4.5: Der mit write()ausgelesene Datensatz.

    Mchte man Daten nach dem Auslesen mit Excel ffnen, so bietet sich write.csv2()

    an.

    59

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    60/81

    Kapitel 5

    Grafik

    InRexistiert eine Vielfalt an Mglichkeiten, Grafiken zu erstellen. Diese reichen von der

    explorativen Grafik, mit der man sich einen kurzen berblick ber Daten verschafft bis zu

    Grafiken von hoher Qualitt, die man fr Prsentationen oder Publikationen verwenden

    kann. Durch den Aufruf des Befehls demo(graphics)erhlt man einen kurzen Einblick

    in die verschiedenen Mglichkeiten, Grafiken mit Rzu erstellen.

    Bei der Grafikerstellung mitRunterscheidet man zwischen den traditionellen Grafiken

    und den sogenannten TrellisGrafiken. Letztere basieren auf dem Paket lattice und

    bieten deutlich mehr Mglichkeiten in der Gestaltung, sind dafr aber etwas aufwndi-

    ger zu porgrammieren. Zur statistischen Datenanalyse reichen meist die traditionellen

    Grafiken aus, weshalb im Rahmen dieser Einfhrung auf die Trellis Grafiken verzichtet

    wird.

    5.1 High-level Grafik

    High-levelGrafik-Funktionen ermglichen es, einen vollstndigen Plot der Daten zu er-

    stellen, die als Argumente an die Funktion bergeben wurden. Je nach Art der Daten

    werden Axen, Label und Titel automatisch erstellt. Eine bersicht ber einige der High-

    level Grafik-Funktionen bietet Tabelle 5.1.

    Eine der meistgenutzten Funktionen ist dabei plot(). Wie auch bei einigen anderen derHigh-level Grafikfunktionen handelt es sich bei plot() um eine sogenannte generische

    Funktion. Eine solche Funktion ist derart aufgebaut, dass sie verschiedene Arten von

    Objekten als Eingabe zulsst und die Ausgabe entsprechend anpasst. Die Art der Grafik,

    die von plot() produziert wird, hngt also von den Eigenschaften des Objektes ab,

    was als Argument bergeben wird. Beispielsweise wird bei Eingabe von zwei Vektoren

    gleicher Lnger ein Streudiagramm erzeugt (Scatterplot), bei Eingabe eines lm-Objektes

    60

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    61/81

    Funktionsname Erluterung

    barplot() Balkendiagramm

    boxplot() Boxplot

    contour() Hhenlinienplot (Konturplot)

    curve() Funktion zeichnenhist() Histogramm

    pairs() Scatterplotmatrix

    persp() perspektivische Flchen

    plot() je nach Datentyp: Scatterplot, Boxplot, Balkendiagramm u.a.

    pie() Kreisdiagramm

    pie3D() 3D-Kreisdiagramm nach Laden des Paketsplotrix

    qqnorm() Q-Q-Diagramm fr die Normalverteilung

    qqplot() Q-Q-Diagramm mit zwei Datenstzen

    Tabelle 5.1: Einige High-level Grafikfunktionen.

    (lineares Modell, wird im folgenden Kapitel behandelt) Grafiken zur Modellanalyse (z.B.

    Residualplot) und bei Eingabe eines Zeitreihenobjektes wird eine mit Linien verbundene

    Zeitreihe geplottet.

    Als Beispiel betrachten wir den iris-Datensatz aus der Beispielsitzung aus der ersten

    bung:

    > attach(iris)

    > plot(Petal.Length, Petal.Width, pch = as.numeric(Species))

    > windows()

    > hist(Petal.Length)

    > detach(iris)

    Der Aufruf windows() zwischen den beiden Plots ist notwendig, um beide Grafiken

    parallel anschauen zu knnen. Ruft man nmlich eine High-level Grafik-Funktion auf, so

    wird ein neuer Plot erstellt und - falls vorhanden - der aktuelle dadurch berschrieben.Durch die Eingabe von windows()ffnet sich ein neues Fenster fr den weiteren Plot.

    Die Ergebnisse der beiden Aufrufe befinden sich in Abbildung 5.1. Durch das Zusatzar-

    gumentpch(von point character) wurde dabei jeder Pflanzenart ein anderes Symbol zu-

    gewiesen. Da die verschiedenen Pflanzenarten als Faktoren vorliegen, mussten sie durch

    den Aufrufas.numeric()durch ihren inneren Wert ersetzt werden. Dabei ist zu beach-

    61

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    62/81

    1 2 3 4 5 6 7

    0.5

    1.0

    1.5

    2.0

    2.5

    Petal.Length

    Petal.Width

    Histogram of Petal.Length

    Petal.Length

    Frequency

    1 2 3 4 5 6 7

    0

    10

    20

    30

    Abbildung 5.1: Beispielgrafiken (Streudiagramm, Histogramm) mit den iris-Daten

    ten, dass der Vektor Species die gleiche Lnge besitzt wie Petal.Length bzw.

    Petal.Width.

    5.2 Konfigurierbarkeit von Grafiken

    Die im Beispiel gesehenen Grafiken reichen zu einer ersten Analyse der Daten vollstn-dig aus. Oft ist man aber in der Situation, dass man (zum Beispiel fr Publikationen

    oder eine Prsentation) Grafiken noch erweitern bzw. anpassen mchte. Dies kann zum

    Beispiel geschehen durch Beschriftung (berschriften, Axenbeschriftung, Beschriftung

    einzelner Punkte, etc.), die Verwendung anderer Symbole, Lininenstrken, Farben, die

    Vernderung der Skalierung usw. Eine Vielzahl dieser Anpassungen kann erreicht wer-

    den, in dem man entsprechende Argumente direkt an die Plotfunktion bergibt. Dazu

    gehren vor allem die Parameter, die in den Hilfen ?plot und ?plot.default aufge-

    fhrt werden, aber auch ein Groteil der Argumente, die man in der Hilfe ?par findet.

    In jedem Fall lohnt sich ein Blick in auf die einzelnen Hilfeseiten, um einen berblickber die verschiedenen Mglichkeiten zu bekommen.

    Mit der Funktion par() lassen sich die wichtigsten Grundeinstellungen fr Grafiken

    bearbeiten. Im Gegensatz zur direkten bergabe von Parametern an Plotfunktionen

    ist hierbei zu beachten, dass die Vernderungen durch par()fr alle folgenden Grafiken

    gelten. Dies bietet sich an, wenn man mehrere einheitliche Grafiken hintereinander erstel-

    62

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    63/81

    Argument Erluterung

    axes Achsen sollen (nicht) eingezeichnet werden

    bg Hintergrundfarbe

    cex Gre eines Punktes bzw. Buchstaben

    col Farbenlas Ausrichtung der Achsenbeschriftung

    log Logarithmierte Darstellung

    lty, lwd Linientyp (gestrichelt, ...) und Linienbreite

    main, sub berschrift und Unterschrift

    mar Gre der Rnder fr Achsenbeschriftung etc.

    mfcol, mfrow mehrere Grafiken in einem Bild

    pch Symbol fr einen Punkt

    type Typ (l=Linie, p=Punkt, b=beides, n=nichts)

    usr Ausmae der Achsen auslesen

    xlab, ylab x-/y-Achsenbeschriftung

    xlim, ylim zu plottender Bereich in x-/y- Richtung

    xpd in die Rnder hinein zeichnen

    Tabelle 5.2: Einige hufig benutzte Argumente in Grafikfunktionen und par().

    len mchte. Zu den Parametern, die man standardmig durchpar()verndern wrde,

    gehren zum Beispiel die Aufteilung der Plotregionen, Rnder oder Anzahl der Grafiken

    in einem Plot. Eine Bildberschrift hingegen wrde man dem Plot individuell zuweisen,

    weshalb dies auch kein Argument von par()ist. Eine bersicht von hufig verwendeten

    Argumenten in Grafikfunktionen bzw. par()findet man in Tabelle 5.2.

    Farben knnen auf verschiedene Art und Weise angegeben werden. Zunchst gibt es

    die Standard-Farbpalette, die man durch den Befehlpalette()aufrufen kann: Die Zu-

    > palette()

    [1] black red green3 blue

    [5] cyan magenta yellow gray

    weisung einer Zahl zwischen 1 und 8 spezifiziert also die gewnschte Farbe. Alternativ

    kann man aber auch eine Zeichenfolge in Anfhrungszeichen bergeben, zum Beispiel

    green3. Eine vollstndige1 Liste der bekannten Farbnamen erhlt man durch die Ein-

    1Eine Farbe fehlt in der Aufzhlung: transparent. Diese ist nicht fr alle mglichen Ausgaben verfg-

    bar.

    63

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    64/81

    gabe voncolors(). Es ist auch mglich, RGB-Werte in Hexadezimaldarstellung zu ber-

    geben, mehr Informationen dazu findet man in der Hilfe ?parunter Color Specification.

    Ein besonderer Einsatz von Farbe ist die Verwendung des alpha-Kanals, mit dem

    teilweise transparente Objekte erzeugt werden knnen. Auf dieser Art lassen sich ber-lagerungen verschiedener Objekte sichtbar machen, wie folgendes Beispiel verdeutlichen

    soll:

    > set.seed(321)

    > x

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    65/81

    Nun plotten wir dieselben Daten unter Verwendung des Argumentes alphader Funktion

    rgb():

    plot(x, y, col = rgb(0, 0, 0, alpha=0.1), pch = 16)

    Es ergibt sich das folgende Bild, in dem die Struktur der Teilmenge des Datensatzesdeutlich zu Tage tritt:

    3 2 1 0 1 2 3

    3

    2

    1

    0

    1

    2

    3

    x

    y

    Als nchstes soll an einem Beispiel aufgezeigt werden, wie die verschiedenen Parameter

    verwendet werden knnen, um das Erscheinungsbild eines Plots zu verndern:

    > set.seed(123)

    > x par(las = 1) # alle Achsenbeschriftungen horizontal

    > # Beschriftetes und manuell skaliertes Histogramm:

    > hist(x, main = Dichte 100 N(0,1)-verteilter Zufallszahlen,

    + freq = FALSE, col = grey, ylab = Dichte,+ xlim = c(-5, 5), ylim = c(0, 0.6))

    > # Hinzufgen der theor. Dichtefunktion - dick und gestrichelt:

    > curve(dnorm, from = -5, to = 5, add = TRUE, lwd = 3, lty = 2)

    Beim Beispiel wird zunchst eine Stichprobe standardnormalverteilter Zufallsvariablen

    gezogen. Anschlieend wird mit dem Argument las fr kommende Grafiken die Achsen-

    65

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    66/81

    Dichte 100 N(0,1)verteilter Zufallszahlen

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    Abbildung 5.2: Beispielgrafik - Histogramm und Dichtefunktion.

    beschriftung horizontal ausgerichtet (der Standardwert ist derart, dass die Beschriftung

    parallel zur Achse verluft). Danach wird ein Histogramm der Zufallszahlen erzeugtund mit einer berschrift und y-Achsenbeschriftung versehen. Auerdem werden die

    Achsengrenzen explizit angegeben, die y-Achse beispielsweise soll sich von 0 bis 0.6 er-

    strecken. Durch das Argument freq=FALSE wird dafr gesorgt, dass im Histogramm

    keine absoluten Hufigkeiten angezeigt werden. Die Belegung von colmit greyfllt

    die Flchen mit grauer Farbe. Abschlieend wird mit curve() die Dichte der Stan-

    dardnormalverteilung (Funktion dnorm()) der Grafik hinzugefgt. Dabei wird durch

    add=TRUE verhindert, dass dieser Plot in einem eigenstndigen Fenster erscheint. Die

    Begrenzungen der x-Achse werden denen des Histogramms angepasst und die Dichte

    wird mit einer dicken (lwd = 3), gestrichelten (lty = 2) Linie gezeichnet. Das Ergebnis

    ist in Abbildung 5.2 zu sehen.

    Oft ist man in der Situation, mehrere Grafiken nebeneinander oder untereinander dar-

    stellen zu wollen. Dies erreicht man durch Belegung des Argumentes mfrowbzw. mfcol.

    Bei beiden wird die Anzahl der Zeilen und Spalten angegeben, in die der Grafikbereich

    aufgeteilt werden soll. Dann werden die Teilbereiche nach und nach mit Grafiken gefllt,

    66

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    67/81

    bei mfrowzeilenweise, beimfcolspaltenweise. Folgendes Beispiel soll die Vorgehensweise

    verdeutlichen:

    > par(las = 1, mfrow = c(2,2))

    > set.seed(123)

    > for (j in 1:4){

    > x hist(x, main = Dichte 100 \n N(0,1)-verteilter Zufallszahlen,

    + freq = FALSE, col = grey, ylab = Dichte,

    + xlim = c(-5, 5), ylim = c(0, 0.6))

    > curve(dnorm, from = -5, to = 5, add = TRUE, lwd = 3, lty = 2)}

    Man beachte, dass der Code vom vorhergehenden Beispiel kaum verndert wurde. Es

    wurde lediglich das sogenannte Device (in diesem Fall das Fenster, in dem die Grafik ge-ffnet wird) zunchst in zwei Spalten und Zeilen aufgeteilt. Anschlieend wurde in einer

    Schleife vier mal der Code von vorher reproduziert. Das Ergebnis kann man in Abbildung

    5.3 sehen. Die Teilgrafiken unterscheiden sich voneinander, da der Zufallszahlengenerator

    nicht vor jedem Schleifendurchlauf initiiert wurde, sondern vor der Schleife.

    Dichte 100

    N(0,1)verteilter Zufallszahlen

    x

    Dich

    te

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    Dichte 100

    N(0,1)verteilter Zufallszahlen

    x

    Dich

    te

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    Dichte 100

    N(0,1)verteilter Zufallszahlen

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    Dichte 100

    N(0,1)verteilter Zufallszahlen

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    Abbildung 5.3: Vier Plots in einer Grafik.

    67

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    68/81

    Plotbegrenzung

    Grafikbegrenzung

    uere Begrenzung

    Plotbereich

    Grafikbereich

    Devicebereich

    Abbildung 5.4: Aufteilung des Devices.

    Wenn man mehrere Plots in einer Grafik darstellt, kann es sinnvoll sein, allen Plots eine

    gemeinsame berschrift zuzuordnen. Dazu kann es notwendig sein, die Aufteilung des

    Fensters, in dem die Grafik auftaucht, anzupassen. Standardmig ist das Device in ver-

    schiedene Bereiche aufgeteilt: das Device selbst, den Grafikbereich und den Plotbereich,

    wie Abbildung 5.4 verdeutlicht.

    Dabei ist die Voreinstellung, dass der uere Bereich wegfllt, so dass der Grafik mg-

    lichst viel Platz eingerumt wird. Fr Abbildung 5.4 wurden mittels par() folgende

    Voreinstellungen festgelegt:

    > par(mar=c(5, 4, 3, 2)) # Rnder zw Plot- und Grafikbegrenzung

    > par(oma=c(3, 3, 3, 3)) # Rnder zw. Grafik- und uerer Begrenzung

    Das Argumentmarsteht fr margin (Rand) undomasteht fr outer margin. Beide gebendie Anzahl an Zeilen an, die an den jeweilegen Rndern gelassen werden soll. Dabei

    steht der erste Wert fr den unteren Rand, dann wird im Uhrzeigersinn weitergezhlt.

    Im Beispiel wurde also der gesamte uere Rand auf drei Zeilen festgelegt, der Rand

    zwischen unterer Plotbegrenzung und unterer Grafikbegrenzung auf fnf Zeilen, der

    Rand zwischen linker Plotbegrenzung und linker Grafikbegrenzung auf vier Zeilen usw.

    68

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    69/81

    Die berschrift fr Abbbildung 5.3 lsst sich jetzt folgendermaen umsetzen: Man er-

    weitert das Fenster durch den Aufruf von

    > par(oma=c(0, 0, 4, 0))

    um einen oberen Rand und lsst dann den identischen Code laufen. Abschlieend kann

    man die berschrift via

    > mtext(4 Plots der Dichte 100 \n N(0,1)-verteilter Zufallszahlen,

    + outer=TRUE, cex=1.5)

    festlegen. Hierbei wurde die Schriftgre auf das 1.5-fache vergrert. Das Ergebnis ist

    in Abbildung 5.5 zu sehen.

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    4 Plots der Dichte 100

    N(0,1)verteilter Zufallszahlen

    Abbildung 5.5: berschrift bei mehreren Plots im selben Device.

    69

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    70/81

    Bei allen Zuweisungen mit par()ist zu beachten, dass diese die Einstellungen dauerhaft

    verndern. Deshalb ist es sinnvoll, die Defaulteinstellungen vor einem Plot abzuspei-

    chern. Dies kann durch

    > old_par par(old_par)

    zurcksetzen.

    5.3 Low-level Grafik

    Low-levelGrafik-Funktionen stellen eine Erweiterung von High-level Grafik-Funktionen

    dar. Sie dienen unter anderem dazu, Grafiken zu initialisieren (z.B. durch Bereitstellung

    eines Koordinatensystems). Weiterhin knnen mit ihrer Hilfe zustzliche Elemente wie

    Punkte, Geraden oder Beschriftungen in bestehende Grafiken eingezeichnet werden.

    Funktionsname Erluterung

    abline() intelligente Linie

    arrows() Pfeile

    axis() Achsengrid() Gitternetz

    legend() Legende

    lines() Linien

    mtext() Text in den Rndern der Grafik

    plot.new() Initiierung einer neuen Grafik

    plot.window() Koordinatensystem initialisieren

    points() Punkte

    polygon() Polygone

    qqline() fgt eine Gerade in ein Q-Q-Diagrammsegments() vektorwertige Linien

    text() Text

    title() Grafiktitel

    Tabelle 5.3: Auswahl an Low-levelGrafik-Funktionen.

    70

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    71/81

    Eine Auswahl anLow-levelGrafik-Funktionen ist in Tabelle 5.3 aufgefhrt. Die meisten

    dieser Funktionen sind intuitiv in ihrer Anwendung, weshalb eine kurze Konsultation

    der zugehrigen Hilfeseite ausreichend ist. An dieser Stelle wird deshalb auf weitere Er-

    klrungen verzichtet. Es soll lediglich das Beispiel aus Abschnitt 5.2 aufgegriffen werden.

    Der Grafik soll eine Legende hinzugefgt werden, was durch Erweiterung des Codes umdie beiden Zeilen

    > legend(-4.5, 0.55, legend = c(emp. Dichte, theor. Dichte),

    + col = c(grey, black), lwd = 5)

    erreicht werden kann. Durch diesen Befehl wird eine Legende am Koordinatenpunkt

    [-4.5, 0.55] (linker oberer Rand der Legende) eingezeichnet. Durch Spezifizierung des

    Argumenteslwdwird dafr gesorgt, dass Linien neben den beiden Bezeichnungenemp.

    Dichtebzw.theor. Dichteauftauchen. Weiterhin wurden den beiden Linien verschie-dene Farben entsprechend den Farben im Plot zugeordnet. Das Ergebnis kann man in

    Abbildung 5.6 betrachten.

    Dichte 100 N(0,1)verteilter Zufallszahlen

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    emp. Dichte

    theor. Dichte

    Abbildung 5.6: Erweiterung der Histogrammgrafik um eine Legende.

    71

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    72/81

    5.4 Mathematische Beschriftung

    Bei der Erstellung von Grafiken mit Rbesteht die Mglichkeit, mathematische Notation

    als Beschriftung miteinzubinden. Gerade fr Publikationen im Bereich der Mathema-

    tik ist dies von Vorteil. Dabei knnen komplexe Formeln, mathematische Symbole undgriechische Buchstaben verwendet werden. Bei den meisten Grafikfunktionen (wie z.B.

    plot()) ist dies immer dort mglich, wo es um Beschriftung geht, also zum Beispiel bei

    den Argumenten main, sub, xlabund ylab.

    Mathematische Notation wird in Form von nicht ausgewerteten RAusdrcken angege-

    ben, dabei werden Formeln nahezu inRSyntax spezifiziert. In der einfachsten Form lsst

    sich das durch die Funktion expression() umsetzen. Dabei sind einige Schlsselwr-

    ter an LATEX angelehnt, beispielsweise frac(Zhler, Nenner). Wie man es von LATEX

    kennt, werden griechische Buchstaben in Lateinischer Schrift ausgeschrieben, wobei esauf Gro- und Kleinschreibung ankommt: aus sigmawird , aus Sigma. Die Formel

    yi=0+1xi+e

    kann als Unterschrift beispielsweise durch

    > plot(1:10, sub = expression(y[i] == beta[0] + beta[1] * x[i] + e))

    in eine Grafik eingefgt werden.

    Hufig kommt es vor, dass Variablen in Formeln durch ihre Werte ersetzt werden sollen.Ist der Wert bekannt, so kann dies mit expressions()umgesetzt werden. Wird er aber

    erst innerhalb einer Funktion berechnet und an die Grafik bergeben, so funktioniert

    diese Vorgehensweise nicht mehr. Hier hilft die Verwendung der Funktionsubstitute().

    Im folgenden Beispiel sei das Objekt wert zu einem frheren Zeitpunkt durch Berech-

    nungen erzeugt worden:

    > wert substitute(sigma == s, list(s = wert))

    sigma == 0.5

    Der Funktionsubstitute()wurde hier neben dem Ausdruck noch eine Liste mit Werten

    bergeben. Da in dieser Liste ein Objekt mit dem Namen s existiert, wird dieses im

    Ausdruck entsprechend durch seinen Wert ersetzt. Zurckgegeben wird ein sogenanntes

    Sprachobjekt2, welches von Grafikfunktionen entsprechend interpretiert werden kann.

    2Mehr Informationen zu Sprachobjekten finden sich im Buch von Ligges (2007)

    72

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    73/81

    Abschlieend soll das Beispiel des Histogramms noch um mathematische Beschriftung

    erweitert werden. In der linken Hlfte der Grafik soll nun zustzlich die Formel fr die

    Dichtefunktion der Normalverteilung

    f(x) = 1

    2 e

    (x)2

    22

    erscheinen. Weiterhin sollen auf der rechten Hlfte der Grafik die Parameter mit ihren

    Werten angegeben werden. Dazu wird die Funktion text()verwendet und der Code um

    die folgenden zwei Zeilen erweitert:

    > text(-5, 0.3, adj = 0, cex = 1.3,

    + expression(f(x) == frac(1, sigma * sqrt(2*pi))

    + e ^{frac(-(x - mu) ^2, 2 * sigma ^2)}))

    >text(5, 0.3, adj = 1, cex = 1.3,

    + expression(mit {mu == 0} , {sigma == 1}))Dabei erzeugt adj = 0 rechts (bzw. adj = 1 links) an den angegebenen Koordinaten-

    punkten ausgerichteten Text. Das doppelte Tildezeichen erhht den Abstand zwischen

    Bruch und Exponentialfunktion. Das Ergebnis ist in Abbildung 5.7 zu sehen.

    Dichte 100 N(0,1)verteilter Zufallszahlen

    x

    Dichte

    4 2 0 2 4

    0.0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    emp. Dichtetheor. Dichte

    f(x) =1

    2 e

    (x)2

    22 mit = 0, = 1

    Abbildung 5.7: Mathematische Beschriftung in der Histogrammgrafik.

    73

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    74/81

    Eine detaillierte Behandlung des Themas soll hier nicht weiter vorgenommen werden.

    Dazu sei auf das die Hilfeseiten

    > help(plotmath)

    > example(plotmath)

    > demo(plotmath)

    verwiesen. Auch im Buch von Ligges (2007) und den Literaturangaben dort finden sich

    weitere Details.

    5.5 Grafiken exportieren

    Wann imer eine Grafik produziert wird, muss ein Device (engl. fr Gert) bestimmt

    werden, auf dem die Ausgabe erfolgt. Sofern man interaktiv mit R arbeitet, ist diesstandardmig das Device fr Bildschirmgrafik (X11()). Es ist aber auch mglich, Gra-

    fiken zu exportieren, in dem man andere Devices verwendet, eine bersicht ber einige

    Devices liefert Tabelle 5.5.

    Beispielsweise wurde der linke Teil von Abbildung 5.1 durch den Befehl

    > pdf(scat.pdf)

    > attach(iris)

    > plot(Petal.Length, Petal.Width, pch = as.numeric(Species))> detach(iris)

    > dev.off()

    erzeugt. Dabei wurde zunchst das Device zum Erzeugen von Grafiken im pdf-Format

    geffnet. Dabei muss in Klammern der Dateiname inklusive Pfad angegeben werden,

    unter dem die Grafik gespeichert werden soll. In diesem Fall wurde kein Pfad spezifiziert,

    so dass die Datei im Arbeitsverzeichnis abgespeichert wurde. Abschlieend wurde das

    Device mit dem Befehl dev.off()geschlossen.

    Die Besonderheit bei den beiden Devices pdf() und postscript() ist, dass dort auch

    mehrere Grafiken in einem Devices abgespeichert werden knnen. Fr jede neue Grafik

    wird dann eine neue Seite erstellt.

    74

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    75/81

    Funktion Dateiformat Dateiendung

    bmp() Bitmap-Datei .bmp

    jpeg() JPEG-Datei .jpeg oder .jpg

    pdf() PDF-Datei .pdf

    pictex() PicTEX fr LATEX-Dokumente .texpng() PNG-Datei .png

    postscript() Postscript-Datei .ps

    Natrlich kann man Grafiken auch aus der Bildschirmgrafik exportieren. Bei einem

    Rechtsklick auf die Grafik erscheinen dann die Mglichkeiten, diese abzuspeichern. Die-

    se Vorgehensweise ist aber nicht zu empfehlen, da die Ausgabedatei abhngig von der

    Gestalt des Grafikfensters in Rist. Weiterhin ist die Auswahl an Speicherformaten be-

    schrnkt.

    75

  • 8/14/2019 Eine Einfhrung in die Statistik-Software R

    76/81

    Kapitel 6

    Statistik

    BeiR handelt es sich um eine Programmiersprache mit starkem Bezug zur statistischen

    Datenanalyse. Nicht umsonst ist die Homepage von R mit der berschrift The R Project

    for Statistical Computing versehen. Deshalb darf in einem Skript zu Rein Kapitel zu

    diesem Thema nicht fehlen. Allerdings handelt es sich bei dem Kurs zu diesem Skript um

    einen Einfhrungskurs, bei dem auer der Einfhrung in die Stochastik keine weiteren

    Vorlesungen vorausgesetzt werden. Deshalb wird es in diesem Kapitel nur eine bersicht

    ber die wichtigsten Befehle geben. Dabei wird vorausgesetzt, dass das Prinzip von

    Zufallsvariablen, Verteilungen etc. bekannt ist.

    6.1 Verteilungen und Stichproben

    Verteilungen

    Rstellt fr viele Wahrscheinlichkeitsverteilungen Funktionen bereit, mit denen sich Wer-

    te fr Verteilungsfunktion, Quantile und Zufallszahlen ermitteln lassen. E