217
1 Einführung in das R Frame- work Mark Heckmann Universität Bremen WiSe 2010/11

R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Embed Size (px)

DESCRIPTION

R course for the Bachelor in Psychology at University of Bremen, Germany during winter term 2010/11.

Citation preview

Page 1: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

1

Einführung in das R Frame-work

Mark HeckmannUniversität BremenWiSe 2010/11

Page 2: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Was erwarten wir von dem Kurs?

• Von vorne abholen / Grundlagen

• Grafiken erstellen

• Datensätze speichern / erstellen

• Weniger und genauer statt viel oberflächlich

2

Page 3: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Reuter, H. (2002). Über den Umgang mit offenen Fragen. In G. Gniech, H. Reuter & M. A. Stadler (Hrsg.). Lebenswelt und Erleben: Beiträge zur Erfahrungspsychologie. Festschrift zum 65. Geburtstag von Gisla Gniech. Lengerich: Pabst Science Publishers (S. 172-181).

„Auch wenn das Handwerkszeug solcher Forschung sich virtuos etablierter Techniken der Empirie und des Experimentierens bedient (in deutlicher Abgrenzung zur dümmlichen - ingnoranten Aufgabe dieser Instrumente) ...“

Reuter, 2002 , S. 180

3

Page 4: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Reuter, H. (2002). Über den Umgang mit offenen Fragen. In G. Gniech, H. Reuter & M. A. Stadler (Hrsg.). Lebenswelt und Erleben: Beiträge zur Erfahrungspsychologie. Festschrift zum 65. Geburtstag von Gisla Gniech. Lengerich: Pabst Science Publishers (S. 172-181).

„Auch wenn das Handwerkszeug solcher Forschung sich virtuos etablierter Techniken der Empirie und des Experimentierens bedient (in deutlicher Abgrenzung zur dümmlichen - ingnoranten Aufgabe dieser Instrumente) ...“

Reuter, 2002 , S. 180

ACHTUNG!M E T H O D I K ≠M E T H O D O L O G I E

3

Page 5: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

4

R-Appetizer

Page 6: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

mpg

wt

2

3

4

5

●●

● ●●

●●

● ●

15 20 25 30

factor(cyl)● 4● 6● 8

5

Jaw-dropping graphics !

Page 7: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

rating

density

0.0

0.2

0.4

0.6

0.8

1.0

1.2

2 4 6 8 10

mpaa

NC−17PGPG−13R

6

Page 8: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

depth

dens

ity

0.0

0.1

0.2

0.3

0.4

0.5

0.6

56 58 60 62 64 66 68 70

cutFairGoodVery GoodPremiumIdeal

7

Page 9: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

8

Page 10: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

9

http

://le

arnr

.wor

dpre

ss.c

om/2

009/

04/0

9/gg

plot

2-sa

les-

dash

boar

d/

Page 11: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

10

http

://le

arnr

.wor

dpre

ss.c

om/2

009/

04/0

9/gg

plot

2-sa

les-

dash

boar

d/

Page 12: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

11

Page 13: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

12

http

://le

arnr

.wor

dpre

ss.c

om/2

009/

04/0

9/gg

plot

2-sa

les-

dash

boar

d/

$0$50k

$100k$150k$200k

Revenue

Q1 Q2 Q3 Q4$0

$10k$20k$30k$40k$50k

Profit

Q1 Q2 Q3 Q4

0100200300400

Order Size

Q1 Q2 Q3 Q40

100200300400

New Customers

Q1 Q2 Q3 Q40.00.51.01.52.02.53.0

Customer Satisfaction

Q1 Q2 Q3 Q40%5%

10%15%20%25%

Market Share

Q1 Q2 Q3 Q40%

20%40%60%80%

On−Time Delivery

Q1 Q2 Q3 Q4

$0$20k$40k$60k$80k

$100kChardonnay

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kCabernet

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kMerlot

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kSauvignan Blanc

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kZinfandel

Q1 Q2 Q3 Q4

$0$20k$40k$60k$80k

$100kNorth America

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kAsia

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kEurope

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kMiddle East

Q1 Q2 Q3 Q4$0

$20k$40k$60k$80k

$100kSouth America

Q1 Q2 Q3 Q4

North America

Europe

Asia

South America

Middle East

Sales Pipeline

$0 $2k $4k $6k $8k$10k$12k$14k

Probability of Sale

25%

50%

75%

90% The Big Wine StoreWines 'R Us

Fruit of the VineSpirits of the Age

The Beverage CompanySips and Bites

American Vintner's BestBarrel and Keg

CheersHappy Hour

Top 10 Customers

$0 $20k $40k $60k $80k

Sales DashboardAll Currency in USD

Page 14: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

13

Page 15: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

14

Page 16: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

15

DAY 1 Learning grammar

- Basics of the R language

Page 17: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

16

Erster Tag = Hürde nehmen

Page 18: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

17

Page 19: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

18

“Nurse, get on the internet, go to SURGERY.COM, scroll down and click on the ,‘Are you totally lost?‘

icon.“

Page 20: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

„Nehmen Sie sich ein Beispiel an Kindern, die das Laufen lernen. Mit der Einstellung von vielen Erwachsenen hätten sie nach dem

ersten Sturz aufgehört und gesagt: "Nee, tut mir leid, auf zwei Beinen gehen ist nicht mein

Ding.“

Dr. Eckart von Hirschhausen 19

ACHTUNG!F l a c h e L e r n k u r v e

Page 21: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

R Ressources• R Project Site: www.r-project.org

• Blogs

• www.r-bloggers.com

• http://ryouready.wordpress.com

• eBooks/Wikis/Sites

• Quick-R website

• http://de.wikibooks.org/wiki/GNU_R

• http://addictedtor.free.fr

• R seek (www.rseek.org) 20

Endless on the web!

Page 22: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Basics• R arbeitet im Frage-Anwort Modus

• Navigieren in R Konsole durch Aufwärts und Abwärts Pfeile

• Alles hinter der Raute (#) sind Kommentare und wird von R nicht ausgewertet

• Ein Befehl wird durch ein Semikolon oder durch einen Zeilenumbruch abgeschlossen

• Ein Befehl darf über mehrere Zeilen gehen

• Dezimalstellen sind Punkte, keine Kommas. Kommas haben eine andere Funktion

21

Page 23: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Arithmetik

### Grundlegende arithmetische Operatoren ###

4 + 4! ! ! ! !# Addition4 - 1! ! ! ! # Subtraktion4 / 2! ! ! ! !# Division2 * 2! ! ! ! !# Multiplikation2^2 ! ! ! !! # Potenz2 ** 2!! ! !! # alternative für Potenz5 %/% 2 ! ! !! # Ganzzahlige Division5 %% 2!! ! !! # Modulo Division2 + 2 * 3!! !! # Rechenregeln werden beachtet2 * 2^3! ! !! # (2-1) * (2+2)! ! # Klammern können gesetzt werden wo nötig

22

Page 24: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Zuweisungen### Der Zuweisungsoperator ###

a <- 2 + 2! ! !# Zuweisungsoperator kleiner-Zeichen !# plus minus-Zeichena <- b <- 2 + 2! !# möglich aber unschön!a! ! ! ! !# Variable a enthält nun Wert2 + 2 -> a! ! !# so rum geht es auch, sollte aber !# nicht verwendet werdena = 2 + 2!! !# Zuweisung wird aber klarer durch !# Richtungsangabe des Pfeilsa <- 100! ! !# keine Warnung, wenn eine Variable !# übergespeichert wirda * 10a <- "Ich bin der Inhalt"!# Variablen sind nicht typensicher, !# d.h. sie können Zahlen, Buchstaben !# etc. enthaltena * 10!! ! !# Fehler, da Zeichen mal Zahl

23

Page 25: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Objektbezeichnungen I

• Variablen- / Objektbenennung: können alphanumerisch sein sowie, Punkte und Unterstriche enthalten

object1 <- 10

object1.1 <- “hallo“

object1_1 <- 10

• Darf keine Operatoren enthalten (+, - *, / etc.)

object-1 <- “hallo“

• Objektname darf nicht mit Zahl beginnen bzw. Punkt

24

Page 26: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Objektbezeichnungen II

• Objektname darf nicht mit Zahl beginnen bzw. Punkt gefolgt von einer Zahl

1object <- 10

.1object <- “hallo“

• Groß- und Kleinschreibung wird unterschieden (Nutzung zum Strukturieren von Objektnamen)

myObject <- 10

myobject <- 11

25

Page 27: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Bezeichnung & Stil

neueVariable1 <- 7 neueVariable2=neueVariable1+2! ! # kaum lesbar! schlechter ! ! ! ! ! ! ! ! ! ! ! # Stil!neueVariable2 <- neueVariable1 + 2!# besser, sauber getrennt

Ein R-Styleguidehttp://google-styleguide.googlecode.com/svn/trunk/google-r-style.html

26

Page 28: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Logik I# Logische Operationen

1 == 2!! ! ! # logischer Vergleich1 != 2 ! ! ! # ist ungleich?1 > 2 !! ! ! # 1 größer 2?1 >= 2 ! ! ! # 1 größer gleich 2?1 < 2 !! ! ! # 1 kleiner 21 <= 2 ! ! ! # 1 kleiner gleich 2! 1 <= 2! ! ! # Negierung von 1 kleiner gleich 2

# logisches UND

TRUE & TRUE! ! # TRUETRUE & FALSE!! # FALSEFALSE & TRUE!! # FALSEFALSE & FALSE! # FALSE

27

Page 29: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Logik II

# logisches ODER

TRUE | TRUE! ! # TRUETRUE | FALSEFALSE | TRUEFALSE | FALSE

# KurzformenT !! ! ! ! # Kurzform von TRUEF! ! ! ! ! # Kurzform von FALSE

T | FT & T

28

Page 30: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Funktionen IFunktion (lat. functio = Tätigkeit, Verrichtung)

z.B.:

c() steht für concatenate (verbinden, verketten)

> a <- c(1,2,3)> a[1] 1 2 3

rnorm() für random normal distribution > rnorm(4) [1] -0.3628728 -0.4580532 -1.3729865 -1.5834625

29

Page 31: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Funktionen IIDie Angaben innerhalb einer Klammer von Funktionen heißen Argumente.

> rnorm(4) [1] -0.3628728 -0.4580532 -1.3729865 -1.5834625

Jede Funktion hat ein definiertes Set an Argumenten,die sie verarbeiten kann (s. Dokumentation)

> ?rnorm

Um sich alle möglichen Argumente anzeigen zu lassen> args(rnorm)

30

Page 32: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Funktionen IIIJede Funktion gibt ein Objekt zurück> c(1,2,3)[1] 1 2 3

Ggf. kann dies auch unsichtbar geschehenv <- rnorm(100)hist(v)

a <- hist(v) # Rückgabe der Funktion speicherna

Falls eine Funktion nichts spezifisches zurückgibt,gibt sie ein NULL Objekt (leer) zurück

a <- plot(1:10)a

31

Page 33: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

32

“Nurse, get on the internet, go to SURGERY.COM, scroll down and click on the ,‘Are you totally lost?‘

icon.“

Page 34: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

### HELP R ###

help.start()!! ! # Hilfe aufrufen. Auch über das # Menü möglich?mean! ! ! ! ! # Hilfe zur Funktion "mean"help(mean)! ! # identisch! !help("mean")!! # identisch! !

33

Hilfe!Die allerwichtigste Funktion!

Page 35: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

R-help

Leer

R-help = an R-user best friend !

34

Page 36: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Vorgriff Datentyp Vektor

# Vorgriff auf Datentyp Vektoren (mehr später)

c()!! ! ! ! ! # concatenate (deu. "verbinden")?cc(1,2,3)! ! ! ! # numerischer Vektor! ! ! ! ! ! # Zahl am Anfang des Outputs gibt # Nr. des Elements a <- c(1,2,3)! ! # Speichern in einer Variablenc(a,a)!! ! ! ! # Verknüpfen von zwei Variablenc(1,2,a)! ! ! ! # Verknüpfen von Zahlen und Variablenb <- c(1,2,a,c(1,1))! # flexible Verknüpfungen sind möglich

d <- c(eins=1, zwei=3)!# named vector, die Elemente haben Namen

35

Page 37: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Sequenzen # Vektorsequenzen erzeugen

?seqseq(from=1, to=5)! ! # Sequenz von 1 bis 5seq(from=1, to=5, by=.5) # von 1 bis 5 in Schritten von 0.5seq(1,20)!! ! ! # von eins bis 201:20 ! ! ! ! ! # Kurzschreibweise10:20! ! ! ! ! # von 10 bsi 20(-10):10! ! ! ! # von -10 bis 10

?reprep(x=1, times=10)rep(x=c(1,2), times=10)rep(x=c(1,2), times=c(3,5))rep(x=c(1,2), each=2)rep(x=c(1,2), each=2, times=10)rep(x=c(1,2), each=2, length=8)

36

Page 38: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

[1] 10 9 8 7 6 5 4 3 2 1

[1] 1 1 1 1 1 1 1 1 1 1

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

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

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

Your turn!Erzeuge folgende Vektoren, mit jeweils mit 10 Elementen

37

Page 39: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Wichtige Funktionen

# Wichtige Funktionen

a <- c(1.2, 3.3, 6.1, 4.6)max()! ! # Maximum min()! ! # Minimumsqrt()!! # Quadratwurzelround()! ! # rundensum()! ! # Summemean()!! # Mittelwert

length()! # Länge des Vektorsrnorm()! ! # zufällige NV Werte generieren

38

Page 40: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!

39

1. Erzeuge einen zufälligen Vektor mit der Länge 10 (Tip: benutze die Funktion rnorm())

2. Berechne den Mittelwert mit Hilfe der Funktionen sum() und length()

3.! Berechne den Mittelwert noch einmal mit der Funktion mean()

Remember:help.start()

Page 41: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Konstanten

# in R eingebaute Konstanten

LETTERS! ! ! # Großbuchstaben von A bis Zletters! ! ! # Kleinbuchstaben von a bis zmonth.name! ! # englische Monatsnamenmonth.abb!! ! # englische Monatsnamen abgekürztpi!! ! ! ! # die Zahl Pi

40

Page 42: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Strings

# Umgang mit Strings / Zeichen

?paste!! ! ! ! # Konvertierung in characters und verbindenpaste(1)! ! ! ! ! ! ! ! ! ! ! !paste(1:3)paste(1, "A")paste(c(1:3), c("A", "B", "C"))!! # Vektorweisepaste(c(1:3), c("A", "B"))! ! ! # recycling des kürzeren # Vektors bei ungleicher Längepaste(1, "A", sep="")! ! ! ! ! # Seperatorzeichen festlegenpaste(c(1:3), c("A", "B", "C"), sep="_")! # Seperator festlegenpaste(c(1:3), c("A", "B", "C"),

sep="_", collapse=" ")! ! # Trennzeichen zum Kollabieren

