Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14....

34
1 Einführung in R Felix Schönbrodt Humboldt-Universität zu Berlin 17.4.2009 1 Donnerstag, 23. April 2009

Transcript of Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14....

Page 1: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

1

Einführung in R

Felix Schönbrodt

Humboldt-Universität zu Berlin

17.4.2009

1Donnerstag, 23. April 2009

Page 2: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Vorteile von R

• Befreiung von der Tabellenstruktur

• Berechnung und Wiederverwendung aller Variablen(z.B. αs, Faktorenwerte, Varianzanteile, ...)

• alle Berechnungen in einem Programm(kein Exportieren und Re-Importieren der Daten für externe Spezialprogramme wie HLM, SOREMO, etc.)

• bessere, flexiblere und vollständig replizierbare Grafiken

• man kommt schneller zu Ergebnissen (Einschränkung: wenn man es kann)

2

2Donnerstag, 23. April 2009

Page 3: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Vorteile von R• Man kann sich seine eigenen Funktionen schreiben und

diese immer wieder verwenden

• Es gibt bereits eine Unzahl an professionellen Funktionen, zusammengefasst in „packages“

• neue Statistiken oft zuerst (und ausschließlich) in R, z.B.

– Cross-Level-Multilevel-Modeling (package lme4)– Robuste Statistiken (packages rrob, Funktionssammlung von

Wilcox)

• dynamische und hilfsbereite Community

3

3Donnerstag, 23. April 2009

Page 4: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grafik - Showcase

4

4Donnerstag, 23. April 2009

Page 5: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grafik - Showcase

5a bagplot (= bivariate boxplot)

5Donnerstag, 23. April 2009

Page 6: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grafik - Showcase

6

6Donnerstag, 23. April 2009

Page 7: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grafik - Showcase

7

7Donnerstag, 23. April 2009

Page 8: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grafik - Showcase

8

8Donnerstag, 23. April 2009

Page 9: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

(potentielle) Nachteile von R

• steile Lernkurve: am Anfang braucht man für alles erstmal etwas länger

• anderer Ansatz: Programmierung statt „point & click“ ➙ für viele eher ungewohnt

9

9Donnerstag, 23. April 2009

Page 10: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Setup von R• R Framework: läuft relativ unbemerkt im Hintergrund,

kümmert sich um die Berechnungen

• Texteditor: schickt Befehle an R-Framework; Ergebnisse werden dann in einer Konsole (Textausgabefenster) dargestellt

• packages sind Erweiterungen, die neue Funktionen beinhalten. Man kann mittlerweile sehr viele von CRAN (Comprehensive R Archive Network) herunterladen

• Es gibt GUIs (Graphical User Interfaces), allen voran R Cmdr (http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/). Er bietet etwas SPSS-“look &feel“, allerdings hat der Autor John Fox das Programm auch nur geschrieben, um die Benutzer zum echten Scripting überzuleiten ...

10

10Donnerstag, 23. April 2009

Page 11: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Die wichtigsten Operatoren

11

Operator Beschreibung Beispiel

<- Zuweisung eines Wertesvar1 <- 15

var2 <- c(1,2,5)

+-

Addition; Substraktion a <- (5+var2)-b

*/

Multiplikation; Division var5 <- var1/(var2*5)

==!=

Prüfung auf (Un)Gleichheit; ergibt TRUE oder FALSE

(Achtung, häufiger Fehler: Verwechslung mit einfachem „=“)

1 == 2 #FALSE

a <- 2; a==2; #TRUE

a != 2 # FALSE

<; >; <=; >=

kleiner (gleich), größer (gleich);ergibt TRUE oder FALSE

3 >= 2; #TRUE

%in% ist Element links Teil der Menge rechts?a <- c(1,2,5); b <- 4; c <- 5

(b %in% a) # FALSE

(c %in% a) # TRUE

! NOT (logische Verneinung) !(b %in% a) # TRUE

&|

logisches UND (&) und logisches ODER (|)if (a>3 | b<5) ...

if (a<3 & !(b<4)) ...

11Donnerstag, 23. April 2009

Page 12: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Die Syntax - wichtige Elemente• Missing Values: NA (not available)

> sex <- c(0,1,1,0,NA,0,1)

• Bedingungen: if (Bedingung mit boolschem Wert) {Code1} else {Code2}

– „else“-Teil kann auch weggelassen werden

• Schleifenfor (i in 1:10) {print(i*10)}

