Einführung in R
Transcrição
Einführung in R
Einführung in R Matthias Templ, Leonhard Seyfang Oktober 2005 Ausblick 1. Was ist R? Warum ausgerechnet R? (eine kurze Werbung) 2. Installation von R 3. Informationsmaterial zu R 4. GUI´s für R; R-Commander 5. Einige wichtige Funktionen 6. Datentypen in R 7. Beispiele: Vektor, Matrix, Data Frame, Liste, Sequenz (Live im R-Commander) Ausblick 8. Funktionen schreiben, Daten einlesen, Skript erstellen 9. Graphiken 10. Beispiele (Live mit Hilfe des R-Commanders) Allgemeines R ist ein Software-Paket für Statistical Computing. Es ist die Open Source Implementierung der Sprache S, dass hauptsächlich von John Chambers in den Bell Laboratories entwickelt worden ist. Eine weitere, jedoch kommerzielle Implementierung von S ist S-PLUS. • R ist ursprünglich (1994) von Ross Ihaka und Robert Gentleman an der Universität von Auckland entwickelt worden. • Erste nicht-Betaversion R 1.0.0 im Jahr 2000. Jedes Jahr mehrere neue Versionen. • derzeit Wartung und Weiterentwicklung durch eine weltweite Gruppe von Freiwilligen aus Forschung und Wirtschaft • primäre Verbreitung über Webseiten (www.r-project.org) und Archive (cran.rproject.org). • R kann über Packages erweitert werden. Einige Packages sind in der R Distribution enthalten, weitere befinden sich auf CRAN. Vergleiche, Vorteile von R • Open Source, Freeware, objektorientierte Sprache • Veni, vidi, vici (!?) – kommentierter Source-Code in tar.gz files auf CRAN Lerne vom Code der Gurus • Vergleich zu anderer statistischer Software • Rechenzeit • Hilfesystem • Graphiken Vergleiche, Vorteile von R • Methodenvielfalt • LaTeX Einbindung • Packaging Wie komme ich zu R • Die allgemeine Informationswebseite ist http://www.r-project.org/ (virtueller Name für http://www.ci.tuwien.ac.at/R-project/). • CRAN - the Comprehensive R Archive Network – Die Hauptseite ist http://cran.r-project.org/ (virtueller Name für http://www.ci.tuwien.ac.at/R/). – Mirror Seiten sind verfügbar in vielen Länder, z.B. http://cran.us.r-project.org/. • Auf den CRAN Seiten gibt es Binary Distributionen für Windows, Mac und für mehrere Linux Distributionen. Wie komme ich zu R Auf Windows: • Lade den Installer R-2.2.0-win32.exe von http://cran.r-project.org/bin/windows/base/ herunter und führe die Datei aus. - Alternative (nur für Windows XP?): Lade den Installer RDACCSDSetup2020V1.0beta.exe von http://sunsite.univie.ac.at/rcom/download/ herunter und führe die Datei aus. Dies ist ein Installationspaket mit R-2.2.0, R-Commander, einigen ausgewählten Packages, RExcel und dem Editor Tinn-R mit Syntax-highlighting. Setzen des Arbeitsverzeichnisses: • Setzen des persönlichen Arbeitsverzeichnis: – rechte Maustaste bei Start-Icon: Eigenschaften → Ausführen in – Setzen im GUI über Menü: File → Change dir ... – In R durch setzen über die Command Line mit setwd() Kontrolle mit getwd() Informationsquellen über R • Die Webseite http://www.r-project.org/ und CRAN • Die frequently asked questions (FAQ) Listen auf CRAN. • Manuals: z.B. – An Introduction to R – R Data Import/Export sind Teil der R Installation bzw. befinden sich auf CRAN. Unter Windows können diese im Menü unter Help → Manuals gefunden werden. Siehe auch andere R-Einführungen und R Referenz card unter http://cran.r-project.org/other-docs.html. Informationsquellen über R • Books: z.B. – Dalgaard: Introductionary Statistics with R – Venables and Ripley: Modern Applied Statistics with S-PLUS, 1999, 3rd edition – Ligges: R Programming, 2005, in Deutsch Der R Commander • Package Rcmdr auf CRAN • GUI für R • Für Schulungszwecke entwickelt • Eingeschränkte Funktionalität, aber ausreichend für die EDV-Übung. • Einführung Rcmdr.pdf auf http://socserv.mcmoster.ca/jfox/Getting-Started-with-the- Wichtige R Funktionen Wenn der Funtionsname und anschließend [RET] getippt wird, wird die Funktion angezeigt. Um eine Funktion aufzurufen, muss der Funktionsname zusammen mit der Argumentenliste innerhalb von () eingetippt werden, auch wenn diese leer ist. D.h. q()[RET] anstatt q[RET] ist notwendig, um R zu verlassen. q() Beende die Session. Es wird gefragt, ob der Workspace (im File .Rdata) gespeichert werden soll. help() Bekomme Hilfeseite für eine Funktion oder ein Objekt help.start() Verwende einen Webbrowser für das Lesen der Hilfe ls() Liste die Objekte im Workspace auf rm() Lösche Objekte im Workspace save.image() Speichern des Workspace-Inhalts in einem File save() Speichern eines Objekts in einem File load() Laden von mit R gespeicherten Daten example() Exekutiere das Beispiel auf der Hilfeseite einer Funktion summary() Fasse die Information über ein Objekt kurz zusammen Wichtige R Funktionen library() Laden von zusätzlichen (schon installierten) Packages Mehr auf http://cran.r-project.org/doc/contrib/Short-refcard.pdf und im Dokument “R-Befehle zum Skriptum Statistik und Wahrscheinlichkeitsrechnung” (R. Dutter) von Leonhard Seyfang. R Basics Hilfe: help(topic) ?topic help.search("topic") help.start() help(package="package-name") Operatoren: +, -, *, /, ^ , %*% see help("+") Namen: case sensitive, Buchstabe zu Beginn, Kommentare: alles nach # Zuweisung: x = 5 x <- 5 5 -> x Vergleiche: ==, !=, >, >=, <, <= see help("==") R Basics Elementare Datentypen: Logical : TRUE, FALSE, T, F Integer : 1, 100, 326, ... Double : 1.0, 3.1415297, 2.718282, NaN, Inf, -Inf Complex : 1+0i, 1i, 3+5i Character : "Hello", "How are you?" Missing Values : NA R Basics Zusammengesetzte Datentypen: vector : von Elementen desselben elementaren Typs array : Vektor mit Dimensionsattribut (beliebige Anzahl an Dimensionen erlaubt). matrix : 2-dimensionaler Array. Spezialfall, um die üblichen Matrixoperationen wie z.B. Matrixmultiplikation durchführen zu können. factor : Spezieller Vektor für das Kodieren von Klassen. list : Liste von Elementen von verschiedenen Datentypen (sowohl elementar als auch zusammengesetzt) data.frame : Mischung“ aus Matrix und Liste ” Data Frames • Können betrachtet werden als – Matrix, wo jede Spalte einen unterschiedlichen Datentyp besitzt – Liste, wo jedes Element ein Vektor derselben Länge ist • Zugriff auf die Elemente analog wie bei Matrizen ODER Listen • Beobachtungen mit Missing Values können mithilfe von na.omit() entfernt werden, wodurch die gesamte Zeile gelöscht wird Methoden zur Konstruktion • Die Funktionen zur Konstruktion haben dieselben Namen wie die entsprechenden Datentypen. Umwandlung kann mithilfe von as.type erfolgen, Checken des Typs mithilfe von is.type. > x <- matrix(1, nrow = 5, ncol = 2) > is.matrix(x) [1] TRUE > as.vector(x) [1] 1 1 1 1 1 1 1 1 1 1 > x <- list(a = "Hello", b = 1:10, pi = 3.1415927) • Konstruktion einfacher Vektoren: > c(1, 2, 7) [1] 1 2 7 > c("Hello", "World") [1] "Hello" "World" Zugreifen auf Elemente: Vektoren Vektoren: Elemente können über Nummern oder Namen angesprochen werden > x <- c(5, 3, 7) > names(x) <- c("apple", "banana", "orange") > x["apple"] apple 5 > x[1:2] apple banana 5 3 > length(x) [1] 3 > x - 1 apple banana orange 4 2 6 > 2 * x apple banana orange 10 6 14 Zugreifen auf Elemente: Matrizen Matrizen: analog wie bei Vektoren, wobei die Dimensionen durch Kommas unterteilt werden > x <- matrix(1:8, ncol = 2) > colnames(x) <- c("First", "Second") > x[1:2, ] First Second [1,] 1 5 [2,] 2 6 > x[, "Second"] [1] 5 6 7 8 > x[-3, ] First Second [1,] 1 5 [2,] 2 6 [3,] 4 8 > dim(x) [1] 4 2 Zugreifen auf Elemente: Listen Listen: Dollar Zeichen $ oder Nummer in eckigen Klammern > x <- list(a = "Hello", b = 1:10, pi = 3.1415927) > x$a [1] "Hello" > x[["a"]] [1] "Hello" > x[[1]] [1] "Hello" > x[1] $a [1] "Hello" > length(x) [1] 3 Zugreifen auf Elemente: Data Frames > auto <- data.frame(PS = c(55, 75, 72, 105), Gewicht = c(1050, + 1077, 1120, 1420)) > auto 1 2 3 4 PS Gewicht 55 1050 75 1077 72 1120 105 1420 > auto$PS [1] 55 75 72 105 Zugreifen auf Elemente: Data Frames > auto[, "PS"] [1] 55 75 72 105 Sequenzen > seq(from = 0, to = 1, length = 3) [1] 0.0 0.5 1.0 > seq(0, by = 0.1, along = 1:11) [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 > rep("hallo", 3) [1] "hallo" "hallo" "hallo" > rep(1:3, 3) Sequenzen [1] 1 2 3 1 2 3 1 2 3 Matrix-Multiplikation > x <- matrix(1:4, ncol = 2) > x [,1] [,2] [1,] 1 3 [2,] 2 4 > xInv <- solve(x) > x * xInv [,1] [,2] [1,] -2 4.5 [2,] 2 -2.0 Matrix-Multiplikation > x %*% xInv [,1] [,2] [1,] 1 0 [2,] 0 1 Funktionen > moment <- function(x, n = 2) { + sum(x^n)/length(x) + } • Es wird nur ein Wert zurückgegeben (letztes Statement oder Argument von return). Wenn mehrere Werte zurückgegeben werden sollen, dann können diese in einer Liste zusammengefasst werden. • Argumente mit Namen: Bei Aufruf einer Funktion können die Argumente in einer beliebigen Reihenfolge übergeben werden (z.B. moment(n=3, x=x)). • Default Werte: Argumente mit Default Werten können beim Aufruf der Funktion weggelassen werden. Einlesen von Daten In R gibt es die Möglichkeit, die Daten aus den verschiedensten Formaten einzulesen. Eine nähere Beschreibung befindet sich in R Data Import/Export. Die Befehle, die wir benötigen, sind: • read.table(): Einlesen von Daten in Tabellen-Format aus einer Datei und Erzeugen eines Data Frames • read.csv2(): Einlesen von Daten im CSV-Format∗ • load(): Laden von Daten (und auch Objekten), die in R mit save gespeichert worden sind ∗ Z.B. können in Excel Daten im CSV Format abgespeichert werden. Erstellen von Skripts Um Reproduzierbarkeit der R Sessions zu erreichen, können die einzelnen Befehle in ein File geschrieben werden und daraus nach R geladen werden. Verwende einen externen Editor zum Schreiben eines Skripts: • Windows: – Setzen im GUI über Menü File → New Script – Notepad, XEmacs, Tinn-R . . . • Unix: – vi – emacs – ... Erstellen von Skripts Einlesen des Skripts in R: > source("skript.R") Wenn die Befehle und Ergebnisse am Bildschirm mitverfolgt werden sollen: > source("skript.R", echo = TRUE) Erstellen von Grafiken Befehle zum Erzeugen von Grafiken sind: • • • • plot(): verwendet die Default Printmethode für Datentyp hist(): Histogramm boxplot(): Boxplot ... Zum Hineinschnuppern: demo(graphics) Viele Beispiele: http://addictedtor.free.fr/graphiques/index.php und http://www.stat.auckland.ac.nz/~paul/RGraphics/rgraphics. html Speichern oder Drucken der Grafiken Windows : • Klicken mit rechter Maustaste auf den Plot oder unter Menü File: Wähle Save as Metafile ... oder Print ... • Vor dem Erstellen der Grafik win.metafile(file = "Rplots.wmf") und danach dev.off() Unter Unix : • dev.print(): Drucke aktives Device • Vor dem Erstellen der Grafik postscript(file = "Rplots.ps") und danach dev.off() Weitere Möglichkeiten zur Abspeicherung von Grafiken können mit ?Devices ermittelt werden. Beispiel > > > > > + > > data(faithful) help(faithful) save(faithful, file = "faithful.Rdata") load("faithful.Rdata") write.table(faithful, file = "faithful.dat", quote = FALSE, row.names = FALSE) faithful <- read.table("faithful.dat", header = TRUE) summary(faithful) eruptions Min. :1.600 1st Qu.:2.163 Median :4.000 Mean :3.488 3rd Qu.:4.454 Max. :5.100 waiting Min. :43.0 1st Qu.:58.0 Median :76.0 Mean :70.9 3rd Qu.:82.0 Max. :96.0 Beispiel > dim(faithful) [1] 272 2 > faithful <- na.omit(faithful) > par(omi = c(0, 0, 0, 0)) > plot(faithful, main = "Faithful") Beispiel 70 60 50 waiting 80 90 Faithful 1.5 2.0 2.5 3.0 3.5 eruptions 4.0 4.5 5.0 Beispiel Speichern der Grafik in einer Datei innerhalb eines Skripts: Windows : > win.metafile(file = "faithful.wmf") > plot(faithful, main = "Faithful", omi = c(0, 0, + 0, 0)) > dev.off() Unter Unix : > postscript(file = "faithful.eps") > plot(faithful, main = "Faithful") > dev.off() Beispiel > daten <- faithful[faithful$eruptions > 3, 2] > length(daten) [1] 175 > > + > > > > par(mfrow = c(2, 2), omi = c(0, 0, 0, 0)) hist(daten, freq = FALSE, breaks = 20, xlim = c(60, 100)) boxplot(daten, main = "Boxplot") plot(density(daten), main = "Estimated Density") qqnorm(daten) qqline(daten, col = "red") Beispiel Boxplot 95 85 75 0.04 65 0.00 Density 0.08 Histogram of daten 60 70 80 90 100 daten Normal Q−Q Plot 95 85 65 75 Sample Quantiles 0.04 0.02 0.00 Density 0.06 Estimated Density 60 70 80 90 N = 175 Bandwidth = 1.913 100 −2 −1 0 1 Theoretical Quantiles 2 Beispiel > var(daten) [1] 35.9309 > sd(daten) [1] 5.994239 Links Einige hilfreiche und interessante Seiten zu und über R: • R Homepage: http://www.r-project.org/ • The Comprehensive R Archive Network: http://cran.at.r-project.org/ • Frequently Asked Questions on R: http://cran.at.r-project.org/doc/FAQ/R-FAQ.html • Short Introduction: http://cran.at.r-project.org/doc/contrib/rdebuts_en.pdf • Reference Card: http://cran.at.r-project.org/doc/contrib/Short-refcard.pdf Links • R Commander: http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/index.html • An R site search: http://finzi.psych.upenn.edu/search.html • Mail archives: http://maths.newcastle.edu.au/~rking/R/ • Graphiken: http://www.stat.auckland.ac.nz/~paul/RGraphics/rgraphics. html http://addictedtor.free.fr/graphiques/index.php • Mailingliste: http://www.r-project.org/mail.html Vergleich zu SAS Bestimme gerundetes Mittel einer Variablen eines Datensatzes, die mit ∗2.54 multipliziert werden sollte • SAS: DATA new; SET old; htcm = htinches * 2.54; PROC means; VAR htcm; output out=new2 mean=htcm; DATA new2; set new2; htcm=round(htcm); PROC fsview; run; Kann auch in einem DATA step gelöst werden – noch längerer Code. • R: round( 2.54 * mean( htinches ) ) ENDE Danke für die Aufmerksamkeit! Der Inhalt dieser Slides entspricht zum größten Teil dem Inhalt der Slides von Bettina Grün (siehe http://www.ci.tuwien.ac.at/~gruen/R-intro-slides.pdf ) vom Oktober 2003.