41

Page 43: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

"January is month number 1" "February is month number 2" "March is month number 3" "April is month number 4" "May is month number 5" "June is month number 6" "July is month number 7" "August is month number 8" "September is month number 9" "October is month number 10" "November is month number 11" "December is month number 12"

Your turn!Erzeuge folgende Ausgabe in der Konsole, indem

Du paste() und die Konstante month.name nutzt.

42

Page 44: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : vectorwise# Vektorwertiges Arbeiten

a <- 1:3b <- 3:1a - b! ! ! ! ! ! # Vektorweise Substraktiona * b! ! ! ! ! ! # Vektorweise Multiplikation

c(1,2,3,4) - c(1,2)!! ! # Was kommt da raus?

x <- c(4.1, 5.0, 6.35) * 2! !# Multiplikation für !# jedes Elementx + 5:7! ! ! ! ! ! # Addition für jedes Element3:5 - 1:6!! ! ! ! ! # Recycling3:5 - 2:3!! ! ! ! ! # Recycling mit Warnung

43

Page 45: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Zugriff

# Zugriff auf Elemente eines Vektors

b <- c(1,2,3,4,5)! ! ! # numerischer Vektorb[1]! ! ! ! ! ! ! # erstes Elementb[c(1,2,3)]! ! ! ! ! # Elemente 1,2,3b[1:3]!! ! ! ! ! ! # Elemente 1,2,3

44

Page 46: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Editoren nutzen

Windows Tinn-R

R Editor

Mac OS Textmate

Datei wird als .R Datei gespeichert und kann so immer wieder genutzt werden

45

Page 47: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Anwendung BMI I

### BMI BEISPIEL FÜR INTERAKTIVE NUTZUNG ###

68/1.70^2 !! ! ! ! ! # Body Mass Index. myBmi <- 68/1.70^2!! ! ! # Wert in ein Objekt speichernmyBmiweight <- c(68, 50, 88, 73)! # Vektor mit Gewichtsdatenweightheight <- c(1.70, 1.63, 1.90, 1.78) # Vektor mit Größen in mheight68 / 1.70^2! ! ! ! ! ! ! # BMI für die erste Personweight[1]/height[1]^2! ! ! ! # BMI für die erste Person

# Wie berechne ich nun den BMI für alle?bmi <- weight/height^2!! ! ! # vektorwertig, intuitiv?

46

Page 48: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Anwendung BMI II

### Standardabweichung "zu Fuss" berechnen

sum.bmi <- bmi[1] + bmi[2] + bmi[3] + bmi[4]!! # Summe der Wertemean.bmi <- sum.bmi/4! ! # Mittelwertsum(bmi)! ! ! ! ! ! # Summesum(bmi)/4! ! ! ! ! # Mittelwertmean(bmi)!! ! ! ! ! # Mittelwert

length(bmi)! ! ! ! ! ! ! ! ! ! # Länge des Vektorssum(bmi)/length(bmi)! ! ! ! ! ! ! # Durchschnitt

47

Page 49: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Anwendung BMI III (bmi[1] – mean.bmi)^2 + (bmi[2] – mean.bmi)^2 + (bmi[3] – mean.bmi)^2 + (bmi[4] – mean.bmi)^2! # SSQ

(bmi - c(mean.bmi, mean.bmi, mean.bmi, mean.bmi))^2

# wie kann ich es einfacher schreiben ?

bmi2 <- (bmi – mean.bmi)^2! ! # mit recycling!!bmi2.sum <- sum(bmi2)! ! ! ! # SSQn <- 4!! ! ! ! ! ! ! ! # Anzahl Wertesd.bmi <- sqrt(bmi2.sum / n-1)! # Wurzel aus SSQ geteilt # durch n-1n <- length(bmi)! ! ! ! ! # Anzahl Werte berechnen

sd.bmi <- sqrt(sum(bmi – mean.bmi)^2)/n-1)

sd(bmi)! ! ! ! # so ist es natürlich viel einfacher

48

Page 50: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Take along!

Selbst wenn etwas nicht in R nicht existiert, kann man es sich

selber programmieren!

49

Page 51: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

x <- c(-2,-1,-1,0,1,1,2)y <- c(-1,-2,1,0,2,-1,1)

Your turn!Berechne die geschätzte Kovarianz für folgende

zwei Datenreihen in R „zu Fuß“

50

Page 52: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Navigieren

# Projektordner anlegen /RCourse

# Navigieren in Verzeichnissen

getwd() !! ! ! ! # Unterschied Slash/Backslash Windowssetwd() ! ! ! ! ! # Arbeitsverzeichnis setzensetwd("/Users/markheckmann/")

!! # in Verzeichnis RCourse wechselnsetwd("..") ! ! ! ! # ein Verzeichnis runtersetwd("markheckmann")! ! # ein Verzeichnis hochsetwd("../markheckmann")! # eins runter und wieder eins hoch

51

Page 53: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Lege ein Verzeichnis RCourse an (nicht über R) und setze es als neues Arbeitsverzeichnis in R. Lege einen Unterordner data an und wechsele in ihn. Wechsel anschließend wieder in den übergeordneten Ordner.

52

Page 54: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Arbeitsbereich sichern / laden

### Workspace speichern ###

?save.image()

save.image("erster Kurstag.RData")!# Arbeitsbereich speichern

ls()! ! ! ! ! ! # Alle Objekte im Arbeitsbereich !# anzeigenrm()! ! ! ! ! ! # Objekte aus Arbeitsbereich löschenrm(list=ls)! ! ! ! # Alle Objekte aus Arbeitsbereich löschen

load("erster Kurstag.RData")!! # den zuvor gespeicherten ! # Arbeitsbereich ladenls()! ! ! ! ! ! ! ! ! # Objekte sind wieder da

53

Page 55: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Vektoren I

### vector – eindimensionales Datenobjekt ###

a <- c(T, F, T, F)!! ! ! # logischer Vektora <- c(1,2,3,4,5)! ! ! ! # numerischer Vektora <- c("A", "B", "C")! ! ! # character Vektor

c(TRUE, 2, FALSE)! ! ! ! # innerhalb eines Vektors stets # nur ein Typ möglich

c(T, "A", 1)!! ! ! ! # Automatische Umwandlung auf # niedrigstes mögliches Datenniveau

54

Page 56: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Vektoren II

# Zugriff auf eine Elemente durch eckige Klammern

a[1]! ! ! ! # Zugriff auf erstes Element des Vektorsa[c(1,2)]!! ! # Zugriff auf die ersten beiden Elementea[c(2,1)]! !! # umgekehret Reihenfolge

a[c(T,F,F)]! ! # Zugriff durch TRUE/FALSE Vektora[c(T,F)]!! ! # Wieso 2 Elemente?

b <- c(a=1, b=2, c=3)! # Erstellen eines "named" vectorsnames(b)! ! ! ! !# Namen der Vektorelemente anzeigenb["c"]!! ! ! ! !# Zugriff nun auch über den Namen des !# Elements möglich

a[-1]! ! ! ! ! # negatives Indizierena[c(-1,-2)]! ! ! ! # negatives Indizieren

55

Page 57: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Vektoren III

x <- c(NA, 1, 2, NA, 99)! # Vektor mit missing values (NA)x == 1!! ! ! ! ! !# welcher Eintrag ist gleich 1x > 1! ! ! ! ! ! !# welche Einträge sind größer 1x == NA! ! ! ! ! !# welcher ist NA? so falschis.na(x)! ! ! ! ! !# Funktion is.na() nutzenwhich(is.na(x))!! ! !# Einträge mit welchem Indizes sind NA?x[!is.na(x)]!! ! ! !# Einträge auswählen, die nicht NA sindx[x==99] <- NA! ! ! !# Einträge der Zahl 99 mit NA ! ! ! ! ! ! ! ! # überschreiben

56

Page 58: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Oftmals wird 99 oder 999 als Platzhalter für missing values benutzt. Ersetze alle Werte des Vektors, die 99 oder 999 sind mit NA.

x <- c(1,4,3,99,4,3,999,99,3,6,999)

Your Turn!

57

Page 59: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

v <- 1:10

Setze alle Elemente des Vektors v, die kleiner gleich 3 sind auf 0, alle die zwischen 4 und 7 sind auf 1 und alle größer sieben auf NA.

[1] 0 0 0 1 1 1 1 NA NA NA

Your Turn!

58

Page 60: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix I

### matrix – zweidimensionales Datenobjekt ###

