Statistische Auswertungen mit R Universität Kassel, FB 07 Wirtschaftswissenschaften Dipl.-Volksw. Markus Pullen Wintersemester 2012/13 Beispiele 1. Sitzung Einstieg, Berechnungen und Funktionen, Zuweisungen R-Download unter http://cran.r-project.org/ Wählen Sie immer die 32-Bit-Version. > getwd() [1] > # Menü: Datei > Verzeichnis wechseln > getwd() [1] "C:/Dokumente und Einstellungen/USERNAME/Eigene Dateien/R_Projekte/R_Kurs" > # Menü: Datei > Sichere Workspace > save.image("c:\\dokumente und Einstellungen\\USERNAME\\Eigene Dateien\\R_Projekte\\R_Kurs\\.RData") > # Menü: Datei > Speichere History (erzeugt keine Befehlszeile) > # ACHTUNG: Am besten nur einen Workspace und eine History pro Ordner, beides ohne Namen. Mehrere mit verschiedenen Namen machen evtl. Probleme. > 3 * 12-1 [1] 35 > 80 / 4 + 2 [1] 22 > 2 * 5 ^ 2 [1] 50 > sqrt (5) # Wurzelfunktion [1] 2.236068 > 5 ^ 0.5 # Achtung: Dezimalpunkt, kein -komma [1] 2.236068 > 5 ^.5 # 0 vor dem Komma kann man weglassen [1] 2.236068 > 3 * (12-1) [1] 33 > 80 / (4 + 2 + ) # Wenn unklar, was fehlt, ESC drücken (allgemein für Abbruch) 1
[1] 13.33333 > (2 * 5) ^ 2 [1] 100 > 80 / (4 + 3) [1] 11.42857 > 45 %/% 6 # ganzzahlige Division (Vorsicht bei negativen Zahlen) [1] 7 > 45 %% 6 # Rest bei ganzzahliger Division (45 modulo 6, 45 mod 6) [1] 3 > exp (7) # e hoch 7 [1] 1096.633 > log (1096.633) # natürlicher Logarithmus (Basis e) [1] 7 > log2 (64) # Logarithmus zur Basis 2 (Umkehrfunktion von 2 hoch n) [1] 6 > log10 (100) # Logarithmus zur Basis 10 [1] 2 > pi [1] 3.141593 > PI # Achtung: R unterscheidet zwischen Groß- und Kleinschreibung Fehler: Objekt 'PI' nicht gefunden > sin (90) [1] 0.8939967 > sin (pi / 2) [1] 1 Winkelangaben in R im Bogenmaß, nicht im Winkelmaß! Umrechnung mit Dreisatz bzw. festem Wechselkurs : Ich muss mir zu einem Winkel seine Entsprechung im Bogenmaß merken (90 pi /2 oben verwendet oder 180 pi oder 360 2 * pi). Von Winkelgrad ins Bogenmaß: durch den Winkel teilen, mit dem Bogen multiplizieren. Vom Bogenmaß in Winkelgrad umgekehrt: durch den Bogen teilen, mit dem Winkel multiplizieren. > asin (1) [1] 1.570796 > asin(1)*2 [1] 3.141593 > cos (0) [1] 1 > acos (1) [1] 0 > tan (1) [1] 1.557408 > atan (1.557408) [1] 1 2
> sin (180 / 90 * pi / 2) # Sinus von 180 Grad: eigentlich 0 [1] 1.224606e-16 > # naturwiss. Notation: 1.224606 * 10 ^ (-16), d. h., der Dezimalpunkt muss noch 16 Stellen nach links verschoben werden: 0.000 000 000 000 000 122 460 600 Entsprechend 1.5e+12 = 1 500 000 000 000 > round (pi) [1] 3 > round (pi, 2) [1] 3.14 > round (376, -2) [1] 400 > round function (x, digits = 0).Primitive("round") >? round # Kurzfassung von help(round) >?? round # Kurzfassung von help.search(round) > # Zuweisungen: Dem Ergebnis einen Namen geben. > # Es entsteht ein Objekt. > a <- 7 # elegant, kann nicht mit logischem Vergleich verwechselt werden > b <- 5 > c = a * b # unelegant, aber schneller zu tippen > c [1] 35 > # c ist wichtige Funktion, sollte nicht als Name verwendet werden. > # Gleiches gilt für pi, t, F und T > remove(c) > c function (..., recursive = FALSE).Primitive("c") > (d = a + b) [1] 12 > d [1] 12 Wenn Sie ein Objekt durch eine Zuweisung erzeugt haben (z. B. d = a + b), behält es den zugewiesenen Wert bis zu einer erneuten Zuweisung, die sich direkt auf dieses Objekt bezieht (d = bzw. d <- ). Im Beispiel bleibt d, wie es ist, auch wenn Sie a oder b durch a = oder b = (bzw. a <- oder b <- ) ändern. 3
> # Logische Vergleiche ==,!= (ungleich), <, <=, >, >= > d == a * b [1] FALSE > d == a + b [1] TRUE > Wahr = T > Wahr [1] TRUE > (Falsch = F) [1] FALSE > # Besser nicht die Abkürzungen F und T verwenden, falls man Sie doch selbst als Objekte definiert hat. > # Wenn ich die Zuweisung vergessen habe: > 3 ^ 9 > Erg =.Last.value > Erg > 3 ^ 9 -> Erg.neu # Einige Autoren raten ab, da zu unübersichtlich. > Erg.neu > Erg.neu.2 = 3 ^ 9 > Erg.neu.2 > ls() [1] "a" "b" "d" "Erg" "Erg.neu" "Erg.neu.2" "Falsch" "Wahr" > q() #oder Menü: Datei > Beenden (oder Schließen-Icon rechts oben.) > # Vektor: Basis der Statistik (Zahlenreihe), Grundeinheit in R > # Mit einer einzelnen Zahl kann man keine Statistik machen. > (v.1 = c( 3, 7, 8, 9, 5, 12)) [1] 3 7 8 9 5 12 > (v.2 = seq (1, 6) ) [1] 1 2 3 4 5 6 > (v.3 = rep (5, 7) ) [1] 5 5 5 5 5 5 5 > (v.4 = 1 : 100 ) [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 4
[45] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [67] 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 [89] 89 90 91 92 93 94 95 96 97 98 99 100 > 3 * v.1 [1] 9 21 24 27 15 36 > v.1 + v.2 [1] 4 9 11 13 10 18 > v.1[3] # Zugriff auf einzelne Komponente mit eckigen Klammern [1] 8 > v.1[3] = 7 > v.1 [1] 3 7 7 9 5 12 > v.4 [17 : 24] # Zugriff auf mehrere Komponenten geht auch [1] 17 18 19 20 21 22 23 24 > v.4 [17 : 12] [1] 17 16 15 14 13 12 > v.2 [8 : 4] [1] NA NA 6 5 4] > # NA (not available): Fehlender Wert (z. B. verweigerte/nicht gewusste Antwort im Fragebogen) > v.2 [c(1, 3, 4)] [1] 1 3 4 > v.2 [-4] # 4. Komponente (nicht 4. Element ) weglassen [1] 1 2 3 5 6 > v.4[- 20:80] Fehler in v.4[-20:80] : nur Nullen dürfen mit negativen Indizes gemischt werden > v.4[- (20:80)] [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 [35] 96 97 98 99 100 > v.2 [-c(1, 3, 4)] [1] 2 5 6 > v.2 * v.3 # komponentenweise Multiplikation (R-Konvention) [1] 5 10 15 20 25 30 5 Warnmeldung: In v.2 * v.3 : Länge des längeren Objektes ist kein Vielfaches der Länge des kürzeren Objektes 5
> # Trotzdem ausgeführt: 5 am Ende bleibt nicht einfach stehen, sondern erste Komponente des kürzeren Vektors wird recycelt R fängt beim kürzeren Vektor wieder von vorne an (hier: 1 * 5). Wäre die Länge von v.3 ein Vielfaches der Länge von v.2, würde nicht einmal die Warnmeldung ausgegeben! > v.2 * v.3 [-7] [1] 5 10 15 20 25 30 > (v.5 = seq (1, by =.5, along.with = v.3 ) ) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 > length(v.5) [1] 7 > t(v.5) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 1.5 2 2.5 3 3.5 4 > # v.5 ist ein Spaltenvektor, transponiert ist er ein Zeilenvektor > # (hier dargestellt als 1x7-Matrix) > # Vektoren aus Zeichenketten sind auch möglich > (Farben = c("rot", "grün", "blau") ) [1] "rot" "grün" "blau" > "a" : "f" Fehler in "a":"f" : NA/NaN Argument Zusätzlich: Warnmeldungen: 1: NAs durch Umwandlung erzeugt 2: NAs durch Umwandlung erzeugt > # So geht es also nicht, aber so: > letters [1:6] [1] "a" "b" "c" "d" "e" "f" > LETTERS [1:7] [1] "A" "B" "C" "D" "E" "F" "G" > # Menü: Datei > Speichern in Datei > # Sichert den gesamten Dialog mit R als Textdatei. VORSICHT: Wenn Sie mit der Maus etwas markiert haben, wird nur der markierte Bereich gespeichert! 6