Verteilungen Session 5 1 Verteilungen in R Das R System kennt viele Verteilungen, darunter praktisch alle Standardverteilungen, denen man üblicherweise in Einführungskursen in die Statistik begegnet. Die entsprechenden Befehle in R lauten Verteilung beta binomial Cauchy chi-squared exponential F gamma geometric hypergeometric log-normal logistic negative normal Poisson Student s t uniform Weibull Wilcoxon Funktionsname beta binom cauchy chisq exp f gamma geom hyper lnorm logis binomial norm pois t unif weibull wilcox Argument shape1, shape2, ncp size, prob location, scale df, ncp rate df1, df2, ncp shape, scale prob m, n, k meanlog, sdlog location, scale nbinom size, prob mean, sd lambda df, ncp min, max shape, scale m, n Die obigen Befehlsnamen werden mit verschiedenen Präfixa versehen und können dann verwendet werden, um verschiedene Aspekte der angegebenen Verteilungen abzubilden. Verwendet man zB ein p als Präfix, so erhält man die Verteilungsfunktion. Verwendet man die angegebenen Funktionsnamen mit einem q davor, so errechnet R den Wert der Quantilsfunktion (also der inversen Verteilungsfunktion). Mit dem Prefix r erhält man Realisierungen aus Pseudo-Zufallsvariablen, die der entsprechenden Verteilung folgen, mit dem Präfix d die Dichtefunktion. Die übergebenen Parameter entsprechen durchgängig den Parametern, die die üblicherweise verwendet werden um die jeweiligen Verteilungsfamilien zu parametrisieren. Der Parameter ncp kann dazu verwendet werden, nicht zentrierte Versionen von Verteilungen zu erhalten, die normalerweise nur in zentrierter Form Anwendung finden (zB die χ2 oder F Verteilungen). > (x <- pnorm(0.75, mean = 2, sd = 3)) [1] 0.3384611 > qnorm(x, mean = 2, sd = 3) [1] 0.75 > hazard <- function(t, df) { return -pt(t, df, log = T, lower.tail=F) } Die letzte Zeile im obigen Beispiel definiert die integrierte Hazardfuktion der t-Verteilung mit df Freiheitsgraden. Die dafür verwendeten Parameter sind log, welcher bestimmt, ob das Ergebnis logarthmiert 1 werden soll oder nicht und lower.tail welches bestimmt, ob P (X ≤ t) (im Falle von TRUE ) oder P (X > t) berechnet werden soll. 2 Grafische Analyse In der Statistik ist man oft mit der Aufgabe konfrontiert, ein Wahrscheinlichkeitsmodel für eine bestimmte Zufallsvariable zu finden. Im einfachsten Fall besteht dieses Model aus einer Verteilung, aus der die Daten ’gezogen’ werden. Die Verteilungen sind meist a priori nicht gegeben und auch wenn theoretische Resultate wie diverse Grenzwertsätze Hinweise geben, braucht es in der Praxis oft ein wenig Fingerspitzengefühl, um tatsächlich eine passende Verteilung zu finden. Die gängigen Hilfsmittel, um grundsätzlich eine passende Klasse von Verteilungen zu identifizieren sind hierbei üblicherweise Grafiken, die die Charakteristiken der Verteilung in der einen oder anderen Weise visualisieren. Es kommen hierbei - wie schon in der letzten Einheit besprochen - Histogramme, qq-Plots usw zum Einsatz. Im folgenden wird exemplarisch ein Anwendungsbeispiel durchgegangen in dem die Eruptionen eines Geysirs analysiert werden. Die Daten sind in R vorhanden und werden mit attach geladen. Das DataFrame faithful weist unter anderem eine Variable eruptions auf, die der Gegenstand der Untersuchung sein wird. > > > > > > attach(faithful) hist(eruptions, 20, freq lines(density(eruptions, lines(density(eruptions, lines(density(eruptions, rug(eruptions) = F) bw =0.01), col = ’’blue’’) bw =0.1), col = ’’red’’) bw =0.5), col = ’’green’’) Ergebnis der obigen Codesequenz ist ein Histogramm auf dem zusätzlich unterschiedliche Dichteschätzer mittels der Funktion density(. . . ) eingefügt wurden. Zu beachten ist hierbei der smoothness Parameter bw, der mit zunehmender Höhe einen immer glatteren Schätzer bewirkt. Der Befehl rug() fügt eine Leiste in das Diagramm ein, die die tatsächlichen Positionen der Datenpunkte ersichtlich macht. Die erstellte Grafik, die hier in Abbildung 1 zu sehen ist, zeigt, dass die Daten in ihrer Gesamtheit keiner der Standardverteilungen folgt. Insbesondere ist hier die Bimodalität auffällig. Eine weiterer interessanter Plot zeigt die empirische Verteilungsfunktion, die man mit der Funktion ecdf(. . . ) leicht abfragen kann. > plot(ecdf(eruptions), do.points=F, verticals=T) Um die Analyse im letzten Beispiel zu vereinfachen schränkt man sich auf den zweiten ’Gipfel’ der Verteilung ein und betrachtet nur die Datenpunkte größer drei. Die Hypothese ist, dass der gewählte ’Ausschnitt’ der Verteilung einer Normalverteilung entspricht. 2 0.6 0.3 0.0 Density Histogram of eruptions 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 eruptions 0.4 0.0 Fn(x) 0.8 ecdf(eruptions) 2 3 4 5 x Abbildung 1: Eine erste Analyse der Eruptionsdaten aus faithful > > > > > > > > > > par(mfrow=c(2,1)) par(pty=’’s’’) long <- eruptions[eruptions > 3] plot(ecdf(long), do.points=FALSE, verticals=TRUE) x <- seq(3, 5.4, 0.01) lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=2, lwd=2, col = ’’blue’’) qqnorm(long) qqline(long) Die beiden Grafiken in Abbildung 2 deuten darauf hin, dass die Daten in etwa einer Normalverteilung entsprechen könnten, jedoch das linke Ende der Verteilung etwas leichter ist als theoretischen Quantile 3 Normal Q−Q Plot 5.0 1.0 ecdf(long) 0.2 4.0 3.0 0.0 3.0 3.5 4.0 4.5 5.0 ● ● ● −2 x ● ● ● ● ● ●● ●● ● ● ● ● ●● 3.5 0.4 Fn(x) 0.6 Sample Quantiles 4.5 0.8 ● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● −1 0 1 2 Theoretical Quantiles Abbildung 2: Der zweite Gipfel von der Verteilung von eruptions gegen die Nortmalverteilungsfunktion bzw die entsprechenden Quantile der Normalverteilung. 3 Anpassungstests Ist man in der Analyse so weit, dass man eine ’Kanditatenverteilung’ gefunden hat, so kann man statistische Tests of goodness of fit durchführen. In unserem Fall wären das Tests auf die Normalverteilung. Zwei Tests die in R implementiert sind, sind zB der Shapiro-Wilk Test und der Kolmogorov-Smirnov Test. Beide Testverfahren haben die Normalität (bzw beim K-S Test die Übereinstimmung der beiden Verteilungen) als Nullhypothese. Ist diese gegeben der Daten unwahrscheinlich ist der p-Wert klein. > shapiro.test(long) Shapiro-Wilk normality data: long W = 0.9793, p-value = 0.01052 > ks.test(long, ’’pnorm’’, mean = mean(long), sd = sqrt(var(long))) One-sample Kolmogorov-Smirnov test data: long D = 0.0661, p-value = 0.4284 alternative hypothesis: two.sided Der Kolmogrov-Smirnov Test testet eigentlich die Übereinstimmung zweier beliebiger Verteilungen, durch die Übergabe des Parameters ”pnorm” kann die Funktion allerdings auch mit nur einem Sample verwendet werden (die Quantile der Normalverteilung werden in diesem Fall automatisch von R berechnet). Weitere Optionen ermöglichen es einzustellen, ob die Hypothese einseitig oder zweiseitig getestet werden soll. Die beiden Tests widersprechen sich insofern, als das der Shapiro-Wilk Test die Nullhypothese klar ablehnt, während der Kolmogorov-Smirnov Test mit einem p-Wert von 0.4284 diesen Schluss nicht zulässt. Es ist hierbei zu bemerken, dass es beim K-S Test theoretisch nicht korrekt ist, den Mittelwert und die 4 Varianz aus den Daten zu schätzen, gegen die man testet. Die Verteilung wird in diesem Fall zu stark an die empirische Verteilung angepasst und der Test verliert an Macht. Eine Abhilfe verschafft hier der sogenannte Lillifors-Test, der im wesentlichen den K-S-Test für den Normalverteilungsfall so adaptiert, dass der Mittelwert und die Varianz aus den Daten geschätzt werden können. > lillie.test(long) Lilliefors (Kolmogorov-Smirnov) normality test data: long D = 0.0661, p-value = 0.05957 Die Korrektur bewirkt hier, dass die Nullhypothese nun ca auf einem 6% Niveau abgelehnt werden kann. Die Daten können also in diesem Fall nicht als Normalverteilt angenommen werden. In einer weiterführenden Analyse würde man vielleicht die Anpassung einer t-Verteilung an die Daten ausprobieren. Dies wird hier aber nicht mehr weiter verfolgt. Andere Normalverteilungstests wären der Anderson-Darling-Test (ad.test(nortest)) oder der JargeBera-Test (jarque.bera.test(. . . )). 4 Maximum Likelihood Ist man durch diverse Tests und Grafiken zur Auffassung gelangt, dass der daten generierende Prozess einer bestimmten Verteilung folgt, so stellt sich die Frage, welche der Verteilungen in der entsprechenden Familie die Daten am besten repräsentiert. Die Parameter der Verteilung müssen also geschätzt werden. Ein gängiges und universal anwendbares Schätzverfahren ist die Maximum Likelihood Methode. In R ist die Maximum Likelihood Methode in Form der Funktion fitdistr(x, densfun, start, ...) (im Paket MASS, welches zuerst geladen werden muss) implementiert. Hierbei wird mit dem Parameter densfun die Verteilungsfamilie angegeben, für die die Parameter geschätzt werden sollen. Es stehen hierbei im Wesentlichen die Standardverteilungen für eindimensionale Zufallsvariablen zur Verfügung (Normalverteilung, t-Verteilung, Chauchy-Verteilung, Exponentialverteilung, χ2 -Verteilung, . . . ). Da es sich bei der Maximum Likelihood Schätzung um ein Optimierungsproblem handelt, besteht die Schwierigkeit im Finden eines passenden Schätzers hauptsächlich darin das Optimum der Likelihood Funktion zu finden. Um diese Aufgabe für den solver einfacher zu gestalten, können mittels des Parameters start Anfangswerte für die Optimierungsroutinen übergeben werden. Dies könnten zB Stichprobenmomente oder Schätzer, die aus der Momentenmethode gewonnen werden, sein. Ist das Model für das ein Maximum Likelihood Schätzer gefunden werden soll kein Standardverteilungsmodel - dies ist zB bei multidimensionalen Daten oder etwa Zeitreihenmodellen der Fall - dann kann die Methode mle(. . . ) verwendet werden. Der grundlegende Unterschied zu fitdistr besteht hierbei darin, dass die log likelihood Funktion als Argument übergeben werden muss. 5 Beispiele 1. Löse folgende Aufgabe mit R ohne die in Statistikeinführungen übliche Standardisierung der Normalverteilung durchzuführen und ohne auf die entsprechenden Testfunktionen in R zurückzugreifen: The results of IQ tests are known to be normally distributed. Suppose that in 2002, the distribution of IQ test scores for persons aged 18-35 years has a variance σ 2 = 225. A random sample of 9 persons take the IQ test. The sample mean score is 115. 5 (a) Calculate the 50%, 75%, 90% and 95% confidence interval estimates of the unknown population mean IQ score. (b) If it is known that the population mean IQ score is µ = 105, what proportion of samples of size 6 will result in sample mean values in the interval [135,150]? (c) Calculate the confidence intervals in (a) assuming the the Variance is not known and the sample estimate isσ̂ 2 = 225. 2. Zeichne die Verteilung und die Konfidenzintervalle in 1(a). Verwende die Funktion abline(. . . ), um die Grenzen der Konfidenzintervalle in verschiedenen Farben zu markieren. 3. In einer repräsentativen Umfrage für ein Land wurde das monatliche Einkommen von 240 Männern und 160 Frauen erhoben. Das durchschnittliche Einkommen der Männer lag in der Stichprobe bei 1650 EUR, jenes der Frauen bei 1280 EUR. Die Standardabweichung des Einkommen betrug 270 EUR bei den Männern und 480 EUR bei den Frauen. Führe mittels R einen Test auf Varianzhomogenität durch und zeichne die entsprechende Verteilung und den Annahmebereich analog zu Beispiel 2. 4. (a) Schreibe eine Funktion, die die mittelere Augenzahl aus n Würfen mit einem 6-seitigen Würfel zurückgibt. (b) Verwende die Funktion aus (a), um eine Stichprobe von 3, 10, 100, 1000 solchen Mittelwerten zu erlangen (n=10) und stelle die jeweiligen empirischen Verteilungen grafisch dar. (c) Finde eine Verteilung, die gemessene empirische Verteilung mit 1000 Punkten beschreibt, und belege Deine Wahl mit passenden Grafiken und Tests. 5. Lade das Datenfile Session5BSP5.R von der Homepage herunter. Teste die Daten auf Normalität und finde durch grafische Analyse der Daten ein passendes Verteilungsmodel. 6. Schätze die Parameter der Verteilung aus 5 mittels der Maximum Likelihood Methode. 6