?matrixmatrix(1:12, nrow=3, ncol=4)!! ! ! # Matrix erstellenmatrix(1:12, nrow=3, ncol=4, byrow=TRUE)! # Matrix reihenweise

e <- matrix(c(1,0,0,0,1,0,0,0,1), 3, 3)! ! # Einheitsmatrixdiag(3)! ! ! ! ! ! ! # Einheitsmatrix per Funktion

is.matrix()

59

Page 61: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Erzeuge eine Matrix M mit 20 Spalten und den folgenden Zeileneinträgen:

Zeile 1: 1, 2, ..., 20 Zeile 2: Zahlen zwischen 2 und 40 mit Abstand 2 Zeile 3: Spalte 1-10 mit Eintrag 1, Spalte 11-20 mit Eintrag 2 Zeile 4: 1,1,2,2,1,1,2,2,... Zeile 5: 1,1,2,2,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6 Zeile 6: 1,2,2,2,3,3,3,3,3,3,1,2,2,2,3,3,3,3,3,3

Quelle: Foliensatz von Peter Ruckdeschel / Matthias Kohl. R/S-plus für Einsteiger und Fortgeschrittene

Your Turn!

60

Page 62: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix II# auf Matrixelemente zugreifen

x[1,1]!! ! ! ! # Element erste Zeile, erste Spaltex[ ,1]!! ! ! ! # komplette erste Spaltex[ ,1:2]! ! ! ! # komplette erste und zweite Spaltex[1, ]!! ! ! ! # komplette erste Zeilex[1:2, 2:3]! ! ! # erste & zweite Zeile, zweite & dritte # Spaltex[c(1,3), c(2,4)]

x[-1, -2]!! ! ! # negatives Indizieren; ohne Zeile 1 # und Spalte 2

x > 5! ! ! ! ! # welche Elemente sind größer 5is.na(x)! ! ! ! # Welche Einträge der Matrix sind NA?

61

Page 63: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix III

# Matrixelemente verändernx[1,1] <- 10!! ! # Zahl zu einer Zelle zuweisenx[ ,1] <- 10!! ! # Zahl zu Spalte zuweisen mit # Recyclingx[1, ] <- 10!! ! # Zahl zu Zeile zuweisen

x[1, 2:3] <- c(100,100)! # Zwei Zellen verändern

62

Page 64: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix IV# Zeilen und Spaltennamen hinzufügen

colnames(x)! ! ! ! # Spaltennamen anzeigenrownames(x)! ! ! ! # Zeilennamen anzeigencolnames(x) <- c("Winter", "Frühling", "Herbst", "Winter")! # Spaltennamen setzenrownames(x) <- c("A", "B", "C")! # Zeilennamen setzen

x[, "Winter"]! ! ! ! ! # Zugriff über Namenx[, c("Winter", "Frühling")]!x[, c(1, "Winter")]!! ! ! # geht nicht, da 1 in einem # String konvertiert wird!

rownames(x) <- NULL # Zeilennamen löschen

colnames(m)! ! ! ! ! # Spaltennamencolnames(m)[4]! ! ! ! # Viertes Elementcolnames(m)[4] <- "April"!# Viertes Element verändernm 63

Page 65: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov DecWoche 1 0 0 1 1 0 3 0 -1 0 -1 -1 0Woche 2 -2 -1 1 0 0 0 1 1 2 -2 -1 -1Woche 3 -1 2 -1 -1 -3 0 3 3 1 -1 0 -1Woche 4 1 0 -2 0 0 0 1 2 1 0 0 0Woche 5 1 1 1 -2 0 -1 1 0 -2 0 0 -2Woche 6 0 0 0 -1 -1 0 0 1 1 1 -1 0Woche 7 1 1 -1 -1 -1 0 0 0 0 -1 1 -1Woche 8 0 1 -3 0 -1 1 2 0 -1 0 0 0Woche 9 -1 0 0 0 -1 0 0 0 2 -1 0 1Woche 10 -1 1 1 0 0 1 0 0 0 1 0 1Woche 11 0 -2 0 0 0 0 0 0 1 0 1 0Woche 12 -1 0 1 -2 -1 -1 0 2 1 1 1 -2Woche 13 2 3 -1 -1 2 1 0 0 1 2 0 -1Woche 14 0 0 0 1 -1 -1 -2 -1 0 1 1 1Woche 15 -1 0 0 1 0 1 -1 0 -1 0 -1 -2Woche 16 0 1 0 -1 0 2 0 -1 -2 -2 -2 -2Woche 17 -1 0 0 -1 0 3 1 1 0 -1 -2 0Woche 18 0 1 -1 0 1 1 -2 -1 2 0 -1 1Woche 19 -3 0 1 1 -2 -2 0 0 1 -2 1 -1Woche 20 2 1 0 -1 2 0 0 1 1 0 -1 2

Your turn!Erstelle folgende Matrix (mit zufälligen Werten):

Tip: nutze rnorm() und round()

64

Page 66: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix V

# Reihenfolge der Spalten der Matrix ändernm[, c(1,3,5,7,9,11,2,4,6,8,10,12)]!!index <- c(1,3,5,7,9,11,2,4,6,8,10,12)m[, index]m[, c(12:1)]

65

Page 67: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix VI# Matrizen verbindencbind ! ! ! # verbinden der Spalten (gleiche Zeilenanzahl # nötig)cbind(m, m)! # m mit m verbinden!! !cbind(m[1:3, 1:3], m[1:3, 9:12])!cbind(m[1:2, 1:3], m[1:4, 1:3])!! # Ungleiche Zeilenanzahl

rbind # verbinden der Zeilen (gleiche # Spaltenanzahl nötig)rbind(m, m)! ! ! ! ! # m zweimal untereinanderrbind(m[1:3, 1:3], m[18:20, 1:3])! # Oberen und unteren # Teil von m verbindenrbind(m[1:3, 1:3], m[18:20, 3:5])! # Achtung Spaltennamen der # ersten Matrix werden genutzt

66

Page 68: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

1) Erzeuge eine Matrix M mit 7 Spalten und 7 Zeilen aus zufälligen NV-Werten, die auf eine Stelle gerundet werden.

2) Die Zellen sollen nun durch 999 ersetzt werden:(Zeile, Spalte) (1,1) (4,3) (4,4) (1,7)

3) Alle Einträge die 999 enthalten sollen NA gesetzt werden.

Quelle: Foliensatz von Peter Ruckdeschel / Matthias Kohl. R/S-plus für Einsteiger und Fortgeschrittene

Your Turn!

67

Page 69: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

68

Page 70: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

69

DAY 2 From ABC to sentences - getting started with data analysis

Page 71: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

70

Page 73: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Monty-Hall-Dilemma

72

Angenommen Sie befinden sich in einer Spielshow und haben die Wahl zwischen drei Toren. Hinter einem Tor ist ein Auto, hinter den anderen sind Ziegen. Das Auto und die Ziegen sind vor der Show zufällig hinter die Tore verteilt worden. Die Regeln der Spielshow sind folgende: Nachdem Sie ein Tor gewählt haben bleibt dieses zunächst geschlossen. Der Showmaster Monty Hall, der weiß was sich hinter den Toren befindet, muss nun eine der beiden verbleibenden Tore öffnen, und hinter dem von ihm geöffneten Tor muss sich eine Ziege befinden. Wenn hinter beiden verbleibenden Toren jeweils eine Ziege steht, öffnet er eines der beiden Tore zufällig. Nachdem Monty Hall ein Tor mit einer Ziege geöffnet hat fragt er Sie, ob Sie bei Ihrer ersten Wahl bleiben oder zum letzten verbleibenden Tor wechseln möchten. Nehmen Sie an Sie wählen Tor 1 und der Showmaster öffnet Tor 3 mit einer Ziege. Er fragt Sie dann: „Möchten Sie zu Tor 2 wechseln?“ Ist es zu Ihrem Vorteil, Ihre Wahl zu ändern?

Page 74: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code : Matrix VII### Rechnen mit Matrizen

A <- matrix(c(1,3,2,5,2,3,1,2,3), ncol=3)At(A)! ! ! ! ! # transponieren einer MatrixA + A! ! ! ! ! # Zellenweise AdditionA * 4! ! ! ! ! # Jede Zelle mal vierA * A! ! ! ! ! # Zellenweise MultiplikationA^2!A %*% A! ! ! ! # MatrixmultiplikationAinv <- solve(A)! # Inverse einer quadratischen MatrixA %*% Ainv! ! ! # Inverse Mal Matrix = EinheitsmatrixAinv %*% A! !A %*% solve(A)

rbind(A, A)! ! ! ! # Zeilen verbindencbind(A, A)! ! ! ! # Spalten verbindencbind(A, rep(1,3))!! # eine Spalte anhängen

rbind(A, A) %*% cbind(A, A)! # Beispiel 73

Page 75: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

74

Page 76: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

74

Geek Humor!

Page 77: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

x <- c(-2,-1,-1,0,1,1,2)y <- c(-1,-2,1,0,2,-1,1)

Beachte: die Designmatrix X enthält eine Spalte mit Einsen für die Konstante!

Your turn!Berechne den Vektor b der Regression y

regrediert auf x in Matrizenform

75

Zur Kontrolle:m <- lm(y ~ x)summary(m)

Page 78: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Faktoren ### factors - für qualitativ unterschiedliche Merkmale

val <- c(1,2,1,1,1,2,3,3)! ! ! ! # neuer Vektorf <- factor(val)fg <- factor(val, levels=1:5)! ! ! # factor erzeugen mit g ! # Levels 1 bis 5

levels(f)! ! ! ! ! ! ! # Bezeichnung der Levelslevels(f) <- c("Treatment 1", "Treatment 2", "Control") f !! # Neue Level Bezeichnungen