• str(obj) gibt die Struktur eines Objektes aus

• summary(obj) gibt bei komplexen Objekten eine Zusammenfassung aus

12

12Donnerstag, 23. April 2009

Page 13: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Die Syntax - wichtige Elemente

• case-sensitive: Array != array

• Kommentarzeilen im Quellcode beginnen mit #

• In Formeln werden runde Klammern () verwendet

• Programmblöcke werden in geschweifte Klammern {} gestelltif (var1 == TRUE) {var2 <- var3*2} else {var2 <- var3/2}

• Subsets werden in eckigen Klammern [ ] angegeben

• Hilfe zu Befehl: ?Befehl (z.B. ?data.frame)

• Gesamthilfe starten: help.start()13

13Donnerstag, 23. April 2009

Page 14: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grundideen von R

• Environment:

– alle Variablen/ Objekte liegen darin „unsichtbar“ herum Anzeige aller vorhandenen Objekte mit ls() # ls bedeutet „list“

– jedes erstellte Objekt bleibt im Environment bis es explizit überschrieben oder gelöscht wird

Löschen eines Objekts: rm(var1) #rm bedeutet „remove“

• (Fast) alle Berechnungen vektorenbasiert (d.h. die Operation wird auf jedes einzelne Element ausgeführt)> a <- c(1,2,4)

> b <- c(2,3,5)> a+b # 3 5 9

> a == 2 # FALSE TRUE FALSE

14

14Donnerstag, 23. April 2009

Page 15: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Grundideen von R

• Befehle werden durch Funktionen ausgeführt

• Wird eine Funktion einfach so aufgerufen, wird das Ergebnis angezeigt> a <- c(4,6,8)

> mean(a)[1] 6

• Das Ergebnis einer Funktion kann einer Variable zugewiesen werden und bleibt somit gespeichert> a <- c(4,6,8)

> m1 <- mean(a)

> m1[1] 6

15

15Donnerstag, 23. April 2009

Page 16: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen I: Vektoren

• die Funktion c() erstellt Vektoren> a <- c(1,2,3,4)

> a[1] 1 2 3 4

• Vektor = eindimensionale Aneinanderreihung von Werten, z.B.:a <- c(1, 2, 3, 5, 7, 23, 2)

b <- c(„grün“, „blau“, „rot“)

c <- c(TRUE, TRUE, FALSE, TRUE)

• Vektoren können aus integers, numbers, booleans oder characters bestehen (aber jeweils nur eine Sorte - nicht gemischt!)

16

16Donnerstag, 23. April 2009

Page 17: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen I: Vektoren

• Sequenzen:> a <- 1:5 # 1:5 = 1 bis 5

[1] 1 2 3 4 5 # geht nur mit ganzen Zahlen

> rep(1:3, 4) # = repeat 1:3 (=1 2 3) 4 mal

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

> seq(0.1, 0.9, by=0.2) #Sequenz: start=0.1, Ende=0.9, diff=0.2[1] 0.1 0.3 0.5 0.7 0.9

17

17Donnerstag, 23. April 2009

Page 18: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen I: Vektoren indizieren

• vector[pos] gibt das Element an Position pos aus (Zählung beginnt bei 1)> a <- c(1,5,8,9)

> a[2] # 5> a[3] == 7 # FALSE

> a[3] == 8 # TRUE; vergleiche aber mit:

> a == 8 # FALSE FALSE TRUE FALSE; hier vektorbasiert!

• im Index in der eckigen Klammer können auch boolsche Formeln oder Vektoren stehen

> a[a>2] # „nimm alle a für die gilt: a>2“ --> 5 8 9> a[c(1,2,4)] # 1 5 9

> sex <- c(1,0,1,1) #beachte: Vektor sex hat die selbe Länge wie a> a[sex == 1] # 1 8 9

18

18Donnerstag, 23. April 2009

Page 19: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen II: Matrizen

• zweidimensionale Datenstruktur aus einem einheitlichen Datentyp> mat <- matrix(1:12, nrow=3, ncol=4)

[,1] [,2] [,3] [,4][1,] 1 4 7 10

[2,] 2 5 8 11

[3,] 3 6 9 12

• Indizierung über zwei Dimensionen

> mat[row, col]> mat[2,4] # 11

> mat[1:2, 3:4] [,1] [,2]

[1,] 7 10

[2,] 8 1119

19Donnerstag, 23. April 2009

Page 20: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen II: Matrizen

