Empirische Softwaretechnik Dr. Victor Pankratius Andreas Höfer Wintersemester 2009/2010 IPD Tichy, Fakultät für Informatik KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
R 2 16.11.2009
R ist vektororientiert c() verkettet Objekte zu Vektoren. Die Datentypen sind: Numerical > c(2, 0, 1) [1] 2 0 1 Character > c("a", "b", "c") [1] "a" "b" "c" Logical > c(t, F, T) [1] TRUE FALSE TRUE So kann man auch Vektoren erzeugen: > 0:2 [1] 0 1 2 > 2:0 [1] 2 1 0 > seq(0, 1, 0.2) [1] 0.0 0.2 0.4 0.6 0.8 1.0 > rep(0:1, 2) [1] 0 1 0 1 > rep(0:1, length.out = 3) [1] 0 1 0 > rep(0:1, each = 2) [1] 0 0 1 1 3 16.11.2009
Verwendung von Vektoren R behandelt Vektoren wie andere Programmiersprachen einzelne Variablen. > v <- 0:5 > v [1] 0 1 2 3 4 5 > v * 2 [1] 0 2 4 6 8 10 > v * 0:1 [1] 0 1 0 3 0 5 <- ist der Zuweisungsoperator. Mit eckigen Klammer kann man aus Vektoren (und Feldern, etc.) auswählen. Indizes beginnen bei 1. > v[1:3] [1] 0 1 2 > v[-(1:3)] [1] 3 4 5 > v[v > 3] [1] 4 5 > v[v < 2 v > 3] [1] 0 1 4 5 4 16.11.2009
Felder und Matrizen Matrizen sind 2-dimensionale Felder. > m <- matrix(1:4, nrow = 2, ncol = 2) > m [,1] [,2] [1,] 1 3 [2,] 2 4 > m[1,] [1] 1 3 Um n-dimensionale Felder zu erhalten, gibt es die array- Funktion. > cube <- array(1:8, dim = c(2, 2, 2)) 5 16.11.2009
Listen und Datenbehälter Eine Liste ist eine Sammlung benannter Objekte. Auf die einzelnen Objekte kann über die $-Notation zugegriffen werden. > l <- list(x = 3:4, y = 8:9) > l$x [1] 3 4 > l$y [1] 8 9 Datenbehälter sind Listen aus Vektoren gleicher Länge. > as.data.frame(l) x y 1 3 8 2 4 9 6 16.11.2009
Kontrollfluss Bedingte Ausführung Wiederholte Ausführung > if (a && b) { + [ ] + } else if (c d) { + [ ] + } else { + [ ] + } > for (i in 0:1) [ ] > j <- 0 > while (j <= 1) { + j <- j + 1 + if (j <= 1) next + [ ] + } > k <- 2 > repeat { + k <- k 1 + [ ] + if (j < 1) break + } 7 16.11.2009
Schleifen? Schleifen sind langsam besser vermeiden. Verwenden Sie vektor- und matrixorientierte Befehle. > x <- 1:1000000 > system.time(for (i in 1:length(x)) x[i] <- x[i] + 1) User System elapsed 10.45 0.03 10.89 > system.time(x <- x + 1) User System elapsed 0.04 0.00 0.03 Es gibt auch ein vektororientiertes if/else: > ifelse(1:4 > 2, c("ja", "yes", "oui", "si"), + c("nein", "no", "non", "no")) [1] "nein" "no" "oui" "si" 8 16.11.2009
Daten lesen und schreiben Aus einer Datei lesen: > data <- read.table(file = "d:/file.csv", + sep = ";", header = T) > data <- read.csv(file = "d:/file.csv ) > data <- read.csv2(file = "d:/file.csv ) In eine Datei schreiben: > write.table(data, file = "d:/file.csv", + sep = ";", row.names = F) > write.csv(data, file ="d:/file.csv") > write.csv2(data, file ="d:/file.csv") 9 16.11.2009
Zeichnungen speichern Zeichengerät erstellen, zeichnen, Zeichengerät schließen. > pdf(file = "C:/Users/myuser/Desktop/test.pdf") > plot(lakehuron) > dev.off() windows 2 Andere Zeichengeräte: postscript png, jpeg, tiff and bmp pictex, xfig Über zusätzliche Pakete auch: tikz svg 10 16.11.2009
Eigene Funktionen definieren Funktionsparameter haben Namen und können vorbelegt werden. Sie werden der Reihenfolge oder dem Namen nach zugeordnet. > randmat <- function(rows = 1, cols = 1) { + matrix(runif(rows * cols), rows, cols) + } > randmat() [,1] [1,] 0.3737975 > randmat(1, 2) [,1] [,2] [1,] 0.6450843 0.9586873 > randmat(cols = 1, rows = 2) [,1] [1,] 0.5226739 [2,] 0.7912819 11 16.11.2009
Hilfe erhalten Mit dem Befehl > help("plot") öffnen Sie ein Hilfe-Dialog. Einfacher geht es so: >?plot Falls Sie nicht genau wissen, wie ein Befehl heißt, können Sie auch suchen: > help.search( + "plo") >??plo 12 16.11.2009
Zentralitäts- und Streuungsmaße > v <- (1:10) ^2 > v [1] 1 4 9 16 25 36 49 64 81 100 > mean(v) [1] 38.5 > median(v) [1] 30.5 > range(v) [1] 1 100 > var(v) [1] 1167.833 > sd(v) [1] 34.17358 13 16.11.2009
Punktwolken Geben einen ersten Eindruck über den Zusammenhang zwischen zwei Variablen Abszisse: Unabhängige Variable Ordinate: Abhängige Variable > speed <- cars$speed * + 1.609344 > dist <- cars$dist * 0.3048 > plot(speed, dist, + main = " ", xlab = " ", + ylab = " ") 14 16.11.2009
Faustregel zur Korrelation C A D B Zählen der Datenpunkte in den durch die Mittelwerte von X und Y gebildeten Quadranten A + D >> B + C: erwarte starke positive Korrelation B + C >> A + D: erwarte starke negative Korrelation > abline(h = mean(dist), lty = 2) > abline(v = mean(speed), lty = 2) 15 16.11.2009
Wiederholung: Kovarianz und Pearsons Korrelationskoeffizient Zu Erinnerung: Die Kovarianz ist wie folgt definiert: Die extremsten Werte sind ±s X s Y Pearsons Korrelationskoeffizient r normalisiert die Kovarianz mit s X s Y : r sxy s s X Y Bereich: -1 r 1 s XY (X X)(Y N 1 Y) > cov(speed, dist) [1] 53.93206 > p <- cor.test(speed, dist) > p$estimate cor 0.8068949 > p$p.value [1] 1.489919e-12 16 16.11.2009
p-wert und Korrelation H 0 : der Korrelationskoeffizient der Population (ρ) aus der die Stichprobe entnommen wurde ist 0. ρ = 0 H A : ρ 0 Der p-wert drückt also die Wahrscheinlichkeit aus, in der Stichprobe eine Korrelation zw. X und Y der Größe r zu beobachten, obwohl X und Y in der Population nicht korreliert sind. Überprüfen des kritischen Werts für Korrelationskoeffizienten in Tabellen wie Tabelle E.2 in [Howell 1999] (oder mit R). Freiheitsgrade = N 2 17 16.11.2009
Spearmans Rangkorrelationskoeffizient (r s ) Nicht parametrisch Die Stichproben müssen mindestens ordinal skaliert sein, d.h. Rangbildung muss möglich sein. Setzt keine Normalverteilung voraus Bei Intervall- und Verhältnisskala kommt es zum Informationsverlust Bereich: -1 r s 1 > s <- cor.test(speed, dist, method = "spearman") > s$estimate rho 0.8303568 > s$p.value [1] 8.824558e-14 18 16.11.2009
Kendalls Rangkorrelationskoeffizient (τ) Nicht parametrisch Die Stichproben müssen mindestens ordinal skaliert sein, d.h. Rangbildung muss möglich sein. Setzt keine Normalverteilung voraus Zählt die Anzahl der konkordanten Paare Range: -1 τ 1 > k <- cor.test(speed, dist, method = "kendall") > k$estimate tau 0.6689901 > k$p.value [1] 2.638267e-11 19 16.11.2009
Regressionsgerade mit R ~ hängt ab von Die lm-funktion berrechnet das lineare Modell > rg <- lm(dist ~ speed) > abline(rg) 20 16.11.2009
Residuen Zur Erinnerung: Residuen sind die Unterschiede zwischen den gemessen Werten Y i und den vorausgesagten Werten Ŷ i. Einfärben der Datenpunkte gemäß ihrer Residuen: > res <- abs(resid(rg)) > sres <- (res-min(res))/(max(res)-min(res)) > colors <- grey(1 - sqrt(sres)) > plot(dist ~ speed, bg = colors, pch = 21, + main = " ", xlab = " ", ylab = " ") > abline(rg, col = " ") 21 16.11.2009
Regression für zwei Variable > library(scatterplot3d) > attach(trees) > s3d <- scatterplot3d(girth, Height, Volume, + type = 'h', pch = 17, highlight.3d = T, + angle = 60, main = "Holz ") > s3d$plane3d(lm(volume ~ Girth + Height)) 22 16.11.2009
Anscombes Quartett Vorsicht bei der Interpretation von Korrelation und Regression! 23 16.11.2009
Boxplots mit Zusatzinformationen versehen 1 Bei wenigen Datenpunkten: evtl. die Datenpunkte anzeigen. > v <- c(0, seq(2, 8, 0.1), 10, 15) > boxplot(v) > x <- jitter(rep(1, length(v)), factor = 5) > points(x, v, pch = 20, col = " ") 24 16.11.2009
Boxplots mit Zusatzinformationen versehen 2 Auch denkbar: Mittelwert Standardabweichung Ausgangswert > m <- mean(v) > s <- sd(v) > arrows(1.15, m - s, 1.15, m + s, + code = 3, col = ) > points(1.15, m, pch = 15, col = ) > abline(h = 2, col =, lty = 5) > text(x = 0.7, y = 2, "Ausgangswert", + pos = 3, col = " ") 25 16.11.2009
Übung: Boxplots Lesen Sie die Daten aus der Datei Coverage.csv ein. Zeichnen Sie Boxplots, welche die Gruppen A und B bezüglich der Testabdeckung vergleichen. Zeichnen Sie die Boxplots nochmal. Färben Sie nun den Umriss der Boxplots dunkelgrau und die Füllung hellgrau. Zeichnen Sie die Datenpunkte mit ein. Zeichnen Sie die ursprüngliche Testabdeckung als horizontale Linie ein. 26 16.11.2009
Die Normalverteilung f(x) σ 1 2π e (X μ) 2 2σ 2 > x <- seq(-5, 5, 0.05) > plot(x, dnorm(x, mean = 2, sd = 0.5), + type = "l", col = "orange") 27 16.11.2009
Die Konfidenzintervalle der Normalverteilung 28 16.11.2009
Übung: Der IQ Wie wahrscheinlich ist es, dass eine Person einen IQ zw. 115 und 130 hat? z X σ μ N(100, 15) z Größerer Teil Kleinerer Teil 0.0 0.5000 0.5000 0.1 0.5398 0.4602 0.9 0.8159 0.1841 1.0 0.8413 0.1587 1.1 0.8643 0.1357 1.9 0.9713 0.0287 2.0 0.9772 0.0228 29 16.11.2009
Münzwurf Eine Münze wird 20 Mal geworfen. Ergebnis: 15 Mal Kopf. Wir nehmen an, die Münze sei fair balanciert, d.h. Kopf hat die Wahrscheinlichkeit p = 0,5. Wie wahrscheinlich ist unsere Beobachtung? Die Wahrscheinlichkeit von n Würfen k Mal Kopf zu beobachten, ist durch die Binomialverteilung gegeben. P(k) n k p k (1 p) n k 30 16.11.2009
Münzwurf Eine Münze wird 20 Mal geworfen. Ergebnis: 15 Mal Kopf. Wir nehmen an, die Münze sei fair balanciert, d.h. Kopf hat die Wahrscheinlichkeit p = 0,5. Wie wahrscheinlich ist unsere Beobachtung? Die Wahrscheinlichkeit von n Würfen k Mal Kopf zu beobachten, ist durch die Binomialverteilung > x <- 0:20 gegeben. P(k) n k p k (1 p) n > y <- dbinom(x, size = 20, prob = 0.5) > plot(x, y, type = "o", pch = 16, main = k + "Binom ", xlab = "Num ", ylab = "Pro ") 31 16.11.2009
Hypothesentest Münzwurf Wir nahmen an, dass die Wahrscheinlichkeit für Kopf 0,5 ist. (Nullhypothese H 0 ). Aber vielleicht ist die Wahrscheinlichkeit für Kopf ungleich 0,5 (Alternativhypothese H A ). Signifikanzniveau α = 0,05 Das bedeutet: Wenn bei unserem Versuch ein Ergebnis herauskommt, dessen Wahrscheinlichkeit kleiner gleich α ist, dann sind wir bereit, die Nullhypothese zugunsten der Alternativhypothese zu verwerfen, weil dann das, was man beobachtet hat, unwahrscheinlich ist ( α). Wenn wir eine Wahrscheinlichkeit kleiner oder gleich α erhalten, lehnen wir H 0 ab und nehmen H A an Trotzdem könnte es sein, dass die Münze fair ist. Die Irrtumswahrscheinlichkeit, oder die Wahrscheinlichkeit für einen Fehler erster Art ist α. Das bedeutet: wenn wir das Experiment mit 20 Würfen einer fairen Münze sehr oft durchführen würden, käme in 5% der Experimente ein Ergebnis heraus, dass so unwahrscheinlich ist, dass wir die Nullhypothese fälschlicherweise ablehnen würden. 32 16.11.2009
P-Wert im Münzwurf-Beispiel Nun führen wir 20 Würfe aus und stellen fest, dass 15 Mal Kopf erscheint. Wir rechnen aus, wie wahrscheinlich es ist, dass bei 20 Würfen 15 mal oder häufiger Kopf erscheint; ferner die Wahrscheinlichkeit, dass 15 mal oder häufiger Zahl erschienen wäre. Wir addieren diese beiden Wahrscheinlichkeiten, weil wir aufgrund der Alternativhypothese beide Fälle berücksichtigen müssen (zweiseitiger Test). Das Ergebnis ist der sog. p-wert.
Den p-wert berechnen Der p-wert ist nicht die Wahrscheinlichkeit eines Einzelereignisses (15 Mal Kopf). Der p-wert ist die Summe der Wahrscheinlichkeiten aller Ereignisse, die mind. so extrem sind wie 15 Mal Kopf (15 20 Mal). Dazu gehört auch 15 Mal Zahl (0 5 Mal Kopf). 34 16.11.2009
Münzwurf-Beispiel Der p-wert ist nicht nur die Wahrscheinlichkeit eines einzelnen Ergebnisses (15 Mal Kopf), sondern die Summe der Wahrscheinlichkeiten aller Ergebnisse, die mindestens so extrem sind (also 15 20 Mal Kopf), da die zusätzlichen Ergebnisse noch ungünstiger für die Nullhypothese sind. Das Gleiche für 15-20 Mal Zahl, oder äquivalent 1-5 Mal Kopf. Wenn wir von vorne herein wissen, dass eine Münze nur in einer Richtung unfair sein könnte (z.b. q>0,5), dann genügt der einseitige Test.
Als Hypothesentest mit R > binom.test(15, 20, 0.5) Exact binomial test data: 15 and 20 number of successes = 15, number of trials = 20, p-value = 0.04139 alternative hypothesis: true probability of success is not equal to 0.5 95 percent confidence interval: 0.5089541 0.9134285 sample estimates: probability of success 0.75 Zweiseitiger Test, mit 95 % Konfidenz-intervall (Voreinstellung). Argumente: Anzahl Kopf, Anzahl der Würfe, angenommene Wahrscheinlichkeit für Kopf 36 16.11.2009
Der Zentrale Grenzwertsatz Ziehen von n Stichproben der Größen N aus ein Population mit dem Mittelwert μ und der Varianz σ 2. Die Verteilung der Stichproben-Mittelwerte hat Einen Mittelwert μ X μ. 2 2 Eine Varianz σ σ N. X Ein Standardabweichung σ X σ N. Die Verteilung der Stichproben-Mittelwerte nähert sich der Normalverteilung an, wenn die Anzahl n der Stichproben steigt. 37 16.11.2009
Ein Beispiel: Würfeln Würfeln mit einem idealen Würfel erzeugt eine Gleichverteilung mit Mittelwert von 3,5 und einer Standardabweichung von 1,707. Nehmen wir an, wir würfeln mit 10 Würfeln unendlich oft und zeichnen die Verteilung der Stichproben-Mittelwerte. Theoretisch sollte der Mittelwert 3,5 sein und die Standardabweichung 1,707/ 10 = 0,540. 38 16.11.2009
10000 Mal Würfeln mit 10 (100) Würfeln Voraussage: Mittelw. = 3,5 Std. abw. = 0,540 (= 1,707/ 10) Voraussage: Mittelw. = 3,5 Std. abw. = 0,171 (= 1,707/ 100) 39 16.11.2009
Einstichproben-Test Varianz bekannt Auch Gauß-Test genannt Die Standardabweichung der Population ist bekannt. Die Formel für z bei Einzelbeobachtungen lässt sich wie folgt umschreiben: z X μ σ wird zu z X σ μ X X X μ σ N 40 16.11.2009
Einstichproben-Test Varianz unbekannt Die Standardabweichung der Population ist unbekannt. Wir benutzen die Standardabweichung der Stichprobe s: z X σ μ X X X μ N wird zu t σ X s μ X X X μ N s 41 16.11.2009
Verteilung der Stichproben-Varianz s 2 42 16.11.2009
Warum brauchen wir die Student t-verteilung? Besonders für kleine Stichproben ist es wahrscheinlich, dass s 2 σ 2 unterschätzt. Das gilt auch für s und σ. Würden wir die Normalverteilung nehmen und den z-wert berechnen, erhielten wir mehr signifikante Ergebnisse als erwünscht. Ausweg: Wir berechnen den t-wert und verwenden die Student t-verteilung! 43 16.11.2009
Eigenschaften der Student t-verteilung Hängt von den Freiheitsgraden ab. Nähert sich für große N der Standard-Normalverteilung N(0, 1) an. 44 16.11.2009
Die Student t-verteilung > x <- seq(-5, 5, 0.05) > plot(x, dt(x, df = 100), + type = "l", col = ) 45 16.11.2009
Einstichproben-t-Test mit R > cm <- women$height * 2.54 > cm [1] 147.32 149.86 152.40 154.94 157.48 160.02 162.56 165.10 [9] 167.64 170.18 172.72 175.26 177.80 180.34 182.88 > t.test(cm, mu = 165) One Sample t-test data: cm t = 0.0341, df = 14, p-value = 0.9733 alternative hypothesis: true mean is not equal to 165 95 percent confidence interval: 158.8095 171.3905 sample estimates: mean of x 165.1 46 16.11.2009
Zweistichproben-t-Test Abhängige Stichproben 1 Auch paarweiser t-test genannt Nur anwendbar für Datensätze von den gleichen Subjekten. Datensätze von verschiedenen Subjekten, die jedoch zusammen gehören und für die keine andere Zuordnung denkbar ist. Z.B.: Größe von Mutter und Kind. D bezeichnet die Differenz der beiden Datensätze X, Y. Teste H 0 : μ X = μ Y bzw. μ X μ Y = μ D = 0 47 16.11.2009
Zweistichproben-t-Test Abhängige Stichproben 2 t war ursprünglich als Differenz der Mittelwerte der Stichprobe und der Gesamtpopulation, geteilt durch die Standardabweichung der Mittelwerts definiert. Jetzt besteht die Stichprobe selbst aus Differenzen, daher kann man die Formel für t nun wie folgt umformen: t D μ s D D D s D N 48 16.11.2009
Beispiel: Vergleich zweier Schlafmittel 49 16.11.2009
Paarweiser t-test mit R > t.test(sleep$extra ~ sleep$group, paired = T) Paired t-test data: sleep$extra by sleep$group t = -4.0621, df = 9, p-value = 0.002833 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -2.4598858-0.7001142 sample estimates: mean of the differences -1.58 50 16.11.2009
Zweistichproben t-test Unabhängige Stichproben 1 s X Teste H 0 : μ X = μ Y bzw. μ X μ Y = μ D = 0 t X Y X Y Verwende die geschätzte gemeinsame Varianz, wenn die Homogenität der Varianz der Stichproben nicht verletzt ist: Y (X s 2 P Y) s 1 N X (μ 1 N Y μ ) mit X s s 2 P X Y Y (N X 1)s N X 2 X (N N Y Y 2 1)s 2 Y 51 16.11.2009
Zweistichproben t-test Unabhängige Stichproben 2 Homogenität der Varianz bedeutet, dass die Stichproben aus Populationen mit den gleichen Varianzen stammen. Ist die Annahme der Homogenität der Varianz verletzt, wird die Varianz wie folgt geschätzt: s X Y s N 2 X X s N 2 Y Y Faustregel: Die Homogenität der Varianz ist verletzt, wenn 2 2 gilt: (oder umgekehrt). s X 4s Y 52 16.11.2009
Übung zum t-test Laden sie den R-internen Datensatz women und prüfen Sie, ob die Frauen aus einer Population mit dem Durchschnittsgewicht 60 kg stammen könnten (1 lbs = 0,454 kg). Laden Sie die Datei Couples.csv (Quelle: [Howell 1999]). Darin finden Sie die sexuelle Zufriedenheit von verheirateten Paaren von 1 (sehr unzufrieden) bis 4 (sehr zufrieden). Testen Sie, ob es einen Unterschied zwischen Mann und Frau gibt. Welche Art von t-test verwenden Sie und warum? Lesen Sie die Daten aus der Datei Coverage.csv erneut ein. Testen Sie mit einem t-test, ob es einen Unterschied in der Testabdeckung der Gruppen A und B gibt. Argumentieren Sie: Wäre ein Wilcoxon-Test hier besser? Führen Sie diesen Test ebenfalls durch. 53 16.11.2009
Literatur [R 2.10.0 Manuals], http://www.r-project.org [Dalgaard 2003], Dalgaard, P.; Introductory Statistics with R, Springer, 2003 [Howell 1999], Howell, D. C.; Fundamental Statistics for the Behavioral Sciences, Brooks/Cole Publishing Company, 1999 [Büning Trenkler 1994] Büning, H. & Trenkler, G.; Nichtparametrische statistische Methoden, de Gruyter, 1994 54 16.11.2009