factor(c("male", "female", "male", "male")

# Umwandeln eines vector in factorx <- c(1,1,2,2,3,3)! ! ! # neuer Vektorx <- as.factor(x)!! ! ! # umwandeln in factorxlevels(x)! ! ! ! ! !# Bezeichnung der Levelslevels(x) <- c("Treatment 1", "Treatment 2", "Control") ! # Neue Level Bezeichnungen 76

Page 79: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

[1] Gruppe 4 Gruppe 4 Gruppe 4 Gruppe 4 Gruppe 3 Gruppe 3 Gruppe 3 Gruppe 2 Gruppe 2 Gruppe 1Levels: Gruppe 1 Gruppe 2 Gruppe 3 Gruppe 4

Your turn!Erzeuge einen factor der folgenden Form:

77

Page 80: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: data frames Idata frames

In Matrizen müssen alle Einträge vom selben Typ sein. Z. B. alles numerisch oder alles characters. data frames können pro Spalte unterschiedliche Typen enthalten (Faktoren, numerische Werte, Zeichenketten). Sie müssen jedoch stets dieselbe Anzahl von Einträgen pro Spalte aufweisen.

treat <- c(20, 21, 23, 18, 30)control <- c(19, 21, 20, 23, 18)

d <- data.frame(treat, control)d$treat! ! ! ! ! ! ! # Zugriff mit Dollaroperatord[["treat"]]!! ! ! ! # gibt Vektor zurückd[,1]d[[1]]

78

Page 81: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: data frames II### Zugriff auf Elemente eines data frames

d["treat"]! ! ! ! # gibt data frame zurückd[1]

d[1:3, ]! ! ! ! ! # Zeilen 1 bis 3, alle Spaltend[1:3, 1:2]! ! ! ! # Zeilen 1 bis 3, Spalten 1 und 2d[1:3, c("treat", "control")]! # identisch

d[-1,]!! ! ! ! ! # ohne erste Zeiled[-(1:2), -1]! !# ohne erste beiden Zeilen, ohne !# erste Spalte

### Erweiterung des data frames um einen factor

f <- factor(c("m", "m", "w", "w", "w"))data.frame(Geschlecht= f, treat, control)

79

Page 82: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Geschlecht Intervention IQ BMI1 m Control 94.8 22.52 m Treat 113.1 19.63 m Placebo 107.1 24.34 m Control 108.8 9.25 m Treat 102.4 24.56 m Placebo 104.8 23.07 m Control 90.6 17.98 m Treat 102.9 18.09 m Placebo 105.4 17.710 m Control 105.4 14.411 w Treat 107.9 16.012 w Placebo 108.8 18.913 w Control 93.7 19.514 w Treat 113.8 19.415 w Placebo 70.7 16.416 w Control 79.1 21.817 w Treat 116.5 22.318 w Placebo 106.3 19.219 w Control 133.6 20.420 w Treat 79.2 23.3

Your turn! konstruiere folgenden data frame:

(IQ normalverteilt um 100 mit sd=15; BMI normalverteilt um 20, sd=5)

80

Page 83: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Subsets I### data frames subsetting

d[4]! ! ! ! ! ! # Auswahl der vierten Spalted[1:3]!! ! ! ! ! # Spalten 1 bis 3d[c("Geschlecht", "IQ")]! # Nur Geschlecht und IQd[-1]! ! ! ! ! ! # alle Spalten bis auf ersted[c(T,F,T,F)]! ! ! ! # Jede zweite Spalted[c(T, F)]! ! ! ! ! # Jede zweite Spalted[c(F, T)]! ! ! ! ! # Jede zweite Spalte

d["IQ"] > 107! ! ! ! # Welche IQ Werte sind > 107index <- d["IQ"] > 107!! # in Index speichernd[index, ]! ! ! ! ! # Zeilen auswählen mit IQ > 107cbind(d, d$IQ > 107 )! ! # Spalte anfügen, die zeigt, ob

# IQ Werte größer 107 sind

81

Page 84: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

IQ BMI Geschlecht Intervention1 109.9 18.9 m Control3 101.2 18.7 m Placebo5 111.4 14.7 m Treat7 104.6 17.3 m Control9 103.7 24.9 m Placebo11 97.1 16.0 w Treat13 89.7 28.7 w Control15 103.2 20.5 w Placebo17 86.6 29.4 w Treat19 89.6 28.3 w Control2 109.1 18.7 m Treat4 110.1 18.0 m Control6 110.3 22.2 m Placebo8 123.5 23.2 m Treat10 107.6 17.8 m Control12 104.2 20.1 w Placebo14 69.2 21.1 w Treat16 96.9 31.0 w Control18 103.9 14.5 w Placebo20 96.4 17.5 w Treat

Your turn!Baue den vorher erzeugten Datensatz um: a) erst die

ungeraden, dann die geraden Zeilen b) neue Spaltenreihenfolge

82

Page 85: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Subsets IInames(d)! ! ! ! ! # Spaltennamen des Datensatzesnames(d)=="IQ"! ! ! # welche Namen sind gleich "IQ"d[names(d)=="IQ"]! ! # subsetting mit logischem Vektornames(d)!="IQ"! ! ! # welche Namen sind nicht "IQ"?d[names(d)!="IQ"]! ! # Spalten, die nicht "IQ" sind auswählend[ ,names(d)!="IQ"]!! # Identisch

index <- d$IQ > 100 & d$Geschlecht=="m" ! # welche Fälle sind Männer mit einem IQ > 100d[index, ]! ! # auswählend[d$Intervention=="Control" | d$Intervention=="Treat",]! ! ! # Intervention ist Control oder Treatd[d$Intervention %in% c("Control", "Treat"),]! ! ! ! ! # alternative Schreibweise

83

Page 86: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Geschlecht Intervention IQ BMI11 w Treat 123.8 21.514 w Treat 96.3 28.517 w Treat 104.3 20.420 w Treat 94.8 14.5

Your turn!Wähle aus dem Datensatz alle Fälle aus, die weiblich sind

und zur Treatmentgruppe gehören

84

Page 87: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Geschlecht Intervention IQ BMI1 m Control 109.9 18.92 m Treat 109.1 18.74 m Control 110.1 18.05 m Treat 111.4 14.76 m Placebo 110.3 22.28 m Treat 123.5 23.210 m Control 107.6 17.8

Your turn!Wähle aus dem data frame jene Fälle aus, die einen IQ innerhalb des

Bereichs 90-110 haben und zugleich Männer sind

85

Page 88: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: subset()

### subsets mit subset() erstellen

?subset! ! ! ! ! ! ! ! ! # die subset Funktionsubset(d, subset=IQ < 100 & Geschlecht=="m")!! !

# Logische Auswahlsubset(d, IQ > 120 | IQ < 80)! ! # Logische Auswahl

subset(d, select=c(IQ, Geschlecht))! # Variablenauswahl mit selectsubset(d, select=c("IQ", "Geschlecht")) # identisch

subset(d, IQ > 120, select=c(IQ, Geschlecht))! # kombiniert

86

Page 89: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Geschlecht Intervention IQ BMI1 m Control 102.5 16.72 m Treat 102.3 18.93 m Placebo 101.8 18.25 m Treat 106.7 21.010 m Control 118.9 15.711 w Treat 123.8 21.512 w Placebo 104.8 24.413 w Control 105.7 13.115 w Placebo 100.7 19.217 w Treat 104.3 20.419 w Control 105.0 10.8

Your turn!Wähle aus dem Datensatz mit subset alle Fälle aus, die einen IQ

größer als der Durchschnitt haben, der berechnet wird.

87

Page 90: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Geschlecht Intervention IQ BMI6 m Placebo 84.5 22.27 m Control 80.7 13.810 m Control 118.9 15.711 w Treat 123.8 21.516 w Control 78.9 25.6

Your turn!Wähle aus dem Datensatz mit subset alle Fälle aus, die a) einen IQ

außerhalb des Intervalls [90-110] haben.

... und b) zugleich weiblich sind

Geschlecht Intervention IQ BMI11 w Treat 123.8 21.516 w Control 78.9 25.6

88

Page 91: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

packages laden

R-Base installationbasic packages

My ComputerDie R-base Installation enthält sog.packages, in denen bestimmte Funktionen enthalten sind.

packages müssen erst geladenwerden, bevor die in ihnen enthaltenenFunktionen benutzt werden können.

Einige packages werden automatisch geladen, andere müssen nach Bedarfgeladen werden.

> library(package.name)

89

Page 92: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

R-Base installationbasic packages

>1500 additional packages My Computer

on demand

CRAN server

Installation per Kommandozeile> install.packages("package.name")

oder per R-Konsolenmenü

packages installieren

90

Page 93: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

packages installieren

### packages installieren und laden

install.packages("plyr")! # plyr installierenlibrary(plyr)! ! ! ! # package ladendetach(package:plyr)! ! # package entfernen

describe()! ! ! ! ! # Funktion existiert nichtinstall.packages("psych")!# psych installierenlibrary(psych)! ! ! ! # Paket ladendescribe(rnorm(100))! ! # nun existiert sie

search() !# packages im Suchpfad

91

Page 94: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Daten einlesen I

### EINLESEN VON DATEN IN R ###

?read.csv!! ! ! # Einlesen einer .csv Datei (englisch)?read.csv2! ! ! # Einlesen einer .csv Datei (deutsch)?read.table # für .txt Dateien?read.spss # für .sav Dateien?spss.get # im Hmisc package

setwd("/Users/markheckmann/data") ! ! ! ! ! ! # Arbeitsverzeichnis wechseln

df <- read.table("ngo.txt") # mieten.txt einlesenhead(df) # Zeilen haben keine Überschriftdf <- read.table("ngo.txt", header = TRUE) # Einlesen mit header=TRUEhead(df)

92

Page 95: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Daten einlesen II

?read.csv2 ! ! ! ! # für deutsche .csv Dateiendf <- read.csv2("mieten.csv")head(df)

library(Hmisc)! ! !wow <- spss.get("wow.sav", use.value.labels=TRUE)

library(foreign)wow <- read.spss("wow.sav", to.data.frame=T)

93

Page 96: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Lies den Datensatz wow_excerpt.csv ein und

speichere ihn in der Variablen df

94

Page 97: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: attach data

# Objekte/Datensätze in den Suchpfad hängen

K1!! ! ! ! ! # Objekt unbekanntattach(wow)! ! ! # Datensätze in den Suchpfad hängenK1!! ! ! ! ! # Objekt nun im Suchpfaddetach(anscombe)! # Datensatz aus Suchpfad entfernenK1!! ! ! ! ! # Objekt wieder unbekannt

search() # packages im Suchpfad

95

Page 98: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Datensatz wow_excerpt.csvGeschlecht 1=keine Angabe , 2=männlich, 3=weiblich Alter 1=keine Angabe, 2=unter 18, 3=18-29, 4=30-40, 5=41-50 , 6=über 50

Zeitaufwand (pro Woche)1=keine Angabe, 2=weniger als 7 Stunden, 3=weniger als 14 Stunden 4=weniger als 20 Stunden, 5=20-30 Stunden, 6=30-40 Stunden, 7=mehr als 40 Stunden

K1 Kontrollverlust: Ich sage mir oft: „Nur noch ein paar Minuten“ und kann dann doch nicht aufhören

K2K3K4

E1 Entzugserscheinungen: Ich beschäftige mich auch während der Zeit, in der ich nicht WoW spiele, gedanklich sehr viel mit dem Spiel.

E2E3E4

T1 Toleranzentwicklung: Mittlerweile verbringe ich mehr Zeit bei WoW als zu Beginn meiner Online- Aktivitäten.

T2T3T4

AL1 Arbeit/Leistung: Meine Leistungen in der Schule/im Beruf leiden unter dem Spielen bei WoW.

Al2AL3Al4

nKsB1 Soziale Beziehungen: Seitdem ich WoW spiele, haben sich einige Freunde von mir zurückgezogen.

nKsB2nKsB3nKsB4

96

Page 99: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

EDA - die Daten anschauen### Anschauen der WoW Daten ###

head(wow)!! ! ! # die ersten Zeilennames(wow)! ! ! # Variablennamen

library(psych)! ! # library psych ladendescribe(wow)! ! # Überblick über Datensatz

library(Hmisc)hist.data.frame(wow[1:9])!! # Histogramme der ! ! ! ! ! ! ! ! ! # ersten neuen Variablenhist.data.frame(wow[10:17])! # Histogrammehist.data.frame(wow[18:23])! # Histogramme

multi.hist(wow[1:9])! ! ! # aus psych

pairs(attitude)pairs.panels(attitude)!! ! # aus psychpairs.panels(attitude, lm=TRUE)!

97

Page 100: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Lies den Datensatz wow_excerpt.csv ein und

speichere ihn in der Variablen df

Hänge df dann in den Suchpfad, so dass man auf die Variablen ohne Angabe des Datensatzes zugreifen kann. Entferne den Datensatz dann wieder aus dem Suchpfad.

Installiere und lade dann das psych package und die nutze die darin enthaltene Funktion describe(),

um einen ersten Eindruck von den Daten zu bekommen. Danach „entlade“ das package psych.

98

Page 101: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Deskriptive Statistiken

### Deskriptive Statistiken ###

summary(wow)!! ! # summaries der Variablenattach(wow)! ! ! ! # in den Suchpfad hängen

library(psych)! ! ! # psych ladendescribe(wow)! ! ! # Basisstatisiken der Variablen

describe.by(wow[4:11], Geschlecht)!! # Basisstatisiken pro Faktorstufe von Geschlecht

