Einführung in die Statistik

Werbung
Einführung in die Statistik
∗
Christian W. Hoffmann
Swiss Federal Research Institute WSL
2009-02-17, 17:40:51
∗
Dieses Manuskript implementiert eine Einführung in die grundlegende Statistik und ausgewählte Themen, unter
Benutzung der Programmiersprache "R".
Copyright (C) 2008 WSL Birmensdorf, Switzerland This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either
version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http:
//www.gnu.org/licenses/.
Inhaltsverzeichnis
1
Einleitung
1.1 Vorbemerkung zum Manuskript . . . . . . . . . . . . . . . . . . .
1.2 Ziele des Kurses . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Handwerkzeug . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 Notmassnahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5 Wie man sich Hilfe holt . . . . . . . . . . . . . . . . . . . . . . . .
1.6 R, eine Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.1 R ist ein Rechner . . . . . . . . . . . . . . . . . . . . . . .
1.6.2 Anweisungsfolgen . . . . . . . . . . . . . . . . . . . . . .
1.6.3 Wert-Zuweisung zu Variablen, Vektoren . . . . . . . . . . .
1.6.4 Erzeugen von Wiederholungen . . . . . . . . . . . . . . . .
1.6.5 Dataframes: Einlesen und Schreiben von Dateien . . . . . .
1.6.6 Vektoren, Matrizen, Arrays, Dataframes, cbind, rbind, apply
1.6.7 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.9 Strukturoperationen . . . . . . . . . . . . . . . . . . . . . .
1.6.10 Programmablauf . . . . . . . . . . . . . . . . . . . . . . .
1.6.11 Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7 Sortieren etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
1
2
2
3
3
4
4
7
8
9
11
12
15
15
17
20
2
Übersicht über die Statistik
23
3
Beschreibende Statistik
3.1 Zweck . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Methoden . . . . . . . . . . . . . . . . . . . . . . .
3.3 Kennzahlen für Stichproben . . . . . . . . . . . . .
3.4 Ein Datenbeispiel . . . . . . . . . . . . . . . . . . .
3.5 Programmierung: Modalwert, Mittelwert und Median
3.6 Variabilität, Varianz und Standardabweichung . . . .
.
.
.
.
.
.
25
25
25
26
27
32
34
.
.
.
.
.
.
.
.
.
39
39
39
40
40
41
42
42
44
47
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Etwas Theorie
4.1 Kombinatorik . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Elementare, zusammengesetzte und unabhängige Ereignisse
4.1.2 Bedingte Wahrscheinlichkeiten . . . . . . . . . . . . . . . .
4.2 Zufallsvariable, Erwartungswert und Varianz . . . . . . . . . . . .
4.2.1 Generatoren von Zufallszahlen . . . . . . . . . . . . . . . .
4.3 Verteilungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Bernoulli- und Binomialverteilung . . . . . . . . . . . . . .
4.3.2 Übersicht über die wichtigsten Verteilungen . . . . . . . . .
4.3.3 Veranschaulichung des zentralen Grenzwertsatzes . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
I
Inhaltsverzeichnis
4.4
4.5
5
4.3.4 Herleitung des zentralen Grenzwertsatzes . . . . . . . . . . . . . . . . . . . . . . . 53
Der Zusammenhang zwischen Normal-, t- und Cauchy-Verteilung . . . . . . . . . . . . . . 54
Zufallsexperimente mit Schiefe und Kurtosis . . . . . . . . . . . . . . . . . . . . . . . . . 57
Schliessende Statistik
5.1 Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Problembeschreibung . . . . . . . . . . . . . . . . . . .
5.3.2 Formulierung der zu prüfenden Hypothese . . . . . . .
5.3.3 Berechnung der Testgrösse . . . . . . . . . . . . . . . .
5.3.4 Interpretation der Testgrösse . . . . . . . . . . . . . . .
5.4 Unterschied zweier Mittelwerte aus unabhängigigen Stichproben
5.4.1 Der t-Test von Student . . . . . . . . . . . . . . . . . .
5.4.2 Wilcoxon’s Rangsummentest . . . . . . . . . . . . . . .
5.5 Kontingenztafeln, Chi-Quadrat-Test . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
61
61
63
63
63
64
65
65
65
66
67
Varianzanalyse, ANOVA
6.1 Zweck der Varianzanalyse . . . . . . . . . . . .
6.2 Einfache Varianzanalyse . . . . . . . . . . . . .
6.3 Bemerkungen zum T3-plot vs. Normal Q-Q Plots
6.4 Mehrfache Varianzanalyse . . . . . . . . . . . .
6.5 Multiples oder paarweises Testen . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
71
71
77
77
78
Korrelation, Regression
7.1 Zweck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 Regressionsanalyse . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1 Syntax of linear models in R . . . . . . . . . . . . . . . .
7.3.2 Beispiel für die einfache Regression und Residuenanalyse
7.4 Box-Cox-Exponenten-Transformationen . . . . . . . . . . . . . .
7.5 Reisigdaten zum Pipe-Modell . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
81
81
81
81
82
82
85
88
8
Multiple Regression
8.1 Einfacheres Baummodell, GAM und lineare Modelle . . . . . . . . . . . . . . . . . . . . .
8.2 Alternatives Vorgehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Automatische schrittweise Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
95
108
108
9
Bootstrap
109
9.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6
7
10 Anhang
10.1 Literatur . . . . . . . . . . . .
10.2 Dank . . . . . . . . . . . . . .
10.3 Hinweis für das Plotten . . . .
10.4 Informationsfluss . . . . . . .
10.5 Erzeugung der R-Kodedatei .
10.6 Interne Daten und Funktionen
II
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
113
113
113
114
115
115
115
Abbildungsverzeichnis
1.1
1.2
Baumhöhen gegen Umfang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Alle Variablen gegen alle (Scatterplot-Matrix) . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1
3.2
3.3
3.4
3.5
Baumhöhen in Davos . . . . . . . . . . . . . . . . . .
Histogramm der Baumhöhen in Davos . . . . . . . . .
Verschieden gelegene Klassengrenzen im Histogramm
Verschieden breite Klassen im Histogramm . . . . . .
Daten, die multiplikativ variieren . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
28
29
30
31
35
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
10000 zufällige binomialverteilte Werte . . . . . . . . . . . . . .
Realisierung von theoretischen Verteilungen . . . . . . . . . . . .
Summen von Ziehungen aus der Gleichverteilung . . . . . . . . .
Summen von Ziehungen aus der Betaverteilung . . . . . . . . . .
Summen von Ziehungen aus der Exponentialverteilung . . . . . .
Summen von Ziehungen aus der Cauchy-Verteilung . . . . . . . .
Summen von Ziehungen aus der Normalverteilung . . . . . . . .
t-, Normal-, und Cauchy-Verteilungen, eine Familie . . . . . . . .
Wahrscheinlichkeiten für die Schiefe von normalen Zufallszahlen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
47
48
49
50
51
52
56
58
5.1
5.2
Ungleiche Erfassungswahrscheinlichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Punktewolken und Boxplots der Baumhöhen . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.1
6.2
Baumhöhen der Standorte Alptal, Davos, Lägern . . . . . . . . . . . . . . . . . . . . . . . 75
Diagnostische Plots von Modell modh2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
Verschieden Approximationen an die Baumhohen . . . .
Bei der Box-Cox-Transformation verwendete Funktionen
Das Pipe-Modell . . . . . . . . . . . . . . . . . . . . .
Reisigdaten . . . . . . . . . . . . . . . . . . . . . . . .
Bestimmung von λ . . . . . . . . . . . . . . . . . . . .
Reisigtrockenmasse vs d and dc . . . . . . . . . . . . .
Diagnostics for model "lmdc" . . . . . . . . . . . . . .
Diagnostiken für Modell "lmd" . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
84
86
88
89
90
92
93
94
8.1
8.2
8.3
8.4
8.5
8.6
8.7
Ozondaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Grundmodell modelG, gam mit Glättung . . . . . . . . . . . . . . . . . . . . . .
Grundmodell modelT0 zum Aufspüren von Wechselwirkungen . . . . . . . . . .
Residualsen und getrimmte Residuen (mittlere 95%) des Baummodells modelT0.
Diagnostiken für Modell 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diagnostiken für Modell 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diagnostiken für Modell 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
96
97
98
99
104
106
107
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
III
Abbildungsverzeichnis
9.1
9.2
Schief verteilte Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Bootstrap-Vertrauensintervalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
10.1 Dateien und Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
IV
Tabellenverzeichnis
1.1
Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1
Skalen, Methoden, Themen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.1
Verteilungen und ihe Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2
Erklärungen zu den Verteilungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3
Vertrauensintervalle von t-Verteilungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1
Beispiele für Testgrössen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.2
Augenfarbe und Haarfarbe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3
Erwartete Häufigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.1
Einfache ANOVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.2
Anzahl Vergleiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
V
1 Einleitung
1.1 Vorbemerkung zum Manuskript
Dieses Manuskript ist in LATEX verfasst, das die Platzierung von Text und Abbildungen automatisch erledigt.
Daher kann es passieren, dass Abbildungen je nach Grösse erst auf der nächsten oder gar übernächsten Seite
zu finden sind. Oder dass Seiten fast leer sind. Die ideale Reihenfolge ist nur mit erheblicher Handarbeit zu
erzielen. Man verzeihe daher diese Unannehmlichkeit.
1.2 Ziele des Kurses
Dieser Kurs soll dazu dienen
• den Zweck des Themenkreises "Statistik" zu umreissen,
• die Methoden zu nennen, die angewandt werden,
• Beispiele zu erklären,
• Literatur zur Weiterführung zu zitieren.
1.3 Handwerkzeug
Für den Kurs wird die Programmiersprache S-Plus verwendet, und zwar in der Open-SourceImplementation R. S-Plus wird als kommerzielles Paket angeboten und kann auf dem Porta-Server der WSL
benutzt werden. R ist auf dem Netz unter r-project.org zu finden. Es läuft ebenfalls unter allen gängigen
Betriebssystemen (Windows, Mac, Unix, Linux) und wird von zahllosen Profi-Statistikern und Benutzern
laufend weiterentwickelt. Auswertungen können interaktiv oder durch sogenannte Skripte ausgeführt werden, diese wiederum entweder zeilenweise oder als Ganzes.
Zu diesem Kurs gibt es ein Begleitdokument Kurs.Liesmich.pdf, in dem erklärt wird, wie die
Quelltexte des Kurses benutzt werden können. Eine grafische Übersicht findet man in Abb. 10.1 on page
115.
Ich werde hier nur eine relativ knappe Einführung in Rgeben, da weitergehende Informationen in Fülle
vorhanden sind und auch aus den Musterbeispielen hervorgehen. Das Hauptzitat für R ist
> citation()
To cite R in publications use:
R Development Core Team (2008). R: A language and
environment for statistical computing. R Foundation
for Statistical Computing, Vienna, Austria. ISBN
3-900051-07-0, URL http://www.R-project.org.
A BibTeX entry for LaTeX users is
1
title = {R: A Language and Environment for Statistical Computing},
author = {{R Development Core Team}},
organization = {R Foundation for Statistical Computing},
1
1 Einleitung
address = {Vienna, Austria},
year = {2008},
note = {{ISBN} 3-900051-07-0},
url = {http://www.R-project.org},
}
We have invested a lot of time and effort in creating
R, please cite it when using it for data analysis. See
also 'citation("pkgname")' for citing R packages.
In den Beispielen wird die Eingabeaufforderung, der Prompt, von R mit > bezeichnet; er wird nicht
eingetippt.
1.4 Notmassnahmen
Wenn in der R-Konsole nichts mehr geht, kann man probieren, mit Ctrl-g die Rechnungen abzubrechen.
Man verlässt R mittels q(), antwortet auf die Frage nach der Speicherung mit yes und startet R neu.
1.5 Wie man sich Hilfe holt
Gute Anleitungen:
• http://www.statistik.wiso.uni-erlangen.de/download/Datenanalyse/
r-uebung/Reinf20B.pdf
• http://cran.r-project.org/doc/contrib/refcard.pdf
Vorsicht: Stücke von Links, die über Zeilenenden hinweggehen, müssen ohne die Zeilenenden in der Adresszeile des Browsers zusammengesetzt werden (ohne die unsichtbare Endzeilenmarkierung).
• Wenn die Hilfe im Browser fehlt: > help.start() ausführen, um das Hilfesystem erneut zu
starten.
• R> help(read.table) holt Hilfe über read.table,
• R> find(read.table) zeigt das Paket, in dem read.table aufgeführt ist,
• R> apropos(read.table) liefert weitere Information über read.table,
• R> args(read.table) zeigt die Argumente, die read.table als Funktion akzeptiert,
• R> read.table ohne (): zeigt die internen Anweisungen und evtl. in welchem Paket sich die
Funktion befindet,
• R> methods(read.table) und R> getAnywhere() zeigen, welche Methoden implementiert sind für read.table und wo sie angesiedelt sind. Funktionen können aber ünsichtbarßein.
• R> help(help) Hilfe über das Hilfesystem selbst, öffnet die "R Documentation" und erklärt,
wie man sich Hilfe holen kann über Funktionen der zur Zeit lokal installierten Pakete. In der Klammer
gibt man den Namen der gesuchten Funktion an; bei Namen, die keine Funktion benennen, z.B. for,
benötigt man doppelte Hochkommas: help("for").
• R> help.search("data input") hilft bei Dateneingabe.
2
1.6 R, eine Übersicht
• Google mit einem geeigneten Suchbegriff unter Einschluss von "r-project",
• refcard.pdf.
Flexibler ist man über den Einstieg im Browser, so wie er sich beim Start nach help.start() in (z.B.)
file:///C:/PROGRA~1/R/R-26~1.2/doc/html/index.html öffnet: "Statistical Data Analysis R", dann weiter über > Packages >. Die meistgebrauchten Pakete sind "base", "utils", "graphics",
"lattice", "stats". http://cran.r-project.org/ führt auf CRAN = Comprehensive R Archive
Network". Hier findet man:
• "An Introduction to R"
• "R Language Definition"
• "Writing R extensions"
• "R Data Import/Export"
• "R Installation and Administration"
• "R: A Language an Environment for Statistical Computing"
• "Frequently Asked Questions" (FAQs), "R News"
Es lohnt sehr, sich bei der R-Hilfeliste anzumelden: https://stat.ethz.ch/mailman/
listinfo/r-help, und die Frage "Would you like to receive list mail batched in a daily digest?" mit
Yes anzuklicken.
1.6 R, eine Übersicht
1.6.1 R ist ein Rechner
Direkt nach dem Prompt > kann man Berechnungen durchführen. Addition, Subtraktion, Multiplikation und
Division werden wie in anderen Sprachen durch +, -, *, / ausgedrückt; ^ bedeutet "hoch". Klammern
werden von innen nach aussen abgearbeitet. Man nennt das, was nach dem Prompt schreibt, eine Anweisung.
Eine Anweisung ist zum Beispiel die Formel
> (13 + 7)^(2/7)
[1] 2.35355
Es gibt eine grosse Menge von mathematischen Funktionen. Die wir am häufigsten verwenden werden, sind
log, der Logarithmus zur Basis e (= 2.71828), nicht zur Basis 10, exp (die Exponentialfunktion) und
sqrt (die Quadratwurzel):
> log(10)
[1] 2.30259
> exp(1)
[1] 2.71828
3
1 Einleitung
> 3^(-1)
[1] 0.333333
> 1/3
[1] 0.333333
> sqrt(2)
[1] 1.41421
Komplizierter:
3
2·
sin( π3 )
+ 3.5
geschrieben als
> 3/(2 * sin(pi/3) + 3.5)
[1] 0.573389
1.6.2 Anweisungsfolgen
Mehrere Anweisungen schreibt man untereinander in mehreren Zeilen mit je einer Anweisung pro Zeile:
> 13 + 7
[1] 20
> 2 * pi
[1] 6.28319
oder auf einer Zeile (dann nennt man das eine Anweisungfolge) mittels ; getrennt:
1+2+3+4+5; 6+5-4+3-2+1; 8/9;
Schliesst man eine Anweisungsfolge in geschweifte Klammern { } ein, so wird sie als Einheit behandelt. Informelles Beispiel (Autofahrer):
Wenn (Ampel = rot) dann { bleibe stehen; beobachte die Ampel, bis sie grün wird } oder wenn (Ampel =
grün) dann { fahre weiter; beobachte die Ampel, ob sie grün bleibt } sonst { sei vorsichtig; Bremsbereitschaft
}.
1.6.3 Wert-Zuweisung zu Variablen, Vektoren
Der Zuweisungsoperator in R heisst ’wird’ <- (zusammengesetzt aus ’weniger als’ < und ’minus’ direkt
neben einander), und nicht ’ist gleich’ =. Der Lesbarkeit wegen fügen wir je ein Leerzeichen vor und
nach <- ein. Die Eingabe der Variablen nach dem Prompt gibt ihren Wert aus, ebenso das Einklammern der
Zuweisung. In Funktionen muss man print(a) schreiben.
> a <- 12.5
> a
4
1.6 R, eine Übersicht
[1] 12.5
> (b <- pi)
[1] 3.14159
Die Variable a steht jetzt für den Wert 12.5, bis wir den Wert in einer weiteren Zuweisung ändern. Typen
von einfachen Objekten sind:
• Ganzzahlen: 0, 5, -99,
• reelle Zahlen:
• logische Werte:
2.5, 77.0, pi (vordefiniert) = π,
TRUE, FALSE, NA (nicht vorhandener Wert),
• nicht darstellbare Zahlen: Inf, -Inf, entstehen aus 1/0, -1/0,
• "Not a number": NaN, entsteht aus 0/0,
• Character Strings "A", ... "z", "Anton", "@", "", " ", also kein, ein oder mehrere
druckbare Zeichen eingeschlossen in " ".
• Strukturmanipulator: NULL.
Operationen dazu:
• Arithmetik: +, -, *, / , ^ bedeutet "hoch",
• Folgen: : "von bis",
• Logische Operationen: ! ("not"), < ("kleiner"), <= ("kleiner oder gleich"), ==, ("gleich"), >= ("grösser oder gleich"), > ("grösser"), != ("verschieden"), %in% ("ist Element von"), &, && ("und"), |, ||
("oder")
• paste("A","nt","o","n"): zusammensetzen, match(): Muster finden
• Abfragen: is.na(), is.nan(), is.NULL(), is.character(), is.numeric(), ...,
names(), class()
Die Stärke von R wird jedoch erst sichtbar, wenn man mit Vektoren arbeitet, d.h. Variablen, die mehrere gleichartige Objekte enthalten (als Spezialfall solche mit nur einem Wert), siehe 1.6.3. Am einfachsten schreibt man alle diese Werte nach einander, durch Kommas getrennt, und wandelt dies durch die
(Verkettungs-) Konkatenations-Funktion c() in einen (eindimensionalen) Vektor um:
> (a <- c(1, 3, 4, 7))
[1] 1 3 4 7
Hier tritt schon ein sehr hilfreiches Merkmal von R zu Tage:
Faustregel 1. Das Echo einer Variablen gibt an, wie die einzelnen Elemente einer Variablen anzusprechen
sind.
> a[3]
5
1 Einleitung
[1] 4
> a[c(1, 4)]
[1] 1 7
> a[-2]
[1] 1 4 7
> a[]
[1] 1 3 4 7
Die Zahlen in den eckigen Klammern (textslIndex, Mehrzahl Indizes) geben die Positionen der Elemente
an, mit 1 beginnend. Negative Indizes geben wegzulassende Elemente an. Leere Indizes bedeuten: Nimm
alle!
Wenn Folgen (regelmässige Muster) eingegeben werden sollen, z.B. die ganzen Zahlen von 1 bis 6, bietet
sich an:
> (a <- 1:6)
[1] 1 2 3 4 5 6
> length(a)
[1] 6
> (aa <- c(a, 3 * a))
[1]
1
2
3
4
5
6
3
6
9 12 15 18
8 10 12
4
8 12 16 20 24
> length(aa)
[1] 12
> a + aa
[1]
2
4
6
> (aa1 <- c(aa, 28, 100))
[1]
1
2
3
4
5
6
3
6
9
12
15
18
28 100
4
8
12
16
20
24
29 102
> length(aa1)
[1] 14
> opo <- options(warn = -1)
> a + aa1
[1]
6
2
4
6
8
10
12
1.6 R, eine Übersicht
> options(opo)
Setzt man warn=0, so erhält man die Warnung: In a + aa1 : Länge des längeren Objekts ist kein Vielfaches
der Länge der kürzeren Objektes. Das Ergebnis wird sehr wohl korrekt geliefert.
R versteht also den Operator : als ’eine Folge von Ganzzahlen zwischen’. Benötigt man eine Folge mit
nicht-ganzzahligen Schritten (z.B. 0.1), so benutzt man die Funktion seq. Für abnehmende Folgen setzt man
die Schrittweite negativ. Der Vektor b enthält sieben Werte von 0.6 abwärts bis 0:
> (b <- seq(0.6, 0, -0.1))
[1]
[6]
6.00000e-01 5.00000e-01
1.00000e-01 -1.11022e-16
4.00000e-01
3.00000e-01
2.00000e-01
Dass hier als letzter Wert nicht 0 erscheint, ist ein Thema der numerischen Mathematik. Prinzipiell schreibt
man hier:
> (b <- seq(6, 0, -1)/10)
[1] 0.6 0.5 0.4 0.3 0.2 0.1 0.0
Faustregel 2. So lange wie möglich mit Ganzzahlen rechnen!
1.6.4 Erzeugen von Wiederholungen
Beschreibung:
> help(rep)
Die Funktion rep wiederholt das erste Argument so oft, wie das zweite Argument abgibt. So erzeugt
> rep("A", 10)
[1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A"
zehn Kopien von "A". Das wiederholte Objekt kann eine Folge sein:
> rep(1:5, 3)
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
Das heisst, "Wiederhole die ganze Folge 1,2,3,4,5 dreimal". Wenn wir aber wollen, dass die Elemente
der Folge unmittelbar hinter einander wiederholt werden sollen (anstatt die ganze Folge), dann muss das
zweite Argument von rep ein Vektor sein, gleich lang wie das erste Argument. Also, wir wollen dreimal 1,
dreimal 2, usw. bis dreimal 5:
> rep(1:5, rep(3, 5))
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Noch komplizierter wird es, wenn jedes Element der ersten Folge unterschiedlich oft wiederholt werden
soll, z.B.
> rep(1:5, 1:5)
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
> rep(c(7, 4, 5, 1), c(1, 2, 3, 5))
[1] 7 4 4 5 5 5 1 1 1 1 1
Hier zeigt sich schon in ’einfachen’ Funktionen die starke Ausdruckskraft von R.
7
1 Einleitung
1.6.5 Dataframes: Einlesen und Schreiben von Dateien
Bei Praxisanwendungen liest man typischerweise Daten nach R ein, die man vorher in z.B. Excel erzeugt
und geprüft hat. Natürlich würde es keinen Sinn machen, hunderte oder Tausende von Daten über die Tastatur (mit der Funktion scan) einzutippen. Die Funktion in RR, die Daten einliest, heisst read.table, vgl.
Hilfe (1.5).
> help(read.table)
Sie wird im einfachsten Fall so verwendet (Excel-Tabelle, tab-delimited):
> timb <- read.table("./Data/timber.txt", header = TRUE)
Punkte zur Beachtung
• Wichtig: Im Pfad verdoppelte \ angeben für Windows: \\, / für Mac.
• Die Datei muss am angegebenen Ort existieren.
• header=TRUE: Die erste Zeile enthält den/die Namen der Spalten-Variable(n), die keine Leerzeichen enthalten dürfen. Am einfachsten ersetzt man das Leerzeichen durch einen Punkt ..
• Die Spalten sind Vektoren, die alle die gleiche Länge haben müssen, aber von verschiedenem Typ
sein dürfen.
• Fehlende Werte dürfen nicht durch Leerzeichen dargestellt werden, man benutze NA. Will man explizit
einen String "NA" als fehlenden Wert verwenden, so benutze man NA_character_.
> class(timb)
[1] "data.frame"
> names(timb)
[1] "volume" "girth"
> dim(timb)
[1] 31
3
> timb[1:5, ]
1
2
3
4
5
volume
0.7458
0.7458
0.7386
1.1875
1.3613
girth height
66.23
21.0
68.62
19.5
70.22
18.9
83.79
21.6
85.38
24.3
> sum(is.na(timb))
[1] 0
8
"height"
1.6 R, eine Übersicht
timb ist also von der Klasse (dem Typ) "data.frame", zweidimensional und enthält keine fehlenden Werte.
Elemente von timb werden mit den eckigen Klammern [ , ] angesprochen, leere Zeilen oder Spalten
bedeuten wieder alle. Die Spalten können ebenfalls über ihre Namen mittels des $-Operators angesprochen
werden. Wir zeigen auch logische Bedingungen, um Zeilen auszuwählen:
>
>
>
>
>
>
>
>
>
>
>
+
timb[]
timb[1:5, ]
timb[, 1:2]
timb[, -c(1:2)]
timb$height > 20
(Lg <- timb$girth > 100)
timb[timb$height > 20, ]
timb[Lg, ]
timb[timb$height > 20 | Lg, ]
timb[timb$height > 20 & Lg, ]
timb1 <- cbind(timb, volComp = pi/4 * timb$girth^2 *
timb$height/3)
Schreiben der neuen Daten in eine Datei:
> write.table(timb1, file = "timb1.dat", row.names = TRUE)
> list.files()
1.6.6 Vektoren, Matrizen, Arrays, Dataframes, cbind, rbind, apply
Rekapitulation: (Details in der Hilfe)
• Vektoren bestehen aus mehreren Elemente gleichen Typs,
• Matrizen sind rechteckige Anordnungen von Elementen gleichen Typs,
• Arrays sind Matrizen mit mehr als zwei Dimensionen,
• Dataframes bestehen aus gleich langen Vektoren mit Elementen evtl. verschiedenen Typs. Sie sind
die geeigneten Gefässe für Daten, Zeilen entsprechen Beobachtungen, die Kolonnen sind meist mit
den (eindeutigen) Variablennamen benannt. Fehlende Werte sollten durch NA gekennzeichnet sein,
Vektoren gleicher Länge lassen sich spaltenweise mit cbind oder zeilenweise mit rbind "zusammenbinden". Ebenso lassen sich Vektoren, Matrizen und Dataframes kombinieren, wenn sie konform, engl.
comformant sind, das heisst wenn ihre entsprechenden Dimensionen gleiche Länge haben:
> cbind(1:5, 6:2)
[1,]
[2,]
[3,]
[4,]
[5,]
[,1] [,2]
1
6
2
5
3
4
4
3
5
2
9
1 Einleitung
Tabelle 1.1: Datenstrukturen
Vektor
Matrix
Array
Dataframe
Erzeugung
Abfrage
Beispiele
length()
Ansprache von
Untereinheiten
[]
vector(mode = "logical", length = 0)
mode kann sein: "logical", "integer",
"numeric", "complex", "character" und
"raw"
explizit: c(0,4,-7)
matrix(data = NA, nrow = 1, ncol = 1,
byrow = FALSE, dimnames = NULL)
array(data = NA, dim = length(data),
dimnames = NULL)
read.table(,header=TRUE,)
dim()
[,]
[2,5]
dim()
[„]
[1,7,3]
dim(), names()
$, [,]
$x, [,4]
[7]
> rbind(1:5, 6:2)
[,1] [,2] [,3] [,4] [,5]
[1,]
1
2
3
4
5
[2,]
6
5
4
3
2
> rbind(LETTERS[4:9], 4:9)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] "D" "E" "F" "G" "H" "I"
[2,] "4" "5" "6" "7" "8" "9"
Zahlen werden beim Beispiel mit rbind in Character, den Typ der ersten Zeile, umgewandelt. Bei Dataframes sollten natürlich auch neue Kolonnen durch dimnames mit Namen versehen werden.
Die Funktion apply ist sehr praktisch, in Matrizen zeilenweise oder spaltenweise Operationen zu automatisieren. Es lohnt sich, in ?apply die Beispiele anzusehen und zu verstehen.
> x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
> dimnames(x)[[1]] <- letters[1:8]
> apply(x, 2, mean, trim = 0.2)
x1 x2
3 3
> col.sums <- apply(x, 2, sum)
> row.sums <- apply(x, 1, sum)
> rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))
a
b
c
d
10
x1 x2 Rtot
3 4
7
3 3
6
3 2
5
3 1
4
1.6 R, eine Übersicht
e
3 2
f
3 3
g
3 4
h
3 5
Ctot 24 24
5
6
7
8
48
Um bei Matrizen Zeilen und Spalten zu vertauschen, verwendet man t().
1.6.7 Listen
Listen sind die allgemeinsten Datenstrukturen. Ihre Elemente können selbst wieder beliebig strukturiert und
von beliebigem Typ sein, verboten sind zirkuläre Strukturen. Mit anderen Worten: Eine Liste ist eine Verkettung von Elementen, die Zahlen, Variable oder selbst wieder Listen sein können. Wegen ihrer Flexibilität
sind sie nicht ganz einfach zu verstehen. Aber es gilt wieder Faustregel 1.
Liste: listname <- list(Kompon1 = Wert1, Kompon2 = Wert2, Wert3, .... )
Beispiel:
> (Li <- list(k1 = 3, k2 = NULL, c(5, 1, 0), g = "string7"))
$k1
[1] 3
$k2
NULL
[[3]]
[1] 5 1 0
$g
[1] "string7"
> str(Li)
List of 4
$ k1: num 3
$ k2: NULL
$
: num [1:3] 5 1 0
$ g : chr "string7"
Die Abfragefunktion str gibt eine etwas handlichere Darstellung, mit den Namen (sofern vorhanden), Typen der Listenelemente und den (ersten paar) Werten in jeder Zeile. Benannte Elemente können über $
angesprochen werden, unbenannte nur über die Position mittels doppelter eckiger Klammern [[]].
> Li$k1
[1] 3
> Li[[2]]
11
1 Einleitung
NULL
> Li[[3]]
[1] 5 1 0
> Li$g
[1] "string7"
> Li$k2 <- list(55, pi, "Q")
> Li
$k1
[1] 3
$k2
$k2[[1]]
[1] 55
$k2[[2]]
[1] 3.14159
$k2[[3]]
[1] "Q"
[[3]]
[1] 5 1 0
$g
[1] "string7"
> Li[[3]] <- NULL
1.6.8 Funktionen
Funktionen sind sehr mächtige Konstrukte in jeder Programmiersprache. Sie kapseln und automatisieren Rechenabläufe, die immer wieder auf dieselbe Art ablaufen sollen, aber auf unterschiedlich benannte Objekte
angewendet werden sollen, den Argumenten oder Eingabe-Parametern. Wenn eine Funktion ihre Berechnung beendet hat, dann gibt sie ein Ergebnis zurück, das auch eine Liste oder NULL sein kann. Alle internen
Variablen, die für die Berechnungen vorübergehend benötigt wurden, werden zerstört.
Ein Ergebnis NULL oder invisible() kann durchaus sinnvoll sein. Besteht der Hauptzweck einer
Funktion in einem Nebeneffekt, nämlich darin, einen Plot zu zeichnen, Zahlen auszudrucken oder eine
Datei zu erzeugen, so liegt ein rechnerisches Ergebnis im eigentlichen Sinn nicht vor.
Man unterscheidet zwischen der Definition und dem Aufruf einer Funktion.
12
1.6 R, eine Übersicht
Definition:
fctname <- function( Argumentenlliste,. . . ) {
Anweisungsfolge(n)
return( Ausdruck ), oder
return( Liste), oder
return( NULL), oder
invisible()
}
Die Liste der Argumente oder Eingabeparameter kann leer sein oder aus einem oder mehreren Argumenten
bestehen. Man unterscheidet zwei Arten von Argumenten, solche, die aus einem Namen allein bestehen,
und solche, die aus einem Paar Name=Wert bestehen. Erstere sollen vor denen der zweiten Sorte stehen.
Die drei Punkte ’. . .’ stehen für Parameter, die in der Form Name=Wert an intern verwendete Funktionen
weitergereicht werden sollen.
Aufruf:
fctname( arg1, arg2, ... )
varname <- fctname( arg1, arg2=blabla, ... )
Im Aufruf müssen die Ausdrücke, die für Argumente eingesetzt werden sollen, genau in derselben
Reihenfolge wie die Argumente in in der Definition aufgeführt werden. Argumente, die als Name= definiert sind, können dann auch ohne Name= verwendet werden. Name=-Argumente dürfen in der Form
Name=Wert in beliebiger Reihenfolge am Ende der Liste stehen. Sie dürfen sogar fehlen, wenn der in der
Definition definierte Vorgabewert Wert von Name=Wert verwendet werden soll.
Dieser Mechanismus erlaubt es, für sehr universell einsetzbare Funktionen einerseits dem anspruchslosen
Benutzer ein knappes Standard-Interface anzubieten, andererseits jedoch dem Fortgeschrittenen sehr viele
zusätzliche Einflussmöglichkeiten zu geben, ohne den Anfänger damit zu belasten.
Beispiel:
>
+
+
+
+
>
+
+
+
+
>
+
+
>
meanstd.1 <- function(vec) {
mm <- mean(vec)
std <- sd(vec)
return(list(m = mm, s = std))
}
meanstd.2 <- function(vec) {
m <- mean(vec)
s <- sd(vec)
return(list(m = m, s = s))
}
meanstd <- function(vec) {
return(list(m = mean(vec), s = sd(vec)))
}
meanstd(rnorm(1000))
$m
[1] -0.0133083
$s
[1] 0.951926
13
1 Einleitung
Eine Funktion mit Vorgabewert:
> test.1 <- function(n, m, dec = 4) {
+
for (ii in 1:n) {
+
erg <- unlist(meanstd(rnorm(m)))
+
print(format(erg, digits = dec))
+
}
+
return(invisible())
+ }
> test.1(3, 10)
m
s
"-0.5444" " 1.2750"
m
s
"-0.1454" " 0.5713"
m
s
"-0.1448" " 0.8816"
> (t2 <- test.1(3, 10, dec = 2))
m
s
"-0.53" " 0.92"
m
s
"0.78" "0.93"
m
s
"0.24" "1.13"
NULL
return(invisible()) erzwingt NULL als Ausgabewert, sonst wird das zuletzt berechnete Ergebnis
erg geliefert.
Eine Funktion mit einer Liste als Resultat:
> test.2 <- function(n, m) {
+
ergm <- ergs <- vector(mode = "numeric", length = n)
+
for (ii in 1:n) {
+
ms <- meanstd(rnorm(m))
+
ergm[ii] <- ms$m
+
ergs[ii] <- ms$s
+
}
+
return(list(m = ergm, s = ergs))
+ }
> (t2 <- test.2(3, 500))
$m
[1]
0.0111057 -0.1098026 -0.0402297
$s
[1] 0.997059 0.993017 0.959721
> str(t2)
14
1.6 R, eine Übersicht
List of 2
$ m: num [1:3] 0.0111 -0.1098 -0.0402
$ s: num [1:3] 0.997 0.993 0.96
1.6.9 Strukturoperationen
In R sind Operationen vorhanden, um Sprachelemente zu manipulieren. In vielen der bereitgestellten Funktionen werden sie angewendet, zum Beispiel in den Routinen für Plotten oder in der Regressionsrechnung.
Als Beispiel zeigen wir, wie man Textausdrücke schrittweise auswerten kann:
> 3/(2 * sin(pi/3) + 3.5)
[1] 0.573389
> z <- "3 / (2*sin(pi/3) + 3.5)"
> (yp <- parse(text = z))
expression(3/(2 * sin(pi/3) + 3.5))
> eval(yp)
[1] 0.573389
Dabei bedeuten: Parsen = syntaktisch auswerten, expression = Ausdruck in interner Darstellung, eval =
Auswertung zu einer ’einfacheren’ Form, hat meist eine Zahl als Resultat.
1.6.10 Programmablauf
Will man den Programmablauf vom konkreten Wert von Variablen abhängig machen und Teile systematisch
wiederholen, so benötigt man Entscheidungen und Schleifen. Man sollte unbedingt die Hilfe konsultieren,
z.B.:
> help("for")
Strukturelemente, die vorkommen müssen, programmabhängige Elemente, die selbst gewählt werden.
• if ( Bedingung ) { Anweisungsfolge }
• if ( Bedingung ) { Anweisungsfolge } else { alternative Anweisungsfolge }
• for ( Variable in Folge ) { Anweisungsfolge }
• while ( Bedingung ) { Anweisungsfolge }
• repeat { Anweisungsfolge if (Bedingung) break; Anweisungsfolge }
Beispiele:
15
1 Einleitung
>
>
+
+
>
+
+
+
+
x <- 0
if (x < 0) {
print("x kleiner 0")
}
if (x < 0) {
print("x kleiner als 0")
} else {
print("x groesser als 0")
}
[1] "x groesser als 0"
> if (x < 0) {
+
print("x kleiner als 0")
+ } else {
+
if (x == 0) {
+
print("x gleich 0")
+
}
+
else {
+
print("x groesser als 0")
+
}
+ }
[1] "x gleich 0"
> for (i in 1:3) {
+
print(i^2)
+ }
[1] 1
[1] 4
[1] 9
> k <- 0
> while (k < 10) {
+
print(k^2)
+
k <- k + 4
+ }
[1] 0
[1] 16
[1] 64
> m <- 25
> repeat {
+
print(m)
+
if (m < 6)
+
break
+
m <- m - 9
+ }
16
1.6 R, eine Übersicht
[1]
[1]
[1]
[1]
25
16
7
-2
1.6.11 Plots
Baumhöhen gegen Umfang, Abb.1.1:
26
> plot(timb$girth, timb$height, xlab = "Umfang", xlim = c(40,
+
170), ylim = c(16, 27))
●
●
●
●
●
●
24
●
●
●
●
●
●
●
22
●
●
●
●
●
●
●
20
timb$height
●
●
●● ●
●
●
●
16
18
●
40
60
80
100
120
140
160
Umfang
Abbildung 1.1: Baumhöhen gegen Umfang
Eine meist bessere Übersicht gibt die Darstellung "Alle Variablen gegen alle" in der Scatterplot-Matrix,
Abb.1.2. Sie stellt auf kleinstem Raum die wesentlichen Eigenschaften der Daten dar:
• Histogramme und (abgekürzte) Namen der Variablen in der Diagonalen,
17
1 Einleitung
• die zweidimensionalen Punktewolken und geglättete Kurven in beiden Richtungen (y gegen x, x gegen
y) in der unteren Hälfte,
• die paarweisen Korrelationskoeffizienten in der oberen Hälfte.
Das Histogramm zeigt in x-Richtung (horizontal) die Werte einer Variablen, die y-Richtung (vertikal) die
Anzahl beobachteter Werte innerhalb (der x-Grenzen) der Balken, siehe Kap. 3. Die Namen der Variablen
sind aus Platzgründen stark verkürzt.
Ein nicht-diagonaler Eintrag bezieht sich auf diejenigen Variablen, die in derselben Zeile und derselben
Spalte in der Diagonalen stehen. So gehört der Korrelationskoeffizient in der 2. Zeile und 3. Spalte zur
Punktewolke in der 3. Zeile und 2. Spalte, die die 3. Variable (height, vertikal) gegen die 2. Variable
(girth, horizontal) zeigt. Zum Korrelationskoeffizient siehe Kap. 7.
Die geglätteten Kurven zeigen den Trend der Daten. Eine fast horizontale Kurve (rot) bedeutet, dass die
y-Werte praktisch nicht von den x-Werten abhängen, und eine fast vertikale Kurve (blau), dass die x-Werte
praktisch nicht von den y-Werten abhängen. Dies entspricht einem kleinen Korrelationskoeffizienten nahe
Null, die Punktewolke ist praktisch kreisrund oder liegt horizontal. Je besser die beiden geglätteten Kurven
übereinstimmen, desto näher liegt der Korrelationskoeffizient bei ±1 und die Punktewolke ist sehr schlank.
Der Aufruf für die Scatterplotmatrix lautet SplomT(timb1,cex.diag=0.5) benötigt das Paket
cwhmisc.
18
1.6 R, eine Übersicht
timb1
volm
0.97
grth
0.6
0.99
0.52
0.98
hght
0.6
vlCm
2008−04−15, 00:11:02
Abbildung 1.2: Alle Variablen gegen alle (Scatterplot-Matrix)
19
1 Einleitung
1.7 Sortieren etc.
Die Funktion sort.list liefert die Indizes des kleinsten, nächst grösseren, . . . Wertes in einem Vektor. Mit der
so gewonnenen Reihenfolge lassen sich ganze Matrizen oder Dataframes nach einer Spalte sortieren:
> timb$volume
[1]
[10]
[19]
[28]
0.7458
1.4410
1.8610
4.2216
0.7458
1.7524
1.8030
3.7292
0.7386
1.5206
2.4982
3.6930
1.1875 1.3613 1.4265 1.1296 1.3179 1.6365
1.5496 1.5424 1.3831 1.6075 2.4475 1.9841
2.2954 2.6285 2.7734 3.0847 4.0116 4.0333
5.5757
> (ind <- sort.list(timb$volume))
[1] 3 1 2 7 4 8 5 15 6 10 12 14 13 16
[23] 23 24 25 30 29 26 27 28 31
9 11 20 19 18 22 17 21
> sort(timb$volume)
[1]
[10]
[19]
[28]
0.7386
1.4410
1.9841
4.0116
0.7458
1.5206
2.2954
4.0333
0.7458
1.5424
2.4475
4.2216
1.1296 1.1875 1.3179 1.3613 1.3831 1.4265
1.5496 1.6075 1.6365 1.7524 1.8030 1.8610
2.4982 2.6285 2.7734 3.0847 3.6930 3.7292
5.5757
0.7458
1.5424
2.4475
4.2216
1.1296 1.1875 1.3179 1.3613 1.3831 1.4265
1.5496 1.6075 1.6365 1.7524 1.8030 1.8610
2.4982 2.6285 2.7734 3.0847 3.6930 3.7292
5.5757
> timb$volume[ind]
[1]
[10]
[19]
[28]
0.7386
1.4410
1.9841
4.0116
0.7458
1.5206
2.2954
4.0333
> timb[ind, ][1:12, ]
3
1
2
7
4
8
5
15
6
10
12
14
volume
0.7386
0.7458
0.7458
1.1296
1.1875
1.3179
1.3613
1.3831
1.4265
1.4410
1.5206
1.5424
girth height
70.22
18.9
66.23
21.0
68.62
19.5
87.78
19.8
83.79
21.6
87.78
22.5
85.38
24.3
95.76
22.5
86.18
24.9
89.37
22.5
90.97
22.8
93.36
20.7
Die Umfänge der 5 höchsten Bäume bekommt man mit:
> timb$girth[sort.list(timb$height, decreasing = TRUE)][1:5]
20
1.7 Sortieren etc.
[1] 164.38 106.13 102.94
86.18 139.64
> timb[sort.list(timb$height, decreasing = TRUE), ][1:5,
+
]
31
18
17
6
27
volume
5.5757
1.9841
2.4475
1.4265
4.0333
girth height
164.38
26.1
106.13
25.8
102.94
25.5
86.18
24.9
139.64
24.6
21
1 Einleitung
22
2 Übersicht über die Statistik
Dieser Kurs soll eine einführende Auswahl in einige grundlegende Problemkreise der Statistik geben, siehe
dazu das Inhaltsverzeichnis und Tab. 2.1. Er wird daher nicht erschöpfend sein. Er speist sich aus meinen
Erfahrungen von 30 Jahren an der WSL und ist entsprechend einseitig. Er lehnt sich zum Teil an die unten
aufgeführte Literatur an.
Der schwierigste Teil der Statistik ist es, die richtige Methode zu wählen. Diese hängt von der Art
der Daten und der Fragestellung ab, die man beantworten will. Je mehr Erfahrung man sammelt, um so
sicherer und schneller findet man zum Ziel.
Der Schlüssel ist, die Art der zu erklärenden Variablen (Response, Zielgrösse) verstehen und die erklärenden Variablen (Einflussgrössen) richtig angeben zu können.
Eine kontinuierliche oder metrische Variable nimmt reelle Werte an, z.B. Höhe, Temperatur. Sie wird
entweder verhältnisskalliert genannt, wenn sie einen absoluten Nullpunkt hat wie Temperaturen gemessen in K (Kelvin) oder Länge, Gewicht, oder intervallskaliert, wenn sie einen willkürlichen Nullpunkt hat
wie Temperaturen gemessen in ◦ C oder ◦ F . Eine (nicht-kontinuierliche) diskrete oder qualitative Variable kann entweder geordnete Werte haben wie Ränge, oder ungeordnete oder nominale Werte. In beiden
Fällen wird solch eine Variable Faktor oder kategoriell genannt, und ihre Werte werden Stufen genannt:
Postleitzahlen sind ungeordnet, Schulnoten sind geordnet, ebenso wie die Farben des Farbkreises mit seinen
sieben Stufen "rot", "orange", "gelb", "grün", "blau", "indigo", "violett". Diese Unterscheidung widerspiegelt den abnehmenden Gehalt an Information und abnehmende Empfindlichkeit
23
2 Übersicht über die Statistik
Tabelle 2.1: Skalen, Methoden, Themen, Kapitel des Vorkommens
1.
2.
(a)
Die erklärenden Variablen
(EV)
alle EV kontinuierlich
alle EV kategoriell
die EV sind
kontinuierlich und kategoriell
Die Zielvariablen (ZV)
kontinuierlich
(b)
(c)
Verhältnisse
Anzahlen
(d)
3.
(a)
(b)
(c)
(d)
(e)
(f)
Binär
Allgemeinere Themen
beobachtend
manipulativ
zeitlich
räumlich
Ausfallzeiten
Hypothesentests, dynamisch
Robuste Statistics
(a)
(b)
(c)
(g)
24
Methoden (Kapitel)
Regression (7)
Varianzanalyse ’Anova’ (6), Kontingenztafeln (5.5)
Kovariananalyse (Ancova)
Einfache, mehrfachen verallgemeinerte Lineare Regression ’lm’,
’glm’ (7, 8), Anova (6), Ancova, Verallgemeinerte Additive Modelle ’gam’ (8.1), Hauptkomponenten-, Faktor-, Cluster-, Diskriminanzanalyse, Baumartige Modelle (Tree models) (8.1)
Logistische Regression
Log-lineare Modelle ’glm’, Kontingenztafeln (5.5), Verlaufskurven
Binäre logistische Analyse (glm+binomial)
Erhebungen
Versuchsplanung
Zeitreihen
Geostatistik
Überlebensanalyse
Bootstrap (9), Simulation
Verfahren weniger empfindlich auf Ausreisser zu machen
3 Beschreibende Statistik
3.1 Zweck
Die beschreibende Statistik bietet den geeigneten Einstieg in die Statistik. Zahlreiche grafische und rechnerische Möglichkeiten erlauben es uns, einen Einblick in die Struktur und Eigenheiten von Daten zu gewinnen.
Ich möchte der verbreiteten Meinung entgegen arbeiten, dass mit Mittelwert, Standardabweichung und tTest das Wesentliche erreicht sei. Durch die Möglichkeiten der Programmierung in R lassen sich diese
grundlegenden Begriffe jedoch auf experimentell-anschauliche Art einführen.
Die Beurteilung von Daten beginnt mit Grafiken. Punktewolken zeigen oft sehr rasch, ob
• die Daten erkennbare Muster bilden,
• Klumpungen aufweisen,
• zusammenhängend sind,
• der Übergang in den Randgebieten allmählich oder abrupt verläuft.
• die Daten einfach beschreibbare Zusammenhänge zulassen,
• sich systematische und zufällige Effekte erkennen lassen.
3.2 Methoden
Es sollen möglichst viele Eigenschaften der Daten gleichzeitig und unverfälscht dargestellt werden.
• Stamm-und-Blatt-Diagramme (Stem-and-Leaf)
• Streudiagramme (Scatterplots)
• Histogramme, Balken- und Kuchendiagramme
• Kistendiagramme (Box-Plots)
• Summenhäufigkeits- und Quantil-Quantil-Diagramme
• Kontingenztafeln
• kompliziertere grafische Methoden
25
3 Beschreibende Statistik
3.3 Kennzahlen für Stichproben
Die Darstellungen können durch Kennzahlen ergänzt werden, die sich (oft) leicht interpretieren lassen. Wir
zählen sie hier auf:
Masszahl des Stichprobenumfangs:
• N := Anzahl gezogene Individuen
Stichprobenwerte:
• xi , i = 1..N
Masszahlen der Lage:
• Minimalwert min, Maximalwert max,
• Modalwert modus := am häufigsten vorkommender Wert,
P
• Mittelwert x̄ := α̂1 := N1 N
i=1 xi ,
• Quantile: Das p%-Quantil xp ist in der Reihe der aufsteigend sortierten Werte derjenige Wert mit der
Nummer p · N . Ungefähr p % der Werte liegen unterhalb, (100-p)% liegen oberhalb,
• Median med := x0.5 := 50%-Quantil,
• unteres, oberes Quartil: x0.25 , x0.75 , 25%-, bzw. 75%-Quantil
Masszahlen der Streuung:
Definition 1. Residuum oder Abweichung := xi − x̄
• Spannweite (= Wertebereich, Range) r := max − min,
P
• durchschnittliche absolute Abweichung (mad) := N1 N
i=1 |xi − x̄|,
• Varianz var := α̂2 := s2 := N 1−1
√
• Standardabweichung s := var
PN
2
i=1 (xi −x̄) /(N −1) (∼ Durchschnitt der quadrierten Residuen),
• Interquartildistanz IQR := x0.75 − x0.25
Masszahlen der Form:
• Schiefe oder Skewness:
α̂3 := 1
N
1
N
PN
− x̄)3
3/2
PN
2
i=1 (xi − x̄)
i=1 (xi
Symmetrische Verteilungen haben Schiefe = 0.
• Wölbung (-süberschuss) oder (Excess) Kurtosis: α̂4 :=
verteilung hat α̂4 = 0.
PN
i=1 (xi
Experimente mit Schiefe und Kurtosis werden in 4.5 angeboten.
26
− x̄)4 /(N ∗ s4 ) − 3. Die Normal-
3.4 Ein Datenbeispiel
3.4 Ein Datenbeispiel
Am Anfang interessieren uns Daten, die nur einen Datenwert pro Individuum aufweisen. Meistens wird
noch eine Identifikation zugewiesen, die jetzt aber nicht berücksichtigt wird.
Beispiel: Baumhöhen gemessen in Davos.
Die folgenden Daten stammen aus der ehemaligen Gruppe Ertragskunde der WSL. Von 40 Fichten auf
Messflächen für Luftschadstoffe in Davos wurden die Höhen in m gemessen (W.Keller, 1985):
> dav <- read.table("./Data/Davos.h", header = TRUE)
> table(dav$h)
10
12 13.3 13.6 14.2 14.8
15 15.8 16.7
1
1
1
1
1
1
1
1
1
19.5 20.6 21.2 21.3 22.8 23.4 23.7 23.8 24.5
1
1
2
1
1
1
1
1
1
27.2
28 28.3 28.4 28.7 32.4
33 35.5
1
1
1
2
1
1
1
1
17 17.3 17.5 18.1 18.2
1
1
1
1
1
25 25.1 26.2 26.3 26.5
1
1
1
3
1
> summary(dav$h)
Min. 1st Qu.
10.0
17.2
Median
23.1
Mean 3rd Qu.
22.2
26.4
Max.
35.5
Abb. 3.1 stellt die Baumhöhen dar in der Reihenfolge der Messung, auf der x-Achse ist die Position (Index)
innerhalb der Liste aufgetragen. Die rechte Figur behandeln wir später.
Noch bevor wir irgendetwas rechnen, verschaffen wir uns eine Übersicht über die Daten, die sehr einfach
von Hand zu erledigen ist. Das Stamm-und-Blatt-Diagramm stellt alle Werte in Zeilen dar, jeder einzelne
Wert kann identifiziert werden. (Im Allgemeinen sind die Werte nicht geordnet.) Die erste wesentliche (d.h.
von Null verschiedene) Ziffer wird vor einem senkrechten Strich angeschrieben. Nach dem Strich wird
für jeden vorkommenden Einzelwert die zweite (gerundete) wesentliche Ziffer notiert. Die Stellung des
Dezimalpunktes (-kommas) wird vernachlässigt, jedoch in der Legende erwähnt. Je nach Spannweite der
Daten werde für jede erste wesentliche Ziffer eine, 2 oder 5 Zeilen eingerichtet, d.h. Klassen der Breite 10,
5 oder 2 gebildet. Solche Darstellungen durch gedruckte Zeichen waren besonders nützlich zur Zeit vor den
Grafikprogrammen, als echte grafische Darstellungen noch nicht vorhanden oder umständlich handzuhaben
waren.
> stem(dav$h)
The decimal point is 1 digit(s) to the right of the |
1
1
2
2
3
3
|
|
|
|
|
|
02344
556777888
011113344
55566667788889
23
6
Histogramme wie Abb. 3.2 sind leicht zu lesen, sie sind gedrehte Stamm-und-Blatt-Diagramme.
27
3 Beschreibende Statistik
op <- par(mfrow = c(1, 2))
plot(dav$h)
op <- options(warn = 2)
boxplot(dav$h)
lines(c(0.8, 1.2), rep(mean(dav$h), 2), col = "blue")
options(op)
35
●
35
>
>
>
>
>
>
●
30
30
●
● ●
●
●
●
●
25
●
● ●
dav$h
●●
●
●
●
●
●
●
20
●
●
●
●
●
●
●
●
●
●
15
15
●
●
●
●
●
20
25
●
●
●
10
10
●
●
0
10
20
30
40
Index
Abbildung 3.1: Baumhöhen [m] in Davos, links Datenreihenfolge wie in der Liste, rechts Boxplot mit Median (dick)
und Mittelwert (blau).
28
3.4 Ein Datenbeispiel
> hi <- hist(dav$h, plot = FALSE)
> plot(hi)
6
4
2
0
Frequency
8
10
12
Histogram of dav$h
10
15
20
25
30
35
40
dav$h
Abbildung 3.2: Histogramm der Baumhöhen in Davos
29
3 Beschreibende Statistik
Histogramme sind empfindlich auf die Lage der Klassengrenzen. Um ein Gefühl dafür zu bekommen, experimentieren wir mit der Lage der Klassengrenzen bei gleichleibender Klassenbreite, (Abb. 3.3), und mit der
Klassenbreite (Abb. 3.4). Dabei beobachten wir die Lage der Summenkurven für die ursprünglichen Daten
(gestrichelte Linien) und die Histogramme (strichpunktierte Linien).
>
>
+
+
+
>
op <- par(mfrow = c(2, 3))
for (ii in seq(0, 5, length = 6)) {
hist.cum(dav$h, breaks = seq(min(dav$h) - 5, max(dav$h) +
5, length = 7) + ii)
}
par(op)
Histogram of x
Histogram of x
8
4
6
Frequency
10
5
Frequency
10
5
15
25
35
0
0
0
2
5
Frequency
10
15
12
15
Histogram of x
5
15
25
35
10
20
30
40
x
x
Histogram of x
Histogram of x
Histogram of x
8
4
6
Frequency
10
5
Frequency
6
4
10
20
30
x
40
0
0
0
2
2
Frequency
8
10
10
12
15
x
10
20
30
x
40
10
20
30
40
x
Abbildung 3.3: Verschieden gelegene Klassengrenzen im Histogramm
Es ist deutlich zu sehen, dass die Summenkurven der Histogramme wesentlich glatter sind als die Histogramme selbst. Sie stimmen an den Klassengrenzen mit den Summenkurven der Originaldaten überein. Die
Summenkurven stellen also eine robustere Darstellung der Daten dar als die entsprechenden Histogramme
selbst.
30
3.4 Ein Datenbeispiel
op <- par(mfrow = c(2, 3))
for (ii in c(3, 5, 7, 10, 15, 20)) {
hist.cum(dav$h, breaks = seq(min(dav$h), max(dav$h),
length = ii))
}
par(op)
Histogram of x
Histogram of x
10
8
6
4
Frequency
10
20
30
0
0
0
2
5
5
10
Frequency
10
Frequency
15
15
20
12
Histogram of x
10
20
30
10
20
30
Histogram of x
Histogram of x
Histogram of x
5
4
3
2
Frequency
4
3
2
10
20
30
x
1
0
0
1
2
4
Frequency
6
5
6
x
6
x
8
x
0
Frequency
>
>
+
+
+
>
10
20
30
10
x
20
30
x
Abbildung 3.4: Verschieden breite Klassen im Histogramm
31
3 Beschreibende Statistik
3.5 Programmierung: Modalwert, Mittelwert und Median
Rückblende:
Trotz aller Variabilität und Unvorhersagbarkeit ist es naheliegend zu fragen: Wo befindet
sich die grösste Konzentration der Daten? Diese Frage haben wir teilweise schon durch Betrachtung des
Histogramms Abb. 3.2 beantwortet.
Der Modalwert ist dort, wo das Histogramm seinen maximalen Häufigkeitswert hat:
> hi$mids[which.max(hi$counts)]
[1] 27.5
Es kann aber auch sein, dass der Modalwert nur einer der Gipfel des Histogramms ist. Wegen dieser Unschönheit wird der (arithmetische) Mittelwert weitaus häufiger angegeben, er ist auch wesentlich einfacher
zu berechnen:
> arithmetic.mean <- function(x) {
+
sum(x)/length(x)
+ }
> arithmetic.mean(dav$h)
[1] 22.1775
Vergleiche die "eingebaute"Funktion mean bzw. deren Standardversion mean.def ault:
> mean.default
function (x, trim = 0, na.rm = FALSE, ...)
{
if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
warning("argument is not numeric or logical: returning NA")
return(NA_real_)
}
if (na.rm)
x <- x[!is.na(x)]
if (!is.numeric(trim) || length(trim) != 1)
stop("'trim' must be numeric of length one")
n <- length(x)
if (trim > 0 && n > 0) {
if (is.complex(x))
stop("trimmed means are not defined for complex data")
if (trim >= 0.5)
return(stats::median(x, na.rm = FALSE))
lo <- floor(n * trim) + 1
hi <- n + 1 - lo
x <- sort.int(x, partial = unique(c(lo, hi)))[lo:hi]
}
.Internal(mean(x))
}
<environment: namespace:base>
32
3.5 Programmierung: Modalwert, Mittelwert und Median
die immer dann durch mean(x) aufgerufen wird, wenn z.B. Vektoren aus Zahlen für x eingesetzt werden.
Dieser Mechanismus fällt unter das Stichwort Methoden bei der Technik der objektorientierten Programmierung.
Leider hat das so beliebte arithmetische Mittel einen schwerwiegenden Nachteil: es wird schon durch
eine extrem kleinen oder grossen Wert, Ausreisser genannt, stark beeinflusst. Eine Abhilfe schafft das
"beschnittene Mittel"
> x <- rcauchy(200)
> mean(x)
[1] 0.200296
> mean(x, trim = 0.3)
[1] 0.0231828
Hier werden ca. 0.3/2 = 15% der Anzahl Werte am oberen und unteren Ende weggelassen, äbgeschnitten". Ebenso ist der Median, der "mittlere Wert", robust gegen Ausreisser. Um ihn zu berechnen, muss man
die Daten sortieren und dann den mittleren heraussuchen. Eine Schwierigkeit ergibt sich, wenn der Vektor eine gerade Anzahl Werte hat. Dann gibt es keinen mittleren Wert, und man nimmt den Mittelwert der
beiden rechts und links von der Mitte:
> med <- function(x) {
+
srt <- sort(x)
+
mi <- length(x)/2
+
if (length(x)%%2 == 1)
+
srt[ceiling(mi)]
+
else (srt[mi] + srt[mi + 1])/2
+ }
> (1:15)
[1]
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15
> (1:15)%%2
[1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
> (1:15)%/%2
[1] 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7
> (1:15)
[1]
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15
> (1:15)%%3
[1] 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0
> (1:15)%/%3
33
3 Beschreibende Statistik
[1] 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5
> (1:15)
[1]
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15
> (1:15)%%4
[1] 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
> (1:15)%/%4
[1] 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
Die Operatoren %/% und %% heissen div, ganzzahlige Division und modulo.
Bei Vorgängen, die sich multiplikativ ändern, ist weder der Median, noch der Mittelwert ein geeignetes
Mass der Lage der Daten. Um auf Additivität zurückzuführen, logarithmiert man, bildet das arithmetische
Mittel und exponenziert anschliessend wieder. Das heisst, man bildet das geometrische Mittel:
Pn
v
u n
i=1 log xi
uY
n
n
xi = e
x̂ = t
i=1
Insektenpopulationen können als Beispiel dienen:
> insects <- c(1, 10, 1000, 50, 300, 10, 70, 700, 1)
> mean(insects)
[1] 238
> exp(mean(log(insects)))
[1] 34.7295
Um solche Daten zu visualisieren, wählt man ebenfalls einen logarithmischen Massstab in y-Richtung,
ausgedrückt durch log="y" in plot:
3.6 Variabilität, Varianz und Standardabweichung
Ein Mass für die Variabilität von Daten zu haben ist eine der Grundlagen der Statistik. Je grösser die Variablität, desto grösser die Ungenauigkeit von geschätzten Parametern und desto geringer die Sicherheit,
zwischen verschiedenen Hypothesen unterscheiden zu können.
Ein sehr einfaches Mass für die Variabilität ist die Spannweite ("range") :
> range(dav$h)
[1] 10.0 35.5
> diff(range(dav$h))
34
3.6 Variabilität, Varianz und Standardabweichung
> plot(insects, log = "y")
> lines(c(0, 10), rep(exp(mean(log(insects))), 2), lty = 2)
●
500
●
50 100
●
●
10
insects
●
●
1
5
●
●
●
2
4
6
8
Index
Abbildung 3.5: Daten, die multiplikativ variieren, in logarithmierter Darstellung
[1] 25.5
Dieses Mass hängt aber zu stark von extremen Werten ("Ausreissern", "outlyers") ab und sollte doch gemäss
Vorgabe alle Werte berücksichtigen (Suffizienz, siehe 5.2). Wir schauen uns nach einander an und diskutieren:
>
>
>
>
res <- dav$h - mean(dav$h)
resa <- abs(res)
res2 <- res^2
res[1:6]
[1] -5.4775
6.2225
6.5225
4.3225
4.1225
6.2225
> resa[1:6]
[1] 5.4775 6.2225 6.5225 4.3225 4.1225 6.2225
> res2[1:6]
35
3 Beschreibende Statistik
[1] 30.0030 38.7195 42.5430 18.6840 16.9950 38.7195
> sum(res)
[1] 6.21725e-14
> sum(resa)
[1] 208.145
> sum(res2)
[1] 1492.07
> (df <- length(dav$h) - 1)
[1] 39
> (varz <- sum(res2)/df)
[1] 38.2582
Kommentare:
• sum(res) = 0: dies folgt aus der Definition des Mittelwertes,
• Der Absolutbetrag eignet sich nicht gut für die mathematische Analyse, er macht Optimierungen
aufwendiger, wird aber dank schnellerer Computer bei robusten Verfahren immer häufiger eingesetzt.
• "Summe der Quadrate", genauer der quadrierten Abweichungen (Residuen), wird am meisten verwendet.
• Anzahl Freiheitsgrade = Anzahl Daten minus Anzahl geschätzte Parameter,
• Division durch Anzahl Freiheitsgrade liefert eine erwartungstreue Schätzung (vgl. 2) für die Varianz
einer Stichprobe:
sum of squares
s2 = variance =
degrees of freedom
und die Standardabweichung als s.
Eine eigens definierte Funktion ist z.B.
> variance <- function(x) sum((x - mean(x))^2)/(length(x) +
1)
> variance(rnorm(1000))
[1] 0.88158
Die in R definierte Funktion var hat noch die fakultativen Parameter y, na.rm, und use:
> var
36
3.6 Variabilität, Varianz und Standardabweichung
function (x, y = NULL, na.rm = FALSE, use)
{
if (missing(use))
use <- if (na.rm)
"na.or.complete"
else "everything"
na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs"
"everything", "na.or.complete"))
if (is.data.frame(x))
x <- as.matrix(x)
else stopifnot(is.atomic(x))
if (is.data.frame(y))
y <- as.matrix(y)
else stopifnot(is.atomic(y))
.Internal(cov(x, y, na.method, FALSE))
}
<environment: namespace:stats>
> options(op)
37
3 Beschreibende Statistik
38
4 Etwas Theorie
Dieses Kapitel ist speziell aufgebaut. Zuerst werde ich einige grundlegende Begriffe betreffend Zufallsereignisse einführen und über die Erzeugung von Zufallszahlen auf dem Computer sprechen. Dann werde
ich zwei wichtige einfache Zufallsverteilungen besprechen und mit Tabellen die am meisten gebrauchten
Verteilungen vorstellen. Programmstücke sollen es dem Leser erlauben, mit diesen Verteilungen zu experimentieren.
Da der Zentrale Grenzwertsatz (1) eine so bedeutende Rolle in der theoretischen und praktischen Statistik
spielt, zeigen wir erst einige eindrückliche Experiment und dann die theoretische Herleitung. Den Zusammenhang der "verrückten"Cauchy-Verteilung, der viel gebrauchten t-Verteilung und der Normalverteilung
zeigt eine Grafik, und mit Schiefe und Kurtosis kann experimentiert werden.
4.1 Kombinatorik
Ein beliebter Gegenstand, um kombinatorische Ereignisse darzustellen, ist der gewöhnliche sechs-seitige
Würfel. Wir denken ihn uns ideal, das heisst, jede der Augenzahlen 1,2,3,4,5,6 tritt mit derselben
Wahrscheinlichkeit
1
pi := P rhi ∈ 1 : 6) :=
6
auf.
4.1.1 Elementare, zusammengesetzte und unabhängige Ereignisse
Elementare Ereignisse werden durch einzelne Würfel dargestellt. Als zusammengesetzte Ereignisse werden
mehrere Würfel gemeinsam betrachtet. Kann man vom Eintreten eines Ereignisses nicht auf das Eintreten
eines anderen Ereignisses schliessen, so nennt man die Ereignisse unabhängig. Ihre Wahrscheinlichkeiten
multiplizieren sich. Die Wahrscheinlichkeiten sich gegenseitig ausschliessender Ereignisse addieren sich.
> sample(1:6, 100, replace = TRUE)
[1]
[33]
[65]
[97]
3
1
1
5
5
4
2
1
3
6
1
1
2 4 1 3 1 6 2 1 3 5 1 1 6 6 3 6 5 5 3 6 3 5 4 3 1 5 4 4 3
2 5 4 4 5 6 1 3 1 4 2 5 3 2 3 4 3 1 3 3 3 4 2 2 6 1 3 2 6
5 3 4 6 2 4 2 4 2 5 5 1 3 5 2 6 2 5 6 3 4 4 1 1 2 2 1 5 2
4
> for (ii in 1:10) cat(mean(sample(1:6, 100, replace = TRUE)),
+
" ")
3.48
3.51
3.67
3.55
3.45
3.4
3.74
3.69
3.51
3.71
> for (ii in 1:8) cat(mean(sample(1:6, 10000, replace = TRUE)),
+
" ")
3.5209
3.5401
3.4902
3.5154
3.5167
3.5008
3.4875
3.5176
39
4 Etwas Theorie
Ein zusammengesetztes Ereignis ist z.B. der Wurf zweier Würfel "A" und "B", wobei die Summe der oben
liegenden Augenzahlen gleich 9 sein soll. Seine Auftretenswahrscheinlichkeit beträgt (pi = p = 1/6)
P rhA = 3 ∧ B = 6i + P rhA = 4 ∧ B = 5i + P rhA = 5 ∧ B = 4i + P rhA = 6 ∧ B = 3i = 4p2 =
1
9
4.1.2 Bedingte Wahrscheinlichkeiten
Man spricht von bedingter Wahrscheinlichkeit, wenn das Eintreten eines Ereignisses abhängig gemacht wird
vom Eintreten eines anderen Ereignisses. Geschrieben
P rhA|Bi =
P rhA ∩ Bi
P rhBi
"Die Wahrscheinlichkeit von A, gegeben B". Sie ist die Wahrscheinlichkeit des gemeinsamen Auftretens
geteilt durch die Wahrscheinlichkeit des anderen Ereignisses.
Ein guter Artikel ist http://en.wikipedia.org/wiki/Conditional_probability.
Die Anekdote vom "Schlauen Flugreisenden".
4.2 Zufallsvariable, Erwartungswert und Varianz
Eine Variable wird Zufallsvariable genannt, wenn sie direkt oder indirekt von einem oder mehreren zufälligen Ereignissen abhängt, sie wird mit einem grossen Buchstaben bezeichnet, z.B. X. Eine Zufallvariable
wird diskret genannt, wenn sie höchstens abzählbar viele, K (verschiedene) Werte xi annehmen kann, d.h.
die Werte können durchnummeriert werden. Die zugehörigen Wahrscheinlichkeiten
P rhX = xi i
müssen bekannt sein und die Summe 1 haben. Die pmf ist die Punktmassefunktion (point mass function),
die Funktion cdf
X
cdf (x) := P rhX ≤ xi =
pmf (xi )
xi ≤x
ist die Kumulative Verteilungsfunktion (cumulative distribution function), mit cdf (max xi ) = 1 (Normalisierung).
Eine Zufallsvariable X heisst stetig oder kontinuierlich, wenn sie nicht diskret ist. Hier tritt die Dichtefunktion (probability density function, pdf) an die Stelle der pmf, und die cdf nimmt die Form an
Z x
cdf (x) :=
pdf (ξ)dξ.
−∞
mit cdf (∞) = 1. Informell kann man die Dichtefunktion als eine "geglättete" Version des Histogramms ansehen: Wenn man empirisch eine genügende Anzahl von Stichproben einer stetigen Zufallsvariablen zieht
und das entsprechende Histogramm der relativen Anzahlen der Ergebnisse betrachtet, dann wird das Histogramm der Wahrscheinlichkeitsdichte unserer Zufallsvariablen ähneln, wenn wir annehmen, dass die
Zellenbreite genügend schmal gewählt wird.
Der Erwartungswert µX einer Zufallsvariablen X ist definiert als
40
4.2 Zufallsvariable, Erwartungswert und Varianz
µX := EhXi :=
 PK

