30
Einf¨ uhrung in die statistische Sprache R M. Comp. Sc. Stefan Faußer Oktober 28, 2008 M. Comp. Sc. Stefan Faußer Einf¨ uhrung in die statistische Sprache R

Einführung in die statistische Sprache R · (Unix / Linux, Windows, Mac OS X) ... sudo apt-get install r-base r-recommended I Opensuse: ... [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9

Embed Size (px)

Citation preview

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