describe.by(wow[4:11], list(Geschlecht, Alter)) # Basisstatisiken pro Faktorstufe von Geschlecht # und Alter

detach(wow)! ! ! ! # Aus dem Suchpfad entfernen

99

Page 102: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

crosstabs I

### Häufigkeiten ###

# One Way Tableattach(wow)table(Alter)!! # Häufigkeitstabelle von Alter

# Two Way Tablemytable <- table(Geschlecht, Alter)! # Häufigkeitstabellemytableftable(mytable)!! ! ! # ftable zur schöneren Darstellung

prop.table(mytable) ! ! # Zellen Prozenteprop.table(mytable, 1) ! ! # Zeilen Prozenteprop.table(mytable, 2) ! ! # Spalten Prozente

100

Page 103: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

crosstabs II

# Three Way Tablesmt <- table(Geschlecht, Alter, Zeitwaufwand)ftable(mt)

# Tables mit CrossTablelibrary(gmodels)CrossTable(Geschlecht, Alter)CrossTable(Geschlecht, Alter, format="SPSS")

101

Page 104: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Mache folgende Häufigkeitstabellen für den wow Datensatz mit CrossTable:1) Alter gegen Zeitaufwand2) Geschlecht gegen Zeitaufwand

Lese danach den Datensatz ngo.csv ein und erstelle a) Kreuztabelle für jahrgang vs. geschlb) Erzeuge Histogramme und Scatterplots für die Variablen mathe, englisch, deutsch

102

Page 105: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

WoW Fragebogen

103

Page 106: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Missings NA setzen

# Gibt es „keine Angabe“ Antworten (wie k.A.), # die noch nicht als Missing kodiert sind?

attach(wow)

table(Geschlecht)! ! ! ! !! # Häufigkeitstabellewow$Geschlecht[Geschlecht==1] <- NA!! ! # 1 zu NA umkodierentable(Geschlecht)

table(Alter)!! ! ! ! ! ! ! ! # Häufigkeitstabellewow$Alter[wow$Alter==1] <- NA! ! ! ! # 1 zu NA umkodieren

detach(wow)

104

Page 107: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Rekodieren### Rekodieren ###

# verschiedene Funktionen zum Rekodieren

library(car)wow$K1 <- recode(wow$K1, "1=6; 2=5; 3=4; 4=3; 5=2; 6=1")

library(memisc)!!recode(wow$K1,! ! # rekodieren von K1 A = 1 <- 4, B = 2 <- 3, C = 3 <- 2, D = 4 <- 1)

detach(package:memisc)

105

Page 108: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Faktor definieren# Sind alle qualitativen Merkmale als Faktoren definiert?

wow$Geschlechtwow$Geschlecht <- as.factor(wow$Geschlecht)! # in Faktor umwandelnlevels(wow$Geschlecht) <- c("m", "w")! ! ! # F-stufen benennen

wow$Alterwow$Alter <- as.factor(wow$Alter)! ! ! ! # in Faktor umwandelnlevels(wow$Alter) <- ! ! ! ! ! ! ! ! # F-stufen benennen! ! c("unter 18", "18-29", "30-40", "41-50", "über 50" )!

wow$Zeitaufwandwow$Zeitaufwand <- as.factor(wow$Zeitaufwand)# in Faktor umwandelnlevels(wow$Zeitaufwand) <- ! ! ! ! ! ! # F-Stufen benennen! c("<7 Std.", "< 14 Std.", "< 20 Std.", ! "20-30 Std.", "30-40 Std.", "> 40 Std.") 106

Page 109: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Lies den Datensatz wow_excerpt.csv ein und durchlaufe die Schritte:a) missings NA setzenb) Alle qualitativen Merkmale in Faktoren umwandeln und die Faktorstufen benennen

107

Page 110: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

108

Page 111: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

109

Ein junger Mann ohne Risikofaktoren kommt in die AIDS-Beratung und informiert sich über die gängigenHIV-Tests (ELIZA plus Western-Blot). Der Arzt sagt: „Die beiden kombinierten AIDS-Tests entdecken mit 99,9% Sicherheit das HI-Virus (Sensitivität) und sind sogar mit 99,99% spezifisch, d.h. eine falsch positive Diagnose kommt nur in 0,01% der Fälle vor.“ In der Gruppe, zu der der junge Mann gehört, ist HIV mit 0,01% Grundrate nur wenig verbreitet. Der Test fällt positiv aus! Wie wahrscheinlich ist es nun, dass der Mann HIV hat?

Beratungsgespräch I

Page 112: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

110

Von 100.000 Männern ohne Risikofaktoren sind nur etwa 10 mit dem HI-Virus infiziert (Grundrate). Die beiden kombinierten AIDS-Tests entdecken mit 99,9% Sicherheit das AIDS-Virus (Sensitivität), d.h. würde man diese hunderttausend Männer testen, dann würden 10 von 10 HIV-Positiven einen po-sitiven Befund bekommen. Von den 99.990 nicht-infizierten Männern fällt der Test bei 0,01% dieser Personen, also bei un- gefähr 10 Personen, falsch-positiv aus. Wie wahrscheinlich ist eine HIV-Infektion, wenn der Mann positiv testet?

Beratungsgespräch II

Page 113: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

111

Gig

eren

zer,

G. (

2008

). D

as E

inm

alei

ns d

er S

keps

is: Ü

ber

den

richt

igen

U

mga

ng m

it Z

ahle

n un

d Ri

siken

. Ber

lin: B

erlin

er T

asch

enbu

ch-V

erl.

Page 114: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Buchtips

112

Gigerenzer, G. (2008). Das Einmaleins der Skepsis: Über den richtigen Umgang mit Zahlen und Risiken. Berlin: Berliner Taschenbuch-Verl.

Dubben, H.-H., & Beck-Bornholdt, H.-P. (2006). Der Hund, der Eier legt: Erkennen von Fehlinformation durch Querdenken. rororo, 62196. Reinbek bei Hamburg: Rowohlt.

Page 115: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

113

Page 116: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

114

DAY 3 SPSS - das A fehlt nicht umsonst

„und dann rechnen wir mit dem Taschenrechner weiter... !“

Page 117: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Variablen berechnen# Neue Variablen berechnen

wow$KO <- (wow$K1 + wow$K2 + wow$K3 + wow$K4)/4!! # Skala bilden über vier Werte K1-K4

?transform! ! ! # zur Berechnung von Variablenwow <- transform(wow, KO=(K1 + K2 + K3 + K4)/4)!! # neue Variable KO mit tranformwow <- transform(wow, EN=(E1 + E2 + E3 + E4)/4)!! # neue Variable EN wow <- transform(wow, TO=(T1 + T2 + T3 + T4)/4)!! # neue Variable TO wow <- transform(wow, AL=(AL1 + AL2 + AL3 + AL4)/4) # neue Variable AL wow <- transform(wow, NK=(nKsB1 + nKsB2 + nKsB3 + nKsB4)/4)! # neue Variable NK

115

Page 118: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Lies den Datensatz wow_excerpt.csv ein und durchlaufe die Schritte:c) Skala berechnend) einen Gesamtwert berechnen über die fünf Skalen

namens „score“, der der Durchschnitt der Skalen KO, EN, TO, AL, NK ist.

116

Page 119: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Pakete installieren

117

• HH

• car

• sm

• gmodels

• nortest

• perturb

• sfsmisc

• QuantPsyc

• TeachingDemos

• gplots

• lmtest

Page 120: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Formulas I### Formulas in R ###Dienen der Beschreibung von statistischen ModellenSind wie kleine eigene Sprache

y ~ model!

Dabei trennt die Tilde1 ("~") die auf der linken Seite angegebene Zielvariable (abhängige Variable, response) von dem auf der rechten Seite angegebenen Rest des Modells (model).

# Operatoren der Formelsprache+! Hinzunahme einer Variablen -! Herausnahme einer Variablen (-1 für Achsenabschnitt) :! Wechselwirkung/Interaktion von Variablen *! Hinzunahme von Variablen und deren Wechselwirkungen .! alle Variablen aus dem Datensatz in das Modell aufnehmen^ !Interaktionen bis zur Ordnung i aufnehmen

118

Page 121: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Formulas II

y ~ x1 ! ! ! ! # Modell mit einem Regressory ~ x1 + 1 !! ! # identischy ~ x1 - 1 ! ! ! !# ein Regressor ohne Konstante

y ~ x1 + x2 ! # zwei Regressoren, keine Interaktiony ~ x1 + x2 + x1:x2 ! # zwei Regressoren plus Interaktion y ~ x1 * x2! ! ! ! # identisch

y ~ .! ! ! ! ! ! # alle Variablen aufnehmen

y ~ x1 + I(x1^2)! ! # quadratischer Term

119

Page 122: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

z-Test

120

# Datensatz ladenx <- read.csv2("test.csv")x$gr <- as.factor(x$gr)attach(x)

# z-Test

library(TeachingDemos)z <- rnorm(25, 99, 5)

d <- density(z)!! # Dichteschätzungplot(d)abline(v=100)

z.test(z, 100, 5) z.test(z, 100, 5, alternative="g")z.test(z, 100, 5, alternative="l")

Page 123: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!IQ ist auf einen Mittelwert von100 mit einer Standardabweichung von 15 normiert (Population). Teste jeweils per z-Test, ob eine der Gruppen (gr) von dem Populationsmittel abweicht.

121

Page 124: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

t-Test

122

# t-Test

library(sm)! ! ! !g1 <- x[gr==1,]$iqg2 <- x[gr==2,]$iq

plot(iq ~ gr)! ! ! ! ! # Boxplotsm.density.compare(iq, gr)! # Dichte vergleichen

t.test(g1, g2)! ! ! ! ! ! # unabhängig, zweiseitigt.test(g1, g2, alternative="g")!# einseitig greatert.test(g1, g2, alternative="l")!# einseitig lesser

t.test(g1, g2, paired=TRUE)! ! # abhängig, zweiseitigt.test(iq ~ gender)!! ! ! ! # Formel interface

Page 125: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Mache jeweils einen t-Test auf Mittelwertsunterschiede zwischen allen Stufen des Faktors gr und gender bezüglich der Variablen IQ.

123

Page 126: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Varianzhomogenitätstests

# Varianzhomogenität

library(car)!leveneTest(iq ~ gr, data=x)!! ! # Levene Testm <- lm(iq ~ gr, x)leveneTest(m)! ! ! ! ! ! ! ! # mit lm Objekt

bartlett.test(iq ~ gr, data=x)! !! ! ! ! ! ! ! ! ! ! ! ! ! # Bartlett Test

library(HH)hov(iq ~ gr, data=x)! ! ! ! ! # Brown-Forsythplot.hov(iq ~ gr, data=x)! ! ! # visuelle Inspektion

Page 127: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Normalverteilungstests

# Normalverteilungstests

qqnorm(iq)qqline(iq)

shapiro.test(iq)! # Shapiro-Wilk Test

library(nortest)lillie.test(iq)!! # Lilliefors / KS-Test

# Tip: weitere Tests im nortest package

Page 128: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

One-Way-ANOVA I

126

### Einfaktorielle Varianzanalyse

library(sm)plot(iq ~ gr)! ! ! ! ! # Box plotsm.density.compare(iq, gr)! # Dichten vergleichen

library(gplots)plotmeans(iq ~ gr)!! ! ! # mean plot mit CIs

m <- aov(iq ~ gr, x)! ! ! # ANOVAsummary(m)! ! ! ! ! ! # Zusammenfassung

Anova(m)! ! ! ! ! ! # in package carAnova(m, white=TRUE)! ! # bei Heteroskedastizität

Page 129: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Posthoc-Tests

