Einführung indas R Frame-workMark HeckmannUniversität BremenWiSe 2010/11         1
Was erwarten wir von dem Kurs?• Von vorne abholen / Grundlagen• Grafiken erstellen• Datensätze speichern / erstellen• Wenig...
„Auch wenn das Handwerkszeug solcher   Forschung sich virtuos etablierter Techniken der   Empirie und des Experimentierens...
ACHTUNG                             METHO                                        DIK ≠                                    ...
R-Appetizer              4
●                                                                                Jaw-drop                                 ...
1.2          1.0          0.8                                 mpaadensity                                                 ...
0.6          0.5          0.4                                                           cut                               ...
8
9    http://learnr.wordpress.com/2009/04/09/ggplot2-sales-dashboard/
http://learnr.wordpress.com/2009/04/09/ggplot2-sales-dashboard/10
11
Revenue                        Profit$200k                     $50k                                                       ...
13
14
DAY 1Learning grammar   - Basics of the R         language                  15
Erster Ta          g=Hürde ne         hmen                16
17
“Nurse, get on the internet, go to SURGERY.COM,scroll down and click on the ,‘Are you totally lost?‘                      ...
ACHTUNG!                  Flache                Lernkurve„Nehmen Sie sich ein Beispiel an Kindern, die  das Laufen lernen....
Endless o                                                   n        R Ressources                      the web!•   R Proje...
Basics•   R arbeitet im Frage-Anwort Modus•   Navigieren in R Konsole durch Aufwärts und Abwärts Pfeile•   Alles hinter de...
Code : Arithmetik###   Grundlegende arithmetische Operatoren   ###4 + 4! ! ! !        !                    #   Addition4 -...
Code : Zuweisungen###   Der Zuweisungsoperator   ###a <- 2 + 2!   !    !                   #   Zuweisungsoperator kleiner-...
Objektbezeichnungen I•   Variablen- / Objektbenennung: können alphanumerisch sein    sowie, Punkte und Unterstriche enthal...
Objektbezeichnungen II•   Objektname darf nicht mit Zahl beginnen bzw. Punkt    gefolgt von einer Zahl        1object <- 1...
Code : Bezeichnung & StilneueVariable1 <- 7neueVariable2=neueVariable1+2! ! # kaum lesbar! schlechter! ! ! ! ! ! ! ! ! ! !...
Code : Logik I# Logische Operationen1   == 2!        !     !   !   #   logischer Vergleich1   != 2 !    !   !   #   ist un...
Code : Logik II# logisches ODERTRUE | TRUE! !   # TRUETRUE | FALSEFALSE | TRUEFALSE | FALSE# KurzformenT !! ! ! !         ...
Funktionen IFunktion (lat. functio = Tätigkeit,Verrichtung)z.B.:c() steht für concatenate (verbinden, verketten)> a <- c(1...
Funktionen IIDie Angaben innerhalb einer Klammer vonFunktionen heißen Argumente.> rnorm(4) [1] -0.3628728 -0.4580532 -1.37...
Funktionen IIIJede Funktion gibt ein Objekt zurück> c(1,2,3)[1] 1 2 3Ggf. kann dies auch unsichtbar geschehenv <- rnorm(10...
“Nurse, get on the internet, go to SURGERY.COM,scroll down and click on the ,‘Are you totally lost?‘                      ...
Hilfe!      Die allerwichtigste Funktion!### HELP R ###help.start()!!   !    #   Hilfe aufrufen. Auch über das            ...
R-help = an R-user best friend !             R-helpLeer                                      34
Code : Vorgriff Datentyp Vektor# Vorgriff auf Datentyp Vektoren (mehr später)c()! ! !   !          !   !   # concatenate (...
Code : Sequenzen# Vektorsequenzen erzeugen?seqseq(from=1, to=5)! !     # Sequenz von 1 bis 5seq(from=1, to=5, by=.5) # von...
Your turn!  Erzeuge folgende Vektoren, mit jeweils mit 10 Elementen[1] 10   9   8    7   6   5    4   3   2    1[1] 1 1 1 ...
Code : Wichtige Funktionen# Wichtige Funktionena <- c(1.2, 3.3, 6.1, 4.6)max()! !        # Maximummin()! !        # Minimu...
Remembe                                            he       r:                                                lp.star     ...
Code : Konstanten# in R eingebaute KonstantenLETTERS! !    !   #   Großbuchstaben von A bis Zletters! !    !   #   Kleinbu...
Code : Strings# Umgang mit Strings / Zeichen?paste!      ! ! ! ! # Konvertierung in characters und verbindenpaste(1)! ! ! ...
Your turn!          Erzeuge folgende Ausgabe in der Konsole, indem       Du paste() und die Konstante month.name nutzt."Ja...
Code : vectorwise# Vektorwertiges Arbeitena   <- 1:3b   <- 3:1a   - b! ! !   !   !   !   # Vektorweise Substraktiona   * b...
Code : Zugriff# Zugriff auf Elemente eines Vektorsb <- c(1,2,3,4,5)!   !   !   #   numerischer Vektorb[1]! ! ! ! !        ...
Editoren nutzen                     R EditorMac OS Textmate                  Windows Tinn-RDatei wird als .R Datei gespeic...
Code : Anwendung BMI I### BMI BEISPIEL FÜR INTERAKTIVE NUTZUNG ###68/1.70^2   !!   !   !   !   !   # Body Mass Index.myBmi...
Code : Anwendung BMI II### Standardabweichung "zu Fuss" berechnensum.bmi <- bmi[1] + bmi[2] + bmi[3] + bmi[4]!!      # Sum...
Code : Anwendung BMI III(bmi[1] – mean.bmi)^2 + (bmi[2] – mean.bmi)^2 +(bmi[3] – mean.bmi)^2 + (bmi[4] – mean.bmi)^2! # SS...
Take along!  Selbst wenn etwas nicht in Rnicht existiert, kann man es sich     selber programmieren!                      ...
Your turn!Berechne die geschätzte Kovarianz für folgende       zwei Datenreihen in R „zu Fuß“ x <- c(-2,-1,-1,0,1,1,2) y <...
Code : Navigieren# Projektordner anlegen /RCourse# Navigieren in Verzeichnissengetwd()     !! !    ! ! # Unterschied Slash...
Your turn!Lege ein Verzeichnis RCourse an (nicht über R) und setze es als neuesArbeitsverzeichnis in R. Lege einen Unteror...
Code : Arbeitsbereich sichern /                      laden### Workspace speichern ###?save.image()save.image("erster Kurst...
Code : Vektoren I###   vector – eindimensionales Datenobjekt ###a <- c(T, F, T, F)! ! !      !   # logischer Vektora <- c(...
Code : Vektoren II# Zugriff auf eine Elemente durch eckige Klammerna[1]! ! !     !   # Zugriff auf erstes Element des Vekt...
Code : Vektoren IIIx <- c(NA, 1, 2, NA, 99)! # Vektor mit missing values (NA)x == 1!! ! ! ! !          ! welcher Eintrag i...
Your Turn!Oftmals wird 99 oder 999 als Platzhalter für missing valuesbenutzt. Ersetze alle Werte des Vektors, die 99 oder ...
Your Turn!v <- 1:10Setze alle Elemente des Vektors v, die kleiner gleich 3 sindauf 0, alle die zwischen 4 und 7 sind auf 1...
Code : Matrix I###   matrix – zweidimensionales Datenobjekt   ###?matrixmatrix(1:12, nrow=3, ncol=4)!! ! !        # Matrix...
Your Turn!Erzeuge eine Matrix M mit 20 Spalten und den folgendenZeileneinträgen:Zeile 1: 1, 2, ..., 20Zeile 2: Zahlen zwis...
Code : Matrix II# auf Matrixelemente zugreifenx[1,1]!      ! !      !   !   #   Element erste Zeile, erste Spaltex[ ,1]!  ...
Code : Matrix III# Matrixelemente verändernx[1,1] <- 10!! ! # Zahl zu einer Zelle zuweisenx[ ,1] <- 10!! ! # Zahl zu Spalt...
Code : Matrix IV# Zeilen und Spaltennamen hinzufügencolnames(x)! ! ! ! # Spaltennamen anzeigenrownames(x)! ! ! ! # Zeilenn...
Your turn!Erstelle folgende Matrix (mit zufälligen Werten):      Tip: nutze rnorm() und round()             Jan Feb Mar Ap...
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...
Code : Matrix VI# Matrizen verbindencbind   ! ! ! # verbinden der Spalten (gleiche Zeilenanzahl                # nötig)cbi...
Your Turn!1) Erzeuge eine Matrix M mit 7 Spalten und 7 Zeilen auszufälligen NV-Werten, die auf eine Stelle gerundet werden...
68
DAY 2From ABC tosentences -getting startedwith data analysis                     69
70
http://people.hofstra.edu/steven_r_costenoble/MontyHall/MontyHallSim.html   71
Monty-Hall-DilemmaAngenommen Sie befinden sich in einer Spielshow und haben die Wahlzwischen drei Toren. Hinter einem Tor i...
Code : Matrix VII### Rechnen mit MatrizenA <- matrix(c(1,3,2,5,2,3,1,2,3), ncol=3)At(A)! ! ! ! ! # transponieren einer Mat...
74
Geek Hum           or!                 74
Your turn!Berechne den Vektor b der Regression y   regrediert auf x in Matrizenform  x <- c(-2,-1,-1,0,1,1,2)  y <- c(-1,-...
Code: Faktoren### factors - für qualitativ unterschiedliche Merkmaleval <- c(1,2,1,1,1,2,3,3)! !    !   !     # neuer Vekt...
Your turn!     Erzeuge einen factor der folgenden Form:[1] Gruppe 4 Gruppe 4 Gruppe 4 Gruppe 4Gruppe 3 Gruppe 3 Gruppe 3 G...
Code: data frames Idata framesIn Matrizen müssen alle Einträge vom selben Typ sein. Z. B. alles numerisch oderalles charac...
Code: data frames II### Zugriff auf Elemente eines data framesd["treat"]!   !   !   !   # gibt data frame zurückd[1]d[1:3,...
Your turn!                   konstruiere folgenden data frame:(IQ normalverteilt um 100 mit sd=15; BMI normalverteilt um 2...
Code: Subsets I### data frames subsettingd[4]! ! ! ! !       !     # Auswahl der vierten Spalted[1:3]!! ! ! ! !          #...
Your turn!    Baue den vorher erzeugten Datensatz um: a) erst dieungeraden, dann die geraden Zeilen b) neue Spaltenreihenf...
Code: Subsets IInames(d)! ! ! ! !      #   Spaltennamen des Datensatzesnames(d)=="IQ"! ! !    #   welche Namen sind gleich...
Your turn!     Wähle aus dem Datensatz alle Fälle aus, die weiblich sind               und zur Treatmentgruppe gehören    ...
Your turn!Wähle aus dem data frame jene Fälle aus, die einen IQ innerhalb des        Bereichs 90-110 haben und zugleich Mä...
Code: subset()### subsets mit subset() erstellen?subset! ! ! ! ! ! ! ! !            # die subset Funktionsubset(d, subset=...
Your turn!Wähle aus dem Datensatz mit subset alle Fälle aus, die einen IQ  größer als der Durchschnitt haben, der berechne...
Your turn! Wähle aus dem Datensatz mit subset alle Fälle aus, die a) einen IQ             außerhalb des Intervalls [90-110...
packages laden                      Die R-base Installation enthält sog.My Computer           packages, in denen bestimmte...
packages installieren     CRAN server     >1500 additional     on                             de        packages          ...
packages installieren### packages installieren und ladeninstall.packages("plyr")! # plyr installierenlibrary(plyr)! ! ! ! ...
Code: Daten einlesen I### EINLESEN VON DATEN IN R ###?read.csv!!   !   !   #   Einlesen   einer .csv Datei (englisch)?read...
Code: Daten einlesen II?read.csv2 ! ! ! ! # für deutsche .csv Dateiendf <- read.csv2("mieten.csv")head(df)library(Hmisc)! ...
Your turn!Lies den Datensatz wow_excerpt.csv ein und        speichere ihn in der Variablen df                             ...
Code: attach data# Objekte/Datensätze in den Suchpfad hängenK1! ! ! ! ! !       #   Objekt unbekanntattach(wow)! ! !    # ...
Datensatz wow_excerpt.csvGeschlecht                1=keine Angabe , 2=männlich, 3=weiblichAlter                     1=kein...
EDA - die Daten anschauen### Anschauen der WoW Daten ###head(wow)!!   !   !   # die ersten Zeilennames(wow)!   !   !   # V...
Your turn!  Lies den Datensatz wow_excerpt.csv ein und          speichere ihn in der Variablen df Hänge df dann in den Suc...
Code: Deskriptive Statistiken### Deskriptive Statistiken ###summary(wow)!!   !       # summaries der Variablenattach(wow)!...
crosstabs I### Häufigkeiten #### One Way Tableattach(wow)table(Alter)!! # Häufigkeitstabelle von Alter# Two Way Tablemytab...
crosstabs II# Three Way Tablesmt <- table(Geschlecht, Alter, Zeitwaufwand)ftable(mt)# Tables mit CrossTablelibrary(gmodels...
Your turn!Mache folgende Häufigkeitstabellen für den wowDatensatz mit CrossTable:1) Alter gegen Zeitaufwand2) Geschlecht ge...
WoW Fragebogen                 103
Missings NA setzen# Gibt es „keine Angabe“ Antworten (wie k.A.),# die noch nicht als Missing kodiert sind?attach(wow)table...
Rekodieren### Rekodieren #### verschiedene Funktionen zum Rekodierenlibrary(car)wow$K1 <- recode(wow$K1, "1=6; 2=5; 3=4; 4...
Faktor definieren# Sind alle qualitativen Merkmale als Faktoren definiert?wow$Geschlechtwow$Geschlecht <- as.factor(wow$Ges...
Your turn!Lies den Datensatz wow_excerpt.csv ein unddurchlaufe die Schritte:a) missings NA setzenb) Alle qualitativen Merk...
108
Beratungsgespräch IEin junger Mann ohne Risikofaktorenkommt in die AIDS-Beratung undinformiert sich über die gängigenHIV-T...
Beratungsgespräch IIVon 100.000 Männern ohne Risikofaktorensind nur etwa 10 mit dem HI-Virusinfiziert (Grundrate). Die bei...
Gigerenzer, G. (2008). Das Einmaleins der Skepsis: Über den richtigen      Umgang mit Zahlen und Risiken. Berlin: Berliner...
BuchtipsGigerenzer, G. (2008). Das Einmaleins der   Dubben, H.-H., & Beck-Bornholdt, H.-P.Skepsis: Über den richtigen Umga...
113
DAY 3SPSS - das Afehlt nicht umsonst„und dann rechnen wirmit dem Taschenrechnerweiter... !“                         114
Variablen berechnen# Neue Variablen berechnenwow$KO <- (wow$K1 + wow$K2 + wow$K3 + wow$K4)/4!!                       # Ska...
Your turn!Lies den Datensatz wow_excerpt.csv ein unddurchlaufe die Schritte:c) Skala berechnend) einen Gesamtwert berechne...
Pakete installieren•   HH•   car•   sm•   gmodels•   nortest•   perturb•   sfsmisc•   QuantPsyc•   TeachingDemos•   gplots...
Formulas I### Formulas in R ###Dienen der Beschreibung von statistischen ModellenSind wie kleine eigene Sprache   y ~ mode...
Formulas IIy ~ x1 ! ! !               ! # Modell mit einem Regressory ~ x1 + 1 !!      !         # identischy ~ x1 - 1 ! !...
z-Test# Datensatz ladenx <- read.csv2("test.csv")x$gr <- as.factor(x$gr)attach(x)# z-Testlibrary(TeachingDemos)z <- rnorm(...
Your turn!IQ ist auf einen Mittelwert von100 mit einerStandardabweichung von 15 normiert (Population).Teste jeweils per z-...
t-Test# t-Testlibrary(sm)! ! ! !g1 <- x[gr==1,]$iqg2 <- x[gr==2,]$iqplot(iq ~ gr)! ! ! ! !        # Boxplotsm.density.comp...
Your turn!Mache jeweils einen t-Test auf Mittelwertsunterschiedezwischen allen Stufen des Faktors gr und genderbezüglich d...
Varianzhomogenitätstests# Varianzhomogenitätlibrary(car)!leveneTest(iq ~ gr, data=x)! ! # Levene Test                     ...
Normalverteilungstests# Normalverteilungstestsqqnorm(iq)qqline(iq)shapiro.test(iq)!   # Shapiro-Wilk Testlibrary(nortest)l...
One-Way-ANOVA I### Einfaktorielle Varianzanalyselibrary(sm)plot(iq ~ gr)! ! ! ! !          # Box plotsm.density.compare(iq...
Posthoc-Tests# Post-hoc Testsplotmeans(iq ~ gr)! # mean plot mit Konfidenzgrenzenpairwise.t.test(iq, gr)pairwise.t.test(iq...
Your turn!Mache eine Anova über die Variable height überden Faktor gr. Mache als Post-Hoc Tests paarweiset-Tests mit Bonfe...
Two-Way-ANOVA### 2-WAY-ANOVA ###fit <- aov(iq ~ gr*gender, data=x)summary(fit)# Two-way Interaction Plotinteraction.plot(g...
Your turn!Schaue in einer zweifaktoriellen Anova, ob sich dieVariable height über die Faktoren gr undgender unterscheidet....
Code: Lineare Modelle /             Regression# lineare Modelle schätzenm1 <- lm(iq ~ height, data=x)!   !   # Modell mit ...
Funktionen für lineare Modelle# Konfidenzintervalle ausgeben und plottenlibrary(sfsmisc)attach(df)m <- lm(y1 ~ x1)plot(y1 ...
Kollinearität# collinearity diagnosticslibrary(perturb)n <- 30x1 <- rnorm(n)x2 <- x1*.5 + rnorm(n, , .2)y1 <- 2 + .3*x1 + ...
Linearitätstests# linearity diagnosticslibrary(lmtest)harvtest(m)! ! ! ! ! ! ! !          # Harvey-Collier Testresettest(m...
Your turn!Berechne für die Variablen iq und height eine lineareRegression. Mache einen scatterplot mitKonfidenzintervallen ...
Code: Modelle vergleichen# Modelle vergleichenfit1 <- lm(y1 ~ x1, data=df)fit2 <- lm(y1 ~ x1 + x2, data=df)anova(fit1, fit...
Your turn!Berechne für die Variablen iq eine Regression aufheight, gender und gr und mache sukzessivVergleichstests mit de...
Datensatz ngo aufbereiten# Daten Schul Beispiel Kähler einlesenx <- read.csv2("ngo.csv")# Kategoriale Variablen definieren...
Kontraste# Dummy- / treatment Kodierungcontr.treatment(3)! ! ! ! # baseline ist erstecontr.treatment(3, base=3)! # baselin...
Varianzanalyse als ALM# Effektkodierung (sum-to-zero) wählencontrasts(x$jahrgang) <- contr.sum(3)# Modelle berechnenm1 <- ...
Kovarianzanalyse als ALM                           142
Kovarianzanalyse als ALM# Modelle berechnenm0 <- lm(deutsch ~ 1, x)m1.j <- lm(deutsch ~ jahrgang, x)m1.m <- lm(deutsch ~ m...
Kovarianzanalyse als ALM# Dummy Codierung (treatment coding; Jahrgang 13 als baseline)contrasts(x$jahrgang) <- contr.treat...
Kontraste            145
Kontraste# Neue Variable berechnenattach(x)x$jahrges[jahrgang==11 & geschl=="männlich"]   <-   1x$jahrges[jahrgang==11 & g...
Your turn!a) Berechne eine Regression von iq auf gr mitGruppe 2 als Baseline.b) Füge in das Modell eine Interaktion zwisch...
Code: Faktorenanalyse### FAKTORENANALYSE ###wow <- na.omit(wow)! !                   !      !   # Missings entfernennames(...
Your turn!Lade die .csv Datei fa_daten.csv und mache mit ihr eineFaktorenanalyse.                                         ...
Code: Hauptkomponenten-         analyse (PCA)### PCA ###wow <- na.omit(wow)!                   !   !   !   # Missings entf...
Code: KTT### Cronbachs Alpha: interne Konsistenz ###library(psych)fit <- fa(wow[4:23], 6)! !      # Polung der Variablenpr...
152
library(Rcmdr)Rcmdr()          153
154
155
156
157
158
DAY 4Great Graphics                 DAY 4                 Charles J. Minard. Verluste der französischen Armee im          ...
Minard‘splot made in R                 Muenchen, R. (2009). R for SAS and SPSS users. New                                 ...
Peter Aldhous, Haiti Earthquake in Rhttp://www.readwriteweb.com/hack/2011/01/how-a-science-journalist-creat.php   161
Peter Aldhous, Earthquakes in Rhttp://www.readwriteweb.com/hack/2011/01/how-a-science-journalist-creat.php   162
„Its not just a pretty picture, its a reaffirmation of the                                                     impact we ha...
Hans Rosling‘s GapminderThe Power of Visualization                     Hans Rosling in action: http://www.youtube.com/    ...
Hans Rosling‘s GapminderThe Power of Visualization   Freely av            ailable a                       s the Goo       ...
Google MotionChart in Rlibrary(googleVis)> Fruits    Fruit Year Location Sales Expenses Profit       Date1 Apples 2008    ...
Google Visualization APIsrequire(datasets)states <- data.frame(state.name, state.x77)G3 <- gvisGeoMap(!states, "state.name...
Graphic Systems                R Graphic Systemsbase graphics                   grid graphics                      lattice...
Graphic Systems                R Graphic Systemsbase graphics                   grid graphics                      lattice...
Wiederholung# Datensatz World of Warcraft ladensetwd("/Users/markheckmann/data")! !          # Verzeichnis wechselnwow <- ...
Verfügbare Datensätze### Daten zum experimentieren #### Viele Datensätze sind bereits in R vorhandendata()!      !   !   !...
Grafiken I### einfache Visualisierungen ###library(ggplot2)!    !   !   # ggplot2 laden?diamonds!! ! !      !   !   # diamo...
Grafiken II?boxplot! ! ! ! !               !boxplot(price ~ clarity)! !   ! # price über clarity?pairs!      ! ! ! ! !     ...
Grafiken III?coplot! !     # condition plot: scatterplots konditioniert      !   !    # nach einer oder mehreren Variablen!...
Your turn!Erzeuge einen conditioned plot (coplot) von score(y-Achse) gegen KO (x-Achse) konditioniert mit demFaktor Zeitau...
Your turn!Erzeuge einen dotchart und ein barplot auf dem jeweilsGeschlecht gegen Alter zu sehen ist. Nutze hierzu dietable...
Grafikoptionen ändern I#### Grafikoptionen verändern #### Jede Funktion hat viele Parameter, die verändert# werden können, ...
Grafikoptionen ändern II?barplotbarplot(table(Geschlecht, Zeitaufwand))! # stacked / übereinander!barplot(table(Geschlecht,...
Grafikbeispiel#### iris dataset #######?irishist(iris)! ! ! ! ! !         !   #   Histogrammepairs(iris[1:4])! ! ! !       ...
Your turn!Erzeuge folgendes barchart mit der Funktion barplot()                                          Altersverteilung ...
base graphics I### Einführung ins base Grafik System #### grafische Basiselemente?plot! ! ! ! ! ! !              ! welche ...
base graphics II?linesplot(iq, pisa)! ! ! ! ! ! !         #   plotten von x gegen ylines(x=c(60,130), y=c(40,80))! !   #  ...
base graphics III?ablineplot(iq, pisa, col="brown", !# plotten von pisa gegen iq     pch=16)abline(v=mean(iq),   !! !     ...
Your turn!Erzeuge einen plot mit dem WoW Daten. Plotte AL gegen score in derFarbe blau. Benenne die Achsen und gib der Gra...
base graphics IV?pointsplot(iq, pisa, type="n")! !   !   # plotten ohne Punktepoints(iq, pisa)! ! ! !       !   # Punkte h...
Grafische Bereiche                    184
base graphics V### par settings ###par()! ! ! ! !           # Parameter settings anschauenoldPar <- par()!! !      # Param...
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen
Nächste SlideShare
Wird geladen in …5
×

R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

4.179 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
4.179
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
423
Aktionen
Geteilt
0
Downloads
38
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

R-Kurs Mark Heckmann WiSe 2010-2011 Uni Bremen

  1. 1. Einführung indas R Frame-workMark HeckmannUniversität BremenWiSe 2010/11 1
  2. 2. Was erwarten wir von dem Kurs?• Von vorne abholen / Grundlagen• Grafiken erstellen• Datensätze speichern / erstellen• Weniger und genauer statt viel oberflächlich 2
  3. 3. „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. 180Reuter, 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). 3
  4. 4. ACHTUNG METHO DIK ≠ ! METHOD „Auch wenn das Handwerkszeug solcher OLOGIE Forschung sich virtuos etablierter Techniken der Empirie und des Experimentierens bedient (in deutlicher Abgrenzung zur dümmlichen - ingnoranten Aufgabe dieser Instrumente) ...“ Reuter, 2002 , S. 180Reuter, 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). 3
  5. 5. R-Appetizer 4
  6. 6. ● Jaw-drop ping ● ● graphics ! 5 ● 4 ● ● ● ● ● ● factor(cyl) ● ● ●● ● ● ● 4wt ● ● ● ● 6 ● 3 ● 8 ● ● ● ● ● ● ● ● 2 ● ● ● ● 15 20 mpg 25 30 5
  7. 7. 1.2 1.0 0.8 mpaadensity NC−17 PG 0.6 PG−13 R 0.4 0.2 0.0 2 4 rating 6 8 10 6
  8. 8. 0.6 0.5 0.4 cut Fairdensity Good 0.3 Very Good Premium Ideal 0.2 0.1 0.0 56 58 60 62 depth 64 66 68 70 7
  9. 9. 8
  10. 10. 9 http://learnr.wordpress.com/2009/04/09/ggplot2-sales-dashboard/
  11. 11. http://learnr.wordpress.com/2009/04/09/ggplot2-sales-dashboard/10
  12. 12. 11
  13. 13. Revenue Profit$200k $50k Sales Dashboard $40k All Currency in USD http://learnr.wordpress.com/2009/04/09/ggplot2-sales-dashboard/$150k $30k$100k $20k $50k $10k $0 $0 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Order Size New Customers Customer Satisfaction Market Share On−Time Delivery400 400 3.0 25% 80% 2.5 20%300 300 2.0 60% 15%200 200 1.5 40% 1.0 10%100 100 0.5 5% 20% 0 0 0.0 0% 0% Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Chardonnay Cabernet Merlot Sauvignan Blanc Zinfandel$100k $100k $100k $100k $100k $80k $80k $80k $80k $80k $60k $60k $60k $60k $60k $40k $40k $40k $40k $40k $20k $20k $20k $20k $20k $0 $0 $0 $0 $0 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 North America Asia Europe Middle East South America$100k $100k $100k $100k $100k $80k $80k $80k $80k $80k $60k $60k $60k $60k $60k $40k $40k $40k $40k $40k $20k $20k $20k $20k $20k $0 $0 $0 $0 $0 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Sales Pipeline Top 10 Customers Probability Happy Hour Middle East of Sale Cheers Barrel and KegSouth America 25% American Vintners Best Sips and Bites Asia 50% The Beverage Company Spirits of the Age Europe 75% Fruit of the Vine 12 Wines R UsNorth America 90% The Big Wine Store $0 $2k $4k $6k $8k $10k$12k$14k $0 $20k $40k $60k $80k
  14. 14. 13
  15. 15. 14
  16. 16. DAY 1Learning grammar - Basics of the R language 15
  17. 17. Erster Ta g=Hürde ne hmen 16
  18. 18. 17
  19. 19. “Nurse, get on the internet, go to SURGERY.COM,scroll down and click on the ,‘Are you totally lost?‘ icon.“ 18
  20. 20. ACHTUNG! Flache Lernkurve„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, tutmir leid, auf zwei Beinen gehen ist nicht mein Ding.“ Dr. Eckart von Hirschhausen  19
  21. 21. Endless o n R Ressources the web!• 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
  22. 22. 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
  23. 23. 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
  24. 24. 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. enthalten #a * 10!! ! ! Fehler, da Zeichen mal Zahl # 23
  25. 25. 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
  26. 26. 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
  27. 27. Code : Bezeichnung & StilneueVariable1 <- 7neueVariable2=neueVariable1+2! ! # kaum lesbar! schlechter! ! ! ! ! ! ! ! ! ! ! # Stil!neueVariable2 <- neueVariable1 + 2! # besser, sauber getrenntEin R-Styleguidehttp://google-styleguide.googlecode.com/svn/trunk/google-r-style.html 26
  28. 28. Code : Logik I# Logische Operationen1 == 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 UNDTRUE & TRUE! ! # TRUETRUE & FALSE!! # FALSEFALSE & TRUE!! # FALSEFALSE & FALSE! # FALSE 27
  29. 29. Code : Logik II# logisches ODERTRUE | TRUE! ! # TRUETRUE | FALSEFALSE | TRUEFALSE | FALSE# KurzformenT !! ! ! ! # Kurzform von TRUEF! ! ! ! ! # Kurzform von FALSET | FT & T 28
  30. 30. 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 3rnorm() für random normal distribution> rnorm(4) [1] -0.3628728 -0.4580532 -1.3729865 -1.5834625 29
  31. 31. Funktionen IIDie Angaben innerhalb einer Klammer vonFunktionen heißen Argumente.> rnorm(4) [1] -0.3628728 -0.4580532 -1.3729865 -1.5834625Jede Funktion hat ein definiertes Set an Argumenten,die sie verarbeiten kann (s. Dokumentation)> ?rnormUm sich alle möglichen Argumente anzeigen zu lassen> args(rnorm) 30
  32. 32. Funktionen IIIJede Funktion gibt ein Objekt zurück> c(1,2,3)[1] 1 2 3Ggf. kann dies auch unsichtbar geschehenv <- rnorm(100)hist(v)a <- hist(v) # Rückgabe der Funktion speichernaFalls eine Funktion nichts spezifisches zurückgibt,gibt sie ein NULL Objekt (leer) zurücka <- plot(1:10)a 31
  33. 33. “Nurse, get on the internet, go to SURGERY.COM,scroll down and click on the ,‘Are you totally lost?‘ icon.“ 32
  34. 34. Hilfe! Die allerwichtigste Funktion!### HELP R ###help.start()!! ! # Hilfe aufrufen. Auch über das # Menü möglich?mean! ! ! ! ! # Hilfe zur Funktion "mean"help(mean)! ! # identisch! !help("mean")!! # identisch! ! 33
  35. 35. R-help = an R-user best friend ! R-helpLeer 34
  36. 36. 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 Elementsa <- 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öglichd <- c(eins=1, zwei=3)! named vector, die Elemente haben Namen # 35
  37. 37. 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
  38. 38. Your turn! Erzeuge folgende Vektoren, mit jeweils mit 10 Elementen[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 37
  39. 39. Code : Wichtige Funktionen# Wichtige Funktionena <- c(1.2, 3.3, 6.1, 4.6)max()! ! # Maximummin()! ! # Minimumsqrt()!! # Quadratwurzelround()! ! # rundensum()! ! # Summemean()!! # Mittelwertlength()! # Länge des Vektorsrnorm()! ! # zufällige NV Werte generieren 38
  40. 40. Remembe he r: lp.star t() Your turn!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() 39
  41. 41. Code : Konstanten# in R eingebaute KonstantenLETTERS! ! ! # Großbuchstaben von A bis Zletters! ! ! # Kleinbuchstaben von a bis zmonth.name! ! # englische Monatsnamenmonth.abb!! ! # englische Monatsnamen abgekürztpi! ! ! ! ! # die Zahl Pi 40
  42. 42. 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
  43. 43. Your turn! Erzeuge folgende Ausgabe in der Konsole, indem Du paste() und die Konstante month.name nutzt."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" 42
  44. 44. Code : vectorwise# Vektorwertiges Arbeitena <- 1:3b <- 3:1a - b! ! ! ! ! ! # Vektorweise Substraktiona * b! ! ! ! ! ! # Vektorweise Multiplikationc(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
  45. 45. Code : Zugriff# Zugriff auf Elemente eines Vektorsb <- 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
  46. 46. Editoren nutzen R EditorMac OS Textmate Windows Tinn-RDatei wird als .R Datei gespeichert und kann soimmer wieder genutzt werden 45
  47. 47. 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
  48. 48. Code : Anwendung BMI II### Standardabweichung "zu Fuss" berechnensum.bmi <- bmi[1] + bmi[2] + bmi[3] + bmi[4]!! # Summe der Wertemean.bmi <- sum.bmi/4! ! # Mittelwertsum(bmi)! ! ! ! ! ! # Summesum(bmi)/4! ! ! ! ! # Mittelwertmean(bmi)!! ! ! ! ! # Mittelwertlength(bmi)! ! ! ! ! ! ! ! ! ! # Länge des Vektorssum(bmi)/length(bmi)! ! ! ! ! ! ! # Durchschnitt 47
  49. 49. 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 berechnensd.bmi <- sqrt(sum(bmi – mean.bmi)^2)/n-1)sd(bmi)! ! ! ! # so ist es natürlich viel einfacher 48
  50. 50. Take along! Selbst wenn etwas nicht in Rnicht existiert, kann man es sich selber programmieren! 49
  51. 51. Your turn!Berechne die geschätzte Kovarianz für folgende zwei Datenreihen in R „zu Fuß“ x <- c(-2,-1,-1,0,1,1,2) y <- c(-1,-2,1,0,2,-1,1) 50
  52. 52. Code : Navigieren# Projektordner anlegen /RCourse# Navigieren in Verzeichnissengetwd() !! ! ! ! # 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
  53. 53. Your turn!Lege ein Verzeichnis RCourse an (nicht über R) und setze es als neuesArbeitsverzeichnis in R. Lege einen Unterordner data an und wechsele in ihn. Wechsel anschließend wieder in den übergeordneten Ordner. 52
  54. 54. Code : Arbeitsbereich sichern / laden### Workspace speichern ###?save.image()save.image("erster Kurstag.RData")! # Arbeitsbereich speichernls()! ! ! ! ! ! # Alle Objekte im Arbeitsbereich ! # anzeigenrm()! ! ! ! ! ! # Objekte aus Arbeitsbereich löschenrm(list=ls)! ! ! ! # Alle Objekte aus Arbeitsbereich löschenload("erster Kurstag.RData")!! # den zuvor gespeicherten ! # Arbeitsbereich ladenls()! ! ! ! ! ! ! ! ! # Objekte sind wieder da 53
  55. 55. 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 Vektorc(TRUE, 2, FALSE)! ! ! ! # innerhalb eines Vektors stets # nur ein Typ möglichc(T, "A", 1)!! ! ! ! # Automatische Umwandlung auf # niedrigstes mögliches Datenniveau 54
  56. 56. Code : Vektoren II# Zugriff auf eine Elemente durch eckige Klammerna[1]! ! ! ! # Zugriff auf erstes Element des Vektorsa[c(1,2)]!! ! # Zugriff auf die ersten beiden Elementea[c(2,1)]! ! ! # umgekehret Reihenfolgea[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öglicha[-1]! ! ! ! ! # negatives Indizierena[c(-1,-2)]! ! ! ! # negatives Indizieren 55
  57. 57. Code : Vektoren IIIx <- c(NA, 1, 2, NA, 99)! # Vektor mit missing values (NA)x == 1!! ! ! ! ! ! welcher Eintrag ist gleich 1 #x > 1! ! ! ! ! ! ! welche Einträge sind größer 1 #x == NA! ! ! ! ! ! welcher ist NA? so falsch #is.na(x)! ! ! ! ! ! Funktion is.na() nutzen #which(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
  58. 58. Your Turn!Oftmals wird 99 oder 999 als Platzhalter für missing valuesbenutzt. Ersetze alle Werte des Vektors, die 99 oder 999sind mit NA.x <- c(1,4,3,99,4,3,999,99,3,6,999) 57
  59. 59. Your Turn!v <- 1:10Setze alle Elemente des Vektors v, die kleiner gleich 3 sindauf 0, alle die zwischen 4 und 7 sind auf 1 und alle größersieben auf NA.[1] 0 0 0 1 1 1 1 NA NA NA 58
  60. 60. Code : Matrix I### matrix – zweidimensionales Datenobjekt ###?matrixmatrix(1:12, nrow=3, ncol=4)!! ! ! # Matrix erstellenmatrix(1:12, nrow=3, ncol=4, byrow=TRUE)! # Matrix reihenweisee <- matrix(c(1,0,0,0,1,0,0,0,1), 3, 3)! ! # Einheitsmatrixdiag(3)! ! ! ! ! ! ! # Einheitsmatrix per Funktionis.matrix() 59
  61. 61. Your Turn!Erzeuge eine Matrix M mit 20 Spalten und den folgendenZeileneinträgen:Zeile 1: 1, 2, ..., 20Zeile 2: Zahlen zwischen 2 und 40 mit Abstand 2Zeile 3: Spalte 1-10 mit Eintrag 1, Spalte 11-20 mit Eintrag 2Zeile 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,6Zeile 6: 1,2,2,2,3,3,3,3,3,3,1,2,2,2,3,3,3,3,3,3 60 Quelle: Foliensatz von Peter Ruckdeschel / Matthias Kohl. R/S-plus für Einsteiger und Fortgeschrittene
  62. 62. Code : Matrix II# auf Matrixelemente zugreifenx[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 2x > 5! ! ! ! ! # welche Elemente sind größer 5is.na(x)! ! ! ! # Welche Einträge der Matrix sind NA? 61
  63. 63. 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 zuweisenx[1, 2:3] <- c(100,100)! # Zwei Zellen verändern 62
  64. 64. Code : Matrix IV# Zeilen und Spaltennamen hinzufügencolnames(x)! ! ! ! # Spaltennamen anzeigenrownames(x)! ! ! ! # Zeilennamen anzeigencolnames(x) <- c("Winter", "Frühling", "Herbst", "Winter")! # Spaltennamen setzenrownames(x) <- c("A", "B", "C")! # Zeilennamen setzenx[, "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öschencolnames(m)! ! ! ! ! # Spaltennamencolnames(m)[4]! ! ! ! # Viertes Elementcolnames(m)[4] <- "April"! Viertes Element verändern #m 63
  65. 65. Your turn!Erstelle folgende Matrix (mit zufälligen Werten): Tip: nutze rnorm() und round() 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 64
  66. 66. 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
  67. 67. 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 Zeilenanzahlrbind # 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
  68. 68. Your Turn!1) Erzeuge eine Matrix M mit 7 Spalten und 7 Zeilen auszufä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. 67 Quelle: Foliensatz von Peter Ruckdeschel / Matthias Kohl. R/S-plus für Einsteiger und Fortgeschrittene
  69. 69. 68
  70. 70. DAY 2From ABC tosentences -getting startedwith data analysis 69
  71. 71. 70
  72. 72. http://people.hofstra.edu/steven_r_costenoble/MontyHall/MontyHallSim.html 71
  73. 73. Monty-Hall-DilemmaAngenommen Sie befinden sich in einer Spielshow und haben die Wahlzwischen drei Toren. Hinter einem Tor ist ein Auto, hinter den anderen sindZiegen. Das Auto und die Ziegen sind vor der Show zufällig hinter die Toreverteilt worden. Die Regeln der Spielshow sind folgende: Nachdem Sie einTor gewählt haben bleibt dieses zunächst geschlossen. Der ShowmasterMonty Hall, der weiß was sich hinter den Toren befindet, muss nun eineder beiden verbleibenden Tore öffnen, und hinter dem von ihm geöffnetenTor muss sich eine Ziege befinden.Wenn hinter beiden verbleibendenToren 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, obSie bei Ihrer ersten Wahl bleiben oder zum letzten verbleibenden Torwechseln 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 2wechseln?“ Ist es zu Ihrem Vorteil, Ihre Wahl zu ändern? 72
  74. 74. Code : Matrix VII### Rechnen mit MatrizenA <- 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ängenrbind(A, A) %*% cbind(A, A)! # Beispiel 73
  75. 75. 74
  76. 76. Geek Hum or! 74
  77. 77. Your turn!Berechne den Vektor b der Regression y regrediert auf x in Matrizenform x <- c(-2,-1,-1,0,1,1,2) y <- c(-1,-2,1,0,2,-1,1) Beachte: die Designmatrix X enthälteine Spalte mit Einsen für die Konstante! Zur Kontrolle: m <- lm(y ~ x) summary(m) 75
  78. 78. Code: Faktoren### factors - für qualitativ unterschiedliche Merkmaleval <- c(1,2,1,1,1,2,3,3)! ! ! ! # neuer Vektorf <- factor(val)fg <- factor(val, levels=1:5)! ! ! # factor erzeugen mitg ! # Levels 1 bis 5levels(f)! ! ! ! ! ! ! # Bezeichnung der Levelslevels(f) <- c("Treatment 1", "Treatment 2", "Control")f !! # Neue Level Bezeichnungenfactor(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 Levels #levels(x) <- c("Treatment 1", "Treatment 2", "Control") ! # Neue Level Bezeichnungen 76
  79. 79. Your turn! Erzeuge einen factor der folgenden Form:[1] Gruppe 4 Gruppe 4 Gruppe 4 Gruppe 4Gruppe 3 Gruppe 3 Gruppe 3 Gruppe 2 Gruppe 2Gruppe 1Levels: Gruppe 1 Gruppe 2 Gruppe 3 Gruppe 4 77
  80. 80. Code: data frames Idata framesIn Matrizen müssen alle Einträge vom selben Typ sein. Z. B. alles numerisch oderalles characters. data frames können pro Spalte unterschiedliche Typen enthalten(Faktoren, numerische Werte, Zeichenketten). Sie müssen jedoch stets dieselbeAnzahl 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
  81. 81. Code: data frames II### Zugriff auf Elemente eines data framesd["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")]! # identischd[-1,]! ! ! ! ! ! # ohne erste Zeiled[-(1:2), -1]! ! ohne erste beiden Zeilen, ohne # ! erste Spalte #### Erweiterung des data frames um einen factorf <- factor(c("m", "m", "w", "w", "w"))data.frame(Geschlecht= f, treat, control) 79
  82. 82. Your turn! konstruiere folgenden data frame:(IQ normalverteilt um 100 mit sd=15; BMI normalverteilt um 20, sd=5) Geschlecht Intervention IQ BMI 1 m Control 94.8 22.5 2 m Treat 113.1 19.6 3 m Placebo 107.1 24.3 4 m Control 108.8 9.2 5 m Treat 102.4 24.5 6 m Placebo 104.8 23.0 7 m Control 90.6 17.9 8 m Treat 102.9 18.0 9 m Placebo 105.4 17.7 10 m Control 105.4 14.4 11 w Treat 107.9 16.0 12 w Placebo 108.8 18.9 13 w Control 93.7 19.5 14 w Treat 113.8 19.4 15 w Placebo 70.7 16.4 16 w Control 79.1 21.8 17 w Treat 116.5 22.3 18 w Placebo 106.3 19.2 19 w Control 133.6 20.4 20 w Treat 79.2 23.3 80
  83. 83. Code: Subsets I### data frames subsettingd[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 Spalted["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
  84. 84. Your turn! Baue den vorher erzeugten Datensatz um: a) erst dieungeraden, dann die geraden Zeilen b) neue Spaltenreihenfolge IQ BMI Geschlecht Intervention 1 109.9 18.9 m Control 3 101.2 18.7 m Placebo 5 111.4 14.7 m Treat 7 104.6 17.3 m Control 9 103.7 24.9 m Placebo 11 97.1 16.0 w Treat 13 89.7 28.7 w Control 15 103.2 20.5 w Placebo 17 86.6 29.4 w Treat 19 89.6 28.3 w Control 2 109.1 18.7 m Treat 4 110.1 18.0 m Control 6 110.3 22.2 m Placebo 8 123.5 23.2 m Treat 10 107.6 17.8 m Control 12 104.2 20.1 w Placebo 14 69.2 21.1 w Treat 16 96.9 31.0 w Control 18 103.9 14.5 w Placebo 20 96.4 17.5 w Treat 82
  85. 85. 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"]! ! # Identischindex <- 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
  86. 86. Your turn! Wähle aus dem Datensatz alle Fälle aus, die weiblich sind und zur Treatmentgruppe gehören 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 84
  87. 87. 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 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 85
  88. 88. Code: subset()### subsets mit subset() erstellen?subset! ! ! ! ! ! ! ! ! # die subset Funktionsubset(d, subset=IQ < 100 & Geschlecht=="m")!! ! # Logische Auswahlsubset(d, IQ > 120 | IQ < 80)! ! # Logische Auswahlsubset(d, select=c(IQ, Geschlecht))! # Variablenauswahl mit selectsubset(d, select=c("IQ", "Geschlecht")) # identischsubset(d, IQ > 120, select=c(IQ, Geschlecht))! # kombiniert 86
  89. 89. 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. 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 87
  90. 90. Your turn! Wähle aus dem Datensatz mit subset alle Fälle aus, die a) einen IQ außerhalb des Intervalls [90-110] haben. Geschlecht Intervention IQ BMI 6 m Placebo 84.5 22.2 7 m Control 80.7 13.8 10 m Control 118.9 15.7 11 w Treat 123.8 21.5 16 w Control 78.9 25.6... und b) zugleich weiblich sind Geschlecht Intervention IQ BMI 11 w Treat 123.8 21.5 16 w Control 78.9 25.6 88
  91. 91. packages laden Die R-base Installation enthält sog.My Computer packages, in denen bestimmte Funktionen enthalten sind. packages müssen erst geladen werden, bevor die in ihnen enthaltenen Funktionen benutzt werden können.R-Base installation Einige packages werden automatisch basic packages geladen, andere müssen nach Bedarf geladen werden. > library(package.name) 89
  92. 92. packages installieren CRAN server >1500 additional on de packages man d My ComputerInstallation per Kommandozeile> install.packages("package.name") R-Base installationoder per R-Konsolenmenü basic packages 90
  93. 93. packages installieren### packages installieren und ladeninstall.packages("plyr")! # plyr installierenlibrary(plyr)! ! ! ! # package ladendetach(package:plyr)! ! # package entfernendescribe()! ! ! ! ! # Funktion existiert nichtinstall.packages("psych")!# psych installierenlibrary(psych)! ! ! ! # Paket ladendescribe(rnorm(100))! ! # nun existiert siesearch() ! packages im Suchpfad # 91
  94. 94. 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 packagesetwd("/Users/markheckmann/data")! ! ! ! ! ! # Arbeitsverzeichnis wechselndf <- read.table("ngo.txt") # mieten.txt einlesenhead(df) # Zeilen haben keine Überschriftdf <- read.table("ngo.txt", header = TRUE) # Einlesen mit header=TRUEhead(df) 92
  95. 95. 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
  96. 96. Your turn!Lies den Datensatz wow_excerpt.csv ein und speichere ihn in der Variablen df 94
  97. 97. Code: attach data# Objekte/Datensätze in den Suchpfad hängenK1! ! ! ! ! ! # Objekt unbekanntattach(wow)! ! ! # Datensätze in den Suchpfad hängenK1! ! ! ! ! ! # Objekt nun im Suchpfaddetach(anscombe)! # Datensatz aus Suchpfad entfernenK1! ! ! ! ! ! # Objekt wieder unbekanntsearch() # packages im Suchpfad 95
  98. 98. Datensatz wow_excerpt.csvGeschlecht 1=keine Angabe , 2=männlich, 3=weiblichAlter 1=keine Angabe, 2=unter 18, 3=18-29, 4=30-40, 5=41-50 , 6=über 50 1=keine Angabe, 2=weniger als 7 Stunden, 3=weniger als 14 StundenZeitaufwand (pro Woche) 4=weniger als 20 Stunden, 5=20-30 Stunden, 6=30-40 Stunden, 7=mehr als 40 StundenK1 Kontrollverlust: Ich sage mir oft: „Nur noch ein paar Minuten“ und kann dann doch nicht aufhörenK2K3K4 Entzugserscheinungen: Ich beschäftige mich auch während der Zeit, inE1 der ich nicht WoW spiele, gedanklich sehr viel mit dem Spiel.E2E3E4T1 Toleranzentwicklung: Mittlerweile verbringe ich mehr Zeit bei WoW als zu Beginn meiner Online- Aktivitäten.T2T3T4AL1 Arbeit/Leistung: Meine Leistungen in der Schule/im Beruf leiden unter dem Spielen bei WoW.Al2AL3Al4nKsB1 Soziale Beziehungen: Seitdem ich WoW spiele, haben sich einige Freunde von mir zurückgezogen.nKsB2nKsB3 96nKsB4
  99. 99. EDA - die Daten anschauen### Anschauen der WoW Daten ###head(wow)!! ! ! # die ersten Zeilennames(wow)! ! ! # Variablennamenlibrary(psych)! ! # library psych ladendescribe(wow)! ! # Überblick über Datensatzlibrary(Hmisc)hist.data.frame(wow[1:9])!! # Histogramme der! ! ! ! ! ! ! ! ! # ersten neuen Variablenhist.data.frame(wow[10:17])! # Histogrammehist.data.frame(wow[18:23])! # Histogrammemulti.hist(wow[1:9])! ! ! # aus psychpairs(attitude)pairs.panels(attitude)! ! ! # aus psychpairs.panels(attitude, lm=TRUE)! 97
  100. 100. 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 dieVariablen ohne Angabe des Datensatzes zugreifen kann.Entferne den Datensatz dann wieder aus dem Suchpfad. Installiere und lade dann das psych package unddie nutze die darin enthaltene Funktion describe(), um einen ersten Eindruck von den Daten zubekommen. Danach „entlade“ das package psych. 98
  101. 101. Code: Deskriptive Statistiken### Deskriptive Statistiken ###summary(wow)!! ! # summaries der Variablenattach(wow)! ! ! ! # in den Suchpfad hängenlibrary(psych)! ! ! # psych ladendescribe(wow)! ! ! # Basisstatisiken der Variablendescribe.by(wow[4:11], Geschlecht)! ! # Basisstatisiken pro Faktorstufe von Geschlechtdescribe.by(wow[4:11], list(Geschlecht, Alter)) # Basisstatisiken pro Faktorstufe von Geschlecht # und Alterdetach(wow)! ! ! ! # Aus dem Suchpfad entfernen 99
  102. 102. 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 Darstellungprop.table(mytable) ! ! # Zellen Prozenteprop.table(mytable, 1) ! ! # Zeilen Prozenteprop.table(mytable, 2) ! ! # Spalten Prozente 100
  103. 103. crosstabs II# Three Way Tablesmt <- table(Geschlecht, Alter, Zeitwaufwand)ftable(mt)# Tables mit CrossTablelibrary(gmodels)CrossTable(Geschlecht, Alter)CrossTable(Geschlecht, Alter, format="SPSS") 101
  104. 104. Your turn!Mache folgende Häufigkeitstabellen für den wowDatensatz mit CrossTable:1) Alter gegen Zeitaufwand2) Geschlecht gegen ZeitaufwandLese danach den Datensatz ngo.csv ein und erstellea) Kreuztabelle für jahrgang vs. geschlb) Erzeuge Histogramme und Scatterplots für dieVariablen mathe, englisch, deutsch 102
  105. 105. WoW Fragebogen 103
  106. 106. 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 umkodierendetach(wow) 104
  107. 107. Rekodieren### Rekodieren #### verschiedene Funktionen zum Rekodierenlibrary(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
  108. 108. 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 benennenwow$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
  109. 109. Your turn!Lies den Datensatz wow_excerpt.csv ein unddurchlaufe die Schritte:a) missings NA setzenb) Alle qualitativen Merkmale in Faktoren umwandelnund die Faktorstufen benennen 107
  110. 110. 108
  111. 111. Beratungsgespräch IEin junger Mann ohne Risikofaktorenkommt in die AIDS-Beratung undinformiert sich über die gängigenHIV-Tests (ELIZA plus Western-Blot).Der Arzt sagt: „Die beidenkombinierten AIDS-Testsentdecken mit 99,9%Sicherheit das HI-Virus(Sensitivität) und sindsogar mit 99,99% spezifisch,d.h. eine falsch positive Diagnosekommt nur in 0,01% der Fälle vor.“ Inder Gruppe, zu der der junge Manngehört, ist HIV mit 0,01% Grundrate nurwenig verbreitet. Der Test fällt positiv aus!Wie wahrscheinlich ist es nun, dass derMann HIV hat? 109
  112. 112. Beratungsgespräch IIVon 100.000 Männern ohne Risikofaktorensind nur etwa 10 mit dem HI-Virusinfiziert (Grundrate). Die beidenkombinierten AIDS-Testsentdecken mit 99,9%Sicherheit das AIDS-Virus (Sensitivität),d.h. würde mandiese hunderttausendMänner testen, dann würden10 von 10 HIV-Positiven einen po-sitiven Befund bekommen. Von den99.990 nicht-infizierten Männern fällt derTest bei 0,01% dieser Personen, also bei un-gefähr 10 Personen, falsch-positiv aus. Wiewahrscheinlich ist eine HIV-Infektion, wennder Mann positiv testet? 110
  113. 113. Gigerenzer, G. (2008). Das Einmaleins der Skepsis: Über den richtigen Umgang mit Zahlen und Risiken. Berlin: Berliner Taschenbuch-Verl.111
  114. 114. BuchtipsGigerenzer, G. (2008). Das Einmaleins der Dubben, H.-H., & Beck-Bornholdt, H.-P.Skepsis: Über den richtigen Umgang mit (2006). Der Hund, der Eier legt: Erkennen vonZahlen und Risiken. Berlin: Berliner Fehlinformation durch Querdenken. rororo,Taschenbuch-Verl. 62196. Reinbek bei Hamburg: Rowohlt. 112
  115. 115. 113
  116. 116. DAY 3SPSS - das Afehlt nicht umsonst„und dann rechnen wirmit dem Taschenrechnerweiter... !“ 114
  117. 117. Variablen berechnen# Neue Variablen berechnenwow$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 ENwow <- transform(wow, TO=(T1 + T2 + T3 + T4)/4)!! # neue Variable TOwow <- transform(wow, AL=(AL1 + AL2 + AL3 + AL4)/4) # neue Variable ALwow <- transform(wow, NK=(nKsB1 + nKsB2 + nKsB3 + nKsB4)/4)! # neue Variable NK 115
  118. 118. Your turn!Lies den Datensatz wow_excerpt.csv ein unddurchlaufe 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
  119. 119. Pakete installieren• HH• car• sm• gmodels• nortest• perturb• sfsmisc• QuantPsyc• TeachingDemos• gplots• lmtest 117
  120. 120. 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 Seiteangegebene Zielvariable (abhängige Variable, response) vondem 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
  121. 121. Formulas IIy ~ 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 Interaktiony ~ x1 * x2! ! ! ! # identischy ~ .! ! ! ! ! ! # alle Variablen aufnehmeny ~ x1 + I(x1^2)! ! # quadratischer Term 119
  122. 122. z-Test# Datensatz ladenx <- read.csv2("test.csv")x$gr <- as.factor(x$gr)attach(x)# z-Testlibrary(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") 120
  123. 123. Your turn!IQ ist auf einen Mittelwert von100 mit einerStandardabweichung von 15 normiert (Population).Teste jeweils per z-Test, ob eine der Gruppen (gr) vondem Populationsmittel abweicht. 121
  124. 124. t-Test# t-Testlibrary(sm)! ! ! !g1 <- x[gr==1,]$iqg2 <- x[gr==2,]$iqplot(iq ~ gr)! ! ! ! ! # Boxplotsm.density.compare(iq, gr)! # Dichte vergleichent.test(g1, g2)! ! ! ! ! ! # unabhängig, zweiseitigt.test(g1, g2, alternative="g")!# einseitig greatert.test(g1, g2, alternative="l")!# einseitig lessert.test(g1, g2, paired=TRUE)! ! # abhängig, zweiseitigt.test(iq ~ gender)! ! ! ! ! # Formel interface 122
  125. 125. Your turn!Mache jeweils einen t-Test auf Mittelwertsunterschiedezwischen allen Stufen des Faktors gr und genderbezüglich der Variablen IQ. 123
  126. 126. Varianzhomogenitätstests# Varianzhomogenitätlibrary(car)!leveneTest(iq ~ gr, data=x)! ! # Levene Test !m <- lm(iq ~ gr, x)leveneTest(m)! ! ! ! ! ! ! ! # mit lm Objektbartlett.test(iq ~ gr, data=x)! !! ! ! ! ! ! ! ! ! ! ! ! ! # Bartlett Testlibrary(HH)hov(iq ~ gr, data=x)! ! ! ! ! # Brown-Forsythplot.hov(iq ~ gr, data=x)! ! ! # visuelle Inspektion
  127. 127. Normalverteilungstests# Normalverteilungstestsqqnorm(iq)qqline(iq)shapiro.test(iq)! # Shapiro-Wilk Testlibrary(nortest)lillie.test(iq)!! # Lilliefors / KS-Test# Tip: weitere Tests im nortest package
  128. 128. One-Way-ANOVA I### Einfaktorielle Varianzanalyselibrary(sm)plot(iq ~ gr)! ! ! ! ! # Box plotsm.density.compare(iq, gr)! # Dichten vergleichenlibrary(gplots)plotmeans(iq ~ gr)! ! ! ! # mean plot mit CIsm <- aov(iq ~ gr, x)! ! ! # ANOVAsummary(m)! ! ! ! ! ! # ZusammenfassungAnova(m)! ! ! ! ! ! # in package carAnova(m, white=TRUE)! ! # bei Heteroskedastizität 126
  129. 129. Posthoc-Tests# Post-hoc Testsplotmeans(iq ~ gr)! # mean plot mit Konfidenzgrenzenpairwise.t.test(iq, gr)pairwise.t.test(iq, gr, p.adj = "none")! ! # ohne Alpha Korrekturpairwise.t.test(iq, gr, p.adj = "none", pool=F)! ! # ohne Alpha Korrekturpairwise.t.test(iq, gr, p.adj = "bonf") ! ! # Bonferroni Korrektur
  130. 130. Your turn!Mache eine Anova über die Variable height überden Faktor gr. Mache als Post-Hoc Tests paarweiset-Tests mit Bonferroni Korrektur. 128
  131. 131. 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
  132. 132. Your turn!Schaue in einer zweifaktoriellen Anova, ob sich dieVariable height über die Faktoren gr undgender unterscheidet.Gebe die Interaktionsplots aus. 130
  133. 133. Code: Lineare Modelle / Regression# lineare Modelle schätzenm1 <- lm(iq ~ height, data=x)! ! # Modell mit 1 Regressorm1! ! ! ! ! ! ! ! ! ! Modell ausgeben #summary(m1)! ! ! ! ! ! ! summary des Modells #m2 <- lm(iq ~ gender*height, data=x) ! ! # zwei Regressoren + Interaktionm2! ! ! ! ! ! ! ! # Modell ausgebensummary(m2)! ! ! ! ! # summary des Modellsplot(iq ~ height)! ! ! # iq gegen height plottenabline(m1)! ! ! ! ! # Regressionsgerade hinzufügen 132
  134. 134. Funktionen für lineare Modelle# Konfidenzintervalle ausgeben und plottenlibrary(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 Individuumconfint(m)! ! # CIs für Paramaterschätzungenlibrary(QuantPsyc)lm.beta(m) !! # Standardisierte Koeffizienten
  135. 135. Kollinearität# collinearity diagnosticslibrary(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)
  136. 136. Linearitätstests# linearity diagnosticslibrary(lmtest)harvtest(m)! ! ! ! ! ! ! ! # Harvey-Collier Testresettest(m, power=2:3)! ! ! ! # RESET Testraintest(y1 ~ x1 + x2, data=df)!! # Rainbow Test
  137. 137. Your turn!Berechne für die Variablen iq und height eine lineareRegression. Mache einen scatterplot mitKonfidenzintervallen für die Mitten und dieIndividuen.Teste abschließend auf Linearität des Modells 136
  138. 138. Code: Modelle vergleichen# Modelle vergleichenfit1 <- lm(y1 ~ x1, data=df)fit2 <- lm(y1 ~ x1 + x2, data=df)anova(fit1, fit2) 137
  139. 139. Your turn!Berechne für die Variablen iq eine Regression aufheight, gender und gr und mache sukzessivVergleichstests mit den Modellen, wobei du miteinem eifachen Modell beginnst und schrittweiseimmer mehr Variablen aufnimmst, die einensignifikanten Erklärungsbeitrag leisten. 138
  140. 140. Datensatz ngo aufbereiten# 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")) 139
  141. 141. Kontraste# 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 140
  142. 142. Varianzanalyse als ALM# 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 141
  143. 143. Kovarianzanalyse als ALM 142
  144. 144. Kovarianzanalyse als ALM# 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 143
  145. 145. Kovarianzanalyse als ALM# 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 144
  146. 146. Kontraste 145
  147. 147. Kontraste# 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) 146
  148. 148. Your turn!a) Berechne eine Regression von iq auf gr mitGruppe 2 als Baseline.b) Füge in das Modell eine Interaktion zwischengr und height hinzu 147
  149. 149. Code: Faktorenanalyse### FAKTORENANALYSE ###wow <- na.omit(wow)! ! ! ! # Missings entfernennames(wow)scree(wow[4:23])! ! ! # Scree plotfa.parallel(wow[1:20])! ! # Scree plotfit <- 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
  150. 150. Your turn!Lade die .csv Datei fa_daten.csv und mache mit ihr eineFaktorenanalyse. 149
  151. 151. Code: Hauptkomponenten- analyse (PCA)### PCA ###wow <- na.omit(wow)! ! ! ! # Missings entfernenfit <- princomp(wow[4:23])loadings(fit)print(loadings(fit), cut=.3) 150
  152. 152. Code: KTT### 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]) 151
  153. 153. 152
  154. 154. library(Rcmdr)Rcmdr() 153
  155. 155. 154
  156. 156. 155
  157. 157. 156
  158. 158. 157
  159. 159. 158
  160. 160. DAY 4Great Graphics DAY 4 Charles J. Minard. Verluste der französischen Armee im 159 Russlandfeldzug 1812-1813. Paris, 20. Nov. 1869
  161. 161. Minard‘splot made in R Muenchen, R. (2009). R for SAS and SPSS users. New York: Springer, p. 160 276.
  162. 162. Peter Aldhous, Haiti Earthquake in Rhttp://www.readwriteweb.com/hack/2011/01/how-a-science-journalist-creat.php 161
  163. 163. Peter Aldhous, Earthquakes in Rhttp://www.readwriteweb.com/hack/2011/01/how-a-science-journalist-creat.php 162
  164. 164. „Its not just a pretty picture, its a reaffirmation of the impact we have in connecting people, even across oceans and borders“Paul Butler, Dec 2010.Visualization of facebookusers‘ friendships between citieshttp://www.facebook.com/note.php?note_id=469716398919 163
  165. 165. Hans Rosling‘s GapminderThe Power of Visualization Hans Rosling in action: http://www.youtube.com/ watch?v=hVimVzgtD6w164
  166. 166. Hans Rosling‘s GapminderThe Power of Visualization Freely av ailable a s the Goo API “Mot gle Visua ionchart lization Can easil “ y be crea ted via th “googleV e R packa is“ ge Hans Rosling in action: http://www.youtube.com/ watch?v=hVimVzgtD6w164
  167. 167. Google MotionChart in Rlibrary(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-31M1 <- gvisMotionChart(! Fruits, idvar="Fruit", timevar="Year")M1! ! ! ! ! ! ! ! # HTML codeplot(M1) 165
  168. 168. Google Visualization APIsrequire(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) 166
  169. 169. Graphic Systems R Graphic Systemsbase graphics grid graphics lattice ggplot2 various packagesmany graphic function 167
  170. 170. Graphic Systems R Graphic Systemsbase graphics grid graphics lattice ggplot2 various packagesmany graphic function 167
  171. 171. Wiederholung# Datensatz World of Warcraft ladensetwd("/Users/markheckmann/data")! ! # Verzeichnis wechselnwow <- read.csv2("wow_excerpt.csv")! ! # Daten einlesen# neue Variablen anlegenwow <- 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 168
  172. 172. Verfügbare Datensätze### Daten zum experimentieren #### Viele Datensätze sind bereits in R vorhandendata()! ! ! ! # 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
  173. 173. 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! ! ! ! ! ! ! Histogramm #library(Hmisc)! ! ! ! # Hmisc Paket ladenhist(score)hist.data.frame(wow[1:16])! # mehrere Histogramme?qqplot! ! ! ! ! ! # QQ-Plotsqqnorm(score)! ! ! ! # gegen Normalverteilung 170
  174. 174. 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
  175. 175. 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
  176. 176. Your turn!Erzeuge einen conditioned plot (coplot) von score(y-Achse) gegen KO (x-Achse) konditioniert mit demFaktor Zeitaufwand.Mache dann einen weiteren Plot mit den beidenkonditionalen Faktoren Zeitaufwand und Geschlecht. 173
  177. 177. Your turn!Erzeuge einen dotchart und ein barplot auf dem jeweilsGeschlecht gegen Alter zu sehen ist. Nutze hierzu dietable() Funktion zur Vorbereitung der Daten. 174
  178. 178. Grafikoptionen ändern I#### Grafikoptionen verändern #### Jede Funktion hat viele Parameter, die verändert# werden können, siehe ?plot und ?parattach(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
  179. 179. 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)!! ! ! ! ! ! # kleinerbarplot(table(Geschlecht, Zeitaufwand),! # Legende hinzufügen ! legend.text=c("männlich", "weiblich"),!! ! cex.names=.8)detach(wow) 176
  180. 180. 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 Speziecol <- c("red", "green3", "blue")[iris$Species]# Farbvektor zuweisenpairs(iris[1:4], pch=21, col=col) 177
  181. 181. Your turn!Erzeuge folgendes barchart mit der Funktion barplot() Altersverteilung unter 18 18−29 30−40 41−50 über 50 w Geschlecht m 0 50 100 150 200 250 300 Anzahl an Personen 178
  182. 182. 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 Zufallplot(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
  183. 183. 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
  184. 184. base graphics III?ablineplot(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
  185. 185. Your turn!Erzeuge einen plot mit dem WoW Daten. Plotte AL gegen score in derFarbe blau. Benenne die Achsen und gib der Grafik eine Überschrift.Zeiche dann eine gestrichelte vertikale Linie beim Mittelwert von Al undeine horizontale beim Mittelwert von score ein. Füge zuletzt eineRegressionsgerade in rot hinzu. Übung ● ● 3.5 ● ● ● ● ● ● ● 3.0 ● ● ● ● ● ● ● ● ● ● ● ● ● ● 2.5 Suchtscore ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 2.0 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 1.5 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 1.0 ● 1.0 1.5 2.0 2.5 3.0 3.5 4.0 negative Konsequenzen 182
  186. 186. 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
  187. 187. Grafische Bereiche 184
  188. 188. base graphics V### par settings ###par()! ! ! ! ! # Parameter settings anschauenoldPar <- par()!! ! # Parameter settings speichernplot(1:10)! ! ! ! # einfacher plotpar(mar=c(4,4,4,8))! ! # Margin verändernplot(1:10)! ! ! ! # einfacher plotpar(mfrow=c(1,2))! ! # mfrow ändernplot(1:10)! ! ! ! # plot 1plot(1:10)! ! ! ! # plot 2par(oldPar)! ! ! ! # alte Parameter wieder laden 185

×