i=1 xi pmf (xi )
diskret
 R∞
stetig
−∞ x pdf (x)dx
2 ist definiert als
Die Varianz σX
2
σX
:= Eh(X − µX )2 i :=
 PK
2

i=1 (xi − x̄) pmf (xi )
diskret
 R∞
stetig
−∞ (x
− x̄)2 pdf (x)dx
Definition 2. Erwartungstreuer Schätzer: µ = µX . Für immer grössere Stichprobengrössen strebt der
Erwartungswert gegen den theoretischen Wert der Grundgesamtheit.
Erwartungstreue Schätzer sind die in Kap. 3.3 erwähnten Grössen: der arithmetische Mittelwert x̄ für den
2 .
Erwartungswert, die Varianz s2 für σX
Wenn klar ist, von welcher Zufallsvariablen man spricht, dann lässt man den Index X bei µ und σ weg.
Aus den Definitionen lassen sich die Additions- und Multiplikationsgesetze von unabhängigen, identisch
verteilten Zufallsvariablen herleiten. Seien a, b, n Konstanten. So ist:
(4.1)
EhX ± Y i = EhXi ± EhY i
(4.2)
EhaX ± bY i = aEhXi ± bEhY i
(4.3)
σ 2 hX ± Y i = σ 2 hXi + σ 2 hY i
(4.4)
(4.5)
σ 2 haX ± bY i = a2 σ 2 hXi + b2 σ 2 hY i
n
σ 2 hXi
1X
Xk i =
σ2h
n
n
k=1
(4.6)
n
1X
σh
Xk i =
n
k=1
σhXi
√
n
Man beachte, dass sich Varianzen nicht subtrahieren, und dass die Standardabweichung eines Durchschnitts
mit der Wurzel aus n abnimmt. Daraus folgt das Bemühen, für die Berechnung eines Mittelwertes möglichst
viele Werte zu verwenden.
4.2.1 Generatoren von Zufallszahlen
Für die Simulation von Zufallsereignissen braucht man Generatoren von Zufallszahlen, die eine Reihe von
statistischen Gütetests bestehen. Solche sind in R implementiert. Man unterscheidet dabei die grundlegenden Generatoren von gleichverteilten Zufallszahlen (base package "RNG"), und die Funktionen, die
aus gleichverteilten Zufallszahlen solche aus anderen Verteilungen erzeugen. Die Namen letzterer findet
man in Tabelle 4.2 in Spalte 3, indem man den Buchstaben "r" vor den Namen stellt, also rnorm für den
Generator von normalverteilten Zufallszahlen.
Meist will man, dass die Zufallszahlen jedes Mal mit einem anderen Startwert, seed genannt, beginnen.
Sollen jedoch die Ergebnisse einer Simulation exakt reproduziert werden, so setzt man mit set.seed den
Zufallsgenerator:
> save.seed <- 403
> set.seed(save.seed)
41
4 Etwas Theorie
> runif(5)
[1] 0.435882 0.304504 0.225121 0.823904 0.154283
> runif(5)
[1] 0.264830 0.704438 0.630276 0.120108 0.178535
> set.seed(save.seed)
> runif(10)
[1] 0.435882 0.304504 0.225121 0.823904 0.154283 0.264830 0.704438
[8] 0.630276 0.120108 0.178535
Nach dem Neustart des Generators wird die ursprüngliche Sequenz wiederholt, auch ohne Unterbrechung
nach der 5. Zufallszahl.
4.3 Verteilungen
4.3.1 Bernoulli- und Binomialverteilung
Die wichtigsten Verteilungen stammen aus der Kombinatorik, die sich mit der Anordnung von Objekten
befasst, die bestimmten Regeln entsprechen, und die Anzahl möglicher Anordnungen bestimmt.
Am ehesten bekannt schon bei Kindern ist die Gleichverteilung, z.B. der Augen eines (idealen) Würfels,
den wir oben schon eingeführt haben.
Andererseits wird zum Wetten eine Münze benutzt. Diese spezielle Verteilung von zwei einander ausschliessenden Ereignissen ("Kopf", SZahl") oder ("Ja","Nein") ist unter dem Namen "Bernoulli-Verteilung"
mit Parameter p bekannt: http://en.wikipedia.org/wiki/Bernoulli_distribution:
(4.7)
p = P rhX = 1i = 1 − P rhX = 0i = 1 − q.
Um die Wette "fairßu gestalten, wird Pr = Prob = Probability = Wahrscheinlichkeit
p := P robh”Kopf ”i = P robh”Zahl”i = 0.5.
angenommen.
Für die Bernoulli-Verteilung gilt:
µ=1·p+0·q =p
σ 2 = (1 − p)2 · p + (0 − p)2 · q = q 2 p + p2 q = pq
Wiederholt man solche "Bernoulli-Experimente", so erhält man die Binomial-Verteilung, die angibt, wie
viele Erfolge ("Ja") man bei n unabhängigen Versuchen mit identischem p erhält. Siehe auch http://
en.wikipedia.org/wiki/Binomial_distribution. Die Anzahl k der Erfolge ist:
n k
f (k; n, p) =
p (1 − p)n−k
k
mit dem Binomial-Koeffizienten ("n über k" oder "n tief k")
k T erme
}|
{
z
n
n!
n
n(n − 1)(n − 2) · · · (n − k + 1)
:=
=
=
k
k!(n − k)!
n−k
k(k − 1)(k − 2) · · · 2 · 1
42
4.3 Verteilungen
n
0
mit
=
:= 1, k! := k(k − 1)(k − 2) · · · 2 · 1, 0! := 1
0
0
der angibt, auf wie viele Arten man n Elemente zu Gruppen mit k Mitgliedern zusammenstellen kann: Für
das erste Element hat man n Auswahlmöglichkeiten, für das nächste n − 1, für das übernächste n − 2,. . . ,
für das kte n − k + 1. Da es auf die Reihenfolge der k Elemente, die man gezogen hat, nicht ankommt, muss
man noch durch die Anzahl Permutationen von k Elementen teilen: k!. Man sagt für n! "n Fakultät".
Ein Film über zufällige binomialverteilte Werte wird in Abb. 4.1 gezeigt (in der interaktiven Version).
NBIN <- 6
dela <- 0.2
N <- 10000
n <- 10
p <- 0.3
for (ii in 1:NBIN) {
delayt(dela)
hist(rbinom(N, n, p), breaks = ncC, main = paste("binom(N=",
N, ",n=", n, ",p=", p, ")", sep = ""), xlab = "k",
xlim = c(0, n))
}
0
500
1000
1500
2000
2500
binom(N=10000,n=10,p=0.3)
Frequency
>
>
>
>
>
>
+
+
+
+
+
0
2
4
6
8
10
k
Abbildung 4.1: 10000 zufällige binomialverteilte Werte aus (r)binom(10000,10,0.3).
43
4 Etwas Theorie
4.3.2 Übersicht über die wichtigsten Verteilungen
Die wichtigsten Verteilungsfunktionen, die in R standardmässig angeboten werden, sind in den Tabellen
4.1 und 4.2 (knapp) erklärt. Quelle: http://en.wikipedia.org/wiki/Portal:Mathematics,
dann suche nach den verschiedenen Verteilungen.
In Abb. 4.2 werden Realisationen der wichtigsten Verteilungen gezeigt.
> fp <- function(n) {
+
pltRCT(4, 4, paste("Dichten von n = ", n, " Zufallsziehungen"),
+
{
+
hist(runif(n, 0, 1), main = "unif(n,0,1)",
+
xlab = "x")
+
hist(rbinom(n, 10, 0.4), breaks = ncS, main = "binom(n,10,0.4)",
+
xlab = "k")
+
hist(rnbinom(n, 10, 0.4), breaks = ncC, main = "nbinom(n,10,0.4)",
+
xlab = "k")
+
hist(rhyper(n, 10, 7, 8), breaks = ncC, main = "nhyper(n,10,0.4)",
+
xlab = "k")
+
hist(rgeom(n, 0.4), breaks = ncC, main = "geom(n,0.4)",
+
xlab = "k")
+
hist(rpois(n, 2), breaks = ncC, main = "pois(n,2)",
+
xlab = "k")
+
hist(rbeta(n, 5, 2), breaks = ncC, main = "beta(n,5,2)",
+
xlab = "x")
+
hist(rgamma(n, 2), breaks = ncC, main = "gamma(n,2)",
+
xlab = "x")
+
hist(rexp(n, 1), breaks = ncF, main = "exp(n,1)",
+
xlab = "x")
+
hist(rf(n, 20, 50), breaks = ncF, main = "f(n,20,50)",
+
xlab = "x")
+
hist(rnorm(n), breaks = ncC, main = "norm(0,1)",
+
xlab = "x")
+
hist(rlnorm(n), breaks = ncC, main = "lnorm(n)",
+
xlab = "x")
+
hist(rt(n, 4), breaks = ncF, main = "t(n,4)",
+
xlab = "k")
+
hist(rlogis(n), main = "logis(n)", xlab = "x")
+
hist(rchisq(n, 2), main = "chisq(n,2)", xlab = "x")
+
hist(rcauchy(NNC <- 50, 0, 1), breaks = ncF,
+
main = paste("Cauchy(", NNC, ",0,1)",
+
sep = ""), xlab = "x")
+
}, mar = c(5, 4, 2, 1), cex = ceX)
+ }
44
4.3 Verteilungen
Tabelle 4.1: Verteilungen und ihe Eigenschaften. N:= natürliche Zahlen 1, 2, . . . , N0 := alle nicht-negativen ganzen
Zahlen, R:= reelle Zahlen, RIBF := regularisierte unvollständige Betafunktion. c = Normalisierungskonstante.
Name
Def.bereich
Dichte
Verteilung
Mittelwert
k∈
Pr(.)
pmf
D(.)
cdf
µ
k−a
n
a+b
2
q, 1
p
RIBF
np
npq
RIBF
kq
p
kq
p2
-
nm
N
mn(N −m)(N −n)
N (N −1)
diskret
Varianz
σ2
n2 −1
12
1
Uniform
2
Bernoulli
3
Binomial
{a, a + 1, . . . , n1
b = a + n − 1}
0, 1
pk q 1−k
n k n−k
0, 1, . . . , n
k p q
4
Neg.binom.
N
5
Hypergeom.
N
6
Geometrisch
N
p qr
RIBF
q
p
q
p2
6a
Geometrisch
N
qr
RIBF
q
q
p
pdf
cdf
stetig
k+r−1
r
pk q r
−m
(mk)(Nn−k
)
N
(n)
1
b−a
−λ
λk ek!
7
Uniform
x ∈ [a, b]
8
Poisson
λ ∈ R, k ∈ N0
9
Beta
x ∈ (0, 1),
α, β > 0
10
chi2 , χ2
x≥0
(1/2)k/2
Γ(k/2)
11
Gamma
x≥0
bp
p−1 e−bx
Γ(p) x
12
Exponential
x≥0
λe−λx
13
Fischers F
x≥0
c·
14a
Std Normal N
R
14b
Normal N
R
15
Log-Normal
x>0
16
Student’s t
R
c· 1+
17
Cauchy
R
γ/π
(x−x0 )2 +γ 2
=: λ
λ
RIBF
α
α+β
αβ
(α+β)2 (α+β+1)
reg. Gamma
k
2k
γ(p,bx
Γ(p)
p
b
p
b2
1 − e−λx
1
λ
1
λ2
m −1
2
m+n
(mx+n) 2
x
a+b
2
(b−a)2
12
x−a
b−a
Γ(bk+1c,λ)
bkc!
Beta(α, β) ·
xα−1 (1 − x)( β −
1)
xk/2−1 e−x/2
pq
n
n−2 , n>2
2n2 (m+n−2)
m(n−2)2 (n−4)
n>4
2
x
√1 e− 2
2π
1 x−µ 2
√1 e− 2 ( σ )
σ 2π
√1
e−
σ 2πx
(ln x−µ)2
2σ 2
x2
n
n+1
2
Φ(x)
0
1
Φ( x−µ
σ )
µ
σ2
Rx
0
Rx
pdf (x)dx
−∞ pdf (x)dx
x−x0
1
1
π arctan γ + 2
σ2
2
2
2
0
n
n−2 , n
>2
-
-
eµ+
e2µ+σ (eσ
1)
45
−
4 Etwas Theorie
Tabelle 4.2: Erklärungen zu den Verteilungen. ’Funktion’ = Funktionsname in R, davor zu stellen sind ’d’, ’p’,
’q’, ’r’ für ’Dichte’, ’Verteilung = distribution’, ’Quantile’, ’Zufallszahlen = random deviates’, z.B. ’runif’,
’pbinom’, ’qt’, ’rnorm’. Siehe "help(binom)ëtc. N n: N ist sehr gross gegenüber n.
Name
R-funktion
Bemerkung
p := Pr(success)
diskret
unif
n := b − a + 1, Anzahl der Werte (Würfel: 6), jedes Ereignis
gleich wahrscheinlich p = 1/n
q = 1 − p = Pr(Misserfolg )
Binomial
binom
4
Negativ binomial
nbinom
k Erfolge in n Versuchen.n 1 ⇒ N (np, npq), s. ’14’ (Normal)
k Erfolge nach r Misserfolgen
5
Hypergeom.
hyper
6
Geometrisch
geom
6a
Geometrisch
1
Uniform
2
Bernoulli
3
Eine Urne enthält N Kugeln, davon sind m weiss. Zieht man
n Kugeln, wieviele Kugeln sind weiss? n = 1 ist Bernoulli
’2’. Falls p := m/N 6= 0 or 1 und a) N, m n ⇒ Binomial,
s. ’3’. b) N, m n 1 ⇒ N (np, npq), s. ’14’ (Normal)
Erster Erfolg nach r Misserfolgen. Ist Spezialfall von negat.
binomial ’4’ für k = 1.
r Misserfolge hinter einander. vgl. die Rolle von q in ’5’
stetig
7
Uniform
unif
Alle Ereignisse in [a, b] gleich wahrscheinlich
8
Poisson’s
pois
9
Beta
beta
10
chi2 , χ2
chisq
11
Gamma
gamma
12
Exponentiell
exp
Pr(k Erfolge) = λ für seltene Ereignisse. k = 0: P r(0) =
e−λ ist Grenzfall von Binomial ’3’für n 1, und λ := np
bleibt fest
modelliert Eregnisse beschränkt auf ein Intervall
P
Wenn Xi ∈ N (0,1), i = 1..k, dann ist χ2k := ki=1 Xi2 χ2k verteilt
Ist stetiges Analog zur diskreten negativen Binomialvert. und
gibt die Zeit an zum pth seltenen Poissonereignis. Ist ein
"flexibles"χ2 . Die Summe von unabhängigen Gammaverteillungen ist gammaverteilt.
Modelliert Zeiten zur nächsten Ankunft, radioaktiven Zerfall
13
Fischer’s F
f
14a
Standard Normal N (0, 1)
norm
14b
Normal N (µ, σ)
norm
15
Log-Normal
lnorm
16
Student’s tn
t
17
Cauchy-Lorentz
cauchy
46
Quotient von zwei χ2 -Verteilungen, wird in Varianzanalyse
benutzt.
"Glockenkurve", standardisiert so dass µ = 0, σ = 1, auch
geschrieben als N 0,1
Wichtig wegen Zentralem Grenzwertsatz (1). Die Summe von
unabhängigen Normalverteillungen ist normalverteilt.
ln x ist normalverteilt
q
2
ist N (0, 1)/ χnn , limn→∞ tn = N (0, 1), t1 ist die
Cauchyvert., s. ’17’.
Falls Xi , Yj ∈ N (0, 1), unabhängig, dann ist X/Y in Cauchy
mit x0 = 0, γ = 1. Cauchy ist t1 .
4.3 Verteilungen
> fp(n = 2000)
Dichten von n = 2000 Zufallsziehungen
0.8
2
4
6
8
700
500
0
10
30
50
1
2
3
4
5
6
7
geom(n,0.4)
pois(n,2)
beta(n,5,2)
gamma(n,2)
6
8
12
0
2
4
6
250
0 50
8
0.2
0.6
1.0
0
2
4
6
8
x
x
exp(n,1)
f(n,20,50)
norm(0,1)
lnorm(n)
50
Frequency
Frequency
100
200
150
100
Frequency
300
200
6
8
10
0.5
1.5
2.5
0
0
50
0
4
10
100 200 300 400 500
k
150
k
100
−3
−1
1
2
3
0
5
10
15
20
x
x
x
t(n,4)
logis(n)
chisq(n,2)
Cauchy(50,0,1)
5
k
15
−10
−5
0
x
5
0
5
10
Frequency
600
400
0
0
200
200
400
Frequency
Frequency
600
150
100
50
0
25
15
800
x
800
2
150
Frequency
Frequency
100 150 200 250
50
0
4
0
Frequency
600
400
2
8
350
k
100 200 300 400 500
k
800
k
0
−10
300
Frequency
0 100
Frequency
0
0
0
0
Frequency
nhyper(n,10,0.4)
x
0
0
50 100 150 200 250 300
300
200
Frequency
100
0
0.4
200
Frequency
nbinom(n,10,0.4)
400
200
150
100
Frequency
50
0
0.0
Frequency
binom(n,10,0.4)
500
unif(n,0,1)
0
2
4
6
8
12
−1000
x
−600
−200
x
2009−02−17, 17:40:56
Abbildung 4.2: Realisierung von theoretischen Verteilungen
4.3.3 Experimente zur Summe von identisch verteilten Zufallsvariablen, Veranschaulichung
des zentralen Grenzwertsatzes (1)
Es werden Histogramme von je einer grösseren Ziehung von Zufallszahlen gezeigt, die aus Verteilungen
stammen, die in R zur Verfügung stehen. Für jede Verteilung wird eine Figur gezeichnet mit der Zufallsziehung und der theoretische Verteilung als Kurve. Im selben Gesamtbild werden die Histogramme von
Mittelwerten aus einer steigenden Anzahl Termen = Summanden gezeigt, die aus dieser Verteilung gezogen
wurden. Zum Vergleich wird jeweils die approximierende Normalverteilung eingezeichnet.
Je nach Stärke der Nichtnormalität der ursprünglichen Verteilung konvergieren diese Mittelwerte mehr
oder weniger schnell gegen die Normalverteilung. Die angegebene Schiefe sk soll als Mass dafür dienen.
Allerdings kommt es auf Grund der Zufälligkeiten vor, dass die sk nicht immer konsequent abnehmen.
Siehe Abb. 4.3, 4.4, 4.5, 4.6, 4.7.
47
4 Etwas Theorie
>
>
>
>
+
n <- 10000
a <- 0
b <- 1
pl(paste("Gleichverteilung in [", a, ",", b, "]", sep = ""),
xlab = "x", fct = "runif", n, , , , a, b)
Gleichverteilung in [0,1]
400
0
0.2
0.4
0.6
0.8
1.0
0.0
0.4
0.6
0.8
5 Terme, sk = 0.390
0.4
0.6
0.8
0 200
Frequency
0.2
1.0
0.2
0.4
0.6
0.8
30 Terme, sk = 0.681
300 Terme, sk = 0.673
0
200
200 400
x
Frequency
x
0
1.0
500
3 Terme, sk = 0.241
400
x
200
0.0
0.2
x
0
Frequency
0.0
Frequency
2 Terme, sk = 0.012
200
Frequency
500
200
0
Frequency
Dichte+Funktion, sk = 0.166
0.3
0.4
0.5
x
0.6
0.7
0.44
0.48
0.52
0.56
x
2009−02−17, 17:40:57
Abbildung 4.3: Die Summe von 1, 2, 3, 5, 30, und 300 Realisationen von n=10000 Ziehungen aus der Gleichverteilung
in [0,1]. sk = Skewness = Schiefe. Variante "2 Terms" hat eine Dreiecksverteilung.
48
4.3 Verteilungen
>
>
>
>
+
+
n <- 10000
a <- 5
b <- 2
pl(paste("Beta-Verteilung mit a = ", a, ", b = ", b,
sep = ""), xlab = "x", fct = "rbeta", n, , , , a,
b)
Beta−Verteilung mit a = 5, b = 2
0.4
0.6
0.8
600
1.0
0.3
0.4
0.5
0.6
0.7
0.8
0.9
3 Terme, sk = 0.509
5 Terme, sk = 0.642
0
200
Frequency
200
1.0
500
x
400
x
0
0.5
0.6
0.7
0.8
0.9
0.4
0.5
0.6
0.7
0.8
0.9
x
30 Terme, sk = 0.796
300 Terme, sk = 0.618
0
Frequency
0
400
x
300 600
0.4
200
Frequency
0.2
Frequency
300
0
200
Frequency
500
2 Terme, sk = 0.392
0
Frequency
Dichte+Funktion, sk = 0.230
0.60
0.65
0.70
x
0.75
0.80
0.68
0.70
0.72
0.74
x
2009−02−17, 17:40:59
Abbildung 4.4: Die Summe von 1, 2, 3, 5, 30, und 300 Realisationen von n=10000 Ziehungen aus der Betaverteilung
in [0, 1] mit α = 5, β = 2.
49
4 Etwas Theorie
> n <- 10000
> a <- 1
> pl(paste("Exponential distribution with lambda = ", a,
+
sep = ""), xlab = "x", fct = "rexp", n = n, , , ,
+
a)
Exponential distribution with lambda = 1
2
4
6
8
0
1
2
3
4
5
3 Terme, sk = 0.937
5 Terme, sk = 0.830
0
200
Frequency
200
6
500
x
400
x
0
1
2
3
4
0.0
0.5
1.0
1.5
2.0
2.5
3.0
x
30 Terme, sk = 0.676
300 Terme, sk = 0.674
Frequency
0
200
0
600
x
400
0
300
Frequency
0
Frequency
400
0
Frequency
400 800
2 Terme, sk = 1.323
0
Frequency
Dichte+Funktion, sk = 2.165
0.6
0.8
1.0
1.2
x
1.4
1.6
1.8
0.8
0.9
1.0
1.1
1.2
x
2009−02−17, 17:41:01
Abbildung 4.5: Die Summe von 1, 2, 3, 5, 30, und 300 Realisationen von n=10000 Ziehungen aus der Exponentialverteilung mit λ = 1.
50
4.3 Verteilungen
>
>
>
>
+
n <- 2000
a <- 0
b <- 1
pl(paste("Standard Cauchy distribution", sep = ""), xlab = "x",
fct = "rcauchy", n = n, , , , a, b)
Standard Cauchy distribution
2000
4000
6000
250
8000
−6000
−4000
−2000
0
3 Terme, sk = 36.851
5 Terme, sk = 14.945
0
100
Frequency
100
250
x
250
x
0
−2000
−1000
0
1000
−500
−100
0
100
30 Terme, sk = 32.703
300 Terme, sk = 36.730
Frequency
100
0
500 1000
x
2000
250
x
250
x
0
−1000
−300
0 100
Frequency
0
Frequency
100
0
100
Frequency
250
2 Terme, sk = 49.882
0
Frequency
Dichte+Funktion, sk = 53.692
0
500
1500
2500
x
2009−02−17, 17:41:03
Abbildung 4.6: Die Summe von 1, 2, 3, 5, 30, und 300 Realisationen von n=2000 Ziehungen aus der StandardCauchy-Verteilung mit x0 = 0, γ = 1. Median und Mode sind immer 0.
51
4 Etwas Theorie
>
>
>
>
+
+
n <- 10000
a <- 0
b <- 1
pl(paste("Normalverteilung mit Mittel = ", a, ", var = ",
b, sep = ""), xlab = "x", fct = "rnorm", n, , , ,
a, b)
Normalverteilung mit Mittel = 0, var = 1
−2
0
2
500
4
−2
−1
0
1
2
3 Terme, sk = 0.728
5 Terme, sk = 0.842
0
200
Frequency
300
3
400
x
600
x
0
−1
0
1
2
−1
0
1
x
30 Terme, sk = 0.797
300 Terme, sk = 0.691
0
Frequency
0
2
600
x
200 400
−2
300
Frequency
−4
Frequency
200
0
200
Frequency
400
2 Terme, sk = 0.801
0
Frequency
Dichte+Funktion, sk = 0.744
−0.6
−0.2
0.2
x
0.4
0.6
0.8
−0.2
−0.1
0.0
0.1
0.2
x
2009−02−17, 17:41:05
Abbildung 4.7: Die Summe von 1, 2, 3, 5, 30, und 300 Realisationen von n=10000 Ziehungen aus der Normalverteilung N (0, 1).
52
4.3 Verteilungen
4.3.4 Die allgegenwärtige Normalverteilung: Warum ist sie so "normal"? Der zentrale
Grenzwertsatz.
Im vorangehenden Kapitel haben wir mit verschiedenen verschiedene Verteilungen experimentiert, um ihr
Verhalten in Bezug auf den Zentralen Grenzwertsatz zu untersuchen. Dieser sagt aus:
Satz 1. Der Durchschnitt aus unabhängigen Ziehungen aus ein und derselben Verteilung mit endlicher
Varianz tendiert mit wachsendem Umfang zu einer Normalverteilung.
Warum das so ist, untersuchen wir mit Hilfe der Binomialverteilung als Modell für die Summierung,
und die Division durch die Anzahl der Elemente vernachlässigen wir. Die gezogenen Zufallsvariablen (sie
sind Bernoulli-verteilt) sind die gröbste Näherung für eine Variable mit endlicher Varianz, nämlich eine
Bernoulli-Variable mit unspezifizierter Wahrescheinlichkeit p für Erfolg.
Betrachtet man die Form (der Verteilungsfunkton, d.h. des Histogramms) der Binomialverteilung, Abb.
4.1 , so hat sie einen schönen runden Gipfel. Um diese Form zu beschreiben, benötigen wir eine geeignete
Beschreibung für die Gestalt der Verteilungsfunktion in der Umgebung des Gipfels und einen Grenzüberggang. http://mathforum.org/library/drmath/view/56600.html
Gegeben sei eine Variable mit den Werten k, 2k, 3k, ..., nk mit den Wahrscheinlichkeiten gegeben durch
die Binomialverteilung. Dann sind der Mittelwert m = npk und die Varianz s2 = npqk 2 .
Wir nehmen an:
n r n−r
(4.8)
y := PrhAuftreten von rki =
p q
r
n
0
(4.9)
y := PrhAuftreten von (r + 1)ki =
pr+1 q n−r−1
r+1
Dann sind:
y0 − y =
=
n
n r n−r
pr+1 q n−r−1 −
p q
r+1
r
n! pr q n−r−1
[(n − r)p − (r + 1)q]
(r + 1)!(n − r)!
Und:
(4.10)
y0 − y
y
=
np − r(p + q) − q
np − r − q
=
(r + 1)q
(r + 1)q
Sei:
x := rk − npk
(4.11)
der Abstand gemessen vom Mittelwert. Dann sind r + 1 = xk + np + 1 und k(r + 1) = x + k + npk.
Multiplikation von Zähler und Nenner der rechten Seite der Gleichung (4.10) mit k 2 und Substitution im
Nenner von (np − r)k = −x:
y0 − y
y
(4.12)
=
=
(np − r)k − qk
[x + k + npk]qk
(−x − kq)k
npqk 2 + (x + k)qk
53
4 Etwas Theorie
Wir setzen nun k =: dx, so dass y 0 − y =: dy und lassen lim k → 0 und lim n → ∞ so, dass nk 2 endlich
s2
bleibt =: pq
. Gleichung (4.12) kann dann geschrieben werden als:
dy
[−x − qdx] dx
= 2
y
s + (x + dx)q dx
(4.13)
Mit lim dx → 0 wir dies
dy
y
=
−xdx
.
s2
Integration liefert:
ln y =
(4.14)
−x2
+ constant
2s2
x2
y = Ae− 2s2
Integration von −∞ to +∞ liefert die Fläche unter der Kurve g = y(x), und wir wählen die Konstante A so,
dass die Fläche gleich 1 wird. Siehe auch: Algebraic Integration of Standard Normal Distribution Function
http://mathforum.org/library/drmath/view/53628.html Wir erhalten
1
A= √ ,
s 2π
und damit die Formel für die Verteilungsfunktion für die Normalverteilung ( pdf = probability distribution
function):
(4.15)
x2
1
pdf (x) = √ e− 2s2
s 2π
4.4 Der Zusammenhang zwischen Normal-, t- und Cauchy-Verteilung
Die Cauchy-Verteilung ist identisch mit der t1 -Verteilung und hat ’dicke’ Schwänze, so dass Mittelwert und
alle höheren Momente nicht definiert sind und daher nicht eindeutig berechnet werden können. Die Annäherung der t-Verteilung mit wachsendem Freiheitsgrad an die Normalverteilung ist aus Abb. 4.8 ersichtlich,
die Konvergenz der 95%-Grenzen aus Tab.4.3:
>
>
>
>
+
>
>
>
>
>
>
>
>
>
54
part <- c(Inf, 25, 10, 6, 3, 2, 1)
rp <- rev(part)
lab <- c("Normal", paste("t_", part[-1], sep = ""))
colr <- c("black", "blue", "green", "magenta", "red",
"black", "black")
ltyp <- c(1, 3, 2, 4, 5, 6, 1)
lwdp <- c(1, 3, 3, 2, 1, 1, 1)
par(mfrow = c(1, 1))
pc <- c(0.025, 0.975)
prc <- matrix(0, nrow = length(rp), ncol = 2)
prc[1, ] <- q <- qnorm(pc)
q <- c(q[1], NA, q[2])
d <- dnorm(q) * 1.4
zus <- d[1] - dt(q[1], df = rev(part)[1])
4.4 Der Zusammenhang zwischen Normal-, t- und Cauchy-Verteilung
> ctn <- function() {
+
curve(dnorm(x, mean = 0, sd = 1), from = -5, to = 5,
+
xlim = c(-5, 5), ylim = c(0, 0.5), lty = ltyp[1],
+
lwd = lwdp[1], col = colr[1], ylab = "Dichte")
+
lines(rep(q, rep(2, length(q))), c(0, d[1], 0, d[2],
+
0, d[3]), lty = ltyp[1], lwd = lwdp[1], col = colr[1])
+
for (ii in seq(along = lwdp)[-1]) {
+
df <- part[ii]
+
curve(dt(x, df = df), from = -5, to = 5, xlim = c(-5,
+
5), ylim = c(0, 0.5), lty = ltyp[ii], lwd = lwdp[ii],
+
col = colr[ii], ylab = "", add = TRUE)
+
prc[ii, ] <- q <- qt(pc, df)
+
q <- c(q[1], NA, q[2])
+
d <- dt(q, df = rev(part)[1]) + zus
+
lines(rep(q, rep(2, length(q))), c(0, d[1], 0,
+
d[2], 0, d[3]), lty = ltyp[ii], lwd = lwdp[ii],
+
col = colr[ii])
+
}
+
curve(x - x, from = -5, to = 5, xlim = c(-5, 5),
+
ylim = c(0, 0.5), ylab = "", add = TRUE)
+
legend(2.8, 0.48, cex = 1, lty = ltyp, lwd = lwdp,
+
legend = lab, col = colr, merge = TRUE)
+ }
Tabelle 4.3: Vertrauensintervalle von t-Verteilungen. ∞ bedeutet Standard-Normalverteilung, ν = Freiheitsgrade;
ν
6
Varianz = ν−2
, ν > 2; Schiefe = 0, ν > 3; Kurtosis = ν−4
,ν >0
ν
1
2
3
6
10
25
∞
2.5%
0.000
0.000
0.000
0.000
0.000
0.000
-1.960
97.5%
0.000
0.000
0.000
0.000
0.000
0.000
1.960
55
4 Etwas Theorie
0.5
> ctn()
0.0
0.1
0.2
Dichte
0.3
0.4
Normal
t_25
t_10
t_6
t_3
t_2
t_1
−4
−2
0
2
4
x
Abbildung 4.8: Annäherung der t-Verteilung an die Normalverteilung, zweiseitige 95%-Intervalle für alle Kurven,
ausser für t1 = Cauchyverteilung.
56
4.5 Zufallsexperimente mit Schiefe und Kurtosis
Die t-Verteilung ist besonders für kleine Freiheitsgrade weniger hoch und hat dickere Schwänze als die
Standard-Normalverteilung N (0, 1), und zwar umso mehr, je kleiner der Freiheitsgrad. Ihre Kurtosis ist also
grösser als 0. Die Annäherung an N (0, 1) ist bei df = 12 schon sehr gut, bei 25 praktisch ununterscheidbar.
Wir formulieren daher die folgende
Faustregel 3. Ein Mittelwert aus mindestens 12 Werten, die aus einer symmetrischen Verteilung stammen,
verhält sich praktisch normalverteilt, 30 Werte genügen praktisch unabhängig von der Verteilung der Einzelwerte, Ausnahmen: "pathologische"Verteilungen mit nicht definierten Momenten: Mittelwert, Varianz,. . . .
4.5 Zufallsexperimente mit Schiefe und Kurtosis
Jede Ausführung liefert die Schiefe von n standard-normalverteilten Zufallszahlen und die Irrtumswahrscheinlichkeit, dass sie nicht 0 ist (t-Test), siehe Crawley, The R Book, p.285, 288. Siehe Abb. 4.9.
>
>
>
+
+
+
+
>
NN <- 8
sk1 <- pr1 <- numeric(NN)
for (ii in 1:NN) {
n <- 10000
sk1[ii] <- skew(rnorm(n))
pr1[ii] <- 1 - pt(abs(sk1[ii]) * sqrt(n/6), n - 1)
}
(cbind(sk1, pr1))
[1,]
[2,]
[3,]
[4,]
[5,]
[6,]
[7,]
[8,]
>
>
>
+
+
+
+
>
sk1
-0.02696111
-0.01677571
-0.01596372
0.00250657
-0.05127838
-0.00940813
0.00181833
0.02058889
pr1
0.1355307
0.2467223
0.2572997
0.4592483
0.0181679
0.3504617
0.4704133
0.2003134
NN <- 6
sk2 <- pr2 <- numeric(NN)
for (ii in (1:NN) + 1) {
n <- 10^ii
sk2[ii] <- skew(rnorm(n))
pr2[ii] <- 1 - pt(abs(sk2[ii]) * sqrt(n/6), n - 1)
}
(cbind(sk2, pr2))
[1,]
[2,]
[3,]
[4,]
[5,]
[6,]
[7,]
sk2
0.00000e+00
2.19236e-01
8.39024e-02
-4.62193e-02
8.39051e-04
-6.88580e-04
-3.60538e-06
pr2
0.0000000
0.1864719
0.1394959
0.0296016
0.4568706
0.3893124
0.4981431
57
4 Etwas Theorie
0.5
> plot(abs(sk1), pr1, xlim = range(abs(c(sk1, sk2))), ylim = range(abs(c(pr1,
+
pr2))), xlab = "Schiefe", ylab = "P(Schiefe <> 0)")
> points(abs(sk2), pr2, pch = as.character(seq(along = sk2)))
7
●
0.4
5●
6
0.3
●
●
0.2
P(Schiefe <> 0)
●
●
2
3
0.0
0.1
●
4●
1
0.00
0.05
0.10
0.15
0.20
Schiefe
Abbildung 4.9: [Wahrscheinlichkeiten, dass die Schiefe von normalen Zufallszahlen verschieden von Null ist. Kreise
bezeichnen verschiedene Ziehungen von je n = 10000 Zufallszahlen, Zahlen stehen für k in Stichproben von
je n = 10k .
Dasselbe für Kurtosis, aber nur die Zahlen.
>
>
>
+
+
+
+
+
>
NN <- 8
ku1 <- pk1 <- numeric(NN)
for (ii in 1:NN) {
n <- 10000
ku1[ii] <- kurtosis(rnorm(n))
pk1[ii] <- 1 - pt(abs(ku1[ii]) * sqrt(n/24), n 1)
}
(cbind(ku1, pk1))
ku1
pk1
[1,] -0.02245706 0.3233365
[2,] -0.05700091 0.1223219
[3,] -0.09603213 0.0249973
58
4.5 Zufallsexperimente mit Schiefe und Kurtosis
[4,] 0.00401537 0.4673387
[5,] 0.04300680 0.1900170
[6,] 0.00149141 0.4878570
[7,] -0.08729225 0.0374024
[8,] 0.00943093 0.4236741
>
>
>
+
+
+
+
+
>
NN <- 6
ku2 <- pk2 <- numeric(NN)
for (ii in 1:NN) {
n <- 10^ii
ku2[ii] <- kurtosis(rnorm(n))
pk2[ii] <- 1 - pt(abs(ku2[ii]) * sqrt(n/24), n 1)
}
(cbind(ku2, pk2))
ku2
pk2
[1,] -1.365708454 0.2004722
[2,] -0.143035981 0.3854599
[3,] 0.068551009 0.3291135
[4,] -0.087347746 0.0373101
[5,] 0.007828091 0.3066742
[6,] 0.000223579 0.4817995
Beide Grössen sind mehrheitlilch nicht von Null verschieden.
59
4 Etwas Theorie
60
5 Schliessende Statistik
5.1 Ziel
Die schliessende Statistik will mit Hilfe Stichproben "gesicherte" Aussagen über vermutete Zusammenhänge in einer Grundgesamtheit, GG, machen. Gesichert soll heissen, dass wir uns damit abfinden, nur
genäherte Aussagen machen zu können, dafür aber eine Irrtumswahrscheinlichkeit angeben können, mit der
unsere Aussagen "im Durchschnitt" als falsch zu erwarten sind.
Unter einer Grundgesamtheit versteht man die Gesamtheit aller Elemente, die man in einer statistischen
Untersuchung betrachten möchte. Die Elemente bestehen vielleicht selbst wieder aus Unterelementen, aber
dies soll in diesem Zusammenhang bedeutungslos sein.
Eine Stichprobe, SP, ist eine Auswahl von Elementen aus der Grundgesamtheit.
5.2 Voraussetzungen
Es lässt sich zeigen, dass unter folgenden wünschbaren Voraussetzungen eine geeignete Schätzung besonders günstige Eigenschaften besitzt:
• Jedes Element der Grundgesamtheit hat dieselbe Chance, erfasst zu werden, Repräsentativität, vgl.
Abb. 5.1.
• Die Schätzgrösse soll keinen oder einen möglichst kleinen systematischen Fehler haben, Erwartungstreue.
• Je mehr Elemente der GG in die SP aufgenommen werden, desto besser soll die Annäherung der
Schätzgrösse an die wahre gesuchte Grösse sein, Konsistenz.
• Schon für kleine Stickprobenumfänge soll die Schätzgrösse möglichst kleine Streuung haben, Effizienz.
• Alle Information aus der Stichprobe soll genutzt werden, Suffizienz.
Anekdote von der gepressten Kluppe.
61
5 Schliessende Statistik
Abbildung 5.1: Ungleiche Erfassungswahrscheinlichkeiten durch Einzugsgebiete. Punkte in kleinen Einzugsgebieten
haben eine kleinere Erfassungswahrscheinlichkeit als solche in grossen.
62
5.3 Methoden
5.3 Methoden
Wie man bei der Beschäftigung mit der Wahrscheinlichkeitsrechnung feststellen kann, führt die tägliche
Erfahrung kaum zu einer logisch korrekten Auseinandersetzung mit zufälligen Ereignissen. Da wir alle dazu
neigen, die Dinge durch unsere Brille zu sehen, führen Aussagen der Statistik leicht zu Missverständnissen.
Wofür der Vollmond verantwortlich sein soll: http://skepdic.com/fullmoon.html.
Die einzelnen Schritte zur Erarbeitung einer überprüfbaren statistischen Aussage müssen daher sehr sorgfältig formuliert werden. Diese Schritte umfassen:
• Problembeschreibung,
• Formulierung der zu prüfenden Hypothese,
• Berechnung der Testgrösse,
• Vergleich der Testgrösse mit der zugehörigen theoretischen Verteilung und Interpretation,
• Interpretation der Relevanz des Ergebnisses.
5.3.1 Problembeschreibung
In der Problembeschreibung werden alle für die statistische Analyse wichtigen Tatsachen und Grundannahmen festgehalten. Ganz wesentlich dabei sind
• die Definition der Grundgesamtheit und deren Elemente,
• die Annahme, die man über die Verteilung der (Werte der) Elemente trifft.
Der erste Punkt (Grundgesamtheit, Elemente) scheint trivial zu sein. Oft wird aber übersehen, dass erst die
Beschränkung auf gröbere Einheiten eine sinnvolle Aussage möglich macht. Beispiel: Die Höhen von Bäumen werden zu mehreren Zeitpunkten gemessen. Dabei werden den Bäumen verschiedene "Behandlungen"
am Standort bei der Pflege zuteil. Problem: Sollen nur die "Endhöhen" massgebend sein, sollen es die Höhen
zu jedem Zeitpunkt oder die gesamten Verläufe sein, eingeteilt in brauchbare Gruppen?
In der Statistik sind Aussagen nur möglich mit dem (meist unterdrückten Zusatz) Zusatz: "Die Aussage
gilt mit einer Wahrscheinlichkeit von 95%" (der am meisten gewählte Wert), oder gleichbedeutend: "Diese
Aussage gilt mit einer Irrtums-Wahrscheinlichkeit von 5%". Je mehr man über die Verteilung der Grundgesamtheit im Voraus weiss, desto schärfere statistische Aussagen sind später möglich, d.h. desto enger sind
die Fehlerschranken für die gewünschten Grössen. Wegen der Variabilität der gesuchten Grössen hat dieser
Gewinn doch seine Grenzen. Es ist also sehr nützlich, vorhandene Information kritisch zu sichten. Liegt nur
spärliche oder gar keine vor, so versucht man, sie in einem Vorversuch bzw. einer Vorerhebung zu gewinnen,
oder man weicht auf die Methoden der verteilungsfreien, sogenannten "robusten" Tests aus. Letztere können
jedoch naturgemäss nicht so scharfe Aussagen machen, wie solche mit Verteilungsannahmen.
5.3.2 Formulierung der zu prüfenden Hypothese
Die zu prüfende Hypothese muss genau formuliert werden, z.B.
• Der Mittelwert ist grösser als (kleiner als, verschieden von) eine(r) vorgegebene Zahl,
• Eine bestimmte Verteilung mit festgelegten Parametern liegt vor,
• Eine bestimmte Verteilung mit noch zu bestimmenden Parametern liegt vor,
63
5 Schliessende Statistik
• Die Standardabweichung einer vorliegenden Verteilung ist grösser als ein vorgegebener Wert.
Fragestellungen unterscheidet man: "grösser, kleiner" sind einseitige, "verschieden" ist eine zweiseitige. Im
letzteren Fall soll eine Abweichung nach unten genauso interessieren wie eine nach oben.
Bemerkung zu Hypothesen
In der Statistik spricht man nicht gern vom "Beweisen" von Hypothesen. Wegen der Unsicherheit der
Daten kann praktisch jedes Ergebnis von einer beliebigen Hypothese stammen, wenn auch sehr selten.
Deshalb spricht man so: "Wir lehnen eine Hypothese mit der Irrtumswahrscheinlichkeit von 5% ab", "Wir
lehnen eine Hypothese wegen der hohen Irrtumswahrscheinlichkeit von 25% nicht ab".
Eine Hypothese kann mehrere Alternativen haben. Deshalb ist die Ablehnung einer Hypothese nicht
gleichbedeutend mit der Annahme irgendeiner diese Alternativen.
Es ist meist einfacher, das Nichtvorhandensein einer Eigenschaft nachzuweisen, als bei einer sehr grossen Menge von Individuen auf das Vorhandensein zu prüfen. Im ersten Fall genügt das Vorhandensein der
Eigenschaft bei einem Individuum, um das Nichtvorhandensein zu verwerfen, im zweiten Fall muss man
alle Individuen anschauen.
5.3.3 Berechnung der Testgrösse
Zur vorliegenden Hypothese muss eine Testgrösse berechnet werden, eine geeignete Zahl, die die Abweichung von der Hypothese messen kann. Oft gibt es mehrere solche "Testgrössen", die sich darin unterscheiden, wie empfindlich sie auf die Verletzung von Voraussetzungen sind (empfindliche / robuste). Erstere
benötigen meist (relativ) wenige, dafür gute Daten, letztere benötigen mehr Daten.
Die empfindlichen Tests gehen vorwiegend von den Messwerten selbst aus, die robusten verwenden Ränge oder ähnliche Konstrukte. Ordnet man alle Messungen der Grösse nach, so bekommt die höchste Zahl den
Rang "1", die nächsten "2", die niedrigste den Rang "N", das ist die Anzahl der Beobachtungen. Gleichen
Zahlen gibt man gemeinsam den Durchschnitt ihres gemeinsamen Ranges. Zählt man von den Gruppen, die
man unterscheiden will, die Ränge zusammen, so gibt die Anordnung der Rangsummen darüber Aufschluss,
ob die Werte eher getrennt oder eher gemischt liegen.
In der Praxis betrachtet man verschiedene Testgrössen, Tab. 5.1:
Tabelle 5.1: Beispiele für Testgrössen
Definition
Rangsumme
beabachtet
t= p
V ar(beobachtet)
P
RSi = Gruppei Ränge
Chi-Quadrat
χ2 =
P (beabachtet − erwartet)2
erwartet
Chi-Quadrat
χ2Y =
P (|beabachtet − erwartet| − 0.5)2
erwartet
Fisher’s F
F =
Student’s t
64
s21
s22
Einsatzgebiete, Kap. ()
t-test, Mittelwertvergleich (5.4.1)
Wilcoxon-Test, Mittelwertvergleich (5.4.2)
Kontingenztafeln (5.5)
Kontingenztafeln, Yates’ Korrektur für kleine
Besetzungszahlen (5.5)
Varianzanalyse (6), Tab. 6.1
5.4 Unterschied zweier Mittelwerte aus unabhängigigen Stichproben
5.3.4 Vergleich der Testgrösse mit der theoretischen Verteilung und Interpretation
Jede Auswahl von Elementen für eine Stichprobe ist dem Zufall zu unterwerfen, und zwar in dem Sinn, dass
jedes Element dieselbe Chance hat, in die Stichprobe aufgenommen zu werden, siehe Kap. 5.2. Sämtliche
aus der Stichprobe erhobenen Grössen sind somit ebenfalls Zufallsgrössen. Mit Hilfe der Information über
die Verteilung der Grundgesamtheit lässt sich ein Überblick über diejenigen Stichproben gewinnen, die mit
dem abgefragten Modell, der behaupteten Eigenschaft, verträglich sind. Die am seltensten zu erwartenden
Stichproben, so z.B. die 5%, 1% oder 0.1% extremsten Fälle, fasst man zum Ablehnungsbereich zusammen.
5.4 Unterschied zweier Mittelwerte aus unabhängigigen Stichproben
Wir betrachten Baumhöhen der drei Standorte Alptal, Davos, und Lägern.
>
>
>
>
>
>
>
alp <- read.table("./Data/alptal.h", header = TRUE)
dav <- read.table("./Data/davos.h", header = TRUE)
lae <- read.table("./Data/laegern.h", header = TRUE)
alp1 <- cbind(alp, loc = rep("a", nrow(alp)))
dav1 <- cbind(dav, loc = rep("d", nrow(dav)))
lae1 <- cbind(lae, loc = rep("l", nrow(lae)))
dat <- rbind(alp1, dav1, lae1)
Aus den Boxplots (Abb. 5.2) sieht man an sich schon, welche Unterschiede zwischen den Standorten
bestehen. Wir wollen diese aber durch die Statistik bestätigen.
5.4.1 Der t-Test von Student
Die Differenz x̄1 − x̄2 zwischen zwei Mittelwerten aus unabhängigigen Stichproben kann mit dem t-Test
geprüft werden, wenn die Durchschnitte je aus mindestens 12 Werten gerechnet werden können (um gemäss
Faustregel 3 die Normalität der Mittelwerte zu garantieren), und beide Grundgesamtheiten dieselbe unbekannte Varianz σ 2 aufweisen (das mag nicht immer zutreffen). Dann sind s21 und s22 unabhängige Schätzungen dafür. Eine genauere Schätzung für σ 2 bekommt man durch eine (quasi-)gewichtete Addition der beiden
Werte:
(N1 − 1)s21 + (N2 − 1)s22
s2 =
.
N2 + N2 − 1
Mit
V ar(x̄1 − x̄2 ) = s2 ·
1
1
+
N1 N2
bekommen wir:
>
>
>
>
>
>
>
+
mdav <- mean(dav$h)
vdav <- var(dav$h)
ndav <- length(dav$h)
mlae <- mean(lae$h)
vlae <- var(lae$h)
nlae <- length(lae$h)
vcmb <- ((ndav - 1) * vdav + (nlae - 1) * vlae)/(ndav +
nlae - 1)
65
5 Schliessende Statistik
>
>
>
>
vdif <- vcmb * (1/ndav + 1/nlae)
tx <- (mdav - mlae)/sqrt(vdif)
df <- ndav + nlae - 2
ptx <- pt(tx, df)
x̄1 − x̄2
=
t= p
s
V ar(x̄1 − x̄2 )
x̄1 − x̄2
r
N1 · N2
N1 + N2
Die Zahl der Freiheitsgrade ist jetzt f = N1 + N2 − 2, da die beiden Grössen s21 und s22 geschätzt haben. In
Zahlen (1: Davos, 2: Lägern):
N1 = 40, N2 = 21
x̄1 = 22.178, x̄2 = 33.190, x̄1 − x̄2 = −11.013
s21 = 38.258,
s22 = 122.459,
s2 = 65.687
V ar(x̄1 − x̄2 ) = 4.770
t = −5.042, df = 59
Wir schliessen also aus der Irrtumswahrscheinlichkeit p-value von 0.00000, dass die Mittelwerte sehr
signifikant verschieden sind.
Mit dem internen t.test() erhalten wir
> (tt <- t.test(dat$h[dat$loc == "d"], dat$h[dat$loc ==
+
"l"]))
Welch Two Sample t-test
data: dat$h[dat$loc == "d"] and dat$h[dat$loc == "l"]
t = -4.2271, df = 26.73, p-value = 0.0002462
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-16.36123 -5.66472
sample estimates:
mean of x mean of y
22.1775
33.1905
Da hier eine Modifikation des Tests verwendet wird, ist auch die Anzahl der Freiheitsgrade anders und sogar
nicht-ganzzahlig.
5.4.2 Wilcoxon’s Rangsummentest
Die umständlichen Rechnungen nimmt uns die eingebaute Funktion wilcox.test ab:
> (wt <- wilcox.test(dat$h[dat$loc == "d"], dat$h[dat$loc ==
+
"l"]))
66
5.5 Kontingenztafeln, Chi-Quadrat-Test
Wilcoxon rank sum test with continuity correction
data: dat$h[dat$loc == "d"] and dat$h[dat$loc == "l"]
W = 165, p-value = 0.0001118
alternative hypothesis: true location shift is not equal to 0
Dieser Test ergibt dasselbe statistische Ergebnis, sein p-Wert ist sogar kleiner als der des vorangegangenen
t-Tests. Falls gleiche Ränge (ties) gemeldet werden, ist das nicht von wesentlicher Bedeutung.
5.5 Kontingenztafeln, Chi-Quadrat-Test
Will man die relative Häufigkeit von Merkmalen in Abhängigkeit von mehreren (kategoriellen) Faktoren
analysieren, so bieten sich Kontingenztafeln an. Zum Zusammenhang zwischen Augenfarbe und Haarfarbe
haben wir folgende Zahlen erhalten (Tab. 5.2):
Tabelle 5.2: Augenfarbe und Haarfarbe.
blonde Haare
dunkle Haare
Spaltensumme
blaue Augen
38
14
52
braune Augen
11
51
62
Zeilensumme
49
65
114
Das einfachste Modell im Sinne von Occam ist, dass Augenfarbe und Haarfarbe unabhängig sind. Unter
dieser Voraussetzung sind die erwarteten Häufigkeiten das Produkt der entsprechenden Wahrscheinlichkeiten und der Gesamtanzahl (Tab. 5.3): Um den Unterschied zwischen beobachteten und erwarteten HäufigTabelle 5.3: Erwartete Häufigkeiten.
blonde Haare
dunkle Haare
Spaltensumme
blaue Augen
= 22.35
49 52
114 114 114
65 52
114 114 114
52
= 29.65
braune Augen
= 26.65
49 62
114 114 114
65 62
114 114 114
62
= 35.35
Zeilensumme
49
65
114
keiten zu bewerten, bilden wir
χ2 =
(38 − 22.35)2 (11 − 26.65)2 (14 − 29.65)2 (62 − 35.35)2
+
+
+
= 35.33
22.35
26.65
29.65
35.35
Die Anzahl Freiheitsgrade ist (Stufenzahl Augenfarbe -1)*(Stufenzahl Haarfarbe -1) = 1*1 = 1. Wir schliessen aus der extrem kleinen Irrtumswahrscheinlichkeit 1-pchisq(35.33,1)= 2.783e − 09, dass das
beobachtete χ2 kaum für Unabhängigkeit spricht. Im Blick auf die Tabelle formulieren wir, dass blaue Augen vorwiegend mit blonden Haaren und braune Augen mit dunklen Haaren vorkommen. Die abweichenden
Fälle machen einen Anteil von (11 + 14)/114 = 21.9% aus.
Mit der Funktion chisq.test():
> (count <- matrix(c(38, 11, 14, 51), nrow = 2, byrow = TRUE))
67
5 Schliessende Statistik
[,1] [,2]
[1,]
38
11
[2,]
14
51
> chisq.test(count)
Pearson's Chi-squared test with Yates' continuity correction
data: count
X-squared = 33.112, df = 1, p-value = 8.7e-09
Yates’ Korrektur, s. Tab. 5.1, wird hier standardmässig verwendetIhr Einfluss ist eher gering hier, da die
erwarteten Einträge einiges grösser sind als 10:
χ2 =
68
(|38 − 22.35| − 0.5)2 (|11 − 26.65| − 0.5)2 (|14 − 29.65| − 0.5)2 (|51 − 35.35| − 0.5)2
+
+
+
= 33.1159
22.35
26.65
29.65
35.35
5.5 Kontingenztafeln, Chi-Quadrat-Test
opo <- options(warn = -1)
boxplot(dat$h ~ dat$loc, names = c("Alptal", "Davos",
"Laegern"), notch = TRUE, xlab = "Standort", ylab = "Hoehe in [m]")
points(as.numeric(dat$loc), dat$h)
options(opo)
●
●
●
●
●
●
●
●
●
40
>
>
+
>
>
35
●
30
25
15
20
Hoehe in [m]
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
10
●
●
●
●
●
●
●
Alptal
Davos
●
●
●
●
●
●
Laegern
Standort
Abbildung 5.2: Baumhöhen der Standorte, Punkte und Boxplots. Die schrägen, von den Medianen ausgehenden
Kerben geben ihre angenäherte Vertrauensintervalle an.
69
5 Schliessende Statistik
70
6 Varianzanalyse, ANOVA
Gemäss Übersicht in Kap.2 sind bei der Varianzanalyse alle erklärenden Variablen kategoriell. Sie wurde
von R.A.Fisher (1890–1962) zur Planung und Auswertung von Feldversuchen in der Landwirtschaft entwickelt und erwies sich inzwischen als geeignetes Verfahren für viele andere Anwendungsbereiche.
6.1 Zweck der Varianzanalyse
Die ANOVA (= Analysis Of VAriance) erlaubt es, genauere Aussagen über den Einfluss verschiedener Einflussgrössen zu machen, indem diese in systematischer Weise gleichzeitig verändert werden, als wenn diese
einzeln verändert werden. Vorausgesetzt werden die Normalverteilung und die Gleichheit der Varianzen, damit sich Mittelwerte auf einfache Weise miteinander vergleichen lassen. Je nach Versuchsanordnung kann
die Methode angepasst werden.
6.2 Einfache Varianzanalyse
Die einfache Varianzanalyse wird verwendet, wenn auf Grund des Einflusses eines Faktors die Mittelwerte in verschiedenen Gruppen als verschieden vermutet werden. Sie ist die direkte Verallgemeinerung des
Vergleichs zweier empirischer Mittelwerte normaler Grundgesamtheiten, siehe 5.4. Die Varianzanalyse ist
empfindlich darauf, ob in allen Gruppen genügend Elemente gemessen wurden (n > 30), siehe Faustregel
3. Falls diese Voraussetzung verletzt ist, muss man bei der Interpretation vorsichtig sein.
Es seien g Gruppen gegeben, die mit i = 1, . . . , g nummeriert seien. In der Gruppe mit der Nummer i
seien die Ni Messwerte xik , k = 1, . . . , Ni erhoben worden. Das Modell der einfachen Varianzanalyse wird
so formuliert:
xik = µ + ai + ik
Die einzelnen Messwerte werden also als eine Summe aus den drei Termen aufgefasst:
xik = µ + ai + ik
(6.1)
Die individuellen Messungen werden als Summe von drei Termen dargestellt:
(6.2)
µ = gemeinsamer Mittelwert aller Gruppen,
(6.3)
ai = konstanter Zusatz für die Gruppe i,
(6.4)
ik = zufälliger Fehler, normalverteilt aus N (0, σ 2 )
Hier heisst "Fehler"nicht "falsch", sondern unerklärter Rest.
In diesem Zusammenhang definieren wir die Modellwerte, predicted value, als die rechte Seite von 6.1
ohne den Fehlerterm:
x̂i = µ + ai
und die Residuen als die Differenzen
rik = xik − x̂i
71
6 Varianzanalyse, ANOVA
Obwohl formal rik = ik ist, erfüllen beide verschiedene Zwecke. Die ik werden postuliert als zu einer
spezifischen Verteilung gehörig, meist der Normalverteilung. Die rik hängen hingegen von den berechneten
Modellwerten a ab. Natürlich sollte man nachtr"glich kontrollieren, dass die rik angenähert der postulierten
Verteilung für die ik folgen.
Man bildet für jede Gruppe das Gruppenmittel x̄i. und für alle Gruppen das Gesamtmittel x̄.. . (Man setzt
einen Punkt in demjenigen Index, über den summiert wird.) Sodann berechnet man die Varianz s2I ("I" für
i nnerhalb der Gruppen)
Pg PNi
(xik − x̄i. )2
2
sI = i=1 k=1
N −g
stellt die Varianz der Punkte xik in Bezug auf ihre jeweiligen Gruppenmittel x̄i. dar. Die Varianz s2Z ("Z" für
zwischen den Gruppen) wird berechnet als
Pg
Ni (x̄i. − x̄.. )2
2
sZ = i=1
.
g−1
Die Gesamtvarianz ist
s2T
(6.5)
Pg
=
i=1
PNk
k=1 (xik
− x̄.. )2
N −1
Die Testgrösse
Fx =
s2Z
s2I
beschreibt, wie stark sich die Varianz zwischen den Gruppen von derjenigen innerhalb der Gruppen unterscheidet. Wenn die Überschreitungswahrscheinlichkeit für das beobachtete Fobs grösser zu sein als F
kleiner ist als 5%, so wird man die Verschiedenheit zwischen den Gruppen nicht ablehnen, sie ist signifikant. Beispiel: Baumhöhen in Davos, Alptal und auf den Lägern in [m]. Für Modellspezifikationen s. Kap.
7.3.
>
>
>
>
xmg <- c(mean(alp$h), mean(dav$h), mean(lae$h))
modh1 <- lm(h ~ 1, data = dat)
modh2 <- lm(h ~ loc, data = dat)
summary(modh1)
Call:
lm(formula = h ~ 1, data = dat)
Residuals:
Min
1Q
-17.231 -6.631
Median
0.169
3Q
4.569
Max
17.769
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
24.831
0.875
28.4
<2e-16
Residual standard error: 8.79 on 100 degrees of freedom
> summary(modh2)
72
6.2 Einfache Varianzanalyse
Call:
lm(formula = h ~ loc, data = dat)
Residuals:
Min
1Q Median
-25.59 -4.68
1.62
3Q
6.00
Max
13.32
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
23.095
1.223
18.89 < 2e-16
locd
-0.918
1.729
-0.53
0.6
locl
10.095
2.084
4.84 4.7e-06
Residual standard error: 7.73 on 98 degrees of freedom
Multiple R-squared: 0.242,
Adjusted R-squared: 0.226
F-statistic: 15.6 on 2 and 98 DF, p-value: 1.28e-06
>
>
>
>
>
>
anov12 <- anova(modh1, modh2)
SSQ <- c(anov12$"Sum of Sq"[2], anov12$RSS[2:1])
names(SSQ) <- c("Z", "I", "T")
Df <- c(anov12$Df[2], anov12$Res.Df[2:1])
names(Df) <- names(SSQ)
s2 <- SSQ/Df
Zur Demonstration der Komplexität eines Objekts der Klasse "lm" führe man aus:
R> str(modh1); str(modh2).
Die Irrtumswahrscheinlichkeit, dass die mittlere Höhe h unabhängig ist vom Standort loc, beträgt 0.0000,
ist also wesentlich kleiner als 5%. Also verwerfen wir die Annahme, dass alle Standorte dieselbe mittlere
Höhe haben. Mindestens eine sticht heraus, aber welche? Diese Frage können wir mit der Varianzanalyse
allein nicht beantworten, siehe dazu Kap. 6.5.
Aus der Zeit vor dem Computer stammt die Darstellung der Varianzanalyse in Tabellenform. Sie geht von
den anschaulichen Grössen SSQ aus, "Quadratsummen" genannt (genauer wäre SSumme der quadrierten
Abweichungen"):
(6.6)
SSQT
=
g X
Ni
X
(xik − x̄.. )2 , Freiheitsgrad = N − 1
i=1 k=1
(6.7)
(6.8)
SSQZ
SSQI
=
=
g
X
Ni (x̄i. − x̄.. )2 , Freiheitsgrad = g − 1
i=1
g X
Ni
X
(xik − x̄i. )2 , Freiheitsgrad = N − g
i=1 k=1
SSQT setzt sich also additiv aus SSQZ und SSQI zusammen ("Varianz"-Zerlegung). Das ist so, weil sich
bei
(xik − x̄.. )2 = ({xik − x̄i. } + {x̄i. − x̄.. })2
die doppelten Produkte wegen der Definition der entsprechenden Mittelwerte x̄i. und x̄.. wegheben.
73
6 Varianzanalyse, ANOVA
Tabelle 6.1: Einfache ANOVA, DF = Anzahl Freiheitsgrade
zwischen
innerhalb
total
SSQ
DF
SSQ
F
p
SSQZ
g−1
s2Z
s2Z /s2I
p
1869.7
2
934.8
15.64
0.0000
SSQI
N −g
s2I
5859.4
98
59.8
SSQT
N −1
7729.1
100
In R bekommen wir die leicht abgeänderte Form
> anov12
Analysis of Variance Table
Model 1:
Model 2:
Res.Df
1
100
2
98
h ~ 1
h ~ loc
RSS Df Sum of Sq
F
Pr(>F)
7729
5859
2
1870 15.64 1.28e-06
Abb. 5.2 stellt die Punkte und die Kistendiagramme (box plots) der drei Standorte dar. In Abb. 6.2, 2. Bild,
sieht man, dass alle Resuduen zusammengenommen mit einer Irrtumswahrscheinlichkeit von knapp über
5% (3. Bild) recht gut einer Normalverteilung folgen. Von den Gruppengrössen 40, 40 und 21 ist nur die
von Lägern etwas kleiner als 30, So ist die Faustregel 3 für die Normalität der Verteilungen der Mittelwerte
leidlich erfüllt. Diagnostische Plots für Lineare Modelle lm, Fig 6.2
74
6.2 Einfache Varianzanalyse
>
>
>
+
>
+
>
+
>
+
plot(dat$h, xlab = "Index", ylab = "Hoehe in [m]", col = as.numeric(dat$loc))
abline(mean(dat$h), 0)
lines(range(which(dat$loc == "a")), rep(mean(dat$h[dat$loc ==
"a"]), 2), col = 1)
lines(range(which(dat$loc == "d")), rep(mean(dat$h[dat$loc ==
"d"]), 2), col = 2)
lines(range(which(dat$loc == "l")), rep(mean(dat$h[dat$loc ==
"l"]), 2), col = 3)
for (ii in seq(along = dat$h)) lines(c(ii, ii), c(mean(dat$h),
dat$h[ii]), col = as.numeric(dat$loc))
40
●
35
●
●
●
●
●
●
25
30
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
15
●
●
●
● ●
●
●
●
● ●
●
●
●
●
●
●
●
●
20
Hoehe in [m]
● ●
●
●
●●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
10
●
●
0
●
●
●
●
●
●
20
40
●
60
80
100
Index
Abbildung 6.1: Baumhöhen der Standorte Alptal, Davos, Lägern (von links nach rechts), entsprechende Mittelwerte
(horizontale Linien) und Residuenzerlegung (vertikale Linien).
75
6 Varianzanalyse, ANOVA
>
>
>
+
>
>
op <- par(mfrow = c(3, 3))
plot(modh2, which = 1:2)
T3plot(residuals(modh2), lab = "T3-plot der Residuen",
legend.pos = "top")
plot(modh2, which = 3:6)
par(mfrow = op)
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
22
26
30
0.20
20
0
−20
2
−1.0
0.0 0.5 1.0
Theoretical Quantiles
t
Cook's distance
Residuals vs Leverage
100
89
91
0.10
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
1
0.00
1.0
● 100
● 89
91
Cook's distance
Scale−Location
0.0
Standardized residuals
Fitted values
0
T3
1
−2
0
Fitted values
20 40 60 80
Obs. number
2
30
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
0
26
5%
1%
−2
22
●
●
●
●
●
●
●
●
●
●
●
● 89
91
Cook's distance
●
100
−4
● 89
91
● 100
●●●●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
91●●
89
● 100
Standardized residuals
●
●
−1
●
●
●
●
●
●
●
●
Normal Q−Q
−3
10
−10
●
●
●
●
●
●
●
●
●
●
●
●
●
●
−30
Residuals
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
Standardized residuals
T3−plot der Residuen
Residuals vs Fitted
0.00
0.02
0.04
Leverage
0.20
3.53 2.5
2
● 100
● 89
91
●
1.5
0.10
0.00
Cook's distance
"Cook's dist vs Leverage " * h[ii]/(1 − h[ii])
●
●
●
●
●
●
●
●
●
●
●
●
1
0.5
0
0.0250000000000000
Leverage hii
Abbildung 6.2: (Von oben nach unten, links nach echts) a) Residuals vs Fitted, "Tukey-Anscombe-Plot", b) Normal
Q-Q-Plot, die Winkelhalbierende ist der ideale Ort für normalverteilte Residuen, c) T3-Plot, s. Kap. 6.3, d)
standardisisierte Residuen (die Residuen werden so skaliert, dass ihre Standardabweichung gleich Eins wird)
über Fitted, e) Cook’s distance gibt ein Mass für den Einfluss jeder einzelnen Messung, "leave one out", f)
Leverage ist der Einfluss eines Datenpunktes durch seine Lage weit entfernt vom Schwerpunkt, g) Cook’s
distance vs Leverage, haben die beiden Grössen etwas miteinander zu tun? (Leider sind Titel und Achsen nicht
richtig skaliert)
76
6.3 Bemerkungen zum T3-plot vs. Normal Q-Q Plots
Bemerkungen:
Hebelwirkung (Leverage), zeigt den relativen Einfluss eines einzelnen Punktes xi in der x-Richtung:
(6.9)
hi =
(xi − x̄)2
1
+ Pn
2
n
k=1 (xk − x̄)
Eine gute Faustregel sagt, dass ein Punkt einen sehr starken Einfluss hat, wenn
hi >
2p
n
ist, wobei p die Anzahl Parameter im Modell ist.
Cook’s Distance:
s
(6.10)
Ci = |r(i) |
n − p hi
p 1 − h1
Dabei ist r(i) dasjenige Residuum, das der Punkt xi hat, wenn man dasselbe Modell an alle Punkte mit
Ausnahme dieses betrachteten Punktes anpasst.
6.3 Bemerkungen zum T3-plot vs. Normal Q-Q Plots
Der Normal-Q-Q-Plot mit qqnorm gibt einen groben Eindruck, wie gut die Daten einer Normalverteilung folgen. Man benötigt jedoch Erfahrung, um diese Art der Darstellung zu beurteilen, siehe
norm.test {asuR}. Von S.Ghosh (1996) wurde eine grafische Methode entwickelt, die auf der erzeugenden Funktion einer Verteilung basiert. Sie kann für einen Datensatz die Konfidenzintervalle aufzeichnen,
dass er normalverteilt ist, s. T3plot {cwhmisc}. Dieses Hilfsmittel ist leichter zu interpretieren als der
Q-Q-Plot.
6.4 Mehrfache Varianzanalyse
Bei der mehrfachen Varianzanalyse betrachtet man mehrere Faktoren, deren Einfluss auf die Zielgrösse
additiv sein soll. Das Modell für die zweifachen ANOVA wird so formuliert:
xijk = µ + ai + bj + cij + ijk
So schreibt man
growth ~ diet + coat + diet : coat
oder kürzer
growth ~ diet * coat
wobei der *-Operator bedeutet "alle Haupteffekte (ai und bj ) und ihre Wechselwirkungen (cij )", und der
Doppelpunkt bedeutet "Wechselwirkung zwischen". Weitere Operatoren in linearen Modellen werden in
Kap.7.3 besprochen.
> fact <- read.table("./Data/factorial.txt", header = TRUE)
> names(fact)
[1] "growth" "diet"
"coat"
> fact
77
6 Varianzanalyse, ANOVA
1
2
3
4
5
6
7
8
9
10
11
12
growth diet coat
6.6
A light
7.2
A light
6.9
B light
8.3
B light
7.9
C light
9.2
C light
8.3
A dark
8.7
A dark
8.1
B dark
8.5
B dark
9.1
C dark
9.0
C dark
> model <- aov(growth ~ diet * coat, data = fact)
> summary(model)
diet
coat
diet:coat
Residuals
Df
2
1
2
6
Sum Sq Mean Sq F value Pr(>F)
2.6600 1.3300
3.677 0.0907
2.6133 2.6133
7.226 0.0361
0.6867 0.3433
0.949 0.4383
2.1700 0.3617
6.5 Multiples oder paarweises Testen
Die Varianzanalyse sagt uns, ob mindestens eine Gruppe verschieden von den übrigen ist, sie sagt uns aber
nicht, welche der Gruppen verschieden ist. Paarweise Tests bieten sich an, aber es gibt zwei Punkte zu
bedenken. Die Anzahl der Vergleiche aller Gruppen gegen alle steigt quadratisch mit der Anzahl n der
Gruppen, Tab. 6.2.
Tabelle 6.2: Anzahl Vergleiche
2
1
3
3
4
6
5
10
10
45
20
190
n
− 1)
n
2 (n
Multiple Vergleiche verringern die Trennschärfe jedes einzelnen Tests. Man argumentiert so: Eine Irrtumswahrscheinlichkeit von p = 5% bedeutet, dass durchschnittlich jeder 20-te Test an Daten aus derselben
Grundgesamtheit zur Verwerfung der Nullhypothese führt, obwohl sie zutrifft. Um die globale Irrtumswahrscheinlichkeit (die "family wise error rate") p bei k Tests zu erzwingen, muss jeder Einzeltest auf einem
geringeren Niveau als p durchgeführt werden. Das konservativste Vorgehen wählt p/k, genannt nach Bonferroni.
Man kann jedoch mit weniger strikten Niveaus durchkommen, nämlich mitp/k, p/(k − 1), p/(k − 2),
. . . , p/2, p/1. Dieses Vorgehen ist nach Holm benannt. Wir berechnen die k = 3 Tests für die Höhendaten:
> (tad <- t.test(alp$h, dav$h))
Welch Two Sample t-test
78
6.5 Multiples oder paarweises Testen
data: alp$h and dav$h
t = 0.6206, df = 76.801, p-value = 0.5367
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-2.02673 3.86173
sample estimates:
mean of x mean of y
23.0950
22.1775
> (tal <- t.test(alp$h, lae$h))
Welch Two Sample t-test
data: alp$h and lae$h
t = -3.7992, df = 28.67, p-value = 0.0006976
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-15.53287 -4.65808
sample estimates:
mean of x mean of y
23.0950
33.1905
> (tdl <- t.test(dav$h, lae$h))
Welch Two Sample t-test
data: dav$h and lae$h
t = -4.2271, df = 26.73, p-value = 0.0002462
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-16.36123 -5.66472
sample estimates:
mean of x mean of y
22.1775
33.1905
> pval <- c(tad$p.value, tal$p.value, tdl$p.value)
> names(pval) <- c("A-D", "A-L", "D-L")
und ordnen die p-Werte p1 , p2 , . . . , pk aufsteigend:
p(1) ≤ p(2) , . . . , ≤ p(k) .
Dann werden diese geordneten Werte mit den aufsteigenden Niveaus p/k, p/(k − 1), . . . p/2, p/1 verglichen:
(6.11)
p(1) < p/k, p(2) < p/(k − 1), . . . , p(k−1) < p/2, p(k) < p/1
oder, was dasselbe ist, die adjustierten Wahrscheinlichkeiten p(1) ∗ k, p(2) ∗ (k − 1), . . . , p(k−1) ∗ 2, p(k)
werden mit dem globalen p verglichen:
79
6 Varianzanalyse, ANOVA
p(1) ∗ k < p, p(2) ∗ (k − 1) < p, . . . , p(k−1) ∗ 2 < p, p(k) < p
(6.12)
Dann zeigen die erfolgreichen Tests (TRUE) die gewünschten Differenzen:
> p <- 0.05
> (testp <- (sort(pval) <= p/(3:1)))
D-L
TRUE
A-L
A-D
TRUE FALSE
> cumprod(testp) == 1
D-L
TRUE
A-L
A-D
TRUE FALSE
> p.adjust(pval, "holm") < p
A-D
FALSE
A-L
TRUE
D-L
TRUE
Die Verwendung des comprod sorgt dafür, dass auf ein FALSE kein TRUE mehr folgen kann (aus theoretischen Gründen. Bemerkung: p.adjust ordnet die pi nicht explizit um.
Im Standardpaket stats finden wir andere Varianten von p.adjust, vgl. die Hilfe. Zum einfacheren
Verständnis benutzen wir ein künstliches Beispiel:
> px <- c(0.007, 0.01, 0.02, 0.022, 0.06)
> p.adjust(px, "bonferroni") < p
[1]
TRUE FALSE FALSE FALSE FALSE
> p.adjust(px, "holm") < p
[1]
TRUE
TRUE FALSE FALSE FALSE
> p.adjust(px, "hochberg") < p
[1]
TRUE
TRUE
TRUE
TRUE FALSE
> p.adjust(px, "hommel") < p
[1]
TRUE
TRUE
TRUE
TRUE FALSE
Es scheint keinen Grund zu geben, die unmodifizierten Bonferroni-Korrekturen zu verwenden, weil
Holms Methode immer bessere Resultate liefert, unter denselben allgemeinen Bedingungen. Die Methoden von Hochberg und Hommel gelten für unabhängige Hypothesen, und dies ist bei uns nicht der Fall. Es
ist daher angebracht, in jedem Fall Holms Methode zur Kontrolle der globalen Fehlerrate zu verwenden.
80
7 Korrelation, Regression
7.1 Zweck
Oft variieren am selben Objekt gemessene Variablen miteinander im gleichen Sinne, z.B. Körpergrösse und
Gewicht, Energiebedarf und Gewicht, Körpergrösse und Schuhgrösse. Das kann bei einer Analyse stören,
denn oft möchte man das Verhalten einer Zielgrösse mit möglichst wenigen anderen Einflussgrössen erklären. Die Sparsamkeit beim Einbezug von erklärenden Variablen entspricht "Occam’s Razor", oder wie
Einstein es formulierte: "mach es so einfach wie möglich, aber nicht einfacher".
7.2 Methoden
Ein Mass für die gegenseitige lineare Abhängigkeit von metrischen (reellen) Grössen ist die Korrellationsmatrix. Sie enthält alle paarweise berechneten Korrelationskoeffizienten
PN
− x̄)(yi − ȳ)
SPxy
=p
P
N
SSQx · SSQy
2
2
i=1 (yi − ȳ)
i=1 (xi − x̄) ·
rxy = qP
N
i=1 (xi
Die Grösse
r
r
n−2
1 − r2
ist t-verteilt mit n − 2 Freiheitsgraden. Man sie daher mit einem t-Test auf Verschiedenheit von Null testen.
7.3 Regressionsanalyse
Die Regressionsanalyse sucht einen möglichst gut angepassten linearen Zusammenhang zwischen den (i =
1..n) Beobachtungen von P (einer oder mehreren) Einflussgrössen xki , k = 1..P und einer Zielgrösse y mit
den gemessenen Werten yi .
yi =
P
X
(ak xki ) + i ,
i aus N (0, σ 2 I).
k=1
Die zu bestimmenden Grössen sind die ak , die Grösse σ 2 ist unbekannt und wird mitgeschätzt. Die Schreibweise N (0, σ 2 I) drückt aus, dass die i unabhängig sind und alle aus derselben Normalverteilung N (0, σ 2 )
stammen. Den Fall, dass die i nicht unabhängig voneinander sind und nicht alle aus derselben Normalverteilung stammen, gibt man durch eine kompliziertere Matrix Σ in N (0, Σ) an. Er erfordert eine gesonderte
Behandlung, die wir nicht besprechen.
Der zu minimierende Ausdruck ist:
81
7 Korrelation, Regression
(7.1)
n
X
2i =
i=1
n
P
X
X
i=1
!2
(yi − ak xki )
k=1
d.h. wir minimieren die Summe der quadrierten Residuen. Die Lösung kann in geschlossener Form angegeben werden, aber diese ist hier nicht von Interesse. Siehe Faraway [2005], der auch die geometrische
Veranschaulichung dieser Minimierung zeigt.
7.3.1 Syntax of linear models in R
Die in R gewählte Schreibweise für lineare Modelle kennt folgende Operatoren:
• + Einflussgrösse wird ins Modell eingeschlossen, "1" steht für das konstante Glied, es wird immer
implizite eingeschlossen, wenn es nicht mit 1äusgeschlossen wird,
• * Einflussgrössen und Wechselwirkungen werden eingeschlossen,
• - Einflussgrösse wird weggelassen,
• : Wechselwirkung,
• / Hierarchie (Nesting) von Einflussgrössen,
• ^ alle Wechselwirkungen bis zum gegebenen Exponenten werden eingeschlossen,
• I() alle Operatoren in der Klammer von I() nehmen wieder ihre übliche arithmetische Bedeutung
an.
7.3.2 Beispiel für die einfache Regression und Residuenanalyse
Wir behandeln zuerst ein Beispiel der einfachen Regression, d.h. es wird nur ein Regressor einbezogen.
> mod0 <- lm(h ~ 1, data = alpBH)
> summary(mod0)
Call:
lm(formula = h ~ 1, data = alpBH)
Residuals:
Min
1Q Median
-15.78 -3.98
1.32
3Q
5.47
Max
10.22
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
23.48
1.07
22
<2e-16
Residual standard error: 6.66 on 38 degrees of freedom
> mod1 <- lm(h ~ bhd, data = alpBH)
> summary(mod1)
82
7.3 Regressionsanalyse
Call:
lm(formula = h ~ bhd, data = alpBH)
Residuals:
Min
1Q
Median
-5.36253 -1.50628 -0.00827
3Q
1.51785
Max
7.72828
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
7.5331
1.2222
6.16 3.8e-07
bhd
0.3783
0.0271
13.95 2.6e-16
Residual standard error: 2.7 on 37 degrees of freedom
Multiple R-squared: 0.84,
Adjusted R-squared: 0.836
F-statistic: 195 on 1 and 37 DF, p-value: 2.6e-16
> anova(mod0, mod1)
Analysis of Variance Table
Model 1: h ~ 1
Model 2: h ~ bhd
Res.Df
RSS Df Sum of Sq
F Pr(>F)
1
38 1684.6
2
37 269.2 1
1415.5 194.6 2.6e-16
> mod2 <- lm(h ~ bhd + I(bhd^2), data = alpBH)
> summary(mod2)
Call:
lm(formula = h ~ bhd + I(bhd^2), data = alpBH)
Residuals:
Min
1Q Median
-4.3462 -1.2497 -0.0719
3Q
1.0619
Max
6.4195
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.13875
2.35263
-0.48 0.63129
bhd
0.84936
0.11730
7.24 1.6e-08
I(bhd^2)
-0.00551
0.00135
-4.09 0.00023
Residual standard error: 2.26 on 36 degrees of freedom
Multiple R-squared: 0.891,
Adjusted R-squared: 0.885
F-statistic: 147 on 2 and 36 DF, p-value: <2e-16
> ind <- sort.list(alpBH$bhd)
83
7 Korrelation, Regression
xli <- c(0, 80)
plot(alpBH, xlim = xli, ylim = c(0, 45), xlab = "bhd in [cm]",
ylab = "height in [m]")
abline(8, 0.45, lty = 2)
abline(8, 0.4, lty = 3)
abline(mod1, col = "darkgreen")
xx <- eval(parse(text = paste("seq(", paste(unlist(xli),
collapse = ","), ",0.5)", sep = "")))
yy <- predict(mod2, newdata = data.frame(bhd = xx))
lines(xx, yy, col = "red")
40
>
>
+
>
>
>
>
+
>
>
●
●
●●
●
● ●
●
●
●
●
●●
10
●
●
●
●●
●
0
●
●
● ●
●
● ●●
● ●●
●
●●●
●●
●
●
20
height in [m]
30
●
0
20
40
60
80
bhd in [cm]
Abbildung 7.1: Baumhöhen von Alptal, verschiedene Geraden (siehe abline() ) und die lineare (dunkelgrün) und die
quadratische Approximation, angepasst mit dem Modellen mod1 and mod2.
84
7.4 Box-Cox-Exponenten-Transformationen
Die drei Modelle mod0, mod1 und mod0 können beurteilt werden anhand ihrer
residual standard errors, welche Schätzungen von σ 2 sind:
6.66, 2.70, und 2.26.
Die Grössen Multiple R-squared bedeuten die totale Variabilität ërklärt"durch die Modelle mod1
und mod2 im Verhältnis zum "Nullmodell"mod0:
X
X
X
SSY :=
(yi − ŷmod0 )2 =
(yi − ȳ)2 , SSEi :=
(yi − ŷmodi )2
Ri2 =
SSY − SSEi
, i = 1, 2.
SSY
2
2
Hier haben wir Rmod1
= 0.840, dazu das etwas grössere Rmod2
= 0.891. Ideal wäre ein Modell mit R2 = 1,
aber dies kann hier nicht erreicht werden wegen der grossen Restvariabilität, wie aus Abb.7.1 ersichtlich ist.
2 , die die Anzahl Regressoren
Man benutzt auch eine Variante von R2 , genannt adjustiertes R2 oder Radj
2
2
im Modell berücksichtigt. Anders als R wächst das adjustierte Radj nur dann, wenn der neue Regressor
2 kann negativ werden, und es ist
das Modell stärker verbessert als durch Zufall allein zu erwarten wäre. Radj
2 wird so definiert:
immer kleiner oder gleich R2 . Radj
1 − (1 − R2 )
N −1
,
N −p−1
dabei ist p die totale Anzahl der Regressoren im linearen Modell (aber ohne den konstanten Term mitzuzählen), und N ist die Stichprobengrösse.
7.4 Box-Cox-Exponenten-Transformationen
Sind die Punktewolken von Daten nicht "gerade" oder gleicht ihre Form eher einer "Trompete" als einem
gleichmässig breiten Band, so verwendet man Transformationen (Wurzel, Logarithmus) der Daten, um diese
Unschönheiten zu mildern oder zu beseitigen. Die Box-Cox-Transformationen
(7.2)
(7.3)
yλ − 1
für λ 6= 0
λ
= log(y) für λ = 0
y (λ) =
> bct <- function() {
+
par(mfrow = c(1, 1))
+
inc <- c(3, 2, 1, 0.5, 0.25)
+
ind <- c(inc, -rev(inc))
+
seo <- seq(along = inc) + 1
+
ltyp <- c(seo, rev(seo) + 1)
+
colr <- c(seo, rev(seo))
+
curve(log(x), xlim = c(0, 3), ylim = c(-3, 3), col = 1,
+
lty = 1)
+
abline(0, 0, lty = 3)
+
for (ii in seq(along = ind)) curve((x^ind[ii] - 1)/ind[ii],
+
add = TRUE, col = colr[ii], lty = ltyp[ii])
+
legend(0.2, 3, cex = 0.8, lty = c(1, ltyp), legend = c("ln",
85
7 Korrelation, Regression
3
> bct()
0
−3
−2
−1
log(x)
1
2
ln
3
2
1
0.5
0.25
−0.25
−0.5
−1
−2
−3
0.0
0.5
1.0
1.5
2.0
2.5
3.0
x
Abbildung 7.2: Die bei der Box-Cox-Transformation verwendeten Funktionen
Werte von k = λ.
+
+ }
xλ −1
λ
und ln x, die Legende zeigt die
as.character(ind)), col = c(1, colr), merge = TRUE)
sind eine von λ abhängige Familie, die so skaliert ist, dass die Logarithmus-Transformation mit λ = 0 stetig
in die Potenz- und Wurzeltransformationen eingebettet ist (λ > 0 bzw. λ < 0), Abb. 7.2. Diese spezielle
Form der Transformation wurde deshalb gewählt, weil hier alle Funktionen mit derselben Steigung 1 durch
ein und denselben Punkt (1, 0) gehen.
Die Funktion boxcox() in "library(MASS)" berechnet für gegebene Daten eine Gütefunktion, unter
deren Maximum das optimale λ liegt. Ziel ist einerseits, Linearität herzustellen, andererseits, für Homogenität der Varianzen zu sorgen. Kann der Box-Cox-Algorithmus nicht helfen, so muss man nach anderen,
nichtlinearen Verfahren suchen, die z.B. in "Generalized Linear Models" glm(), "Nonlineare Models" nlm
implementiert sind.
Faustregel 4. Fällt das optimale λ gemäss Box-Cox deutlich als λ 6= 0 aus, so logarithmiert man Einflussund Zielgrösse. Wenn λ = 0 suggeriert wird, so logarithmiert man nur die Zielgrösse.
86
7.4 Box-Cox-Exponenten-Transformationen
Begründung für λ 6= 0: man vernachlässigt die Subtraktion von 1 im Zähler und die Division. Logarithmiert
man beide Seiten vonMan erhält mit:
(7.4)
(7.5)
y = axb
log y = log a + b log x
so wird man auf ein lineares Regressionsproblem in log x und log y geführt.
87
7 Korrelation, Regression
7.5 Reisigdaten zum Pipe-Modell
Das Pipe-Modell (Shinozaki, K., et al. 1964) ist eine interessante Hypothese, um die Biomassenverteilung
in einem Baum zu beschreiben, insbesondere in der Krone, s Abb. 7.3.
Abbildung 7.3: Das Pipe-Modell nimmt an, dass bei gewissen Baumarten die Biomasse oberhalb eines Querschnittes
im Stamm oder einem Zweig proportional ist zur Anzahl Leitungsbahnen ("pipes") in diesem Querschnitt ist,
gestrichelt = Stammkern. See Hoffmann, Usoltsev, 2000
In der Publikation (Hoffmann, Usoltsev, 2002) werden russische Zweig- und Reisigdaten verwendet .
Die erhobenen Variablen sind d: BHD[cm], dc: Durchmesser am Kronenansatz[cm], wf : Trockenmasse
der Krone[kg], sp: species, wobei a = "Birch Middle Urals", b = "Birch Turgai",c = "Birch South Urals",d
= "Japanese Birch",e="Birch Kazakh Low Hills",f ="Aspen Kazakh Low Hills",I="Spruce Urals",K="Fir
Urals",L="Pine Turgai natural stands.",M ="Pine Turgai plantations",N ="Pine Urals", s. Abb. 7.4:
> BL <- read.table("./Data/Birch1.dat", header = TRUE,
+
as.is = 3)
> names(BL)
[1] "dc" "wf" "sp"
> dim(BL)
[1] 535
3
> CN <- read.table("./Data/Pine1.dat", header = TRUE, as.is = 4)
> names(CN)
88
7.5 Reisigdaten zum Pipe-Modell
[1] "d"
"dc" "wf" "sp"
> dim(CN)
[1] 529
plot(0, xlim = range(c(CN$dc, CN$d + 10)), ylim = range(CN$wf),
xlab = "dc links, d rechts", ylab = "wf", type = "n")
points(CN$dc, CN$wf, pch = 21, col = "blue")
points(CN$d + 10, CN$wf, pch = 24, col = "red")
points(BL$dc, BL$wf, pch = 1, col = "green")
60
>
+
>
>
>
4
●
50
●
30
0
10
20
wf
40
●
●
● ●
● ●●
●
●
● ●● ●
●
●
●
●
●
●●
●
● ●●
●
●
●
●
●●●●●
●
●
●●●● ●●●
●
● ●
●●● ● ●●● ●
●
● ●●
●●●
●
●
●
● ● ●●
●●
●
●
●
●●
●● ●
●
●
●
●
●
●
●
●
●
● ●●●
●
●
●
●
●
●
●
●
●
●
● ● ●●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
0
10
20
30
●
●
40
50
60
dc links, d rechts
Abbildung 7.4: Reisigdaten; grün: Laubholz, wf vs. dc, ; blau: Nadelholz, wf vs. dc; rot: Nadelholz, wf vs. d. Die
roten Datenpunkte sind um 10 Einheiten nach rechts verschoben, um ihre weiter aufgefächerte Trompetenform
klarer zu zeigen.
Die Prüfung mit Box-Cox liefert für die Laubbaumarten λ = 0.38, und für die Nadelbaumarten λ = 0.29,
beide deutlich von Null verschieden. Wir werden also die Einflussgrössen d und dc und die Zielgrösse wf
logarithmieren.
>
>
>
>
>
BL$ldc <- log(BL$dc)
BL$lwf <- log(BL$wf)
CN$ld <- log(CN$d)
CN$ldc <- log(CN$dc)
CN$lwf <- log(CN$wf)
89
7 Korrelation, Regression
−1500
op <- par(mfrow = c(1, 2))
bxd <- boxcox(wf ~ dc, data = BL, lambda = seq(0, 0.7,
length = 10))
lambda.opt.d <- bxd$x[which.max(bxd$y)]
bxc <- boxcox(wf ~ dc, data = CN, lambda = seq(0, 0.7,
length = 10))
lambda.opt.c <- bxc$x[which.max(bxc$y)]
par(op)
95%
−1600
log−Likelihood
−1450
−1900
−1550
−1800
−1500
log−Likelihood
−1400
95%
−1700
>
>
+
>
>
+
>
>
0.0
0.2
0.4
0.6
0.0
0.2
λ
0.4
0.6
λ
Abbildung 7.5: Box-Cox zur Bestimmung des Exponenten, Null ist offensichtlich nicht im 95%-Intervall für λ. Dieses
Intervall erstreckt sich zu beiden Seiten des Maximalwertes, angegeben durch die gestrichelten Geraden.
> lmdc <- lm(lwf ~ ldc, data = CN)
> summary(lmdc)
Call:
lm(formula = lwf ~ ldc, data = CN)
Residuals:
Min
1Q
-1.3864 -0.2242
Median
0.0242
3Q
0.2789
Max
1.0483
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.1301
0.0510
-81.0
<2e-16
ldc
2.2982
0.0249
92.4
<2e-16
Residual standard error: 0.406 on 527 degrees of freedom
Multiple R-squared: 0.942,
Adjusted R-squared: 0.942
F-statistic: 8.55e+03 on 1 and 527 DF, p-value: <2e-16
> lmd <- lm(lwf ~ ld, data = CN)
> summary(lmd)
90
7.5 Reisigdaten zum Pipe-Modell
Call:
lm(formula = lwf ~ ld, data = CN)
Residuals:
Min
1Q
-2.6023 -0.4673
Median
0.0192
3Q
0.5189
Max
2.4902
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.6284
0.0920
-39.4
<2e-16
ld
1.7750
0.0389
45.6
<2e-16
Residual standard error: 0.758 on 527 degrees of freedom
Multiple R-squared: 0.798,
Adjusted R-squared: 0.797
F-statistic: 2.08e+03 on 1 and 527 DF, p-value: <2e-16
> cwhl <- function(x) c(73, 0, 3, 81, 2, 6)[which(x ==
+
LETTERS) - 8]
> CN$colr <- as.vector(sapply(CN$sp, cwhl))
> unsp <- sort(unique(CN$sp))
Modell lmdc beschreibt das Pipe-Modell sehr gut, seine Residuen, s. Abb. 7.7, sind kleiner als die von
Modell lmd, Abb. 7.8, aber die letzteren folgen der Normalverteilung besser.
91
7 Korrelation, Regression
plot(0, xlim = range(c(CN$ldc, CN$ld + 2)), ylim = range(CN$lwf),
xlab = expression(c(log(d[c]), log(d))), ylab = "Reisigtrockenmasse [kg]",
type = "n")
points(CN$ldc, CN$lwf, pch = CN$sp, cex = 0.8, col = CN$colr)
points(CN$ld + 2, CN$lwf, pch = CN$sp, cex = 0.8, col = CN$colr)
abline(lmdc, col = "darkgreen")
abline(lmd$coefficients[1] - 2 * lmd$coefficients[2],
lmd$coefficient[2], col = "darkgreen")
for (ii in unsp) {
lines(lowess(cbind(CN$ldc[CN$sp == ii], CN$lwf[CN$sp ==
ii])), col = cwhl(ii))
}
for (ii in unsp) {
lines(lowess(cbind(CN$ld[CN$sp == ii] + 2, CN$lwf[CN$sp ==
ii])), col = cwhl(ii))
}
II
II
I
I
I
IIIIIIII
IIII IIIII
N
MII I NN N
M III
INN
MII INI I NNLNN
IN
ILIII N
NN N
IN
NIM
N
N
L
I
L
N
I
I
I N NN
N
N
N
N
IIIIIIN
N
L
N
N
N
N
N
NN
N
IIIN
IL
N
N
N
I
I
N
N
N
N
N
N
IIIN
I
N
NNN
NN
N
NL
N
IIMN
INN
N
NN
M
IN
N
NL
LN
N
IIIIN
IK
IIMIM
M
M
M
NNNL
N
N
N
K
IN
IIN
N
LM
L
N
NNNN
N
N
M
M
IN
IN
M
M
N
N
N
N
I
I
I
L
L
N
N
N
N
M
N
I
N
N
I
I
N
N
N
N
I
I
I
N
N
N
N
M
M
LK
L
M
M
IN
N
N
N
IN
I IKN
K
N
NNN
N
IN
IM
M
M
N
NN
M
M
N
N
N
N
IM
N
NN
IN
N
N
M
K
KM
N
N
NN
N
N
ILIM
IIIN
IM
IIN
M
IN
LN
IM
IK
IM
N
N
IN
N
N
M
M
IN
N
N
NLNL
NL
N
N
N
M
M
NN
N
N
N
N
N
N
M
N
N
L
N
N
M
N
N
I
I
M
M
M
L
L
I
I
M
M
M
M
I
I
N
NM L
N
IN
IN
K
K
N
IN
IM
LK
M
M
N
N
L
LMM
M
N
IM
ILL
N
N
NN L
LIN
LM
M
NN
IN
IM
IN
N
N
M
I
LN
IN
IM
IM
M
MK M
IL
N
N
NL
N
IIM
N
N
L
M
IM
M
M
K
M
MNNM
L
L
N
N
N
IN
M
I MNM
M
N
N
N
N
M
NLN
IN
IN
L
M
M
N
I
I
L
L
K
K
K
N
K
K
N
N
L
M
M
L
L
M
M
NM
IL
IN
M
NNIM
NNLN
NN
N
I L
IN
N LLN
M
M
IN
N
N
NN
M
M
M
M
M
IM
IN
M
M
M
IN
IN
L
LM
L
L
M
M
M
M
N
N
N
M
L
LM
IM
IM
N
N
M
L
L
N
N
N
N
NNM
N
M
M
K
K
M
N
N
M
M
N
N
N
K
M
M
N
KK
K
M
I
I IM
M
M
MM
M
MM
M
N
M
IM
I LNM
LM
LLM
LM
LMM
NM
N N
N
N
N
M
M
L
I
L
M
M
L
I
I
N
N
M
L
L
M
M
M
M
M
N
N
L
L
M
M
M
N
LIM
INM
M
M
NL
MLIM
MM
NMN
N
LM
LLN
LL
M
M
M LLL
KK
LK
NN
L
LIMM
NM
LK
LLL
LM
M
M
MM KN
K
K
N
M
M
M
N
N
N
M
M
N
N
LL
M
M
L
LM
LN
MM
L I LM
I
NLM
NN
M M M
N
M
MLIIN
N
LIM
L
ILN
MM
LM
L LM
N
N
LL
LL N
NM
L
L
MLM
M
M
M
M
M
M
M
M
L
L
M
L
M
M
I
I
M
M
N
LNN LN
LL M
N
L
N
LNMN
LM
NNM L L
ML
M
MMLLM LLMM
LLM
M
M
M
LM
L
M
MML M
M
M
LM
L LM
M L
M
LLL M
M L LL
L
L
M
M
LL L
L
LL
LL
L L
L
L
L
N
N
L
L
L
L
L
0
−2
−6
−4
Reisigtrockenmasse [kg]
2
4
>
+
+
>
>
>
>
+
>
+
+
+
>
+
+
+
L
L
0
1
2
3
4
5
6
c(log(dc), log(d))
Abbildung 7.6: ln(Reisigtrockenmasse) vs. ln(Durchmesser am Kronenansatz) (links) und ln(BHD) (rechts, verschoben) für Nadelholz. Die geglätteten Kurven sind für die einzelnen Standorte (farbig) und für die Gesamtheit der
Daten (dunkelgrün) eingetragen. Die Standorte sind im Text angegeben.
92
7.5 Reisigdaten zum Pipe-Modell
> plotLmT(lmdc)
T3−plot of residuals
30
Residuals vs Fitted
5%
1%
−4
−2
0
2
10
−10
−30
●●●
●●
●●●
●●
● ●●
●
●
●
● ● ●●
● ●●
● ●
●●
●
●
●
●●●
●
●●
● ●
●
●
●
● ●●
●
●●
●
●
●
●●●●●
●
●
●
●
●●●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●●
● ●●
●
●
●●●
●●
●
●
●
●
●
●
●
● ●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ● ● ●●●●
●
●
●
●
●
●
●
●
●
●
●● ●
● ● ●●
●
●●● ●
●
●
● ●
●
●●●
●●
●●
●
●
●
●● ●
●●
● ●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●● ●
●
●
● ● ●●● ●
●
●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●●
●
●●
●
●●
●
●
●●
●● ●
●
●
●
●
● ●● ●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
● ●
● ●
●●●
● ●
●● ● ●
●●
●
●
●●
●●
●
● ●●
●
●●●● ● ●
●●●
●●
●●
●
●
●
●
●
●●● ●
●
●
●●
●●
● ●
●
●
●
●
●
●
●
● ●
●
● ●●● ●●
●
●● ●● ●
●
●
●
●
●
●
●
●
●
●
● 271 ●
96
86 ●
T3
0.5
−0.5
−1.5
Residuals
●
4
−1.0
−0.5
Fitted values
0
Fitted values
2
4
0.00 0.02 0.04 0.06
Cook's distance
1.5
1.0
0.5
0.0
Standardized residuals
1.0
Cook's distance
86 ●
● 271 ● 96
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●●
●●
●
● ●●
●●●●●
●
●
●● ● ●
●●
●●
●●
● ●
●
● ●●
●
●●
●●
●
● ●●●●
● ●
●● ●
●●
●●
●
● ●●
●
●
●●
●●
●●
● ●
●●
●
●●
●
●
●● ●●●
●●●
●
●
●
●●
●
●●●
●● ●
●●●
●●
●
●
●
●
●
●●
● ●
●
●
● ●●
●
●
●
●
●
●
●
●
●
●● ●
●●●●●
●●
●
●●
● ● ●●●●●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
● ●● ●
●
●
●
●
● ●
●
●
●
●●●
●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●●
●
●
● ●
●
●●
●
●
●● ●●●●● ●
●
●●
●●
●
●●
●
●
●●●●●●
●
●●
● ●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●●●●●
●
●●●●●●
●● ● ●● ●●●
●
●●
●
●
●
●
●
●
●
●
●
●
● ● ●●●
●
●●●
●
●●●●●
●
●
●●
●
●
●
●
●●● ●
●
●
●
●●●● ●
●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
● ●●●●●
●
●● ●
●
●
●
●
●
●
●
● ●●
● ● ●
●●
● ●
●
●
●●
●
●●●●
●●●●
●●●●●
●●●
● ●●
● ●
●●
● ●
● ●● ● ● ● ● ●
−2
0.5
t
Scale−Location
−4
0.0
69
271
25
0
100
300
500
Obs. number
Abbildung 7.7: Diagnostics for model "lmdc"
93
7 Korrelation, Regression
> plotLmT(lmd)
T3−plot of residuals
3
30
Residuals vs Fitted
5%
1%
0
−30
−10
T3
2
−1.0
−0.5
0.0
Scale−Location
Cook's distance
72 ●
40 ●
● ●
● ●
● ●
●
●
● ● ●● ●
● ● ●
●
●●
●● ● ●●●●
●● ● ●
● ●
●
● ●
●
●
● ●
●
●
●
●
● ● ● ●●
●
●
●
●
●
●
●
● ●● ●
●
●●
●● ●●
●●
●● ●●
●●
●
●●
●
●●●
●
●
● ●● ●●●
●●●
●●
●
●●
●●
●●
●
●
●
●
●
●
●
●
●●
●
●
●●
●●
●
●
●
●●
● ●●
● ●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
● ● ●
●
●
●
●
●
●
●
●
● ●●
●●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
●●
●●●●●
●
●
●
●
●
●
●●●● ●
●
●●
●
●
●●●
●
●
●
●
●●●
●
●
●
●●
●
●
●●
●
●●
●●
●
● ●● ●
●
●
●●●
●
●
●
●●
●
●
●
●●●
●
●
●●
●
●
●
●●
●
●●●●
●
●
●
● ●●●●
●
●
● ●●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●●●
●● ●●
●
●●●
●●
●●
●● ●●●
●
●
● ●●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●● ● ● ●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●●
●●
●●●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●●●
●
●
●●
●
● ● ●
−4
−2
0
Fitted values
2
1.0
214
25
0
159
100
300
Obs. number
Abbildung 7.8: Diagnostiken für Modell "lmd"
94
0.5
t
0.00 0.05 0.10 0.15
1.5
1.0
0.5
−2
Fitted values
● 214
0.0
Standardized residuals
−4
Cook's distance
−1
1
● ●●●● ●●
●●
●● ●
●
●
●●
●
●●
●
●●
●●
●●●●
●
●
● ●
●
●
●
●
●
●
●
●●●●
●
●
●
●●
●●●●●
●
●●
●
●
●●
●●●●
●
●
●
●
●
●
●
●
● ●●
● ●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●●●
● ●●
●
●
●
●
●
●
●●●
●
●●● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●● ●●
●
●
●
●●
●
●
●●
●●●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
● ●
●
●
●
●
●● ● ●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
● ●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ● ● ●
●●
●
●
●
●●●
●●●●
●
●●
●● ●
●
●●
●●●●●
●
●●●
●●
●
●
●●●●●
●
●
●●
●●
●
●●●
●
●●
●
●●
●
●
●●●● ●
● ●● ●
●
●
● ●● ●
● ●
●
●
●
● ●
●
40 ●
72 ●
10
●● ●
●
−3
Residuals
2
● 214
500
8 Multiple Regression
Bei der multiplen Regression haben wir eine kontinuierliche Zielgrösse und zwei oder mehrere kontinuierliche Einflussgrössen. Einige wichtige Punkte sind zu beachten:
• Welche Einflussgrössen sollen eingeschlossen werden?
• Zeigt sich Krümmung im Zusammenhang der Zielgrösse mit den Einflussgrössen?
• Gibt es Wechselwirkungen zwischen den Einflussgrössen, d.h. welche Ausprägungen von Kombinationen von Einflussgrösse A mit Einflussgrösse B stechen heraus?
• Wie stark sind Korrelation rAB 6= 0 zwischen den Einflussgrössen?
• Besteht die Gefahr der Überparametrisierung, d.h. passt man sich durch den Einbezug von zu vielen
Einflussgrössen zu sehr an die zufälligen Fehler der Daten an?
Bevor man komplizierte Modelle anschaut, sollte man drei Dinge tun
• Die Scatterplotmatrix ansehen, um Muster zu erkennen,
• Baummodelle (tree-models im statistischen Sinne) benutzen, um zu sehen, ob komplizierte Wechselwirkumgen vorliegen,
• Verallgemeinerte additive Modelle (general addive models, gam) benutzen, um Krümmung zu untersuchen.
8.1 Ein Beispiel, das auch ein Baummodel, ein verallgemeinertes additives
Modell ’gam’ und lineare Modelle enthält
Wir zitieren ein aktuelles Beispiel aus der Erforschung der Luftverschmutzung aus dem Buch von Crawley
[R-Book]. Die Fragestellung lautet: Auf welche Art ist die Ozonkonzentration abhängig von der Windgeschwindigkeit, Lufttemperatur und der Intensität der Sonnenstrahlung?
> ozonD <- read.table("./Data/ozone.txt", header = TRUE)
> ozonD$temp <- (ozonD$temp - 32) * 5/9
> names(ozonD)
[1] "rad"
"temp"
"wind"
"ozone"
> dim(ozonD)
[1] 111
4
95
8 Multiple Regression
odat
rad
0.29
temp
-0.13
0.35
-0.5
0.7
wind
-0.61
ozon
2008-05-18, 21:34:45
Abbildung 8.1: Ozondaten
Die Lufttemperatur temp wird in ◦ C angegeben, die Masseinheiten aller anderen Grössen sind unspezifiziert. Aufruf:
par(mfrow=c(1,1)); SplomT(ozonD,cex=0.35, diag=0.5).
Die Scatterplotmatrix in Abb. 8.1 gibt uns eine erste Übersicht.
Die Zielgrösse Ozonkonzentration ozone findet man auf der y-Achse der untersten Reihe: wir sehen
eine stark negative Korrelation mit der Windgeschwindigkeit wind, eine stark negative Korrelation mit der
Lufttemperatur temp, und eine unklare, vielleicht buckelige Abhängigkeit von der Strahlung rad.
Man beginnt mit Vorteil mit einem multiplen Regressionsproblem mit nichtparametrischer Glättung s()
in einem verallgemeinerten additiven Modell modelG:
> op <- options(warn = -1)
> modelG <- gam(ozone ~ s(rad) + s(temp) + s(wind), data = ozonD)
> options(op)
Die für das Modell modelG in Abb. 8.2 gezeigten Vertrauensintervalle sind genügend eng,
um anzudeuten, dass die Krümmung im Zusammenhang von Ozon und Temperatur reell ist,
96
60
40
20
-20
0
s(temp,3.84)
40
20
0
-20
s(rad,2.76)
60
8.1 Einfacheres Baummodell, GAM und lineare Modelle
0
50
100
150
200
250
300
15
25
30
35
temp
40
20
0
-20
s(wind,2.92)
60
rad
20
5
10
15
20
wind
Abbildung 8.2: Grundmodell modelG, gam mit Glättung
aber die Krümmung des Zusammenhangs mit dem Wind ist fraglich, und ein lineares Modell könnte genügen für die Strahlung. Als nächsten Schritt passen wir ein Baummodell
an, um komplizierte Wechselwirkungen zwischen Ziel- und Einflussgrössen aufzuspüren. Aufruf:
op <- par(mfrow=c(2,2)); plot(modelG,ask=FALSE); par(op).
> library(tree)
> modelT0 <- tree(ozone ~ ., data = ozonD)
97
8 Multiple Regression
> plot(modelT0)
> text(modelT0)
temp < 28.0556
|
wind < 7.15
61.0
rad < 79.5
temp < 25.2778
12.2
21.0
34.6
wind < 10.6
temp < 31.3889
rad < 205
74.5
83.4 102.0
48.7
Abbildung 8.3: Grundmodell modelT0 zum Aufspüren von Wechselwirkungen
98
8.1 Einfacheres Baummodell, GAM und lineare Modelle
op <- par(mfrow = c(2, 2))
plot(residuals(modelT0))
T3plot(residuals(modelT0), lab = "T3-plot der Residuen",
legend.pos = "top")
T3plot(quantile(residuals(modelT0), c(0.025, 0.975)),
lab = "T3-plot der ge trimmten Residuen", legend.pos = "top")
par(op)
150
100
●
0
20
40
60
80 100
Index
−50
−150
●
●
●
●
●
●
●●
●
● ● ●
●
●
●●● ●● ● ●
● ● ●
●
●
●
●
●
●
● ●
● ●●
●● ● ●
●
●●●● ●
●
●●●●●●● ●● ●●
●●
●
●●
●●● ● ●●
●
●●
●
●
●●●
● ●
●
●●
●
● ●
●
●●
●
●
●●● ● ●
●
● ●
●●
● ●
●
●
●
●
●
●
●
T3
●
5%
1%
50
●
50
0
−50
residuals(modelT0)
T3−plot der Residuen
−1.0
−0.5
0.0
0.5
1.0
t
30
T3−plot der ge trimmten Residuen
10
5%
1%
−30
−10
T3
>
>
>
+
>
+
>
−1.0
−0.5
0.0
0.5
1.0
t
Abbildung 8.4: Residualsen und getrimmte Residuen (mittlere 95%) des Baummodells modelT0.
99
8 Multiple Regression
Das Bild 8.3 von Modell modelT0 zeigt, dass die Temperatur bei Weitem die wichtigste Einflussgrösse ist.
Die Windgeschwindigkeit ist sowohl bei hohen wie bei niedrigen Temperaturen, mit ruhiger Luft im Verein
mit hoher Ozonkonzentration unterscheidend. Die Zahlen am Ende der Zweige geben die mittlere Ozonkonzentration an. Die Temperatur hat einen kleinen, aber interessanten Effekt. Bei niedrigen Temperaturen hat
die Strahlung einen Einfluss bei hohen Windgeschwindigkeiten (>7.15), während bei hohen Temperaturen
die relativ niedrigen Windgeschwindigkeiten (<10.6) wichtig sind. In beiden Fällen ist jedoch geht höhere
Ozonkonzentration mit mit hoher Strahlung. Das Baummodell zeigt uns, dass die Struktur der Wechselwirkungen nicht besonders komplex ist. Die mittleren 95% der Residuen sind sogar sehr gut normalverteilt, s.
Abb. 8.4.
Ausgerüstet mit dieser Information (gekrümmter Einfluss von Wind, nicht-komplexer Wechselwirkungsstruktur) beginnen wir mit der linearen Modellierung, und zwar beginnen wir mit dem kompliziertesten
Modell: wir schliessen die Wechselwirkungen zwischen allen drei Einflussgrössen und die quadratische
Terme (um die Krümmung zu beschreiben) für alle drei Einflussgrössen ein.
> model1 <- lm(ozone ~ temp * wind * rad + I(rad^2) + I(temp^2) +
+
I(wind^2), data = ozonD)
> summary(model1)
Call:
lm(formula = ozone ~ temp * wind * rad + I(rad^2) + I(temp^2) +
I(wind^2), data = ozonD)
Residuals:
Min
1Q Median
-38.89 -11.20 -2.74
3Q
8.81
Max
70.55
Coefficients:
(Intercept)
temp
wind
rad
I(rad^2)
I(temp^2)
I(wind^2)
temp:wind
temp:rad
wind:rad
temp:wind:rad
Estimate Std. Error t value Pr(>|t|)
2.84e+02
9.68e+01
2.93
0.0042
-1.26e+01
5.25e+00
-2.41
0.0179
-2.48e+01
7.65e+00
-3.24
0.0016
-4.29e-02
3.26e-01
-0.13
0.8958
-3.62e-04
2.57e-04
-1.41
0.1627
1.89e-01
7.76e-02
2.43
0.0167
6.11e-01
1.47e-01
4.16 6.8e-05
4.28e-01
2.46e-01
1.74
0.0852
1.51e-02
1.35e-02
1.12
0.2660
6.70e-03
2.81e-02
0.24
0.8122
-7.78e-04
1.19e-03
-0.66
0.5136
Residual standard error: 17.8 on 100 degrees of freedom
Multiple R-squared: 0.739,
Adjusted R-squared: 0.713
F-statistic: 28.4 on 10 and 100 DF, p-value: <2e-16
Die dreifache Wechselwirkung ist klar nicht-signifikant, und so beginnen wir mit der Modellvereinfachung
und entfernen wir sie aus dem Modell, das liefert uns model2.
> model2 <- update(model1, ~. - temp:wind:rad, data = ozonD)
> summary(model2)
100
8.1 Einfacheres Baummodell, GAM und lineare Modelle
Call:
lm(formula = ozone ~ temp + wind + rad + I(rad^2) + I(temp^2) +
I(wind^2) + temp:wind + temp:rad + wind:rad, data = ozonD)
Residuals:
Min
1Q Median
-39.61 -11.45 -2.90
3Q
8.55
Max
70.32
Coefficients:
(Intercept)
temp
wind
rad
I(rad^2)
I(temp^2)
I(wind^2)
temp:wind
temp:rad
wind:rad
Estimate Std. Error t value Pr(>|t|)
2.59e+02
8.86e+01
2.92
0.0043
-1.15e+01
4.95e+00
-2.33
0.0220
-2.25e+01
6.78e+00
-3.31
0.0013
1.46e-01
1.52e-01
0.96
0.3391
-3.39e-04
2.54e-04
-1.33
0.1855
1.93e-01
7.72e-02
2.50
0.0141
6.17e-01
1.46e-01
4.22 5.2e-05
3.12e-01
1.71e-01
1.83
0.0709
6.75e-03
4.43e-03
1.53
0.1303
-1.13e-02
6.28e-03
-1.80
0.0756
Residual standard error: 17.8 on 101 degrees of freedom
Multiple R-squared: 0.738,
Adjusted R-squared: 0.715
F-statistic: 31.7 on 9 and 101 DF, p-value: <2e-16
Als Nächstes entfernen wir den am wenigsten signifikanten Zweifach-Wechselwirkungsterm aus model1,
hier wind:rad, und erhalten model3.
> model3 <- update(model2, ~. - wind:rad, data = ozonD)
> summary(model3)
Call:
lm(formula = ozone ~ temp + wind + rad + I(rad^2) + I(temp^2) +
I(wind^2) + temp:wind + temp:rad, data = ozonD)
Residuals:
Min
1Q Median
-43.17 -11.02 -4.08
3Q
7.32
Max
74.79
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.49e+02
8.94e+01
2.78 0.00641
temp
-1.00e+01
4.94e+00
-2.03 0.04464
wind
-2.11e+01
6.81e+00
-3.10 0.00253
rad
-2.36e-02
1.21e-01
-0.20 0.84516
I(rad^2)
-3.44e-04
2.57e-04
-1.34 0.18376
I(temp^2)
1.77e-01
7.75e-02
2.28 0.02451
I(wind^2)
5.81e-01
1.46e-01
3.97 0.00013
101
8 Multiple Regression
temp:wind
temp:rad
2.05e-01
8.86e-03
1.62e-01
4.31e-03
1.26
2.06
0.20899
0.04240
Residual standard error: 18 on 102 degrees of freedom
Multiple R-squared: 0.73,
Adjusted R-squared: 0.709
F-statistic: 34.5 on 8 and 102 DF, p-value: <2e-16
Dann entfernen wir die Wechselwirkung temp:wind aus model3 und erhalten model4.
> model4 <- update(model3, ~. - temp:wind, data = ozonD)
> summary(model4)
Call:
lm(formula = ozone ~ temp + wind + rad + I(rad^2) + I(temp^2) +
I(wind^2) + temp:rad, data = ozonD)
Residuals:
Min
1Q Median
-44.26 -11.17 -3.33
3Q
9.56
Max
78.42
Coefficients:
(Intercept)
temp
wind
rad
I(rad^2)
I(temp^2)
I(wind^2)
temp:rad
Estimate Std. Error t value Pr(>|t|)
1.44e+02
3.42e+01
4.22 5.3e-05
-4.96e+00
2.88e+00
-1.72
0.088
-1.30e+01
2.28e+00
-5.70 1.2e-07
-3.48e-02
1.21e-01
-0.29
0.774
-2.99e-04
2.55e-04
-1.17
0.243
1.18e-01
6.23e-02
1.90
0.060
4.45e-01
9.98e-02
4.46 2.1e-05
8.74e-03
4.32e-03
2.02
0.046
Residual standard error: 18 on 103 degrees of freedom
Multiple R-squared: 0.726,
Adjusted R-squared: 0.707
F-statistic: 38.9 on 7 and 103 DF, p-value: <2e-16
Bis jetzt haben wir alle Wechselwirkungen ausser der knapp signifikanten Wechselwirkung temp:rad hinausgeworfen. Der am wenigsten signifikante quadratische Term in model4 ist I(rad^2), also streichen
wir ihn und erhalten model5.
> model5 <- update(model4, ~. - I(rad^2), data = ozonD)
> summary(model5)
Call:
lm(formula = ozone ~ temp + wind + rad + I(temp^2) + I(wind^2) +
temp:rad, data = ozonD)
Residuals:
Min
1Q Median
-43.76 -11.16 -3.33
102
3Q
8.50
Max
78.85
8.1 Einfacheres Baummodell, GAM und lineare Modelle
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 143.11543
34.28697
4.17 6.2e-05
temp
-4.62265
2.86897
-1.61
0.110
wind
-13.04856
2.27867
-5.73 1.0e-07
rad
-0.11414
0.10005
-1.14
0.257
I(temp^2)
0.11820
0.06236
1.90
0.061
I(wind^2)
0.44667
0.09996
4.47 2.0e-05
temp:rad
0.00782
0.00426
1.84
0.069
Residual standard error: 18 on 104 degrees of freedom
Multiple R-squared: 0.722,
Adjusted R-squared: 0.706
F-statistic:
45 on 6 and 104 DF, p-value: <2e-16
Diese Streichung hat die fast nicht-signifikante Wechselwirkung wind:rad kaum verändert und den
Haupteffekt Temperatur temp bnicht-significant gemacht. Haupteffekte, die empfindlich sind auf Skalenänderungen wie die Temperatur sollten nicht eliminiert werden. Wir entfernen den Term wind:rad und
kommen zu model6.
> model6 <- update(model5, ~. - wind:rad, data = ozonD)
> summary(model6)
Call:
lm(formula = ozone ~ temp + wind + rad + I(temp^2) + I(wind^2) +
temp:rad, data = ozonD)
Residuals:
Min
1Q Median
-43.76 -11.16 -3.33
3Q
8.50
Max
78.85
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 143.11543
34.28697
4.17 6.2e-05
temp
-4.62265
2.86897
-1.61
0.110
wind
-13.04856
2.27867
-5.73 1.0e-07
rad
-0.11414
0.10005
-1.14
0.257
I(temp^2)
0.11820
0.06236
1.90
0.061
I(wind^2)
0.44667
0.09996
4.47 2.0e-05
temp:rad
0.00782
0.00426
1.84
0.069
Residual standard error: 18 on 104 degrees of freedom
Multiple R-squared: 0.722,
Adjusted R-squared: 0.706
F-statistic:
45 on 6 and 104 DF, p-value: <2e-16
Das Modell model6 ist schon ein recht gutes und sparsames Modell, aber die Trompetenform der Residuen in Abb. 8.5 legt z.B. eine log-Transformation nahe.
103
8 Multiple Regression
> plotLmT(model6)
T3−plot of residuals
−10
T3
●
−30
●
120
−1.0
−0.5
0.5
Fitted values
t
Scale−Location
Cook's distance
77 ●
●
●
●●
● ●●
●
● ●
●
●
●
●
●●
●
● ●
● ●
●
●
● ●●● ●●
●
●
● ●● ●
●
●
● ●●●● ●
● ●
●
●
●
●
●●● ● ●
●
●
●
●
●●
●
●
●
●●● ●●
●
● ●●●● ● ●
● ● ●
●
● ●●
●● ●
●
●●
●
●
●
●
●
●
● ●
● ●
Fitted values
●
0.4
23
53
●●
●
1.0
77
0.2
●
●
20 40 60 80
85
34
120
0
20
40
60
80 100
Obs. number
Abbildung 8.5: Diagnostiken für Modell 6
104
0.0
0.0
0.0 0.5 1.0 1.5 2.0
Standardized residuals
10
23
53
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ● ●
●● ●
● ●●
●
●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
● ● ●
●● ●
●● ● ●
●●
●
●
●
●● ●●●●
●
●● ● ●
●●
●
●
●
● ●●
●●
● ●●
● ●
●●●
● ●
●
●
●
●
20 40 60 80
5%
1%
30
77 ●
Cook's distance
40
0
−40
Residuals
80
Residuals vs Fitted
8.1 Einfacheres Baummodell, GAM und lineare Modelle
Wir formulieren daher model7 direkt mit allen Einflussgrössen von model6.
> model7 <- lm(log(ozone) ~ temp + wind + rad + I(temp^2) +
+
I(wind^2), data = ozonD)
> summary(model7)
Call:
lm(formula = log(ozone) ~ temp + wind + rad + I(temp^2) + I(wind^2),
data = ozonD)
Residuals:
Min
1Q Median
-2.0929 -0.2827 -0.0304
3Q
0.3325
Max
1.2301
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.760605
0.939571
2.94
0.0041
temp
0.030715
0.077498
0.40
0.6927
wind
-0.208702
0.062278
-3.35
0.0011
rad
0.002562
0.000544
4.71 7.6e-06
I(temp^2)
0.001074
0.001559
0.69
0.4925
I(wind^2)
0.006738
0.002728
2.47
0.0151
Residual standard error: 0.495 on 105 degrees of freedom
Multiple R-squared: 0.688,
Adjusted R-squared: 0.673
F-statistic: 46.4 on 5 and 105 DF, p-value: <2e-16
Jetzt wird der quadratische Term I(temp^2) irrelevant, wir lassen ihn weg und erhalten model8.
> model8 <- update(model7, ~. - I(temp^2), data = ozonD)
> summary(model8)
Call:
lm(formula = log(ozone) ~ temp + wind + rad + I(wind^2), data = ozonD)
Residuals:
Min
1Q
Median
-2.024335 -0.274534 -0.000488
3Q
0.313257
Max
1.282441
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.20873
0.48931
4.51 1.7e-05
temp
0.08356
0.01078
7.75 5.9e-12
wind
-0.22038
0.05977
-3.69 0.00036
rad
0.00253
0.00054
4.68 8.5e-06
I(wind^2)
0.00722
0.00263
2.75 0.00706
Residual standard error: 0.494 on 106 degrees of freedom
105
8 Multiple Regression
> plotLmT(model8)
T3−plot of residuals
● 17
2.0
−10
10
5%
1%
−30
● 20
●● ●
●
●
●
●
● ●●
●
● ● ●●
●● ●● ●●●● ●
●
●●
●● ●●
●
●●●● ●
●● ● ● ●
●
●
●
●
●
●
● ● ● ●
●
●●●●
●
●●
●
●● ●●● ●● ●●
●
● ●
●
●
●● ●
●
●
●●●●● ●●
●
● ●
●
●
● ● ●
●
●
●● ●
●
102 ●
T3
0
−1
−2
Residuals
1
Residuals vs Fitted
3.0
4.0
5.0
−1.0
−0.5
Fitted values
Fitted values
5.0
0.30
0.10
0.20
17
20
18
0.00
20 ●
11
●●
●
●
●
●
●●
●
●
●
●
● ●
● ●
●
●●
●
●●
●
●●
●
●
●
●● ●
● ●
●
●● ●
●
●● ●
●
● ●
● ●● ●● ●●
●
●
● ● ● ●● ● ● ●●
● ●
●
●●
●
●
●
●● ●●● ●
● ●
●
●
●
●●● ● ●
● ●●● ●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
4.0
1.0
Cook's distance
Cook's distance
0.0 0.5 1.0 1.5 2.0
Standardized residuals
Scale−Location
3.0
0.5
t
● 17
2.0
0.0
0
20
40
60
80 100
Obs. number
Abbildung 8.6: Diagnostiken für Modell 8
Multiple R-squared: 0.687,
Adjusted R-squared: 0.675
F-statistic: 58.1 on 4 and 106 DF, p-value: <2e-16
Die Heteroszedaszität ist verschwunden, aber in Abb.8.6 sticht der Punkt Nr. 17 mit seiner grossen CookDistanz von 0.3 heraus. Wir lassen diesen zu einflussreichen Punkt weg und erhalten in model9 ausgeglichenere und kleinere (< 0.1) Cook-Distanzen.
> model9 <- lm(log(ozone) ~ temp + wind + rad + I(wind^2),
+
data = ozonD[-17, ])
> summary(model9)
Call:
lm(formula = log(ozone) ~ temp + wind + rad + I(wind^2), data = ozonD[-17,
])
Residuals:
106
8.1 Einfacheres Baummodell, GAM und lineare Modelle
Min
1Q Median
-0.9768 -0.2734 -0.0144
3Q
0.3628
Max
1.1688
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.534539
0.452849
5.60 1.8e-07
temp
0.075448
0.010014
7.53 1.8e-11
wind
-0.220819
0.054659
-4.04 0.00010
rad
0.002210
0.000499
4.43 2.3e-05
I(wind^2)
0.006898
0.002405
2.87 0.00499
Residual standard error: 0.451 on 105 degrees of freedom
Multiple R-squared: 0.697,
Adjusted R-squared: 0.686
F-statistic: 60.5 on 4 and 105 DF, p-value: <2e-16
> plotLmT(model9)
T3−plot of residuals
−20
5.0
−1.0
−0.5
t
Scale−Location
Cook's distance
0.0
●
●
2.0
1.0
30
102 ●
● 45
●● ● ●
●
●
● ● ●
●
●
●
●
●
● ●
●●
●●
●
●
●● ● ●●●●●
●
●
●
●
●
●
● ●● ●
●●
● ● ●●
●
● ●
● ● ● ●●
●
●
●
●
● ●● ●
●●
●
●
●● ● ● ●
●●
●
●
●
● ● ●
● ●
● ●
●
●● ●
●
●● ●
● ● ●
●
●
3.0
4.0
Fitted values
5.0
0.08
●
0.5
19
20
0.04
●
●●
●
0.0
Fitted values
● 20
●
0.5
4.0
0.00
1.5
1.0
3.0
0 10
●
●
●
●
●
● ● ●● ● ●
●●●● ● ● ● ●
●
●
●
●
●
●
●
● ●
● ●
● ●●
● ●● ● ●● ● ●● ●● ●●●●
●
● ● ●
●
●
●● ● ● ●●
●
●●
●
●●● ●
●
●
●● ● ● ● ●
●
●
● ●●●●● ●● ● ●
●
●
●
● ● ●
●
●●
●
● 45
102 ●
● ●
T3
●● ●
●
2.0
Standardized residuals
5%
1%
● 20
Cook's distance
0.0
−1.0
Residuals
1.0
Residuals vs Fitted
0
20
40
60
80
100
Obs. number
Abbildung 8.7: Diagnostiken für Modell 9
107
8 Multiple Regression
Mit Modell plot(model9) geben wir uns zufrieden, denn es zeigt Normalität und konstante Varianz
der Residuen. Wir haben ein minimales Modell gefunden mit fünf Parametern, ohne Wechselwirkungen, mit
einem quadratischen Term für Windgeschwindigkeit, und reichlichen 105 Freiheitsgraden für den Fehler.
8.2 Alternatives Vorgehen
Folgendes Vorgehen sei als Aufgabe gestellt.
Man verwende plot(residuals(model1)) und wechsle schon früher zu log(ozone), z.B. mit
model2. Man wird nach einer ähnlichen Anzahl von Eliminationsschritten ein minimales Modell erhälten.
Ist es identisch mit model9?
8.3 Automatische schrittweise Regression
Theoretische Überlegungen deuten darauf hin, dass automatische schrittweise Regression mit dem "vollen" Modell beginnen sollten und nicht-signifikante Regressoren eliminieren sollen ("Rückwärtselimination"). Beginnend mit dem Modell aus dem Mittelwert allein ("Vorwärtsschreiten") hängt die Aufnahme neuer Regressoren sehr delikat davon ab, wie diese miteinander korreliert sind, und man kann
eine eher zufällige Auswahl von Regressoren erhalten. Die verschiedenen Kriterien, wie Regressoren ausgewählt werden sollen, z.B. AIC (Akaike Information Criterion), BIC (Bayesian Information Criterion), DIC( Deviance Information Criterion) betonen verschiedene Aspekte der Modellierung,
s. http://de.wikipedia.org/wiki/Akaike_Information_Criterion und die Hilfe zu
AIC(), step {stats}, stepAIC {MASS}.
108
9 Bootstrap
9.1 Motivation
Sich wie Münchhausen an den eigenen Haaren aus dem Sumpf zu ziehen, "Pulling yourself up by your
own bootstraps", gab diesem Verfahren den Namen. Man möchte Konfidenzintervalle bestimmen, hat aber
nur eine Stichprobe statt der Grundgesamtheit zur Verfügung. Die Idee ist bestechend einfach. Man bildet
beliebig viele (Unter-)Stichproben aus dieser Stichprobe, erlaubt aber, dass Werte mehrfach oder gar nicht
vorkommen dürfen. Man berechnet z.B. die Stichprobenmittelwerte sehr häufig, einmal für jede Unterstichprobe, und berechnet dann die Extrembereiche dieser Mittelwerte mittels der Funktion quantile. Das
95%-Intervall bekommt man dann mit der Spezifikation von c(0.0275,0.975) für die untere und obere
Grenze.
9.2 Beispiel
Wir benutzen einen Datensatz mit 30 Werten aus Crawley’s Buch.
> skewdt <- read.table("./Data/skewdata.txt", header = TRUE)
und zeigen ihr Histogramm in Abb. 9.1.
Wir berechnen die Verteilung von 10000 unabhängigen Ziehungen von Stichproben des Umfangs k =
5, 10, . . . , 30 und zeigen die exakten 90%-Vertrauensintervalle und ihre Approximation durch t- und Normalverteilung, siehe Abb. 9.2.
> boot1 <- function(n) {
+
plot(c(0, 30), c(0, 60), type = "n", xlab = "Sample size",
+
ylab = "Confidence intervals")
+
for (k in seq(6, 30, 3)) {
+
a <- numeric(n)
+
for (ii in 1:n) {
+
a[ii] <- mean(sample(skewdt$values, k, replace = TRUE))
+
}
+
points(c(k, k), quantile(a, c(0.025, 0.975)),
+
type = "b")
+
}
+
xv <- seq(5, 30, 0.1)
+
yv <- mean(skewdt$values) + qnorm(0.025) * sqrt(var(skewdt$values)/xv)
+
lines(xv, yv, col = "red")
+
yv <- mean(skewdt$values) + qnorm(0.975) * sqrt(var(skewdt$values)/xv)
+
lines(xv, yv, col = "red")
+
yv <- mean(skewdt$values) + qt(0.025, xv) * sqrt(var(skewdt$values)/xv)
+
lines(xv, yv, lty = 2)
109
9 Bootstrap
> hist(skewdt$values, xlab = "skewdt", main = "Histogram of skewdt")
6
4
0
2
Frequency
8
10
Histogram of skewdt
0
20
40
60
80
skewdt
Abbildung 9.1: Schief verteilte Daten
+
+
+
+
+ }
yv <- mean(skewdt$values) + qt(0.975, xv) * sqrt(var(skewdt$values)/xv)
lines(xv, yv, lty = 2)
abline(mean(skewdt$values), 0, xlim = c(6, 30), lty = 3)
return(a)
Beim Maximalwert k = 30 (das letzte Ergebnis a der for-Schleife) vergleichen wir die Abstände der
Quantile
> quantile(a, c(0.025, 0.975))
2.5%
97.5%
24.8076 37.7739
vom Mittelwert 30.96866:
110
9.2 Beispiel
50
60
> a <- boot1(10000)
●
40
●
●
●
●
●
●
●
●
●
●
30
●
●
20
●
●
●
●
0
10
Confidence intervals
●
0
5
10
15
20
25
30
Sample size
Abbildung 9.2: Bootstrap-Vertrauensintervalle (durch die Verbindungslinien zwischen den Kreisen angedeutet) in
Abhängigkeit vom Stichprobenumfang. Rot = Normale Approximation, gestrichelt = t-Verteilung als Approximation. Gestrichelte Linie = Mittelwert
> mean(skewdt$values) - quantile(a, c(0.025, 0.975))
2.5%
97.5%
6.16110 -6.80526
Hingegen sind die Quantile der approximierten Normalverteilung
> qnorm(0.975) * sqrt(var(skewdt$values)/30)
[1] 6.56968
also ähnlich, aber nicht gleich den empirischen Bootstrap-Quantilen (einmal +, einmal −).
Man sieht sehr deutlich, dass die Approximationen durch Normal- und t-Verteilung die Schiefe der Daten
nicht angemessen wiedergeben können. Die Bootstrap-Konfidenzgrenzen sind bei diesem kleinen Umfang
der Originalstichprobe zuverlässiger und dazu nicht schwer zu berechnen.
111
9 Bootstrap
Faustregel 5. Der Umfang der Bootstrap-Stichprobe darf nicht grösser sein als die Stichprobe, aus der
gezogen wird.
Missachtet man diese Regel, so täuscht man eine nicht zu erzeugende Genauigkeit vor!
Nun dasselbe Beispiel mit der Funktion boot aus dem Paket boot.
boot(data, statistic, R)
Die Funktion statistic muss als erstes Argument die Daten, das zweite ein Index haben (der dient
zum Übergeben der Zufallsauswahl) :
> mymean <- function(x, i) mean(x[i])
> (myboot <- boot(skewdt$values, mymean, R = 10000))
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = skewdt$values, statistic = mymean, R = 10000)
Bootstrap Statistics :
original
bias
t1* 30.9687 0.0645663
std. error
3.29572
Erklärung: original ist der Mittelwert des Datensatzes:
> mean(skewdt$values)
[1] 30.9687
> sqrt(var(myboot$t))
[,1]
[1,] 3.29572
und bias ist die Differenz zwischen dem Mittel und dem Mittel der simulierten Werte, welches in
myboot$t zurückgegeben wird, std.error ist deren Standardabweichung.
Bootstrap kann sehr vielseitig eingesetzt werden. Es gibt eine Menge von interessanten Grössen, deren exakte Verteilung unbekannt ist, vor allem in Simulationsmodellen. Siehe auch http://en.wikipedia.
org/wiki/Bootstrapping_(statistics).
112
10 Anhang
10.1 Literatur
Guter einführender Artikel: http://en.wikipedia.org/wiki/Statistics
Interaktiver Kurs auf dem Web: http://www.virtualstatistician.com/link-28.html
Becker, R.A., Chambers, J.M., Wilks, A.R., 1988. The New S Language: a Programming environment for
data analysis and graphics, 702 p., Chapman & Hall, ISBN-10: 0-412-74150-4. "Das"grundlegende
"blaue"Buch über S/R.
Chambers, J., 1994. Graphical Methods for Data Analysis (Statistics), 336 p. Chapman & Hall/CRC; ISBN13: 978-0412052712
Crawley, M.J., 2005. Statistics: an introduction using R. 327 p., John Wiley Sons, ISBN 0-470-02297-3
(hard), 0-470-02298-1 (paper). Eine handliche und ausgezeichnete Darstellung.
Crawley, M.J., 2007. The R book. 942 p., John Wiley Sons, ISBN-13 978-0-470-51024-7 (hard) Eine wahre
Fundgrube für R.
Faraway, J.J., 2002. Practical Regression and Anova using R: http://cran.r-project.org/doc/
contrib/Faraway-PRA.pdf
Faraway, J.J., 2005. Linear Models with R. 229 p., Chapman & Hall, ISBN-10 1-58488-425-8.
Ghosh, S., 1996. A new graphical tool to detect non-normality. Journal of the Royal Statistical Society B ,
58, 691-702.
Hoffmann, C.W., Usoltsev, V.A., 2000. The Estimation of tree foliage biomass from a suitable tree diameter,
or Tree foliage and the Pipe Model. Poster presented at the Forum fuer Wissen, 2000-10-25..26, Swiss
Federal Research Institute WSL, Birmensdorf, Switzerland. 1 p
Hoffmann, C.W., Usoltsev, V.A., 2002. Tree-crown biomass estimation for forest species of the Ural and of
Kazakhstan. Forest Ecol. Manag., 158/1-3, 59-69.
Ricci, V., Regression: Eine Übersicht von Vito Ricci cran.r-project.org/doc/contrib/
Ricci-refcard-regression.pdf. Dieses Datei befindet sich in ./fig.pdf.ppt
Sachs, L., Hedderich, J., 2006. Angewandte Statistik, Methodensammlung mit R. Zwölfte, vollständig neu
bearbeitete Auflage. 702 p. Springer, ISBN-13 978-3-540-32160-6, ISBN-10 3-540-32160-8. Eines der
vielleicht besten Statistikbücher zur Zeit.
Sawitzki, G., 2008. cran.r-project.org/doc/contrib/Sawitzki-Einfuehrung.pdf:
Statistical Computing, Einführung in R, Günther , StatLab Heidelberg, 17. März 2008.
Shinozaki, K., Yoda, K., Hozumi, K., Kira, T., 1964. A quantitative analysis of plant form . The pipe model
theory. Japan. J. Ecol. 14 (3), 97–105, 133–139.
10.2 Dank
Ich bin Michael J. Crawley zu Dank verpflichtet für seine ausgezeichneten Statistikbücher, die mich sehr
zu diesem Manuskript motivierten und die Erlaubnis, sie ungeniert zu zitieren. Die Arbeit mit den Kursteilnehmern an der WSL war sehr beflügelnd und fruchtbar, besonders in Anbetracht ihres sehr vielfältigen
Erfahrungshintergrundes und der Geduld, die sie für meine Bemühungen aufbrachten, diesen Text klar zu
113
10 Anhang
formulieren. Vieles aus den lebhaften Diskussionen konnte natürlich nicht in den Text aufgenommen werden.
10.3 Hinweis für das Plotten
Bei der Erzeugung von Plots mittels Sweave() kann es vorkommen, dass ein Plot im Text nicht angezeigt
wird. Man hilft sich folgendermassen. Man führt die Plotanweisungen op <-; plot(); par(op) direkt in R aus, speichert vom Plotfenster aus den Plot unter geeignetem Namen (hier der des Chunks C8m9b)
und verschiebt ihn in einen besonderen Ordner (fig.pdf.ppt), in dem man solche Plots sammelt. In die
LaTeX-Anweisung figure kommentiert man den Chunk aus (mittels %) und bindet die Figur mittels
includegraphics direkt ein.
\begin{figure}[hbt] \centering
\he{0.8}
% <<C8m9b>>=
% op <- par(mfrow=c(2,2))
% plot(model9, which = 1:4)
% par(op)
% @
\includegraphics{fig.pdf.ppt/C8m9b}
\caption{\label{f:C8m9b} Diagnostiken f"ur Modell 9}
\end{figure}
114
10.4 Informationsfluss
10.4 Informationsfluss
Kurs.Rnw
R> Stangle(“+“)
R> Sweave(“*“)
R
Kurs.R
\SweaveInput(“ “)
R
R
Kurs.tex
Kurs.hdr
Kurs.Ch1.Rnw
Kurs.Ch2.Rnw
Kurs.Ch3.Rnw
\fig\Fig-01.pdf
\fig\Fig-02.pdf
\fig\Fig-03.pdf
\fig\Fig-04.pdf
> pdflatex Kurs
R-Console
R> Stangle (“Kurs.Rnw“)+
R> source (“Kurs.R“)
R> [Copy Paste]
R> [Resultate]
R> Sweave (“Kurs.R“)*
R> system(“pdflatex Kurs.tex“)
L
Acrobat Reader
Kurs.pdf
R Fehler in R chunk
Mywork.R
L Fehler in Latex
C.W.Hoffmann, 2008-11-24
Abbildung 10.1: Dateien und Programme, Informationsfluss im System "R", "LaTeX", "Acrobat". Anstelle von "pdflatex Kurs" gilt für Mac OSX "TexShop, Befehl-T"
10.5 Erzeugung der R-Kodedatei
Erzeuge die R Codedatei Crs.R:
> Stangle("Kurs.Rnw")
Writing to file Kurs.R
10.6 Interne Daten und Funktionen
Bisher verborgen gehaltene interne Daten und Funktionen.
>
>
>
>
>
>
>
>
library(cwhmisc)
options(width = 70)
par(mfrow = c(1, 1))
options(warn = 1)
N <- 10000
ceX <- 1.2
ncS <- nclass.Sturges
ncC <- nclass.scott
115
10 Anhang
>
>
>
+
+
+
+
+
+
+
+
+
+
>
+
+
+
+
>
>
+
+
+
+
+
+
+
+
>
+
+
+
+
+
+
+
>
+
+
+
+
+
+
+
+
+
+
ncF <- nclass.FD
ranC <- c(1, 2, 3, 5, 30, 300)
CranC <- function(n, lang = LANG) {
if (lang == "Eng")
paste("The sums of ", paste(paste(ranC[-length(ranC)],
", ", sep = ""), collapse = ""), "and ",
ranC[length(ranC)], " realizations of n=",
n, " drawings of the", sep = "")
else paste("Die Summe von ", paste(paste(ranC[-length(ranC)],
", ", sep = ""), collapse = ""), "und ", ranC[length(ranC)],
" Realisationen von n=", n, " Ziehungen aus der",
sep = "")
}
CranL <- function(lang = LANG) {
if (lang == "Eng")
paste("Sums of drawings of the", sep = "")
else paste("Summen von Ziehungen aus der", sep = "")
}
scal.mx <- function(x, mx = max(x)) x/mx
hist.cum <- function(x, mx = max(x), coL = "red", ...) {
h <- hist(x, ...)
mh <- max(h$counts)
lines(h$breaks, scal.mx(c(0, cumsum(h$counts))) *
mh, lty = 4, col = "blue")
tb <- table(x)
lines(as.numeric(names(tb)), scal.mx(cumsum(tb)) *
mh, lty = 1, col = coL)
}
boxpm <- function(formul, Points = TRUE, Mean = TRUE,
...) {
bx <- boxplotM(formul, Mean = Mean, ...)
frm <- formula2string(formul)
Lhs <- eval(text = frm$left)
if (Points)
plot(formul)
}
intpD <- function(x, y, xi) {
N <- length(x)
stopifnot(N == length(y) | max(abs(diff(x))) > 0)
ascending <- identical(x, x[order(x, decreasing = FALSE)])
descending <- identical(x, x[order(x, decreasing = TRUE)])
stopifnot(ascending | descending)
if (descending) {
x <- rev(x)
y <- rev(y)
}
stopifnot(x[1] <= xi & xi <= x[N])
116
10.6 Interne Daten und Funktionen
+
+
+
+
+
+
+
+
+
+
>
+
>
+
>
+
>
+
>
+
+
+
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
nu <- max(which(x <= xi))
if (nu == N) {
res <- y[N]
}
else {
res <- y[nu] + (xi - x[nu])/(x[nu + 1] - x[nu]) *
(y[nu + 1] - y[nu])
}
res
}
d1binom <- function(x, size, prob) stats::dbinom(round(x),
size, prob)
d1nbinom <- function(x, size, prob, mu) stats::dnbinom(trunc(x),
size, prob, mu)
d1geom <- function(x, prob, log = FALSE) stats::dgeom(trunc(x),
prob, log = log)
d1pois <- function(x, lambda, log = FALSE) stats::dpoisn(round(x),
lambda, log)
d1cauchy <- function(x, location = 0, scale = 1, log = TRUE) {
stats::dcauchy(log(x + 0.125), location, scale, log) *
1000
}
aver <- function(k, xlab, fct, n, br = ncF, lang = LANG,
...) {
s <- rep(0, n)
ff <- get(fct)
for (ii in 1:k) {
s <- s + ff(n, ...)
}
av <- s/k
h <- hist(av, breaks = br, plot = FALSE)
mainL <- {
if (lang == "Eng")
paste(if (k == 1)
"Density+Function"
else paste(k, "terms"), ", sk =", formatFix(skew(h$counts),
3), sep = "")
else paste(if (k == 1)
"Dichte+Funktion"
else paste(k, "Terme"), ", sk =", formatFix(skew(h$counts),
3), sep = "")
}
plot(h, main = mainL, xlab = xlab)
md <- mean(h$counts) * diff(range(h$breaks))
if (k == 1) {
g <- paste("d", substr(fct, 2, 100), sep = "")
curve(get(g)(x, ...) * md, add = TRUE, col = "blue")
117
10 Anhang
+
+
+
+
+
+
>
+
+
+
+
>
+
+
+
+
+
+
+
>
+
+
+
+
+
+
+
>
+
+
+
+
+
+
+
+
>
+
+
+
+
+
+
>
>
+
>
}
else if (k > 1)
curve(dnorm(x, mean(av), sd(av)) * md, add = TRUE,
col = "red")
invisible(h)
}
MWstr <- function(n, lang = LANG) {
if (lang == "Eng")
paste("Averages of ", n, " drawings of")
else paste("Mittelwerte von ", n, " Ziehungen von")
}
pl <- function(tit, xlab, fct, n, br = ncF, cex = ceX,
lang = LANG, ...) {
pltRCT(3, 2, tit, {
for (ii in ranC) aver(k = ii, xlab, fct, n, br = br,
lang = lang, ...)
}, oma = c(2, 2, 5, 2), cex = cex, mar = c(5, 4,
2, 1))
}
plotLmT <- function(model) {
op <- par(mfrow = c(2, 2))
plot(model, which = 1)
T3plot(residuals(model), lab = "T3-plot of residuals",
legend.pos = "top")
plot(model, which = 3:4)
par(op)
}
skew <- function(x, na.rm = FALSE) {
if (na.rm)
x <- x[!is.na(x)]
mn <- mean(x)
N <- length(x)
m3 <- sum((x - mn)^3)/N
s3 <- sqrt(var(x))^3
m3/s3
}
kurtosis <- function(x, na.rm = FALSE) {
if (na.rm)
x <- x[!is.na(x)]
m4 <- sum((x - mean(x))^4)/length(x)
s4 <- var(x)^2
m4/s4 - 3
}
timb <- read.table("./Data/timber.txt", header = TRUE)
timb1 <- cbind(timb, volComp = pi/4 * timb$girth^2 *
timb$height/3)
write.table(timb1, file = "timb1.dat", row.names = TRUE)
118
10.6 Interne Daten und Funktionen
>
>
>
>
>
>
>
>
>
>
+
>
>
>
>
>
>
>
>
>
dav <- read.table("./Data/Davos.h", header = TRUE)
alp <- read.table("./Data/Alptal.h", header = TRUE)
lae <- read.table("./Data/Laegern.h", header = TRUE)
alp1 <- cbind(alp, loc = rep("a", nrow(alp)))
dav1 <- cbind(dav, loc = rep("d", nrow(dav)))
lae1 <- cbind(lae, loc = rep("l", nrow(lae)))
dat <- rbind(alp1, dav1, lae1)
fact <- read.table("./Data/factorial.txt", header = TRUE)
alpBH <- read.table("./Data/AlpBH.txt", header = TRUE)
BL <- read.table("./Data/Birch1.dat", header = TRUE,
as.is = 3)
CN <- read.table("./Data/Pine1.dat", header = TRUE, as.is = 4)
BL$ldc <- log(BL$dc)
BL$lwf <- log(BL$wf)
CN$ld <- log(CN$d)
CN$ldc <- log(CN$dc)
CN$lwf <- log(CN$wf)
ozonD <- read.table("./Data/ozone.txt", header = TRUE)
ozonD$temp <- (ozonD$temp - 32) * 5/9
skewdt <- read.table("./Data/skewdata.txt", header = TRUE)
119
Zugehörige Unterlagen
Herunterladen