# Post-hoc Tests

plotmeans(iq ~ gr)!# mean plot mit Konfidenzgrenzen

pairwise.t.test(iq, gr)

pairwise.t.test(iq, gr, p.adj = "none")! !# ohne Alpha Korrektur

pairwise.t.test(iq, gr, p.adj = "none", pool=F)! !# ohne Alpha Korrektur

pairwise.t.test(iq, gr, p.adj = "bonf") ! !# Bonferroni Korrektur

Page 130: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Mache eine Anova über die Variable height über den Faktor gr. Mache als Post-Hoc Tests paarweise t-Tests mit Bonferroni Korrektur.

128

Page 131: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Two-Way-ANOVA

### 2-WAY-ANOVA ###

fit <- aov(iq ~ gr*gender, data=x) summary(fit)

# Two-way Interaction Plotinteraction.plot(gr, gender, iq)interaction.plot(gender, gr, iq)

129

Page 132: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Schaue in einer zweifaktoriellen Anova, ob sich die Variable height über die Faktoren gr und gender unterscheidet.

Gebe die Interaktionsplots aus.

130

Page 133: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
Page 134: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Lineare Modelle / Regression

# lineare Modelle schätzen

m1 <- lm(iq ~ height, data=x)! ! # Modell mit 1 Regressorm1!! ! ! ! ! ! ! ! !# Modell ausgebensummary(m1)! ! ! ! ! ! !# summary des Modells

m2 <- lm(iq ~ gender*height, data=x) ! ! # zwei Regressoren + Interaktionm2!! ! ! ! ! ! ! # Modell ausgebensummary(m2)! ! ! ! ! # summary des Modells

plot(iq ~ height)! ! ! # iq gegen height plottenabline(m1)! ! ! ! ! # Regressionsgerade hinzufügen

132

Page 135: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Funktionen für lineare Modelle

# Konfidenzintervalle ausgeben und plotten

library(sfsmisc)

attach(df)m <- lm(y1 ~ x1)plot(y1 ~ x1)abline(m)linesHyperb.lm(m, conf=TRUE, col="blue")! # für MittenlinesHyperb.lm(m)! ! ! ! ! ! ! ! # für Individuum

confint(m)! ! # CIs für Paramaterschätzungen

library(QuantPsyc) lm.beta(m) !! # Standardisierte Koeffizienten

Page 136: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Kollinearität

# collinearity diagnostics

library(perturb)n <- 30x1 <- rnorm(n)x2 <- x1*.5 + rnorm(n, , .2)y1 <- 2 + .3*x1 + .7*x2 + rnorm(n, ,.4)df <- data.frame(y1, x1, x2)

m <- lm(y1 ~ x1 + x2, df)summary(m)vif(m)colldiag(m)

Page 137: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Linearitätstests

# linearity diagnostics

library(lmtest)

harvtest(m)! ! ! ! ! ! ! ! # Harvey-Collier Testresettest(m, power=2:3)! ! ! ! # RESET Testraintest(y1 ~ x1 + x2, data=df)!! # Rainbow Test

Page 138: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Berechne für die Variablen iq und height eine lineare Regression. Mache einen scatterplot mit Konfidenzintervallen für die Mitten und die Individuen.

Teste abschließend auf Linearität des Modells

136

Page 139: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Modelle vergleichen

# Modelle vergleichen

fit1 <- lm(y1 ~ x1, data=df)fit2 <- lm(y1 ~ x1 + x2, data=df)anova(fit1, fit2)

137

Page 140: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Berechne für die Variablen iq eine Regression auf height, gender und gr und mache sukzessiv Vergleichstests mit den Modellen, wobei du mit einem eifachen Modell beginnst und schrittweise immer mehr Variablen aufnimmst, die einen signifikanten Erklärungsbeitrag leisten.

138

Page 141: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Datensatz ngo aufbereiten

139

# Daten Schul Beispiel Kähler einlesenx <- read.csv2("ngo.csv")

# Kategoriale Variablen definierenx$jahrgang <- factor(x$jahrgang, labels=11:13)x$geschl <- factor(x$geschl, ! ! ! ! ! ! labels=c("männlich", "weiblich"))

Page 142: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Kontraste

140

# Dummy- / treatment Kodierungcontr.treatment(3)!! ! ! # baseline ist erstecontr.treatment(3, base=3)! # baseline ist drittecontr.SAS(3)!! ! ! ! ! # baseline ist letzte

# Effektkodierung (sum-to-zero coding)contr.sum(2)contr.sum(3)

# Helmert Kontrastecontr.helmert(4)

# Benutzerdefinierte Kontrastemake.constrast

Page 143: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Varianzanalyse als ALM

141

# Effektkodierung (sum-to-zero) wählencontrasts(x$jahrgang) <- contr.sum(3)

# Modelle berechnenm1 <- lm(deutsch ~ jahrgang, x)

# Modelle vergleichensummary(m1)anova(m1) ! # Vergleich Gesamt- und Nullmodell

Page 144: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Kovarianzanalyse als ALM

142

Page 145: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

143

# Modelle berechnenm0 <- lm(deutsch ~ 1, x)m1.j <- lm(deutsch ~ jahrgang, x)m1.m <- lm(deutsch ~ mathe, x)m2 <- lm(deutsch ~ mathe + jahrgang, x)

# Modelle vergleichenanova(m1.j, m2) # Kovariate matheanova(m1.m, m2) # Haupteffekt von jahrganganova(m0, m2) # Vergleich Gesamt- und Nullmodell

Kovarianzanalyse als ALM

Page 146: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Kovarianzanalyse als ALM

144

# Dummy Codierung (treatment coding; Jahrgang 13 als baseline)contrasts(x$jahrgang) <- contr.treatment(3, base = 3)

# Modell berechnenm3 <- lm(deutsch ~ mathe + jahrgang, x)summary(m3)anova(m3)!! ! # Gesamtmodelltest

Page 147: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Kontraste

145

Page 148: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Kontraste

146

# Neue Variable berechnenattach(x)x$jahrges[jahrgang==11 & geschl=="männlich"] <- 1x$jahrges[jahrgang==11 & geschl=="weiblich"] <- 2x$jahrges[jahrgang==12 & geschl=="männlich"] <- 3x$jahrges[jahrgang==12 & geschl=="weiblich"] <- 4x$jahrges[jahrgang==13 & geschl=="männlich"] <- 5x$jahrges[jahrgang==13 & geschl=="weiblich"] <- 6x$jahrges <- factor(x$jahrges)detach(x)

# Modellcon <- cbind("vergleich 1" = c( .5, -.5, 0, .5, 0, -.5))contrasts(x$jahrges) <- conm1 <- lm(mathe ~ jahrges, x)summary(m1)

Page 149: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!a) Berechne eine Regression von iq auf gr mit Gruppe 2 als Baseline.

b) Füge in das Modell eine Interaktion zwischen gr und height hinzu

147

Page 150: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Faktorenanalyse

### FAKTORENANALYSE ###wow <- na.omit(wow)!! ! ! # Missings entfernen

names(wow)

scree(wow[4:23])! ! ! # Scree plotfa.parallel(wow[1:20])!! # Scree plot

fit <- factanal(wow[4:23], 6, rotation="varimax")print(fit, digits=2, cut=.3, sort=FALSE)

library(psych)fit <- fa(wow[4:23], 6)! # Alternative mit vielen Optionen! ! ! ! ! ! ! ! # an Schätz- und Rotationsverfahrenprint(fit, digits=2, cut=.3)

148

Page 151: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Lade die .csv Datei fa_daten.csv und mache mit ihr eine Faktorenanalyse.

149

Page 152: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: Hauptkomponenten-analyse (PCA)

150

### PCA ###

wow <- na.omit(wow)!! ! ! # Missings entfernen

fit <- princomp(wow[4:23])loadings(fit)print(loadings(fit), cut=.3)

Page 153: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: KTT

151

### Cronbachs Alpha: interne Konsistenz ###

library(psych)

fit <- fa(wow[4:23], 6)! ! # Polung der Variablenprint(fit, cut=.3)

names(wow)alpha(wow[4:7])!! ! ! ! # Item K4 rausalpha(wow[4:6])

alpha(wow[8:11])

alpha(wow[12:15])

Page 154: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

152

Page 155: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

153library(Rcmdr)Rcmdr()

Page 156: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

154

Page 157: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

155

Page 158: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

156

Page 159: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

157

Page 160: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

158

Page 161: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

159

DAY 4

DAY 4 Great Graphics

Charles J. Minard. Verluste der französischen Armee im Russlandfeldzug 1812-1813. Paris, 20. Nov. 1869

Page 162: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

160Muenchen, R. (2009). R for SAS and SPSS users. New

York: Springer, p. 276.

Minard‘s plot made in R

Page 163: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

161Peter Aldhous, Haiti Earthquake in Rhttp://www.readwriteweb.com/hack/2011/01/how-a-science-journalist-creat.php

Page 164: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

162Peter Aldhous, Earthquakes in Rhttp://www.readwriteweb.com/hack/2011/01/how-a-science-journalist-creat.php

Page 165: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

163Paul Butler, Dec 2010. Visualization of facebookusers‘ friendships between citieshttp://www.facebook.com/note.php?note_id=469716398919

„It's not just a pretty picture, it's a reaffirmation of the impact we have in connecting people, even across

oceans and borders“

Page 166: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

164Hans Rosling in action: http://www.youtube.com/

watch?v=hVimVzgtD6w

Hans Rosling‘s Gapminder The Power of Visualization

Page 167: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

164Hans Rosling in action: http://www.youtube.com/

watch?v=hVimVzgtD6w

Freely available as the Google Visualization API “Motionchart“Can easily be created via the R package “googleVis“

Hans Rosling‘s Gapminder The Power of Visualization

Page 168: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Google MotionChart in R

165

library(googleVis)> Fruits Fruit Year Location Sales Expenses Profit Date1 Apples 2008 West 98 78 20 2008-12-312 Apples 2009 West 111 79 32 2009-12-313 Apples 2010 West 89 76 13 2010-12-314 Oranges 2008 East 96 81 15 2008-12-315 Bananas 2008 East 85 76 9 2008-12-316 Oranges 2009 East 93 80 13 2009-12-317 Bananas 2009 East 94 78 16 2009-12-318 Oranges 2010 East 98 91 7 2010-12-319 Bananas 2010 East 81 71 10 2010-12-31

M1 <- gvisMotionChart(! Fruits, idvar="Fruit", timevar="Year")M1! ! ! ! ! ! ! ! # HTML codeplot(M1)

Page 169: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Google Visualization APIs

166

require(datasets)

states <- data.frame(state.name, state.x77)

G3 <- gvisGeoMap(!states, "state.name", "Illiteracy", !options=list(region="US", ! ! ! ! ! ! ! dataMode="regions",! ! ! ! ! ! ! width=1200, height=800))plot(G3)

Page 170: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Graphic SystemsR Graphic Systems

base graphics grid graphics

various packages

many graphicfunction

lattice ggplot2

167

Page 171: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Graphic SystemsR Graphic Systems

base graphics grid graphics

various packages

many graphicfunction

lattice ggplot2

167

Page 172: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Wiederholung

168

# Datensatz World of Warcraft laden

setwd("/Users/markheckmann/data")! ! # Verzeichnis wechselnwow <- read.csv2("wow_excerpt.csv")!! # Daten einlesen

# neue Variablen anlegen

wow <- transform(wow, K=(K1 + K2 + K3 + K4)/4 )wow <- transform(wow, E=(E1 + E2 + E3 + E4)/4 )wow <- transform(wow, AL=(AL1 + AL2 + AL3 + AL4)/4 )wow <- transform(wow, T=(T1 + T2 + T3 + T4)/4 )wow <- transform(wow, nKsB=(nKsB1 + nKsB2 + nKsB3 + nKsB4)/4 )