• Indizierung über alle Elemente einer Dimension: Position in der eckigen Klammer einfach frei lassen (trotzdem Komma schreiben)> mat[1,1] # Zeile 1, Spalte 1

[1] 1> mat[,1] # alle Zeilen, Spalte 1

[1] 1 2 3

> mat[1,] # Zeile 1, alle Spalten[1] 1 4 7 10

> mat[1:2,] # Zeilen 1 bis 2, alle Spalten [,1] [,2] [,3] [,4]

[1,] 1 4 7 10

[2,] 2 5 8 11

20

20Donnerstag, 23. April 2009

Page 21: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen III: data frames• ähnlich wie zweidimensionale Matrix, nur dass jede Spalte

einen eigenen Datentyp haben kann> id <- c(1:10)

> sex <- c("m",“w“,"w","w", rep("m",6))

> weight <- rnorm(10, 50, 4)

> # rnorm = random norm = ziehe 10 Zufallszahlen mit m=50 und sd = 4

> df <- data.frame(id, sex, weight)

> df

id sex weight

1 1 m 51.12549

2 2 w 60.87886

3 3 w 51.99104

4 4 w 50.65935

5 5 m 54.41373

6 6 m 52.10454

7 7 m 50.02286

8 8 m 53.51057

9 9 m 45.65045

10 10 m 50.9642321

21Donnerstag, 23. April 2009

Page 22: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen III: data frames> str(df)

'data.frame': 10 obs. of 3 variables:

$ id : int 1 2 3 4 5 6 7 8 9 10

$ sex : Factor w/ 2 levels "m","w": 1 2 2 2 1 1 1 1 1 1

$ weight: num 51.1 60.9 52 50.7 54.4 ...

> summary(df)

id sex weight

Min. : 1.00 m:7 Min. :45.65

1st Qu.: 3.25 w:3 1st Qu.:50.74

Median : 5.50 Median :51.56

Mean : 5.50 Mean :52.13

3rd Qu.: 7.75 3rd Qu.:53.16

Max. :10.00 Max. :60.88

22

22Donnerstag, 23. April 2009

Page 23: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen III: data frames

• Zugriff auf Spalten im data.frame mit $ oder über Indizierung []

> df$sex

[1] m w w w m m m m m mLevels: m w

> df[,3]

[1] 51.12549 60.87886 51.99104 50.65935 54.41373 52.10454 50.02286 53.51057 45.65045 50.96423

> df[4,3]

[1] 50.65935

> df$weight[4]

[1] 50.65935

23

23Donnerstag, 23. April 2009

Page 24: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Datentypen III: data frames

• Subsets auswählen: Missings entfernen

df[!is.na(df$sex),]

24

24Donnerstag, 23. April 2009

Page 25: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Übung!

• dat <- InsectSprays (=in R vordefiniertes Datenset)

– Tipp: ?mean, ?str– Mittelwert der Stiche von Spray A– Mittelwert der Stiche von Spray A & C zusammengefasst

• Lösung:

– mean(dat$count[dat$spray == „A“])– mean(dat$count[dat$spray == „A“ | dat$spray == „C“]), oder:– mean(dat$count[dat$spray %in% c(„A“, „C“) ] ), oder:– mean(dat[dat$spray == „A“ | dat$spray == „C“,1]

25

25Donnerstag, 23. April 2009

Page 26: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Übung!

• library(psych)data(„sat.act“)dat <- sat.act

– Tipp: ?cor (auf use=“pairwise.complete.obs“ achten)– Korrelationstabelle der Daten– Die Korrelation von SATQ mit education aufgeteilt nach Männern

und Frauen

• Lösung

– cor(dat, use=“p“)– cor(dat$SATQ[dat$gender==1], dat$education[dat$gender==1],

use=“p“) # = 0.078 bzw. 0.032 bei gender == 2– tapply(dat, dat$gender, cor)

26

26Donnerstag, 23. April 2009

Page 27: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Eigene Funktionen

27

• Werden ähnlich wie Variablen definiert; Funktionen haben Parameter (z.B. a und b) und einen Rückgabewert (wird durch return zurückgegeben)

• Bsp.: Summe zweier Werte, auf maximal 10 begrenzenmyFunc <- function(a,b) {

res <- a+b if (res > 10) {res <- 10}

return(res)

}

#Test:myFunc(3,5)

var3 <- myFunc(5,8)

myFunc(c(1,3,4), c(5,7,8))

27Donnerstag, 23. April 2009

Page 28: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Eigene Funktionen

28

• bessere Variante (weil vektortauglich):myFunc <- function(a,b) {

res <- a+b # vorher: if (res > 10) {res <- 10}

res[res>10] <- 10

return(res)}

VORHER:

> myFunc(c(1,3,4), c(5,7,8))

[1] 6 10 12Warning message: In if (res > 10) { :

Bedingung hat Länge > 1 und nur das erste Element wird benutztNACHHER:

> myFunc(c(1,3,4), c(5,7,8))

[1] 6 10 10

28Donnerstag, 23. April 2009

Page 29: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Eigene Funktionen: Übung• dat <- InsectSprays

• ?sd; ?length; ?sqrt; ?qt

• Erstellt eine Funktion, die von einem Vektor (z.B. dat$count)

– den Mittelwert und Konfidenzintervall für Mittelwert als data.frame zurückgibt, mit den Variablennamen m und c_upper und c_lower

– die Breite des CI wird durch den Parameter CI bestimmt (z.B. 0.95)

• Tip: CI = x ± t(0.975; df=n-1) * (σ / sqrt(n))

• gewünschtes Ergebnis:res <- myFunc(dat$count, CI=0.95)

29

29Donnerstag, 23. April 2009

Page 30: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Eigene Funktionen: Übungdat <- InsectSprays

myFunc <- function(x, CI=0.95) {

m <- mean(x, na.rm=TRUE)

se <- sd(x, na.rm=TRUE) / sqrt(length(x)) tvalue <- abs(qt((1-CI)/2, length(x)))

c_lower <- m - tvalue*se c_upper <- m + tvalue*se

return(data.frame(m,c_lower,c_upper))

}

res <- myFunc(dat$count)res:

m c_lower c_upper

9.5 7.807718 11.19228

30

30Donnerstag, 23. April 2009

Page 31: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Nachtrag: Dateien laden und speichern

• source(): lädt eine Datei mit Quellcode und führt diesen direkt aus

• read.table(): liest Daten aus einer Datei ein, wenn diese im Tabellenformat vorliegen; gibt einen data.frame zurückdf <- read.table(„Bla.dat“)

• write.table(): speichert ein Objekt als Dateiwrite.table(df, „Bla.dat“)

• Praktisch zum Datenaustausch mit SPSS: read.csv

– Dateien in SPSS als .csv-Datei exportieren; dann in R importieren:df <-read.csv(„SPSS.csv“)

31

31Donnerstag, 23. April 2009

Page 32: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Was jetzt nicht behandelt wurde ...

• fast alles (wurde nicht behandelt) ...

• Lineare Regression

• ANOVAs

• Faktorenanalysen

• Plots

• Dateien lesen und schreiben / Ergebnisse auf Festplatte speichern

• ...

32

32Donnerstag, 23. April 2009

Page 33: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

Cheatsheet

33

?befehl Hilfe zu befehl zeigen mean() Mittelwert; na.rm = TRUE beachten

ls() alle Objekte auflisten sd() Streuung; na.rm = TRUE beachten

rm(obj) Objekt aus Environment entfernen

aov() ANOVA

str() Struktur eines Objektes anzeigen

lm() lineare Regression

c() Vektor erstellen cor() Korrelationsmatrix

matrix() Matrix erstellen library() ein package laden

data.frame()

data frame erstellen summary() Zusammenfassung eines Objekts (hängt von Art des Objekts ab; besonders sinnvoll bei lm oder aov)if () {}

else {}

bedingte Codeausführung

summary() Zusammenfassung eines Objekts (hängt von Art des Objekts ab; besonders sinnvoll bei lm oder aov)

for (i in 1:10) {}

Schleife; 10 Wiederholungen, Index i läuft von 1 bis 10

33Donnerstag, 23. April 2009

Page 34: Einführung in R - uni-muenchen.de · > a == 2 # FALSE TRUE FALSE 14 Donnerstag, 23. April 2009 14. Grundideen von R • Befehle werden durch Funktionen ausgeführt • Wird eine

34

Vielen Dank!

PerSoc: Mitja Back; Anna Baumert, Jaap Denissen, Freda-Marie Hartung, Lars Penke, Stefan Schmuckle, Felix Schönbrodt, Michaela Schröder- Abé, Manja Vollmann, Jenny Wagner, Cornelia Wrzus www.persoc.net

Gefördert durch die

34Donnerstag, 23. April 2009