Post on 24-May-2018
transcript
Einfuhrung in die statistische Sprache R
M. Comp. Sc. Stefan Faußer
Oktober 28, 2008
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Uberblick
I basiert auf der kommerziellen Sprache S, Source Code von Rist frei verfugbar (GPL)
+ teilweise objektorientierter, interpretierter Programmcode
+ ist fur viele Betriebssysteme und Architekturen verfugbar(Unix / Linux, Windows, Mac OS X)
+ erweiterbar durch Fortran und C Code
+ viele freie Pakete von Finanzmathematik bis dem MaschinellenLernen bereits vorhanden
+ logischer Aufbau der Datentypen: Unterteilung in quantitativund qualitativ, Vectoren, Matrizen und Arrays
+ im Gegensatz zu S wird R aktiver aktualisiert
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
+ Variablen mussen nicht deklariert werden
+ Programmcode in R meist kurzer, besser lesbar
- R Code oft langsamer wie C / Fortran, Effekt durchgeschachtelte Schleifen wird verstarkt
- Kommandozeilen und Skript gesteuert (fur viele eine großeHurde)
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
WWW Resourcen
I http://www.r-project.org/I Binar und Quellcodeversion von RI Anleitungen und Tutorials fur R, unter anderem: An
Introduction to RI BuchempfehlungenI R Pakete (libraries) bei CRAN (Comprehensive R Archive
Network)
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Installation und Start von R
Installation:
I Debian und Ubuntu:
sudo apt-get install r-base r-recommended
I Opensuse:
sudo rpm -Ihv R-base-versionsnummer.architektur.rpm
I Windows: (Installer) Doppelklick aufR-versionsnummer-win32.exe
I Mac OS X: (Installer) Doppelklick auf R-versionsnummer.dmg
Start:
I Eingabe von R in Kommandozeile oder (Windows) Klick auf Rin Startmenu
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Kommandozeile von R
daekuwa@pixie:~$ R
R version 2.8.0 (2008-10-20)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
R ist freie Software und kommt OHNE JEGLICHE GARANTIE.
Sie sind eingeladen, es unter bestimmten Bedingungen weiter zu verbreiten.
Tippen Sie ’license()’ or ’licence()’ fur Details dazu.
R ist ein Gemeinschaftsprojekt mit vielen Beitragenden.
Tippen Sie ’contributors()’ fur mehr Information und ’citation()’,
um zu erfahren, wie R oder R packages in Publikationen zitiert werden konnen.
Tippen Sie ’demo()’ fur einige Demos, ’help()’ fur on-line Hilfe, oder
’help.start()’ fur eine HTML Browserschnittstelle zur Hilfe.
Tippen Sie ’q()’, um R zu verlassen.
>
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Hilfesystem
I nach einem Funktionen-Namen suchen:
help.search( Funktionen-Namen oder Beschreibung )
I Hilfe zu einer Funktion:
help( Funktion ) # oder ?Funktion
I Auflistung der Informationen eines Packages:
library( help=Package )
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Der R Workspace
Wahrend einer R Sitzung erstellte Objekte befinden sich im Workspace.
I Zeigen aller R-Objekte:
ls()
I Loschen eines R-Objektes:
rm( Objekt )
I Loschen aller R-Objekte:
rm( list = ls() )
I Speichern und Laden von R-Objekten:
> n <- 0.9 # Einfache Zuweisung> save(n,file="n.Rdata") # Speichern von n> n <- 0.8> load(file="n.Rdata") # Laden von n> n # Anzeigen des Objektes n[1] 0.9
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Datentypen
I numeric:> number <- 0.9
> number
[1] 0.9
> class(number)
[1] "numeric"
I logical:
> bool <- TRUE # also possible: FALSE
> if( bool ) { y <- -1 < 0 }
> y
[1] TRUE
I character:
> text <- "Hello"
> paste( text, "Ulm University!" )
[1] "Hello Ulm University!"
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Vektoren
I Vom Typ numeric, character oder logical (oder complex)
> v <- vector(mode="logical",length=5) # ’leerer’ Vektor
> v
[1] FALSE FALSE FALSE FALSE FALSE
> v <- c( 3, 0.9, -1 ) # kombiniere Werte zu Vektor
> v
[1] 3.0 0.9 -1.0
> v <- 1:4 # Werte von 1 bis 4 in 1er-Schritten
> v
[1] 1 2 3 4
> v <- seq( -1, 1, 0.2 ) # Werte von -1 bis +1 in 0.2er-Schritten
> v
[1] -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0
> v <- rep(’c’,5) # wiederhole Wert "c" genau 5 Mal
> v
[1] "c" "c" "c" "c" "c"
> length(v) # erhalte Lange des Vektors
[1] 5
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Matrizen
I Vom Typ numeric, character oder logical (oder complex)
> m <- matrix( 0, 3, 2 ) # erzeuge 3x2 Matrix, fulle mit 0
> m
[,1] [,2]
[1,] 0 0
[2,] 0 0
[3,] 0 0
> diag(m) <- 3 # schreibe Wert 3 in diagonale von m
> m
[,1] [,2]
[1,] 3 0
[2,] 0 3
[3,] 0 0
> dim(m) # erhalte Dimension von m
[1] 3 2
> matrix( runif(3*3),3,3 ) # erzeuge 3x3 Matrix (Zufallszahlen)
[,1] [,2] [,3]
[1,] 0.6083411 0.2720097 0.1026107
[2,] 0.2675095 0.3241618 0.1078421
[3,] 0.2127431 0.5630641 0.5140857
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Matrizen aus Vektoren bauen
> v1 <- seq(0.1,0.4,0.1) # Werte von 0.1 bis 0.4 in 0.1er-Schritten
> v2 <- rep(1,4) # wiederhole Wert 1 genau 4 Mal
> rbind(v1,v2) # binde Reihen, 1. Reihe = v1, 2. Reihe = v2
[,1] [,2] [,3] [,4]
v1 0.1 0.2 0.3 0.4
v2 1.0 1.0 1.0 1.0
> cbind(v1,v2) # binde Spalten, 1. Spalte = v1, 2. Spalte = v2
v1 v2
[1,] 0.1 1
[2,] 0.2 1
[3,] 0.3 1
[4,] 0.4 1
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Matrizen und Vektoren indizieren
> m <- matrix( 1:9, 3, 3 ) # erzeuge 3x3 Matrix, fulle mit 1 bis 9
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> m[2,] # indiziere komplette 2. Reihe von m
[1] 2 5 8 # (Ergebnis = Vektor !)
> m[,3] # indiziere komplette 3. Spalte von m
[1] 7 8 9
> m[2,3] # indiziere 2. Reihe und 3. Spalte von m
[1] 8
> m[3,2] # indiziere 3. Spalte und 2. Reihe von m
[1] 6
> v <- c( 1:3 )
> v[2] # indiziere 2. Element von m
[1] 2
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
I Logische Vektoren konnen aus logischen Abfragen erzeugtwerden
I Matrizen und Vektoren konnen mit logischen Matrizen bzw.Vektoren indiziert werden
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> m > 4 # Wert großer 4 ? Ergebnis = log. Matrix selber Große
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
[2,] FALSE TRUE TRUE
[3,] FALSE TRUE TRUE
> m[m > 4] # Indizierung von m durch logische Matrix
[1] 5 6 7 8 9
> m[m >=4 & m < 6] # Wert >=4 UND < 6
[1] 4 5
> m[m > 4 | m < 4] # Wert > 4 ODER < 4
[1] 1 2 3 5 6 7 8 9
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Listen
I Ahnlich der Strukturen in C
I Beinhalten Objekte (z.B. Vektoren und Matrizen) mit jeweilseinem eindeutig zugeordneten Namen
I Objekt in Liste kann durch Namen referenziert werden
> l <- list( v=rep(2,3), m=matrix(runif(3*3),3,3) ) # erzeuge Liste
> l$v # zeige Objekt mit Namen v in Liste l an
[1] 2 2 2
> l$m # zeige Objekt mit Namen m in Liste l an
[,1] [,2] [,3]
[1,] 0.02348366 0.4592553 0.75511414
[2,] 0.71176085 0.4923985 0.08023981
[3,] 0.85870891 0.9648370 0.08961499
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Einlesen von Dateien
I Moglich: Eingabe der Daten in OpenOffice (oder Excel) undSpeichern als CSV-Datei
Inhalt raucherStat.csv:
"Name","Alter","Raucher"
"Person1",18,"Y"
"Person2",24,"N"
"Person3",60,"Y"
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
> d <- read.csv("raucherStat.csv",header=TRUE) # Einlesen von raucherStat.csv
> d
Name Alter Raucher
1 Person1 18 Y
2 Person2 24 N
3 Person3 60 Y
> class(d) # d ist ein Datenrahmen (ahnlich Liste)
[1] "data.frame"
> dim(d)
[1] 3 3
> d[,1] # 1. Spalte ist ein besonderer Vektor: factor
[1] Person1 Person2 Person3
Levels: Person1 Person2 Person3
> d[,2] # 2. Spalte ist vom Typ numeric
[1] 18 24 60
> d[,3]
[1] Y N Y
Levels: N Y
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Dateien: Weitere Funktionen
I Bearbeiten eines Datenrahmens:
d <- edit( d )
I Speichern in ASCII-Datei:
write.table()
I Lesen einer ASCII-Datei:
read.table() # oder scan()
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Matrix und Vektor Operationen
I Multiplikation mit einem Skalar:
> matrix(1:9,3,3) * 2
[,1] [,2] [,3]
[1,] 2 8 14
[2,] 4 10 16
[3,] 6 12 18
I Multiplikation mit einem Vektor:
> matrix(1:9,3,3) * c(1,2,3)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 4 10 16
[3,] 9 18 27
I Multiplikation mit einer Matrix:
> matrix(1:9,3,3) %*% diag(2,3,3)
[,1] [,2] [,3]
[1,] 2 8 14
[2,] 4 10 16
[3,] 6 12 18
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
I Transponieren einer Matrix: Mt :
> t( matrix(1:9,3,3) )
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
I Inverse einer Matrix: M−1:
> library(MASS)
> ginv( matrix(1:9,3,3) )
[,1] [,2] [,3]
[1,] -0.6388889 -5.555556e-02 0.5277778
[2,] -0.1666667 -9.234353e-17 0.1666667
[3,] 0.3055556 5.555556e-02 -0.1944444
I Skalarprodukt (oder inneres Produkt):
〈(x1, x2, ..., xN), (y1, y2, ..., yN)〉 =PN
i=1 xiyi :
> t( c(1,2,3) ) %*% c(4,5,6)
[,1]
[1,] 32
I Außeres Produkt:
> c(1,2,3) %o% c(4,5,6)
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 8 10 12
[3,] 12 15 18
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Weitere Matrix und Vektor Operationen
Arithmetisch:
I Addition: +
I Subtraktion: −I Division: /
I Multiplikation: ∗I Potenzieren: ^
I jedoch: Matrix-Multiplikation: %*%
Logisch:
I Vergleiche: <, >, <=, >=, (gleich:) ==, (ungleich:) ! =
I ODER-Verknupfung: |I UND-Verknupfung: &
I Vergleichs-ODER-Verknupfung: ||I Vergleichs-UND-Verknupfung: &&
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Weitere wichtige Funktionen
Funktion Verwendung
cos(), sin(), tan(), ... trigonometrische Funktionenabs() absolut-Wertsqrt() Wurzelmin() gibt minimaler Wert zuruckmax() gibt maximaler Wert zuruckmean() Durchschnittswertvar() Varianzcov(x,y) Kovarianz von x und y
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Schreiben eigener Funktionen
I Prinzipiell gilt: Beliebig viele Ubergabewerte und einRuckgabewert
I Trick: Verfielfaltigung der Anzahl der Ruckgabewerte durchListe !
I Letzte Zuweisung / Berechnung in Funktion wird zuruckgegeben
I Funktion kann auch in Datei abgespeichert und mit source(datei.R ) eingelesen werden
> myfunc <- function(x) {
+ if( x > 1 )
+ x * 2.3
+ else
+ x / 2.3
+ }
> myfunc(1)
[1] 0.4347826
> myfunc(1.1)
[1] 2.53
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Schleifen in Funktionen
I Innerste Schleife kann durch break vorzeitig verlassen oderdurch continue fortgesetzt werden
I return benennt explizit den Ruckgabewert
I Lokale Variablen (Variablen in Funktion) beeinflussenVariablen außerhalb der Funktion nicht
> myfunc <- function(x) {
+ y <- 1
+ while( x < 1 ) {
+ x <- x + 0.1
+ y <- y + 1
+ }
+ return( y )
+ }
> myfunc(0.1)
[1] 11
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Ein- und Ausgabe innerhalb einer Funktion (Skriptes)
I print(objekt): gibt Inhalt des Objektes aus
I readline(): Liest eine Zeile vom Terminal
I scan(): Liest formatierte Daten von Terminal oder Datei
I cat(object1,object2,...): Gibt alle Objekte aus
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Grafische Ausgaben: Ein Beispiel
Der pima Datensatz vom UCI Machine Learning repository(http://archive.ics.uci.edu/ml/) beinhaltet statistischeDaten von Pima Indianern
I besteht aus 9 Attributen und jede Instanz ist jeweils einerKlasse zugeordnet
I soll Ruckschlusse auf Diabetes ermoglichen
I 768 statistische Daten wurden erfasstAuszug des Datensatzes (1. bis 10. Reihe):
> pima[1:10,]
pregnant glucose diastolic triceps insulin bmi diabetes age test
1 6 148 72 35 NA 33.6 0.627 50 positive
2 1 85 66 29 NA 26.6 0.351 31 negative
3 8 183 64 NA NA 23.3 0.672 32 positive
4 1 89 66 23 94 28.1 0.167 21 negative
5 0 137 40 35 168 43.1 2.288 33 positive
6 5 116 74 NA NA 25.6 0.201 30 negative
7 3 78 50 32 88 31.0 0.248 26 positive
8 10 115 NA NA NA 35.3 0.134 29 negative
9 2 197 70 45 543 30.5 0.158 53 positive
10 8 125 96 NA NA NA 0.232 54 positive
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
I Umleitung in PNG-Datei: png(filename=”filename.png”)
I Histogramm: hist(pima$diastolic)
I 2D-Plot der numerisch sortierten Daten:plot(sort(pima$diastolic),pch=”.”)
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
I Boxplot: Prinzipiell durch Funktion boxplot, hier auchmoglich: plot(diabetes ~ test,pima)
I statistische Modelle sind im Format: y ∼ x1 + x2 + ... + xp,wobei y die (abhangige) Antwort und x1 bis xp dieunabhangigen Pradiktoren darstellen.
I einfache Regressionsanalyse: p = 1, multivariateRegressionsanalyse: p > 1
I diabetes ~ test modelliert die Antwort von diabetes mit demqualitativen Pradiktor test
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Plotten von 3-dimensionalen Strukturen
x <- seq(-10, 10, length= 30)
y <- x
f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1
op <- par(bg = "white")
persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue")
filled.contour(x,y,z,color.palette=terrain.colors)
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R
Fehlt noch irgendetwas ?
Prinzipiell wurde nur ein kleiner Anteil der Sprache R besprochen.Es kann inhaltlich hinzugefugt werden:
I Fast der gesamte statistische Anteil bezuglich der Modelleund der Regression
I Ubersicht uber die vorhandenen Pakete
I mehr Beispiele
M. Comp. Sc. Stefan Faußer Einfuhrung in die statistische Sprache R