wow <- transform(wow, score=(K + E + AL + T + nKsB)/5 )

attach(wow)! ! ! ! ! ! ! # wow in den Suchpfad hängen

Page 173: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Verfügbare Datensätze

### Daten zum experimentieren ###

# Viele Datensätze sind bereits in R vorhanden

data()!! ! ! # zeigt an welche Datensätze existieren

# Laden weiterer Datensätze:

library(datasets)! ! # laden des Pakets datasets

# Wie auch Funktionen sind Datensätze dokumentiert.# Die Doku kann wie folgt aufgerifen werden.

?name_des_datensatzes

169

Page 174: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafiken I### einfache Visualisierungen ###

library(ggplot2)! ! ! # ggplot2 laden?diamonds!! ! ! ! ! # diamonds data setattach(diamonds)! ! ! # diamonds in den Suchpfad

?plot! ! ! ! ! ! plot(carat, price)!! ! # einfacher Scatterplotplot(price ~ carat)!! ! # identisch aber mit Formel! ! ! ! ! ! ! ! # Interface geschrieben

?hist! ! ! ! ! ! !# Histogrammlibrary(Hmisc)! ! ! ! # Hmisc Paket ladenhist(score)hist.data.frame(wow[1:16])! # mehrere Histogramme

?qqplot! ! ! ! ! ! # QQ-Plotsqqnorm(score)! ! ! ! # gegen Normalverteilung 170

Page 175: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafiken II

?boxplot! ! ! ! ! !boxplot(price ~ clarity)! ! ! # price über clarity

?pairs!! ! ! ! ! !! # Viele Scatterplotspairs(wow[c( "KO","EN","TO",!! ! # Auswahl einiger! ! ! ! "AL","NK","score")])! # Scatterplots

?barplot! ! ! ! ! !# Barchartbarplot(1:10)! ! ! ! ! ! # mit einem Vektorbarplot(matrix(1:9,3))!! ! ! # mit einer Matrixbarplot(table(Geschlecht, ! ! # mit eine table Objekt! ! ! ! Zeitaufwand))barplot(table(color, cut))! ! # mit table Objekt

171

Page 176: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafiken III

?coplot! ! # condition plot: scatterplots konditioniert ! ! # nach einer oder mehreren Variablen

! ! ! !coplot(lat ~ long | depth, data = quakes)coplot(lat ~ long | depth * mag, data = quakes)

?dotchart!! ! ! !dotchart(VADeaths)

?stripchart! ! !stripchart(decrease ~ treatment, data = OrchardSprays)stripchart(score ~ Zeitaufwand, data = wow)

172

Page 177: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge einen conditioned plot (coplot) von score (y-Achse) gegen KO (x-Achse) konditioniert mit dem Faktor Zeitaufwand.

Mache dann einen weiteren Plot mit den beiden konditionalen Faktoren Zeitaufwand und Geschlecht.

173

Page 178: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge einen dotchart und ein barplot auf dem jeweils Geschlecht gegen Alter zu sehen ist. Nutze hierzu die table() Funktion zur Vorbereitung der Daten.

174

Page 179: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafikoptionen ändern I

#### Grafikoptionen verändern ###

# Jede Funktion hat viele Parameter, die verändert # werden können, siehe ?plot und ?par

attach(wow)

plot(KO, score)!! ! ! ! ! ! ! ! # scatter plotplot(KO, score, xlab="Kontrollverlust", ! # Achsen beschriften! ! ylab="Suchtscore")plot(KO, score, ! ! ! ! ! ! ! ! # Überschrift setzen! main="Kontrollverlust vs. Sucht", ! xlab="Kontrollverlust", ylab="Suchtscore")plot(KO, score, col=3)!! ! ! ! ! ! # Farbe ändernplot(KO, score, col=3, pch=15)! ! ! ! # Symbol ändernplot(KO, score, col=3, pch=15, cex=.5)!! # Schriftgröße ändern

175

Page 180: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafikoptionen ändern II?barplotbarplot(table(Geschlecht, Zeitaufwand))! # stacked / übereinander!barplot(table(Geschlecht, ! ! ! ! ! # Gruppen nebeneinander! ! Zeitaufwand), beside=TRUE)! barplot(table(Geschlecht, Zeitaufwand), ! # Farbe und Überschrift! ! col=3:4, ! ! main="Zeitaufwand vs. Geschlecht")!

