Einführung in die Statistik mit R Landau 12.3. – 15.3.2007 Ralf Schäfer Kaarina Foit Helmholtz-Zentrum für Umweltforschung- UFZ Permoserstraße 15 04318 Leipzig Tel. 0341 – 235 2120 e-mail: [email protected] [email protected] Inhaltsverzeichnis 1. 2. 3. 4. Erläuterung einiger Fachbegriffe ........................................................................................ 4 Daten einlesen mit R ......................................................................................................... 11 Datenzugriff ...................................................................................................................... 12 Charakterisierung von Stichproben ................................................................................... 13 4.1. Erster Datenüberblick ................................................................................................. 14 4.2. Mittelwerte ................................................................................................................. 16 4.3. Varianz ....................................................................................................................... 17 4.4. Freiheitsgrade ............................................................................................................. 19 4.5. Standardfehler und Vertrauensbereich ....................................................................... 20 4.5.1. Standardfehler des Mittelwerts............................................................................ 20 4.5.2. Konfidenzintervall / Vertrauensbereich des Mittelwerts .................................... 21 5. Theoretische Verteilungen ................................................................................................ 25 5.1. Die Normalverteilung ................................................................................................ 27 5.2. Z-Transformation ....................................................................................................... 28 5.3. Liegt Normalverteilung vor? ...................................................................................... 29 5.4. Transformation zur Normalverteilung ....................................................................... 31 6. Vergleich zweier Stichproben ........................................................................................... 32 6.1. Prüfung der Voraussetzung für parametrische Tests.................................................. 33 6.1.1. Normalverteilung ................................................................................................ 33 6.1.2. Gleichheit der Varianz / Varianzhomogenität ..................................................... 33 6.2. Student’s t-test ............................................................................................................ 34 6.3. Wilcoxon Rangsummentest........................................................................................ 36 7. Statistische Modellierung .................................................................................................. 37 8. Das Nullmodell ................................................................................................................. 41 9. Varianzanalyse / Anova (Analysis of Variance) ............................................................... 42 9.1. Einfaktorielle ANOVA (one-way Anova) ................................................................. 43 9.2. A Priori Kontraste ...................................................................................................... 47 9.3. A posteriori Kontraste (Aggregierung nicht-signifikanter Faktorstufen) .................. 48 9.4. Kontraste .................................................................................................................... 50 9.5. Multipler Vergleiche .................................................................................................. 52 9.6. Zwei- bzw. Mehrfaktorielle ANOVA ........................................................................ 55 10. Regression ........................................................................................................................ 57 10.1. Klassische lineare Regression .................................................................................. 57 10.1.1. Standardfehler bei der Regression..................................................................... 60 10.2. Weitere lineare Regressionen: .................................................................................. 61 10.2.1. Polynomiale Regression: ................................................................................... 61 10.2.2. Linearisierbare Regressionsfunktionen ............................................................. 61 Nichtlineare Regression ....................................................................................................... 65 10.3. Multiple Regression ................................................................................................. 66 10.3.1. Grafische Voruntersuchungen ........................................................................... 66 10.3.2. Modellierung ..................................................................................................... 68 11. ANCOVA – Analysis of Covariance ............................................................................... 71 12. Sammlung wichtiger Befehle ........................................................................................... 76 2 vorliegendes Skript enthält Beispiele, Übersichten etc. aus folgenden Büchern: Crawley, M. J. (2005) Statistics: An introduction in using R. Chichester, John Wiley. Crawley, M. J. (2002) Statistical Computing: An Introduction to Data Analysis using S-PLUS. Chichester, John Wiley. Lozan J. L. & Kausch H. (2004) Angewandte Statistik für Naturwissenschaftler. Hambur,Wissenschaftliche Auswertungen. 3 1. Erläuterung einiger Fachbegriffe (aus: Lozan JL & Kausch H: „Angewandte Statistik für Naturwissenschaftler“, Wissenschaftliche Auswertungen 2004, Auflage 3) 4 5 6 7 8 9 10 2. Daten einlesen mit R Normalfall: Daten sind in einer Exceltabelle Schritt 1: Datensatz kontrollieren: je Zeile - ein Messobjekt! Schritt 2: Tabellenblatt speichern unter Text Tabstopp-getrennt (*.txt) Hinweise ignorieren: (Der ausgewählte Dateityp unterstützt keine Arbeitsmappen, die mehrere Blätter enthalten… *.txt kann Merkmale enthalten…) Schritt 3: R öffnen Neues Dokument öffnen Tabelle/Datei einlesen mit dat <- read.table(“c:\\temp\\yvalues.txt”, dec=",",header=T) oder dat <- read.table(“c:/temp/yvalues.txt”, dec=",", header=T) Befehle werden ausgelöst durch: Cursor in Befehlszeile positionieren oder Befehlszeile(n) markieren und „Crtl + r“ Typische Anfängerfehler: 1. Deutsche Excel-Version verwendet Komma als Dezimalzeichen (statt Punkt wie in R) -> Daten einlesen mit dec=“,“ (s.o.) 2. Überschriften der Spalten enthalten Leerzeichen/Umlaute/Sonderzeichen -> Leerzeichen können durch „.“ oder „_“ersetzt werden, generell auf kurze und prägnante Variablennamen achten Hat alles geklappt?? Überprüfung in R Name attach(df) names(df) Datensatz erscheint in der Konsole über die Variablennamen kann auf die Daten zugegriffen werden Variablennamen erscheinen 11 3. Datenzugriff verwendete Abkürzungen im Folgenden: Name der geladenen Datentabelle/dataframe = df Namen der Variablen / Spaltenüberschriften = VarX, VarY Datenzugriff auf die Datentabelle/dataframe allgemein: wenn die Datentabelle mit dem Befehl attach() angehängt ist (s.o.), kann auf Variablen direkt mit ihrem Namen zugegriffen werden. Variablen von nicht angehängten Tabellen erreicht man mit der Verknüpfung $, also z.B. df$VarX. df df [Zeilen, Spalten] gesamte Datentabelle wird angezeigt allgemeine Formulierung des Datenzugriffs: mit der ersten Position werden die Zeilen eingeschränkt, mit der zweiten Position die Spalten; einfach mal ausprobieren!! Beispiele: df [2:3,1:3] df [2,1] df [c(1,3,5),1] df [ , “VarX“] df [VarX > 3 & VarY < 100, ] df [order(df[,1]),] df [rev(order(df[,1])),] Zeilen 2 bis 3 und Spalten 1 bis 3 nur eine Zelle/Messwert: Zeile 2, Spalte1 Spalte 1 mit den Zeilen 1, 3 und 5 alle Zeilen der Variablen mit dem Namen „VarX“ alle Spalten, aber nur die Zeilen mit Messwerten der Variablen VarX > 3 und der Variablen VarY < 100 df wird nach Spalte 1 aufwärts sortiert df wird nach Spalte 1 abwärts sortiert alle Vergleiche Relational Operators Logical Operators > < <= <= == != & (=AND) | (=OR) ! (=NOT) größer als kleiner als größer gleich als kleiner gleich als gleich nicht gleich und oder nicht weitere Befehle: VarX[2] VarX[-1] sort(VarX) Zugriff auf die Variablenposition 2 Entfernen der Variablenposition 1 Variablenwerte werden aufsteigend sortiert sum(VarX) length(VarX) sample (VarX,k,replace=T) which(VarX>10) Summe der Variablenwerte Anzahl der Variablenwerte Stichprobe der Variablen X mit n=k und mit Ersetzen Position aller Variablenwerte, die größer als 10 sind 12 . 4. Charakterisierung von Stichproben 13 4.1. Erster Datenüberblick summary(dat) m<- dat[sex==0,“size“] erster statistischer Überblick über die Daten wir erzeugen einen Subset plot (m, ylab“Körpergröße der Männer in cm“) Abb. 1a: Streudiagramm der Körpergröße der Männer. X-Achse: Indices der Messwerte (= Reihenfolge der Datenaufnahme). Abb. 1b: Streudiagramm zum gleichen Datensatz mit eingefügtem Ausreißer. Ausreißer hier selbst erzeugt mit m[20]<-500. (Messwert vorher: 182.7) Leichte Aufdeckung von Ausreißern: Identifizierung der Position mit beispielsweise which (m>400). Ausreißer-Regel: Ausreißer sind z.B. Messfehler, Beurteilungsfehler, Rechenfehler oder pathologische Fälle im Untersuchungsmaterial. Faustregel: Bei mindestens 10 Einzelwerten darf ein Wert verworfen werden, der außerhalb des Bereichs x = ± 4sd liegt (vgl. Kapitel 4.3.). Regel ist umstritten und sollte bei Anwendung im Text erwähnt werden. 14 boxplot (m, ylab = “Körpergröße der Männer in cm“) Abb. 2: Box-Whisker-Plot („Kiste mit Schnurrhaaren“ ). Die Daten sind ihrer Lage geviertelt. Die Trennpunkte heißen Quartile. Punkte markieren eventuelle Ausreißer. Hier handelt es sich allerdings um keinen Ausreißer, der Mensch ist so groß! Anhand von Boxplot lässt sich auch abschätzen, ob Normalverteilung vorliegt (sind die Quartile gleichmäßig verteilt?). hist(m, xlab = "Körpergröße der Männer in cm",ylab=“Häufigkeit“,main = "") Abb. 3: Histogramm, mit entsprechenden Klassen, Klassengrenzen, Klassenmitte. Zum Vergleich: Verlauf der Normalverteilung (durchgezogene Linie), parametrisiert mit unseren Messwerten (Erzeugung s. Kapitel 5.2.). Grafische Darstellung der Verteilung. übliche Frage: Liegt Normalverteilung vor? (Näheres im Kapitel 5). Häufigste Klasse entspricht etwa dem Modalwert (s.u.) Schiefe (scew): sind rechts vom Modalwert mehr Balken: linkssteile Schiefe / positive Schiefe sind links vom Modalwert mehr Balken: rechtssteile Schiefe / negative Schiefe Exzess (Wölbung oder Kurtosis): liegt das Maximum über der Normalverteilung: positiver Exzess liegt das Maximum unter der Normalverteilung: negativer Exzess 15 4.2. Mittelwerte Eingabe in R arithmetischer Mittelwert Am häufigsten verwendetes Maß. Zentralwert / Median Verwendet bei asymmetrischen Verteilungen, Bonitierungswerte, Halbwertszeiten radioaktiver Substanzen etc., insbesondere bei zu kleinen Stichproben, da diese meist schief verteilt sind. x x i n Der Wert, der die aufsteigend sortierte Stichprobe halbiert. Dichtemittel / Modalwert z.B. bei nominalen Daten (wie Schulnoten) und mehrgipfelige Verteilungen (umfangreiche Stichprobe notwendig). Der Wert, der in einer gipfeligen Verteilung am häufigsten vorkommt. geometrische Mittelwert bei natürlichen Wachstums- und Absterbevorgängen (nichtlineare Abhängigkeit von der Zeit) G n x1 x 2 ... x n mean (Var) median (Var) Aufgaben: 1. Quantifizier für unser Beispiel die Mittelwerte. 2. Erstelle dieselben Grafen für die Körpergröße der Frauen. 3. Lass dir die Grafen parallel darstellen mit dem Befehl par(mfrow=c(Zeilen, Spalten)). 16 4.3. Varianz Bisher wichtige und intuitive Kenngröße: Mittelwerte. Genauso wichtig: wie stark streuen die Messwerte um den Mittelwert?? Abb. 4: Streuung der Messwerte (Punkte) um den Mittelwert (Linie). Wofür brauche ich eine Kenngröße für die Streuung = Varianz? 1. Zur Berechnung von Kenngrößen wie Standardfehler und Vertrauensbereich (s. Kap. 4.5). 2. Für so gut wie alles was noch kommen wird!!! Denn wir werden mit statistischen Modellen die Daten abbilden, und die Frage wird immer lauten: wie gut passt das Modell an die Daten an und wie stark streuen die Messwerte um die Modellwerte (= Restvarianz / SSE), s. Kapitel 7. Einschub: die for-Schleife in R zur Erstellung der Grafik s.o. plot (m) abline(mean(m),0) for (i in 1:25) { lines(c(i,i),c(mean(m),m[i])) } Zähler i zählt hoch von 1 bis 25. Für jedes i wird der Befehl innerhalb der geschweiften Klammer ausgeführt. 17 Entwicklung der Kenngröße Varianz: ( y y) 0 nahe liegend, aber geht leider nicht: Differenzen Messwert – Mittelwert aufsummiert ergibt 0 ( Lösung I: Absolutwerte der Differenzen verwenden, sehr rechenaufwändig, allerdings heutzutage kein Problem mehr und diese Lösung wird auch verwendet. yy ) y y 2 Lösung II: Differenzen werden quadriert. Das ist weniger rechenaufwändig, da es eine Rechenkurzform gibt (s.u.). = Sum of squares / SSQ y ) 2 (Kurzform: y 2 n SSQ ist allerdings noch abhängig vom Stichprobenumfang Die bisherige Kenngröße (je mehr Messwerte desto größer ist SSQ), daher wird jetzt noch über den Stichprobenumfang gemittelt y y 2 Varianz s2 Standardabweichung = n 1 Varianz Befehle im Zusammenhang mit der Streuung var(Var) sd(Var) min(Var) max(Var) range(Var) diff(range(Var)) 18 Varianz Standardabweichung kleinster Variablenwert größter Variablenwert kleinster und größter Variablenwert Spannbreite des Range 4.4. Freiheitsgrade Warum wird bei der Varianz durch „n-1“ geteilt und nicht einfach durch „n“??? Beispiel: wir haben eine Stichprobe von 5 Messwerten wir wissen: der Mittelwert ist 4 folgende Messwerte sind dir bekannt: 2 4 7 0 ? wie lautet Messwert Nr. 5 ?? 19 4.5. Standardfehler und Vertrauensbereich Der errechnete arithmetische Mittelwert ist nur eine Schätzung für den wahren (unbekannten) Mittelwert der Grundgesamtheit. Es gibt verschiedene Möglichkeiten, die Abweichung des x (=arithmetischer Mittelwert) von μ (=Mittelwert der Grundgesamtheit) anzugeben. 4.5.1. Standardfehler des Mittelwerts SE y s2 n je größer die Varianz (Streuung), desto größer die Unsicherheit je größer die Stichprobe, desto kleiner die Unsicherheit Davon die Wurzel √, damit Standardfehler und Mittelwert die gleiche Einheit haben (ansonsten wäre durch die Varianz s^2 die Einheit des Standardfehlers quadriert). Eingabe in R allgemein: sqrt(var(Messwerte)/n) Beispiel: sqrt(var(m)/25) im Text ausgedrückt mit Die mittlere Körpergröße der Männer beträgt 186,6 ± 1,15 cm (1 s.e., n=25). 20 4.5.2. Konfidenzintervall / Vertrauensbereich des Mittelwerts I. Parametrische Ermittlung Der Vertrauensbereich gibt das Intervall an, das den wahren Mittelwerts μ mit einer bestimmten Wahrscheinlichkeit einschließt. D.h. bei wiederholter Beprobung fallen die Mittelwerte der neuen Stichproben mit festgelegter Wahrscheinlichkeit in das berechnete Intervall. Bei der parametrischen Ermittlung wird dabei vorausgesetzt, dass x normalverteilt ist. Je größer das Vertrauen / Konfidenz / Wahrscheinlichkeitswert, desto größer das Intervall. Ein Bereich mit 100%iger Wahrscheinlichkeit wäre -∞ bis +∞. Völlig sinnfrei. Üblich: Berechnung des Konfidenzintervalls in dem mit einer Wahrscheinlichkeit von 95% alle berechneten Mittelwerte liegen. Stichprobenumfang < 30 Stichprobenumfang > 30 Konfidenzintervall (CI) = Quantil der t-Verteilg × Standardfehler Konfidenzintervall (CI) = Quantil der Normalverteilg × Standardfehler CI95% t 0.025, d . f . 9 s2 n CI 95% n 0.025 s2 n in R: in R: qt(c(.025,.975),25)*sqrt(var(m)/25) qnorm(c(.025,.975))*sqrt(var(size)/50) im Text ausgedrückt mit Die mittlere Körpergröße der Männer beträgt 186,6 ± 2,25 cm (95% C.I., n =25). 21 Warum berechne ich die Quantile der Normalverteilung für die Wahrscheinlichkeiten von 2.5% (qnorm(.025)) und 97.5% (qnorm(.975)), wenn ich den 95%-igen Vertrauensbereich ermitteln möchte? Abb. 5: Die Quantile (orange senkrechte Linie) zu den Wahrscheinlichkeiten (graue Fläche unter der Glockenkurve der Normalverteilung) von 97.5% (Abb. links), 2.5% (Abb. mitte) sowie 95%. Der mittlere Wertebereich von 95% ergibt sich, wenn man die Wahrscheinlichkeiten (=Flächen) von 2.5% von 97.5% abzieht. Warum verwende ich bei kleinen Stichprobenumfängen die Student’s t-Verteilung statt der Normalverteilung?? Abb. 6: Normalverteilung (durchgezogene Linie) und t-Verteilung (gestrichelte Line) für kleine Stichprobe (FG = 3) im Vergleich. Die Quantile, die den mittleren Wertebereich von 95% einschließen (orange senkrechte Line) verschieben sich nach außen (vgl. dazu Abb. 5 rechts). Student’s t-Verteilung berücksichtigt den Stichprobenumfang!! Bei großen Stichprobenumfängen sind Standardnormalverteilung und Student’s t-Verteilung nahezu identisch. Bei kleinen Stichprobenumfängen (hier FG = 3) ist die t-Verteilung flacher als die Normalverteilung und hat dafür dickere Enden. 22 II. Nicht-parametrische Ermittlung durch Bootstrapping „pulling yourself up by your own bootlaces“ = „something for nothing“ Ich erzeuge von meiner Stichprobe neue Stichproben (mit zurücklegen = replace) und berechne die dazugehörigen Mittelwerte. Im Anschluss ermittel ich, welche Quantile/Grenzen die mittleren 95% der Mittelwerte einschließen. Vorteil dieser Methode: Die Schiefe einer Verteilung wird in der Berechnung des Konfidenzintervalls berücksichtigt und eine Normalverteilung ist nicht vorausgesetzt! a<-numeric(10000) for (i in 1:10000) { a[i]=mean(sample(m,25,replace=T)) } hist(a) quantile (a,c(0.025,0.975)) im Text wird das Konfidenzintervall ausgedrückt mit Die mittlere Körpergröße der Männer beträgt 185cm (mit bootstrap 95% CI von 183 – 187cm). Aufgabe: 1. Erläutere die Programmierschritte des Bootstrapping. 2. Berechne Standardfehler, Konfidenzintervall parametrisch und Konfidenzintervall durch Bootstrapping für die Frauen und für die Gewichte. Vergleiche die Werte tabellarisch. 23 24 5. Theoretische Verteilungen Normalverteilung Wird im folgenden Kapitel ausführlich behandelt. 2 weitere wichtige Verteilungen: Poisson-Verteilung bei Zählungen in einer bestimmten und immer gleichen Einheit (Zeit, Raum, Länge, Volumen, Fläche) Beispiele Anzahl der Blätter an einer Pflanze Anzahl der Mutationen je Zelle nach intensiver Bestrahlung Eigenschaften der Verteilung häufiges Vorkommen des Messwerts NULL, keine negativen Werte möglich diskrete Werte (es wird gezählt, also nur ganze Zahlen) kleinen Mittelwert: unsymmetrische Verteilung mit linkssteiler (positiver) Schiefe großem Mittelwert: ähnlich Normalverteilung nur Wahrscheinlichkeit p (keine Informationen über Misserfolg wie in der Binomialverteilung) Varianz steigt mit Mittelwert an Schwierigkeit linearen Regressionmethoden sind nicht möglich, da das lineare Modell auch negative Werte vorhersagt keine Gleichheit der Varianz (s.o.) und Residuen nicht normalverteilt NULLEN sind schwierig zu behandeln bei Transformationen Lösung in R glm (gesprochen „glims“) mit family = poisson) model<-glm(Mutationen<-Bestrahlung, poisson ) weitere Behandlung wie bei linearer Regression 25 Binomialverteilung Zufallsexperimente: tritt ein Ergebnis ein oder nicht Das heißt Informationen über 2 Wahrscheinlichkeiten: Erfolg (p) und Misserfolg (q=1-p). Je nach der Wahrscheinlichkeit linksschief (kleines p) oder rechtsschief (großes p) Beispiele prozentualer Anteil von Mortalität (tot - lebend) Infektionsrate einer Krankheit (gesund - krank) Eigenschaften Das heißt Informationen über 2 Wahrscheinlichkeiten: Erfolg (p) und Misserfolg (q=1-p). Je nach der Wahrscheinlichkeit linksschief (kleines p) oder rechtsschief (großes p) Keine negativen Werte oder Werte über 100% Varianz ist im Bereich des Mittelwerts am höchsten und nimmt zu den Grenzen des Wertebereichs ab. Schwierigkeiten ähnlich wie bei der Poissonverteilung Lösung in R glm (gesprochen „glims“) mit family = binomial) 26 5.1. Die Normalverteilung Warum so wichtig?? 1. Viele Daten in der Natur sind normalverteilt 2. es gibt den zentralen Grenzwertsatz!!! Wenn man wiederholt Stichproben aus einer Grundgesamtheit entnimmt und für jede Stichprobe den Mittelwert berechnet, dann tendiert die Verteilung der Mittelwerte zur Normalverteilung. Das gilt auch für andere Kenngrößen (z.B. Varianz). Und es gilt ebenfalls, wenn die Grundgesamtheit nicht normalverteilt ist!!! 3. wir kennen ihre Form!! Zur Normalverteilung gibt es eine Funktion, die Gaußsche Glockenkurve. Mit ihrer Hilfe kann man über normalverteilte Daten automatisch viel aussagen. Folge: Normalverteilung ist Voraussetzung für sämtliche parametrische Methoden 4. Sind Daten nicht normalverteilt, so lassen sie sich meist mithilfe einer geeigneten Transformation zur Normalverteilung umformen (s. Kapitel 5.4.) Die Dichtefunktion der Normalverteilung lautet: y f x 1 e 2 x 2 2 2 mit μ und σ² als Mittelwert und Varianz der Grundgesamtheit. Die Funktionswerte geben die Wahrscheinlichkeitsdichte der Messwerte x an. In R: dnorm(x, mean = …, sd = …) Die Standardnormalverteilung hat den Mittelwert 0 und die Standardabweichung 1. In R: dnorm (x, mean= 0, sd=1) oder dnorm (x) (Rest ist voreingestellt) 27 5.2. Z-Transformation Die Messwerte der Körpergröße Männer als Normalverteilung und die Standardnormalverteilung im Vergleich. x<-seq(170,200,0.1) y<dnorm(x,mean=mean(m),sd=sd(m)) plot(x,y,…) xst<-seq(-4,4,.01) yst<-dnorm(xst) plot(xst,yst…) Mit der Z-Transformation werden die Messwerte standardisiert: z y y s z=(m-mean(m))/sd(m) hist (z,…) hist(m,…) Gemeinsame Darstellung der Dichtefunktion und Verteilung der Werte im Histogramm: hist(m,…) lines(x,y*125) 28 Scalingfaktor = Klassenbreite * n hist (z,…) lines(xst,yst*25) 5.3. Liegt Normalverteilung vor? Für die folgenden Überlegungen in diesem Kapitel und für parametrische Tests im Allgemeinen ist die Normalverteilung Voraussetzung. Deswegen müssen wir zunächst unsere Daten auf Normalverteilung überprüfen. I. Grafische Methode: Der Quantile-Quantile plot oder auch Boxplot (s. Kapitel 4.1.). Abb. 7: Quantile-quantile plot zum Datensatz Körpergröße der Männer (=m). qqnorm (m) qqline (m) Ordnet den Messwerten die entsprechenden Quantile der Normalverteilung zu. Gerade zur Orientierung: bei perfekter Normalverteilung der Daten liegen alle Punkte exakt auf der Geraden. II. Shapiro-Test: shapiro.test(m) Nullhypothese: Alternativhypothese: Es liegt Normalverteilung vor. Verteilung unserer Messdaten unterscheidet sich signifikant von der Normalverteilung. Shapiro-Wilk normality test data: m W = 0.9802, p-value = 0.8898 Mit einer Wahrscheinlichkeit von 89% kann die Nullhypothese angenommen warden: es kann eine Normalverteilung der Messdaten angenommen werden. 29 Was weiß ich über die Standardnormalverteilung?? qnorm (Quantil): An welcher Stelle liegt ein bestimmtes Quantil? Abb. 8: Gaußsche Glockenkurve / Wahrscheinlichkeitsdichte der Normalverteilung mit den eingezeichneten Quantilen -1.96 und +1.96, die die mittleren 95% der Werte einschließen. Beispiele: Wo liegt der Median? qnorm (0.5) = 0 Zwischen welchen Quantilen werden die mittleren 95% der Werte erwartet? qnorm(c(0.025,0.975)) [1] 0 [1] -1.959964 1.959964 pnorm (normale Standardabweichung): Wieviele Messwerte liegen unterhalb einer bestimmten nd? Abb. 9: Gaußsche Glockenkurve / Wahrscheinlichkeitsdichte der Normalverteilung mit den eingezeichneten Wahrscheinlichkeiten unterhalb dem Quantil -2 und oberhalb dem Quantil +3. Beispiele: Wieviel Prozent der Messwerte liegen unterhalb von -2 nd? Wieviel Prozent der Messwerte liegen oberhalb von +3 nd? pnorm (-2) [1] 0.02275013 1-pnorm(3) [1] 0.001349898 Aufgaben: Wie groß ist die Wahrscheinlichkeit, dass einer der Personen kleiner als 180 cm ist? 30 5.4. Transformation zur Normalverteilung vorher: Art der Transformation nachher: Logarithmische Transf. log(x) oder ln (x) Wurzel-Transf. x Wurzel-Transf. x Kehrwert-Transf. 1/x Potenz-Transf. xn 31 6. Vergleich zweier Stichproben In diesem Kurs: parametrisch t-test für nicht-verbundene Stichproben t-test für verbundene Stichproben parameterfrei Wilcoxon Rangsummentest für verbundene Stichproben parametrische und parameterfrei Tests: Parametrische Methoden setzen im allgemeinen Normalverteilung und Varianzhomogenität der Werte voraus, was allerdings häufig nicht erfüllt ist. Die aufgestellten Hypothesen sollen dann durch einen Vergleich von Parametern angenommen oder abgelehnt werden. Parameterfreie Tests verwenden anstelle von Messwerten deren Rangzahlen. Normalverteilung und Varianzhomogenität müssen hier nicht vorliegen. nicht-verbundene und verbundene Stichproben: eine Stichprobe ist verbunden, wenn sich die Messwerte z.B. aus unterschiedlichen Messmethoden am gleichen Untersuchungsobjekt ergeben. Die Werte sind dann voneinander abhängig (hoher Messwert mit Methode I wird ebenfalls hohen Messwert mit Methode II ergeben). Oder z.B. Messungen im Ober- und Unterlauf desselben Flusses. 32 6.1. Prüfung der Voraussetzung für parametrische Tests 6.1.1. Normalverteilung s. Kapitel 5.3. 6.1.2. Gleichheit der Varianz / Varianzhomogenität größere Varianz kleine Varianz = Varianzverhältnis/Prüfgröße Wenn Varianzen unterschiedlich sind, dann ist Varianzverhältnis/Prüfgröße > 1 Nullhypothese H0 = Varianzen sind gleich Alternativhypothese Ha = Varianzen unterscheiden sich signifikant Wann sind die Varianzen signifikant unterschiedlich, so dass die Nullhypothese abgelehnt werden muss? Wir brauchen einen Vergleichswert = kritischer Wert aus der F-Verteilung Berechnung per Hand: qf = Qantile der F-Verteilung qf(p, FG_Zähler,FG_Nenner) p ist bei α = 0.05 und einem zweiseitiger Test: einseitiger Test: (p = 1 – α/2) (p = 1 - α) bzw. moderne/alternative Ergebnisdarstellung: = Angabe der Wahrscheinlichkeit, dass die beiden Varianzen gleich sind ist mit pf = Wahrscheinlichkeiten der F-Verteilung einseitig: (1-pf(Verhältnis, FG_Zähler,FG_Nenner)) zweiseitig: 2*(1-pf(Verhältnis, FG_Zähler,FG_Nenner)) var.test(Var1,Var2) F test to compare two variances data: m and f F = 1.1474, num df = 24, denom df = 24, p-value = 0.739 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0.5056134 2.6037168 sample estimates: ratio of variances 1.147377 33 6.2. Student’s t-test Prüfgröße: t Differenz zwischen beiden Mittelwerten s.e. der Differenz y A yB s.e.diff Faustregel: bei einem t-Wert > 2 liegt Signifikanz vor. Nullhypothese H0: Mittelwerte sind gleich. Alternativhypothese Ha: Mittelwerte sind unterschiedlich. Aber was ist der Standardfehler der Differenz s.e.diff ?? Bei einer nicht-verbundenen Stichprobe: Die Varianz der Differenz = die Summe der beiden Stichprobenvarianzen y2 A A2 B2 yB daraus ergibt sich s.e.diff s A2 s B2 n A nB t.test (Var1, Var2) Abb.11: nicht-verbundene Stichprobe im Vergleich dazu: Bei einer verbundenen Stichprobe: Die Varianz der Differenz = die Summe der beiden Stichprobenvarianzen - 2*Covarianz von A und B y2 A yB A2 B2 2* Cov von A und B Die Varianz der Differenz ist also kleiner als in der nicht-verbundenen Stichprobe. 2 s.e.diff Abb.12: nicht-verbundene Stichprobe 34 sd n t.test (Var1, Var2, paired = T) Welch Two Sample t-test data: m and f t = 11.3377, df = 47.775, p-value = 3.792e-15 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 14.69562 21.03238 sample estimates: mean of x mean of y 186.604 168.740 Paired t-test data: d5[, 1] and d5[, 3] t = 96.8868, df = 24, p-value < 2.2e-16 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 17.48346 18.24454 sample estimates: mean of the differences 17.864 35 6.3. Wilcoxon Rangsummentest Wenn die Voraussetzungen (Normalverteilung der Daten und Gleichheit der Varianzen) nicht erfüllt sind, dann sind nicht-parametrische Tests vorzuziehen, die statt mit den Messwerten mit den Rangwerten operieren. Falls Messwerte doppelt vorkommen, werden die zugehörigen Rangwerte gemittelt. Probe Werte Probe Werte Nr. A 3 A 1 1 1,0 A 4 A 2 2 2,5 A 4 A 2 3 2,5 6,0 Rank A 3 A 3 4 A 2 A 3 5 6,0 A 3 A 3 6 6,0 6,0 A 1 A 3 7 A 3 B 3 8 6,0 A 5 A 4 9 10,5 A 2 A 4 10 10,5 B 5 B 4 11 10,5 B 5 B 4 12 10,5 15,0 jetzt Tabelle nach den Messwerten aufsteigend sortieren und Rangnummern vergeben. Bei gleichen Messwerten werden die Rangnummern gemittelt. B 6 A 5 13 B 7 B 5 14 15,0 B 4 B 5 15 15,0 15,0 B 4 B 5 16 B 3 B 5 17 15,0 B 5 B 6 18 18,5 18,5 20,0 B 6 B 6 19 B 5 B 7 20 Summe der Rangwerte für: Stichprobe A = 1.0 + 2.5 + 2.5 + … Stichprobe B = 6.0 + 10.5 + 10.5 +… = 66 = 144 Nullhypothese wird zurückgewiesen, wenn die kleinere der beiden Summen (hier = 66) kleiner ist als der tabellierte Vergleichswert. Der Vergleichswert lautet für Stichprobe A (n=10) und Stichprobe B (n=10) 5%-Wert lautet 78!! in R: wilcox.test (var1, var2) Wilcoxon rank sum test with continuity correction data: m and f W = 619, p-value = 2.893e-09 alternative hypothesis: true location shift is not equal to 0 Warning message: cannot compute exact p-value with ties in: wilcox.test.default(m, f) 36 7. Statistische Modellierung Die Anpassung von Modellen an die Daten ist die zentrale Aufgabe von R. Das Ziel ist dabei, ein minimal adäquates Modell aus allen möglichen Modellen herauszufinden. gesättigtes Modell maximales Modell minimal adäquates Modell Nullmodell 1 Parameter für jeden Datenpunkt Anpassung: perfekt Freiheitsgrade: keine Erklärende Kraft des Modells: keine Enhält alle (p) Faktoren, Interaktionen und Kovariaten, die von Interesse sein könnten. Einige von den Termen werden nicht signifikant sein und müssen wieder entfernt werden Freiheitsgrade: n-p-1 erklärende Kraft des Modells: ? vereinfachtes Modell mit 0≤p’≤p Parametern Anpassung: weniger gut als im Vergleich mit dem maximalen Modell, aber nicht signifikant schlechter Freiheitsgrade: n-p’-1 Erklärende Kraft des Modells: r2 = SSR/SSY Nur ein Parameter: der allgemeine Mittelwert ohne jegliche erklärenden Variablen Anpassung: keine (SSE=SSY) Freiheitsgrade: n-1 Erklärende Kraft des Modells: keine Das geschieht durch Modellvereinfachung in folgenden Schritten: 1 2 3 4 Prozedur Anpassung des maximalen Modells Beginn der Modellvereinfachung Modellvergleich / Varianzvergleich beider Modelle (mit und ohne entfernten Term) durch Anova Erreichen des minimal adäquaten Modells Verwendung aller Faktoren, Interaktionen und Kovariaten von Interesse. Wie lautet der SSE? Untersuchung der Parameterschätzungen mit summary. Entferne die am wenigsten signifikanten Terme zuerst mit update- und beginn dabei immer mit den Interaktionen der höchsten Ordnung. Wenn die Entfernung des Terms die Anpassung nicht signifikant verschlechtert hat, dann lass den Term unberücksichtigt. Wenn die Entfernung die Anpassung signifikant verschlechtert hat dann zurück mit dem Term durch update+. Wiederhole Schritt 2 und 3 bis das Modell nur noch signifikante Terme enthält. Das ist das minimal adäquate Modell. Wenn keins der Parameter signifikant ist, dann ist das minimal adäquate Modell das Nullmodell 37 Struktur der Modelle in R Antwortvariable ~ erklärende Variablen mit „~“ als „ist modelliert als eine Funktion von“ Auf der rechten Seite der Modellgleichung erklärende Variablen Interaktionen, falls vorhanden nicht-lineare Terme eventuelle Fehlerterme Bedeutung der verwendeten Symbole Einbeziehung einer erklärenden Variablen in das Modell + Entfernung einer erklärenden Variablen aus dem Modell Einbeziehung der erklärenden Variablen und ihren * Interaktionen, s. Beispiel unten nur Interaktion zwischen den erklärenden Variablen : Nesting / bei Bedingungen | (keine Addition) (keine Subtraktion) (keine Multiplikation) (keine Division) (keine Division) Beispiele erklärende Variable ist y~1 y~x y~x y~a+b y~a*b*c y~a+b+c-a:b:c y~a+b y~a*b kontinuierlich kategorisch beide kategorisch alle kategorisch alle kategorisch a ist kontinuierlich, b ist kategorisch a ist kontinuierlich, b ist kategorisch Modell Nullmodell einfache lineare Regression einfaktorielle ANOVA zweifaktorielle ANOVA faktorielle ANOVA dreifaktorielle ANOVA ohne Interaktion 3. Ordnung ANCOVA mit allgemeiner Steigung und 2 Schnittpunkten mit der y-Achse ANCOVA mit 2 Steigungen und 2 Schnittpunkten mit der y-Achse Interaktionen bei kontinuierlichen Variablen: A*B*C ist dasselbe wie A+B+C+A:B+A:C+B:C+A:B:C mit A, B und C als Haupteffekte A:B, A:C und B:C als Interaktionen erster Ordnung A:B:C als Interaktion dritter Ordnung Interaktionen werden wie neue Variablen behandelt, deren Werte aus einer punktweisen Multiplikation der zugrunde liegendenVektoren berechnet worden sind. Interaktionen bei kategorischen Variablen: A*B (a-1) (b-1) Anzahl der Interaktionen mit a = Faktorstufen der Variablen A und b = Faktorstufen der Variablen B. 38 ohne erklärende Variable Körpergröße Körpergewicht I. Nullmodell (=Mittelwert) I. Nullmodell (=Mittelwert) SSQ der Residuen = 5478,6 SSQ der Residuen = 3.72 Gibt es ein besseres Modell??? Mit kleineren Residuen / kleinerer Varianz / kleinerer SSQ = bessere Anpassung an die Daten??? mit erklärender Variable II. Varianzanalyse / Anova III. Regressionsanalyse erklärende Variable ist kategorisch (nominal oder ordinal) kontinuierlich (metrisch) Die Körpergröße ist abhängig vom Geschlecht (=Faktor) mit den beiden Stufen/Level: männlich und weiblich Das Körpergewicht ist abhängig von der Körpergröße, mit kontinuierlichen Werten zwischen 160 und 200cm. SSQ der Residuen = 1489,5 SSQ der Residuen = 0,83 Beispiel 39 Geht es noch besser? Ja, durch Kombination aus beiden Modellideen IV. ANCOVA erklärende Variablen sind Beispiel kategorisch und kontinuierlich Das Körpergewicht ist abhängig von der Körpergröße, die wiederum in Wechselbeziehung steht mit dem Geschlecht. SSQ der Residuen = 0.63 40 8. Das Nullmodell Das allereinfachste Modell ohne erklärende Variable! Abb. 13: Nullmodell zur Variablen Körpergröße (Frauen und Männer). Die Messwerte werden durch den Mittelwert abgebildet. Die Körpergröße lag im Durchschnitt bei 177,7 cm. Abweichung als Sum of Squares: 5478,6. Eingabe für den Plot: pf<-seq(1,49,2) pm<-seq(2,50,2) plot(pm,m,ylab="Körpergröße in cm",xlab="Index",ylim=c(155,203)) points(pf,f) abline(h=mean(size)) for (i in 1:25) { lines(c(pf[i],pf[i]),c(mean(size),f[i])) lines(c(pm[i],pm[i]),c(mean(size),m[i])) } nullmodell<-aov(size~1) Ergebnis Sum of Squares Deg. of Freedom Residuals 5478.581 49 Residual standard error: 10.57392 41 9. Varianzanalyse / Anova (Analysis of Variance) Frage: Gibt es irgendwelche Unterschiede zwischen den Mittelwerte, die Wert sind, erklärt zu werden? Nullhypothese: Mittelwerte der Faktorstufen sind gleich Alternativhypothese: wenigstens einer der Mittelwerte unterscheidet sich von den anderen. Kochrezept im Überblick Schritt 1: Grafischer Überblick über die Daten mit boxplot. Befehl: plot(Faktor, Antwortvariable). Schritt2: Durchführung der Anova Schritt 3: Modellvereinfachung unter Verwendung von Kontrasten ! zu Kontraste (vgl. Kapitel 9.4.) bei einer einfaktoriellen Anova können eventuell Faktorstufen zusammengefasst werden Allgemein (mehrfaktorielle Anova, multiple Regression, Ancova) werden bei der Modellvereinfachung insbesondere Interaktionen zwischen den erklärenden Variablen überprüft. Schritt 4: Sind die Voraussetzungen der Anova erfüllt? Überprüfung mit Modell-Plots Schritt 5: Multipler Vergleich der Mittelwerte auch bekannt als Post-hoc-Test Kein wirklicher Bestandteil der Anova, aber schließt sich dieser an, insbesonderen der einfaktoriellen Anova mit vielen Faktorstufen. vgl. Kapitel 9.5.. 42 9.1. Einfaktorielle ANOVA (one-way Anova) Untersuchung eines einzigen Faktors mit 3 oder mehr Faktorstufen Bei nur 2 Faktorstufen verwenden wir den t-test (s. Seite 6.2.) Zur Veranschaulichung der Anova-Grundidee und zum Vergleich der Anova mit dem t-test wird ein kurzes Beispiel einer einfaktoriellen Anova mit 2 Faktorstufen. im Anschluss: „echte“ einfaktorielle ANOVA mit 5 Faktorstufen nach Kochrezept. Grundidee Wenn sich die Mittelwerte signifikant unterscheiden, dann ist der SSQ der einzelnen Mittelwerte (=SSE) kleiner als der SSQ des allgemeinen Mittelwerts (=SSY). Wir vergleichen also Varianzen, um Mittelwerte zu vergleichen. Total SSQ: SSY ( y y ) 2 Varianz um den allgemeinen Miitelwert y (= Nullmodell) 1. Treatment SSQ = SSA SSA yˆ y 2 oder SSA = SSY-SSE durch Modell erklärter Varianzanteil Differenz zwischen allg. Mittelwert y und Mittelwert der treatments y A und yB bzw. der gefitteten Modellwerte ŷ . 2. Error SSQ = SSE SSE y yˆ 2 SSE y A y A y B y B 2 2 nicht durch Modell erklärter Varianzanteil =Residuen. 43 Die Anova-Tabelle Varianzanteil sex Summe der Abstandsquadrate Freiheitsgrade Mittl. Abstandsquadrate F-Verhältnis =Sum of squares =degrees of freedom =mean squares = SSA/SSE = SSQ / Sum Sq = Df = Mean Sq = F value 3989.0 31.03 SSA 3989.0 : 1 = 3989.0 Residuals SSE 1489.5 : 48 = s2 = 31.03 Total 5478.5 : 49 = 111.8 SST =128.54 model<-aov(size~sex) summary(model) sex Residuals 48 Df 1 1489.5 Sum Sq 3989.0 31.0 Mean Sq 3989.0 F value 128.54 Pr(>F) 3.549e-15 *** Ergebnis: Die beiden Mittelwerte unterscheiden sich …. Vergleich dazu den t-test (s. Seite 6.2.): Eingabe in R: t.test(m,f) Welch Two Sample t-test data: m and f t = 11.3377, df = 47.775, p-value = 3.792e-15 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 14.69562 21.03238 sample estimates: mean of x mean of y 186.604 168.740 44 Beispiel: Einfaktorielle Anova (mit 5 Faktorstufen) read.table(„...//konkurrenz.txt“,...) Schritt 1: Grafischer Überblick über die Daten. plot(schnitt, biomasse, xlab=““, ylab=““) Abb.14a: Box-and-Whisker Plot zum Datensatz “Konkurrenz”. Abb. 14b: Box-and-Whisker Plot zum Datensatz “Konkurrenz” mit Einkerbung: wenn sich 2 Einkerbungen nicht überlappen, dann ist anzunehmen, dass sich die beiden Mediane signifikant voneinander unterscheiden. weniger sinnvoll, aber vielleicht gefordert in Veröffentlichung: Funktion für Einzeichnung des Standardfehlers in das Säulendiagramm error.bars<-function(yv,z,nn){ xv<-barplot(yv,ylim=c(0,(max(yv)+max(z))), names=nn,ylab=deparse(substitute(yv))) g<-(max(xv)-min(xv))/50 for (i in 1:length(xv)){ lines(c(xv[i],xv[i]),c(yv[i]+z[i],yv[i]-z[i])) lines(c(xv[i]-g,xv[i]+g),c(yv[i]+z[i],yv[i]+z[i])) lines(c(xv[i]-g,xv[i]+g),c(yv[i]-z[i],yv[i]-z[i])) }} se<-rep(28.75,5) labels<-as.character(levels(schnitt)) ybar<-as.vector(tapply(biomasse,schnitt,mean)) Abb. 15: Säulendiagramm mit Standardfehler, Syntax s. Box oben. error.bars(ybar,se,labels) 45 Schritt2: model1<-aov(biomasse~schnitt) summary(model1) Df 4 25 schnitt Residuals Sum Sq 85356 124020 Mean Sq 21339 4961 F value 4.3015 Pr(>F) 0.008752 ** Anova zeigt, dass die Schnitt-Behandlung einen hoch-signifikanten Effekt (Pr = 0.008752) auf die Biomasse hat. Jetzt wollen wir herausfinden: Welche Faktorstufen haben den größten Effekt auf die Biomasse? Sind alle Schnitt-Behandlungen signifikant unterschiedlich zur Kontrolle? Wie lautet das minimale adäquate Modell? Schritt 3: Übersicht über die Faktorstufen erhält man durch summary.lm(model1) Coefficients: (Intercept) schnittob_25 schnittob_50 schnittunt_10 schnittunt_5 Estimate Std. Error t value Pr(>|t|) 465.17 28.75 16.177 9.4e-15 *** 88.17 40.66 2.168 0.03987 * 104.17 40.66 2.562 0.01683 * 145.50 40.66 3.578 0.00145 ** 145.33 40.66 3.574 0.00147 ** Bei R ist der Treatment-Kontrast voreingestellt (s. Kapitel 9.4.). Nachteil von Treatment-Kontrasten: Signifikanz heißt nur signifikanter Unterschied zum ersten Stufe, die alphabetisch gewählt ist (Reihenfolge lässt sich abändern mit Befehl relevel). Hier tatsächlich die Kontrolle, muss aber nicht sein. Wir erfahren hier nicht, wie viele und welche signifikanten Faktorstufen im minimal adäquaten Modell zu behalten sind. Modellvereinfachung unter Verwendung von Kontrasten 2 Vorgehensweisen: 1. A priori Kontraste: sinnvolle im Vorfeld geplante Vergleiche von Faktorstufen 2. A posteriori Kontraste: man aggregiert nicht-signifikante Faktorstufen schrittweise 46 9.2. A Priori Kontraste = sinnvolle im Vorfeld geplante Vergleiche von Faktorstufen Hier sind folgende orthogonale Kontraste sinnvoll: Kontrolle gegen allg. Behandlung Schnitt am Trieb gegen Schitt an der Wurzel Schnitt Trieb 25 cm gegen 50 cm Schnitt Wurzel 10 cm gegen 5 cm Kontrolle ob_25 4 -1 0 1 0 0 0 1 ob_50 -1 1 0 -1 unt_10 unt_5 -1 -1 -1 -1 1 -1 0 0 levels (schnitt) [1] "kontr" "ob_25" "ob_50" "unt_10" "unt_5" contrasts(schnitt) <- cbind(c(4,-1,-1,-1,-1),c(0,1,1,-1,-1),c(0,0,0,1,-1),c(0,1,-1,0,0)) contrasts(schnitt) kontr ob_25 ob_50 unt_10 unt_5 [,1] [,2] [,3] [,4] 4 0 0 0 -1 1 0 1 -1 1 0 -1 -1 -1 1 0 -1 -1 -1 0 model2<-aov(biomasse~schnitt) summary.lm(model2) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 561.80000 12.85926 43.688 < 2e-16 *** schnitt1 -24.15833 6.42963 -3.757 0.000921 *** schnitt2 -24.62500 14.37708 -1.713 0.099128 . schnitt3 0.08333 20.33227 0.004 0.996762 schnitt4 -8.00000 20.33227 -0.393 0.697313 zurücksetzen lässt sich der angelegt Kontrast mit contrasts(schnitt)<-NULL 47 9.3. A posteriori Kontraste (Aggregierung nicht-signifikanter Faktorstufen) summary.lm(model1) Coefficients: (Intercept) schnittob_25 schnittob_50 schnittunt_10 schnittunt_5 Estimate Std. Error t value Pr(>|t|) 465.17 28.75 16.177 9.4e-15 *** 88.17 40.66 2.168 0.03987 * 104.17 40.66 2.562 0.01683 * 145.50 40.66 3.578 0.00145 ** 145.33 40.66 3.574 0.00147 ** Default-Einstellung: treatment-Kontrast: d.h. alle Parameterschätzungen sind Differenzen zur Faktorstufe, die als (Intercept) angegeben ist. (Intercept) = Faktorstufe Kontrolle. Es unterscheiden sich alle Faktorstufen signifikant von der Kontrolle. Aber unterscheiden sie sich untereinander bzw. kann man das Modell vereinfachen, indem man Faktorstufen zusammenfasst, die sich nicht signifikant unterscheiden? Erste Vereinfachung: wir fassen schnittunt_10 und schnittunt_5 zur Faktorstufe unten zusammen. schnitt2<-schnitt levels(schnitt2) [1] "kontr" "ob_25" "ob_50" "unt_10" "unt_5" levels(schnitt2)[4:5]<-"unten" levels(schnitt2) [1] "kontr" "ob_25" "ob_50" "unten" erzeugen einfacheres Modell: model2<-aov(biomasse~schnitt2) summary.lm(model2) Coefficients: Estimate Std. (Intercept) 465.17 schnitt2ob_25 88.17 schnitt2ob_50 104.17 schnitt2unten 145.42 Error t value Pr(>|t|) 28.20 16.498 2.72e-15 *** 39.87 2.211 0.036029 * 39.87 2.612 0.014744 * 34.53 4.211 0.000269 *** Hat sich die Anpassung des einfacheren Modells signifikant verschlechtert? Wir vergleichen model1 und model2 miteinander: anova(model1,model2) Analysis of Variance Table Model 1: Model 2: Res.Df 1 25 2 26 biomasse ~ schnitt biomasse ~ schnitt2 RSS Df Sum of Sq 124020 124020 -1 -0.0833333 F Pr(>F) 0.0000168 0.9968 Ergebnis: Vereinfachung kann akzeptiert werden, da 0.9968 = nicht signifikant. Aufgabe: Fahre mit der Aggregierung fort, bis zum einfachsten Modell: wie lautet es? 48 Schritt 4: Sind die Voraussetzungen der Anova erfüllt? plot(model) 49 9.4. Kontraste Kontraste sind die Essenz der Hypothesenprüfung und Modellvereinfachung in der Anova. Man kann mit Kontrasten Mittelwerte oder Gruppen von Mittelwerten mit anderen Mittelwerten oder Gruppen von Mittelwerten vergleichen. Es gibt 2 Arten von Kontraste: 1. A priori Kontraste: sinnvolle im Vorfeld geplante Vergleiche von Faktorstufen 2. A posteriori Kontraste: schrittweise Aggregierung von nicht-signifikanten Faktorstufen Eigentlich sollte man nur a posteriori Kontraste durchführen, da sie geplant sind. Bei einer wissenschaftlichen Untersuchung sollte man eigentlich bei der Versuchsplanung und vor der Datenerhebung seine Hypothesen festlegen / formulieren, anschließend nur noch überprüfen. Die Hypothesen spiegeln sich in den gewählten a priori - Kontrasten wieder. Aber die a-posteriori-Prozedur in gängig und sozusagen in der Natur des Menschen. gruppierte Faktorstufen erhalten dasselbe Vorzeichen Faktorstufen, die verglichen/gegenüber gestellt werden, erhalten gegensätzliche Vorzeichen Faktorstufen, die aus dem Vergleich ausgeschlossen werden, erhalten eine 0 Der Konrastkoeffizient c muss in der Summe 0 ergeben bei orthogonalen Kontrasten ergibt die Summe aller Produkte von 2 beliebigen Kontrasten ebenfalls 0. es gibt unglaublich viele mögliche Kontraste, aber nur k-1 orthogonale Kontraste Beispiel für ein orthogonalen a priori-Kontraste: s.Kapitel 9.2. Konkurrenzversuch durch Pflanzenbeschnitt: Die Anova zeigte, dass die Schnitt-Behandlung einen hoch-signifikanten Effekt (Pr = 0.008752) auf die Biomasse hat. Folgende sinnvolle Wahl von Kontrasten für weitere Hypothesenprüfung bietet sich an: Kontrolle gegen allg. Behandlung Schnitt am Trieb gegen Schitt an der Wurzel Schnitt Trieb: 25 cm gegen 50 cm Schnitt Wurzel: 10 cm gegen 5 cm Kontr 4 0 0 0 Prüfung der Orthogonalität: z.B. Zeilen 1: Kontrolle gegen allg. Behandlung gegen 2: Schnitt am Trieb gegen Schitt an der Wurzel 50 ob_25 -1 1 0 1 + + + + ob_50 -1 1 0 -1 Nr. 1 4 * -1 * -1 * -1 * -1 * Summe unt_10 -1 -1 1 0 Nr. 2 0 1 1 -1 -1 unt_5 -1 -1 -1 0 0 -1 -1 1 1 0 c = Summe 0 0 0 0 weitere Kontraste: 1. Treatment-Kontrast (Voreingestellt in R) comp<-read.table("C:\\Kaarina\\rrr\\konkurrenz.txt",header = TRUE) attach(comp) names(comp) contrasts(schnitt) kontr ob_25 ob_50 unt_10 unt_5 ob_25 ob_50 unt_10 unt_5 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 2. Helmert-Kontrast options(contrasts=c("contr.helmert","contr.poly")) contrasts(schnitt) kontr ob_25 ob_50 unt_10 unt_5 [,1] [,2] [,3] [,4] -1 -1 -1 -1 1 -1 -1 -1 0 2 -1 -1 0 0 3 -1 0 0 0 4 zurück zum Treatment-Kontrast geht es wieder mit: options(contrasts=c("contr.treatment","contr.poly")) contrasts(schnitt) 51 9.5. Multipler Vergleiche Die Anova zeigt, ob mindestens ein Unterschied zwischen verschiedenen Behandlungen/ Faktorstufen vorliegt. Multiple Vergleiche (engl. Multiple Comparison Tests, MCPs ) testen die paarweisen Unterschiede (Existenz und Größe). Problem bei muliplen Vergleichen: Man beeinflusst α, also die Wahrscheinlichkeit des Typ-I-Fehlers!! Führen wir nur einen Test bei α = 0.05 durch, können wir uns sicher sein, dass die Wahrscheinlichkeit eines als falsch erkannten signifikanten Unterschieds bei 5% liegt. Wenn allerdings gleichzeitig 40 Vergleiche durchführt werden, erwarten wir allein durch Zufall 2 Ergebnisse, die fälschlicherweise als signifikant verschieden akzeptiert werden. Wie können wir die echten und unechten Signifikanzen unterscheiden? Wir müssen α verkleinern!! Wenn α allerdings zu klein wird, dann steigt wiederum das Risiko eines Typ-II-Fehlers: Annahme von falschen Nullhypothesen. Es gibt verschiedene Korrekturmethoden zu α (beispielsweise): Bonferroni’s Korrektur: reduziert α im Verhältnis der Anzahl der Vergleiche (m) α = α/m Tukey’ honestly significant difference (HSD): die Wahrscheinlichkeit, dass alle Grenzen gelten ist mindesten ein α. Beispiel: Pilzertrag in Abhängigkeit vom Waldhabitattyp. daten<-read.table("C:\\Kaarina\\rrr\\fungus.txt",header = TRUE, sep = ",") attach(daten) model<-aov(Fungus~Habitat) summary(model) plot(Habitat,Fungus,cex.axis=0.7) TukeyHSD(model, "Habitat", ordered = TRUE) 52 Fit: aov(formula = Fungus ~ Habitat) $Habitat Alder-Aspen Hornbeam-Aspen Cherry-Aspen Birch-Aspen Holmoak-Aspen Spruce-Aspen Oak-Aspen diff lwr upr p adj 0.52109812 -4.156371577 5.198568 1.0000000 1.22609704 -3.451372658 5.903567 0.9998463 4.34152240 -0.335947298 9.018992 0.0989338 4.68466404 0.007194342 9.362134 0.0492363 6.42503410 1.747564407 11.102504 0.0005550 6.94976968 2.272299981 11.627239 0.0001137 9.19531554 4.517845843 13.872785 0.0000001 … plot(TukeyHSD(model, "Habitat"),cex=0.01) … Interpretation: Für Signifikanz dürfen die unteren und oberen Grenzen des Konfidenzintervalls die Null nicht einschließen. Entweder die untere Grenze ist positiv oder die obere Grenze ist negativ. 53 pairwise.t.test(Ozone, Month) Pairwise comparisons using t tests with pooled SD data: Fungus and Habitat Ash Aspen Beech Birch Cherry Chestnut Holmoak Hornbeam Lime Oak Pine Rowan Spruce Sycamore Alder < 2e-16 1.00000 3.1e-08 0.07639 0.14203 < 2e-16 0.00122 1.00000 < 2e-16 2.3e-07 5.1e-09 < 2e-16 0.00029 4.9e-14 Ash < 2e-16 5.2e-06 5.8e-14 1.6e-14 1.00000 4.0e-11 < 2e-16 1.00000 7.4e-07 2.6e-05 0.02076 2.8e-10 0.07957 Aspen 4.8e-09 0.02495 0.05388 < 2e-16 0.00029 1.00000 < 2e-16 3.9e-08 7.7e-10 < 2e-16 6.1e-05 7.0e-15 Beech 0.00956 0.00400 0.00065 0.32318 3.3e-07 5.0e-06 1.00000 1.00000 2.0e-13 0.71075 0.21243 Birch 1.00000 2.4e-11 1.00000 0.27888 5.5e-14 0.03710 0.00265 < 2e-16 1.00000 2.0e-07 Ash Aspen Beech Birch Cherry Chestnut Holmoak Hornbeam Lime Oak Pine Rowan Spruce Sycamore Lime 7.1e-07 2.5e-05 0.02098 2.7e-10 0.07956 Oak 1.00000 2.1e-14 1.00000 0.07182 Pine 1.3e-12 0.32401 0.47533 Rowan < 2e-16 1.1e-07 Spruce 0.00027 Cherry 6.5e-12 1.00000 0.47533 1.6e-14 0.01775 0.00110 < 2e-16 0.94235 6.2e-08 Chestnut 1.3e-08 < 2e-16 1.00000 0.00012 0.00250 0.00033 8.2e-08 1.00000 hier sind auch andere Methoden der p-Korrektur einstellbar: c("holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "none") beispielsweise: pairwise.t.test(Fungus, Habitat, p.adj = "bonf") 54 Holmoak 0.00762 3.8e-11 0.75837 0.13416 < 2e-16 1.00000 5.7e-05 Hornbeam < 2e-16 2.4e-06 6.2e-08 < 2e-16 0.00199 7.0e-13 9.6. Zwei- bzw. Mehrfaktorielle ANOVA Mehrfaktorielle Experimente haben 2 oder mehr Faktoren mit jeweils 2 oder mehr Faktorstufen mit Replikaten auf jeder Faktorstufe Das erlaubt uns statistische Interaktionen/Wechselbeziehungen zu untersuchen: d.h. die Antwort auf ein Faktor hängt ab von der Faktorstufe eines anderen Faktors. Beispiel: Ertragssteigerungen (Gewichtszunahme) bei Mastvieh durch unterschiedliches Futter (3 Faktorstufen) und unterschiedliches Ergänzungsfutter (4 Faktorstufen). gewicht<-read.table("C:\\Kaarina\\rrr\\vieh.txt",header = TRUE) attach(gewicht) names(gewicht) tapply(ertrag,list(futter,erg.futter),mean) agrimore control supergain supersupp gerste 26.34848 23.29665 22.46612 25.57530 hafer 23.29838 20.49366 19.66300 21.86023 weizen 19.63907 17.40552 17.01243 19.66834 barplot(tapply(ertrag,list(futter,erg.futter),mean), beside=T,col=c("red","orange","yellow")) namen<-c("Gerste","Hafer","Weizen") farben<-c("red","orange","yellow") legend("topright", namen, fill=farben) model<-aov(ertrag~futter*erg.futter) summary(model) summary.lm(model) 55 Ergebnis: sämtliche Interaktionen sind nicht signifikant und können aus dem Modell entfernt werden. model<-aov(ertrag~futter+erg.futter) summary.lm(model) (Intercept) futterhafer futterweizen erg.futtercontrol erg.futtersupergain erg.futtersupersupp Estimate Std. Error t value Pr(>|t|) 26.1230 0.4408 59.258 < 2e-16 *** -3.0928 0.4408 -7.016 1.38e-08 *** -5.9903 0.4408 -13.589 < 2e-16 *** -2.6967 0.5090 -5.298 4.03e-06 *** -3.3815 0.5090 -6.643 4.72e-08 *** -0.7274 0.5090 -1.429 0.160 Die besten Ertragssteigerungen zeigen supersupp und agrimore (ist als Intercept dargestellt), die geringsten Ertragssteigerungen sind bei der Kontrolle und supergain zu verzeichnen. Wir fassen die Faktorstufen entsprechend ein in „gut“ und „schlecht“. erg.futt2<-factor(erg.futter) levels(erg.futt2) levels(erg.futt2)[c(1,4)]<-"gut" levels(erg.futt2)[c(2,3)]<-"schlecht" model2<-aov(ertrag~futter+erg.futt2) anova(model,model2) Model 1: Model 2: Res.Df 1 42 2 44 ertrag ertrag RSS 65.296 71.284 ~ futter + erg.futter ~ futter + erg.futt2 Df Sum of Sq F Pr(>F) -2 -5.988 1.9257 0.1584 Da sich durch die Modellvereinfachung die Anpassungsgüte nicht signifikant verschlechtert hat, behalten wir die einfache Variante bei. Wir haben 2 Freiheitsgrade eingespart und das minimal adäquate Modell erreicht: alle Parameter sind signifikant, unterscheiden sich von Null und voneinander: summary.lm(model2) (Intercept) futterhafer futterweizen erg.futt2schlecht 56 Estimate Std. Error t value Pr(>|t|) 25.7593 0.3674 70.106 < 2e-16 -3.0928 0.4500 -6.873 1.76e-08 -5.9903 0.4500 -13.311 < 2e-16 -2.6754 0.3674 -7.281 4.43e-09 *** *** *** *** 10. Regression 10.1. Klassische lineare Regression Grundidee Wenn sich die Steigung der Regressionsgeraden signifikant von Null unterscheidet (und damit vom allgemeinen Mittelwert), dann ist der SSQ umd die Regressionsgerade (=SSE) kleiner als der SSQ des allgemeinen Mittelwerts (=SSY). Wir vergleichen also Varianzen, um eine signifikante Steigung nachzuweisen. Total SSQ: SSY ( y y ) 2 Varianz um den allgemeinen Miitelwert y (= Nullmodell) 1. Regressions SSQ = SSR 2. Error SSQ = SSE 2 SSR yˆ y oder SSR = SSY-SSE oder SSR b SSXY !!!!! SSE y yˆ durch Modell erklärter Varianzanteil Differenz zwischen allg. Mittelwert y und den gefitteten Modellwerte ŷ (=Regressionsgerade). nicht durch Modell erklärter Varianzanteil =Residuen. 2 57 Die Anova-Tabelle zur linearen Regression Varianzanteil size Summe der Abstandsquadrate Freiheitsgrade Mittl. Abstandsquadrate F-Verhältnis =Sum of squares =degrees of freedom =mean squares = SSR/SSE = SSQ / Sum Sq = Df = Mean Sq = F value 2.886 0.017 SSR 2.886 : 1 = 2.886 Residuals SSE 0.834 : 48 = s2 = 0.017 Total 3.720 : 49 = 0.076 SSY =166.10 model<-lm(d$weight~size) summary.aov(model) size Residuals Df 1 48 Sum Sq 2.88642 0.83411 Mean Sq 2.88642 0.01738 F value 166.10 Pr(>F) < 2.2e-16 *** Ergebnis: Parameter des Regressionsmodells Wie sieht die Regressionsgerade aus? summary(model) Coefficients: Estimate (Intercept) 2.202109 size 0.022953 Std. Error 0.316978 0.001781 t value 6.947 12.888 Pr(>|t|) 8.86e-09 *** < 2e-16 *** Ergebnis: Der Schnittpunkt mit der Y-Achse der Geraden liegt bei 2.2, die Steigung beträgt 0.023 mit einem Standardfehler von 0.0018. 58 Ermittlung aller Parameter und Kenngrößen die 3 Summenquadrate: SSY y y Kurzformeln: 2 , y 2 SSX x x und SSXY y y x x 2 SSY y 2 n x 2 SSX x 2 Parameter der linearen Regression SSXY xy n x y n SSXY SSX Steigung b Schnittpunkt mit der y-Achse / Interzept a y bx Korrelationskoeffizient r SSXY SSX SSY = cov(x,y) Daraus ergibt sich das Bestimmtheitsmaß oder umgangssprachlich „r-Quadrat“: SSXY 2 r SSX SSY 2 r2 durch Re gression erklärter Anteil der Varianz SSR totale Varianz in y SSY da SSR b SSXY Aufgabe: Mit der Funktion Regr.test (in der Scriptdatei „Regr_test.txt“) kannst du dir einen Eindruck über die Funktion und Kenngrößen der linearen Regression verschaffen. 59 10.1.1. s.e. y Standardfehler bei der Regression 2 s n Wiederholung: Standardfehler für den Mittelwert (s. S. 4.5) Wurzelterm: damit Standarfehler und Parameter dieselbe Einheit haben die Fehlervarianz s2 im Zähler 1. Standardfehler der Steigung s.e.b s2 SSX Abb. 16: SSX ist ein Maß für die Verteilung der Messwerte entlang der x-Achse. Je breiter die Messwerte verteilt sind, desto höher die Sicherheit des geschätzten Parameters. 2.a) Standardfehler für einen Modellwert ŷ an der Stelle x, 2.b) Standardfehler für den Interzept 1 x x 2 s.e. yˆ s 2 SSX n s.e.a s2 x2 n SSX Die Unsicherheit der Modellwerte steigt mit Quadrat der Entfernung zu x (d.h. mit x x ). Im Grafen: Links niedriger x , rechts hoher x . In beiden Fällen ist eine 25% Streuung der Steigung eingezeichnet. Vergleich den Unterschied in der Unsicherheit bei der Vorhersage eines bestimmten Modellwerts und des Schnittpunkt mit der y-Achse. 2 60 10.2. Weitere lineare Regressionen: der Zusammenhang zwischen y und x ist nicht immer einer Gerade! Aber Occam’s Razor verlangt: wir passen solange ein lineares Modell an, bis ein nichtlineares signifikant besser ist!! 10.2.1. Polynomiale Regression: Ein quadratisches Modell beschreibt die Beziehung zwischen y und x, allerdings erklärt es nicht die mechanistischen oder kausalen Zusammenhänge zwischen y und x!! allgemeine Form y a bx cx 2 also ein Interzept a und zwei Steigungen für x und x2 . a=4 b=2 c=-0.1 x<-seq(0,10,0.1) poly.f<-a+b*x+c*x^2 plot(x,poly.f,type="l") Polynomiale Regression in R: lm(y=x+ x2) 10.2.2. Linearisierbare Regressionsfunktionen Einige Regressionsfunktionen können in eine Gerade transformiert werden. In der folgenden Tabelle sind die wichtigsten Beispiele zusammengestellt. Vorgehensweise: aus kausalen/mechanistischen Überlegungen oder aus Anschauung des Datenmaterials wird eine passende Funktion ausgewählt Beispiel Funktion Zeile 3: y = a * xb Eingabe in R erfolgt mit lm (Y*X) Beispiel Funktion Zeile 3: lm (log y ~ log x) Die berechneten Parameterwerte für Interzept und Steigung entsprechen A und B und können umgerechnet werden gemäß Tabelle Beispiel Funktion Zeile 3: a = 10A sowie b = B. 61 Kurve 62 linearisierbare Funktion linearisierte Funktion nach Transformation: Eingabe in R: lm(Y~X), d.h. z.B. in Zeile 1: lm(log y * x) Berechng der Parameter a und b Y = A + B * X a= b= log y a bx log y = a + b * x A B y a b log x y = a + b * log x A B y a xb log y = log a + b * log x 10A B y a bx log y = log a + log b * x 10A 10B y a e bx ln y = ln a + b * x eA B y a eb / x ln y = ln a + b * 1/x eA B Kurve linearisierbare Funktion y a b x y a bx y ax bx y 1 a bx y x a bx y a bx n linearisierte Funktion nach Transformation: Eingabe in R: lm(Y~X), d.h. z.B. in Zeile 1: lm(log y * x) Berechng der Parameter a und b Y = A + B * X a= b= y = a + b * 1/x A B 1/y = b/a + 1/a * x 1/B A*a 1/y = 1/a + b/a * 1/x 1/A B*a 1/y = a + b * x A B x/y = a + b * x A B y = a + b * xn A B 63 Aufgabe: radioaktiver Abbau rm(list=ls()) curve<-read.table("C:\\Kaarina\\rrr\\decay.txt",header = TRUE) attach(curve) names (curve) plot(x,y,pch=16) linear<-lm(y~x) summary(linear) par(mfrow=c(2,2)) plot(linear) plot(x,y,pch=16) abline(linear) Polynomiale Regression x2<-x^2 quadrat<-lm(y~x+x2) summary(quadrat) anova(linear,quadrat) par(mfrow=c(2,2)) plot(quadrat) xv<-seq(0,30,.1) yv<-predict(quadrat,list(x=xv,x2=xv^2)) plot(x,y,pch=16) lines (xv,yv) Fit der Exponentialfunktion y ae bx (s. Tabelle Funktion Nr. 5) exponentiell<-lm(log(y)~x) summary (exponentiell) anova (linear,exponentiell) anova (quadrat, exponentiell) par(mfrow=c(2,2)) plot(exponentiell) yv2<-exp(predict(exponentiell,list(x=xv))) plot(x,y,pch=16) lines(xv,yv2,lty=2) Frage: Welches Model ist vorzuziehen und warum? (Antwort auf der nächsten Seite) 64 Die berechneten 3 Modelle gegenübergestellt: Abb. 17: Multiple R-Squared: 0.77 Adjusted R-Squared: 0.76 Multiple R-Squared: 0.91 Adjusted R-Squared: 0.90 Multiple R-Squared: 0.83 Adjusted R-Squared: 0.82 Die beste Anpassung zeigt das exponentielle Modell. Allerdings ist bei einer Zerfallskurve kein lokales Maximum zu erwarten und aufgrund unseres mechanistischen Hintergrundwissens über radioaktiven Zerfall entscheiden wir uns für das Modell des exponentiellen Abbaus, obwohl das r-Quadrat und auch der Residuenplot eine polynomiale Regression empfehlen. Nichtlineare Regression Wir haben ein nicht-lineares mechanistisches Modell und möchten die Parameter und zugehörigen Standardfehler schätzen. Nichtlinearität, dass die Zusammenhang kurvig ist und nicht durch Transformation linearisiert werden kann (vgl. Kapitel 10.2.2.). in R: wir verwenden das statistische Modell nls („non-linear least squares“) statt wie bisher lm wir geben R die exakte Formulierung der Gleichung als Modellformel R benötigt Anfangs-/Startwerte für die Berechnung der Parameter Beispiel: Länge der Kieferknochen in Abhängigkeit vom Alter bei Rehen mechanistisches Modell: y a(1 e bx ) rehe<-read.table("C:\\Kaarina\\rrr\\kiefer.txt",header = TRUE) attach(rehe) names(rehe) plot(alter,knochen,pch=16) Schätzung der Startwerte: Welchen Wert hat y bei x=∞? y a(1 e ) a(1 0) a Parameter a lässt sich aus dem Grafen ablesen und liegt bei ca. 120. Parameter c: die Kurve ist am steilsten bei y=40 und x=5. b log 1 y / a log( 1 40 / 120) 0.08109302 x 5 library(nls) model<-nls(knochen~a*(1-exp(-b*alter)),start=list(a=120,b=0.081)) summary(model) Parameters: Estimate Pr(>|t|) a 115.58044 b 0.11882 Std. Error 2.84364 0.01233 Plot der Werte: av<-seq(0,50,0.1) bv<-predict(model,list(alter=av)) plot(alter,knochen,pch=16) lines(av,bv) 65 t value 40.645 9.635 < 2e-16 *** 3.69e-13 *** 10.3. Multiple Regression Bei einer kontinuierlichen abhängigen Variable und 2 oder mehr kontinuierlichen erklärenden Variablen. ozon<-read.table("C:\\Kaarina\\rrr\\ozone.data.txt",header = TRUE) attach(ozon) names(ozon) 10.3.1. Grafische Voruntersuchungen Gibt es Korrelation zwischen den erklärenden Variablen? pairs(ozon,panel=panel.smooth) Liegt Krümmung vor in der Abhängigkeit zur erklärenden Variablen? library(mgcv) par(mfrow=c(2,2)) model<-gam(ozone~s(rad)+s(temp)+s(wind)) plot(model) Gibt es Interaktionen zwischen den erklärenden Variablen? library(tree) model<-tree(ozone~.,data=ozon) plot(model) text(model) „Pairs-Plot“ Abb.18: „Pairs-Plot“ zum Beispiel. Die abhängige Variable, Ozon-Konzentration, ist auf der y-Achse der untersten Reihe. starke negative Korrelation mit der Wind-Geschwindigkeit positive Korrelation mit der Temperatur möglicherweise humped Korrelation mit der Strahlung 66 „Gam-Plot“ Krümmung in der Abhängigkeit zur Ozon-Konzentration liegt vor bei Temperatur und Wind. Allerdings nur bei der Temperatur schreibt auch das Konfidenzintervall eindeutig eine Krümmung vor (ist eng genug angeschmiegt). „Tree-Plot“ 67 Temperatur ist der absolut wichtigste Faktor zur Erklärung der Ozon-Konzentration. (Je länger die Zweig, desto größer die erklärte Varianz). Windgeschwindigkeit ist ausschlaggebend bei hohen und niedrigen Temperaturen. Windstille ist assoziiert mit hohen mittleren Ozon-Konzentrationen (am Ende einer Verzweigung sind Mittelwerte der abhängigen Variable verzeichnet). Strahlung (Radiation) hat folgenden Effekt: Bei niedrigen Temperaturen ist Strahlung wichtig bei relativ hohen Windgeschwindigkeiten (<7.15), bei hohen Temperaturen ist Strahlung wichtig bei relativ niedrigen Windgeschwindigkeiten (<10.6). hohe Strahlung geht in beiden Fällen mit hohen mittleren Ozon-Konzentrationen einher. 10.3.2. Modellierung Welche erklärende Variablen sind in das Modell mit einzubeziehen? Risiko der Überparametrisierung! In das Ausgangsmodell nehmen wir alle 3 erklärenden Variablen mit allen ihren möglichen Interaktionen: temp, wind, rad, temp:wind, temp:rad, wind:rad, temp:wind:rad = 7 Parameter Außerdem die quadrierten erklärenden Variablen, um dem Modell eine Krümmung in der Anpassung an die Daten zu ermöglichen: I(rad^2),I(temp^2),I(wind^2) = 3 Parameter Insgesamt 10 Parameter im Modell stehen 111 Datensätzen gegenüber. Faustregel bezüglich der Überparametrisierung: nie mehr als n/3 Parameter im Modell schätzen. Diese Regel haben wir nicht gebrochen, Überparametrisierung liegt nicht vor! model1<-lm(ozone~temp*wind*rad+I(rad^2)+I(temp^2)+I(wind^2)) summary(model1) Nun wird Schritt für Schritt das Modell vereinfacht, beginnend mit den Interaktionen höchster Stufe!! model2<-update(model1,~.-temp:wind:rad) summary(model2) Aufgabe: Versuche selber fortzufahren! 68 model3<-update(model2,~.-wind:rad) summary(model3) model4<-update(model3,~.-temp:wind) summary(model4) model5<-update(model4,~.-I(rad^2)) summary(model5) model6<-update(model5,~.-temp:rad) summary(model6) Jetzt sind schonmal alle Terme im Modell signifikant und wir überprüfen die Voraussetzungen für statistische Modellierung (Gleichheit der Varianz und Normalverteilung der Residuen). par(mfrow=c(2,2)) plot(model6) Da Heteroscedastizität vorliegt und auch keine Normalverteilung der Residuen gegeben ist, versuchen wir es mit einer log Transformation der abhängigen Variablen. model7<-lm(log(ozone)~temp+wind+rad+I(temp^2)+I(wind^2)) summary(model7) Wir können weiter vereinfachen: model8<-update(model7,~.-I(temp^2)) summary(model8) par(mfrow=c(2,2)) plot (model8) Wert Nr. 17 ist gem. dem Cook’s plot ein sehr einflussreicher Wert und wir überprüfen, ob sich an der Parameterschätzung und den Standardfehler stark etwas ändert, wenn wir ihn rauslassen: model9<-lm(log(ozone)~temp+wind+rad+I(wind^2),subset=(1:length(ozon)!=17)) summary(model9) par(mfrow=c(2,2)) plot(model9) Ergebnis Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.7231644 0.6457316 1.120 0.26528 temp 0.0464240 0.0059918 7.748 5.94e-12 *** wind -0.2203843 0.0597744 -3.687 0.00036 *** rad 0.0025295 0.0005404 4.681 8.49e-06 *** I(wind^2) 0.0072233 0.0026292 2.747 0.00706 ** 69 Abb. 19: Modell-Plot zur Überprüfung der Modellvoraussetzungen und Anpassung. 70 11. ANCOVA – Analysis of Covariance Kombination aus Regression und Anova (s. Übersicht Kapitel 7). Die abhängige Variable ist kontinuierlich (z.B. Körpergewicht), wenigstens eine erklärende Variable ist kontinuierlich (z.B. Körpergröße) und mindestens eine erklärende Variable ist kategorisch (z.B. Geschlecht). Das maximale Modell (vor Modellvereinfachung) beinhaltet die Schätzung einer Steigung und eines Interzepts (Regression) für jede Stufe der kategorischen Variablen (Anova) Durch Modellvereinfachung gibt es folgenden Modellvarianten der Ancova: Aufgabe: Überlege, welchen Einfluss die Parameter in den obigen Modellvarianten jeweils haben. Regeln der Modellvereinfachung: Entscheidungen basieren auf die erklärende Kraft der Modelle: wenn ein einfacheres Modell nicht signifikant weniger der Variation in der Antwort erklärt, dann ist das einfachere Modell vorzuziehen. Mit dem Befehl anova wird die erklärende Kraft der Modelle verglichen: Wir behalten das kompliziertere Modell nur bei, wenn der p-Wert des Modellvergleichs weniger als 0.05 beträgt. 71 unser Anfangsbeispiel: Körpergewicht in Abhängigkeit von Größe und Geschlecht. d<-read.table("C:\\Kaarina\\rrr\\daten.txt", header = TRUE) attach(d) names(d) logweight=log(weight) Das maximale Modell mit Interaktion Größe und Geschlecht lautet: model1<-lm(logweight~size*sex) summary.aov(model1) size sex size:sex Residuals Df 1 1 1 46 Sum Sq 2.88642 0.10765 0.09580 0.63067 Mean Sq F value Pr(>F) 2.88642 210.5317 < 2.2e-16 *** 0.10765 7.8516 0.007406 ** 0.09580 6.9876 0.011185 * 0.01371 Zum Vergleich ein einfaches Modell ohne Interaktion von Größe und Geschlecht. model2<-lm(logweight~size+sex) summary.aov(model2) size sex Residuals Df Sum Sq Mean Sq F value Pr(>F) 1 2.88642 2.88642 186.7418 < 2e-16 *** 1 0.10765 0.10765 6.9644 0.01124 * 47 0.72647 0.01546 Vergleich beider zeigt: da ein signifkanter Unterschied in der Datenanpassung zwischen Modell1 (komplizierter) und Modell2 (einfacher) besteht, ist das kompliziertere Modell 1 beizubehalten: anova(model1,model2) Model 1: d$weight ~ size * sex Model 2: d$weight ~ size + sex Res.Df RSS Df Sum of Sq F Pr(>F) 1 46 0.63067 2 47 0.72647 -1 -0.09580 6.9876 0.01119 * 72 Wie sehen die Parameter des Modells1 aus? Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.447253 0.750546 -0.596 0.5542 size 0.038798 0.004446 8.727 2.57e-11 *** sexm 2.668649 1.078751 2.474 0.0171 * size:sexm -0.016077 0.006082 -2.643 0.0112 * Interpretation des Outputs: Wir haben insgesamt zwei Geraden berechnet und damit zwei Schnittpunkte mit der y-Achse und 2 Steigungen. Wie können wir die Werte aus dem Output entnehmen? Intercept: Schnittpunkt mit der y-Achse für die Körpergröße (size) = 0 für eine Faktorstufe unserer kategorischen Variable Geschlecht (sex). Doch welche Faktorstufe ist hier gemeint? Es ist die Faktorstufe, die im Alphabet als erstes kommt. Faktorstufen bei uns: m und f (Kontrolle mit der Eingabe levels(sex)). Es ist also die Faktorstufen für das Geschlecht weiblich (f). size: Es handelt sich um die Steigung einer der beiden Geraden. Auch hier ist wieder die Gerade gemeint, die an die Gewichtsdaten der Frauen anpasst, da f im Alphabet vor m steht. Damit ist die Gerade für die Frauen parametrisiert. Nun zu den Männern. sexm: Es handelt sich um den Unterschied zum Schnittpunkt der y-Achse der Frauen. Um den Schnittpunkt mit der y-Achse der Männer zu berechnen addieren wir die beiden Werte: -0.447253 + 2.668649 = 2.221396. size:sexm: Es handelt sich um den Unterschied in den Steigungen der beiden Kurven. Die Gerade der Männer steigt um den Betrag -0.016077 flacher an. Die Steigung berechnet sich folgendermaßen: 0.038798 -0.016077 = 0.022721 73 Zweites Beispiel: d<-read.table("C:\\Kaarina\\rrr\\beweidung.txt", header = TRUE) attach(d) names(d) plot(wurzel,ertrag) plot(beweidung,ertrag) Das überraschende und eher seltsames Ergebnis (beweidete Pflanzen haben einen höheren Ertrag) wird auch durch eine voreilige Anova bestätigt: voreilig<-aov(ertrag~beweidung) summary(voreilig) beweidung Residuals Df Sum Sq Mean Sq F value Pr(>F) 1 2910.4 2910.4 5.3086 0.02678 * 38 20833.4 548.2 Aber wir haben ja noch eine weitere erklärende Variable: die Anfängliche Wurzelgröße der Pflanzen. Das Maximale Modell mit Interaktion lautet: model1<-lm(ertrag~wurzel*beweidung) summary.aov(model1) Df Sum Sq Mean Sq F value Pr(>F) wurzel 1 16795.0 16795.0 359.9681 < 2.2e-16 *** beweidung 1 5264.4 5264.4 112.8316 1.209e-12 *** wurzel:beweidung 1 4.8 4.8 0.1031 0.75 Residuals 36 1679.6 46.7 Die Interaktion ist nicht signifikant und wir aus dem Modell entfernt. Ist das einfache Modell in der Erklärung der Daten signifikant schlechter? 74 anova(model1,model2) Model 1: Model 2: Res.Df 1 36 2 37 ertrag ~ wurzel * beweidung ertrag ~ wurzel + beweidung RSS Df Sum of Sq F Pr(>F) 1679.65 1684.46 -1 -4.81 0.1031 0.75 Eindeutig nein (0.75>>0.05). Wir können das einfache Modell ohne Interaktion beibehalten. Wie sehen die geschätzten Parameterwerte aus? summary.lm(model2) Estimate Std. Error t value Pr(>|t|) (Intercept) -127.829 9.664 -13.23 1.35e-15 *** wurzel 23.560 1.149 20.51 < 2e-16 *** beweidungunbeweidet 36.103 3.357 10.75 6.11e-13 *** Wir haben also die Parameter für 2 Geraden, die parallel zueinander verlaufen, da sich die Beweidung nicht auf den Anstieg des Ertrages auswirkt (Interaktion wurde entfernt). Der Schnittpunkt mit der y-Achse liegt für die beweideten Daten bei -127.8, für die unbeweideten Daten bei -91.7 (-127.829+36.103), da „beweidet“ im Alphabet vor „unbeweidet“ steht. Die gemeinsame Steigung der Geraden beträgt 23.6. ertr.split<-split(ertrag,beweidung) wurzel.split<-split(wurzel,beweidung) plot(wurzel,ertrag,type="n",ylab="Ertrag", xlab="Anfänglicher Wurzeldurchmesser") points(wurzel.split[[1]],ertr.split[[1]],pch=19) points(wurzel.split[[2]],ertr.split[[2]],pch=21) legend("topleft", c("beweidet","unbeweidet"),pch=c(19,21)) abline(-127.829,23.56) abline(-127.829+36.103,23.56) Schlussfolgerung: Die Beweidung führt also im Mittel zu einem geringeren Ertrag (vgl. Trugschluß s.o.). Sind weitere erklärende Variablen vorhanden, so sind diese in das Maximale Modell mit einzubeziehen und bei Nichtsignifikanz zu entfernen. Ansonsten kann es zu Fehlinterpretationen kommen. 75 12. Sammlung wichtiger Befehle Hilfe ? help() apropos() Community im Internet: require(Paketname) Zuordnung Name <- … Befehle auslösen 1. in der Konsole direkt: Befehlszeile eingeben und enter 2. im Dokument: markieren der Befehlszeile(n) und Ctrl + r Datenzugriff c(3,4,5,7) seq(3,30,2) read.table(“c:\\temp\\yvalues.txt”,header=T) numeric(1000) attach (dataframe) detach (dataframe) names (dataframe) dataframe dataframe [2:3,1:3] dataframe [Var1 > 3 & Var2 > 1, c(1,3,6)] dataframe [order(dataframe[,1]), 1:6] dataframe [rev(order(dataframe[,1])), 1:6] dataframe[2,1] alle Vergleiche vektor[2] vektor[-1] sort(vektor) [2] sample (Wert,k,replace=T) which(Var>10) = Position Aufräumen rm(Var1,Var2,Var3) rm(list=ls()) 76 Was läuft intern??? - Information und Steuerung attach (dataframe) detach (dataframe) names (dataframe) search() Die Datenbank wird an den Suchpfad von R angehängt. Das bedeutet, dass auf Objekte/Variablen direkt durch ihren Namen zugegriffen werden kann. Die Datenbank wird wieder aus dem Suchpfad von R entfernt. Zeigt alle Objekt-/Variablennamen, die durch attach angehängt sind. Gibt eine Liste aller angehängten Pakete/packages (geladene Programmeinheiten) und R Objekte (gewöhnlich die angehängten dataframes). ls () oder alternativ objects () Zeigt die Namen der geladenen und verwendbaren Objekte wie beispielsweise den Namen des dataframes. rm(list=ls()) rm(VarX,Var,Y,VarZ,…) Entfernt alle geladenen Objekte. Entfernt nur die gelisteten Objekte. str(df) Zeigt die Struktur eines Objekts, z.B. eines dataframes. Basics Untersuchung einer Variablen summary (dataframe) sinnvolle Zusammenfassung zum Datensatz im Einzelnen sum(Var) length(Var) sort(Var) min(Var) max(Var) range(Var) diff(range(Var)) Summe der Variablenwerte Anzahl der Variablenwerte Variablenwerte aufsteigend sortieren kleinster Variablenwert größter Variablenwert kleinster und größter Variablenwert Spannbreite des Range Mittelwerte und Co. mean(Var) var(Var) sd(Var) median(Var) length(Var)/sum(1/Var) oder 1/mean(1/Var) 77 arithmetischer Mittelwert Varianz Standardabweichung Median harmonisches Mittel Praktisches table(Var) length(table(Var)) pretty(Var, n=5) Zeile 1: Auflistung der Variablenwerte Zeile 2: zugehörige Anzahl der einzelnen Variablenwerte wie viele unterschiedliche Variablenwerte gibt es? für Variable werden hübsche Intervallschritte (Anzahl = n) gefunden Plots allgemeines: plot.new() oder frame() par(mfrow=c(2, 3)) neues Fenster öffnen Grafikfenster eingeteilt in 2 Grafen untereinander und 3 nebeneinander Scatterplot plot(x,y,…) type = „p“ „l“ „b“ main = „…“ sub = „…“ xlab, ylab = „…“ asp plottet x- und y-Werte für Punkte für Linien für beides … Haupttitel Untertitel des Plots Titel des x.-Achse und y-Achse Verhältnis der x/y-Achse weitere Grafen: hist(Var) boxplot(Var) interaction.plot qqnorm(Var,…) qqline(Var,…) + siehe auch apropos(„plot“) Histogramm Boxplot Quantil-Quantil-Plot Quantil-Quantil-Plot gegen die Normalverteilung Leeres Grafikfenster erzeugen: plot(c(0,10),c(0,30),type=”n”) spannt einen leeren Grafen auf von 0 bis 10 auf der x-Achse und 0 bis 30 auf der y-Achse 78 Aktives Grafikfenster füllen: points(x,y); points(c(…),c(…)) lines(x,y) lines(c(…),c(…)) abline(a,b) abline(h=c(…),v=c(…)) Linie mit a=Schnittpunkt y-Achse und b=Steigung h= y-Werte für horizontale Linien, v= x-Werte für vertikale Linien Argumente unter: par plot.default plot.window Parameter für Grafen Argumente für Scatterplots Rechnen sqrt(x) exp(x) log(x) modulo: gerade%%2=0 ungerade%%2=1 ceiling(x) der kleinste Integer größer als x Statistische Tests ctest = Classical Tests Name Fisher’s F test Student’s t-test Befehl Wilcoxon’s rank test wilcox.test Binominal-Test Pearson’s oder Spearman’s Rankkorrelation chi-square test prop.test cor.test Fisher’s exact test fisher.test 79 var.test t.test chisq.test wann Vergleich von 2 Varianzen Vergleich von 2 Proben mit normalverteilten Fehlern Vergleich von 2 Proben mit nichtnormalverteilten Fehlern Vergleich von 2 Proportionen Korrelation von 2 Variablen Test der Unabhängigkeit in Kontingenztabellen Test der Unabhängigkeit in Kontingenztabellen