barplot(table(Geschlecht, Zeitaufwand), ! # Gekippt! ! horiz=TRUE)! ! barplot(table(Geschlecht, Zeitaufwand), !# Achsenbeschriftung ! ! cex.names=.7)!! ! ! ! ! ! # kleiner

barplot(table(Geschlecht, Zeitaufwand),! # Legende hinzufügen ! legend.text=c("männlich", "weiblich"),!! ! cex.names=.8)detach(wow) 176

Page 181: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafikbeispiel

#### iris dataset #######

?irishist(iris)! ! ! ! ! ! ! # Histogrammepairs(iris[1:4])! ! ! ! ! # Vier Histogrammepairs(iris[1:4], pch=21) # Symbol ändernpairs(iris[1:4], pch=21, !! ! # Farben pro Spezie! ! col=iris$Species) # andere Farben pro Spezie col <- c("red", "green3", "blue")[iris$Species]# Farbvektor zuweisenpairs(iris[1:4], pch=21, col=col)

177

Page 182: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge folgendes barchart mit der Funktion barplot()

mw

unter 1818−2930−4041−50über 50

Altersverteilung

Anzahl an Personen

Ges

chle

cht

0 50 100 150 200 250 300

178

Page 183: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

base graphics I

### Einführung ins base Grafik System ###

# grafische Basiselemente?plot! ! ! ! ! ! ! !# welche Optionen gibt es?

dev.new()!! ! ! ! ! ! # neues Fenster öffnenset.seed(5)! ! ! ! ! ! # Ausgangspunkt für Zufallszahliq <- rnorm(30, 100, 15)! !pisa <- iq*.5+10 + rnorm(30,0,1) # pisa aus iq plus Zufall

plot(iq, pisa)! ! ! ! !# plotten von x gegen yplot(iq, pisa, pch=2)! ! ! # Ändern des Charactersplot(iq, pisa, pch=3)! ! ! # Ändern des Charactersplot(iq, pisa, type="h")! ! # Änderung des type Arguments

179

Page 184: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

base graphics II

?linesplot(iq, pisa)! ! ! ! ! ! ! # plotten von x gegen ylines(x=c(60,130), y=c(40,80))! ! # Linie von P(60,40) ! ! ! ! ! ! ! ! ! ! ! # nach P(130,80)lines(x=c(60,130), y=c(40,80), # Linie in anderer Farbe! col=3) lines(x=c(60,130), y=c(40,80), !! # Linie mit anderer Farbe,! ! col=3, lty=3, lwd=2)! ! ! # Typ, Dicke

180

Page 185: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

base graphics III?abline

plot(iq, pisa, col="brown", !# plotten von pisa gegen iq pch=16)

abline(v=mean(iq), ! ! ! # vertikale gestrichelte ! ! col="grey", lty=2)!! # graue Linie beim MW von IQ! ! !abline(h=mean(pisa), ! ! ! # hor. Linie beim MW pisa! ! col="grey", lty=2)! ! !abline(v=c(90, 110), ! ! ! # vert Linie bei x=90 und x=110! ! col="blue", lty=3)!! !!abline(lm(pisa ~ iq))!! ! # Regressionslinie pisa ~ iq! ! ! ! ! !

181

Page 186: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge einen plot mit dem WoW Daten. Plotte AL gegen score in der Farbe blau. Benenne die Achsen und gib der Grafik eine Überschrift.Zeiche dann eine gestrichelte vertikale Linie beim Mittelwert von Al und eine horizontale beim Mittelwert von score ein. Füge zuletzt eine Regressionsgerade in rot hinzu.

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●●

● ●

●●

●●

● ●

●●

●●

● ●

●●

● ●

●●

●●

●●

● ●●

● ●

1.0 1.5 2.0 2.5 3.0 3.5 4.0

1.0

1.5

2.0

2.5

3.0

3.5

Übung

negative Konsequenzen

Such

tsco

re

182

Page 187: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

base graphics IV

?pointsplot(iq, pisa, type="n")! ! ! # plotten ohne Punktepoints(iq, pisa)! ! ! ! ! # Punkte hinzufügen

?text! ! ! ! ! ! ! ! ! # um Text hinzuzufügentext(72,74, "test text", col="blue")! # Text an Position (72,78)

?mtext!! ! ! ! ! ! ! ! # für margin textmtext(side=3, "test mtext", col="red")! # margin text oben

183

Page 188: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafische Bereiche

184

Page 189: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

base graphics V

### par settings ###par()! ! ! ! ! # Parameter settings anschauenoldPar <- par()!! ! # Parameter settings speichernplot(1:10)! ! ! ! # einfacher plot

par(mar=c(4,4,4,8))!! # Margin verändernplot(1:10)! ! ! ! # einfacher plot

par(mfrow=c(1,2))! ! # mfrow ändernplot(1:10)! ! ! ! # plot 1plot(1:10)! ! ! ! # plot 2

par(oldPar)! ! ! ! # alte Parameter wieder laden

185

Page 190: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Zeichne den plot score (auf y) gegen TO (auf x) (WoW Daten) und direkt daneben das Histogram von score. Nutze hierzu die par() Einstellung mfrow.Zusatzaufgabe: Füge dem plot vorher noch für den Fall mit dem größten und für kleinsten Suchtwert jeweils einen Punkt hinzu, der rot und gefüllt ist.

●●●

●●●

●●

●●

● ●

●●

●●

●●

●●

●●

●●

●●● ●●

●●●

●●

●●

●●

●●

●●

●●

●●

● ●

● ●

●●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

● ●●

●●

●●

●●

●●

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ●●

●●

●●

●●

●●

●●

●●

1.0 2.0 3.0 4.0

1.0

1.5

2.0

2.5

3.0

3.5

TO gegen score

TO

score

Histogram of score

score

Frequency

1.0 1.5 2.0 2.5 3.0 3.5

020

4060

186

Page 191: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Grafik als Datei

### Grafik-Output in Datei erzeugen ###

jpeg()!! # öffnet einen jpeg devicebmp()! ! # öffnet einen bmp devicepdf()! ! # öffnet einen pdf devicepng()! ! # öffnet einen png device

pdf()! ! # pdf device öffnen plot(1:10)dev.off()!# device schließen

dev.list()! # welche devices sind noch offen?

187

Page 192: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Gib die Grafik aus der letzen Übung in eine .pdf Datei aus. Da Du den Code bestimmt in einer Datei gespeichert hast, kann der Plot nun schnell wiederhergestellt werden ;)

188

Page 193: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Graphic SystemsR Graphic Systems

base graphics grid graphics

various packages

many graphicfunction

lattice ggplot2

189

Page 194: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Graphic SystemsR Graphic Systems

base graphics grid graphics

various packages

many graphicfunction

lattice ggplot2

189

Page 195: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

190ggplot2 documentation http://had.co.nz/ggplot2

ggplot2Grammar of Graphics

wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

● ●

●●

●●

2 3 4 5wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

4

●●●

●●

●●

●●

●●

2 3 4 5

6

●● ●

●●●

●●● ●

●●●

2 3 4 5

8

●●

●●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

qplot(wt, mpg, data = mtcars) + geom_point(aes(color=factor(cyl))) + geom_smooth(method="lm")

+ geom_smooth(aes(group=cyl), method="lm") + facet_grid(.~ cyl)

Page 196: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

190ggplot2 documentation http://had.co.nz/ggplot2

ggplot2Grammar of Graphics

wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

● ●

●●

●●

2 3 4 5wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

4

●●●

●●

●●

●●

●●

2 3 4 5

6

●● ●

●●●

●●● ●

●●●

2 3 4 5

8

●●

●●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

qplot(wt, mpg, data = mtcars) + geom_point(aes(color=factor(cyl))) + geom_smooth(method="lm")

+ geom_smooth(aes(group=cyl), method="lm") + facet_grid(.~ cyl)

Heute nur eine kurze Einführung in ggplot2.Das Paket kann viel mehr!

Page 197: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: preparation

191

### Vorbereitung der Daten ###

# cyl in Faktor umwandelnmtcars$cyl <- as.factor(mtcars$cyl)!!

set.seed(1410) !# Startwert für Zufasllziehung (z.B. ! ! ! ! ! ! ! # mit sample) setzen. So wird es auf ! ! ! ! ! ! ! # allen Rechnern gleich

# 100 Zeilen von diamonds zufällig auswählen dsmall <- diamonds[sample(nrow(diamonds), 100), ]

### normaler R plot ###

attach(mtcars)plot(wt, mpg)detach(mtcars)

Page 198: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: scatter plot

192

### qplot - das Pendant zu plot im ggplot2 package ###

# scatter plot

qplot(wt, mpg, data=mtcars)! ! ! ! ! ! # scatter plotqplot(wt, mpg, data=mtcars, geom="point")!! # identischqplot(wt, mpg, data=mtcars, geom="point", ! # mit Achsenbe- main="Überschrift", xlab="X-Achse", ! # zeichnung und ! ! ylab="y-Achse")!! ! ! ! ! ! ! # Überschriftqplot(wt, mpg, data=mtcars, geom="point", ! # Achsen skalieren xlim=c(0,6), ylim=c(0,40))qplot(wt, mpg, data=mtcars, geom="point", ! # logarithmierte ! ! log="x") ! ! ! ! ! ! ! ! ! # x-Achseqplot(wt, mpg, data=mtcars, geom="point", ! # logarithmierte ! ! log="xy") !! ! ! ! ! ! ! ! # x- und y-Achse! ! ! ! ! ! ! ! ! ! !

Page 199: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge folgende Grafik mit den Variablen carat und price aus dem

Datensatz diamonds

193

Page 200: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: mapping to aesthetic properties

194

### mapping of asthetics to geometric objects ###

qplot(wt, data=mtcars, geom="point") !# Fehler: y fehlt?geom_point

qplot(wt, mgp, data=mtcars, geom="point") !# aesthetics x und yqplot(wt, mpg, data=mtcars, geom="point", ! size=cyl) ! ! ! ! ! ! ! ! ! # aesthetic sizeqplot(mpg, wt, data=mtcars, geom="point", ! colour=cyl) ! ! ! ! ! ! # aethetic colorqplot(mpg, wt, data=mtcars, geom="point", ! shape=cyl) ! ! ! ! ! ! ! # aesthetic shape

# kombinieren von mappings

qplot(wt, mpg, data=mtcars, geom="point", ! # shape und color! shape=cyl, colour=cyl)qplot(wt, mpg, data=mtcars, geom="point", ! # shape, color & size! shape=cyl, colour=cyl, size=cyl)

Page 201: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge folgende Grafik mit den Variablen carat und price aus dem

Datensatz diamonds. Die Achsen sind logarithmiert. Die Farben beziehen sich auf die Variable clarity.

195

Page 202: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: mapping vs. setting

196

# setting vs. mapping of aesthetics in qplot

qplot(wt, mpg, data=mtcars, !! ! # Anlegen einer neuer ! ! geom="point", alpha=.3) !! # Variable (mapping) ! ! ! ! ! !qplot(wt, mpg, data=mtcars, !! ! # Direkte Zuweisung ! ! geom="point", alpha=I(.3)) !# mit I() (setting)! ! ! ! ! !

qplot(wt, mpg, data=mtcars, !! ! # setten der Farbe! ! geom="point", color=I("blue")) ! ! ! ! ! !qplot(carat, price, ! ! ! ! ! # setten der Tansparenz! ! data = diamonds, alpha = I(.1)) !! ! !

Page 203: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge folgende Grafiken mit den Variablen carat und price aus dem

Datensatz diamonds.

197

Page 204: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: smoother

198

### weitere geometrische Objekte (geoms)

qplot(wt, mpg, data=mtcars, !! ! ! # wie vorher! ! geom="point")

qplot(wt, mpg, data=mtcars, !! ! ! # zwei geoms, zusätzlich! ! geom=c("point", "smooth"))! ! # smooth

?geom_smooth

qplot(wt, mpg, data=mtcars, !! ! ! # lineare Regression ! ! geom = c("point", "smooth"), ! # durch Wahl der Methode! ! method = "lm")! ! ! ! ! ! # für smooth

Page 205: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge folgende Grafik mit den Variablen carat und price aus dem

Datensatz diamonds. Die Achsen sind logarithmiert.

199carat

price

103

103.5

104

●●

● ●

10−0.6 10−0.4 10−0.2 100 100.2

Page 206: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: facetting

200

# facetting = konditionieren über eine Faktor

qplot(mpg, wt, data=mtcars, facets= . ~ am)! # facets auf x-Achseqplot(mpg, wt, data=mtcars, facets= am ~ .)! # facets auf y-Achseqplot(mpg, wt, data=mtcars, facets=vs ~ am)! # facets beide Achsen

# facetting plus linear smooth geom, d.h plus Regression

qplot(mpg, wt, data=mtcars, facets=. ~ am,! ! geom=c("point", "smooth"), method="lm")

qplot(mpg, wt, data=mtcars, facets=vs ~ am, ! ! geom=c("point", "smooth"), method="lm")

Page 207: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!Erzeuge folgende Grafik mit den Variablen carat und price aus dem Datensatz diamonds. Achsen sind logarithmiert. Die einzelnen Spalten

sind Levels von color.

201

carat

price

0

5000

10000

15000

20000

D

●●

●●●

0.5 1.0 1.5 2.0 2.5

E

●●●

●●●

0.5 1.0 1.5 2.0 2.5

F

●●●

●●

0.5 1.0 1.5 2.0 2.5

G

●●●

0.5 1.0 1.5 2.0 2.5

H

0.5 1.0 1.5 2.0 2.5

I

●●

0.5 1.0 1.5 2.0 2.5

J

●●●

0.5 1.0 1.5 2.0 2.5

color● D● E● F● G● H● I● J

Page 208: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: histogram

202

### qplot versucht die gewünschte Diagramm Art zu erraten ###

# histogram

qplot(carat, data=diamonds)! ! # bei einer gegebenen Variablen ! ! ! ! ! ! ! ! ! ! # erzeugt qplot ein Histogramm! ! ! ! ! ! ! ! ! !qplot(carat, data=diamonds, !! # explizite Wahl des geoms! ! geom="histogram")

qplot(carat, data=diamonds, !! # Einstellen der Klassierungs-! ! geom="histogram", !! ! # breite mit binwidth! ! binwidth=0.01)

Page 209: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: boxplot, jitter

203

# boxplot

qplot(clarity, price, data=dsmall, ! ! geom="boxplot")qplot(clarity, price, data=dsmall, ! geom=c("boxplot", "point"))! ! # zwei geoms. Die Punkte ! ! ! ! ! ! ! ! ! ! ! ! # über dem Boxplot

# jitter (~“zittern“)

qplot(clarity, price, data=dsmall, !! # jitter statt point um! ! geom=c("boxplot", "jitter"))!! # die Punkte zu ! ! ! ! ! ! ! ! ! ! ! ! # differenzieren

Page 210: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: barplot I

204

### barplot?geom_bar

# für nominale Datenqplot(cut, data = dsmall, geom="bar")! ! # barplotqplot(cut, data = dsmall, geom="bar", !! # mapping von fill! fill=clarity)

qplot(cut, data = dsmall, geom="bar", !! # stacked barplot ist! ! fill=clarity, position="stack")!! # Voreinstellung

qplot(cut, data = dsmall, geom="bar", !! # dodged barplot =! ! fill=clarity, position="dodge")!! # Säulen nebeneinander

qplot(cut, data = dsmall, geom="bar", !! # fill bringt Balnken ! ! fill=clarity,position="fill")! ! # auf gleiche Länge ~ ! ! ! ! ! ! ! ! ! ! ! ! # „spineplot“

Page 211: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Code: barplot II+ themes

205

### barplot mit metrischen Daten

qplot(carat, data = diamonds, ! ! ! # carat ist metrisch, so dass! ! fill=clarity, geom="bar", ! ! # eine Klassierung erstellt! ! binwidth = 0.05, xlim=c(1,3))! # wird

qplot(carat, data = diamonds, ! ! ! # nutzen von fill auch hier ! ! fill=clarity, geom="bar", ! ! # möglich! ! binwidth = 0.05, xlim=c(1,3), ! ! position="fill")

### changing themes

# Das Standard-Thema von ggplot2 ist für Veröffentlichungen oftmals ungeeignet, da es zuviel grau enthält. Andere Farbzusammenstellungen (Themen) sind verfügbar.

qplot(carat, price, data=dsmall) + theme_bw()

+ theme_bw()! ! ! # schwarz/weiß Thema+ theme_grey()! ! # standard Thema

Page 212: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!

Erzeuge folgende Grafik mit den Variablen carat

und price aus dem Datensatz diamonds.

Die vertikale Unterteilung ist color.

206

Page 213: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Your turn!

Erzeuge folgende Grafik mit der Variablen carat

aus dem Datensatz diamonds. Die vertikale Unterteilung ist color, die Farben clarity.

207

Page 214: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

208ggplot2 documentation http://had.co.nz/ggplot2

ggplot2Grammar of Graphics

wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

● ●

●●

●●

2 3 4 5wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

4

●●●

●●

●●

●●

●●

2 3 4 5

6

●● ●

●●●

●●● ●

●●●

2 3 4 5

8

●●

●●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

qplot(wt, mpg, data = mtcars) + geom_point(aes(color=factor(cyl))) + geom_smooth(method="lm")

+ geom_smooth(aes(group=cyl), method="lm") + facet_grid(.~ cyl)

Page 215: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

208ggplot2 documentation http://had.co.nz/ggplot2

ggplot2Grammar of Graphics

wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

● ●

●●

●●

2 3 4 5wt

mpg

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

● ●

●●

●●

●●

●●

●●

●●

●●

●●

●●

●● ● ●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

wt

mpg

10

15

20

25

30

4

●●●

●●

●●

●●

●●

2 3 4 5

6

●● ●

●●●

●●● ●

●●●

2 3 4 5

8

●●

●●

●●●

●●

●●

●●

●●●

●●

2 3 4 5

factor(cyl)● 4● 6● 8

qplot(wt, mpg, data = mtcars) + geom_point(aes(color=factor(cyl))) + geom_smooth(method="lm")

+ geom_smooth(aes(group=cyl), method="lm") + facet_grid(.~ cyl)

ACHTUNGwir haben nur einen kleinen Ausschnitt aus

ggplot2 gesehen. Viele Aspekte, die die Stärken

der Grammar of Graphics ausmachen, wurden heute wenig berücksichtigt.Das Paket kann viel mehr!

Page 216: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Deducer - getting interactive

209

Great package for interactive data analysis suitable for R beginners

www.deducer.org

Go to website and install: install.packages("Deducer",,"http://rforge.net/")

More ressourceshttp://www.youtube.com/user/MrIanfellows

Page 217: R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

Es ist geschafft!

210