03.03.2013 Aufrufe

R/S-Plus für Einsteiger und für Fortgeschrittene - STAMATS

R/S-Plus für Einsteiger und für Fortgeschrittene - STAMATS

R/S-Plus für Einsteiger und für Fortgeschrittene - STAMATS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Lehrstuhl<br />

Mathematik VII<br />

R/S-<strong>Plus</strong> <strong>für</strong> <strong>Einsteiger</strong><br />

<strong>und</strong> <strong>für</strong> <strong>Fortgeschrittene</strong><br />

ein Kurs über zwei Semester<br />

entstanden in den Semestern SS 2002, WS 2002/03, SS 2003<br />

revidiert im WS 2004/05 <strong>und</strong> im SS 2006<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

E-mail: peter.ruckdeschel@uni-bayreuth.de<br />

matthias.kohl@stamats.de<br />

<br />

Mathematik VII<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1


Inhaltsverzeichnis<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

2


Inhaltsverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

0 Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

0.1 zur Veranstaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

0.1.1 Rahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

0.1.2 Adressaten / Ziele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

0.1.3 Anordnung des Stoffs . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

0.1.4 Quellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

0.1.5 zum Gebrauch des .pdf–Files . . . . . . . . . . . . . . . . . . 49<br />

0.1.6 Danksagung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

0.2 Kurzvorstellung R/S-<strong>Plus</strong><br />

c.f. Venables and Ripley (1999). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

0.2.1 Einsatzgebiete von R/S-<strong>Plus</strong> . . . . . . . . . . . . . . . . . . 55<br />

0.2.2 S-<strong>Plus</strong> <strong>und</strong> R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

0.2.3 Vergleich mit anderen Paketen / Sprachen . . . . . . 59<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

3


0.3 Vorschläge <strong>für</strong> Referatthemen. . . . . . . . . . . . . . . . . . . . . . . 62<br />

0.3.1 Eingabe / Import von Daten in R / S-<strong>Plus</strong> . . . . 62<br />

0.3.2 Graphik: die vielen Parameter von plot <strong>und</strong><br />

der par-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

0.3.3 Export von Daten <strong>und</strong> Graphik . . . . . . . . . . . . . . . . . 64<br />

0.3.4 Klassen <strong>und</strong> objektorientierte Programmierung . . 65<br />

0.3.5 Speicherverwaltung in R / S-<strong>Plus</strong> . . . . . . . . . . . . . 66<br />

0.3.6 Schnittstellenprogrammierung . . . . . . . . . . . . . . . . . . 67<br />

0.3.7 Bibliotheken (libraries) <strong>und</strong> Zusatzpakete<br />

(Packages). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

0.3.8 Organisation von CRAN <strong>und</strong> Veröffentlichung<br />

eigener Routinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

0.4 Aufbau der Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

<br />

0.5 Wo bekomme ich (online-)Hilfe? . . . . . . . . . . . . . . . . . . . . 72<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

4


0.6 eine kommentierte Literaturliste . . . . . . . . . . . . . . . . . . . . 75<br />

0.7 eine elementare Sitzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

1 Die Sprache S / R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

1.1 Gr<strong>und</strong>strukturen in R. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

1.1.0 Wiederholung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

1.1.1 Konventionen bei der Namensvergabe . . . . . . . . . . 88<br />

1.1.2 Sprachaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

1.2 wichtige Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

1.2.1 Vektoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

1.2.2 Matrizen <strong>und</strong> Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />

1.2.3 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<br />

1.2.4 Funktionen I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

1.2.5 Faktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

1.2.6 Data-Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

5


1.2.7 Typ-Umwandlung / Casting. . . . . . . . . . . . . . . . . . .100<br />

1.3 Dateneingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101<br />

1.3.1 Eingabe von Hand. . . . . . . . . . . . . . . . . . . . . . . . . . . .101<br />

1.3.2 Automatisches Füllen von Objekten . . . . . . . . . . .102<br />

1.3.3 Einlesen von Daten I . . . . . . . . . . . . . . . . . . . . . . . . .104<br />

1.3.4 Einlesen von Daten II —<br />

Dateneingabe <strong>und</strong> Import unter R /<br />

S-<strong>Plus</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107<br />

1.4 Arithmetik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136<br />

1.4.1 implizites Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . .136<br />

1.4.2 zyklisches Auffüllen. . . . . . . . . . . . . . . . . . . . . . . . . . .137<br />

1.4.3 einige Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . .137<br />

1.4.4 Auswertungsreihenfolge . . . . . . . . . . . . . . . . . . . . . . .139<br />

1.4.5 Logische Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . .140<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

6


1.4.6 Missings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140<br />

1.5 String-Operationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141<br />

1.6 Indizes <strong>und</strong> Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143<br />

1.6.1 Indizierungsmöglichkeiten . . . . . . . . . . . . . . . . . . . . .143<br />

1.6.2 Arrays <strong>und</strong> Indizierung. . . . . . . . . . . . . . . . . . . . . . . .146<br />

1.6.3 Arithmetik mit Arrays . . . . . . . . . . . . . . . . . . . . . . . .148<br />

1.6.4 Sortieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149<br />

1.7 Matrix–Operationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150<br />

1.7.1 Anhängen von Spalten <strong>und</strong> Zeilen . . . . . . . . . . . . .150<br />

1.7.2 Matrixprodukte <strong>und</strong> Transposition. . . . . . . . . . . . .151<br />

1.7.3 apply <strong>und</strong> sweep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153<br />

1.7.4 Funktionen in Matrizen . . . . . . . . . . . . . . . . . . . . . . .155<br />

1.8 Funktionen von Faktoren <strong>und</strong> Listen . . . . . . . . . . . . . . .156<br />

1.7.5 Casting <strong>für</strong> Matrizen <strong>und</strong> Data-Frames . . . . . . . .156<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

7


1.8.1 ein hypothetisches Datenbeispiel . . . . . . . . . . . . . .156<br />

1.8.2 table <strong>und</strong> tabulate . . . . . . . . . . . . . . . . . . . . . . . . . . . .157<br />

1.8.3 tapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158<br />

1.8.4 split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159<br />

1.8.5 lapply <strong>und</strong> sapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159<br />

1.9 Datenausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160<br />

1.9.1 Ausgabe auf File . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160<br />

1.9.2 Umleiten der Ausgabe / Drucken. . . . . . . . . . . . . .164<br />

1.10 Arbeiten mit dem System . . . . . . . . . . . . . . . . . . . . . . . .165<br />

1.10.1 File- <strong>und</strong> URL-zugriffe unter R. . . . . . . . . . . . . . . .165<br />

1.10.2 R-Skripte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166<br />

1.10.3 Auffinden von S-Objekten . . . . . . . . . . . . . . . . . . .167<br />

1.10.4 Systemkonfiguration. . . . . . . . . . . . . . . . . . . . . . . . .171<br />

1.10.5 History–File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

8


2 Einfache explorative Analyse. . . . . . . . . . . . . . . . . . . . . . . . . .176<br />

2.1 etwas Stochastik/Statistik . . . . . . . . . . . . . . . . . . . . . . . . .176<br />

2.1.1 Wahrscheinlichkeitsmaße. . . . . . . . . . . . . . . . . . . . . .176<br />

2.1.2 Zufallsvariablen <strong>und</strong> Verteilungen. . . . . . . . . . . . . .177<br />

2.1.3 wichtige Verteilungen. . . . . . . . . . . . . . . . . . . . . . . . .181<br />

2.1.4 Umsetzung in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186<br />

2.2 Verteilungen mit den Zusatzpaketen distr <strong>und</strong><br />

distrEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189<br />

2.3 Simulation von Zufallsvariablen . . . . . . . . . . . . . . . . . . . .194<br />

2.3.1 Was sind “gute” Zufallszahlen? . . . . . . . . . . . . . . . .194<br />

2.3.2 Schritt 1: Erzeugung von<br />

; typische<br />

Zufallszahlengeneratoren . . . . . . . . . . . . . . . . . . . . . .195<br />

2.3.3 Qualitätskontrolle <strong>für</strong> Pseudozufallszahlen . . . . .210<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

9


2.3.4 Schritt 2: Anamorphose. . . . . . . . . . . . . . . . . . . . . . .213<br />

2.4 Univariate, num. Kenngrößen . . . . . . . . . . . . . . . . . . . . . .228<br />

2.4.1 die empirische Verteilung . . . . . . . . . . . . . . . . . . . . .228<br />

2.4.2 Zusammefassungen . . . . . . . . . . . . . . . . . . . . . . . . . . .229<br />

2.4.3 Lokationsmaße . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230<br />

2.4.4 Streuungs–/Dispersionsmaße . . . . . . . . . . . . . . . . . .230<br />

2.4.5 Symmetrie / Krümmung . . . . . . . . . . . . . . . . . . . . . .231<br />

2.4.6 Zusammenhangsmaße . . . . . . . . . . . . . . . . . . . . . . . .231<br />

2.4.7 getrimmte <strong>und</strong> winsorisierte Varianten . . . . . . . . .232<br />

2.5 graphische univariate Analyse . . . . . . . . . . . . . . . . . . . . . .234<br />

2.5.1 Histogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234<br />

2.5.2 empirische Verteilungsfunktion . . . . . . . . . . . . . . . .235<br />

2.5.3 Boxplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

10


2.5.4 Visualisierung diskreter Zufallsvariablen . . . . . . . .238<br />

2.6 ein ausgearbeitetes Beispiel . . . . . . . . . . . . . . . . . . . . . . . .241<br />

2.7 Dichteschätzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247<br />

2.7.1 Häufigkeitspolygon . . . . . . . . . . . . . . . . . . . . . . . . . . .248<br />

2.7.2 ASH <strong>und</strong> WARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249<br />

2.7.3 Kerndichteschätzung . . . . . . . . . . . . . . . . . . . . . . . . .251<br />

2.8 Anwendungen von Zufallszahlen . . . . . . . . . . . . . . . . . . .255<br />

2.8.1 Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255<br />

2.8.2 Daten–Augmentation . . . . . . . . . . . . . . . . . . . . . . . . .258<br />

2.8.3 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258<br />

2.8.4 globale Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . .265<br />

2.9 Resampling–Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . .266<br />

2.9.1 Idee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266<br />

2.9.2 Jack-Knife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

11


2.9.3 Bootstrap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268<br />

2.9.4 Bagging <strong>und</strong> Boosting . . . . . . . . . . . . . . . . . . . . . . . .274<br />

3 Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275<br />

3.1 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275<br />

3.1.1 Gruppierung von Befehlen: Blöcke . . . . . . . . . . . . .275<br />

3.1.2 Bedingte Ausführung von Blöcken. . . . . . . . . . . . .276<br />

3.1.3 Schleifen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281<br />

3.2 Vermeidung von for-Schleifen . . . . . . . . . . . . . . . . . . . . .284<br />

3.2.1 Schleifen sind langsam! . . . . . . . . . . . . . . . . . . . . . . .284<br />

3.2.2 ein Beispiel: Blatt 5 Aufgabe 1 . . . . . . . . . . . . . . . .285<br />

3.2.3 Tricks zur Vermeidung von Schleifen . . . . . . . . . .293<br />

3.3 Schreiben von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . .296<br />

3.3.1 Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296<br />

3.3.2 Editieren von Funktionen . . . . . . . . . . . . . . . . . . . . .304<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

12


3.3.3 Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . .305<br />

3.3.4 Hilfe-Files / Dokumentation . . . . . . . . . . . . . . . . . .309<br />

3.4 Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310<br />

3.4.1 Exkurs: Exception-Handling in R . . . . . . . . . . . . . .311<br />

3.4.2 Post-mortem Analyse . . . . . . . . . . . . . . . . . . . . . . . . .312<br />

3.4.3 Selbst ausgelöste Exceptions . . . . . . . . . . . . . . . . . .317<br />

3.4.4 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321<br />

3.4.5 in S-<strong>Plus</strong>: inspect . . . . . . . . . . . . . . . . . . . . . . . . . . .323<br />

3.5 Systemaufrufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323<br />

3.5.1 system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323<br />

3.5.2 shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329<br />

3.5.3 Platformunabhängige Systemzugriffe . . . . . . . . . .330<br />

3.6 Rekursionen <strong>und</strong> Frames . . . . . . . . . . . . . . . . . . . . . . . . . .333<br />

3.5.4 Unix–Spezifika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

13


3.6.1 Beispiel: ein adaptives Verfahren zur<br />

numerischen Integration . . . . . . . . . . . . . . . . . . . . . .334<br />

3.6.2 Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .338<br />

3.6.3 Programmieroperationen auf der Sprache . . . . . .345<br />

4 Graphiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352<br />

4.1 Ausgabegeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352<br />

4.1.1 Betriebssystem–Treiber . . . . . . . . . . . . . . . . . . . . . . .352<br />

4.1.2 Ausdruck mit postscript . . . . . . . . . . . . . . . . . . . . . .356<br />

4.1.3 andere Ausgabeformate . . . . . . . . . . . . . . . . . . . . . . .359<br />

4.2 der plot <strong>und</strong> der par Befehl . . . . . . . . . . . . . . . . . . . . . .360<br />

4.2.1 Die par – Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . .360<br />

4.2.2 Befehle zur Aufteilung des Graphsheets . . . . . . . .362<br />

4.2.3 Die plot–Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . .363<br />

4.2.4 alternatives Paket zu plot: grid . . . . . . . . . . . . . . . .369<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

14


4.2.5 ein Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370<br />

4.3 einige Tabellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371<br />

4.3.1 Symbole <strong>für</strong> pch . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371<br />

4.3.2 Farben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371<br />

4.3.3 Linientypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373<br />

4.3.4 Linienbreiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373<br />

4.4 weitere gr<strong>und</strong>legende Plot–Befehle . . . . . . . . . . . . . . . . .375<br />

4.4.1 eine Übersicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375<br />

4.4.2 Univariate Graphiken . . . . . . . . . . . . . . . . . . . . . . . . .378<br />

4.4.3 multivariate Diagramme . . . . . . . . . . . . . . . . . . . . . .389<br />

4.4.4 Interaktive Graphik . . . . . . . . . . . . . . . . . . . . . . . . . . .393<br />

4.4.5 Filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397<br />

4.4.6 Flächendiagramme . . . . . . . . . . . . . . . . . . . . . . . . . . .399<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

15


4.5 Grafikaufbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400<br />

4.5.1 mehrere Plots in einem Diagramm . . . . . . . . . . . .400<br />

4.5.2 Hinzufügen von Information. . . . . . . . . . . . . . . . . . .405<br />

4.5.3 interaktives Bearbeiten . . . . . . . . . . . . . . . . . . . . . . .411<br />

4.5.4 Mathematik in Labels . . . . . . . . . . . . . . . . . . . . . . . .415<br />

4.6 Bedingte Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418<br />

4.7 Export von Daten <strong>und</strong> Graphik . . . . . . . . . . . . . . . . . . . .425<br />

4.7.1 Export von Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . .425<br />

4.7.2 Export von Graphik . . . . . . . . . . . . . . . . . . . . . . . . . .429<br />

5 Schätzen <strong>und</strong> Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .432<br />

5.1 klassische univariate Tests . . . . . . . . . . . . . . . . . . . . . . . . .432<br />

5.1.1 Abriss Testtheorie . . . . . . . . . . . . . . . . . . . . . . . . . . . .432<br />

5.1.2 Gaußtest–Einstichprobenfall . . . . . . . . . . . . . . . . . . .436<br />

5.1.3 -Test <strong>für</strong> Mittelwert . . . . . . . . . . . . . . . . . . . . . . . . .437<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

16


5.1.4 -Test <strong>für</strong> Varianzen . . . . . . . . . . . . . . . . . . . . . . . .439<br />

5.1.5 -Test <strong>für</strong> Varianzen . . . . . . . . . . . . . . . . . . . . . . . . .440<br />

5.1.6 Binomialtest — Einstichprobenfall. . . . . . . . . . . . .441<br />

5.1.7 exakter Test von Fisher — Zweistichprobenfall .442<br />

5.1.8 graphische Anpassungstests . . . . . . . . . . . . . . . . . . .443<br />

5.1.9 Shapiro–Wilk Normalverteilungstest . . . . . . . . . . .446<br />

5.1.10 Kolmogoroff(–Smirnoff)–Test . . . . . . . . . . . . . . . .447<br />

5.1.11 –Anpassungstest . . . . . . . . . . . . . . . . . . . . . . . . . .448<br />

5.1.12 Wilcoxon–Rangtest . . . . . . . . . . . . . . . . . . . . . . . . . .449<br />

5.1.13 Korrelationstest . . . . . . . . . . . . . . . . . . . . . . . . . . . . .450<br />

5.2 Schätzen eines Parameters . . . . . . . . . . . . . . . . . . . . . . . .452<br />

5.2.1 Abriss der klassischen Schätztheorie . . . . . . . . . . .452<br />

5.2.2 Schätzen eines Parameters in R . . . . . . . . . . . . . . .456<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

17


5.2.3 Robuste Parameterschätzung in R . . . . . . . . . . . . .463<br />

6 numerische Algorithmen in S-<strong>Plus</strong>/R . . . . . . . . . . . . . . . . .477<br />

6.1 Interpolation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477<br />

6.1.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477<br />

6.1.2 Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477<br />

6.1.3 Gütekriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .480<br />

6.1.4 Vor– <strong>und</strong> Nachteile . . . . . . . . . . . . . . . . . . . . . . . . . . .480<br />

6.1.5 Umsetzung in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .481<br />

6.2 numerische Invertierung . . . . . . . . . . . . . . . . . . . . . . . . . . .488<br />

6.2.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .488<br />

6.2.2 Methode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .488<br />

6.3 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .489<br />

6.3.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .489<br />

6.3.2 Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .489<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

18


6.3.3 Umsetzung in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490<br />

6.4 Lösen von Gleichungssystemen II. . . . . . . . . . . . . . . . . . .496<br />

6.4.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496<br />

6.4.2 Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496<br />

6.4.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501<br />

6.4.4 Umsetzung in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .502<br />

6.5 Minimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .502<br />

6.5.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .502<br />

6.5.2 Klassen von Problemen . . . . . . . . . . . . . . . . . . . . . . .503<br />

6.5.3 Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .505<br />

6.5.4 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508<br />

6.5.5 Umsetzung in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508<br />

6.6 sich selbst verändernde Programme . . . . . . . . . . . . . . . .509<br />

7 strukturierte Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

19


7.1 Regressionsmodelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526<br />

7.1.1 Lineare Statistische Modelle . . . . . . . . . . . . . . . . . .527<br />

7.1.2 Generalisiert Lineare Modelle. . . . . . . . . . . . . . . . . .559<br />

7.1.3 ein Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .566<br />

7.2 Elemente Multivariater Statistik . . . . . . . . . . . . . . . . . . .568<br />

7.2.1 die multivariate Normalverteilung . . . . . . . . . . . . .568<br />

7.2.2 graphische Methoden . . . . . . . . . . . . . . . . . . . . . . . . .568<br />

7.2.3 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .568<br />

7.2.4 Hauptkomponenten– <strong>und</strong> Faktoranalyse . . . . . . .570<br />

7.2.5 Multidimensional Scaling . . . . . . . . . . . . . . . . . . . . .572<br />

7.2.6 Cluster–Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572<br />

7.2.7 Diskriminanzanalyse . . . . . . . . . . . . . . . . . . . . . . . . . .575<br />

7.3 Zeitreihenanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .576<br />

7.3.1 Einführung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .576<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

20


7.3.2 Autokovarianz <strong>und</strong> Spektrum . . . . . . . . . . . . . . . . .585<br />

7.3.3 ARIMA–Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . .588<br />

7.3.4 Trend– <strong>und</strong> Saison–Bereinigung . . . . . . . . . . . . . . .589<br />

7.3.5 Multiple Zeitreihen . . . . . . . . . . . . . . . . . . . . . . . . . . .590<br />

7.3.6 Zustandsraummodelle . . . . . . . . . . . . . . . . . . . . . . . .592<br />

7.3.7 (G)ARCH–Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . .596<br />

7.3.8 weitere finanzmathematische Modelle. . . . . . . . . .597<br />

7.3.9 Tests aus Paket tseries . . . . . . . . . . . . . . . . . . . . .598<br />

7.4 Geostatistik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .599<br />

7.4.1 Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .599<br />

7.4.2 Interpolation <strong>und</strong> Kriging . . . . . . . . . . . . . . . . . . . . .604<br />

7.4.3 Punktprozesse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .605<br />

8 fortgeschrittene Programmierung . . . . . . . . . . . . . . . . . . . . .608<br />

8.1 R als objektorientierte Sprache. . . . . . . . . . . . . . . . . . . . .608<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

21


8.1.1 Paradigmen objektorientierter Programmierung<br />

(OOP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608<br />

8.1.2 OOP – Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . .611<br />

8.1.3 OOP – Realisierung in R. . . . . . . . . . . . . . . . . . . . . .615<br />

8.1.4 Befehle: Klassen im S4–Klassenkonzept . . . . . . . .626<br />

8.1.5 Befehle: Methoden im S3– <strong>und</strong><br />

S4–Klassenkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . .640<br />

8.1.6 Befehle: Anfragen, welche Methoden wie<br />

existieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .657<br />

8.1.7 Befehle: Versionsmanagement . . . . . . . . . . . . . . . . .660<br />

8.1.8 Befehle: Typüberprüfung zur Laufzeit <strong>und</strong><br />

Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .663<br />

8.1.9 Erfahrungen mit S4-Klassen. . . . . . . . . . . . . . . . . . .670<br />

8.2 Schreiben eigener Pakete . . . . . . . . . . . . . . . . . . . . . . . . . .678<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

22


8.2.1 Wie benützt man R effizient? . . . . . . . . . . . . . . . . .678<br />

8.2.2 das R–packaging System. . . . . . . . . . . . . . . . . . . . . .681<br />

8.2.3 Struktur von R–Paketen . . . . . . . . . . . . . . . . . . . . . .684<br />

8.2.4 Aufbau des DESCRIPTION-file . . . . . . . . . . . . . . . . .687<br />

8.2.5 Format <strong>für</strong> Datensätze. . . . . . . . . . . . . . . . . . . . . . . .691<br />

8.2.6 Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .692<br />

8.2.7 Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .708<br />

8.2.8 Vorbereiten der Anlage eines Pakets . . . . . . . . . . .712<br />

8.2.9 Anlage eines Pakets . . . . . . . . . . . . . . . . . . . . . . . . . .713<br />

8.2.10 Binär– <strong>und</strong> Quell–Pakete . . . . . . . . . . . . . . . . . . . .714<br />

8.2.11 Checken eines Pakets. . . . . . . . . . . . . . . . . . . . . . . .715<br />

8.2.12 Vorbereitungen zur Erzeugung von R-Paketen<br />

unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .716<br />

8.2.13 Erstellen von B<strong>und</strong>les . . . . . . . . . . . . . . . . . . . . . . .721<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

23


8.2.14 Weitergabe eines Pakets/B<strong>und</strong>les . . . . . . . . . . . .722<br />

8.2.15 Erfahrungen mit dem Schnüren von Paketen . .722<br />

8.3 Schnittstellen zu anderen Programmiersprachen. . . . .728<br />

8.3.1 Wozu ist das gut? . . . . . . . . . . . . . . . . . . . . . . . . . . . .728<br />

8.3.2 vor Nutzung von compiliertem Code: Profiling<br />

von R–Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .729<br />

8.3.3 Schnittstellen von <strong>und</strong> zu anderen<br />

Programmiersprachen. . . . . . . . . . . . . . . . . . . . . . . . .733<br />

8.3.4 Schnittstellen zu Datenbanken — R <strong>und</strong><br />

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .734<br />

8.3.5 C/FORTRAN–Code in R . . . . . . . . . . . . . . . . . . . . . . . .741<br />

8.3.6 dynamisches Einladen von Bibliotheken/DLL’s .764<br />

8.3.7 Erfahrungen mit C-Code in R . . . . . . . . . . . . . . . . .769<br />

8.3.8 Erzeugen von Shared Libraries/DLL’s . . . . . . . . . .773<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

24


8.3.9 Koordination der Speichermanager . . . . . . . . . . . .774<br />

8.3.10 Exkurs: Speichermanagement in R . . . . . . . . . . .778<br />

8.3.11 Verschiedene Aufrufe von R <strong>und</strong><br />

Kommandozeilenoptionen . . . . . . . . . . . . . . . . . . . . .792<br />

8.3.12 R auf Parallelrechnern . . . . . . . . . . . . . . . . . . . . . . .801<br />

8.3.13 Beispiel: R im InterNet — R im<br />

BATCH–Modus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .819<br />

8.4 Struktur von CRAN / das R Core Team . . . . . . . . . . . .843<br />

8.4.1 das CRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .843<br />

8.4.2 die R Fo<strong>und</strong>ation. . . . . . . . . . . . . . . . . . . . . . . . . . . . .843<br />

8.4.3 R Core Team . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .847<br />

8.4.4 Einreichung eigener Pakete bei CRAN . . . . . . . . .861<br />

A Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .864<br />

<br />

A.1 Blatt 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .864<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

25


A.1.1 Arbeit mit R-Skripten am Beispiel eines<br />

beliebigen Editors: (ohne direkte Anbindung an<br />

R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .865<br />

A.1.2 Auffinden von Datensätzen . . . . . . . . . . . . . . . . . . .866<br />

A.1.3 Datenimport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .867<br />

A.1.4 Mustererzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . .868<br />

A.2 Blatt 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .869<br />

A.2.1 Indexoperationen, Matrizen . . . . . . . . . . . . . . . . . . .870<br />

A.2.2 Faktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .872<br />

A.2.3 String-, Matrixoperationen . . . . . . . . . . . . . . . . . . .873<br />

A.2.4 Matrixoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . .874<br />

A.2.5 Schreiben von Daten auf File . . . . . . . . . . . . . . . . .876<br />

A.3 Blatt 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .877<br />

<br />

A.3.1 Skalenniveaus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .878<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

26


A.3.2 Univariate Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . .879<br />

A.3.3 Elementare Datenanalyse . . . . . . . . . . . . . . . . . . . . .880<br />

A.3.4 Univariate Konvexkombinationen. . . . . . . . . . . . . .882<br />

A.3.5 Übungsaufgaben zur Stochastik. . . . . . . . . . . . . . .884<br />

A.4 Blatt 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .886<br />

A.4.1 Visualisierung des (schwachen) Gesetzes der<br />

großen Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .887<br />

A.4.2 Numerische Integration: Berechnung von . . . .889<br />

A.4.3 Berechnung von . . . . . . . . . . . . . . . . . . . . . . .891<br />

A.4.4 Konfidenzintervalle, Bootstrap . . . . . . . . . . . . . . . .893<br />

A.5 Blatt 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .896<br />

A.5.1 Maximale Lücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . .897<br />

A.5.2 Buffons Nadelproblem — Berechnung von II.899<br />

A.5.3 Dichteplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .902<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

27


A.5.4 Schleifen – Schleifenvermeidung –<br />

Laufzeitvergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . .904<br />

A.5.5 Adaptives Verfahren zur zweidimensionalen<br />

numerischen Integration . . . . . . . . . . . . . . . . . . . . . .906<br />

A.6 Blatt 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .910<br />

A.6.1 Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .911<br />

A.6.2 B<strong>und</strong>estagswahl 2002 . . . . . . . . . . . . . . . . . . . . . . . .913<br />

A.6.3 Multivariate Konvexkombination . . . . . . . . . . . . . .915<br />

A.6.4 Regressionsplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . .918<br />

A.6.5 Powerpoint-Präsentation . . . . . . . . . . . . . . . . . . . . .920<br />

A.7 Blatt 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .921<br />

A.7.1 Shapiro-Wilk, Kolmogorov-Smirnov,<br />

-Anpassungstest . . . . . . . . . . . . . . . . . . . . . . . . . . .922<br />

A.7.2 Wilcoxon <strong>und</strong> t-Test, - <strong>und</strong> F-Test. . . . . . . . . .923<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

28


A.7.3 Fisher- <strong>und</strong> t-Test. . . . . . . . . . . . . . . . . . . . . . . . . . . .925<br />

A.7.4 Testvergleich durch Simulation . . . . . . . . . . . . . . .926<br />

A.8 Blatt 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .929<br />

A.8.1 Indiskrete Umfrage . . . . . . . . . . . . . . . . . . . . . . . . . . .930<br />

A.8.2 ML–Schätzer <strong>für</strong> aus . . . .932<br />

A.8.3 Simulationsstudie . . . . . . . . . . . . . . . . . . . . . . . . . . . .934<br />

A.9 Blatt 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .936<br />

A.9.1 Berechnung eines Quantils. . . . . . . . . . . . . . . . . . . .937<br />

A.9.2 Schätzung eines eindimensionalen Parameters .939<br />

A.9.3 Numerische Probleme mit dem<br />

Coupon-Collector. . . . . . . . . . . . . . . . . . . . . . . . . . . . .942<br />

A.9.4 Optimale Prognose. . . . . . . . . . . . . . . . . . . . . . . . . . .946<br />

A.10 Blatt 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .950<br />

<br />

A.10.1 Lineare Regression . . . . . . . . . . . . . . . . . . . . . . . . . .951<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

29


A.10.2 Freier Fall eines Körpers. . . . . . . . . . . . . . . . . . . . .952<br />

A.10.3 Länge der alten Meile . . . . . . . . . . . . . . . . . . . . . . .954<br />

A.10.4 Modellanpassung, Modellwahl . . . . . . . . . . . . . . .956<br />

A.11 Blatt 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .958<br />

A.11.1 ANOVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .959<br />

A.11.2 Box–Cox–Transformation I . . . . . . . . . . . . . . . . . .961<br />

A.11.3 Box–Cox–Transformation II. . . . . . . . . . . . . . . . . .962<br />

A.11.4 Generalisiert lineares Modell . . . . . . . . . . . . . . . . .963<br />

A.12 Blatt 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .965<br />

A.12.1 Multivariate Normalverteilung . . . . . . . . . . . . . . .966<br />

A.12.2 Clustering, Diskriminanzanalyse. . . . . . . . . . . . . .968<br />

A.12.3 Hauptkomponentenanalyse, Faktoranalyse . . . .970<br />

A.13 Blatt 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .974<br />

A.12.4 Normalisierte Hauptkomponentenanalyse . . . . .971<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

30


A.13.1 Zeitreihenanalyse I . . . . . . . . . . . . . . . . . . . . . . . . . .975<br />

A.13.2 Zeitreihenanalyse II . . . . . . . . . . . . . . . . . . . . . . . . .977<br />

A.13.3 Räumliche Statistik . . . . . . . . . . . . . . . . . . . . . . . . .979<br />

A.14 Blatt 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .980<br />

A.14.1 Entwurf einer Simulationsklasse. . . . . . . . . . . . . .981<br />

A.14.2 Indexoperator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .982<br />

A.14.3 Simulationsklasse II . . . . . . . . . . . . . . . . . . . . . . . . .983<br />

A.14.4 Schätzerauswertungsklasse . . . . . . . . . . . . . . . . . .984<br />

A.15 Blatt 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .986<br />

A.15.1 Checken/Erstellen eines Pakets . . . . . . . . . . . . . .987<br />

A.15.2 Anlegen eines Daten-Pakets . . . . . . . . . . . . . . . . .988<br />

A.15.3 Anlegen eines eigenen R-Pakets. . . . . . . . . . . . . .989<br />

A.16 Blatt 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .991<br />

A.15.4 Arbeit mit Sweave . . . . . . . . . . . . . . . . . . . . . . . . . .990<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

31


A.16.1 R <strong>und</strong> MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .992<br />

A.16.2 Aufruf von C Code unter R . . . . . . . . . . . . . . . . . .992<br />

A.16.3 Aufruf von Fortran Code unter R . . . . . . . . . . .993<br />

A.16.4 Paralleles Rechnen mit R . . . . . . . . . . . . . . . . . . . .994<br />

L Lösungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .996<br />

L.1 Lösungsvorschläge Blatt 1 . . . . . . . . . . . . . . . . . . . . . . . . .996<br />

L.1.1 Arbeit mit R-Skripten am Beispiel eines<br />

beliebigen editors: (ohne direkte Anbindung an<br />

R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .996<br />

L.1.2 Auffinden von Datensätzen . . . . . . . . . . . . . . . . . . .998<br />

L.1.3 Datenimport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011<br />

L.1.4 Mustererzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013<br />

L.2 Lösungsvorschläge Blatt 2 . . . . . . . . . . . . . . . . . . . . . . . . 1015<br />

<br />

L.2.1 Indexoperationen, Matrizen . . . . . . . . . . . . . . . . . . 1015<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

32


L.2.2 Faktoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1018<br />

L.2.3 String-, Matrixoperationen . . . . . . . . . . . . . . . . . . . 1020<br />

L.2.4 Matrixoperationen. . . . . . . . . . . . . . . . . . . . . . . . . . .1023<br />

L.2.5 Schreiben von Daten auf File . . . . . . . . . . . . . . . . 1025<br />

L.3 Lösungsvorschläge Blatt 3 . . . . . . . . . . . . . . . . . . . . . . . . 1027<br />

L.3.1 Skalenniveaus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027<br />

L.3.2 Univariate Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . 1028<br />

L.3.3 Elementare Datenanalyse . . . . . . . . . . . . . . . . . . . . 1031<br />

L.3.4 Univariate Konvexkombinationen . . . . . . . . . . . . . 1035<br />

L.3.5 Übungsaufgaben zur Stochastik . . . . . . . . . . . . . . 1037<br />

L.4 Lösungsvorschläge Blatt 4 . . . . . . . . . . . . . . . . . . . . . . . . 1042<br />

L.4.1 Visualisierung des (schwachen) Gesetzes der<br />

großen Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1042<br />

L.4.2 Numerische Integration: Berechnung von . . . 1047<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

33


L.4.3 Berechnung von . . . . . . . . . . . . . . . . . . . . . . .1052<br />

L.4.4 Konfidenzintervalle, Bootstrap . . . . . . . . . . . . . . . 1057<br />

L.5 Lösungsvorschläge Blatt 5 . . . . . . . . . . . . . . . . . . . . . . . . 1063<br />

L.5.1 Maximale Lücke. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1063<br />

L.5.2 Buffons Nadelproblem — Berechnung von II1072<br />

L.5.3 Dichteplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081<br />

L.5.4 Schleifen – Schleifenvermeidung –<br />

Laufzeitvergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085<br />

L.5.5 Adaptives Verfahren zur 2-dimensionalen<br />

numerischen Integration . . . . . . . . . . . . . . . . . . . . . 1091<br />

L.6 Lösungsvorschläge Blatt 6 . . . . . . . . . . . . . . . . . . . . . . . . 1096<br />

L.6.1 Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096<br />

L.6.2 B<strong>und</strong>estagswahl 2002. . . . . . . . . . . . . . . . . . . . . . . .1111<br />

L.6.3 Multivariate Konvexkombination . . . . . . . . . . . . . 1118<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

34


L.6.4 Regressionsplots. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1125<br />

L.6.5 Powerpoint-Präsentation. . . . . . . . . . . . . . . . . . . . .1129<br />

L.7 Lösungsvorschläge Blatt 7 . . . . . . . . . . . . . . . . . . . . . . . . 1130<br />

L.7.1 Shapiro-Wilk, Kolmogorov-Smirnov,<br />

-Anpassungstest . . . . . . . . . . . . . . . . . . . . . . . . . . 1130<br />

L.7.2 Wilcoxon <strong>und</strong> t-Test, - <strong>und</strong> F-Test . . . . . . . . . 1136<br />

L.7.3 Fisher- <strong>und</strong> t-Test . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140<br />

L.7.4 Testvergleich durch Simulation . . . . . . . . . . . . . . . 1145<br />

L.8 Lösungsvorschläge Blatt 8 . . . . . . . . . . . . . . . . . . . . . . . . 1160<br />

L.8.1 Indiskrete Umfrage . . . . . . . . . . . . . . . . . . . . . . . . . . 1160<br />

L.8.2 ML–Schätzer <strong>für</strong> aus . . . 1168<br />

L.8.3 Simulationsstudie . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172<br />

L.9 Lösungsvorschläge Blatt 9 . . . . . . . . . . . . . . . . . . . . . . . . 1180<br />

L.9.1 Berechnung eines Quantils . . . . . . . . . . . . . . . . . . . 1180<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

35


L.9.2 Schätzung eines eindimensionalen Parameters.1187<br />

L.9.3 Numerische Probleme mit dem<br />

Coupon-Collector. . . . . . . . . . . . . . . . . . . . . . . . . . . .1197<br />

L.9.4 Optimale Prognose . . . . . . . . . . . . . . . . . . . . . . . . . . 1205<br />

L.10 Lösungsvorschläge Blatt 10. . . . . . . . . . . . . . . . . . . . . .1216<br />

L.10.1 Lineare Regression . . . . . . . . . . . . . . . . . . . . . . . . . 1216<br />

L.10.2 Freier Fall eines Körpers . . . . . . . . . . . . . . . . . . . . 1218<br />

L.10.3 Länge der alten Meile . . . . . . . . . . . . . . . . . . . . . . 1221<br />

L.10.4 Modellanpassung, Modellwahl . . . . . . . . . . . . . . 1224<br />

L.11 Lösungsvorschläge Blatt 11. . . . . . . . . . . . . . . . . . . . . .1229<br />

L.11.1 ANOVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229<br />

L.11.2 Box–Cox–Transformation I. . . . . . . . . . . . . . . . . .1232<br />

L.11.3 Box–Cox–Transformation II . . . . . . . . . . . . . . . . . 1237<br />

L.11.4 Generalisiert lineares Modell . . . . . . . . . . . . . . . . 1242<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

36


L.12 Lösungsvorschläge Blatt 12. . . . . . . . . . . . . . . . . . . . . .1246<br />

L.12.1 Multivariate Normalverteilung. . . . . . . . . . . . . . .1246<br />

L.12.2 Clustering, Diskriminanzanalyse . . . . . . . . . . . . . 1254<br />

L.12.3 Hauptkomponentenanalyse, Faktoranalyse . . . 1259<br />

L.12.4 normalisierte Hauptkomponentenanalyse. . . . .1263<br />

L.13 Lösungsvorschläge Blatt 13. . . . . . . . . . . . . . . . . . . . . .1273<br />

L.13.1 Zeitreihenanalyse I . . . . . . . . . . . . . . . . . . . . . . . . . 1273<br />

L.13.2 Zeitreihenanalyse II . . . . . . . . . . . . . . . . . . . . . . . . 1283<br />

L.13.3 Räumliche Statistik . . . . . . . . . . . . . . . . . . . . . . . . 1286<br />

L.14 Lösungsvorschläge Blatt 14. . . . . . . . . . . . . . . . . . . . . .1304<br />

L.14.1 Entwurf einer Simulationsklasse . . . . . . . . . . . . . 1304<br />

L.14.2 Indexoperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305<br />

L.14.3 Simulationsklasse II . . . . . . . . . . . . . . . . . . . . . . . . 1306<br />

L.14.4 Schätzerauswertungsklasse. . . . . . . . . . . . . . . . . .1307<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

37


L.15 Lösungsvorschläge Blatt 15. . . . . . . . . . . . . . . . . . . . . .1308<br />

L.15.1 Checken/Erstellen eines Pakets . . . . . . . . . . . . . 1308<br />

L.15.2 Anlegen eines Daten-Pakets . . . . . . . . . . . . . . . . 1308<br />

L.15.3 Anlegen eines eigenen R-Pakets . . . . . . . . . . . . . 1308<br />

L.15.4 Arbeit mit Sweave . . . . . . . . . . . . . . . . . . . . . . . . . 1308<br />

L.16 Lösungsvorschläge Blatt 16. . . . . . . . . . . . . . . . . . . . . .1308<br />

L.16.2 R <strong>und</strong> MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308<br />

L.16.3 Aufruf von C Code unter R . . . . . . . . . . . . . . . . . 1308<br />

L.16.4 Aufruf von Fortran Code unter R . . . . . . . . . . 1308<br />

L.16.5 Paralleles Rechnen mit R . . . . . . . . . . . . . . . . . . . 1309<br />

Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

. .<br />

38


0 Vorwort<br />

0.1 zur Veranstaltung<br />

0.1.1 Rahmen<br />

vorliegende Folien sind Gr<strong>und</strong>lage eines zweisemestrigen Kurses<br />

an der Universität Bayreuth (UBT)<br />

Umfang des Kurses:<br />

– 2 SWS <strong>für</strong> den ersten Teil (bis Kapitel 5), davon 14-tägig ca.<br />

1 St<strong>und</strong>e Übung<br />

– 2 SWS <strong>für</strong> den zweiten Teil (ab Kapitel 6), dazu 14-tägig ca.<br />

2 St<strong>und</strong>en Übung<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

39


der Kurs wurde konzipiert von Dr. Peter Ruckdeschel,<br />

[peter.ruckdeschel@uni-bayreuth.de]<br />

die Übungen wurden konzipiert von Dr. Matthias Kohl,<br />

[matthias.kohl@www.stamats.de]<br />

Übungsschein: kann bei erfolgreicher Teilnahme an den Übungen<br />

oder bei Übernahme eines Referats vergeben werden<br />

zu Übungsaufgaben:<br />

– 14–tägig 4 Aufgaben<br />

– Abgabe per E-Mail an Dozenten<br />

– Vorrechnen / Präsentation der Lösung am Rechner / Beamer<br />

– Datensätze im WWW verfügbar<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

40


0.1.2 Adressaten / Ziele<br />

der Kurs wendet sich vorrangig an Studenten der Mathematik,<br />

Wirtschaftsmathematik <strong>und</strong> Technomathematik<br />

kann aber auch <strong>für</strong> Nicht–Mathematiker mit Interesse an<br />

Programmierung <strong>und</strong> Statistik verwendet werden<br />

Vorkenntnisse:<br />

– <strong>für</strong> Mathematiker: Stochastik I<br />

der Kurs wird in Bayreuth (BT) oft auch parallel zur Stochastik I<br />

angeboten <strong>und</strong> ergänzt simultan die dort präsentierten Konzepte<br />

durch ihre computertechnische Umsetzung<br />

– alternativ: Statistischer Methodenkurs <strong>für</strong><br />

Nicht–Mathematiker<br />

der Kurs konzentriert sich auf die Umsetzung der Begriffe <strong>und</strong><br />

Verfahren aus der Statistik in S, die Begriffe <strong>und</strong> Verfahren<br />

werden als bekannt vorausgesetzt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

41


0.1.3 Anordnung des Stoffs<br />

der Anfang verläuft parallel zu Venables and Ripley (1999):<br />

<br />

– eine Kurzvorstellung von R/S-<strong>Plus</strong> in Kapitel 0<br />

– eine Einführung in die Sprache S in Kapitel 1<br />

nach diesen beiden Kapiteln stehen in der parallel dazu in BT<br />

laufenden Stochastik I zur Verfügung<br />

– Gr<strong>und</strong>begriffe der W–theorie<br />

– insbesondere der Erwartungswert<br />

– Gesetz der großen Zahlen (im einfachsten Fall)<br />

– Zentraler Grenzwertsatz (im einfachsten Fall)<br />

daher ziehen wir in unserem Kapitel 2 Kapitel 5 aus Venables<br />

and Ripley (1999) vor, <strong>und</strong> zwar mit den Zielen:<br />

zeitnahe Umsetzung der Begriffe auf den Computer<br />

frühzeitige, motivierende Simulationsbeispiele<br />

Entwicklung eines intuitiven Verständnisses vom Inhalt der<br />

Grenzwertsätze<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

42


die Tests aus Kapitel 5 von Venables and Ripley (1999) sind<br />

ausgegliedert, da diese in BT in der Stochastik I erst später zur<br />

Verfügung stehen<br />

unser Kapitel 2 ist erweitert um<br />

– einen Exkurs zur Erzeugung von Zufallszahlen; dieser ist aber<br />

optional, da die entsprechenden Verfahren in R sowieso<br />

schon zur Verfügung stehen<br />

– einen Abschnitt zur Simulation von Zufallszahlen <strong>und</strong><br />

Prinzipien der Varianzreduktion, um den Studenten eine Idee<br />

von den Möglichkeiten des Rechners in diesem Bereich zu<br />

geben<br />

um unseren etwas mathematisch/informatisch orientierteren<br />

Hörerkreis zügig an die Programmierung heranzuführen, folgen<br />

unmittelbar die Gr<strong>und</strong>züge der Programmierung in S —<br />

basierend auf Kapitel 4 aus Venables and Ripley (1999)<br />

<br />

es folgt ein Kapitel zur Graphikprogrammierung basierend auf<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

43


Kapitel 3 aus Venables and Ripley (1999), erweitert um einige<br />

nützliche Tabellen<br />

zum Abschluss des WS / Beginn des SS stehen in der<br />

Stochastik I/II in BT die klassische Schätz– <strong>und</strong> Testtheorie zur<br />

Verfügung<br />

Schätz– <strong>und</strong> Testtheorie wird parallel dazu in Kapitel 5<br />

aufgegriffen <strong>und</strong> in ihrer Umsetzung in R betrachtet; dazu<br />

werden<br />

Tests aus Kapitel 5 von Venables and Ripley (1999)<br />

vorgestellt<br />

Prinzipien der ML–Schätzung <strong>und</strong> die entstehenden<br />

Optimierungs– /Nullstellenprobleme besprochen<br />

– BT ist bekannter Standort der Robusten Statistik mit Namen<br />

wie Huber, Rieder<br />

<br />

<br />

intuitiver Zugang zu den Fragestellungen der Robusten<br />

Statistik wird in Abschnitt 5.2.3 geboten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

44


Teil der BT’er Hörerschaft der Stochastik I/II hat bereits<br />

Numerik I/II gehört; um einen <strong>für</strong> unsere Zwecke hinreichend<br />

einheitlichen Kenntnisstand zu erreichen:<br />

– führen wir in Kapitel 6 einige Gr<strong>und</strong>fragestellungen der<br />

Numerik / Optimierung ein: Integration, Interpolation, Lösen<br />

von Gleichungssystemen <strong>und</strong> Optimierung<br />

– nennen gr<strong>und</strong>legende Lösunsgsstrategien<br />

– zeigen ihre Umsetzung / ihre Umsetzbarkeit in R/S-<strong>Plus</strong><br />

viele der <strong>für</strong> den Anwender sehr interessanten, strukturierteren<br />

Modelle <strong>und</strong> darauf aufbauenden Verfahren sind in BT Inhalt<br />

weiterführender Stochastik–Veranstaltungen:<br />

– lineare/generalisiert lineare Modelle<br />

– multivariate Analyse<br />

– Zeitreihenanalyse<br />

– räumliche Statistik<br />

um der Hörerschaft “Appetit” auf diese Veranstaltungen zu<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

45


machen, stellen wir in Kapitel 7 jeweils kurz typische<br />

Fragestellungen vor, die zu diesen Modellen führen <strong>und</strong><br />

präsentieren grob ihre Umsetzung in R<br />

den Abschluss des Kurses bildet ein Kapitel zu Fragen der<br />

fortgeschrittenen Programmierung:<br />

– S als objektorientierte Sprache; Vererbungsmechanismen,<br />

S4–Klassenkonzept,...<br />

– Prinzipien beim Schreiben eigener Bibliotheken / Pakete<br />

– Schnittstellen zu anderen Programmiersprachen<br />

– schließlich: die Organisationsstrukur des CRAN <strong>und</strong> des R<br />

Core–Teams<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

46


0.1.4 Quellen<br />

der Kurs folgt in großen Teilen, sowohl was Inhalt als auch<br />

Darstellung anlangt, Venables and Ripley (1999); dieses Buch<br />

haben wir ins Deutsche übertragen <strong>und</strong> auf eine<br />

“Beamerfassung” umgearbeitet<br />

die Anordnung unterscheidet sich jedoch beträchtlich, siehe<br />

letzter Abschnitt<br />

die Übungsaufgaben aus Venables and Ripley (1999) erschienen<br />

uns <strong>für</strong> unseren mathematisch orientierten Hörerkreis nicht<br />

unbedingt geeignet; daher haben wir einen eigenen Satz an<br />

Übungsaufgaben mit Lösungsvorschlägen zur Verfügung gestellt<br />

die Erweiterungen von Kapitel 2 verwenden Ripley (1987)<br />

Kapitel 5 verwendet bei der Darstellung der klassischen Schätz–<br />

<strong>und</strong> Testtheorie ohne Nachweis den Kanon der BT’er<br />

Veranstaltung Stochastik I/II, bei der Einführung in die<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

47


Fragestellungen der robusten Statistik die Vorlesungsskripten zur<br />

Veranstaltung “Robuste Statistik” in BT<br />

Kapitel 6 hält sich an den Kanon der BT’er Veranstaltung<br />

Numerik I/II<br />

Kapitel 7 verwendet dann wieder weitgehend Venables and<br />

Ripley (1999)<br />

Kapitel 8 bezieht sich in großen Teilen auf Chambers (1998),<br />

sowie auf Gentleman (2002) <strong>und</strong> ein DSC–Tutorial 2003 von<br />

D. Bates <strong>und</strong> T. Lumley<br />

daneben sind natürlich stets, wenn auch nicht immer explizit<br />

aufgeführt, zu nennen<br />

– die R–Hilfe<br />

– die R–Manuals<br />

<br />

– die WWW-Seiten des R–Projekts<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

48


0.1.5 zum Gebrauch des .pdf–Files<br />

es handelt sich um die Folien, die während der Vorlesung per<br />

Beamer präsentiert werden<br />

erfahrungsgemäß sind das ca. 30 Folien pro 90 Minuten<br />

die Folien liegen in einer Schwarzweiß–Fassung zum Ausdruck<br />

<strong>und</strong> in einer bunten Fassung zur Verwendung am Bildschirm /<br />

Beamer vor<br />

die Studenten haben in BT die Möglichkeit, sich am Lehrstuhl<br />

einen Ausdruck zum Selbstkostenpreis erstellen zu lassen; mit<br />

diesem können sie dann die Vorlesung verfolgen <strong>und</strong> Notizen ins<br />

Skript machen<br />

zum Ausdruck verwende man die bei fast allen<br />

Postscript–Druckern vorhandene Möglichkeit 4 Seiten auf eine<br />

DINA4 Seite im Querformat ausgeben zu lassen<br />

<br />

während der Übungen <strong>und</strong> nach dem Kurs dient dieser R-Kurs<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

49


als (deutsche) Hilfe <strong>und</strong> kann im Acrobat Reader neben der<br />

aktuellen R–Sitzung geöffnet bleiben, um Fragen schnell zu<br />

klären<br />

die Folien sind mit pdfL ATEX aus der MiKTeX–Distribution<br />

erstellt; insbesondere verwenden sie das hyperref–Paket von<br />

Sebastian Rahtz, so dass Querverweise im Text durch Klicken<br />

verfolgt werden können, <strong>und</strong> sofern ein InterNet Anschluss im<br />

Rechner offen steht auch externen Links gefolgt werden kann<br />

auf die Erstellung eines Index wurde verzichtet, weil mit der<br />

Suchfunktion im Acrobat Reader ab Version 6.0 dies viel<br />

allgemeiner möglich ist<br />

die Übungsaufgaben sind gruppiert zu jeweils ca. 3–5 Aufgaben<br />

am Anfang einer jeden solchen Gruppe findet sich der Verweis<br />

auf die entsprechenden Kapitel im Kurs<br />

im Anschluss an jede Übungsaufgabe finden sich Verweise auf<br />

Lösungsvorschläge; einige Aufgaben verwenden spezielle<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

50


Datensätze, die ebenfalls verlinkt sind<br />

<br />

– die Lösungsvorschläge finden sich im .pdf–File am Ende<br />

– Lösungsvorschläge <strong>und</strong> Datensätze können sowohl lokal vom<br />

File als auch aus dem Netz als ASCII–Files bezogen werden<br />

bei der Beamer–/Folienversion des Kurses verwenden wir eine<br />

“Farbkodierung”; so erscheinen:<br />

– Überschriften<br />

£ Überschriften der Hauptabschnitte des Files<br />

£ Kapitelüberschriften<br />

£ Abschnittsüberschriften<br />

£ Unterabschnittsüberschriften<br />

£ “Unterunterabschnitts”–Überschriften<br />

£ laufender Text<br />

– Sätze etc.<br />

£ Sätze, Theoreme, Lemmata, etc.<br />

£ Algorithmen<br />

£ Beispiele<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

51


£ Beweise<br />

£ Beweisskizzen<br />

– Links<br />

£ Autoren<br />

£ Links innerhalb des Texts<br />

£ bibliographische Referenzen<br />

£ Links auf Filenamen<br />

£ Links auf URLS<br />

– <strong>und</strong> außerdem....<br />

£ R–Code<br />

£ Motivationen/erläuternder Text<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

52


0.1.6 Danksagung<br />

Dank geht an unseren Chef, Prof.Dr. Helmut Rieder, der uns zu der<br />

Erstellung <strong>und</strong> Veröffentlichung dieser Vorlesungsunterlagen<br />

ermunterte<br />

<strong>für</strong> ihre konstruktive Kritik <strong>und</strong> guten Lösungsvorschläge zu den<br />

Übungsaufgaben bedanken wir uns bei unseren beiden<br />

Software–Praktikanten<br />

– Thomas Stabla, statho3@web.de<br />

– Florian Camphausen, fcampi@gmx.de<br />

mit denen wir zusammen basierend auf diesem Kurs das R–Paket<br />

“ distr ” erstellt haben, siehe auch Ruckdeschel et al. (2006).<br />

ebenfalls <strong>für</strong> ihre konstruktive Kritik sowie <strong>für</strong> ihre Referate geht ein<br />

Dank an unsere eifrigen Hörer aus dem ersten Durchgang<br />

– Matthias Brandl, brandl.matthias@web.de<br />

– Volkmar Klatt, CanisMaior@web.de (— ein Geograph (!!))<br />

<br />

– Sebastian Schmidt, sebastian.schmidt@uni-bayreuth.de<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

53


ei einer Revision des Kurses im WS 2004/05 halfen uns<br />

<br />

dankenswerterweise bei der Durchsicht<br />

– Thomas Stabla, statho3@web.de<br />

– Michael Scheuerer, michael.scheuerer@uni-bayreuth.de<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

54


0.2 Kurzvorstellung R/S-<strong>Plus</strong><br />

c.f. Venables and Ripley (1999)<br />

0.2.1 Einsatzgebiete von R/S-<strong>Plus</strong><br />

umfassende, offene Programmierumgebung<br />

– Werkzeuge <strong>für</strong> Statistik <strong>und</strong> Datenanalyse<br />

– flexibel programmierbar, echte Programmiersprache<br />

– matrixorientiert; objektorientiert<br />

– statistische Modelle in Programmier-Ausdrücke umsetzbar<br />

– professionelle Grafikausgabe auch im Managementbereich<br />

zur Entscheidungsunterstützung<br />

– umfangreiche Import- <strong>und</strong> Exportfunktionen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

55


0.2.2 S-<strong>Plus</strong> <strong>und</strong> R<br />

Ursprung: S (Bell-Labs, ATT jetzt Lucent!)<br />

kommerzielle Version: S-<strong>Plus</strong><br />

aktuell Version 7.0 (basiert auf S version 4)<br />

– Vertreiber: Insightful Corporation, früher MathSoft Inc.<br />

– sehr weit verbreitet (Industrie-Standard)<br />

– schöne graphische Benutzeroberfläche,<br />

WYSIWYG – but you can get more<br />

– komfortable Import/Export–Facilities (Grafik; Daten)<br />

– Schnittstelle zu Excel, PowerPoint<br />

– Trellis-Plots<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

56


Open Source-Variante: R<br />

– aktuell (April 2007): Version 2.5.0, Release Date 24.04.2006;<br />

basiert auf S version 4<br />

– initiiert von Ross Ihaka / Robert Gentlemen (University of<br />

Auckland, Neuseeland)<br />

– kommandozeilen-orientierter Interpreter von S<br />

– komfortabel in Verbindung mit Emacs/WinEdt<br />

– kleiner Kern / viele Erweiterungen (über Pakete (Stand<br />

April 2007)!)<br />

– analoges Vertriebs–Konzept zu TEX/ L ATEX, Linux<br />

– gnu-Lizenz, in diesem Rahmen frei verwendbar ohne<br />

Restriktionen, alle Sourcen öffentlich zugänglich<br />

– compilierte Codes <strong>für</strong> die Windows–, Mac– <strong>und</strong> die<br />

Linux–Welt<br />

– eine große, weltweite User– <strong>und</strong> Entwicklergemeinde, weit<br />

verbreitet in der Forschung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

57


– z.T. wesentlich schneller als S-<strong>Plus</strong>, c.f.<br />

http://www.sciviews.org/other/benchmark.htm<br />

R <strong>und</strong> S-plus zu identische Syntax<br />

beide besitzen exzellente Manuals (mit Literatur–Referenzen)<br />

beide basieren auf wohl–getesteten numerischen Routinen auf<br />

FORTRAN Basis (Netlib,N.A.G.)<br />

Der Kurs basiert auf R.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

58


0.2.3 Vergleich mit anderen Paketen / Sprachen<br />

andere Statistik-Pakete<br />

– abgeschlossene, datenbankorientierte Systeme<br />

£ SAS: verbreitet in Banken– <strong>und</strong> Versicherungswirtschaft<br />

£ SPSS: weit verbreitet in der empirischen Sozial– <strong>und</strong><br />

– offene Systeme<br />

<br />

Wirtschaftsforschung<br />

£ wegen der Nähe zur Datenbank:<br />

¡ effizienter Zugang auch zu komplexen Datensätzen<br />

¡ speziell <strong>für</strong> konkurrentiellen Zugriff:<br />

Ablaufsicherheit vor Programmier-Mächtigkeit<br />

— keine while, nur for Schleifen —<br />

¡ Datensätze als Relationen statt als arrays<br />

£ ISP<br />

¡ “nur” auf DOS-Basis!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

59


¡ setzte Maßstäbe: interaktive, graphische Analyse<br />

£ XploRe<br />

¡ MD-Tech: Gruppe um Prof. Härdle, HU Berlin<br />

¡ verlinkt: Dokumentation, Beispiele Programme<br />

¡ spezielle Teach-Ware<br />

¡ auch als Java-Applet im Netz<br />

andere Mathematik-Pakete<br />

– MAPLE<br />

£ rudimentäre Statistik-Fähigkeiten<br />

£ Stärke: symbolisches Rechnen<br />

– MATLAB<br />

£ wie S: matrixorientiert<br />

£ gibt Statistik-Modul, dem Dozenten aber nicht bekannt<br />

andere Programmiersprachen<br />

<br />

– S-<strong>Plus</strong> / R - Programme: interpretiert, nicht kompiliert<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

60


– wie jede höhere Programmiersprache:<br />

R / S-<strong>Plus</strong> potenziell erheblich langsamer als<br />

maschinennähere Sprachen<br />

– da<strong>für</strong> viel effizientere Notation<br />

– sehr gute Schnittstellen zu C / FORTRAN:<br />

— sowohl Aufruf von S-<strong>Plus</strong> / R von C / FORTRAN aus<br />

als auch Nutzung von C / FORTRAN - code in S-<strong>Plus</strong> / R.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

61


0.3 Vorschläge <strong>für</strong> Referatthemen<br />

Vor. Voraussetzungen<br />

Inh. Inhalt<br />

Lit. Literatur<br />

0.3.1 Eingabe / Import von Daten in R / S-<strong>Plus</strong><br />

Vor. keine<br />

Inh. – Datenerhebung:<br />

automatisiert, von Hand, Masken, Kontrollmöglichkeiten<br />

– Datenaufbereitung (je nach Vorwissen)<br />

C, PASCAL o.ä. (Beispiele), PERL, Excel, Word, lexx<br />

– Datenimport in R / Splus:<br />

per Befehl interaktiv, Befehle mit Argumenten<br />

Datenstrukturen, in die hinein importiert wird<br />

<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten, evtl. Vorkenntnisse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

62


0.3.2 Graphik: die vielen Parameter von plot <strong>und</strong><br />

der par-Befehl<br />

Vor. keine<br />

Inh. – Vorstellung des Befehls plot mit seinen vielen, vielen<br />

Argumenten<br />

– legend, text, title,<br />

– automatisches Erzeugen / interaktiv<br />

– Aufbereitung/Nachbereitung (extern)<br />

– Beschriften ( TEX-Symbole!)<br />

– par-Befehl<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten, eigene Beispiele<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

63


0.3.3 Export von Daten <strong>und</strong> Graphik<br />

Vor. keine<br />

Inh. – Vorstellung verschiedener Graphikformate<br />

(mit Vor- <strong>und</strong> Nachteilen)<br />

– Datenkomprimierungs-Formate<br />

– Einbinden von R-Grafiken in PowerPoint L ATEX /www<br />

– Aufbereiten von Reports zur “Tischvorlage”<br />

– Exportbefehle (Syntax, Optionen)<br />

Lit. R-Manuals, InterNet, evtl bei Dozenten, evtl. Erfahrung mit<br />

PowerPoint etc<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

64


0.3.4 Klassen <strong>und</strong> objektorientierte<br />

Programmierung<br />

Vor. Programmierkenntnisse<br />

Inh. – Paradigmen:<br />

£ Methoden bei den Daten<br />

£ Vererbung<br />

£ Kapselung<br />

£ virtuelle Methoden<br />

– Syntax in R / Splus<br />

– Klassenstruktur von R / Splus<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten, evtl. Vorkenntnisse aus<br />

C++, JAVA<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

65


0.3.5 Speicherverwaltung in R / S-<strong>Plus</strong><br />

Vor. Programmierkenntnisse<br />

Inh. – dynamische Allokation von Speicher<br />

– Freigabe<br />

– Diagnosemoeglichkeiten<br />

– Erfahrungsbericht<br />

– die Befehle options, assign, envir=...<br />

– Speicherverbrauch bei Zuweisungen, Kopien,<br />

Parameterübergabe<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten, evtl. Vorkenntnisse aus<br />

Informatik?<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

66


0.3.6 Schnittstellenprogrammierung<br />

Vor. Programmierkenntnisse<br />

Inh. – C R oder FORTRAN C<br />

<br />

– BATCH-Programmierung<br />

(am besten unter Linux: core, &, ...)<br />

– Programmierung als DLL<br />

– Programmierung als ODE<br />

– Beispiele<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

67


0.3.7 Bibliotheken (libraries) <strong>und</strong> Zusatzpakete<br />

(Packages)<br />

Vor. Programmierkenntnisse<br />

Inh. – Wie schreibt man eine Library?<br />

– Wie bindet man sie ein (automatisch)?<br />

– Kurzvorstellung einer (großen) Library, am besten eine zur<br />

Robustheit<br />

– Erfahrungsbericht<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten, evtl. Vorkenntnisse aus<br />

Informatik?<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

68


0.3.8 Organisation von CRAN <strong>und</strong> Veröffentlichung<br />

eigener Routinen<br />

Vor. keine<br />

Inh. – Foren (Welche gibt es?)<br />

– Organisation der Nutzergemeinde<br />

– Diagnosemöglichkeiten<br />

– Zuständigkeiten<br />

– Anforderungen an eigene Routinen<br />

– Reviewing-Process<br />

Lit. R-Manuals, InterNet, evtl. bei Dozenten<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

69


0.4 Aufbau der Sprache<br />

c.f. Venables and Ripley (1999), pp. 1–16<br />

Objekte:<br />

– alle Ergebnisse, Ausgaben, Eingaben sind Objekte;<br />

– in S-<strong>Plus</strong> rekonstruierbar aus DIR .Data/stock bzw.<br />

_DATA,<br />

– in R: im virtuellen Verzeichnis (im Arbeitsspeicher)<br />

.GlobalEnv<br />

– komplexere Objekte Klassen<br />

Kommentare:<br />

#Dies ist ein Kommentar<br />

Listen:<br />

Objekte A,b werden durch list (A,b) zu neuem Objekt<br />

Ausdrücke:<br />

A #gibt " Inhalt " von Objekt A aus<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

70


Zuweisung:<br />

<br />

A8 #weist dem Objekt A den Inhalt 8 zu<br />

oder synonym A=8<br />

Funktionen:<br />

Afunction(a1,a2=2) {aa1£a2; return(a)}<br />

generiert die Funktion A mit Argumenten a1,a2; a2=2 per<br />

default; Aufruf mit A(3) ergibt £ , A(3,3) ergibt £ <br />

Hilfe:<br />

help(rnorm) #gibt die Hilfe zur Funktion rnorm() aus<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

71


0.5 Wo bekomme ich (online-)Hilfe?<br />

bei Fragen zu R gehe man wie folgt vor<br />

Lesen der R-Manuals<br />

– R: An Introduction to R<br />

– R: Writing R Extensions<br />

– die Manuals der eingereichten Packages auf dem CRAN<br />

– weitere Manuals auf den R-Seiten im Web<br />

Verwenden einer Kurzübersicht (siehe auch nächster Abschnitt)<br />

Konsultieren der R-Hilfe mit ? bzw. help oder help.search<br />

lesen der FAQ, zu beziehen unter<br />

http://cran.r-project.org/faqs.html<br />

Durchsuchen der R-Webseiten, z.B. mit<br />

http://finzi.psych.upenn.edu/search.html<br />

Durchsuchen der R-Mailarchive, z.B. mit<br />

http://maths.newcastle.edu.au/~rking/R/<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

72


im Entstehen begriffen (Apr. 2006): R-Wiki<br />

<br />

– Konzept: Mail von Philippe Grosjean, 18 Jan 2006<br />

– Ziele:<br />

£ Erstellung einer Online Dokumentation <strong>für</strong> R mithilfe der aus<br />

der Wikipedia bekannten Infra-Struktur an Wikis;<br />

£ kleine Schritt-<strong>für</strong>-Schritt Anleitungen sollen der Allgemeinheit<br />

zur Verfügung gestellt werden<br />

– Mitarbeit / Nutzung:<br />

£ siehe auch “R Wiki - About this Wiki”<br />

– nicht unumstritten: siehe auch Mail von Martin Mächler, 11 Jan<br />

2006 (Hauptpunkt: Frage der Qualtiätssicherung)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

73


erst dann: Konsultieren des Maintainers des Pakets / oder der<br />

Hilfeforen:<br />

<br />

– dazu zuerst: Lesen der Richtlinien unter<br />

http://www.r-project.org/posting-guide.html<br />

– r-announce:<br />

http://www.stat.math.ethz.ch/mailman/listinfo/r-announce<br />

Ankündigungen größerer Entwicklungen / neuer Versionen; wenige<br />

Mails/Monat.<br />

– r-packages:<br />

http://www.stat.math.ethz.ch/mailman/listinfo/r-packages<br />

Ankündigungen von neu veröffentlichen Paketen oder Versionen<br />

davon<br />

– r-help: http://www.stat.math.ethz.ch/mailman/listinfo/r-help<br />

die Haupt R-Mailing Liste (ca 50 Mails/Tag)<br />

– r-devel:<br />

http://www.stat.math.ethz.ch/mailman/listinfo/r-devel<br />

tiefgreifendere Programmierfragen; stark moderiert; ca 5-10<br />

Mails/Tag<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

74


0.6 eine kommentierte Literaturliste<br />

Dieser Kurs kann kein Buch zu R/S-<strong>Plus</strong> ersetzen, sondern dient vielmehr als<br />

Kurs-Gr<strong>und</strong>lage bzw. als Online-Unterstützung. . . ; (vgl. Abschnitt 0.1.5)<br />

Wir empfehlen folgende Bücher/Kurse zum Lesen neben diesem Kurs:<br />

auf deutsch<br />

<br />

– Dolić D. (2004): Statistik mit R. Oldenbourg.<br />

Siehe auch http://www.dolic.de/R/index.html<br />

eher <strong>für</strong> Nicht-Mathematiker; Schwerpunkt auf elementarer Statistik;<br />

keine multivariate Statistik<br />

– Ligges U. (2005): Programmieren mit R. Springer. Siehe auch<br />

http://www.statistik.uni-dortm<strong>und</strong>.de/ ligges/PmitR/<br />

Schwerpunkt eher auf Programmierung; keine Übungsaufgaben;<br />

– Sachs L. <strong>und</strong> Hedderich J. (2006): Angewandte Statistik.<br />

Methodensammlung mit R. Springer. eigentlich wie Titel schon sagt:<br />

Methodensammlung; aber sehr gut aufbereitet <strong>und</strong> mit entsprechender<br />

Umsetzung der Verfahren in R; wenige aber sehr illustrative<br />

Übungsaufgaben zu statistischen Fragestellungen mit Lösungen;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

75


– Sawitzki G. (2005): Einführung in S. Zu beziehen unter<br />

http://www.statlab.uni-heidelberg.de/projects/s/s.pdf.<br />

knapp <strong>und</strong> gut; Schwerpunkt eher auf Datenanalyse; mit<br />

Übungsaufgaben; weniger Details zur Programmierung<br />

auf englisch —zu R im “ganzen”<br />

– Chambers, J.M. (1998): Programming with data. A guide to the<br />

S language. Springer. Siehe auch<br />

http://cm.bell-labs.com/stat/Sbook/index.html.<br />

umfassend, beschreibt das “ganze” Konzept hinter S bzw. S4; keine<br />

Übungsaufgaben<br />

– Dalgaard P. (2002): Introductory Statistics with R. Springer.<br />

Siehe auch http://www.biostat.ku.dk/ pd/ISwR.html<br />

umfassend, kurz <strong>und</strong> präzise; besonders gut auch <strong>für</strong> absolute<br />

Computer-Laien geeignet; keine Übungsaufgaben<br />

– Venables W. <strong>und</strong> Ripley B. (2000): S Programming. Statistics<br />

and Computing. Springer. Siehe dazu auch<br />

<br />

http://www.stats.ox.ac.uk/pub/MASS3/Sprog/<br />

umfassend; Schwerpunkt: fortgeschrittene Programmierung (vgl.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

76


Kapitel 8 d. Kurses); wenige, lehrreiche Übungsaufgaben (ohne Lösung)<br />

– Venables W. <strong>und</strong> Ripley B. (2002): Modern Applied Statistics<br />

with S-<strong>Plus</strong>. Springer, 4. Aufl.; siehe auch<br />

http://www.stats.ox.ac.uk/pub/MASS4/<br />

umfassend; gut geeignet sowohl <strong>für</strong> (elementare) Programmierung als<br />

auch <strong>für</strong> statistische Anwendungen; große Teile dieses Kurses lehnen<br />

sich an die 3. Auflage an; Übungsaufgaben eher leicht, ohne Lösung<br />

auf englisch —zu R zur Anwendung in der Statistik<br />

– Faraway J.J. (2002): Practical Regression and Anova using R.<br />

Zu beziehen unter<br />

http://cran.r-project.org/doc/contrib/Faraway-PRA.pdf.<br />

verständliche Einführung in Regression mit R<br />

– Fox J. (2002): An R and S-<strong>Plus</strong> Companion to Applied<br />

Regression. Sage Publications. Siehe auch<br />

http://www.socsci.mcmaster.ca/jfox/Books/Companion/.<br />

verständliche Einführung in Regression mit R —gerade <strong>für</strong><br />

auf englisch —Kurzübersichten<br />

Sozialwissenschaftler (Fox ist Soziologe!)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

77


– “R reference card” von Jonathan Baron; zu beziehen unter<br />

http://cran.r-project.org/doc/contrib/refcard.pdf<br />

– “R reference card” von Tom Short; zu beziehen unter<br />

http://cran.r-project.org/doc/contrib/Short-refcard.pdf<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

78


0.7 eine elementare Sitzung<br />

#<br />

<br />

c.f. Venables and Ripley (1999), pp. 1–16 Link aufs File<br />

Achtung: die Befehle werden en detail alle noch später erläutert. Jetzt<br />

geht es erst einmal nur darum, die Leistungsfähigkeit von R/Splus zu<br />

demonstrieren. . .<br />

h e l p . s t a r t ( ) # s t a r t e t d i e H i l f e<br />

#<br />

#i n R e i n z u l a d e n :<br />

# l i b r a r y (MASS)<br />

#<br />

x rnorm ( 5 0 ) # g e n e r i e r t 50 u i v N( 0 , 1 )<br />

y rnorm ( 5 0 )<br />

# v e r t e i l t e V a r i a b l e n<br />

# <strong>und</strong> s c h r e i b t s i e i n den Vektor x<br />

h c h u l l ( x , y ) # b e r e c h n e t d i e konvexe H u e l l e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

79


#<br />

#<br />

<br />

# d e r Punkte z [ . ] = ( x [ . ] , y [ . ] )<br />

p l o t ( x , y ) #p l o t e t d i e Punkte x , y<br />

#<br />

polygon ( x [ h ] , y [ h ] ) # z e i c h n e t d i e H u e l l e e i n<br />

#<br />

o b j e c t s ( ) # l i s t e t d i e R Objekte , d i e z . Z .<br />

#<br />

# im . Data DIR l i e g e n<br />

rm( x , y , h ) # l o e s c h t d i e Objekte x , y , h<br />

#<br />

x rnorm (1000)<br />

y rnorm (1000) # g e n e r i e r t 1000 Paare u i v N( 0 , 1 )<br />

# v e r t e i l t e r V a r i a b l e n<br />

h i s t ( c ( x , y +2) ,25) # Histogramm e i n e r Mischung<br />

# von NV s : 25 Saeulen ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

80


#<br />

#<br />

<br />

# 25 ^= Argument " n c l a s s "<br />

# <strong>und</strong> V e r s c h i e b u n g um 2 i n d e r 2 . Komp .<br />

dd kde2d ( x , y )<br />

# Kontour Persp . <strong>und</strong> 3D P l o t )<br />

contour ( dd )<br />

p e r s p ( dd , t h e t a = 30, p h i =30, d=5)<br />

image ( dd )<br />

#<br />

x seq ( 1 , 2 0 , 0 . 5 ) # e r z e u g t ( 1 , 1 . 5 , 2 , . . . , 1 9 . 5 , 2 0 )<br />

#b e s s e r mit Argumentbezeichnungen ! ( a b e r h i e r :<br />

#Z i t a t aus V : R : 9 9 )<br />

#<br />

x # l i s t e t den I n h a l t a u f<br />

w 1+ x/2 # a l s G e w i c h t v e k t o r<br />

y x + w£ rnorm ( x )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

81


#<br />

dum data . frame ( x , y ,w) # e r z e u g t Data Frame<br />

# aus x , y ,w<br />

dum # <strong>und</strong> l i s t e t den I n h a l t<br />

#<br />

rm( x , y ,w)<br />

#<br />

fm lm ( y ~ x , data=dum) # p a s s t e i n e e i n f a c h e<br />

# l i n e a r e R e g r e s s i o n von y a u f x an<br />

summary ( fm ) # <strong>und</strong> l i s t e t d i e Zusammenfassung<br />

#<br />

fm1 lm ( y ~ x , data=dum , w eight=1/w^2)<br />

summary ( fm1 ) # <strong>und</strong><br />

<br />

l i s t e t d i e Zusammenfassung<br />

#<br />

# p a s s t e i n e g e w i c h t e t e l i n e a r e R e g r e s s i o n<br />

# von y a u f x mit Gewichten 1/w^2 an<br />

l i b r a r y ( modreg ) # l a e d t d i e L i b r a r y modreg<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

82


#<br />

l r f l o e s s ( y ~ x , data=dum)<br />

#<br />

# p a s s t e i n e l o k a l e , g l a t t e<br />

# R e g r e s s i o n von y a u f x an ( mit " l o e s s ")<br />

a t t a c h (dum) # macht d i e A t t r i b u t e von dum<br />

# a l s V a r i a b l e n v e r f u e g b a r<br />

p l o t ( x , y ) # S c a t t e r p l o t von y gg x<br />

#<br />

l i n e s ( s p l i n e ( x , f i t t e d ( l r f ) ) )<br />

# p l o t t e t d i e l o k a l e R e g r e s s i o n s l i n i e<br />

a b l i n e ( 0 , 1 , l t y =3) # f u e g t d i e t a t s a e c h l i c h e<br />

# R e g r e s s i o n s g e r a d e e i n ( mit einem<br />

# anderen L i n i e n t y p )<br />

a b l i n e ( fm )<br />

<br />

# f u e g t d i e u n g e w i c h t e t e<br />

# R e g r e s s i o n s g e r a d e e i n<br />

# a b l i n e ( ) b e z i e h t d i e n o e t i g e I n f o r m a t i o n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

83


# dazu aus dem Objekt fm<br />

a b l i n e ( fm1 , l t y =4) # f u e g t d i e g e w i c h t e t e<br />

#<br />

# R e g r e s s i o n s g e r a d e e i n im L i n i e n t y p 4<br />

# Ausgabe m o e g l i c h u e b e r Kontextmenu<br />

# ( r e c h t e / m i t t l e r e Maustaste )<br />

#<br />

p l o t ( f i t t e d ( fm ) , r e s i d ( fm ) ,<br />

q q l i n e ( r e s i d ( fm ) )<br />

<br />

x l a b=" e i n g e p a s s t e ␣ Werte " ,<br />

y l a b=" Residuen " )<br />

# e i n Standard Diagnose P l o t<br />

# zum Checken d e r H o m o s k e d a s t i z i t a e t<br />

# h i e r : H e t e r o s k e d . s i c h t b a r ?<br />

qqnorm ( r e s i d ( fm ) )<br />

# Normal Scores P l o t zum Check d e r<br />

# NV Annahme ( S c h i e f e , K u r t o s i s ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

84


# A u s r e i s s e r )<br />

detach ( ) # a b l o e s e n des DataFrames von<br />

a t t a c h ( h i l l s )<br />

<br />

# d e r S u c h l i s t e<br />

rm(fm , fm1 , l r f , dum) # aufraeumen<br />

#<br />

# Der H i l l Datensatz :<br />

# Rekorde i n s c h o t t i s c h e n Bergrennen<br />

# gegen S t r e c k e n l a e n g e<br />

# <strong>und</strong> Hoehenmeter<br />

#<br />

data ( h i l l s ) # l a d e n des H i l l D a t e n s a t z e s<br />

h i l l s # l i s t i n g<br />

#<br />

p a i r s ( h i l l s )<br />

#<br />

p l o t ( d i s t , time )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

85


i f ( i n t e r a c t i v e ( ) )<br />

i d e n t i f y ( d i s t , time , row . names ( h i l l s ) )<br />

a b l i n e ( lm ( time ~ d i s t ) )<br />

#<br />

# i n t e r a k t i v e s L a b eln d e r Datenpunkte<br />

l i b r a r y ( l q s ) # l a d e n d e r l i b r a r y ( l q s )<br />

a b l i n e ( l q s ( d i s t , time ) , l t y =3, c o l =4)<br />

detach ( )<br />

#<br />

# r o b u s t e R e g r e s s i o n mit l t s<br />

# Michelson Datensatz (1879) z u r Messung<br />

# d e r L i c h t g e s c h w i n d i g k e i t<br />

#<br />

data ( m i c h e l s o n )<br />

a t t a c h ( m i c h e l s o n )<br />

<br />

s e a r c h ( ) # welche Daten s t e h e n R z u r Verfuegung ?<br />

p l o t . f a c t o r ( Expt , Speed ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

86


main=" Speed ␣ o f ␣ L i g h t ␣Data" ,<br />

x l a b=" Experiment ␣No . " )<br />

# V e r g l e i c h d e r 5 Experimente anhand<br />

# e i n f a c h e r B o x p l o t s<br />

fm aov ( Speed ~ Run + Expt )<br />

summary ( fm )<br />

# ANOVA A n a l y s e a l s r a n d o m i s i e r t e s<br />

# Block Design mit " r u n s " <strong>und</strong> " Experiment "<br />

# a l s Faktoren<br />

fm0 update ( fm , . ~ . Run )<br />

# Modell F i t u n t e r Weglassung d e r<br />

# u n s i n n i g e n Faktoren " r u n s " <strong>und</strong><br />

# V e r g l e i c h d e r b e i d e n Modelle<br />

# m i t h i l f e e i n e r f o r m a l e n ANOVA<br />

anova ( fm0 ,<br />

<br />

fm ) # d i e ANOVA<br />

detach ( ) # aufraeumen<br />

rm(fm , fm0 ) # aufraeumen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

87


1 Die Sprache S / R<br />

1.1 Gr<strong>und</strong>strukturen in R<br />

1.1.0 Wiederholung:<br />

siehe Abschnitt 0.4<br />

1.1.1 Konventionen bei der Namensvergabe<br />

zugelassen: erstes Zeichen a - z, A - Z,<br />

weitere Zeichen a - z, A - Z, 0 - 9, .<br />

Vorsicht: reservierte Namen besser nicht überschreiben<br />

Unterscheidung von Groß– <strong>und</strong> Kleinschreibung<br />

1.1.2 Sprachaufbau<br />

neben den in Abschnitt 1.1.0 wiederholten Strukturen sind wichtig:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

88


alle Einheiten sind Objekte<br />

Kommando–Abschluß: ; oder Zeilenumbruch<br />

Bilden von Blöcken durch { ... }<br />

Prompt: >, falls Zeile unvollständigen Befehl enthält: +<br />

print (gibt Wert einer Variablen aus), .Last. value (gibt Wert des<br />

letzten Ausdrucks aus)<br />

Mehrfachzuweisungen ba6<br />

Rechtszuweisung b >a oder b_a [letztere obsolet ab R 1.8.0]<br />

elementare Objekte: Vektoren, Funktionen, Listen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

89


1.2 wichtige Objekte<br />

1.2.1 Vektoren<br />

vorzustellen als: verkettete Zellen von gleichem “Typ” (mode)<br />

Attribute:<br />

– length, evtl.: names<br />

– mode (Typ): numeric, character, complex, logical , list ,<br />

function<br />

Zugriff auf Elemente: a[4]<br />

R–Beispiel 1.2-1:<br />

a seq ( 1 , 6 , 1 ) # f u e l l t a mit 1 , . . , 6<br />

#( s i e h e auch A b s c h n i t t 1.3.1)<br />

l e n g t h ( a ) # Laenge von a<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

90


mode( a ) # Modus von a<br />

a [ 3 ] # g i b t Element Nr . 3 von a aus<br />

a [ 4 ] 3 # s e t z t Element Nr . 4 a u f 3<br />

names ( a ) c ( ’ a ’ , ’ b ’ , ’ c ’ , ’ d ’ , ’ e ’ , ’ f ’ )<br />

a<br />

# benennt d i e Elemente des V e k t o r s a a l s a . . . f<br />

names ( a )<br />

a [ "d" ] # j e t z t auch Z u g r i f f u e b e r Namen m o e g l i c h<br />

1.2.2 Matrizen <strong>und</strong> Arrays<br />

Matrizen <strong>und</strong> Arrays sind Verallgemeinerungen von Vektoren mit<br />

zwei/mehreren Indizes.<br />

Zugriff auf Elemente: a [4,2] bzw. a [4,2,3]<br />

Zugriff auf alle Elemente einer/mehrerer Koordinaten: a [4,]<br />

bzw. a [,2,]<br />

Erzeugung mit den Funktionen matrix(¡) bzw. array(¡); diese<br />

haben als Argumente<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

91


– data: ein Vektor mit Elementen, mit denen die Matrix / das<br />

Array zu füllen ist; beachte auch Abschnitt 1.4.2<br />

– nrow, ncol: (bei matrix) Zahl der Zeilen <strong>und</strong> Spalten<br />

– dim: (bei array) ein Vektor in der Länge der Zahl der Indizes;<br />

enthält Dimensionen der einzelnen Indizes<br />

– byrow: (bei matrix) logischer Wert; falls TRUE werden zuerst<br />

die Zeilen, dann die Spalten gefüllt; sonst (Voreinstellung)<br />

umgekehrte Reihenfolge; siehe<br />

m a t r i x ( data =1:4 , nrow=2, n c o l =2) # byrow=FALSE<br />

m a t r i x ( data =1:4 , nrow=2, n c o l =2, byrow=TRUE)<br />

– dimnames optional: Namen der Dimensionen / Indexbereiche<br />

Erzeugung von Matrizen <strong>und</strong> Arrays aus anderen Datentypen<br />

siehe Abschnitt 1.2.7<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

92


1.2.3 Listen<br />

vorzustellen als: verkettete Zellen von möglicherweise<br />

verschiedenem “Typ” (mode)<br />

Bilden von Listen wie in Abschnitt 0.4:<br />

Alist (a=ae3,del=del) oder Ac(ae3,del) — c ohne names<br />

Zugriff auf Listenelemente: A [[2]] bzw. A$del oder A$d<br />

Auflösen einer Liste durch unlist (A)<br />

R–Beispiel 1.2-2 [Vektoren, Matrizen etc.]:<br />

Aufgabe:<br />

(a) Erzeugen Sie einen Vektor v mit Wertebelegung .<br />

(b) Modifizieren Sie alle Werte kleiner als auf <strong>und</strong> alle größer als<br />

auf <br />

(c) Machen Sie aus dem Vektor eine ¢ –Matrix M <strong>und</strong> geben Sie<br />

die zweite Spalte aus.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

93


(d) Machen Sie aus der Matrix ein Array A mit Dimensionen<br />

¢ ¢ <strong>und</strong> geben sie alle Elemente mit drittem Index aus.<br />

(e) Erzeugen Sie aus v, M, A eine Liste mit Namen v, M, A. Geben<br />

Sie das Element des zweiten Listenelementes aus.<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

v 1 : 3 0<br />

# oder :<br />

v seq ( from =1, to =30, by=1)<br />

# oder :<br />

v seq ( form =1, to =30, l e n g t h =30)<br />

# oder ( u m s t a e n d l i c h , aufwendig ) :<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

94


v v e c t o r ( " numeric " , l e n g t h =30);<br />

f o r ( i i n 1 : 3 0 ) {v [ i ] i }<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

v [ v>=20] 20<br />

v [ v


############################################<br />

# T e i l ( d )<br />

############################################<br />

A a r r a y ( data=v , dim=c ( 2 , 3 , 5 ) )<br />

A [ , , 3 ]<br />

############################################<br />

# T e i l ( e )<br />

############################################<br />

L l i s t ( v=v ,M=M, A=A)<br />

rm( v ,M, A)<br />

L [ [ 2 ] ] [ 2 , 3 ]<br />

#bzw . L$M[ 2 , 3 ]<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

96


1.2.4 Funktionen I<br />

1.2.4 (a) Funktionsdeklaration<br />

wie in Abschnitt 0.4 — beachte “lazy calling”<br />

formal: function(,, ...) <br />

1.2.4 (b) Funktionsaufruf<br />

unspezifizierte Argumente<br />

z.B.: c (...) , pmax(...), max(...)<br />

spezifizierte Argumente<br />

– Argumente in der korrekten Reihenfolge<br />

polygon(x1, y1, F, 10)<br />

– Argumente spezifiziert als =wert:<br />

polygon(y=y1, x=x1, density=10, border=F)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

97


– gemischt: polygon(x1, y1, border=F, density=10)<br />

1.2.5 Faktoren<br />

c.f. Abschnitte 1.8 <strong>und</strong> 7.1.1 (c)<br />

spezielle String-Vektoren<br />

signalisieren statistischen Verfahren:<br />

kein Label sondern kategorielle Variable!<br />

Syntax: bgfactor(c("D","N","B","D","E","D","F","I"))<br />

spezieller print -Befehl: print . default interne Codierung<br />

zus. Levels durch factor (c("a","b"), levels =c("a","b","c"))<br />

Ordnung def’bar (alphabet. per default): (hier t


1.2.6 Data-Frames<br />

üblicher Typ zum Ablegen von Datenmatrizen<br />

mit Einträgen versehene Relation in DB–Sprechweise<br />

“Zeilen” vom gleichen Typ<br />

Beobachtungen/Messungen in stat. Sprechweise,<br />

Eintrag in DB–Sprechweise<br />

analog zu Listen:<br />

“Spalten” möglicherweise von unterschiedlichen Typen<br />

Merkmale in stat. Sprechweise,<br />

Attribute in DB–Sprechweise<br />

Operationen cbind: Spalten anhängen, rbind: Zeilen anhängen<br />

weitere DB–Operationen möglich<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

99


R–Beispiel 1.2-3:<br />

l i b r a r y (MASS) # l a e d t d i e MASS l i b r a r y<br />

data ( p a i n t e r s ) # l a e d t den Datensatz " p a i n t e r s "<br />

#( s i e h e auch A b s c h n i t t 1.3.2)<br />

p a i n t e r s # g i b t i h n aus<br />

row . names ( p a i n t e r s ) # Zeilennamen ( Malernamen )<br />

p a i n t e r s [ 1 : 5 , c ( 2 , 5 ) ] # s p e z i e l l e Auswahl<br />

1.2.7 Typ-Umwandlung / Casting<br />

implizites Casting: siehe Abschnitt 1.4.1<br />

explizites Casting: as.xxx,<br />

z.B. wandelt as.matrix(data) den numerischen Data-Frame data<br />

in eine Matrix<br />

<br />

Typ-Check: is .xxx<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

100


1.3 Dateneingabe<br />

1.3.1 Eingabe von Hand<br />

mühsam <strong>und</strong> fehleranfällig, besser mit spezialisierter Software:<br />

z.B.<br />

http://www.hrz.uni-dortm<strong>und</strong>.de/A1/<br />

kurse/unterlag/statistik/kodier.html<br />

http://www.hrz.uni-dortm<strong>und</strong>.de/A1/<br />

zur Not:<br />

kurse/unterlag/statistik/maske.html<br />

– durch Nutzung von datenscan(), abzuschließen durch<br />

-D<br />

<br />

– datenc ( 1,34.3,0.3,....) — c concatenate<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

101


1.3.2 Automatisches Füllen von Objekten<br />

der Aufzählungsdoppelpunkt 34.23:100<br />

der seq–Befehl: generiert reguläre Folgen;<br />

Syntax seq(from,to,by=) oder seq(from,to,length=)<br />

der rep–Befehl: z.B. xrep(4,times=5)<br />

besonders nützlich bei Designs, siehe letzte zwei Zeilen im<br />

folgenden Beispiel<br />

R–Beispiel 1.3-1:<br />

x 1 : 4 # c (1 ,2 ,3 ,4) > x<br />

i rep ( 2 , 4 ) # c (2 ,2 ,2 ,2) > i<br />

y rep ( x , 2 ) # c (1 ,2 ,3 ,4 ,1 ,2 ,3 ,4) > y<br />

z rep ( x , i ) # c (1 ,1 ,2 ,2 ,3 ,3 ,4 ,4) > z<br />

w rep ( x , x ) # c (1 ,2 ,2 ,3 ,3 ,3 ,4 ,4 ,4 ,4) >w<br />

<br />

#########################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

102


# 2way d e s i g n<br />

# 4 Z e i l e n k l a s s e n<br />

# 3 S p a l t e n k l a s s e n<br />

# j e w e i l s 2 Beobachtungen<br />

#########################################<br />

c o l c rep ( 1 : 3 , rep ( 8 , 3 ) )<br />

# e r g i b t :<br />

# 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3<br />

rowc rep ( rep ( 1 : 4 , rep ( 2 , 4 ) ) , 3 )<br />

# e r g i b t :<br />

# 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

103


1.3.3 Einlesen von Daten I<br />

1.3.3 (a) der read. table–Befehl<br />

liest Data-Frame ein<br />

die erste Zeile des einzulesenden Files sollte einen Namen <strong>für</strong><br />

jedes Merkmal / jede Variable enthalten<br />

jede weitere Zeile sollte mit einem Beobachtungs-Label (row<br />

label) beginnen<br />

oft sinnvoll den Beobachtungs-Label zu überlesen <br />

read. table(,header=T)<br />

Bemerkung 1.3-2 [Filenamen]:<br />

(i) \’s müssen in Windows maskiert werden, so dass wir z.B.<br />

erhalten "C:\\mywork\\r\\sws\\file.dat"; stattdessen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

104


können wir aber auch schreiben<br />

"C:/mywork/r/sws/file.dat".<br />

(ii) Der Filename clipboard kann genutzt werden um Daten aus<br />

der Zwischenablage zu lesen.<br />

1.3.3 (b) der scan–Befehl<br />

liest einen einzelnen Vektor ein<br />

sehr flexibel, c.f. Referat<br />

count. fields zählt die Beobachtungen<br />

einfache mögliche weitere Parameter what, multi . line , sep, siehe<br />

Beispiel<br />

R–Beispiel 1.3-3:<br />

<br />

M m a t r i x ( scan ( "mat . dat " ) , n c o l =4, byrow=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

105


# l i e s t Daten i n e i n e 4 s p a l t i g e Matrix<br />

iD scan ( " i n p . dat " , what= l i s t ( i d="" , x=0,y =0))<br />

# l i e s t Daten i n e i n e L i s t e aus 3 Komp .<br />

# e r s t e char , a ndere b e i d e numeric<br />

i L c as . l i s t ( rep ( 0 , 5 0 ) ) # c a s t i n g i n L i s t e<br />

names ( i L ) p a s t e ( "X" , 1 : 5 0 , sep="" )<br />

dL scan ( " b i g . dat " , what=iL , m u l t i . l i n e=T)<br />

# e i n l e s e n von 50 D a t e n s a e t z e n<br />

# j e d e r mit 5 Z e i l e n im F i l e<br />

# i n d i e V a r i a b l e n X1 , . . . . , X50<br />

### zu " p a s t e " s i e h e A b s c h n i t t 1.6<br />

1.3.3 (c) der data–Befehl<br />

Liegen die Daten in einer Library von R, so können diese mit dem<br />

Befehl data(,package=) eingeladen<br />

werden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

106


1.3.4 Einlesen von Daten II —<br />

Dateneingabe <strong>und</strong> Import unter R /<br />

S-<strong>Plus</strong><br />

— basierend auf einem Referat von Volkmar Klatt vom 29.04.2002<br />

1.3.4 (a) Gliederung<br />

Was sind Daten?<br />

Der Kontext von wissenschaftlicher Datenproduktion<br />

Wie „macht“ man Daten-Dateien?<br />

– Beispiel: Dateneingabe über SPSS<br />

– Beispiel: Dateneingabe über Access<br />

<br />

Was muß man über fremde Daten mindestens wissen?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

107


Datenaufbereitung <strong>und</strong> Import nach R<br />

<br />

– Beispiel: Import von SPSS-Dateien<br />

– Beispiel: Import einer ASCII-Datei<br />

– weitere interessante Importmöglichkeiten<br />

Datenstruktur(en) der eingelesenen Daten in R<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

108


1.3.4 (b) Was sind „Daten“?<br />

Daten sind kodierte Informationen über „die“ Wirklichkeit <strong>und</strong><br />

die Erläuterung dieser Kodierung<br />

Daten sind kein Selbstzweck, sondern dienen einem Ziel<br />

(sollten;-))<br />

1.3.4 (c) Der Kontext von wissenschaftlicher Datenproduktion<br />

Die 4 Phasen einer (sozial-)wissenschaftlichen Untersuchung:<br />

(Die fett gedruckten Abschnitte wollen wir hier kurz ansprechen)<br />

1. Definitionsphase<br />

Problemwahl<br />

Literaturanalyse; eigene Hypothesen bilden<br />

theoretischen Bezugsrahmen aufstellen<br />

<br />

ergänzt nach von Alemann (1984), vgl. besonders Kapitel 3, “Die Phasen<br />

einer sozialwissenschaftlichen Untersuchung.”<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

109


Operationalisierung der Gr<strong>und</strong>begriffe (wie messe ich?)<br />

Festlegen von Gr<strong>und</strong>gesamtheit <strong>und</strong> Analyseeinheit<br />

Forschungsplan aufstellen, darin: wichtigste Ziele,<br />

Gliederung, Literaturverzeichnis, Hilfsmittel festlegen; Zeit<br />

<strong>und</strong> Kosten abschätzen<br />

2. Durchführungsphase: Forschungsplan wird umgesetzt, d.h.<br />

Forschungsinstrumente konkretisiert<br />

Auswahlplan erstellen: Wer wird befragt? (Auswahlverfahren)<br />

Kodierung der Daten festlegen - maschinenlesbare Form<br />

Vortest (=Pre-Test) <strong>und</strong> Exploration: Ist<br />

Forschungsinstrument praxistauglich? Datenanalyse mit<br />

Dummy-Daten testen<br />

Datei <strong>für</strong> die Auswertung erstellen, Eingabemaske<br />

erstellen, Datenanalyse mit Dummy-Daten testen<br />

Vorbereitung der Hauptuntersuchung (Geld <strong>und</strong> Zeit<br />

bereitstellen, Schulung der Hilfskräfte, Durchführung der<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

110


Hauptuntersuchung)<br />

3. Analysephase: Daten bereinigen, d.h. eindeutig fehlerhafte<br />

Messwerte kennzeichnen<br />

Statistikprogramm starten<br />

Durchführung der Analyse (Daten eingeben/einlesen,<br />

Berechnungen durchführen)<br />

Aufbereitung der Daten (Visualisierung)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

111


4. Disseminationsphase:<br />

Schreiben der Forschungsberichte<br />

Publikation <strong>und</strong> Verbreitung der Ergebnisse / Vortrag halten<br />

Geld <strong>und</strong> Lorbeeren einstecken<br />

1.3.4 (d) Wie „macht“ man Daten–Dateien?<br />

Beispiel 1.3-4 [Dateneingabe über SPSS]:<br />

Es können sehr komfortabel Level vergeben werden (<strong>und</strong> nach R<br />

importiert werden)<br />

Nachteil: bei großen Tabellen ist es schwierig, nicht in falsche<br />

Zeilen bzw. Spalten zu rutschen<br />

Dissemination ist eigentlich ein medizinisches Fachwort <strong>und</strong> bedeutet:<br />

Ausbreitung einer Seuche . . .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

112


Beispiel 1.3-5 [Dateneingabe über Access]:<br />

persönlich gestaltete Eingabemasken sind möglich<br />

Überprüfung während der Eingabe auf Tippfehler möglich!<br />

Nachteil: Das Anlegen der Tabellenstruktur <strong>und</strong> Masken ist<br />

zeitaufwändig<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

113


Mit einer Validitätsprüfung der eingetippten Werte kann man sich in<br />

Access auf Unstimmigkeiten hinweisen lassen.<br />

1.3.4 (e) Was muss man über fremde Daten mindestens wissen?<br />

Datenquelle - Zuverlässigkeit, Messverfahren<br />

rechtliche Restriktionen – darf ich die Daten verwenden?<br />

welches Skalenniveau haben die Daten?<br />

wie sind Metainformationen kodiert (wie "Antwort verweigert",<br />

trifft nicht zu", "keine Angaben")<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

114


Tipps zur Datenspeicherung:<br />

Daten aus mehreren Quellen getrennt halten, z.B. indem <strong>für</strong><br />

jede Quelle eine SQL-Tabelle anlegt <strong>und</strong> diese verknüpft<br />

Daten in simpler Textdatei (kein Word usw.!) beschreiben, dies<br />

auch ausdrucken.<br />

1.3.4 (f) Datenaufbereitung <strong>und</strong> Import nach R<br />

Beispiel 1.3-6 [Import von SPSS-Dateien]:<br />

siehe Datei<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/<br />

rkurs/referate/volkmar/spss_import.R<br />

Beispiel 1.3-7 [Import einer ASCII-Datei]:<br />

siehe Datei<br />

<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/<br />

rkurs/referate/volkmar/tabellen_import.R<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

115


Beispiel 1.3-8 [weitere interessante Importmöglichkeiten]:<br />

scan: allgemeinere Methode als read.table()<br />

unter Windows: Anbindung an Excel via DCOM-Server<br />

Unter Excel wurden über die R-Schnittstelle 150 Zufallszahlen<br />

erzeugt <strong>und</strong> mit Excel dann als Diagramm dargestellt.<br />

Import von Daten ist einfach<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

116


Excel-Blätter sehen dabei jedoch schnell unübersichtlich aus<br />

Der DCOM-Server stürzt schnell ab, kann aber auch schnell<br />

wieder gestartet werden<br />

Anbindung an eine SQL-Datenbank<br />

<br />

– Zugriff auf extrem große Datenbestände ist möglich<br />

– umständlicher <strong>und</strong> störanfälliger als eine Datendatei, u.U.<br />

verminderte Datensicherheit<br />

– auch über’s Internet möglich<br />

– es gibt kein einheitliches SQL-Modul <strong>für</strong> R, sondern viele<br />

verschiedene<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

117


R–Beispiel 1.3-9 [Import von SPSS-Dateien]:<br />

# 2002 ( c ) Volkmar K l a t t<br />

# volkmar . k l a t t @ s t u d . uni b a y r e u t h . de<br />

#<br />

###############################################<br />

# Ein B e i s p i e l zum E i n l e s e n von D a t e i e n im<br />

# SPSS Format mit dem S t a t i s t i k p r o g r a m m R<br />

# ( verwendet wurde h i e r R , V e r s i o n 1 . 4 . 1 <strong>und</strong><br />

# das Modul f o r e i g n , V e r s i o n 0 . 5 . 2 , doch<br />

# muessten d i e B e i s p i e l e auch u n t e r a e l t e r e n<br />

# V e r s i o n e n l a u f e n )<br />

################################################<br />

#<br />

# Es s o l l d i e SPSS D a t e i nbg3 . sav e i n g e l e s e n<br />

# werden ;<br />

<br />

d a b e i h a n d e l t e s s i c h um e i n e g e k u e r z t e<br />

# Fassung aus d e r D o k t o r a r b e i t von Andreas Klee<br />

# u e b e r L e b e n s s t i l e i n d e r Stadt Nuernberg .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

118


# Wer s i c h e i n g e h e n d e r mit den Z i e l e n <strong>und</strong><br />

# E r g e b n i s s e n d e r A r b e i t v e r t r a u t machen w i l l ,<br />

# s o l l t e f o l g e n d e n A r t i k e l l e s e n :<br />

#<br />

#########<br />

#<br />

# ANMERKUNG P . R . :<br />

#<br />

# d i e D a t e i nbg . sav l a e s s t s i c h von u n s e r e r<br />

# Homepage aus b e z i e h e n<br />

# ( s i e h e auch L i n k s zu R e f e r a t e n )<br />

# u n t e r<br />

#<br />

# h t t p : //www. uni b a y r e u t h . de / departments /<br />

# math/ org /mathe7/ S<strong>Plus</strong> / r e f e r a t e / volkmar /<br />

<br />

# nbg . sav<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

119


#########<br />

#<br />

# Klee , Andreas ( 2 0 0 1 ) :<br />

# Der Raumbezug von L e b e n s s t i l e n i n d e r Stadt .<br />

# Ein D i s k u r s u e ber e i n e s c h w i e r i g e Beziehung<br />

# mit e m p i r i s c h e n Bef<strong>und</strong>en aus d e r Stadt<br />

# Nuernberg<br />

# I n : Muenchner G e o g r a p h i s c h e Hefte , Band 83<br />

#<br />

# Andreas Klee h a t t e d i e D a t e i f u e r s e i n e n<br />

# SPSS Kurs a l s Uebungsdatei i n s I n t r a n e t d e r Uni<br />

# Bayreuth g e s t e l l t , s o d a s s e s s t a t t h a f t er<br />

# s c h e i n t , s i e HIER a n z u f u e h r e n .<br />

# Vor e i n e r Weitergabe a u s s e r h a l b d e r U n i v e r s i t a e t<br />

# s o l l t e<br />

<br />

man s e i n e Genehmigung e i n h o l e n .<br />

#<br />

# Zunaechst : Das E i n l e s e n d e r O r i g i n a l d a t e i<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

120


# nbg . sav mit R s c h l u g f e h l ! ! !<br />

# ( aus mir unbekannten Gruenden )<br />

# F a l l s e s f e h l s c h l a e g t , s o l l t e man f o l g e n d e s ver<br />

# suchen , was auch h i e r g e h o l f e n hat :<br />

#<br />

# £ mit SPSS d i e D a t e i e i n l e s e n <strong>und</strong> a l s<br />

# " p o r t a b l e SPSS D a t e i "<br />

# ( Endung " . por ") a b s p e i c h e r n .<br />

# £ D i e s e p o r t a b l e D a t e i kann dann ( h o f f e n t l i c h )<br />

# mit SPSS e i n g e l e s e n werden .<br />

# £ F a l l s man d i e por D a t e i u n t e r SPSS e r n e u t<br />

# e i n l a e d t <strong>und</strong> a l s normale SPSS D a t e i<br />

# ( Endung " . sav " a b s p e i c h e r t , so l a e s s t s i c h<br />

# d i e s e s e l t s a m e r w e i s e AUCH i n R e i n l e s e n .<br />

# ( d i e s<br />

<br />

f u n k t i o n i e r t e mit SPSS V e r s i o n 1 0 ; d i e s e<br />

# i s t auch u e b e r den S t u d e n t e n s e r v e r USS d e r Uni<br />

# Bayreuth v e r f u e g b a r )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

121


#<br />

#<br />

r e q u i r e ( f o r e i g n )<br />

# l a d e das R Modul f o r e i g n , f a l l s das n i c h t schon<br />

# geschehen i s t .<br />

#<br />

# Nun k l a p p t das E i n l e s e n mit :<br />

n u e r n b e r g read . s p s s ( " nbg3 . sav " )<br />

#<br />

summary ( n u e r n b e r g )<br />

# G i b t e i n e n U e b e r b l i c k u e b e r s a e m t l i c h e V a r i a b l e n<br />

# <strong>und</strong> i h r e n Typ aus , <strong>und</strong> ob L e v e l v o r l i e g e n .<br />

#<br />

# L e i d e r werden d i e V a r i a b l e n I n f o s NICHT mit<br />

# i m p o r t i e r t ,<br />

<br />

sondern nur d i e i n SPSS a u f<br />

# 8 Z e i c h e n b e g r e n z t e n <strong>und</strong> daher s e h r<br />

# k r y p t i s c h e n Variablennamen . So kann man<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

122


# ohne w e i t e r e I n f o r m a t i o n n i c h t erkennen ,<br />

# d a s s d i e V a r i a b l e BESFREU k o d i e r t , wie o f t<br />

# man Fre<strong>und</strong>e b e s u c h t .<br />

#<br />

a t t a c h ( n u e r n b e r g )<br />

# Macht d i e Variablennamen s i c h t b a r f u e r R .<br />

# ABER : i c h r a t e davon ab ! F a l l s n a e m l i c h e i n<br />

# Variablenname so h e i s s t wie e i n B e f e h l u n t e r R ,<br />

# kommt e s zu Namens K o n f l i k t e n<br />

#<br />

# Ohne a t t a c h ( ) kann mit n u e r n b e r g [ [ 3 ] ] a u f d i e<br />

# ( h i e r : 3 . ) V a r i a b l e z u g e g r i f f e n werden , dazu<br />

# g l e i c h mehr .<br />

#<br />

p l o t (ALLGZUST)<br />

<br />

# G i b t e i n Balkendiagramm aus , das d i e Anzahl d e r<br />

# F a e l l e j e d e s L e v e l s d e r V a r i a b l e a n g i b t , d . h .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

123


# p l o t w i r k t h i e r a e h n l i c h wie e i n Histogramm .<br />

#<br />

# Welche L e v e l vorkommen , kann man a b f r a g e n mit :<br />

l e v e l s (ALLGZUST)<br />

# i n diesem F a l l g i b t e s 5 L e v e l :<br />

# [ 1 ] "k . A. "<br />

# [ 2 ] " A u f f a l l e n d g e p f l e g t "<br />

# [ 3 ] " Sauber <strong>und</strong> o r d e n t l i c h ,<br />

# normal "<br />

# [ 4 ] " Nicht b e s o n d e r s g e p f l e g t , a b e r<br />

# halbwegs i n Ordnung"<br />

# [ 5 ] " Heruntergekommen , etwas v e r w a h r l o s t "<br />

#<br />

# Es g i b t i n R Probleme mit dem U n t e r s t r i c h "_" i n<br />

# SPSS Variablennamen ,<br />

<br />

denn R i n t e r p r e t i e r t den<br />

# U n t e r s t i c h a l s " " <strong>und</strong> l i e s t a n s t a t t d e r<br />

# V a r i a b l e C_ALTER demnach C ALTER , was<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

124


# s i n n l o s i s t .<br />

# Dadurch kann man a u f s o l c h e V a r i a b l e n n i c h t<br />

# d i r e k t z u g r e i f e n .<br />

# (M) e i n f o l g e n d e r Ausweg i s t u m s t a e n d l i c h :<br />

# ( kennt jemand e i n e n e l e g a n t e r e n Weg?)<br />

# ( 1 ) :<br />

t r y 1 summary ( n u e r n b e r g )<br />

t r y 2 as . l i s t ( t r y 1 [ , 1 ] )<br />

#<br />

#<br />

"C_ALTER" %i n% names ( t r y 2 )<br />

# g i b t TRUE oder FALSE aus , j e nachdem d e r S t r i n g<br />

# "C_ALTER" i n d e r L i s t e d e r Variablennamen<br />

# vorkommt oder n i c h t .<br />

#<br />

<br />

# ( 2 ) :<br />

t r y 3 match ( "C_ALTER" , names ( t r y 2 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

125


# E r m i t t e l t d i e P o s i t i o n , an d e r d i e Z e i c h e n k e t t e<br />

# "ALTER" i n d e r L i s t e d e r Variablennamen<br />

# vorkommt , <strong>und</strong> w e i s t e s d e r V a r i a b l e t r y 3 zu .<br />

# L i e f e r t "NA" , f a l l s e s n i c h t vorkommt .<br />

#<br />

# 3 : Zuweisen von C_ALTER z u r neuen V a r i a b l e<br />

# CALTER : ( e s k o d i e r t A l t e r s k l a s s e n )<br />

CALTER n u e r n b e r g [ [ t r y 3 ] ]<br />

# w i c h t i g s i n d d a b e i d i e d o p p e l t e n e c k i g e n<br />

# Klammern . Bei e i n f a c h e n Klammern , a l s o<br />

t r y 4 a n u e r n b e r g [ t r y 3 ]<br />

# gehen dagegen d i e l e v e l v e r l o r e n bzw . werden i n<br />

# Z e i c h e n k e t t e n k o n v e r t i e r t .<br />

#<br />

# Beweis :<br />

<br />

f o l g e n d e r B e f e h l l i e f e r t "NULL " . Wuerden<br />

# d i e l e v e l e r h a l t e n b l e i b e n , waere das E r g e b n i s<br />

# " f a c t o r "<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

126


c l a s s ( t r y 4 a )<br />

#<br />

# Anderer Beweis : Der f o l g e n d e B e f e h l g i b t d i e<br />

# Anzahl d e r L e v e l z u r u e c k :<br />

n l e v e l s ( t r y 4 a )<br />

# das E r g e b n i s : 0 a n s t a t t 6<br />

#<br />

# Nun koennen w i r C_ALTER a l i a s CALTER e i n m a l<br />

# p l o t t e n :<br />

p l o t (CALTER)<br />

# L e i d e r b e s c h r i f t e t d i e s n i c h t a l l e L e v e l .<br />

#<br />

p l o t (CALTER, SEX)<br />

# Es w i r d e i n i n t e r e s s a n t e s z w e i f a r b i g e s Balken<br />

# diagramm ausgegeben :<br />

<br />

# £ 1 . V a r i a b l e ( h i e r : CALTER) w i r d a l s v e r s c h i e<br />

# dene Balken i n t e r p r e t i e r t ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

127


# £ 2 . V a r i a b l e ( h i e r : SEX) a l s f a r b i g e A b s c h n i t t e<br />

# a u f d i e s e n Balken . SEX k o d i e r t u e b r i g e n s nur<br />

# das G e s c h l e c h t d e r B e f r a g t e n . .<br />

#<br />

# v e r t a u s c h t :<br />

p l o t (SEX , CALTER)<br />

# G e s c h l e c h t a l s Balken , A l t e r s k l a s s e n a l s Farben .<br />

# K l e i n e r Makel :<br />

# Die Legende u e b e r s c h n e i d e t s i c h mit den Balken<br />

#<br />

# a n d e r e D a r s t e l l u n g s w e i s e : S u n f l o w e r p l o t .<br />

# J e d e r S t r i c h s t e h t f u e r e i n e " Date " :<br />

s u n f l o w e r p l o t (SEX , CALTER)<br />

# I s t nur b e i k l e i n e n D a t e n s a e t z e n gut , h i e r<br />

# dagegen<br />

<br />

verschwimmen d i e " Sonnenblumen "<br />

#<br />

# W e i t e r e D a r s t e l l u n g s w e i s e :<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

128


t r y 5 as . numeric (SEX)<br />

t r y 6 as . numeric (CALTER)<br />

p l o t ( j i t t e r ( t r y 5 ) , j i t t e r ( t r y 6 ) )<br />

# D i e s e D a r s t e l l u n g i s t ebenso wie S u n f l o w e r p l o t<br />

# gut g e e i g n e t , s e h r s e l t e n vorkommende L e v e l<br />

# h e r a u s z u f i n d e n .<br />

# Bei p l o t (CALTER, SEX) kann man s o l c h e Werte<br />

# dagegen l e i c h t u e b e r s e h e n .<br />

#<br />

#<br />

# ohne j i t t e r , das i s t d i e k l e i n e z u f a e l l i g e<br />

# V e r f a e l s c h u n g , waere h i e r n i c h t s a u s s a g e k r a e f<br />

# t i g e s zu sehen , denn a l l e Punkte d e s s e l b e n<br />

# L e v e l s werden u e b e r e i n a n d e r g e z e i c h n e t<br />

# <strong>und</strong><br />

<br />

e r s c h e i n e n so a l s EIN e i n z i g e r Punkt :<br />

p l o t ( t r y 5 , t r y 6 )<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

129


#################################################<br />

#<br />

# I n welche D a t e n s t r u k t u r hat R e i g e n t l i c h d i e<br />

# D a t e i e i n g e s p e i c h e r t ?<br />

# D i es f i n d e t man mit dem B e f e h l t y p e o f ( ) h e r a u s :<br />

t y p e o f ( n u e r n b e r g )<br />

# h i e r : l i s t<br />

#<br />

t y p e o f (ALLGZUST)<br />

# h i e r : i n t e g e r<br />

# f i n i s<br />

#<br />

# A e h n l i c h a r b e i t e t d e r B e f e h l mode ( )<br />

mode(ALLGST)<br />

# h i e r : numeric<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

130


R–Beispiel 1.3-10 [Import von ASCII-Dateien]:<br />

# 2002 ( c ) Volkmar K l a t t<br />

# volkmar . k l a t t @ s t u d . uni b a y r e u t h . de<br />

#<br />

#########################################<br />

# B e i s p i e l zum E i n l e s e n e i n e r T a b e l l e n D a t e i mit<br />

# dem S t a t i s t i k p r o g r a m m R<br />

# ( verwendet wurde h i e r d i e V e r s i o n 1 . 4 . 1 von R ,<br />

# doch muessten d i e B e i s p i e l e auch u n t e r a e l t e r e n<br />

# V e r s i o n e n l a u f e n )<br />

#<br />

# Unter e i n e r T a b e l l e n D a t e i w i r d h i e r e i n e D a t e i<br />

# v e r s t a n d e n , d i e<br />

# £ im r e i n e n Text v o r l i e g t<br />

<br />

# ( ASCII = American Standard Code 2)<br />

# £ S p a l t e n ( durch e i n T r e n n z e i c h e n g e t r e n n t ) <strong>und</strong><br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

131


# £ Z e i l e n b e s i t z t ( g e t r e n n t durch<br />

# Wagenruecklauf Z e i c h e n )<br />

#<br />

# S t a t t l a n g e r Worte s c h a u t man s i c h am b e s t e n<br />

# ’ mal d i e D a t e i ceuto . dat mit einem T e x t e d i t o r<br />

# an .<br />

#<br />

# V i e l e p r o p r i e t a e r e n D a t e i f o r m a t e ( d i e R n i c h t<br />

# l e s e n kann ) , l a s s e n s i c h i n T a b e l l e n D a t e i e n<br />

# e x p o r t i e r e n <strong>und</strong> so doch noch e i n l e s e n .<br />

#<br />

# Warnung :<br />

# Das d e u t s c h e E x c e l verwendet ( v o r e i n g e s t e l l t )<br />

# das Komma a l s D e z i m a l t r e n n z e i c h e n . Dann d a r f<br />

# man beim<br />

<br />

Export i n e i n e T a b e l l e n D a t e i<br />

# n a t u e r l i c h NICHT das Komma a l s T r e n n z e i c h e n<br />

# waehlen , w e i l s o n s t Dezimalpunkt <strong>und</strong> S p a l t e n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

132


# u n u n t e r s c h e i d b a r werden . Empfehlenswert i s t<br />

# d e r T a b u l a t o r .<br />

##########################################<br />

#<br />

# E i n l e s e n d e r T a b e l l e n D a t e i ceuto . dat<br />

# D i e s e D a t e i k o d i e r t das F r a s s v e r h a l t e n von<br />

# Ceutorhynchus p u n c t i g e r ,<br />

# ( einem k l e i n e n K a e f e r ) , d e r im Loewenzahn l e b t .<br />

#<br />

# An d e r Datenerhebung u n t e r L e i t u n g von<br />

# P r o f . e m e r i t . Z w o e l f e r , U n i v e r s i t a e t Bayreuth ,<br />

# habe i c h s e l b s t m i t g e w i r k t , s o d a s s d i e<br />

# ( g e k u e r z t e n ) Daten h i e r s t e h e n koennen .<br />

#<br />

# Eine<br />

<br />

Weitergabe an D r i t t e s o l l t e b i t t e<br />

# n a c h g e s u c h t werden !<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

133


#########<br />

#<br />

# ANMERKUNG P . R . :<br />

#<br />

# d i e D a t e i ceuto . dat l a e s s t s i c h von u n s e r e r<br />

# Homepage aus b e z i e h e n<br />

# ( s i e h e auch L i n k s zu R e f e r a t e n )<br />

# u n t e r<br />

#<br />

# h t t p : //www. uni b a y r e u t h . de / departments /<br />

# math/ org /mathe7/ S<strong>Plus</strong> / r e f e r a t e / volkmar /<br />

# ceuto . dat<br />

#<br />

##########<br />

#<br />

<br />

ceuto read . t a b l e ( " c euto . dat " , header=TRUE)<br />

# h e a d e r=TRUE b e d e u t e t : d i e 1 . Z e i l e d e r D a t e i<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

134


# s o l l so a u f g e f a s s t werden , a l s stuenden d o r t d i e<br />

# Variablennamen .<br />

# ( was i n ceuto . dat j a auch d e r F a l l i s t ; )<br />

# h e a d e r=FALSE i n t e r p r e t i e r t auch d i e<br />

# 1 . Z e i l e a l s Daten<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

135


1.3.4 (g) Datenstruktur(en) der eingelesenen Daten in R<br />

typeof()<br />

modeof()<br />

siehe<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/<br />

rkurs/referate/volkmar/spss_import.R<br />

1.4 Arithmetik<br />

1.4.1 implizites Casting<br />

so weit wie möglich natürliches Casting durch S: 2+T , d.h.<br />

der Wert T (true) , F (false) <br />

Komplexe Arithmetik: nur bei Bedarf; muss z.T. erzwungen<br />

werden, vgl. sqrt( 2) <strong>und</strong> sqrt( 2+0i)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

136


Ist bei einer elementweise definierten mathematischen binären<br />

Operation einer der beiden skalar, so wird dieser Skalar<br />

elementweise als Operand verwendet, z.B. seq (0,5, by=1)£3.<br />

<strong>für</strong> Arrays siehe auch Abschnitt 1.6.3<br />

1.4.2 zyklisches Auffüllen<br />

Sind bei einer binären Operation von zwei Vektoren diese nicht<br />

gleich lang, so wird der kürzere auf die Länge des längeren gebracht,<br />

indem der erstere zyklisch (möglicherweise unvollständig) wiederholt<br />

wird, z.B. seq (0,5, by=1)+seq(0,6,by=1).<br />

1.4.3 einige Funktionen<br />

Gr<strong>und</strong>rechenarten: +, ,£,/, Bsp.:2+2 oder auch "+"(2,2)<br />

Potenzen, Wurzeln, Exp. <strong>und</strong> Log.: ^,sqrt, exp, log, log10<br />

<br />

(Hyperbel-)Trigonometrie <strong>und</strong> Inverse dazu: sin, cos, tan, asin, acos,<br />

atan, sinh, cosh, tanh, asinh, acosh, atanh<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

137


Gamma-Funktion u.ä.: gamma(4) , lgamma(4) <br />

R<strong>und</strong>ung: ro<strong>und</strong>, trunc, ceil , floor<br />

ro<strong>und</strong>(x,3) r<strong>und</strong>et auf Nachkommastellen, ro<strong>und</strong>(x, 3) r<strong>und</strong>et auf<br />

, trunc/ ceil / floor r<strong>und</strong>en gegen /ab/auf.<br />

Teilen mit Rest: %%: modulo, %/% ganzzahlige Division<br />

Summen <strong>und</strong> Produkte: sum,prod,cumsum,cumprod bilden Summe<br />

<strong>und</strong> Produkt eines Vektors, resp. kumulative Versionen davon, i.e.<br />

z.B. cumsum(x) <br />

Minima <strong>und</strong> Maxima: min,max,cummax,cummin,pmin,pmax; erstere:<br />

(kumulative) Minima <strong>und</strong> Maxima eines Vektors; letztere: punktweise<br />

Minima <strong>und</strong> Maxima: x1 , x2, ,xm -dimensionale Vektoren;<br />

dann ist pmin(x1 ,...., xm) <br />

Sortierung: sort,rev; sort (x) sortiert den Vektor aufsteigend, rev gibt<br />

<br />

den Vektor in umgekehrter Reihenfolge<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

138


1.4.4 Auswertungsreihenfolge<br />

, >,_ zuweisen<br />

[von höchster zu niedrigster Priorität]<br />

$ auf Listenelement zugreifen<br />

[, [[ auf Listen–/ Vektorelement zugreifen<br />

^ exponenzieren<br />

unäres Minus<br />

: Folgen erzeugen<br />

%%,%\%,%£% <strong>und</strong> weitere spezielle Operatoren %...%<br />

/,£ multiplizieren, dividieren<br />

+, addieren, subtrahieren<br />

,=,==,!= vergleichen<br />

! logisch negieren<br />

&,|,&&, || logische Operatoren<br />

~ Formeln erzeugen<br />

innerhalb einer Funktion zuweisen,<br />

siehe Abschnitt 3.6<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

139


1.4.5 Logische Ausdrücke<br />

können in offensichtlicher Weise aus den Operatoren , =, ==, !=, !, &, | <strong>und</strong> Klammern gebildet werden<br />

any <strong>und</strong> all gut geeignet um logische Vektoren<br />

zusammenzufassen: geben einen einzigen logischen<br />

Rückgabewert zurück im Gegensatz zu den oben angeführten,<br />

die Vektoren von logischen Werten zurückgeben<br />

1.4.6 Missings<br />

zwei Typen von Missings: NA (not available) <strong>und</strong> NaN (not a<br />

number) — (sowie Inf, Inf)<br />

ternäre Logik: kein Vergleich x==NA möglich (liefert logischen<br />

Wert NA) is .na(x)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

140


Fehlerabfangen in eigenen Routinen durch na.action, na. fail ,<br />

na.omit<br />

1.5 String-Operationen<br />

anders als in C: character-Vektoren sind Vektoren von Strings!<br />

Unterscheide "" <strong>und</strong> character(0) unterschiedliches “leer”!<br />

Erzeugung durch Zuweisung "a"oder Verkettung c("a","a")<br />

lexikographische Ordnung: "a"


– bei Bedarf auch zu einem String — Argument collapse<br />

– Bsp.:paste(c("Hallo", "␣Welt"), 1:3, 2==1+1)<br />

grep: im Index zur Mustererkennung — siehe Abschnitt 1.6.1<br />

<strong>und</strong> Tabelle 1.10-1, z.B. alle Namen, die mit P anfangen <strong>und</strong> mit<br />

o enden namen[grep(pattern=’^P.£o$’,namen)]<br />

substring: Auswahl von Teil-Strings (siehe Beispiel)<br />

abbreviate: automatische Abkürzung der Strings (siehe Beispiel)<br />

strsplit : teilt Strings in Unterstrings auf; Achtung<br />

Ergebnis ist Liste der Länge , deren Elemente Vektoren mit<br />

aufgeteilten Strings sind<br />

sub, gsub: ersetzt reguläre Ausdrücke (vgl. Tabelle 1.10-1) —<br />

ersteres nur beim ersten Auftreten, letzteres überall<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

142


R–Beispiel 1.5-1:<br />

data ( p a i n t e r s , package=MASS)<br />

# m i t t l e r w e i l e k l a r<br />

pnames row . names ( p a i n t e r s )<br />

# Namen d e r Maler i n pnames<br />

s u b s t r i n g ( pnames [ 1 : 4 ] , 1 , 5 )<br />

as . v e c t o r ( a b b r e v i a t e ( pnames [ 1 : 4 ] ) )<br />

1.6 Indizes <strong>und</strong> Arrays<br />

1.6.1 Indizierungsmöglichkeiten<br />

(i) mit logischen Vektoren:<br />

nur die Elemente werden verwendet die eine logische Bedingung<br />

erfüllen<br />

Bsp: z(x+y)[!is .na(x) & x>0]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

143


(ii) Vektoren mit positiven Integern<br />

Diese Integers müssen im Bereich ‘0:length(x)‘ liegen<br />

Bsp: x[c (1:3,5,10:13,5:1)]<br />

(iii) Vektoren mit negativen Integern:<br />

Die entsprechenden Elemente werden herausgenommen<br />

Bsp: x[ (1:3)]<br />

(iv) Vektor mit Charakter-Strings<br />

Auswahl anhand von Namen, z.B.<br />

o b s t c ( 5 , 1 0 , 1 )<br />

names ( f r u i t ) c ( " Orange " , " B i r n e " , " A p f e l " )<br />

e s s e n o b s t [ c ( " A p f e l " , " Orange " ) ]<br />

e s s e n<br />

Bemerkung 1.6-1:<br />

Zuweisungen: Auch Zuweisungen können so vorgenommen werden,<br />

x[ is .na(x)]0 # ersetzt alle Missings durch 0<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

144


unzul. Indizes:<br />

<br />

ergeben Fehler bei Ausdrücken<br />

bei Zuweisungen Missings, falls , sonst ignoriert<br />

replace, append:<br />

erzeugen jeweils Kopien des Arguments, ohne das Original zu<br />

verändern;<br />

replace(x,pos,values) erzeugt Kopie mit x[pos]values,<br />

append(x,values, after ) erzeugt Kopie mit angehängten Werten<br />

values ab Position after<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

145


1.6.2 Arrays <strong>und</strong> Indizierung<br />

Array: multi-indiziertes Variablenschema;<br />

bei Indizes Matrix<br />

Dimensionen der einzelnen Indizes: im Vektor dim abgelegt<br />

Nummerierung startet mit — nicht wie in C mit <br />

Indizierung: wie 1.6.1 (i), oder mit mehrdimensionalen Indizes<br />

wie in 1.6.1 (i)–(iv)<br />

Erzeugen einer Matrix z.B. durch matrix(0,nrow=3,ncol=4)<br />

bei Casting Vektor Array “umgekehrtes Stellenwertsystem”,<br />

d.h. [1,2] entspricht größerer eindim. Index als [2,1]<br />

— Formel <strong>für</strong> dim= <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

146


Namen <strong>für</strong> die Indizes: dimnames, z.B. aarray(a,dim=c(3,4,10)),<br />

dimnames(a)list( letters [1:3], c("i"," ii "," iii ","iv"),NULL)<br />

Permutieren der Indizes durch aperm, z.B. aperm(a,(2,3,1))<br />

weitere Indizierungsmöglichkeiten<br />

(i) jede beliebige Indexposition darf leer bleiben:<br />

– entsprechender Index wird ganz durchlaufen<br />

– Zahl der Indizes wird um einen kleiner<br />

– keine Veringerung der Indexzahl saa [2,,, drop=F]<br />

– drop gibt es nicht bei Matrizen<br />

(ii) Array indiziert durch Matrix<br />

bei Indexdimensionen können jeweils Elemente durch<br />

eine ¢ Matrix ausgewählt werden.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

147


1.6.3 Arithmetik mit Arrays<br />

— Arrays als Input <strong>für</strong> Funktionen mit skalaren Argumenten —<br />

Einsetzen von einheitl. dim. Arrays:<br />

liefert elementweise ausgewertete Funnktion zurück, z.B.<br />

sin (matrix((1:10)£2£pi/10,nrow=5,ncol=2))<br />

Einsetzen von einheitl. dim. Arrays <strong>und</strong> Vektoren:<br />

– Auswertung von links nach rechts<br />

– Erweiterung zu kurzer Vektoren gem. Abschnitt 1.4.2<br />

– Arrays müssen von einheitlicher Dimension sein<br />

– Ist ein Vektor länger als die vorangegangenen Arrays so ist<br />

das Resultat ein Vektor dieser längeren Dimension<br />

– Liegen Arrays vor, <strong>und</strong> gab es weder Casting in einen Vektor<br />

noch einen Fehler, so ist das Resultat ein Array mit den<br />

gemeinsamen Dimensionen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

148


1.6.4 Sortieren<br />

kanonisch mit sort<br />

dabei: Reihenfolge von mit “==” verglichenen Elementen bleibt<br />

erhalten<br />

partielles Sortieren möglich<br />

flexibler: isort . list (x): liefert Indexvektor ‘i‘ zurück, so dass<br />

‘x[i]‘ sortiert ist<br />

ebenfalls die Funktion order mit ihr simultanes Sortieren nach<br />

mehreren Kriterien (z.B. erst Name dann Vorname)<br />

Ränge: die Funktion rank<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

149


1.7 Matrix–Operationen<br />

Bemerkung 1.7-1:<br />

Das meiste in Abschnitt 1.7 gilt auch <strong>für</strong> numerische Data-Frames.<br />

Im folgenden seien X, X1, X2 Matrizen <strong>und</strong> y, y1, y2 Vektoren, so<br />

dass die Dimensionen immer “passen”.<br />

1.7.1 Anhängen von Spalten <strong>und</strong> Zeilen<br />

Anhängen von Zeilen durch rbind, von Spalten durch cbind<br />

Ist der anzuhängende Vektor zu kurz, wird er wie in<br />

Abschnitt 1.4.2 aufgefüllt.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

150


1.7.2 Matrixprodukte <strong>und</strong> Transposition<br />

Transposition: t(X),t(y)<br />

Matrixmultiplikation: X1%£%X2, X1%£%y, y%£%X1<br />

Beachte: Bei Linksmultipl. mit Vektor keine Transposition!<br />

Genauer: %£% inneres Produkt x%£%x <br />

Kreuzprodukt: crossprod(X1,X2) <br />

äußeres Produkt: y1%o%y2 (dyadisches Produkt),<br />

X1%o%X2 (Kroneckerprodukt)<br />

Funktion outer: <strong>für</strong> , <strong>und</strong> gibt<br />

<br />

outer(y1,y2, f) .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

151


R–Beispiel 1.7-2 [Faltung von Bin(4,0.3) <strong>und</strong> Bin(3,0.1)]:<br />

# X~Bin ( 4 , 0 . 3 ) <strong>und</strong> Y~Bin ( 3 , 0 . 1 ) unabh .<br />

# g e s u c h t : d i e Wahrsch . f k t . von X+Y<br />

x dbinom ( 0 : 4 , s i z e =4,p =0.3)<br />

<br />

# dbinom ( . . ) = P(X=x )<br />

y dbinom ( 0 : 3 , s i z e =3,p =0.1)<br />

# dbinom ( . . ) = P(Y=y )<br />

xy x%o%y # e r g i b t p i £ q j<br />

i n d o u t e r ( 0 : 4 , 0 : 3 , "+" )<br />

pf f u n c t i o n ( i ){<br />

i n d 0 ( i n d==i )<br />

r e t u r n ( sum ( i n d 0 £ xy ) ) }<br />

c ( pf ( 0 ) , pf ( 1 ) , pf ( 2 ) , pf ( 3 ) , pf ( 4 ) , pf ( 5 ) , pf ( 6 ) , pf ( 7 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

152


1.7.3 apply <strong>und</strong> sweep<br />

1.7.3 (a) apply<br />

apply erlaubt es, skalare-argumentige Funktionen sukzessive,<br />

schnittweise auf Arrays auszuwerten<br />

vermeidet Schleifen; falls Matrixmultiplikation möglich, ist diese<br />

aber schneller<br />

Argumente<br />

– Name des Arrays<br />

– Integer-Vektor MARGIN, der die Indizes festlegt, auf die die<br />

Funktion separat angewendet werden soll<br />

Beachte: das Resultat hat Dimensionen dim(X)[MARGIN]<br />

– Name einer Fkt., FUN, die auf die Schnitte angewendet wird<br />

– alle weiteren Argumente von FUN<br />

– entsprechende Varianten <strong>für</strong> andere Strukturen: sapply,<br />

lapply, tapply, c.f. Abschnitte 1.8.5 <strong>und</strong> 1.8.3<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

153


R–Beispiel 1.7-3:<br />

data ( i r i s 3 ) # l a d e n des IRIS dim ( i r i s 3 )<br />

# D a t e n s a t z e s<br />

h e l p ( i r i s 3 ) # I n f o dazu<br />

i r . means a p p l y ( i r i s 3 , c ( 2 , 3 ) , mean )<br />

# Anwendung von mean a u f j e d e n<br />

# j , k s c h n i t t von i r i s [ i , j , k ]<br />

a p p l y ( i r i s 3 , c ( 2 , 3 ) , mean , t r i m =0.1)<br />

# zus . Arg von mean > getrimmtes M i t t e l<br />

a p p l y ( i r i s 3 , c ( 2 ) , mean )<br />

i r . v a r a p p l y ( i r i s 3 , 3 , v a r )<br />

1.7.3 (b) sweep<br />

# V a r i a n z e i n e s j e d e n k S c h n i t t s<br />

Bereinigen der Daten — im obigen Beispiel Abzug des Mittelwerts<br />

<br />

sweep( iris3 ,c (2,3), ir .means)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

154


1.7.4 Funktionen in Matrizen<br />

Lösen linearer Gleichungssysteme: solve<br />

solve(A) invertiert (A),<br />

solve(A,b) berechnet ein x, so dass ,<br />

bei überbestimmtem die KQ-Lösung<br />

Choleskizerlegung: chol, backsolve<br />

Eigenwerte / –vektoren: eigen<br />

liefert Liste mit Komponenten values (Eigenwerte) <strong>und</strong> vectors<br />

(Eigenvektoren)<br />

nur –werte mit only . values=T,<br />

deklarativ symmetrisch symmetric=T<br />

Singulärwertzerlegung svd<br />

QR-Zerlegung qr<br />

Determinante: nicht direkt;<br />

Spur: nicht direkt; mit qr oder eigen Achtung nicht zu<br />

verwechseln mit trace, siehe Abschnitt 3.4.3 (c)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

155


1.7.5 Casting <strong>für</strong> Matrizen <strong>und</strong> Data-Frames<br />

Matrix Data-Frame as.data.frame; Namen übernommen oder<br />

Defaults<br />

Data-Frame Matrix<br />

as.matrix: sind Strings im Data-Frame Modus: character<br />

(alle, auch numerische Spalten!)<br />

data.matrix : Modus: numeric (Strings werden auf numeric<br />

gecastet!), ursprgl. Strings in column. levels<br />

1.8 Funktionen von Faktoren <strong>und</strong> Listen<br />

1.8.1 ein hypothetisches Datenbeispiel<br />

R–Beispiel 1.8-1:<br />

l a n d c ( "HHA" , "BAY" , "NRW" , "BAW" , "RLP" , "HBR" ,<br />

<br />

"BAY" , "SAC" , "BAW" , "SAA" , "HES" , "NS" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

156


s e l b s t c (T, T, F , T, F , F , F , T, F , T, T,T)<br />

EKT c ( 3 0 , 2 8 , 2 3 , 4 0 , 1 4 , 4 0 , 2 4 , 9 0 , 2 9 , 3 0 , 6 0 , 4 0 )<br />

Beruf . s t u d i e data . frame ( land , s e l b s t ,EKT)<br />

rm( land , s e l b s t ,EKT)<br />

a t t a c h ( Beruf . s t u d i e ) # s i e h e A b s c h n i t t 1.10.3 (c)<br />

1.8.2 table <strong>und</strong> tabulate<br />

im Beispiel werden die Strings <strong>und</strong> logischen Werte zu Faktoren<br />

table listet die absoluten Häufigkeiten eines jeden Faktors, in<br />

Beispiel 8.1-1: table(EKT), table( selbst )<br />

bei mehr als einem Argument bildet table<br />

Mehrfach-Kreuztabellen, in Beispiel 8.1-1: table(EKT,selbst)<br />

die Funktion tabulate listet die absoluten Häufigkeiten in einem<br />

Vektor mit nicht negativen, numerischen Einträgen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

157


es entsteht ein ragged array, eine Liste mit heterogenen<br />

unterschiedlich langen Einträgen<br />

ist das erste Argument der Funktion ein Faktor, so erzeugt die<br />

entsprechende Methode plot, i.e. plot . factor, boxplots, siehe<br />

auch Abschnitt 4.2<br />

1.8.3 tapply<br />

wie in Abschnitt 1.7.3 können for–Schleifen vermieden werden,<br />

hier durch tapply,<br />

in Beispiel 1.8-1: tapply(EKT,land,mean)<br />

Argument 1: zu betrachtende Variable, Argument 2: (Liste von)<br />

klassierende(n) Variablen, Argument 3: anzuwendende Funktion<br />

/ Statistik<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

158


1.8.4 split<br />

split splittet den Datensatz gemäß einer kategoriellen Variable<br />

auf<br />

in Beispiel 1.8-1: split (EKT,selbst)<br />

1.8.5 lapply <strong>und</strong> sapply<br />

die Analoga zu apply <strong>und</strong> tapply <strong>für</strong> Listen sind lapply <strong>und</strong> sapply<br />

sind alle Einträge gleich lang, so vereinfacht sapply das Resultat<br />

zu einer Matrix / einem Vektor<br />

in Beispiel 1.8-1: sapply( split (EKT,selbst),mean)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

159


1.9 Datenausgabe<br />

1.9.1 Ausgabe auf File<br />

der Befehl write<br />

– Syntax: write(,file="")<br />

– schreibt Objekt auf das File ;<br />

man beachte auch Bemerkung 1.3-2<br />

– entspricht schreiben auf das Sitzungs–Fenster<br />

– Argument ncolumns spezifiziert die Spaltenzahl pro Zeile<br />

der Befehl write . table, z.B.<br />

write . table( painters , file ="",sep="\t::␣")<br />

– per default werden Zeilen– <strong>und</strong> Spalten–Labels mit<br />

geschrieben — so vorhanden<br />

<br />

– row.names=F,col.names=F lässt beide weg<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

160


der Befehl write .matrix von Venables and Ripley (1999)<br />

w r i t e . m a t r i x f u n c t i o n ( x , f i l e ="" , sep="␣" )<br />

{<br />

}<br />

x as . m a t r i x ( x )<br />

p n c o l ( x )<br />

cat ( dimnames ( x ) [ [ 2 ] ] , format ( t ( x ) ) , f i l e =f i l e ,<br />

sep=c ( rep ( sep , p 1) , "\n" ) )<br />

der Befehl cat<br />

– ähnlich wie paste mit Argument collapse =""<br />

– explizites \n zum Zeilenumbruch nötig<br />

– Argument fill= Zeichen pro Zeile;<br />

fill=T bricht genau auf Fensterbreite um<br />

– Argument labels=letters kennzeichnet die Zeilen durch<br />

Buchstaben<br />

<br />

– Argument/Funktion format<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

161


£ zwingt die Ausgabe auf bestimmtes Format, vgl.<br />

Format-String in C — printf, scanf<br />

£ Beispiel: Deklaration der Funktion print .summary.lm<br />

der Befehl dump<br />

– Syntax: dump("",file="")<br />

bzw.<br />

dump(list("","",...),file="")<br />

– schreibt [die Liste von] Objekt[en] als<br />

Zuweisungen auf das File gut lesbar;<br />

– mit source("") wieder einlesbar (aber langsam)<br />

– schneller mit dump.data <strong>und</strong> data. restore<br />

£ zum Übermitteln von Datensätzen zwischen<br />

(verschiedenen) Rechnern;<br />

£ Speichermodus wird mit übermittelt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

162


der Befehl save<br />

– Syntax: save("",file="")<br />

bzw.<br />

dump(list("","",...),file="")<br />

– weitere Optionen:<br />

£ ascii : falls auf TRUE wird in ASCII–Code abgelegt; per<br />

default auf FALSE; dann abspeichern in einem<br />

plattformunabhängigen Binärformat (XDR–Darstellung)<br />

£ compress: falls auf TRUE werden die Daten komprimiert<br />

abgelegt; per default auf FALSE;<br />

– schreibt [die Liste von] Objekt[en] als<br />

ASCII– oder Binärdatei auf das File <br />

komprimierten Files<br />

– Daten schnell wieder in R mit load("")<br />

unabhängig vom Betriebssystem einlesbar;<br />

<br />

– Variante: save.image(file="")<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

163


– schreibt den gesamten Arbeitsspeicher als ASCII– oder<br />

Binärdatei auf das File ; siehe auch<br />

Abschnitt 8.2.1 (a)<br />

– zusätzlicher Parameter:<br />

safe: falls auf TRUE wird zuerst auf eine temporäre Datei<br />

geschrieben, <strong>und</strong> diese erst nach erfolgreichem Abschluss des<br />

Speicherns in "" umbenannt<br />

1.9.2 Umleiten der Ausgabe / Drucken<br />

Mit dem Befehl sink("") wird die<br />

Bildschirmausgabe auf das auf das File umgelenkt<br />

zum Drucken: am besten Umweg über Ausgabefile, das<br />

nacheditiert werden kann<br />

<br />

zum Ausdruck von Graphik siehe Abschnitt 4.1.2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

164


1.10 Arbeiten mit dem System<br />

1.10.1 File- <strong>und</strong> URL-zugriffe unter R<br />

um systemunabhängig auf Files zugreifen zu können: siehe ? files<br />

file . create (...) , file . exists (...) , file .remove (...) erzeugt<br />

File/testet es auf Existenz/löscht es<br />

dabei: Argumente ... durch "/" getrennt zu Pfad<br />

zusammengehängt<br />

mit file .rename, file .copy, file .symlink(from, to) kann man<br />

Files umbenennen, kopieren, bzw. Verknüpfungen erstellen<br />

file .append hängt Files zusammen<br />

dir . create erzeugt einen Ordner<br />

dir (synonym: list . files ) gibt den Inhalt eines Ordners aus<br />

<br />

genauer: das systemspezifische Ordner-Trennzeichen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

165


download. file lädt eine URL in ein entsprechendes temporäres<br />

File; dabei sind <strong>für</strong> Proxies eventuell Systemvariablen mit<br />

Sys.putenv zu setzen —vgl. auch ?download. file , ?Sys.putenv<br />

das aktuelle Arbeitsverzeichnis erhält man mit getwd <strong>und</strong> setzt<br />

es mit setwd<br />

1.10.2 R-Skripte<br />

R-Skripte sind ASCII–Files, vorzugsweise mit Endung .r, mit<br />

Folgen von R-Anweisungen<br />

werden dann Zeile <strong>für</strong> Zeile abgearbeitet (interpretiert !)<br />

Einlesen eines Sripts mit source(""),<br />

— möglicherweise mit options(echo=T)<br />

Bearbeitung mit einem Editor Ihrer Wahl (siehe auch Übung)<br />

zum Erstellen oft nützlich: das Editieren von History-Files, vgl.<br />

Abschnitt 1.10.5<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

166


1.10.3 Auffinden von S-Objekten<br />

1.10.3 (a) Daten–Filestruktur in S<br />

interaktiv erzeugte Objekte in S-<strong>Plus</strong> real, in R virtuell als File<br />

abgelegt:<br />

S-<strong>Plus</strong> unter (.Data bzw. _DATA)–Verzeichnis<br />

<br />

R im virtuellen Verzeichnis “.GlobalEnv”<br />

Objekte, die auf einer höheren Ebene generiert werden, — z.B.<br />

lokale Variablen in einem Funktionenkörper, — werden in einem<br />

lokalen frame abgelegt (vgl. auch Abschnitt 3.6)<br />

jedes Objekt wird in einem separaten File abgelegt (auch mit<br />

cp/copy, rm/del etc. manipulierbar)<br />

in S-<strong>Plus</strong>: alle Objekte aus früheren Sitzungen bleiben<br />

verfügbar (als Files)<br />

besser mehrere Arbeitsverzeichnisse <strong>für</strong> unterschiedliche<br />

Projekte<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

167


1.10.3 (b) Suchmechanismus in S<br />

auf der Suche nach einem Objekt durchsucht S zunnächst die<br />

Search list (Suchliste)<br />

diese Liste erhält man mit search()<br />

die Elemente des ersten Elementes der Suchliste erhält man mit<br />

objects (), die der weiteren mit objects()<br />

durch weiteres Argument pattern (mit Wildcards) Einschränkung<br />

der Suche<br />

Wildcard-Syntax gemäß Unix–Standard POSIX 1003.2, siehe<br />

auch Tabelle 1.10-1<br />

zu einem Objekt findet find() die Stellen in der<br />

Suchliste<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

168


Tabelle 1.10-1 [Reguläre Ausdrücke]:<br />

— aus Aho et al. (1988),fig. 3.48<br />

Ausdruck wird gematch-t durch Beispiel<br />

c jedes non-operator Zeichen c a<br />

\c Zeichen c als solches \£<br />

"s" String s als solches "££"<br />

. jedes Zeichen außer newline a.£b<br />

^ Zeilenanfang ^abc<br />

$ Zeilenende abc$<br />

[s] jedes Zeichen in s [abc]<br />

[^s] jedes Zeichen, das nicht in s ist [^abc]<br />

r£ oder mehr r’s a£<br />

r+ oder mehr r’s a+<br />

r? oder mehr r a?<br />

r{m,n} bis –maliges Auftreten von r a{1,5}<br />

r1r2 r1 gefolgt von r2 ab<br />

r1|r2 r1 oder r2 a|b<br />

(r) r (a|b)<br />

r1/r2 r1 falls es von r2 gefolgt wird abc/123<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

169


1.10.3 (c) Positionen in der Suchliste<br />

Einträge der Suchliste heißen Dictionary oder Database<br />

neben S–Files können auch Listen oder listen–artige Objekte wie<br />

Data-Frames Einträge sein<br />

an erster Stelle<br />

S-<strong>Plus</strong> .Data bzw. _DATA)–Verzeichnis;<br />

R .GlobalEnv<br />

dieses heißt auch Arbeitsverzeichnis (Workspace)<br />

mehrere Objekte mit gleichen Namen: das im “früheren”<br />

Directrory (in Suchliste) maskiert die “dahinter” kommenden<br />

spezifische Variante aus Directory mit<br />

get("",)<br />

Hinzufügen weiterer directories, Listen oder Data-Frames (in die<br />

Suchliste) mit attach<br />

hierbei Erstellen einer Kopie (keine Auswirkung auf “Original”)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

170


Löschen weiterer directories, Listen oder Data-Frames (aus der<br />

Suchliste) mit detach<br />

Modifikationen in lokaler Kopie werden in File von der Gestalt<br />

Save.. — außer Argument save=F in<br />

detach<br />

Beträchtliches Caching logische Position (in Suchliste) <br />

Position im Filesystem; Abgleich mit synchronize<br />

1.10.4 Systemkonfiguration<br />

vielfältige Anpassungsmöglichkeiten des Systems sogar<br />

Modifikation von Systemfunktionen<br />

der Befehl options,<br />

– z.B. unlist (options)<br />

– Auskunft über Option mit<br />

options(""), z.B. options("prompt")<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

171


– Setzen der Option auf Wert mit<br />

options(=), z.B.<br />

options(prompt=":")<br />

<br />

– wichtige Optionen siehe Tabelle 1.10-2<br />

ähnlich: ps.options, siehe Abschnitt 4.1.2 (b)<br />

der Befehl . First<br />

– wird beim Aufruf von R “still” ausgeführt (falls in .Data<br />

bzw. _DATA vorhanden)<br />

– Beispiel aus Venables and Ripley (1999)<br />

. F i r s t f u n c t i o n ( )<br />

{<br />

o p t i o n s ( prompt=">" , c o n t i n u e="+␣" ,<br />

d i g i t s =5, l e n g t h= 99999)<br />

ps . o p t i o n s ( paper=" a4 " , f o n t =3,<br />

p o i n t s i z e =10, h o r i z o n t a l=F)<br />

l i b r a r y (MASS, f i r s t =T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

172


}<br />

der Befehl .Last<br />

– analog . First wird bei Abschluss der Sitzung von R “still”<br />

ausgeführt<br />

– Beispiel (c.f. Venables and Ripley (1999))<br />

.Lastfunction(){cat("<strong>und</strong>␣tschuess ....\ n")}<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

173


Tabelle 1.10-2 [wichtige Optionen]:<br />

width Seitenweite, in char–Symbolen<br />

length Seitenlänge, in char–Symbolen, oft zum Auftrennen<br />

langer Ausgaben<br />

digits signifikante Zahl an Stellen bei Ausgabe mit print<br />

editor der von Ihnen präferierte Editor<br />

echo logischer Wert: Sollen Ausdrücke vor Auswertung<br />

noch ausgegeben werden?<br />

prompt primärer Prompt (per default > )<br />

continue Kommando–Fortsetzungs–Prompt (per default + )<br />

error Funktion zum Fehlerabfangen (siehe Abschnitt 3.4)<br />

warn Strenge bei der Behandlung von Warnungen; 0<br />

sammelt sie <strong>und</strong> gibt sie gemeinsam aus, 1 gibt sie<br />

sofort aus, 2 macht Warnungen zu Fehlern<br />

memory maxim. Speicher (in bytes) der alloziert werden kann<br />

<br />

object.size maximaler Speicher (in bytes) eines Objekts<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

174


1.10.5 History–File<br />

mit history (max.show = 25, reverse = FALSE) werden die<br />

ersten [letzten] max.show in dieser Sitzung ausgeführten Befehle<br />

in chronologischer [umgekehrter falls reverse = T] Reihenfolge<br />

gelistet<br />

Abspeichern der Historie mit savehistory (), per<br />

default in .Rhistory<br />

Laden einer Historie mit loadhistory ()<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

175


2 Einfache explorative Analyse<br />

2.1 etwas Stochastik/Statistik<br />

Dieser Abschnitt stellt im Range einer Wiederholung wichtige Begriffe <strong>und</strong><br />

Verteilungen aus der Stochastik I zusammen, führt die Notation ein, <strong>und</strong><br />

geht dann auf deren Umsetzung in R ein<br />

2.1.1 Wahrscheinlichkeitsmaße<br />

mathematische Umsetzung der Information /<br />

Entscheidungsgr<strong>und</strong>lage: die –Algebra <br />

– Teilmenge der Potenzmenge einer Ereignismenge , <br />

– abgeschlossen unter ¡ <strong>und</strong> abzählbar vielen , <br />

axiomatischer Wahrscheinlichkeitsbegriff:<br />

ein Wahrscheinlichkeitsmaß gemäß Kolmogoroff’schen Axiomen<br />

<br />

– , <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

176


– –additiv: disjunkt <br />

<br />

– ( <strong>für</strong> alle )<br />

Paar heißt Messraum<br />

Tripel heißt Wahrscheinlichkeitsraum (W-Raum)<br />

2.1.2 Zufallsvariablen <strong>und</strong> Verteilungen<br />

2.1.2 (a) Zufallsvariablen<br />

eine Abbildung zwischen zwischen Messräumen<br />

, ist messbar, falls <strong>für</strong> alle<br />

;<br />

anschaulich: Ich kann mit der Information aus entscheiden, welche Werte in annimmt.<br />

jede messbare Abbildung von einem W–raum in<br />

einen Messraum heißt Zufallsvariable (ZV).<br />

der Messraum heißt auch Stichprobenraum<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

177


i.a. genaue Gestalt von unwichtig, es interessiert nur<br />

das Realisationsverhalten von in .<br />

Beispiele <strong>für</strong> :<br />

– Realisationen eines Würfels<br />

– Antworten in einem Fragebogen<br />

– Kurvenverlauf des DAX<br />

2.1.2 (b) Mess–Skalen<br />

je nach Stichprobenraum nur bestimmte Operationen mit den<br />

Daten zulässig;<br />

Klassifikation durch Skalenniveau<br />

– kategorielle Merkmale: z.B. Geschlecht, Marktsegment,<br />

Augenfarbe, Landschaftstyp<br />

nur relative Häufigkeiten, z.B. Modus<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

178


– ordinale Merkmale: z.B. Schulnoten, “stimme-zu-Skalen”<br />

Anordnung zulässig auch Ordnungsstatistiken wie Median,<br />

Quartile zulässig<br />

– metrische Merkmale: z.B. Alter, Einkommen,<br />

auch: Unterscheidung Ratio–/ <strong>und</strong> Intervallskalen<br />

Addition (<strong>und</strong> bei Ratio-Skalen auch Division) zulässig <br />

auch Mittelwert, Varianz zulässig<br />

abgeleitete Skalen: Vektor–/ “Listen”–wertige Variablen<br />

2.1.2 (c) Verteilungen/Dichten<br />

Information über Realisation einer einzelnen ZV vollständig<br />

beschrieben durch Bildmaß ,<br />

<strong>für</strong> ,<br />

statt auch <br />

ziemlich groß, stattdessen repräsentative Unterklassen von<br />

Ereignissen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

179


– <strong>für</strong> diskrete Merkmale: alle Elementarereignisse in , <br />

W-Funktion , zum Beispiel durch Angabe der<br />

W-keit <strong>für</strong> Ereignisse vom Typ “6” beim Würfeln<br />

– <strong>für</strong> metrische Merkmale mit Werten in oder :<br />

Ereignisse in ,<br />

Verteilungsfunktion , ;<br />

Konvention: im heißt falls <strong>für</strong> alle .<br />

bei (absolut)stetigen Merkmalen:<br />

Falls besitzt eine (Lebesgue–)Dichte, also<br />

, so dass <strong>für</strong> alle <br />

<br />

dabei heißt : <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

180


2.1.3 wichtige Verteilungen<br />

2.1.3 (a) diskrete Verteilungen<br />

Einpunktverteilung / Diracmaß in , in Zeichen <br />

Uniforme Verteilung auf einer endlichen Menge von Elementen<br />

, in Zeichen <br />

Bernoulli–Verteilung: ;<br />

Parameter , in Zeichen <br />

Binomial–Verteilung: Vtlg. der Summe von <br />

Bernoulli–Variablen; -fache Ziehung mit Zurücklegen;<br />

Parameter , , in Zeichen <br />

Hypergeometrische Verteilung: -fache Ziehung ohne<br />

Zurücklegen aus Urne mit Kugeln, weiß, schwarz;<br />

Parameter , , , in Zeichen <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

181


Multinomial–Verteilung: Vtlg. der Summe von Variablen<br />

mit Merkmalsausprägungen; Parameter , , in<br />

Zeichen <br />

Wilcoxon–Verteilung: Vtlg. der entsprechenden Teststatistik,<br />

Parameter , , in Zeichen <br />

Poissonverteilung: Grenzwert <strong>für</strong> “seltene Ereignisse”,<br />

Parameter , in Zeichen <br />

Geometrische Verteilung: , ,<br />

Parameter , in Zeichen <br />

negative Binomial–Verteilung (auch Pascal–Verteilung): Vtlg.<br />

der Wartezeit, bis man bei –Variablen zum -ten<br />

Mal “” erzielt; Parameter , , in Zeichen ;<br />

Spezialfall : Geom. Vtlg;<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

182


2.1.3 (b) die Normalverteilung<br />

wichtig wegen Zentralem Grenzwertsatz<br />

Parameter: , , in Zeichen <br />

<br />

multivariat: Seien ;<br />

fassen wir diese zu zusammen, <strong>und</strong> ist ¢ , , so<br />

heißt die Verteilung von multivariat normal mit<br />

Parametern , ¦ , in Zeichen ¦<br />

2.1.3 (c) von der Normalverteilung abgeleitete Verteilungen<br />

Im folgenden sei ,<br />

, , ;<br />

: Lognormal–Vtlg<br />

<br />

<br />

: oder Chiquadrat–Vtlg mit Freiheitsgraden<br />

(df’s) <strong>und</strong> Nichtzentralität (ncp) <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

183


: –Vtlg — ohne Erwartungswert!<br />

Sei von sto.u.;<br />

dann : / Student–Vtlg mit df’s <strong>und</strong><br />

ncp .<br />

Sei von sto.u.;<br />

dann <br />

: / Fisher–Snedecor–Vtlg mit df’s <br />

<strong>und</strong> <strong>und</strong> ncp .<br />

<br />

Seien ¦;<br />

fassen wir die zu einer Matrix ¢ zusammen,<br />

dann : ¦ / Wishart-Vtlg mit Parametern<br />

, ¦<br />

Sei sto. u. von ;<br />

dann : oder Hotelling–Vtlg.<br />

Seien ¦ <strong>und</strong> ¦ sto. u.<br />

dann <br />

: £ oder Wilks–Vtlg.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

184


2.1.3 (d) sonstige stetige Verteilungen<br />

Uniforme Verteilung auf in Zeichen <br />

Exponential–Verteilung: gedächtnislose Verteilung, Parameter ,<br />

in Zeichen <br />

Laplace–Verteilung: symmetrisierte Exponentialverteilung mit<br />

Parameter , in Zeichen .<br />

Gamma– oder Erlang–Verteilung: Verteilung mit Parametern<br />

<strong>und</strong> Vtlgsfkt. <br />

, in<br />

Zeichen ;<br />

falls : Vtlg. der Summe von –Variablen.<br />

logistische Verteilung: , in Zeichen<br />

.<br />

Beta–Verteilung: Vtlg. der -ten Ordnungsstatistik von <br />

–Variablen, in Zeichen .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

185


Extremwertverteilungen:<br />

Gumbel–Verteilung: , Fréchet–Verteilung: , , <br />

Weibull–Verteilung: , , <br />

Pareto–Verteilung: <br />

, <br />

2.1.3 (e) Mischungen von Verteilungen<br />

im Kontext von robuster Statistik wichtig (nicht nur dort!)<br />

, mit (Kontaminationsradius).<br />

, , , sto. u.<br />

2.1.4 Umsetzung in R<br />

umfassende Sammlung an Verteilungen bereits in R verfügbar<br />

Nomenklatur: , z.B. dnorm<br />

mit VtlgName: Name der Verteilung <strong>und</strong> : <br />

r d p q<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

186


– r : Simulation von Zufallsgrößen mit Verteilung <br />

zusätzliches Argument: n Stichprobenumfang<br />

– d : Dichte / W-fkt der Verteilung <br />

zusätzliches Argument: x Auswertungsstelle(n)<br />

– p : Verteilungsfkt. der Verteilung <br />

zusätzliches Argument: q Auswertungsstelle(n)<br />

– q : Quantilsfkt. der Verteilung <br />

zusätzliches Argument: p Auswertungsstelle(n)<br />

dabei Quantilsfunktion:<br />

speziell<br />

<br />

– <br />

<br />

Median,<br />

<br />

– , unteres/oberes Quartil<br />

(2.1.1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

187


Tabelle 2.1-1 [Verteilungen in R]:<br />

— aus http://cran.r-project.org/doc/manuals/R-intro.pdf, p. 34<br />

Verteilung Parameter<br />

beta shape1,shape2,ncp<br />

binom size,prob<br />

cauchy location,scale<br />

<br />

<br />

<br />

<br />

chisq<br />

exp<br />

df,ncp<br />

rate<br />

f df1,df2,ncp<br />

gamma shape,scale<br />

geom prob<br />

hyper m,n,k<br />

– lnorm meanlog,sdlog<br />

logis location,scale<br />

nbinom size,prob<br />

norm mean,sd<br />

pois lambda<br />

t df,ncp<br />

unif min,max<br />

weibull shape,scale<br />

wilcox m,n<br />

Extremwertvtlg.’en in Paket evd<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

188


2.2 Verteilungen mit den Zusatzpaketen<br />

distr <strong>und</strong> distrEx<br />

im Anschluss dieses Kurses:<br />

Software-Praktikum von Thomas Stabla, statho3@web.de,<br />

Florian Camphausen, fcampi@gmx.de<br />

Ergebnis: R–Paket “ distr ”<br />

mittlerweile (05/2006) in Version 1.7 auf CRAN veröffentlicht ;<br />

siehe auch Ruckdeschel et al. (2006).<br />

erweitert durch Paket “ distrEx”<br />

Auslöser <strong>für</strong> diese Pakete:<br />

will Algorithmus unabhängig von einer konkreten Verteilung<br />

formulieren;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

189


da<strong>für</strong> notwendig: tatsächliche Verteilung als Art Variable an<br />

Algorithmus übergeben<br />

Im Prinzip möglich: zusammenkleben von Präfix <strong>und</strong><br />

Verteilungsname in eval(parse (....))<br />

unelegant <strong>und</strong> unflexibel<br />

stattdessen: Variablentyp (genauer Klasse) Distribution<br />

Arithmetik <strong>für</strong> Verteilungen:<br />

– Identifikation von Zufallsvariable <strong>und</strong> Verteilung<br />

– Norm()+Pois() bedeutet:<br />

, , , sto. u., dann:<br />

Norm()+Pois() <br />

– analog sin (Norm())<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

190


R–Beispiel 2.2-1:<br />

l i b r a r y ( d i s t r )<br />

N Norm( mean = 2 , sd = 1 . 3 )<br />

P Pois ( lambda = 1 . 2 )<br />

Z 2£N + 3 + P ; Z<br />

p l o t (Z)<br />

p (Z ) ( 0 . 4 ) ; q (Z ) ( 0 . 3 )<br />

Zs r (Z ) ( 1 0 0 0 ) ; Zs [ 1 : 3 0 ]<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

191


d(x)(grid)<br />

0.00 0.02 0.04 0.06 0.08 0.10 0.12 0.14<br />

Density of AbscontDistribution<br />

0 10 20 30<br />

grid<br />

p(x)(grid)<br />

0.0 0.2 0.4 0.6 0.8 1.0<br />

CDF of AbscontDistribution<br />

0 10 20 30<br />

Abbildung 1: Dichte, Verteilungsfunktion un Pseudoinverse von Z<br />

grid<br />

grid<br />

0 10 20 30<br />

Quantile of AbscontDistribution<br />

0.0 0.2 0.4 0.6 0.8 1.0<br />

p(x)(grid)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

192


In Paket distrEx hat man auch Funktionale auf Verteilungen wie<br />

Erwartungswert (E), Varianz (var), Standardabweichung (sd), etc.<br />

zur Verfügung:<br />

R–Beispiel 2.2-2:<br />

l i b r a r y ( d i s t r E x )<br />

E Exp ( r a t e =2)<br />

E(E) ## b e n u t z t Formel =1/ r a t e<br />

E( as (E , " A b s c o n t D i s t r i b u t i o n " ) ) ## mit num . I n t e g r a t i o n<br />

E( as (E , " U n i v a r i a t e D i s t r i b u t i o n " ) ) ## mit S i m u l a t i o n e n<br />

E(E , fun = f u n c t i o n ( x ){2 £x ^2}) ## b e r e c h n e t E(2E^2)<br />

# mit demselben Operator / F u n k t i o n a l<br />

P Pois ( lambda=2)<br />

E(P) ## n u t z t Formel =lambda<br />

E( as (P , " D i s c r e t e D i s t r i b u t i o n " ) ) ## mit Summen<br />

<br />

E( as (P , " U n i v a r i a t e D i s t r i b u t i o n " ) ) ## mit S i m u l a t i o n e n<br />

E(P , fun = f u n c t i o n ( x ){2 £x ^2}) ## b e r e c h n e t E(2P^2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

193


2.3 Simulation von Zufallsvariablen<br />

2.3.1 Was sind “gute” Zufallszahlen?<br />

sollen “zufällig” aussehen<br />

besser: sollen mit statistischen Verfahren (Tests) nicht von <br />

unterscheidbar sein, insbesondere<br />

– von einer bekannten Verteilung<br />

– keine Autokorrelation<br />

– keine höheren Abhängigkeitsschemata<br />

sollen eine lange Periode haben (vor Wiederholung)<br />

sollen einfach <strong>und</strong> schnell produzierbar sein<br />

sollen (durch Setzung eines Initialisierungs–Parameters)<br />

reproduzierbar sein<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

194


Die folgenden drei Unterabschnitte stellen in einem Exkurs wichtige<br />

Resultate <strong>und</strong> Prinzipien zur Simulation von Zufallsvariablen zusammen;<br />

da diese aber sowieso in R implementiert sind, kann man diesen Abschnitt<br />

auch gut überspringen.<br />

2.3.2 Schritt 1: Erzeugung von<br />

; typische<br />

Zufallszahlengeneratoren<br />

2.3.2 (a) historisch: physikalisch erzeugte Zufallszahlen<br />

z.B. C-14–Zerfall, andere Isotopenzerfälle<br />

2.3.2 (b) lineare Kongruenzenschemata<br />

Definition 2.3-1:<br />

Für definiert man “Zufallszahlen” als<br />

<br />

(2.3.1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

195


Hierzu gilt:<br />

Theorem 2.3-2:<br />

Ein Schema gemäß (2.3.1) hat die (maximale) Periode genau<br />

dann, wenn<br />

(i) <br />

(ii) <strong>für</strong> jeden Primfaktor <br />

(iii) falls , dann <br />

Im Spezialfall , haben wir maximale Periode genau<br />

dann, wenn ungerade <strong>und</strong> .<br />

Für den Beweis verwenden wir<br />

Lemma 2.3-3 [kleiner Fermat’scher Satz]:<br />

Für prim gilt <strong>für</strong> <br />

<br />

(2.3.2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

196


Beweis<br />

zu Lemma 2.3-3:<br />

Für ist (2.3.2) trivial; sei also . Dann ist (2.3.2)<br />

äquivalent mit . Aber die Multiplikation mit stellt einen<br />

Gruppenautomorphismus in der abelschen, multiplikativen Gruppe der<br />

Restklassen dar. Daher gilt<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

also in der Tat . ////<br />

Beweis zu Theorem 2.3-2:<br />

“”:<br />

Mit Induktion sehen wir ein, dass <strong>für</strong> gilt, sofern :<br />

<br />

<br />

<br />

<br />

<br />

(2.3.3)<br />

Sei die Periode des Schemas <strong>und</strong> ; dann gilt mit (2.3.3) <br />

<strong>für</strong> alle , <strong>und</strong> falls ist nicht möglich; also gilt (i).<br />

Für (ii) nehmen wir an :<br />

Wir betrachten die Folge der modulo . Wegen der Restklassenbildung gilt<br />

<strong>für</strong> diese Folge ; nehmen wir an, , so müsste gelten <strong>und</strong> somit<br />

, da prim; dann aber folgte <strong>für</strong> alle im Widerspruch zu (i).<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

197


Insgesamt<br />

also muss gelten <strong>und</strong> somit, falls nach<br />

(2.3.3) <br />

. Dass wird durch (i) widerlegt, <strong>und</strong><br />

<br />

somit müsste sein; dies aber stünde im Widerspruch zu<br />

Lemma 2.3-3, <strong>und</strong> so gilt (ii).<br />

Nehmen wir nun an, dass . Man betrachte die Folge der modulo .<br />

Dann aber muss wie gerade gezeigt diese Folge Periode haben. Sei<br />

. Wegen (ii) muss dann sein; <strong>und</strong> wegen (i) muss<br />

gelten oder . Für diese beiden Konstellationen ergeben sich:<br />

<br />

<br />

also keine volle Periode. Beweis wird auf Seite 201 fortgesetzt<br />

Vor dem Beweis der Rückrichtung noch drei Lemmata:<br />

Lemma 2.3-4:<br />

Sei <strong>für</strong> <strong>und</strong> , <strong>und</strong> die Perioden des<br />

Schemas (2.3.1) <strong>für</strong> die Parameter , <br />

<br />

<strong>und</strong><br />

, wobei die ¡ –Größen modulo , die ¡ –Größen<br />

modulo aus den Parametern hervorgehen.<br />

Dann gilt .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

198


Beweis zu Lemma 2.3-4:<br />

Da , folgt, dass Da aber folgt,<br />

weil die Periode des ¡ –Schemas ist, , <strong>und</strong> analog<br />

, so dass also auch , also . ////<br />

Lemma 2.3-5:<br />

Die Periode des Schemas (2.3.1) mit <strong>und</strong> ist <strong>für</strong><br />

eine Primzahl genau dann, wenn<br />

(i) <strong>für</strong> <br />

(ii) <strong>für</strong> <br />

Lemma 2.3-6:<br />

Sei prim <strong>und</strong> . Dann gilt<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(2.3.4)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

199


Beweis<br />

zu Lemma 2.3-6:<br />

Sei also mit . Dann gilt<br />

<br />

<br />

<br />

<br />

<br />

¡<br />

da der Faktor <strong>für</strong> stets einen Primfaktor abspaltet <strong>und</strong> <strong>für</strong><br />

dieser Faktor von geliefert wird. Andererseits gilt <strong>für</strong> :<br />

<br />

<br />

<br />

also . ////<br />

Beweis zu Lemma 2.3-5:<br />

Das Lemma ist der Spezialfall des Satzes <strong>für</strong> , <strong>und</strong> .<br />

“” ist daher bereits durch den entsprechenden Beweisteil des Theorems<br />

abgedeckt.<br />

“”: Sei mit , also (i) oder (ii) in der Aussage von<br />

Lemma 2.3-5. Sei weiter . Dann folgt aus Lemma 2.3-6 — indem<br />

wir induktiv in in (2.3.4) <strong>für</strong> einsetzen <strong>für</strong> alle :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(2.3.5)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

200


Aus<br />

der rechten Seite der Implikation aber folgt<br />

<br />

<br />

<br />

<br />

<br />

Fortsetzung Beweis : “” in Theorem 2.3-2:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(2.3.6)<br />

denn aus der linken Seite folgt <strong>für</strong> ein so dass<br />

, also . Damit aber ist der Bruch auf der rechten Seite gerade<br />

<br />

<br />

<br />

<br />

<br />

Betrachten wir wieder (2.3.3) mit , , <strong>und</strong> .<br />

Dann gilt <strong>für</strong> die Periode des Schemas<br />

<br />

Setzen wir , so folgt mit aus der rechten Seite der Implikation<br />

(2.3.6) , also . Andererseits setzen wir , so<br />

folgt mit aus der rechten Seite der Implikation (2.3.6)<br />

, also , so dass in der Tat . ////<br />

Nach Lemma 2.3-4 genügt es, das Theorem <strong>für</strong> Primzahlpotenzen zu zeigen.<br />

Dabei genügt es zu zeigen, dass die mit startende Folge maximale<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

201


Periode hat. Das Theorem ist richtig <strong>für</strong> : Dann ist ,<br />

<strong>und</strong> nach (i) folgt aus auch , also was genau<br />

dann gilt, wenn . Für wenden wir Lemma 2.3-5 an. ////<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

202


2.3.2 (c) rein multiplikative Schemata<br />

in der Praxis finden meist Schemata aus Definition 2.3-1 mit<br />

, also rein multiplikative Schemata, Verwendung<br />

ist hier natürlich verboten!<br />

die maximale Periode ist hier (s.u.)<br />

in R: functionseed, , , <br />

Hierzu gilt:<br />

Theorem 2.3-7:<br />

Sei , . Dann ist die maximale Periode <strong>und</strong><br />

wird genau dann erreicht, wenn oder <strong>und</strong> <br />

ungerade.<br />

Beweis:<br />

<br />

in Ripley (1987) ////<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

203


Theorem 2.3-8:<br />

Die maximale Periode kann nur erreicht werden, wenn prim<br />

ist; dann teilt die Periode <strong>und</strong> ist genau dann, wenn <br />

primitive –te Einheitswurzel ist, i.e. , <br />

<strong>für</strong> jeden Primfaktor von <strong>und</strong> die kleinste Potenz, <strong>für</strong><br />

die .<br />

Beweis:<br />

schnelle Multiplikation durch Shift <strong>und</strong> Add<br />

Generator RANDU mit <br />

<br />

<br />

<br />

<br />

in Ripley (1987) ////<br />

Bemerkung 2.3-9:<br />

die hintersten Bits von sind nicht sehr zufällig!<br />

Sei dazu . Dann benimmt sich das letzte Byte<br />

stets wie modulo , also mit maximaler Periode ....<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

204


Schreibt man diese Rekursion aus, so erhält man<br />

<br />

£ <br />

(2.3.7)<br />

(2.3.8)<br />

(2.3.9)<br />

also die Tripel<br />

liegen auf 15 parallelen Hyperebenen<br />

durch den Einheitswürfel....<br />

2.3.2 (d) “Exor-Shift-Schema” <strong>für</strong> bits<br />

Definition 2.3-10:<br />

Für kleiner als die Wortlänge <strong>und</strong> Initialisierungswerte <br />

sei<br />

(2.3.10)<br />

´<br />

in R: , <br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

205


2.3.2 (e) Kombinationen mehrerer Techniken<br />

Durch Verknüpfung mehrerer Generatoren kommt man in natürlicher<br />

Weise auf lineare Differenzengleichungen<br />

Definition 2.3-11:<br />

Für definiert man “Zufallszahlen”<br />

als<br />

<br />

Periode <strong>für</strong> die meisten Initialisierungen: ¢ <br />

<br />

<br />

<br />

<br />

(2.3.11)<br />

Erzeugung von Zufallsbits Shift–Register Generatoren<br />

maximale Periode <strong>für</strong> : <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

206


2.3.2 (f) in R implementierte Zufallszahlengeneratoren (RNG’s)<br />

Wichmann-Hill<br />

– basiert auf: Vorschlag von Wichmann <strong>und</strong> Hill<br />

– Periode: <br />

– Referenz: Wichmann and Hill (1982)<br />

Marsaglia-Multicarry<br />

– basiert auf: Vorschlag von Marsaglia<br />

– Technik: Multiplizieren mit Übertrag (vgl. zweite<br />

Bemerkung 2.3-9)<br />

– Periode: ; laut Marsaglia: alle Tests bestanden<br />

– Referenz: Marsaglia and Zanan (1994)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

207


Super-Duper<br />

– basiert auf: Vorschlag von Marsaglia aus den 70ern<br />

– Technik: Kombination von “Exor-Shift-Schema” <strong>und</strong><br />

rein–multiplikativem Schema<br />

– versagt beim MTUPLE test der “ Diehard battery ”<br />

– Periode: £ <br />

– Referenz: Marsaglia (1997)<br />

Mersenne-Twister<br />

– basiert auf: Vorschlag von Matsumoto <strong>und</strong> Nishimura<br />

– zur Zeit default<br />

– Periode: <br />

– Referenz: Matsumoto and Nishimura (1998)<br />

Knuth-TAOCP<br />

<br />

– basiert auf: Vorschlag von Knuth<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

208


– Technik: Fibonacci–Folge mit Differenz, i.e.<br />

– Periode: <br />

– Referenz: Knuth (1998)<br />

Knuth-TAOCP-2002<br />

Ripley (1987)<br />

<br />

<br />

– wie Knuth-TAOCP nur mit anderen Seeds<br />

2.3.2 (g) generelle Literatur<br />

Hammersley and Handscomb (1964)<br />

Knuth (1998)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

209


2.3.3 Qualitätskontrolle <strong>für</strong> Pseudozufallszahlen<br />

2.3.3 (a) Tests auf “Zufälligkeit”<br />

im Prinzip jeder Test geeignet, besonders aber<br />

Korrelationstest: sind Teilstichproben unkorreliert,<br />

vgl. Abschnitt 5.1.13 [ auch: Spektraltest!]<br />

–Anpassungstest, vgl. Abschnitt 5.1.11<br />

werden alle Intervalle der gleichen Länge gleich häufig belegt?<br />

werden nach Standardisierung auf alle<br />

Teil–(Hyper–)würfel des Einheitsquaders gleich häufig belegt?<br />

Kolmogoroff–Smirnoff–Test, vgl. Abschnitt 5.1.10<br />

Gap–Test:<br />

– erst Standardisierung auf <br />

<br />

– wähle .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

210


– betrachte Länge der Folgen so dass<br />

keines der Folgeglieder in liegt; diese Längen sind zu<br />

vergleichen mit der entsprechenden Verteilung der Längen<br />

unter dem Modell<br />

Pokertest<br />

– erst Standardisierung auf <br />

– partitioniere in fünf Teilintervalle.<br />

– betrachte die Verteilung, dass jeweils fünf<br />

aufeinanderfolgende Zufallszahlen in verschiedene<br />

Teilintervalle fallen.<br />

– die Fenster sollen sich dabei nicht überlappen!<br />

– diese empirische Verteilung ist zu vergleichen mit der<br />

entsprechenden Verteilung unter dem Modell<br />

Coupon–Collector–Test:<br />

bestimme <strong>für</strong> bis Periode , wie lange man warten muss,<br />

bis jede Zahl bis einmal vorgekommen ist; diese Wartezeiten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

211


sind zu vergleichen mit der entsprechenden Verteilung unter dem<br />

Modell<br />

Run–Test<br />

zähle die Längen monoton steigender Teilstücke <strong>und</strong> vergleiche<br />

die Verteilung mit der entsprechenden Verteilung unter dem<br />

Modell<br />

Maximum–Test:<br />

– erst Standardisierung auf <br />

– bilde nichtüberlappende Gruppen der Länge <br />

– Betrachte die Verteilung von<br />

<br />

– Diese empirische Verteilung ist zu vergleichen mit der<br />

entsprechenden Verteilung unter dem Modell<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

212


2.3.3 (b) Wie zufällig müssen (simulierte) ZV’s sein?<br />

je nach Zweck unter Umständen gar nicht “”–Variablen<br />

nötig: MC–Integration<br />

zum Erzeugen “plausibler” Werte auch andere Techniken möglich<br />

2.3.4 Schritt 2: Anamorphose<br />

— Wandlung in “beliebige” Verteilungen<br />

2.3.4 (a) Wandlung in <br />

erst Casten in float/numeric<br />

dann durch teilen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

213


2.3.4 (b) Quantilsfunktion<br />

Vorbereitung:<br />

– betrachte die Pseudoinverse einer reellwertigen Zufallsvariable<br />

(2.3.12)<br />

– Es gilt die Gleichheit der beiden Mengen <strong>für</strong> jedes :<br />

<br />

– Daher gilt <strong>für</strong> <br />

<br />

also <br />

also <br />

Beispiele:<br />

– <br />

– <br />

<br />

,<br />

<strong>und</strong> da wenden wir <br />

auf die ufo–Variablen an<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

214


– : simuliere u.i.v. –Variablen <strong>und</strong><br />

bilde <br />

<br />

2.3.4 (c) Rejection Sampling<br />

Situation: , Lebesgue–Dichten von W-Maßen.<br />

: <strong>für</strong> alle <br />

die Erzeugung von Zufallszahlen gemäß ist<br />

leicht zu realisieren<br />

Algorithmus 2.3-12 [Rejection Sampling]:<br />

(1) Generiere .<br />

(2) Generiere .<br />

(3) Falls , setze sonst gehe zu (1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

215


Theorem 2.3-13:<br />

(i) .<br />

(ii) Die Ws., ein anzunehmen, ist .<br />

(iii) Die Zahl der Versuche, bis ein anzunehmen ist, ist gemäß<br />

verteilt; insbesondere gilt<br />

Beweis:<br />

<br />

<br />

(2.3.13)<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

216


Für den Zähler gilt<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<strong>und</strong> analog <strong>für</strong> den Nenner<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<strong>und</strong> so , also (i).<br />

“Annahme von ” <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

, der Rest ist klar. ////<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

217


Beispiel: Simulation von –verteilten Größen<br />

<br />

– Situation: recht groß Simulation als Summe von <br />

unabhängigen –Variablen zu “teuer”<br />

– Dichte von :<br />

<br />

– Idee: , also <br />

– man erhält als optimales<br />

, d.h. <br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

218


2.3.4 (d) Ausnutzung der Definition / ZGWS<br />

: als Verteilung von <strong>für</strong> <br />

–Verteilung: Summe der Quadrate von u.i.v. –Variablen<br />

–Verteilung:<br />

<br />

im wesentlichen als Quotient zweier entsprechender –Verteilungen<br />

–Verteilung:<br />

im wesentlichen als Quotient einer – <strong>und</strong> einer entspr. –Verteilung<br />

früher (schlecht!): <br />

– als Verteilung der Summe von unabhängigen Variablen<br />

– erste beide Momente passen Hoffnung auf ZGWS?<br />

multivariate Normalverteilung ¦<br />

– zuerst jeweils “unabhängige” –Variablen als einen<br />

–verteilten Vektor auffassen<br />

– ¦ als Verteilung von , wobei beliebig mit ¦,<br />

z.B. “Choleski-Hälfe”<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

219


2.3.4 (e) Box–Muller <strong>für</strong> Normalverteilung<br />

betrachte <strong>für</strong> im wesentlichen in<br />

Polarkoordinaten, i.e.<br />

<br />

(2.3.14)<br />

wegen der Rotationsinvarianz von unter ist<br />

gleichverteilt auf allen Winkeln<br />

, also <br />

dies liefert:<br />

Algorithmus 2.3-14 [Box–Muller]:<br />

(1) Generiere <br />

.<br />

(2) <br />

(3) <br />

(4) £ £ <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

220


2.3.4 (f) Wartezeiten bei Poissonvariablen<br />

Ziel: –verteilte Zufallsvariablen<br />

nutze aus:<br />

Theorem 2.3-15:<br />

<br />

Seien , . Dann ist der Prozess<br />

, ein Poissonprozess mit konstanter<br />

Intensität .<br />

Beweis:<br />

Georgii (2002), Satz 3.33 ////<br />

Definiere . Dieses ist nach<br />

Theorem 2.3-15 –verteilt<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

221


dies ergibt<br />

Algorithmus 2.3-16:<br />

(0) ; ;<br />

(1) Generiere .<br />

(2) ; ;<br />

(3) falls gehe zu (1) sonst<br />

(4) <br />

Algorithmus 2.3-16 ist gut <strong>für</strong> klein<br />

<strong>für</strong> groß besser geeignete Quantilstransformation<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

222


Achtung: bei Verwendung der Exp-Verteilung deren<br />

Gedächtnislosigkeit berücksichtigen;<br />

Genauer gilt <strong>für</strong> <strong>und</strong> —<br />

(<strong>und</strong> unter stetigen Verteilungen nur <strong>für</strong> ):<br />

(2.3.15)<br />

der Parameter mittlere Zahl an Ereignissen in vorgegebener<br />

Zeit<br />

2.3.4 (g) Wartezeiten bei Poissonvariablen <strong>und</strong> nicht-konstanter<br />

Intensität<br />

gegeben: zeitvariable Intensitätsfunktion , :<br />

Übergang zur Stammfunktion £ <br />

<br />

<br />

£ isoton — in R:<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

223


}<br />

stammfunktion f u n c t i o n ( fun , T0=0,T1 , n r g i t t e r =1000){#<br />

x seq (T0 , T1 , l e n g t h=n r g i t t e r )<br />

Lf f u n c t i o n ( t ){# b e r e c h n e t g ( t ) an d e r S t e l l e t<br />

r e t u r n ( i n t e g r a t e ( fun , T0 , t , r e l . t o l =10^ 8)$ v a l u e ) }<br />

y s a p p l y ( x , Lf )<br />

r e t u r n ( s p l i n e f u n ( x , y ) )<br />

}<br />

Bildung der Pseudoinversen £ £ —<br />

in R:<br />

i n v e r t i e r e f u n c t i o n ( fun , T0=0,T1 , n r g i t t e r =1000){#<br />

x seq (T0 , T1 , l e n g t h=n r g i t t e r )<br />

y fun ( x )<br />

r e t u r n ( s p l i n e f u n ( y , x ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

224


um also £ im (-)Bereich ; ( ein<br />

Werktag) zur gegebenen R-Funktion lambda zu bekommen, geht<br />

man nun so vor:<br />

Lbd1 invertiere (stammfunktion(lambda,T0=t0,T1=t1),T0=t0,T1=t1)<br />

Tatsache: folgende Vorgehensweise liefert Wartezeiten zur<br />

gegebenen Intensitätsfunktion lambda<br />

# 1 # Z i e h e N (N g r o s s ) Exp(1) V a r i a b l e n :<br />

# roh Z w i s c h e n a n k u n f t s z e i t e n<br />

Ex1 rexp (N)<br />

# 2 # gehe über zu k u m u l a t i v e n Summen :<br />

# roh A n k u n f t s z e i t e n<br />

CEx1 cumsum( Ex1 )<br />

# 3 # T r a n s f o r m a t i o n mit Lambda^<br />

# A n k u n f t s z e i t e n<br />

A n k u n f t s z e i t e n Lbd1 ( CEx1 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

225


Schritte bei empirischer Bestimmung von :<br />

Erstellung / Erhebung einer Stichprobe von Ankunftszeiten hier:<br />

Ankunft<br />

Aufgabe: Rekonstruktion von aus diesen Daten<br />

erst: Ermittlung der Wartezeiten <strong>und</strong> der empirischen Raten:<br />

### Umrechnung von W a r t e z e i t e n i n e m p i r i s c h e Raten<br />

##W a r t e z e i t e n<br />

WZ=d i f f ( Ankunft )<br />

WZs=as . numeric ( f l o o r (WZ£60£24£ 6 0 ) )<br />

## W a r t e z e i t 0 v e r h i n d e r n<br />

WZs[WZ==0]= r u n i f (WZs==0)<br />

r a t e =1/WZs<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

226


dann: Glättung<br />

## s t a r k e G l ä t t u n g ( s p a r nahe b e i 1)<br />

e r g smooth . s p l i n e ( x=Ankunft , y=r a t e , s p a r =0.9 ,<br />

p l o t ( erg , t y p e="b" )<br />

##G l ä t t u n g s f u n k t i o n<br />

a l l . k n o t s=TRUE)<br />

s f s p l i n e f u n ( e r g $x , e r g $y )<br />

##i n t e r e s s i e r e n d e r Z e i t b e r e i c h ( i n "Tagen ")<br />

x seq (8 £ 60 ,18 £ 60 , l e n g t h =200)<br />

x t t i m e s ( seq (8 / 24 ,18 / 24 , l e n g t h =200))<br />

s f y s f ( x ) ; s f y s f y £ ( s f y >0)<br />

p l o t ( xt , s f y , t y p e=" l " )<br />

p o i n t s ( Ankunft , 0 £ Ankunft , pch="£" )<br />

p o i n t s ( Ankunft , r a t e , pch="+" )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

227


2.4 Univariate, num. Kenngrößen<br />

2.4.1 die empirische Verteilung<br />

2.4.1 (a) Definition<br />

Situation: haben reale / simulierte Daten aus “unbekannter”<br />

Verteilung<br />

relevante Information bereits in empirischer Verteilung<br />

definiert als<br />

2.4.1 (b) Umsetzung in R<br />

aus Bibliothek stepfun<br />

Funktion ecdf<br />

<br />

<br />

<br />

siehe auch Abschnitt 2.5.2<br />

empirische Quantile mit quantile<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

228


2.4.2 Zusammefassungen<br />

2.4.2 (a) der Befehl summary<br />

gibt Mittelwert, Quartile <strong>und</strong> die Zahl der Missings (falls<br />

vorhanden) aus<br />

2.4.2 (b) Fivenum<br />

definiert als Vektor aus Minimum, unterem Quartil, Median,<br />

oberem Quartil <strong>und</strong> Maximum<br />

in R als quantile (x) — per default falls kein Quantil–Argument<br />

2.4.2 (c) Stem and Leaf<br />

“Text–Version” eines Histogramms (c.f. Abschnitt 2.5.1)<br />

Daten in Zeilen nach führenden Ziffern aufgeteilt<br />

<br />

in R als stem(x)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

229


2.4.3 Lokationsmaße<br />

Problem: “Wo liegen die Daten / ihr ‘Schwerpunkt’ ?”<br />

klassische Lösung: Mittelwert — in R mean<br />

robuste Lösung: Median — in R median<br />

<strong>für</strong> kategorielle Merkmale: Modus — in R<br />

((1: max(x))[rev(order(tabulate(x )))])[1]<br />

2.4.4 Streuungs–/Dispersionsmaße<br />

Problem: “Wie stark variieren die Daten?”<br />

klassische Lösung: Varianz <strong>und</strong> Standardabweichung — in R var<br />

<strong>und</strong> sd<br />

robuste Lösung: MAD <strong>und</strong> IQR — in R mad <strong>und</strong> IQR<br />

extreme Lösung: die Spannweite — in R max(x) min(x)<br />

<br />

<strong>für</strong> kategorielle Merkmale: Shannon–Entropie<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

230


2.4.5 Symmetrie / Krümmung<br />

Problem: “Sind die Daten schiefverteilt / steiler als die N.V.?”<br />

Schiefe-Parameter: “Skewness” — in R<br />

mean((x mean(x))^3)/sd(x)^3<br />

Exzess/Kurtosis — in R mean((x mean(x))^4)/sd(x)^4<br />

2.4.6 Zusammenhangsmaße<br />

Problem: “Hängt die Annahme von Wert durch mit der<br />

Annahme von Wert durch zusammen?”<br />

klassisch: Korrelationskoeffizient — in R cor<br />

<strong>für</strong> ordinale Merkmale: Rangkorrelationen von Spearman <strong>und</strong><br />

Kendall — in R in der Bibliothek c. test als Listenelement im<br />

Ergebnis von cor. test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

231


2.4.7 getrimmte <strong>und</strong> winsorisierte Varianten<br />

oft zur Robustifizierung klassischer Statistiken verwendet<br />

anstelle des vollen Datensatzes Berechnung nur auf den<br />

“zentralen Werten”<br />

getrimmte Größen: Berechnung auf Basis der entsprechend<br />

verkleinerten Stichprobe — in R durch Übergabe des Parameters<br />

trim<br />

winsorisierte Größen: Werte größer als der p% –größte Wert<br />

werden (intern) auf diesen gesetzt (entsprechend bei kleinen<br />

Werten)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

232


Beispieldatensatz: xc (100,1,4,3,3,2, 30,3,1,0)<br />

<br />

– Mittelwert mean(x) ergibt <br />

– -getrimmter Mittelwert mean(x,trim=0.1) ergibt —<br />

durch Anwendung auf <br />

– -winsorisierter Mittelwert<br />

x1sort(x);mean(x1[2:9],x1 [2], x1 [9]) ergibt <br />

— durch Anwendung auf <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

233


2.5 graphische univariate Analyse<br />

Beispiel: der Datensatz faithful aus der Bibliothek MASS<br />

2.5.1 Histogramm<br />

R–Beispiel 2.5-1 [Wartezeiten des Old Faithful]:<br />

Frequency<br />

0 10 20 30 40 50<br />

<br />

Histogram of faithful$waiting<br />

40 50 60 70 80 90 100<br />

faithful$waiting<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

234


Umsetzung in R: hist<br />

Parameter:<br />

– Klassenzahl nclass — (sollte sein)<br />

– freq (logisch): relative oder absolute Häufigkeiten<br />

– col: Nummer der Farbe; per default NULL, dann keine<br />

Füllung<br />

2.5.2 empirische Verteilungsfunktion<br />

<br />

Fn(x)<br />

0.0 0.2 0.4 0.6 0.8 1.0<br />

ecdf(faithful$waiting)<br />

40 50 60 70 80 90 100<br />

x<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

235


c.f. Abschnitt 2.4.1<br />

Umsetzung in R:<br />

<br />

l i b r a r y ( s t e p f u n )<br />

p l o t ( e c d f ( f a i t h f u l $ w a i t i n g ) , do . p o i n t s=F ,<br />

v e r t i c a l s=T)<br />

2.5.3 Boxplots<br />

50 100 150 200<br />

Warte.id Warte.c<br />

●<br />

●<br />

●<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

236


hier: links Originalwartezeiten, rechts um Ausreißer<br />

erweitert<br />

plottet eine Box zwischen unterem <strong>und</strong> oberem Quartil mit einer<br />

Kerbe am Median<br />

Striche bis zu den äußersten Beobachtungen innerhalb<br />

¦ <br />

Beobachtungen außerhalb der Striche als Kringel Ausreißer<br />

Umsetzung in R: boxplot<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

237


2.5.4 Visualisierung diskreter Zufallsvariablen<br />

Ziel: Visualisierung der einzelnen Realisationen einer diskreten<br />

Zufallsvariable — zum Beispiel<br />

X


Visualisierung von Unabhängigkeit/Unkorreliertheit<br />

Beispiel:<br />

<br />

X sample ( 1 : 6 , s i z e =500 , r e p l a c e=T)<br />

Y sample ( 1 : 6 , s i z e =500 , r e p l a c e=T)<br />

SX+Y<br />

M pmax (X, Y)<br />

p l o t ( j i t t e r ( S ) , j i t t e r (M) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

239


Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

240


2.6 ein ausgearbeitetes Beispiel<br />

# £ R £<br />

c.f. Venables and Ripley (1999), pp. 121–147 Link aufs File<br />

# S i t z u n g am 2 7 . 1 1 . 0 2<br />

# von V e n a b l e s / R i p l e y<br />

# Setzen e i n i g e r Optionen<br />

# <strong>und</strong> l a d e n d e r MASS l i b r a r y<br />

l i b r a r y (MASS)<br />

o p t i o n s ( width =65, d i g i t s =5, h e i g h t =9999)<br />

<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

241


# 2 . 1 S t a t i s t i k / S t o c h a s t i k<br />

x r t (250 , 9)<br />

# e r z e u g t 250 t_9 V a r i a b l e n<br />

qqnorm ( x ) ; q q l i n e ( x )<br />

# V e r g l e i c h mit d e r NV<br />

# 2 . 2 ZV’ s<br />

contam rnorm ( 100 , 0 ,<br />

# knapper geht ’ s n i c h t<br />

# contam~ [ . 9 5 N(0 ,1)+.05 N( 0 , 9 ) ]<br />

<br />

(1 + 2£ rbinom (100 , 1 , 0 . 0 5 ) ) )<br />

# Erzeugung von 100 V a r i a b l e n contam<br />

# 2 . 3 u n i v a r i a t e n u m e r i s c h e Kenngroessen <strong>und</strong><br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

242


# 2 . 4 g r a p h i s c h e u n i v a r i a t e A n a l y s e<br />

#<br />

#e i n i g e D a t e n s a e t z e l a d e n<br />

data ( g e y s e r )<br />

data ( chem )<br />

data ( abbey )<br />

h e l p ( g e y s e r )<br />

h e l p ( chem )<br />

h e l p ( abbey )<br />

#<br />

#P l o t t e n e i n i g e r Histogramme<br />

# mit u n t e r s c h i e d l i c h e r BW Wahl<br />

#<br />

<br />

par ( mfrow=c ( 2 , 2 ) )<br />

# 2 x 2 B i l d e r pro S e i t e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

243


#<br />

h i s t . s c o t t ( g e y s e r $ d u r a t i o n , x l a b=" d u r a t i o n " )<br />

h i s t . s c o t t ( chem )<br />

h i s t . FD( g e y s e r $ d u r a t i o n , x l a b=" d u r a t i o n " )<br />

h i s t . FD( chem )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

#<br />

# 1 B i l d pro S e i t e<br />

#w e i t e r e n Datensatz l a d e n<br />

#<br />

data ( s w i s s )<br />

h e l p ( s w i s s )<br />

s w i s s . f e r t i l i t y s w i s s [ , 1 ]<br />

stem ( s w i s s . f e r t i l i t y )<br />

<br />

#stem and l e a f p l o t<br />

stem ( chem )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

244


stem ( abbey )<br />

stem ( abbey , s c a l e =0.4) # d i f f e r e n t i n R<br />

par ( mfrow=c ( 1 , 2 ) )<br />

b o x p l o t ( chem , sub="chem" , range =0.5)<br />

b o x p l o t ( abbey , sub=" abbey " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

#<br />

# Robuste S t a t i s t i k e n<br />

s o r t ( chem )<br />

mean ( chem )<br />

median ( chem )<br />

<br />

mad( chem )<br />

u n l i s t ( huber ( chem ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

245


u n l i s t ( h u b e r s ( chem ) )<br />

s o r t ( abbey )<br />

mean ( abbey )<br />

median ( abbey )<br />

u n l i s t ( h u b e r s ( abbey ) )<br />

u n l i s t ( h u b e r s ( abbey , k =2))<br />

u n l i s t ( h u b e r s ( abbey , k =1))<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

246


2.7 Dichteschätzung<br />

Besitzt eine Verteilung eine Dichte, so kann man versuchen,<br />

diese zu schätzen.<br />

erster Ansatz: Histogramm<br />

<strong>für</strong> Gütekriterium MSE (mittlerer quadratischer Fehler)<br />

wesentlich bessere Verfahren möglich<br />

Zerlegung des Kriteriums:<br />

<br />

zusätzliche Säulen: Reduktion des Bias aber Erhöhung der<br />

Varianz Trade–off<br />

Literatur: Silverman (1986), Härdle, W. (1991a), Härdle et al.<br />

(1998),<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

247


2.7.1 Häufigkeitspolygon<br />

bereits besser, weil glatter: Mittelpunkte der Säulen durch<br />

Polygonzug verbinden<br />

in R: in Bibliothek MASS, Funktion frequency.polygon<br />

R–Beispiel 2.7-1 [Venables, Ripley (1999)]:<br />

<br />

l i b r a r y (MASS)<br />

data ( f a i t h f u l )<br />

a t t a c h ( f a i t h f u l )<br />

h i s t ( e r u p t i o n s )<br />

f r e q u e n c y . polygon ( e r u p t i o n s )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

248


2.7.2 ASH <strong>und</strong> WARP<br />

Histogramm <strong>und</strong> Häufigkeitspolygon hängen vom “Aufpunkt” ab<br />

mitteln über Aufpunkte: ASH (average shifted histogram)<br />

siehe auch session5.r<br />

Formel: <strong>für</strong> Häufigkeiten <br />

<br />

<br />

<br />

<br />

Spezialfall von: WARPing: Weighted Averaging of Ro<strong>und</strong>ed<br />

Points, Härdle, W. (1991b)<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

249


Density<br />

Density<br />

Histogramme zu Geysir Faithful mit versch. Aufpunkten <strong>und</strong> ASH<br />

0.0 0.1 0.2 0.3 0.4 0.5 0.6<br />

0.0 0.1 0.2 0.3 0.4 0.5 0.6<br />

<br />

Histogram of eruptions<br />

1 2 3 4 5 6<br />

eruptions<br />

Histogram of eruptions<br />

1 2 3 4 5 6<br />

eruptions<br />

Density<br />

Density<br />

0.0 0.1 0.2 0.3 0.4 0.5 0.6<br />

0.0 0.1 0.2 0.3 0.4 0.5 0.6<br />

Histogram of eruptions<br />

1 2 3 4 5 6<br />

eruptions<br />

Histogram of eruptions<br />

1 2 3 4 5 6<br />

eruptions<br />

Density<br />

averaged<br />

0.0 0.1 0.2 0.3 0.4 0.5 0.6<br />

0.0 0.1 0.2 0.3 0.4 0.5 0.6<br />

Histogram of eruptions<br />

1 2 3 4 5 6<br />

eruptions<br />

1 2 3 4 5 6<br />

eruptions<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

250


2.7.3 Kerndichteschätzung<br />

2.7.3 (a) Idee<br />

statt über Treppenfunktionen zu mitteln, bereits lokal glätten<br />

mit einem Glättungskern <strong>und</strong> Bandweite <br />

ist glatt<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Bandweite steuert Lokalität der Glättung, Säulenzahl bei<br />

Histogramm<br />

2.7.3 (b) Eigenschaften von :<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

251


am besten <strong>für</strong> alle <br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

252


2.7.3 (c) verschiedene Kerne<br />

Uniform <br />

Dreieck <br />

Epanechnikow <br />

Quartik <br />

<br />

Triweight <br />

<br />

Gauß <br />

<br />

Cosinus <br />

<br />

2.7.3 (d) Bandweitenwahl<br />

<br />

Kriterium: AMISE: approximate mean integrated squared error;<br />

Näherungsformel <strong>für</strong> <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

253


generell , AMISE bei glattem : <br />

Vergleich: Histogramm AMISE , im parametrischen<br />

Kontext (LLN) <br />

Verschiedene Möglichkeiten:<br />

<br />

– Rule of Thumb<br />

– Cross Validation bcv, ucv<br />

– asymptotische Entwicklung des MISE width.SJ<br />

– Plug–in –Verfahren<br />

– Literatur: Härdle et al. (1998), Abschnitt 3.2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

254


2.8 Anwendungen von Zufallszahlen<br />

2.8.1 Simulation<br />

Situationen<br />

<br />

– aus Sicht des Praktikers<br />

£ reale Datensätze zu klein<br />

£ Vergangenheitsdaten repräsentativ <strong>für</strong> Zukunft? z.B.<br />

Crash–Simulationen in Banken<br />

£ Verteilungsannahmen bei realen Daten fraglich<br />

£ Beispiel: Wechselkurs–Risiken einer Bank<br />

Man modelliert den Wechselkurs Dollar:Euro zu Zeitpunkt , , in<br />

etwa so:<br />

<br />

<br />

Dies macht man auch <strong>für</strong> weitere Währungen <strong>und</strong> in ähnlicher Form<br />

<strong>für</strong> den Zins. Um nun den Fremdwährungsbestand nach dem<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

255


Niederstwertprinzip in die Bilanz einzustellen, simuliert man viele<br />

verschiedene Szenarien, i.e. Wechselkursverläufe im nächsten Jahr,<br />

<strong>und</strong> setzt zum Beispiel das untere –Quantil an.<br />

– aus theoretischer Sicht<br />

£ oft: analytische/theoretische Form der Verteilung schwer /<br />

überhaupt nicht zugänglich<br />

£ oder: theoretische Form der Verteilung nur asymptotisch<br />

greifbar — wie gut ist die Näherung <strong>für</strong> finite<br />

Stichprobengröße?<br />

£ Beispiel zu ersterem:<br />

Wie wahrscheinlich nehme ich bei einer Realisation einer<br />

Irrfahrt der Länge mit Start in “” den Wert “”<br />

zweimal an, bevor ich den Wert “ ” annehme — wissend<br />

dass ich die “” überhaupt zweimal <strong>und</strong> die “ ” einmal<br />

erreiche?<br />

Antwort mithilfe R–Skript aus File “session6.r”: ca. <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

256


Ausweg<br />

£ Beispiel zu letzterem:<br />

Verteilung der Nullstelle von <br />

<strong>für</strong> <br />

<br />

<br />

<br />

– Pseudo–Daten mithilfe Pseudo–Zufallszahlen<br />

– mit Programmen wie R möglich: sehr viele Zufallszahlen sehr<br />

schnell erzeugbar<br />

– Zusammenspiel mit theoretischen Resultaten der Stochastik:<br />

£ Gesetze der großen Zahlen<br />

£ Zentrale Grenzwertsätze<br />

£ Glivenko–Cantelli<br />

– dadurch: mit hinreichend großer Zahl an<br />

Versuchswiederholungen im Prinzip (Achtung: nur<br />

Pseudo–Zufallszahlen) beliebige Genauigkeit der Aussagen<br />

erreichbar<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

257


2.8.2 Daten–Augmentation<br />

2.8.3 Integration<br />

– gesucht<br />

<br />

<br />

siehe gesonderter Abschnitt 2.9<br />

zentrales Problem in der Stochastik/Statistik<br />

— c.f. allgemeiner Integralbegriff, Erwartungswert, Varianz<br />

wichtige Anwendung auch in der Numerik / Lösung von<br />

Differentialgleichungen<br />

Problemstellung:<br />

– gegeben eine Funktion , ein Maß auf <strong>und</strong><br />

eine Menge <br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

258


– numerische Strategie:<br />

£ Approximation von durch Funktionen, deren Integral<br />

analytisch berechenbar (Polynome)<br />

£ dazu: Interpolation von durch Vorgabe von Stellen <br />

£ <strong>für</strong> niedrige Dimensionen kaum zu schlagen<br />

£ Problem: in hohen Dimensionen viel zu viele Stützstellen<br />

– stochastischer Ausweg:<br />

£ Ziehung der Stützstellen zufällig<br />

£ Schätzung des Integrals/Erwartungswertes durch<br />

Auswertung am empirischen Maß also durch das<br />

arithmetische Mittel<br />

£ Gesetze der großen Zahlen beliebig genau <strong>für</strong><br />

hinreichend große Zahl an Auswertungsstellen<br />

£ Paradigma: Die Genauigkeit wächst mit der Rate <br />

unabhängig von der Dimension !!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

259


Techniken zur stochastischen Integration<br />

— vgl. Ripley (1987), chapter 5<br />

generelles Problem: [wie oben] gesucht <br />

<br />

ein einfaches Beispielproblem:<br />

; gesucht <br />

<br />

<br />

<br />

“Brute–Force”: crude Monte Carlo<br />

– hier: , also<br />

<br />

<br />

<br />

<br />

mit<br />

– simuliere ZV’s gemäß <strong>und</strong> schätze durch<br />

<br />

– im Beispiel: Xrcauchy(n); p1mean((X>2))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

260


generell hilfreich: Symmetrie ausnutzen<br />

– falls , dann sollte man auch die<br />

negativen Realisationen nutzen<br />

– im Beispiel: p2mean((abs(X)>2))/2<br />

– hier: <br />

, also<br />

<br />

– im Beispiel: weiß, dass <br />

, <br />

<br />

Zrunif(n,min=0,max=2); p31/2 2£mean(g(Z))<br />

<br />

<br />

, also<br />

– hier: <br />

.<br />

oft hilfreich: Variablentransformation<br />

– im Beispiel: mit der Variablentransformation <br />

erhalten wir zufällig <br />

<br />

<br />

, <br />

Z1runif(n,min=0,max=1/2); p4mean(f(Z1))/2<br />

– hier: <br />

<br />

also .<br />

,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

261


Importance Sampling<br />

<br />

– Idee: Masse auf “interessanten” Bereich verschieben<br />

– Fakt:<br />

Seien <strong>und</strong> Maße auf mit Dichten , , so dass<br />

.<br />

Gesucht ; aber mit<br />

;<br />

<br />

daher ist schätzbar durch , <br />

<strong>und</strong> wird minimal genau dann, wenn .<br />

– im Beispiel ;<br />

dies ist Dichte der Variable Z22/runif(n);<br />

Antithetische Variablen<br />

– Idee: Ausnützen negativer Korrelationen<br />

– Fakten<br />

£ <br />

;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

262


negatives reduziert die Varianz!<br />

£ <br />

<br />

£ Damit sind dann aber auch die nach verteilten Variablen<br />

, negativ korreliert<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

263


Kontroll/Regressions–Variablen<br />

– oft können wir uns “billig” Kovariate verschaffen,<br />

die selbst viel der Variabilität der zu integrierenden Variable<br />

erklären<br />

– Genauer ist ein lineares Regressionsmodell in den Variablen<br />

einzupassen, nämlich mit <br />

<br />

– entsprechendes Modell <strong>für</strong> <br />

<br />

<br />

ergibt<br />

.<br />

<br />

<br />

<br />

– im Beispiel , also , ,<br />

<br />

<br />

<br />

<br />

– hier <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

264


2.8.4 globale Optimierung<br />

gesucht: globales Min[Max]imum einer Funktion <br />

Problem: unter mehreren lokalen Extrema das globale zu finden<br />

weitere mögliche Komplikationen:<br />

– Funktion nicht glatt genug <strong>für</strong> differenzielle Methoden,<br />

– Auswertung der Ableitung ist zu “teuer”<br />

Idee: “gleichberechtigte” Auswahl aller potenzieller<br />

Auswertungsstellen stochastische Auswahl<br />

auch Kombination aus globaler (stochastischer) Methode <strong>und</strong><br />

lokaler (numerischer) Methode möglich<br />

Dilemma: alle Bereiche abdecken Konzentration um die<br />

potenziellen Extrema<br />

raffinierte Techniken — hier nur als Schlagworte<br />

– Simulated Annealing<br />

– Sintflut Algorithmus<br />

– MCMC-Methoden / Gibbs–Sampling<br />

– genetische Algorithmen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

265


2.9 Resampling–Techniken<br />

2.9.1 Idee<br />

in realen Datenbeständen oft “zu wenig” Daten<br />

künstlich simulierte Daten würden ein Modell unterstellen, das<br />

aber ist nicht bekannt<br />

Kann man die Information, dass es sich um Daten handelt,<br />

nutzen, um mehr an Informationen aus der Stichprobe zu holen?<br />

JA: die Daten hätten ja genauso auch in einer anderen<br />

Reihenfolge eintreten können<br />

Resampling–Techniken<br />

erst relativ kurz bekannt, da i.a. sehr rechenaufwendig<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

266


2.9.2 Jack-Knife<br />

geht zurück auf Quénouille <strong>und</strong> Tukey<br />

Ziel: Biasreduktion<br />

Definition:<br />

– Seien <br />

– Dann: <br />

<br />

<br />

<br />

<br />

<br />

– Sei ein linearer Schätzer in in dem Sinn, dass<br />

mit einer (nicht notwendig linearen)<br />

<br />

Funktion <br />

– Sei <br />

<br />

<br />

– Sei £ ein Pseudo–Summand.<br />

£ heißt Jackknife–Schätzer zu <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

267


Eigenschaften:<br />

– Varianz:<br />

<br />

<br />

<br />

<br />

Name:<br />

Münchhausen — am eigenen Schopf aus dem Sumpf ziehen<br />

<br />

<br />

£ <br />

<br />

– Biasreduktion: Sei <br />

<br />

. Dann ist Konfidenzintervalle:<br />

biasfrei!<br />

<br />

– Heuristik (— nicht immer korrekt) <br />

<br />

<br />

– daher –Konfidenzintervall gegeben durch<br />

<br />

¦ <br />

<br />

2.9.3 Bootstrap<br />

Literatur: Efron and Tibshirani (1993) — inklusive R–code:<br />

Windows Linux<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

268


Idee:<br />

alle Wertekombinationen der Realisationen <br />

der<br />

Original–Stichprobe — mit Mehrfach–Replikationen<br />

— sind genauso wahrscheinlich wie das Original<br />

ergibt Möglichkeiten — viel zu viele schon <strong>für</strong> kleine <br />

Umsetzung:<br />

Ziehe aus den Realisationen der Original–Stichprobe <br />

mit Zurücklegen Stichproben <br />

der<br />

Länge (nicht notwendig )<br />

ein –Konfidenzintervall:<br />

, Auswertung des Schätzers an der<br />

Bootstrap–Stichprobe .<br />

Dann ist mit der -t-größten<br />

Realisation unter den , ein <br />

Konfidenzintervall.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

269


R–Beispiel 2.9-1 [Konfidenzintervall <strong>für</strong> den Median]:<br />

Situation: Wir haben eine Stichprobe <br />

einem unbekanntem .<br />

Ziel: Wir wollen den Median von schätzen.<br />

aber: , bzw. nicht bekannt.<br />

<br />

<br />

mit<br />

Methode: Schätzung durch den Stichprobenmedian —<br />

median(X)<br />

Problem: Wie genau ist die Schätzung?<br />

asymptotische Theorie: Mit der Dichte von ausgewertet<br />

im Median von gilt <strong>für</strong> <br />

w <br />

<br />

<br />

Beispiel–Datensatz: Eruptionen des Old Faithful, mit Median <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

270


Lösung 1: Dichteschätzung<br />

l i b r a r y (MASS)<br />

data ( f a i t h f u l )<br />

a t t a c h ( f a i t h f u l )<br />

d e n s i t y ( e r u p t i o n s , n=1, from =4, to =4.01 ,<br />

width =0.41) $y<br />

d e n s i t y ( e r u p t i o n s , n=1, from =4, to =4.01 ,<br />

width =0.63) $y<br />

#Schaetzung d e r Streuung des Medians<br />

#durch Dichte Schaetzung<br />

#f (m) ~ 0.415<br />

1/ (2 £ s q r t ( l e n g t h ( e r u p t i o n s ) ) £ 0 . 4 1 5 )<br />

Lösung 2: Bootstrap<br />

#Schaetzung d e r Streuung des Medians<br />

<br />

#durch 1000 Bootstrap S t i c h p r o b e n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

271


#<br />

s e t . s e e d ( 1 0 1 ) ;m 1000<br />

# z u r R e p r o d u z i e r b a r k e i t<br />

r e s numeric (m)<br />

f o r ( i i n 1 :m)<br />

#B i a s :<br />

r e s [ i ] median (<br />

sample ( e r u p t i o n s , r e p l a c e=T) )<br />

mean ( r e s median ( e r u p t i o n s ) )<br />

#V a r i a n z :<br />

s q r t ( v a r ( r e s ) )<br />

Die Bootstrap–Verteilung ist nicht normal:<br />

h i s t . FD( r e s , prob=T)<br />

l i n e s ( d e n s i t y ( r e s , n=200 , width=<br />

<br />

bandwidth . nrd ( r e s ) ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

272


#Bandweitenwahl<br />

c ( ucv ( r e s ) , bcv ( r e s ) )<br />

width . SJ ( r e s )<br />

# 95% Bootstrap K o n f i d e n z i n t e r v a l l<br />

q u a n t i l e ( r e s , c ( 0 . 0 2 5 , 0 . 9 7 5 ) )<br />

<br />

Histogramm zum ge–bootstrap–ten Median der Eruptionen des<br />

Geysirs Faithful<br />

Density<br />

0 2 4 6 8 10<br />

Histogram of x<br />

3.7 3.8 3.9 4.0 4.1 4.2<br />

res<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

273


2.9.4 Bagging <strong>und</strong> Boosting<br />

verfeinerte Versionen des Bootstrap (Methoden zur<br />

Klassifikation <strong>und</strong> Regression)<br />

Situation: Daten , wobei (p<br />

groß!!) <strong>und</strong> <br />

allgemeine Vorgehensweise: Gewichtung der Daten, Ziehen von<br />

Bootstrap-Stichproben (i.d.R. Ziehen mit Zurücklegen),<br />

Bestimmung der Schätzer, Aggregation der Schätzer, d.h.<br />

Berechnung eines gewichteten Mittels über die Schätzer<br />

Varianten: Bagging (Bootstrap aggregating), Subagging,<br />

Boosting, AdaBoost, -Boosting, Bag-Boosting, ....<br />

Bagging <strong>und</strong> Boosting Verfahren reduzieren Bias <strong>und</strong> Varianz,<br />

d.h. erhöhen die Schätzgenauigkeit<br />

<br />

Literatur <strong>und</strong> genauere Informationen unter: www.boosting.org<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

274


3 Programmierung<br />

Quellen: Neben Venables and Ripley (1999), Chapter 4 auch<br />

R Language Definition<br />

3.1 Kontrollstrukturen<br />

3.1.1 Gruppierung von Befehlen: Blöcke<br />

verschiedene Anweisungen in einer Zeile können durch “;”<br />

gruppiert werden<br />

eine Folge von Anweisungen wird durch Klammerung<br />

mit“{}” zu einem (Anweisungs–)Block<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

275


3.1.2 Bedingte Ausführung von Blöcken<br />

3.1.2 (a) if – Befehl<br />

Syntax<br />

if ()<br />

<br />

else<br />

<br />

der Teil ab “ else” kann weggelassen werden<br />

in der Bedingung kann ein beliebiger (skalarwertiger) logischer<br />

Ausdruck stehen (siehe Abschnitt 1.4.5)<br />

<br />

R–Beispiel 3.1-1 [Test auf Symmetrie einer Matrix ]:<br />

#e x a k t<br />

i f ( a l l . e q u a l (X, t (X ) ) )<br />

<br />

cat ( " Matrix ␣ symmetrisch " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

276


#ohne<br />

<br />

#nahezu b i s a u f eps<br />

i f ( a l l . e q u a l . numeric (X, t (X ) ) )<br />

cat ( " Matrix ␣ nahezu ␣ symmetrisch " )<br />

beachte Verwendung von all .equal, all .equal.numeric, um bei<br />

vielen Vergleichen nur einen logischen Wert zurückzubekommen<br />

3.1.2 (b) Unterscheide: ifelse – Befehl<br />

Syntax ifelse (,true.value,false.value)<br />

auch vektorwertig möglich!<br />

R–Beispiel 3.1-2 [ ]:<br />

#mit Warnung<br />

x . l o g x i f e l s e ( x ==0,0, x£ l o g ( abs ( x ) ) )<br />

x . l o g x x £ l o g ( abs ( x )+( x==0))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

277


in solchen Situationen oft noch besser: Indikatorfunktionen,<br />

c.f. Abschnitt 3.2.3<br />

3.1.2 (c) switch – Befehl<br />

zur Vermeidung vieler paralleler if–Alternativen<br />

Syntax switch (,)<br />

Ist der Wert von eine ganze Zahl zwischen <br />

<strong>und</strong> length(), wird Anweisung(sblock)<br />

Nummer ausgeführt, sonst Rückgabe von NULL<br />

Ist der Wert von ein String, so wird das<br />

Listenelement mit Namen ausgeführt, sonst Rückgabe<br />

von NULL<br />

Verwendung einer Default–Anweisung durch Einschluss einer<br />

Alternative ohne Namen am Ende der Liste<br />

<br />

Abkürzungen der Namen mit pmatch<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

278


R–Beispiel 3.1-3 [verschiedene Tests]:<br />

<br />

# i n t e s t s t e h e d e r Name des<br />

# auszuwertenden Tests ,<br />

# i n y d i e Daten<br />

#<br />

# ( genauer geht e s um T e s t s a u f<br />

# V a r i a n z g l e i c h h e i t ; a l s<br />

# A l t e r n a t i v e n s t e h e n<br />

# Levene , Cochran <strong>und</strong> B a r t l e t t<br />

# z u r Auswahl )<br />

#<br />

##########################<br />

# b r u t a l<br />

r e s u l t i f ( t e s t==" Levene " ) l e v e n e ( y , f )<br />

e l s e<br />

i f ( t e s t==" Cochran " ) cochran ( y , f )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

279


# s w i t c h 1<br />

#<br />

# s w i t c h 3 :<br />

e l s e b a r t l e t t ( y , f )<br />

r e s u l t s w i t c h ( t e s t , " Levene "=l e v e n e ( y , f )<br />

# s w i t c h 2<br />

" Cochran "=cochran ( y , f ) ,<br />

b a r t l e t t ( y , f ) )<br />

# mit mehreren S c h r e i b w e i s e n f u e r e i n e<br />

# A l t e r n a t i v e<br />

r e s u l t s w i t c h ( t e s t , Levene =, l e v e n e =,<br />

" Levene ’ s ␣ t e s t "=l e v e n e ( y , f ) ,<br />

Cochran =, cochran =,<br />

" Cochran ’ s ␣ t e s t "=cochran ( y , f ) ,<br />

B a r t l e t t =, b a r t l e t t =,<br />

" B a r t l e t t ’ s ␣ t e s t "=, b a r t l e t t ( y , f ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

280


# mit Abkuerzungen<br />

r e s u l t s w i t c h ( pmatch ( t e s t , c ( " Levene " ,<br />

3.1.3 Schleifen<br />

3.1.3 (a) for – Befehl<br />

" l e v e n e " , " Cochran " , " cochran " ,<br />

" B a r t l e t t=" , " b a r t l e t t " , nomatch="" ) ,<br />

"1"=,"2"=l e v e n e ( y , f ) ,<br />

"3"=,"4"=cochran ( y , f ) ,<br />

b a r t l e t t ( y , f ) )<br />

Syntax for (in )<br />

<br />

die Schleifenvariable ( durchläuft mit den<br />

Schleifendurchgängen die Zahlenfolge —<br />

meist dargestellt als : oder seq(along=X)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

281


3.1.3 (b) Sprünge: break <strong>und</strong> next<br />

mit break kann jederzeit die aktuelle Schleife verlassen werden<br />

mit next springt man an den Beginn des nächsten<br />

Schleifendurchlaufs<br />

3.1.3 (c) while – Befehl<br />

Syntax while () <br />

in der Bedingung kann ein beliebiger (skalarwertiger) logischer<br />

Ausdruck stehen (siehe Abschnitt 1.4.5)<br />

3.1.3 (d) repeat – Befehl<br />

Syntax repeat <br />

Ausstieg nur mit “break”<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

282


3.1.3 (e) Beispiel<br />

R–Beispiel 3.1-4 [Schleifen]:<br />

# Ausdruck 1 : 1 0<br />

### FOR<br />

f o r ( i i n 1 : 1 0 ) p r i n t ( p a s t e ( " Zahl ␣Nr . ␣" , i ) )<br />

### WHILE<br />

i 0<br />

w h i l e ( i 10) break<br />

}<br />

e l s e p r i n t ( p a s t e ( " Zahl ␣Nr . ␣" , i ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

283


3.2 Vermeidung von for-Schleifen<br />

3.2.1 Schleifen sind langsam!<br />

3.2.1 (a) S — eine Interpreter–Sprache<br />

Im Gegensatz zu Programmiersprachen wie FORTRAN, PASCAL, C <strong>und</strong><br />

C++ wird ein Programm vor dem Start nicht compiliert, sondern zur<br />

Laufzeit interpretiert.<br />

Das hat zur Folge, dass der Anweisungsblock in einer Schleife immer<br />

wieder neu übersetzt wird, was sich stark in der Laufzeit bemerkbar<br />

macht.<br />

3.2.1 (b) Paradigma: matrixorientierte Programmierung<br />

Verwendet man aber die vektorwertigen Funktionen aus R, so greifen<br />

diese auf Indexoperationen zurück, die “ganz unten”, maschinennah<br />

implementiert sind. Als Nachteil ergibt sich unter Umständen ein<br />

enormer Speicherbedarf.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

284


3.2.2 ein Beispiel: Blatt 5 Aufgabe 1<br />

Link aufs File<br />

#############################################<br />

# B l a t t 5 Aufgabe 1 v e k t o r w e r t i g<br />

#############################################<br />

# F o r m u l i e r u n g mit f o r<br />

#<br />

l u e c k e . f o r f u n c t i o n ( n )<br />

{X . x r u n i f ( n )<br />

X . y r u n i f ( n )<br />

d 2<br />

# zum V e r g l e i c h t r e t e n nur d i e Z e i l e n<br />

<br />

# 1 : n 1 an<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

285


f o r ( i i n 1 : ( n 1))<br />

#<br />

<br />

{ # zum V e r g l e i c h t r e t e n nur E i n t r a e g e<br />

# mit I n d e x >i an<br />

f o r ( j i n ( i +1): n )<br />

}<br />

{d0 (X . x [ i ] X . x [ j ])^2+<br />

}<br />

(X . y [ i ] X . y [ j ])^2<br />

d c ( d , s q r t ( d0 ) )<br />

r e t u r n ( min ( d ) )<br />

}<br />

# v e k t o r w e r t i g e F o r m u l i e r u n g<br />

l u e c k e . vec f u n c t i o n ( n )<br />

{#e r s t d i e x K o o r d i n a t e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

286


X . x r u n i f ( n )<br />

#e r z e u g e e i n e Matrix mit i d e n t i s c h e n S p a l t e n<br />

X . xx1 X . x%o%(0£X . x+1)<br />

# M a t r t i x mit i d e n t i s c h e n Z e i l e n<br />

X . xx2 t (X . xx1 )<br />

# Matrix mit E i n t r a e g e n (X_i X_j )^2_{ i , j }<br />

X . xd (X . xx1 X . xx2 )^2<br />

# D i a g o n a l e aus Minimumbildung a u s s c h l i e s s e n<br />

X . xd [ row (X . xd)==c o l (X . xd ) ] 2<br />

#P l a t z machen<br />

rm(X . xx1 , X . xx2 )<br />

<br />

#das g l e i c h e f u e r d i e y K o o r d i n a t e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

287


X . y r u n i f ( n )<br />

X . yy1 X . y%o%(0£X . y+1)<br />

X . yy2 t (X . yy1 )<br />

X . yd (X . yy1 X . yy2 )^2<br />

X . yd [ row (X . yd)==c o l (X . yd ) ] 2<br />

rm(X . yy1 , X . yy2 ) #P l a t z machen<br />

#A d d i t i o n d e r K o o r d i n a t e n<br />

X . d X . xd+X . yd<br />

r e t u r n ( min ( s q r t (X . d ) ) )<br />

}<br />

#Rahmenfunktion<br />

#<br />

#<br />

<br />

b l a t t 3 . 4 f u n c t i o n (M=500 , f o r . vec =1,<br />

n=c ( 5 , 2 5 , 1 0 0 , 5 0 0 ) , out =0)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

288


{<br />

# Achtung am g e s c h i c k t e s t e n f u e r<br />

# S p e i c h e r v e r w a l t u n g , s i e h e K a p i t e l 9<br />

# s t a t i s c h e s D e k l a r i e r e n d e r Matrix ,<br />

# i n d i e d i e E r g e b n i s s e kommen<br />

#<br />

d m a t r i x ( 0 ,M, l e n g t h ( n ) )<br />

# f u e r j e d e s n f u e h r e d i e<br />

# M Wiederholungen durch<br />

f o r ( j i n 1 : l e n g t h ( n ) )<br />

{<br />

k n [ j ]<br />

# M Wiederholungen<br />

f o r ( l<br />

<br />

i n 1 :M)<br />

{ i f ( ( out==1)&&( l%%10==0)) cat ( l , "\n" )<br />

i f ( f o r . vec==1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

289


e l s e<br />

}<br />

d [ l , j ] l u e c k e . vec ( k )<br />

d [ l , j ] l u e c k e . f o r ( k )<br />

i f ( out==1) p r i n t ( d )<br />

# Zusammenkleben d e r E r g e b n i s s e<br />

}<br />

colnames ( d ) p a s t e ( rep ( p a s t e ( "n␣=" , k ) , l e n g t h ( n ) ) )<br />

summary ( as . data . frame ( d ) )<br />

b o x p l o t ( as . data . frame ( d ) )<br />

r e t u r n ( d )<br />

}<br />

# Z e i t v e r g l e i c h<br />

p r i n t ( system . time ( b l a t t 3 . 4 (M=40,n=50, f o r . vec =1)))<br />

<br />

p r i n t ( system . time ( b l a t t 3 . 4 (M=40,n=50, f o r . vec =0)))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

290


##################<br />

# f u e r B l a t t 3<br />

p r i n t ( system . time ( d b l a t t 3 . 4 ( out =1)))<br />

summary ( d )<br />

b o x p l o t ( as . data . frame ( d ) )<br />

#Mediane<br />

a p p l y ( d , 2 , median )<br />

#IQR ’ s<br />

a p p l y ( d , 2 , IQR )<br />

par ( new=T)<br />

p l o t ( d [ , 1 ] )<br />

<br />

par ( mfrow=c ( 2 , 2 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

291


#Histogramme<br />

a p p l y ( d , 2 , h i s t )<br />

#D i c h t e p l o t<br />

p l d e f u n c t i o n ( x , . . . ) { p l o t ( d e n s i t y ( x , . . . ) ) }<br />

a p p l y ( d , 2 , p l d e )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

292


3.2.3 Tricks zur Vermeidung von Schleifen<br />

3.2.3 (a) Verwedung von Indikatorfunktionen<br />

anstelle von if – Fallunterscheidungen nach Möglichkeit ifelse –<br />

Anweisungen verwenden<br />

noch besser: Arbeit mit logischen Indikatorfunktionen oder pmin,<br />

pmax z.B. <strong>für</strong> die Funktion<br />

<br />

<br />

<br />

<br />

norm1 pmax ( b/ 2 , norm ( x ) )<br />

H x£pmin ( 1 , b/norm1 )<br />

<br />

# k e i n T e i l e n durch 0 !<br />

<br />

<strong>für</strong> <br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

293


oder<br />

w x£0+1<br />

w[ norm ( x)


Lösung: stratifizierte (geschichtete) Stichprobe<br />

– for–Schleife der Länge N<br />

– jeder Schleifendurchlauf produziert ein Resultat der<br />

Genauigkeit einer Stichprobe von Umfang Nmax<br />

– aus den N Teilergebnissen durch Mittelung (mean)<br />

Genauigkeit einer Stichprobe von Umfang Nmax * N<br />

3.2.3 (e) FFT<br />

in einigen Kontexten keine unmittelbare vektorwertige<br />

Formulierung möglich, z.B.<br />

– bei Rekursionen im Zeitreihenkontext<br />

– bei Faltungen zur Berechnung der Verteilung von Summen<br />

in beiden Beispielen möglich: Übergang zur Fouriertrafo<br />

– denn: Fouriertrafo der Faltung ist Produkt der Fouriertrafos<br />

der Faltungsfaktoren<br />

<br />

– dort dann vektorwertiges Kalkül möglich<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

295


noch besser: FFT (Fast Fourier Transformation) — Tukey<br />

– benutzt trigonometrische Rekursionen<br />

– nur Berechnung der Koeffizienten mit Index der Form <br />

nötig<br />

3.3 Schreiben von Funktionen<br />

3.3.1 Syntax<br />

3.3.1 (a) Bestandteile einer Funktion<br />

body: der S-Code<br />

formal arguments die Argumente<br />

environment: ein Paar aus einem frame <strong>und</strong> eine enclosure<br />

– frame: eine Liste von Paaren aus Symbol-Name <strong>und</strong> Wert —<br />

die “lokalen” Variablen <strong>und</strong> deren Werte<br />

<br />

– enclosure: ein Zeiger auf ein umschließendes environment<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

296


– <strong>für</strong> die letzten beiden Begriffe siehe auch Abschnitt 3.6<br />

3.3.1 (b) Rückgabewert<br />

durch return oder der letzte ausgewertete<br />

Ausdruck<br />

Rückgabe von mehreren Argumenten durch Listenbildung, am<br />

besten vom Typ<br />

return( list (=,=,....))<br />

bei größeren Rückgabeobjekten: besser noch in der Funktion<br />

einer Variablen zuweisen “schlankere” Übergabeobjekte<br />

3.3.1 (c) Argumente<br />

Zweck: Übergabe von Parametern aus der aufrufenden<br />

Umgebung<br />

Setzen von Defaultwerten durch<br />

=<br />

c.f. Abschnitt 1.2.4; dann möglich: lazy calling<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

297


Fehlende Argumente:<br />

– Argument X wird nicht mit übergeben<br />

– Abfangen im Funktionskörper durch missing–Abfrage<br />

– Beispiel:<br />

i f ( m i s s i n g (X) ) Y 0<br />

e l s e Y min (X)<br />

spezielles Argument “ ... ”<br />

– steht <strong>für</strong> beliebig viele weiter mit übergebbare Parameter<br />

– diese können dann an andere Funktionen, die im<br />

Funktionenkörper aufgerufen werden, übergeben werden<br />

– nützlich beim Übergeben von Funktionen als Parameter<br />

– siehe auch dichte.r<br />

Übergabe von Funktionen<br />

<br />

Um Verwechslungen mit dem Auslassungssymbol auszuschließen, verwenden<br />

wir <strong>für</strong> dieses in Zukunft immer “....”<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

298


– jederzeit möglich durch Übergabe des Funktionsnamens,<br />

– siehe auch dichte.r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

299


Matching der Argumente — Reihenfolge<br />

– erst: exaktes Matching:<br />

alle Argumente werden belegt, die mit einem exakt<br />

passenden Namen versehen werden;<br />

daher notwendig Eindeutigkeit von<br />

£ Argument–Namen in der Deklaration<br />

£ Argument–Namen im Aufruf<br />

– dann: restliche Argumente mit partiellem matching<br />

£ matching sobald der deklarierte Argument–Namen–Anfang<br />

eindeutig mit übergebenem Namen übereinstimmt<br />

£ Bsp: ffunction(fumble,fooey)<br />

¡ falsch: f(f=1,foo=2)<br />

¡ korrekt: f(f=1,fooey=2)<br />

£ bei Argument ... : partielles matching mit allen<br />

Argumenten davor (in der Deklaration)<br />

– schließlich positionelles Matching:<br />

£ der Rest der unbenannten übergebenen Argumente wird in<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

300


der Deklarationsreihenfolge den verbleibenden Argumenten<br />

zugewiesen<br />

£ bei Argument ... : Sind noch übergebene Argumente<br />

übrig, so werden diese im Funktionenkörper in der<br />

Anweisungsreihenfolge noch freien Übergabeparametern<br />

aufgerufener Funktionen zugewiesen.<br />

Argumentauswertung: lazy evaluation<br />

– bei Aufruf einer Funktion wird ein neuer evaluation frame<br />

erzeugt, vgl. Abschnitt 3.2<br />

– übergebene <strong>und</strong> default–Argumente werden unterschiedlich<br />

behandelt:<br />

£ übergebene Argumente werden in der aufrufenden<br />

Umgebung ausgewertet<br />

£ default–Argumente werden in der lokalen<br />

Funktions–Umgebung ausgewertet<br />

£ Übergabe von Argumenten per call–by–value, es wird also<br />

eine lokale Kopie angelegt, die (bei Bedarf) mit dem Wert<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

301


des übergebenen Arguments aus der aufrufenden<br />

Umgebung initialisiert wird<br />

– lazy evaluation<br />

£ bei Aufruf der Funktion werden die Parameter noch nicht<br />

initialisiert ( “lazy”)<br />

£ daher passiert die Wertzuweisung foo(x=y) erst, wenn die<br />

Variable x im Funktionenkörper gebraucht wird<br />

£ bei Aufruf wird die bei Bedarf auszuführende Initialisierung<br />

in ausführbarem S–code (Text) in einer sogenannten<br />

promise abgelegt.<br />

£ Zugriff auf die promise mit substitute ergibt einen<br />

Rückgabewert vom Typ expression<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

302


£ Umwandlung des von substitute erhaltenen Codes durch<br />

£<br />

deparse<br />

R–Beispiel 3.3-1 [Plot mit automatischem Titel]:<br />

myplot f u n c t i o n ( x , y ){<br />

l a b deparse ( s u b s t i t u t e ( y ) )<br />

. . . .<br />

t i t l e ( main=p a s t e ( " Ein ␣ P l o t ␣ von ␣" , l a b ) )<br />

}<br />

. . . .<br />

– globale vs. lokale Variablen<br />

£ alle Variablen innerhalb des Funktionenkörpers sind lokal;<br />

£ alle Variablen aus der aufrufenden Umgebung stehen bei<br />

Bedarf als lokale Kopien zur Verfügung, sofern sie nicht<br />

durch lokale überladen worden sind;<br />

£ Zuweisungen im Funktionsaufruf, wie foo(xy) verändern<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

303


die Variable x der aufrufenden Umgebung<br />

£ Zugriff / <strong>und</strong> Manipulation von globalen Variablen<br />

innerhalb eines Funktionenkörpers durch<br />

assign("",,frame=0), c.f.<br />

Abschnitt 3.6<br />

3.3.2 Editieren von Funktionen<br />

am besten speichert man Funktionen als R–Skripten,<br />

möglicherweise zusammen mit weiterem R–Code<br />

es gilt das in Abschnitt 1.10.2 gesagte<br />

weitere Möglichkeiten zur Manipulation von R–Objekten:<br />

– fix (): dabei wird der Editor aus<br />

options( editor =«editorname>") verwendet;<br />

nach Speichern liegt das manipulierte Objekt im Speicher<br />

– ed(,editor=«editorname>")<br />

leistet dasselbe<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

304


3.3.3 Fehlerbehandlung<br />

3.3.3 (a) warning<br />

gibt eine Warnung bei Rückkehr zum session–Modus zurück<br />

unterbricht das Programm nicht<br />

3.3.3 (b) stop<br />

gibt eine Fehlermeldung bei Rückkehr zum session–Modus<br />

zurück<br />

unterbricht das Programm<br />

bricht aber die session nicht ab<br />

erzwingt Abbruch, falls notwendiger Parameter fehlt, z.B.<br />

<br />

rpoisfunction(n,lambda=stop("no␣lambda␣arg")){....}<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

305


3.3.3 (c) missing<br />

vgl. Abschnitt 3.3.1 (c)<br />

3.3.3 (d) on. exit<br />

wird erst beim Verlassen der Umgebung ausgeführt<br />

(egal ob nach korrekter Beendigung oder per Error)<br />

nützlich zum lokalen Setzen von Optionen, z.B.<br />

o l d p a r par ( . . . )<br />

on . e x i t ( par ( o l d p a r ) )<br />

Löschen der momentanen on. exit Anweisung durch on. exit ()<br />

3.3.3 (e) try<br />

Situation: möchte innerhalb einer Routine eine andere (fremde)<br />

aufrufen, die je nach Situation mit Fehler abbricht oder den<br />

richtigen Wert ergibt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

306


Problem: mit stop oder warning entweder ganz heraus oder<br />

gar nicht; kein individuelles Abbruchhandling möglich, da kein<br />

Zugriff auf innere Routine<br />

Ablauf in “Sandkasten” try<br />

Achtung:<br />

– funktioniert nur innerhalb von Routinen, nicht im<br />

Kommando–Prompt<br />

– man sollte wissen, welche(r) Fehler passieren <strong>und</strong> warum<br />

Vorteil: verhindert Abbruch des Programms, man kann steuernd<br />

eingreifen<br />

Syntax: try(, first =TRUE)<br />

Rückgabewert: entweder Ergebnis von Expression oder<br />

Fehler–Meldung, die weiterzuverarbeiten ist<br />

durch Setzen von options(show.error .messages=FALSE) vor<br />

Aufruf von try wird Ausgabe von Fehlermeldung unterdrückt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

307


Achtung: nach Aufruf von try wieder auf TRUE setzen!<br />

R–Beispiel 3.3-2 [Beispiel try]:<br />

t r y . t e s t f u n c t i o n ( x )<br />

{<br />

r e t u r n ( e r g )<br />

<br />

}<br />

o p t i o n s ( show . e r r o r . messages = FALSE)<br />

e r g t r y ( s q r t ( x ) )<br />

o p t i o n s ( show . e r r o r . messages = TRUE)<br />

i f ( i s . numeric ( e r g)==F)<br />

{<br />

}<br />

cat ( " k e i n e ␣ g u e l t i g e ␣ Zahl ␣ e i n g e g e b e n ! \n" )<br />

r e t u r n (NA)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

308


e r g t r y . t e s t ( 1 0 )<br />

p r i n t ( e r g )<br />

e r g t r y . t e s t ( "a" )<br />

p r i n t ( e r g )<br />

3.3.4 Hilfe-Files / Dokumentation<br />

Soll der eigene Code auch von anderen genutzt werden, ist es<br />

sinnvoll, eine Online–Hilfe zu schreiben — vgl. auch Referat<br />

erster Schritt: mit Befehl prompt()<br />

– erzeugt eine Help–Schablone als File ".Rd" im<br />

aktuellen Verzeichnis<br />

– siehe auch “Writing R documentation” in “Writing R<br />

Extensions” <strong>und</strong> “Guidelines for Rd files”,<br />

sowie Referat<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

309


zweiter Schritt: Editieren der Schablone in einem Editor<br />

dritter Schritt: Kopieren in<br />

“$R_HOME/src/library/base/man/” — ohne Endung .Rd<br />

3.4 Debugging<br />

zwei unterschiedliche Ausgangssituationen<br />

– post mortem: das Programm ist bereits abgestürzt<br />

(Inspektion ausgelöst durch Signal “Error”)<br />

– Inspektion ausgelöst durch in Code eingefügtes Signal<br />

weitere Quellen: Writing R Extensions (2006b), Kap. 4, R<br />

Language Definition (2006c), Kap. 9, Bavington (2003), Peng<br />

(2002):<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

310


3.4.1 Exkurs: Exception-Handling in R<br />

Fehler/Warnings sind Spezialfälle <strong>für</strong> eine Exception — ein<br />

Situation außer der Reihe<br />

Exception-Handling funktioniert nicht, falls der R/S-<strong>Plus</strong><br />

-Prozess wird abgeschossen oder gar das System abstürzt<br />

sonst bei “regulärer” Exception: Interpreter erhält ein Signal,<br />

wieder ein S-Objekt!, genauer der Klasse condition<br />

in Abhängigkeit des Signals wird Ausführung (execution)<br />

weiteren “Konsequenz”-Codes ausgelöst (eigentliches<br />

Exception-Handling)<br />

in diesen “Konsequenz”-Code kann man eigenen S-Code<br />

einhängen, vgl. ?withRestarts<br />

ein Signal der condition warning löst per default keinen Abbruch<br />

aus, kann aber mit options(warn=2) zu Signal der condition error<br />

gemacht werden, vgl. Tabelle 1.10-2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

311


3.4.2 Post-mortem Analyse<br />

bei Signal der condition error wird anschließend Code<br />

abgearbeitet, der in der Option error festgelegt ist; per default:<br />

NULL<br />

in jedem Fall gibt traceback den Stapel (stack) der letzten<br />

Aufrufebenen wieder<br />

R–Beispiel 3.4-1 [ein einfacher Fehler]:<br />

Situation:<br />

– log2( 1) erzeugt NaN <strong>und</strong> eine Warnung;<br />

– aber hier: bei Warnung wird Abbruch erzwungen<br />

Ergebnis<br />

> options(warn=2)<br />

> log2(-1)<br />

Error in log(x, base) : (converted from warning) NaNs produced<br />

> traceback()<br />

6: doWithOneRestart(return(expr), restart)<br />

5: withOneRestart(expr, restarts[[1]])<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

312


4: withRestarts({<br />

.Internal(.signalCondition(simpleWarning(msg, call), msg,<br />

call))<br />

.Internal(.dfltWarn(msg, call))<br />

}, muffleWarning = function() NULL)<br />

3: .signalSimpleWarning("NaNs produced", quote(log(x, base)))<br />

2: log(x, 2)<br />

1: log2(-1)<br />

Alternative zu NULL in options(" error "=NULL):<br />

dump.frames — <strong>und</strong> nur in S-<strong>Plus</strong>: dump.calls; Beispiel:;<br />

– ähnlich wie dump legen dump.calls <strong>und</strong> dump.frames ein<br />

Abbild von Teilen des Arbeitsspeichers an — auch auf File,<br />

falls gewünscht<br />

– dump.calls speichert den Keller (Stack) der ineinander<br />

geschachtelten Funktionsaufrufe (siehe 1:–6: in<br />

Beispiel 3.4-1)<br />

– dump.frames legt zusätlich noch die entsprechenden Frames<br />

ab (siehe dazu auch Abschnitt 3.6)<br />

<br />

– ein dump von dump.frames ist dann auswertbar dann mit<br />

debugger<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

313


debugger<br />

<br />

– umfassendes System zur schrittweisen Rückverfolgung eines<br />

Fehlers<br />

– operiert auf zwei Ebenen<br />

A der Liste der aktuell im Speicher liegenden frames —<br />

entschieden durch Selection:<br />

B innerhalb eines aktuell im Speicher liegenden frames:<br />

kenntlich gemacht durch Prompt Browse[n], die Ebene<br />

des Calls, <strong>für</strong> die man sich in Selection: entschieden hat<br />

– offline, indem ein bereits ge“dump”–ter last.dump analysiert<br />

wird<br />

– interaktiv durch Abfragen von Optionen<br />

– Ebene A:<br />

£ es werden alle Alternativen durchnummeriert dargestellt<br />

£ im anschließenden Selection –tag gibt man die<br />

entsprechende Nummer der gewünschten Alternative an<br />

£ die Nummer 0 springt eine (frame–)Ebene nach oben, bis<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

314


schließlich auf session–Ebene<br />

– Ebene B — Debugger-Modus:<br />

£ beliebiger S-Code kann eingegeben werden<br />

£ insbesondere: Werte von Variablen (innerhalb dieses<br />

frames) können inspiziert werden<br />

£ spezielle Befehle, die R speziell interpretiert — siehe<br />

Tabelle 3.4-2<br />

Alternative zu dump.frames <strong>und</strong> debugger:<br />

options(" error "=recover)<br />

– im wesentlichen das gleiche — nur ohne Umweg mit einem<br />

dump (also ohne Variablen zu kopieren)<br />

– in diesem Sinn nur interaktiv sinnvoll<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

315


Tabelle 3.4-2 [Sonderbefehle im Debugger-Modus]:<br />

wichtig <strong>für</strong> browser, debug, recover, debugger<br />

RET beim Debuggen gehe zum nächsten Ausdruck<br />

bzw. beim Browsen führe den ursprünglichen<br />

Code weiter aus<br />

c “cont” — führe den ursprünglichen Code weiter<br />

aus<br />

n führe den nächsten Ausdruck aus<br />

where zeige die Hierarchie der aufgerufenen Funktionen<br />

(call stack)<br />

Q breche ab <strong>und</strong> springe zum Top-Level<br />

Zugriff auf “klassische” Objekte c, n, Q mit get, bzw. mit print<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

316


3.4.3 Selbst ausgelöste Exceptions<br />

3.4.3 (a) browser<br />

ist in eigenen Code als Befehl zu integrieren<br />

unterbricht den Ablauf des Programms <strong>und</strong> springt in<br />

Debugger-Modus<br />

Ermöglicht Inspektion / Manipulation aller Objekte der<br />

aktuellen Umgebung<br />

Rückkehr zum Ablauf mit 0<br />

3.4.3 (b) debug<br />

Syntax: debug() markiert eine Funktion zum<br />

Debuggen<br />

bei jedem Aufruf von Funktion Sprung in<br />

Debugger-Modus<br />

<br />

Aufheben der Markierung durch <strong>und</strong>ebug<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

317


3.4.3 (c) trace<br />

Syntax: debug(what,tracer,exit,at,print,.... markiert<br />

eine Funktion zum Debuggen<br />

– what: Name einer Funktion, die verfolgt werden soll<br />

– tracer: eine Funktion oder ein nicht ausgwerteter Ausdruck<br />

(z.B. mit quote/ substitute erreichbar, vgl.<br />

Abschnitt 3.6.3 (a))<br />

tracer wird entweder unmittelbar vor what<br />

aufgerufen/ausgewertet, oder, sofern tracer eine Funktion<br />

ist, unmittelbar vor dem in at genannten “Schritt”<br />

– exit: wie tracer nur wird dies unmittelbar nach what<br />

aufgerufen/ausgewertet<br />

– at: (optional) Position an der tracer<br />

aufgerufen/ausgewertet werden soll<br />

– print: falls TRUE (default), eine erläuternde Zeile zu jeder<br />

trace-Auswertung wird ausgegeben<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

318


zum Zählen der “Schritte” <strong>für</strong> Argument at: falls f die in<br />

tracer übergebene Funktion ist, gibt as. list (body(f)) die<br />

Schritte als Liste. . .<br />

Aufheben der Markierung durch untrace<br />

hiermit bedingtes Debuggen möglich — mit tracer von<br />

folgendem Typ tracer =quote(if() )<br />

<br />

R–Beispiel 3.4-3 [bedingtes Debugging]:<br />

(aus Peng (2002))<br />

– bei der ML-Schätzung in einem Punktprozess taucht<br />

Funktion nLL auf<br />

nLL f u n c t i o n (mu, x ) {<br />

}<br />

z mu £ x<br />

l z l o g ( z )<br />

L1 sum ( l z )<br />

LL mu/2 sum ( l z )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

319


– nLL macht Schwierigkeiten, sofern auf negative Werte<br />

stößt<br />

<br />

– Bestimmung der Nummer von “Schritt” lz log(z)<br />

> a s . l i s t ( b o d y ( nLL ) )<br />

[ [ 1 ] ]<br />

‘ { ‘<br />

[ [ 2 ] ]<br />

z mu £ x<br />

[ [ 3 ] ]<br />

l z l o g ( z )<br />

[ [ 4 ] ]<br />

L1 sum ( l z )<br />

[ [ 5 ] ]<br />

LL mu/ 2 sum ( l z )<br />

– bedingter Aufruf des Browsers, sofern in lz mindestens ein<br />

NaN<br />

t r a c e ( "nLL" ,<br />

quote ( i f ( any ( i s . nan ( l z ) ) )<br />

{ browser ( ) }<br />

) , at =4, p r i n t=F)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

320


3.4.4 Übersicht<br />

Tabelle 3.4-4 [Tracing <strong>und</strong> Debugging in R]:<br />

— aus Venables and Ripley (1999),Tab. 4.1<br />

print , cat manchmal genügt es, sich die wesentlichen Variablen<br />

während des Ablaufs ausgeben zu lassen<br />

traceback gibt die Aufrufe in Ablaufreihenfolge nach einem<br />

Abbruch aus, der einen dump verursacht<br />

options(warn=2) erzwingt Abbruch nach jeder Warnung<br />

options(error=FUN) spezifiziert die dump–Aktion, die durch einen Abbruch<br />

ausgelöst wird; default in S-<strong>Plus</strong> FUN=dump.calls, in<br />

R: NULL; vollständiger: FUN=dump.frames oder<br />

FUN=recover<br />

last .dump Objekt im .Data–directory, das alle<br />

Aufrufe/Umgebungen seit dem letzten dump auflistet<br />

debugger Funktion, die — offline — last .dump inspiziert<br />

recover ähnlich wie debugger, interaktives debuggen der<br />

<br />

letzten Anweisungen mit options( error =recover)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

321


Tabelle 3.4-4 [Tracing <strong>und</strong> Debugging in R — Fortsetzg.]:<br />

browser Funktion, die zur Unterbrechung des Ablaufs eingefügt werden<br />

kann, <strong>und</strong> mit der man dann alle aktuellen Objekte inspizieren<br />

/ modifizieren kann — schon vor Auftreten eines Abbruchs<br />

trace spezifiziert einen Punkt, ab dem man Informationen verfolgen<br />

kann — entweder in einem Funktionskopf oder innerhalb eines<br />

Funktionskörpers; kann verwendet werden, um automatisiert<br />

browser einfügen zu lassen<br />

tprint erzeugt ein nummeriertes Listing des Funktionskörpers, das<br />

man als at Argument in trace verwenden kann<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

322


3.4.5 in S-<strong>Plus</strong>: inspect<br />

In S-<strong>Plus</strong> gibt es noch zusätzlich den sehr komfortablen Befehl<br />

inspect, auf den wir hier nicht näher eingehen. Für diesen mache<br />

man sich unter der S-<strong>Plus</strong>–Hilfe help( inspect ) schlau<br />

3.5 Systemaufrufe<br />

3.5.1 system<br />

mit dem Befehl system können Systemaufrufe durchgeführt<br />

werden; hängt natürlich vom Betriebssystem ab;<br />

Syntax: system(, intern = FALSE, wait = TRUE,<br />

input = , show.output.on.console = FALSE, minimized<br />

= FALSE, invisible = FALSE)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

323


Argumente<br />

– : (string) der auszuführende Systembefehl als<br />

String, dieser Befehl wird dabei als ein Kommando plus<br />

durch Leerzeichen getrennte Argumente geparst; falls daher<br />

der Pfad auf das Kommando Leerzeichen enthält, muss<br />

dieser in Anführungszeichen stehen<br />

– intern: (logisch) — entscheidet, ob aus der Ausgabe des<br />

Systembefehls ein R–Objekt werden soll<br />

– wait: (logisch) entscheidet, ob der R–Interpreter auf die<br />

Beendigung des Systembefehls wartet; per default wartet er;<br />

<strong>und</strong> er wartet stets, falls intern == T.<br />

– input: (string) wenn ein Stringvektor mit übergeben wird,<br />

wird dieser — ein String pro Zeile — auf ein tmp–File<br />

kopiert, <strong>und</strong> anschließend stdin <strong>für</strong> den Systembefehl per<br />

pipe auf dieses File umgelegt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

324


– show.output.on.console: (logisch) entscheidet ob die<br />

Ausgabe des Systembefehls auf der R–Konsole erscheinen<br />

soll; (dies wird nicht unter Rterm genutzt; hier wird die<br />

Ausgabe unterdrückt, es sei denn wait == F)<br />

– minimized: (logisch) entscheidet ob das Kommandofenster<br />

minimiert initialisiert wird<br />

– invisible: (logisch) entscheidet über die Sichtbarkeit des<br />

Kommandofensters<br />

Rückgabewert<br />

– falls intern == TRUE: ein Stringvektor mit der Ausgabe des<br />

Kommandos, jeweils eine Zeile pro String; wenn der<br />

Systembefehl nicht ausgeführt werden kann, wird ein Fehler<br />

ausgegeben<br />

– falls intern == FALSE: ein Error Code — siehe Hilfe — es<br />

sei denn wait == T<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

325


– falls intern == FALSE <strong>und</strong> show.output.on.console ==<br />

TRUE erscheint die Textausgabe eines Befehls, d.h. eine<br />

Konsolen Anwendung erscheint in der R Konsole (Rgui) oder<br />

im Fenster, in dem R läuft (Rterm).<br />

unter Windows<br />

– der Befehl läuft direkt als ein Windows–Befehl unter dem<br />

Windows API call CreateProcess:<br />

– Falls keine Dateierweiterung vorliegt, werden .exe, .com,<br />

.cmd <strong>und</strong> .bat in dieser Reihenfolge ausprobiert.<br />

– Um DOS–Befehle zu nutzen, verwende man unter Windows<br />

9X/ME den Systembefehl command.com /c <br />

– Der Suchpfad <strong>für</strong> die command–Shell hängt vom System ab;<br />

in jedem Fall enthält er das R–Verzeichnis bin, das<br />

Arbeitsverzeichnis <strong>und</strong> die Windows Systemverzeichnisse vor<br />

dem eigentlichen PATH.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

326


verschiedene Aufrufe von R<br />

– Was genau der Nutzer vom Systembefehl sieht, hängt davon<br />

ab, ob Rgui oder Rterm zum Aufruf von R verwendet wird:<br />

– Mit Rgui wird stets eine neue Konsole genutzt, so dass ein<br />

Kommandofenster erscheint, solange der Systembefehl<br />

arbeitet, es sei denn invisible== T<br />

– Unter Rterm erscheint ein separates Kommandofenster <strong>für</strong><br />

die Konsolenanwendung nur dann, wenn wait == F.<br />

Caveat:<br />

– bei Aufruf kein Abbruch durch STRG-D mehr möglich<br />

– das System kann abstürzen, sofern eine Anwendung<br />

Tastatureingaben erwartet, wenn wir mit Rgui arbeiten <strong>und</strong><br />

gleichzeitig intern == T <strong>und</strong>/oder<br />

show.output.on.console == T setzen.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

327


R–Beispiel 3.5-1 [Systemaufrufe]:<br />

# A u f r u f e i n e s E d i t o r s +<br />

# Warten b i s d i e s e r beendet i s t<br />

system ( " notepad ␣ m y f i l e . t x t " )<br />

# A u f r u f e i n e s Windows 9x P r o z e s s m o n i t o r s<br />

# ( aus den Win9x KernelToys )<br />

system ( " wintop " , w a i t = F)<br />

# A u f r u f e i n e r S h e l l<br />

system ( "command . com" )<br />

system ( p a s t e ( " c : /Programme/ M o z i l l a . org /" ,<br />

w a i t = FALSE)<br />

"SeaMonkey/ seamonkey . exe " ,<br />

"␣ u r l ␣ c r a n . r p r o j e c t . org " , sep="" ) ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

328


3.5.2 shell<br />

shell ruft einen Systembefehl auf — gewöhnlich als eine Shell<br />

Syntax: shell (, shell, flag="/c",<br />

intern=FALSE, wait=TRUE,<br />

translate=FALSE, mustWork=FALSE, ...))<br />

Argumente<br />

– : (string) der auszuführende Systembefehl als<br />

String<br />

– shell: (string) der Name der zu verwendenden Shell; ist<br />

dieser String NULL, so wird je nach Betriebssystem eine<br />

Default–Shell aufgerufen — siehe Hilfe<br />

– flag: Schalter zum Starten unter Shell; per default "/c",<br />

bei bash oder tcsh "-c"<br />

– intern: (logisch) — entscheidet, ob aus der Ausgabe des<br />

Systembefehls ein R–Objekt werden soll<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

329


– wait: (logisch) entscheidet, ob der R–Interpreter auf die<br />

Beendigung des Systembefehls wartet; per default wartet er;<br />

<strong>und</strong> er wartet stets, falls intern == T.<br />

– translate: (logisch) entscheidet ob / im in<br />

\übersetzt wird<br />

– mustWork: Soll bei Misslingen des Starts des Systembefehls<br />

wird eine Fehlermeldung herausgegeben werden?<br />

– ...: weitere Parameter<br />

Rückgabewert : — wie system<br />

3.5.3 Platformunabhängige Systemzugriffe<br />

Zeitnahme <strong>für</strong> die benötigte Zeit eines Codes<br />

– system.time<br />

– proc.time<br />

<br />

Umgebungsvariablen /-information<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

330


– Sys.getenv, Sys.putenv: inspizieren <strong>und</strong> setzen von<br />

Umgebungsvariablen<br />

– Sys. getlocale , Sys. putlocale inspizieren <strong>und</strong> setzen der<br />

Lokaldefinition, z.B.<br />

"LC_COLLATE=English_United␣States.1252;LC_CTYPE=English_United␣States.1252;<br />

LC_MONETARY=English_United States.1252;LC_NUMERIC=C;<br />

LC_TIME=English_United States.1252"<br />

– Sys. localeconv Formatierstandards <strong>für</strong> Zahlen<br />

– Sys.time aktuelle Uhrzeit, Sys.timezone Zeitzone<br />

Filezugriff<br />

– file . access Zugriff auf Files<br />

– file .append Files aneinanderhängen<br />

– file .choose File aus einer Liste auswählen lassen<br />

– file .copy Files kopieren<br />

<br />

– file . create erzeugen oder abschneiden von Files<br />

– file . exists Test auf Existenz<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

331


– file . info verschiedene Informationen zu einem File<br />

– file .remove Files löschen<br />

– file .rename Files umbenennen<br />

– file .show Darstellen eines Textfiles<br />

– unlink Löschen von Files oder Verzeichnissen<br />

Umgang Filenamen <strong>und</strong> Pfaden<br />

– basename löst den Filenamen aus einem Pfad heraus<br />

– dirname löst den Ordnernamen aus einem Pfad heraus<br />

– file .path erzeugen eines Pfads aus Filename <strong>und</strong> Ordner<br />

– path.expand vervollständigt ĩn einen Unix Pfad<br />

3.5.4 Unix–Spezifika<br />

hier nicht behandelt; bei Fragen wenden Sie sich bitte an uns;<br />

im Zweifelsfall stellen wir Kontakt zu Experten her<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

332


3.6 Rekursionen <strong>und</strong> Frames<br />

Rekursionen<br />

sind in R zulässig — Funktionen dürfen sich selbst aufrufen.<br />

sind <strong>für</strong> die Programmierung an sich schon interessant<br />

liefern in unserem Fall sogar besseres Verständnis <strong>für</strong> die Art<br />

<strong>und</strong> Weise, wie R Berechnungen organisiert<br />

sind aber oft langsam <strong>und</strong> speicherintensiv<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

333


3.6.1 Beispiel: ein adaptives Verfahren zur<br />

numerischen Integration<br />

3.6.1 (a) Problemstellung<br />

gegeben eine Funktion , in R realisiert durch<br />

f


Idee:<br />

Verwende <strong>für</strong> eine ¦ genauen Schätzung folgenden Algorithmus:<br />

– setze , , , <strong>und</strong> <strong>für</strong> : <br />

– solange wiederhole<br />

£ <br />

£ <strong>für</strong> <br />

spalte auf in <strong>und</strong> mit , <br />

<strong>und</strong> , <br />

£ berechne <strong>für</strong> <br />

<br />

Nachteil: keine lokale Adaption<br />

3.6.1 (c) Adaption durch Rekursion<br />

<br />

<br />

<br />

<br />

(aus Venables and Ripley (1999))<br />

Idee: Verzweigen in die Tiefe nur dann, wenn (lokal) das<br />

Abbruchkriterium noch nicht erfüllt ist<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

335


R–Beispiel 3.6-1 [numerische Integration rekursiv – I]:<br />

a r e a 1 f u n c t i o n ( f , a , b ){<br />

d ( a+b ) /2<br />

a1 ( f ( a)+ f ( b ) ) £ ( b a ) /2<br />

a2 ( f ( a)+4£ f ( d)+ f ( b ) ) £ ( b a ) /6<br />

i f ( abs ( a1 a2 )


R–Beispiel 3.6-2 [numerische Integration rekursiv – II]:<br />

a r e a f u n c t i o n ( f , a , b , l i m i t = 1 0 , . . . ,<br />

}<br />

<br />

f a=f ( a , . . . ) , f b=f ( b , . . . ) ,<br />

eps =100£ Machine$ double . eps ^.5){<br />

h b a ; d ( a+b ) / 2 ; f d f ( d , . . . )<br />

a1 ( f a+f b ) £ ( b a ) / 2 ; a2 ( f a+4£ f d+f b ) £h/6<br />

i f ( abs ( a1 a2)< eps ) r e t u r n ( a2 )<br />

i f ( l i m i t ==0)<br />

{ warning ( p a s t e ( " Maximale ␣ R e k u r s i o n s t i e f e " ,<br />

" e r r e i c h t ␣ nahe ␣x=" , d ) ) ; r e t u r n ( a2 )}<br />

R e c a l l ( f , a , d , . . . , f a=fa , f b=fd ,<br />

l i m i t=l i m i t 1, eps=eps /2)+<br />

R e c a l l ( f , d , b , . . . , f a=fd , f b=fb ,<br />

l i m i t=l i m i t 1, eps=eps / 2)<br />

a r e a ( s i n , 0 , 2 £ p i )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

337


3.6.2 Frames<br />

3.6.2 (a) Definition<br />

ein Frame oder genauer Evaluation Frame ist eine Liste, in der<br />

Namen mit Werten verknüpft werden<br />

im wesentlichen zum gleichen Zweck wie Dictionaries auf der<br />

Search list<br />

Dictionaries <strong>und</strong> Frames werden auch als Databases bezeichnet<br />

3.6.2 (b) kanonische Frames<br />

local frame: Wenn innerhalb einer Funktion oder noch<br />

allgemeiner innerhalb eines Frames ein S–Ausdruck ausgewertet<br />

werden soll, wird der Wert zu allererst aus dem aktuellen Frame<br />

bezogen; dieser heißt lokaler Frame<br />

alle Zuweisungen / Manipulationen geschehen, wenn nicht<br />

explizit anders verlangt (siehe Abschnitt 3.7.2(c)), im lokalen<br />

Frame<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

338


alle Namen, die ausgewertet werden sollen, <strong>und</strong> die sich nicht<br />

im lokalen Frame finden, versucht man zunächst aus dem Frame<br />

des an höchster Stelle (top level) stehenden Ausdrucks zu<br />

beziehen; dieser Frame heißt Arbeitsverzeichnis (working<br />

directory) oder frame 1. Ist die Suche erfolgreich, wird eine<br />

lokale Kopie des Objekts angelegt.<br />

Wird innerhalb der Sitzung interaktiv ein Ausdruck ausgewertet,<br />

so wird zu seiner Auswertung Frame 1 initialisiert.<br />

Wird innerhalb Frame 1 (Frame ) eine Funktion aufgerufen, so<br />

wird zu deren Auswertung Frame 2 (Frame ) initialisiert.<br />

Findet sich der Name, der ausgewertet werden soll, weder im<br />

lokalen Frame noch in Frame 1, wird versucht, ihn aus dem<br />

Sitzungs–Frame (session–frame) zu beziehen; dieser Frame heißt<br />

frame 0.<br />

Findet sich der Name, der ausgewertet werden soll, weder im<br />

lokalen Frame noch in Frame 1 noch in Frame 0, so wird in der<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

339


Search list <strong>und</strong> gesucht, <strong>und</strong> falls dort nichts gef<strong>und</strong>en wird, eine<br />

Fehlermeldung ausgegeben.<br />

3.6.2 (c) Auswertung / Manipulation von Elementen bestimmter<br />

Frames<br />

Tabelle 3.6-3 [Zugriffsfkt’s <strong>für</strong> beliebige Databases]:<br />

— aus Venables and Ripley (1999),Tab. 4.3<br />

assign erzeugt ein neues =–Paar in der<br />

angegebenen Datenbank<br />

exists prüft ob ein gewisses Objekt in der angegebenen<br />

Datenbank zu finden ist<br />

get gibt eine Kopie des Objekts aus der angegebenen<br />

Datenbank zurück, falls es existiert; sonst einen<br />

Fehler<br />

objects gibt einen Stringvektor mit den Namen der Objekte<br />

der angegebenen Datenbank zurück<br />

<br />

remove löscht ein Objekt aus der angegebenen Datenbank<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

340


alle Funktionen haben als Argument envir;<br />

envir =sys.frame(n) Frame Nummer spezifizieren<br />

alternativ dazu pos, um eine Position innerhalb der Suchliste<br />

(Search list) anzugeben<br />

get <strong>und</strong> exists durchsuchen per default den gesamten Suchpfad<br />

die anderen per default den lokalen Frame<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

341


Tabelle 3.6-4 [weitere Database–Zugriffsfunktionen]:<br />

macht eine Zuweisung im Arbeitsverzeichnis<br />

sys .parent(n) gibt die Nummer des Ahnen –ter Ordnung des<br />

lokalen Frames aus<br />

ähnliches sys . function, sys . call , sys . calls , sys .frame,<br />

sys .frames, sys .nframe, sys .parent, sys . parents,<br />

parent.frame, sys .on. exit, sys . status, —<br />

vgl. Online–Hilfe zu R<br />

3.6.2 (d) Beispiel <strong>für</strong> die Kommunikation zwischen Frames<br />

R–Beispiel 3.6-5 [Plot der Auswertungsstellen von area]:<br />

# Z i e l : Ausgabe a l l e r A u s w e r t u n g s s t e l l e n<br />

# von a r e a aus R B e i s p i e l 3.6 2<br />

# V a r i a b l e<br />

<br />

v a l i n frame 0 e r z e u g e n<br />

area aus R–Beispiel 3.6-2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

342


a s s i g n ( " v a l " ,NULL , e n v i r=s y s . frame ( 0 ) )<br />

# Erzeugung d e r u r s p r g l . Funktion<br />

f b e t a f u n c t i o n ( x , alpha , beta ){<br />

x ^( alpha 1)£(1 x )^( beta 1)}<br />

# Erzeugung d e r Funktion , d i e<br />

# i h r e A u s w e r t u n g s s t e l l e n p r o t o k o l l i e r t<br />

f b e t a . tmp f u n c t i o n ( x , alpha , beta ){<br />

a s s i g n ( " v a l " , c ( v a l , x ) , e n v i r=s y s . frame ( 0 ) )<br />

x ^( alpha 1)£(1 x )^( beta 1)}<br />

# A u s i n t e g r i e r e n mit a r e a<br />

b0 a r e a ( f b e t a . tmp , a=0,b=1, l i m i t =12,<br />

b0<br />

a l p h a =3.5 , beta =1.5 , eps =10^( 3))<br />

# p l o t e n d e r Funktion an den<br />

# m i t p r o t o k o l l i e r t e n A u s w e r t u n g s s t e l l e n<br />

<br />

p l o t ( v a l , f b e t a ( v a l , 3 . 5 , 1 . 5 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

343


fbeta(val, 3.5, 1.5)<br />

<br />

0.00 0.10 0.20<br />

Auswertungsstellen in area<br />

●<br />

●<br />

●●●●● ●<br />

● ● ●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●●<br />

● ●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

● ●●●<br />

●<br />

● ●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●●<br />

0.0 0.2 0.4 0.6 0.8 1.0<br />

val<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

344


3.6.3 Programmieroperationen auf der Sprache<br />

vgl. R Language Definition (2006c), Kapitel 6<br />

3.6.3 (a) Calls <strong>und</strong> Expressions<br />

ein Call ist so etwas wie ein schon syntaktisch aufgelöster, aber<br />

noch nicht ausgewerteter Ausdruck<br />

eine Expression umfasst einen oder mehrere geparste aber<br />

unausgewertete Ausdrücke, wobei<br />

ein Ausdruck eine syntaktisch korrekte Tokenkette ist <strong>und</strong><br />

eine Tokenkette eine Anreihung von Tokens <strong>und</strong><br />

ein Token ein (terminales) Schlüsselwort der Sprache S ist<br />

z.B. erhält man mit uquote(plot(x, sin (tan(y )), u,v)) einen Call;<br />

– ist im wesentlichen eine Liste (Umwandlung hin <strong>und</strong> her mit<br />

as. list , call möglich<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

345


– erstes Listenelement: Name der zu äußerst stehende Funktion<br />

– weitere Listenelemente: die Argumente dieser Funktion<br />

– ein weiteres Parsing in Unterausdrücke findet nicht statt —<br />

sin (tan(y)) wird nicht aufgelöst<br />

– die entsprechende Expression wäre weiter aufgelöst<br />

Expressions <strong>und</strong> Calls werden mit eval ausgewertet<br />

3.6.3 (b) Parsing <strong>und</strong> Deparsing<br />

um einen Call/eine Expression zu parsen ohne dass ausgewertet<br />

wird, verwendet man quote oder substitute<br />

um von einem Call/einer Expression wieder zum Klartext zu<br />

kommen, verwendet man deparse<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

346


3.6.3 (c) Anwendungen<br />

im Zusammenhang mit Lazy evaluation, vgl. Abschnitt 3.3.1 (c)<br />

nützlich:<br />

– am Beginn der Standardplotfunktion:<br />

xlabel if (!missing(x)) deparse( substitute (x))<br />

– x ist noch nicht ausgewertet; substitute verhindert die<br />

Auswertung <strong>und</strong> deparse rekonstruiert den Klartext von<br />

Argument x; damit erhält man eine schöne<br />

Achsenbeschriftung<br />

mehrfach verwendeter Code-Block wird zweimal verwendet<br />

– Vorteil: Code ist nur an einer Stelle zu pflegen<br />

– Unterschied zu einer Funktion: kein environment wird<br />

angelegt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

347


–<br />

<br />

R–Beispiel 3.6-6 [Code-Block als Call in Variable]:<br />

£ als Call:<br />

f u f u n c t i o n ( x , y )<br />

{A=quote ({ # H i e r f a e n g t e i n mehrfach<br />

}<br />

e v a l (A)<br />

# r e p l i z i e r t e r Code an<br />

f=s i n ( x ) ; m=cos ( y ) ; z=min ( x , f ,m)<br />

mi=abs ( ro<strong>und</strong> (10 £m, 0 ) )<br />

p r i n t ( mi )<br />

mm=matrix ( z £rnorm ( mi£ 3 , 0 , 2 ) , mi , 3 )<br />

p r i n t (mm)<br />

})<br />

p r i n t ( c (mode(A) , environment (A ) ) )<br />

# . . . .<br />

#h i e r kaeme nun i r g e n d w a s<br />

e v a l (A)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

348


£ als Funktion ohne Argumente (geht wegen Lexical<br />

Scoping):<br />

##s u b t i l a n d e r s a l s<br />

f u 2 f u n c t i o n ( x , y )<br />

{A=f u n c t i o n ( ) {<br />

# H i e r f a e n g t e i n mehrfach<br />

# r e p l i z i e r t e r Code an<br />

}<br />

A( )<br />

f=s i n ( x ) ; m=cos ( y ) ; z=min ( x , f ,m)<br />

mi=abs ( ro<strong>und</strong> (10 £m, 0 ) )<br />

p r i n t ( mi )<br />

mm=matrix ( z £rnorm ( mi£ 3 , 0 , 2 ) , mi , 3 )<br />

p r i n t (mm)<br />

p r i n t ( c (mode(A) , environment (A ) ) )<br />

# . . . .<br />

#h i e r kaeme nun i r g e n d w a s<br />

A( )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

349


}<br />

£ der Vergleich<br />

> f u ( 3 , 4 )<br />

[ 1 ] 7<br />

[ , 1 ] [ , 2 ] [ , 3 ]<br />

[ 1 , ] 1.1563608 0 . 5 7 7 9 2 3 1 0.01568853<br />

. . . . .<br />

[ 7 , ] 0 . 8 9 1 8 1 2 1 0 . 8 0 0 3 1 4 3 1.27947251<br />

[ 1 ] " c a l l "<br />

[ 1 ] 7<br />

[ , 1 ] [ , 2 ] [ , 3 ]<br />

[ 1 , ] 0.74909778 1.11834236 2.5217689<br />

. . . . .<br />

[ 7 , ] 0 . 3 1 1 0 2 5 2 4 3 . 1 2 4 6 2 1 8 0 0 . 1 3 1 9 5 2 8<br />

> f u 2 ( 3 , 4 )<br />

[ 1 ] 7<br />

[ , 1 ] [ , 2 ] [ , 3 ]<br />

[ 1 , ] 1.707287320 1 . 5 5 0 3 8 8 9 0.4610366<br />

. . . . .<br />

[ 7 , ] 1 . 0 3 4 5 1 4 2 4 1 0 . 7 7 3 3 1 9 9 0 . 6 8 4 4 4 6 3<br />

[ [ 1 ] ]<br />

[ 1 ] " f u n c t i o n "<br />

[ [ 2 ] ]<br />

<br />

[ 1 ] 7<br />

[ , 1 ] [ , 2 ] [ , 3 ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

350


[ 1 , ] 1 . 2 1 1 4 2 8 7 1 . 0 6 1 7 8 5 0 2 . 6 4 4 1 7 9 3<br />

. . . . .<br />

[ 7 , ] 0.8499366 0.1239640 0.4150593<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

351


4 Graphiken<br />

4.1 Ausgabegeräte<br />

Vor der Anfertigung von Grafiken müssen wir erst einmal<br />

spezifizieren, auf welchem Gerät bzw. in welchem Format wir die<br />

Grafik erzeugen wollen; Ausgabegerät oder Devices<br />

Angabe aller verfügbaren Devices durch ?Devices<br />

4.1.1 Betriebssystem–Treiber<br />

je nach Betriebssystem wird ein Grafikfenster mit unterschiedlichen<br />

Befehlen erzeugt;<br />

Tabelle 4.1-1 [Grafik–Devices <strong>für</strong> Betriebssysteme]:<br />

windows unter Windows<br />

X11 unter Unix<br />

macintosh unter Macintosh<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

352


hier: nur Windows–Welt<br />

windows startet ein neues Grafikfenster <strong>und</strong> lenkt alle folgenden<br />

Grafikausgaben auf dieses Fenster<br />

win.graph, x11, X11 sind (unter Windows) Synonyme — aus<br />

Kompatibilitätsgründen!<br />

Syntax: windows(width=7, height=7, pointsize=12,<br />

record = getOption("graphics.record"), rescale =<br />

c("R", "fit", "fixed"), xpinch, ypinch, canvas =<br />

"white", gamma = getOption("gamma"))<br />

Argumente<br />

– width, height: (nominale) Breite / Höhe des Grafikfensters<br />

in Zoll<br />

– pointsize: die default–Schriftgröße in Punkt<br />

– record: (logisch): setzt den Anfangszustand der Flagge, die<br />

das Aufzeichnen von Plots regelt — siehe Online–Hilfe<br />

– rescale: kontrolliert, was bei Umskalierungen von Plots<br />

passieren soll — siehe Online–Hilfe<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

353


– xpinch, ypinch: Pixel pro Zoll, horizontal <strong>und</strong> vertikal<br />

– canvas: (color) Farbe des Hintergr<strong>und</strong>es, falls keine<br />

Hintergr<strong>und</strong>farbe explizit angegeben ist<br />

– gamma: Gamma–Korrekturfaktor<br />

Details<br />

– die Fenstergröße wird per default aus oft unzuverlässigen<br />

Windows–Angaben über das Display bestimmt;<br />

stattdessen auch möglich: Angabe von xpinch <strong>und</strong> ypinch<br />

– bei Aufruf: Grafikfenster nicht größer als der Höhe oder<br />

Breite des Bildschirms;<br />

Höhe <strong>und</strong> Breite werden bei Bedarf proportional umskaliert;<br />

nachträglich: interaktiv Größe des Grafikfensters noch<br />

vergrößerbar;<br />

– nach Umskalierungen wird Grafikfenster per default neu<br />

gezeichnet;<br />

Option "fit": Plot wird auf die neue Größe des<br />

Grafikfensters umskaliert;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

354


Option "fixed": Dimensionen der Grafik unverändert;<br />

Rollbalken hinzugefügt<br />

– Fläche außerhalb des Grafikfensters in Windows<br />

application backgro<strong>und</strong> colour;<br />

Gebiet des Grafikfensters in Farbe aus canvas, es sei denn<br />

Hintergr<strong>und</strong>farbe angegeben<br />

– Unterschied zwischen canvas <strong>und</strong> backgro<strong>und</strong> colour:<br />

erstere wird beim Kopieren nicht mitkopiert, letztere schon<br />

– aufgenommene plot histories sind von der Klasse<br />

"SavedPlots"; sie haben eine print– <strong>und</strong> eine<br />

subset–Methode;<br />

– einzelne aufgenommene Plots sind aus Klasse<br />

"recordedplot" können durch print neu ausgegeben<br />

werden;<br />

<br />

Rückgabewert: keiner; es wird ein Fenster geöffnet<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

355


4.1.2 Ausdruck mit postscript<br />

4.1.2 (a) postscript<br />

startet einen Grafiktreiber zur Erzeugung von Postscript–Files<br />

<strong>und</strong> lenkt alle Grafikausgaben auf diesen Treiber<br />

Syntax: postscript (file = ifelse(onefile, "Rplots.ps",<br />

"Rplot%03d.ps"), onefile = TRUE, paper, family,<br />

encoding, bg, fg, width, height, horizontal,<br />

pointsize, pagecentre, print.it, command)<br />

Argumente<br />

– file: (string): Name des zu erzeugenden Postscript–Files<br />

– onefile: (logisch): Sollen mehrere Seiten in ein File<br />

geschrieben werden?<br />

– paper: Papierformat im Drucker; zur Auswahl stehen: "a4",<br />

"letter", "legal" <strong>und</strong> "executive"; auch: "special",<br />

sofern width <strong>und</strong> height das Papierformat spezifizieren<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

356


– family: Schriftenfamilie; genaueres siehe Online–Hilfe<br />

– encoding: Schriftenkodierungsfile; per default<br />

"R_HOME/afm/WinAnsi.enc"; genaueres siehe Online–Hilfe<br />

– bg, fg: (color) — default–Werte <strong>für</strong> die Vorder– (fg) <strong>und</strong><br />

Hinter–(bg)gr<strong>und</strong>farbe<br />

– width, height, pointsize: wie bei windows<br />

– horizontal: (logisch) TRUE quer, FALSE hochkant<br />

– pagecenter: (logisch) Soll die Seite auf dem Papier zentriert<br />

werden?<br />

– print.it: (logisch) Soll das File anschließend gleich an den<br />

Drucker gesandt werden?<br />

– command: (string): auszuführender Befehl zum Ausdruck des<br />

Postscript–Files<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

357


4.1.2 (b) ps. options<br />

setzt die Optionen des Postscript–Treibers<br />

Syntax: ps.options(paper, horizontal, width, height,<br />

family, encoding, pointsize, onefile = TRUE,<br />

print.it = FALSE, bg, fg, append = FALSE,<br />

reset = FALSE, override.check = FALSE)<br />

Ausgabe mit . PostScript .Options<br />

Argumente<br />

– paper, horizontal, width, height,family, encoding,<br />

pointsize, bg, fg, onefile, print.it wie bei postscript<br />

– append: (logisch): nur aus Kompatibilitätsgründen<br />

– reset,override.check: (logisch) werden an check.options<br />

weitergeleitet — siehe Online–Hilfe<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

358


4.1.3 andere Ausgabeformate<br />

Neben dem postscript – <strong>und</strong> den systemabhängigen<br />

Grafikfensterbefehlen gibt es noch weitere Formate auf die man in R<br />

Grafik schreiben kann<br />

Tabelle 4.1-2 [weitere Grafik–Treiber]:<br />

pdf schreibt PDF–Format auf ein File<br />

pictex schreibt LATEX/PicTEX–Format auf ein File<br />

windows neben Bildschirmtreiber auch WMF–Format auf File erzeugbar<br />

png schreibt PNG–Format auf ein File<br />

jpeg schreibt JPEG–Format auf ein File<br />

bmp schreibt BMP–Format auf ein File<br />

xfig schreibt XFIG–Format auf ein File<br />

Bemerkung 4.1-3:<br />

Schließen aller (oder einzelner) Graphikfenster / –Files mit<br />

<br />

graphics . off<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

359


4.2 der plot <strong>und</strong> der par Befehl<br />

nach einem Referat von Matthias Brandl vom 03.06.2002<br />

4.2.1 Die par – Funktion<br />

setzt diverse Graphikoptionen fest, so dass alle nachfolgenden<br />

Graphikbefehle diese Optionen verwenden<br />

Um die verschiedenen Optionen, die mit par gesetzt werden<br />

können, zu sehen, tippe man am Prompt ein<br />

> par()<br />

– Optionen <strong>für</strong> par<br />

– Hier sieht man auch, wie diese Optionen voreingestellt sind<br />

(So werden sie auch nach einem Neustart von R wieder<br />

verwendet!).<br />

<br />

– <strong>für</strong> eine detailliertere Beschreibung >?par<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

360


häufigste Parameter/Argumente — mit Voreinstellungen<br />

<br />

fig Koordinaten der gesamten<br />

Einzelabbildung<br />

fin=c(m,n) Größe der Einzelabbildung in Inch.<br />

Breite, Höhe<br />

pin=c(m,n) Größe der Graphik in Inch. s.o.<br />

mar=c(5,4,4,2)+0.1 Alle Ränder in Zeilenanzahl<br />

mai=c(1.4,1.1,1.1,0.6) Alle Ränder in Inch<br />

oma=c(0,0,0,0) Äußere Randlinien<br />

omi=c(0,0,0,0) Dicke der äußeren Ränder in Inch<br />

plt=c(0.1,0.9,0.2,0.9) Koordinaten der Plotregion als ein<br />

Teil der Einzelabbildung<br />

usr Minimum <strong>und</strong> Maximum <strong>für</strong> x- <strong>und</strong><br />

y-Achse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

361


mfrow=c(m,n) Multiples Abbildungslayout; zeilenweises<br />

Plotten, erzeugt eine -Matrix von<br />

Einzelabbildungen<br />

mfcol=c(m,n) s.o.; spaltenweise<br />

4.2.2 Befehle zur Aufteilung des Graphsheets<br />

layout(mat, teilt das Graphsheet in so viele<br />

widths=rep(1,dim(mat)[2]), Zeilen <strong>und</strong> Spalten wie die Matrix<br />

heights=rep(1,dim(mat)[1]))<br />

mat Zeilen <strong>und</strong> Spalten hat<br />

widths legt die Breite der einzelnen<br />

Zellen, heights deren Höhe fest<br />

split .screen(figs = c(m,n)) Teilt das Graphsheet in verschiedene<br />

Screens auf (vgl. mfrow)<br />

screen(n) Aktiviert den Screen Nummer n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

362


4.2.3 Die plot–Funktion<br />

ist die elementarste Funktion, um eine Abbildung zu erzeugen<br />

Syntax: plot(x,y, )<br />

mit type= kann man die Art des Datenauftrags verändern:<br />

type="p" Punkte (Voreinstellung)<br />

type="l" die Daten sind durch Strecken verb<strong>und</strong>en<br />

type="b" beides (Punkte mit Strecken)<br />

type="h" vertikale Stäbe<br />

type="o" Strecken mit darüberliegenden Punkten<br />

type="s" Treppenstufen<br />

type="n" nichts<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

363


Modifizierende Optionen (viele auch in par() einstellbar):<br />

<br />

axes (logisch) mit / ohne Achsen<br />

main (String) Titel<br />

sub (String) Untertitel<br />

xlab Beschriftung der x-Achse<br />

ylab Beschriftung der y-Achse<br />

xlim=c(xmin,xmax) linke <strong>und</strong> rechte Grenze der x-Achse<br />

ylim=c(ymin,ymax) untere <strong>und</strong> obere Grenze der y-Achse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

364


Zeichentypus<br />

<br />

pch = "*" spezielles Plotzeichen; auch als Vektor der<br />

Länge von x übergebbar<br />

lwd = 1 Linienbreite; auch als Vektor der Länge von x<br />

übergebbar<br />

lty = 1 Linientyp ( durchgezogen, gestrichelt,<br />

....); auch als Vektor der Länge von x<br />

übergebbar<br />

col = 1 Farbe (systemabhängig); in R unter Windows:<br />

auch (englische) Farbnamen als String<br />

übergebbar; auch als Vektor der Länge von x<br />

von Farbcodes/–namen übergebbar<br />

box (logisch) zeige oder verberge den Rahmen um<br />

die Abbildung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

365


Befehle, um Linien zu einem Graph hinzuzufügen:<br />

<br />

abline(a,b) Fügt eine Gerade mit y-Abschnitt a <strong>und</strong><br />

Steigung b hinzu<br />

abline(h) Fügt eine horizontale Gerade auf der<br />

Höhe h hinzu<br />

abline(v) das Analogon <strong>für</strong> vertikale Geraden<br />

arrows(x1,y1,x2,y2) Fügt einen Pfeil von (x1,y1) nach<br />

(x2,y2) hinzu<br />

box() Fügt den äußeren Rahmen hinzu<br />

lines (x,y) Fügt eine Gerade hinzu<br />

points(x,y) Fügt einen Punkt hinzu<br />

segments(x1,y1,x2,y2) Fügt eine Strecke von (x1,y1) nach<br />

(x2,y2) hinzu<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

366


Befehle, um Text zu einem Graph hinzuzufügen — der Befehl<br />

text<br />

<br />

– Syntax: text(xpos,ypos,,adj=0.5,cex=1,<br />

col=1,crt=0,srt=0,font=1)<br />

– Fügt Text an einer definierten Stelle hinzu<br />

– Argumente<br />

xpos,ypos x- <strong>und</strong> y-Koordinate des Textes im Bild<br />

adj=0.5 Textausrichtung; linksbündig, zentriert, <br />

rechtsbündig<br />

cex=1 Fontgröße<br />

col=1 Farbe<br />

crt=0 Rotation eines Zeichens in Grad (im Uhrzeigersinn von<br />

der Horizontalen weg)<br />

srt=0 Rotation der Zeichenkette<br />

font=1 Font (systemabhängig)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

367


weitere Modifikatoren als separate Befehle<br />

<br />

mtext(....) Text in einem Rand der Abbildung<br />

title ("Titel",<br />

"Untertitel")<br />

Fügt Titel <strong>und</strong>/oder Untertitel hinzu<br />

axes() Fügt x- <strong>und</strong> y-Achse hinzu<br />

Achsenspezifikation: der Befehl axis<br />

– Syntax:<br />

axis(side=n,at=x,labels=s,pos=y,las=m,mgp=c(3,1,0),<br />

xaxt="....",yaxt="....",tck=-0.02,lty=1,lwd=1)<br />

– Fügt eine spezielle Achse hinzu<br />

– Argumente<br />

side=n : x-Achse, : y-Achse,....<br />

at=x,labels=s schreibt die Beschriftung s an die Stelle x<br />

pos=y verschiebt die Achse bis sie durch die<br />

Koordinate y geht<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

368


las=m fügt die Beschriftung parallel, <br />

horizontal <strong>und</strong> um Grad gedreht zur<br />

Achse hinzu<br />

mgp=c(3,1,0) Randlinie, an der Achsentitel, Beschriftung <strong>und</strong><br />

die Linie selbst angebracht werden<br />

xaxt="...." x-Achsen-Typ (vgl. type="...")<br />

yaxt="...." y-Achsen-Typ<br />

tck=-0.02 Länge der Markierungsstriche<br />

lty=1 Linientyp (s.o.)<br />

lwd=1 Linienbreite<br />

4.2.4 alternatives Paket zu plot: grid<br />

Paul Murrell hat alternativ zu der bisher dargestellten Graphik ein eigenes<br />

Paket grid zur Verfügung gestellt, das weitaus leistungsfähiger ist als die<br />

hier dargestellten Befehle; näheres siehe library (grid , help)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

369


4.2.5 ein Beispiel<br />

data ( g e y s e r , package=KernSmooth )<br />

a t t a c h ( g e y s e r )<br />

g e y s e r . both c b i n d ( w a i t i n g , d u r a t i o n )<br />

l a y o u t ( mat=m a t r i x ( c ( 1 , 2 , 4 , 3 ) , n c o l =2) ,<br />

w i d t h s=c ( 0 . 7 , 0 . 3 ) , h e i g h t s=c ( 0 . 3 , 0 . 7 ) )<br />

par ( mar=c ( 2 , 4 , 2 , 2 ) , cex =0.7)<br />

h i s t ( g e y s e r $ w a i t i n g )<br />

par ( mar=c ( 4 , 4 , 2 , 2 ) , cex =0.7)<br />

p l o t ( g e y s e r $ w a i t i n g , g e y s e r $ d u r a t i o n , pch="£" ,<br />

x l a b=" W a r t e z e i t " , y l a b=" Dauer ␣ d e r ␣ E r u p t i o n " )<br />

t i t l e ( "\ nOld ␣ F a i t h f u l ␣ G e yser ␣Data␣ Set " , cex =0.5)<br />

par ( mar=c ( 4 , 3 , 2 , 2 ) , cex =0.7)<br />

b o x p l o t ( g e y s e r $ d u r a t i o n )<br />

zum Abschluß demo(graphics)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

370


4.3 einige Tabellen<br />

4.3.1 Symbole <strong>für</strong> pch<br />

<br />

Angabe einer Zahl <strong>für</strong> pch<br />

Bemerkung 4.3-1:<br />

Bei Angabe numerischer Codes <strong>für</strong> pch Steuerung der Größe durch<br />

mkh<br />

4.3.2 Farben<br />

Angabe einer Zahl <strong>für</strong> col<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

371


Auflistung aller (englischer) Farbnamen, die statt numerischer Werte<br />

verwendbar sind, mit colors () — zur Zeit Namen!<br />

mit palette kann man eine neue Palette an Farben definieren, die die<br />

numerischen Werte überschreibt<br />

vordefinierte Skalen / “Topologien”<br />

– rgb: Farbkoordinaten im rgb–Raum (rot, grün, blau),<br />

codiert in <br />

– hsv: Farbkoordinaten im HSV–Raum (hue, saturation, value),<br />

codiert in <br />

– gray (Synonyom: grey): Grauskala, codiert in ,<br />

schwarz, weiß<br />

– weitere: rainbow , heat. colors , topo. colors , terrain . colors ,<br />

cm.colors (siehe Online–Hilfe)<br />

Umsetzung der Farbnamen / –nummern (einer Palette) / –skalen in<br />

rgb–Koordinaten durch col2rgb<br />

konzeptionelle Wahl der Farben: vgl. http://colorbrewer.org/;<br />

in R umgesetzt im Paket RColorBrewer von Erich Neuwirth<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

372


4.3.3 Linientypen<br />

genauer:<br />

eine der drei Möglichkeiten<br />

– Zahl (wie oben)<br />

Angabe einer Zahl <strong>für</strong> lty<br />

– Name (character string) aus "blank", "solid",<br />

"dashed", "dotted", "dotdash", "longdash", "twodash"<br />

– eine Zeichenkette geradzahliger Länge mit bis zu Zeichen<br />

aus c (1:9, "A":"F") (hexadezimal codiert) — abwechselnd<br />

Zahl der gezeichnet <strong>und</strong> der nicht gezeichneten Einheiten,<br />

z.B. ergibt A24C33 Muster 10+2-4+12-3+3- (+ zeichnen,<br />

- nicht zeichnen)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

373


4.3.4 Linienbreiten<br />

<br />

Angabe einer Zahl <strong>für</strong> lwd<br />

Bemerkung 4.3-2:<br />

Referenz zu graphischer Visualisierung von Daten: Cleveland (1985)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

374


4.4 weitere gr<strong>und</strong>legende Plot–Befehle<br />

4.4.1 eine Übersicht<br />

Tabelle 4.4-1 [gr<strong>und</strong>legende Grafikbefehle]:<br />

— aus Venables and Ripley (1999), Tab. 3.1<br />

Befehl c.f. Zweck<br />

abline 4.2 fügt eine Linie in die aktuelle Grafik<br />

barplot 4.4.2 (b) Säulendiagramm<br />

biplot 4.4.3 (c) gemeinsame Darstellung von Zeilen– <strong>und</strong><br />

Spaltenraum einer multivariaten Variable in<br />

einem Plot <br />

brush, spin 4.4.3 (c) dynamische Grafik <br />

contour 4.4.6 Niveaulinien–Plot<br />

coplot<br />

<br />

4.6 plotten einer Variablen gegen eine andere zu<br />

gegebenen Wertbereichen oder Niveaus einer<br />

der beiden Variablen<br />

¡ nur in S-<strong>Plus</strong><br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

375


Tabelle 4.4-1 [gr<strong>und</strong>legende Grafikbefehle]:<br />

Befehl c.f. Zweck<br />

dotchart 4.4.2 (c) erzeugt ein Punkt–Diagramm<br />

faces 4.4.3 (c) Darstellung multivariater Daten in<br />

Chernoff–Gesichtern <br />

frame 4.5.1 (a) weitergehen zur nächsten<br />

Abbildungs–Region<br />

hist 2.5.1 Histogramm (verwendet barplot)<br />

hist2d 4.4.3 (c) zweidim. Histogramm <br />

identify , locator 4.5.3 Interaktion mit existierendem Plot<br />

image 4.4.6 “High–Density”–Plot<br />

legend 4.5.2 (c) fügt eine Legende hinzu<br />

matplot<br />

<br />

4.4.3 (c) simultanes Plotten mehrerer Kurven: jedem<br />

x-Wert wird <strong>für</strong> jede Spalte einer Matrix<br />

ein Punkt als y–Wert abgetragen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

376


Tabelle 4.4-1 [gr<strong>und</strong>legende Grafikbefehle]:<br />

Befehl c.f. Zweck<br />

mtext 4.2 fügt Text in den Rand ein<br />

pairs 4.4.3 (a) eine Ansammlung aller paarweisen Plots<br />

einer multivariaten Variable<br />

par 4.2 setzen / inspizieren von Graphikparametern<br />

persp, perspp 4.4.6 D–Plot–Befehle<br />

pie 4.4.2 (d) Tortendiagramm<br />

plot 4.2 generischer (vgl. Abschnitt 8.1.5 (b))<br />

Plotbefehl<br />

polygon 4.2 fügt ein Polygon in ein bestehendes<br />

Diagramm ein<br />

points, lines 4.2 fügt Punkte oder Linien in ein bestehendes<br />

Diagramm ein<br />

qqplot, qqnorm 5.1.8 Quantil–Quantil–Plot <strong>und</strong> normaler<br />

Q-Q–Plot<br />

segments 4.2 fügt Liniensegmente oder Pfeile in ein<br />

arrows bestehendes Diagramm ein<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

377


Tabelle 4.4-1 [gr<strong>und</strong>legende Grafikbefehle]:<br />

Befehl c.f. Zweck<br />

stars 4.4.3 (c) Darstellung multivariater Daten in Star–Plots<br />

symbols 4.4.3 (c) fügt Symbole von variierender Größe in ein<br />

bestehendes Diagramm ein<br />

text 4.2 fügt Text in ein bestehendes Diagramm ein<br />

title 4.2 fügt einen Titel in ein bestehendes Diagramm<br />

ein<br />

4.4.2 Univariate Graphiken<br />

4.4.2 (a) Histogramme, emp. Verteilungsfunktion, Boxplots<br />

siehe Abschnitte 2.5.1, 2.5.2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

378


4.4.2 (b) Säulendiagramme — barplot<br />

Syntax:<br />

<br />

barplot(height, width = 1, space = NULL, names.arg = NULL,<br />

Argumente<br />

legend.text = NULL, beside = FALSE, horiz = FALSE,<br />

density = NULL, angle = 45, col = heat.colors(NR),<br />

border = par("fg"), main = NULL, sub = NULL,<br />

xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL,<br />

xpd = TRUE, axes = TRUE, axisnames = TRUE,<br />

cex.axis = par("cex.axis"), cex.names =<br />

par("cex.axis"), inside = TRUE, plot = TRUE, ...)<br />

– height: entweder ein Vektor oder eine Matrix von Werten, die die<br />

Säulen aus dem Plot beschreiben.<br />

£ falls height ein Vektor ist:<br />

eine Folge rechteckiger Säulen mit Höhen entsprechend height<br />

wird geplottet<br />

£ falls height eine Matrix <strong>und</strong> beside FALSE ist:<br />

Jede Säule besteht aus Teilsäulen, entsprechend den Werten in<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

379


den Spalten von height<br />

£ falls height eine Matrix <strong>und</strong> beside TRUE ist:<br />

Die einzelnen Spaltenelemente werden nebeneinander geklebt.<br />

– width: optionaler Vektor mit Säulenbreiten. Angabe eines<br />

einzelnen Wertes wirkt sich nur aus, sofern xlim spezifiziert ist.<br />

– space: leerer Zwischenraum links vor einer Säule, gemessen als<br />

Anteil der durchschnittlichen Säulenbreite;<br />

angebbar als einzelner Wert oder je ein Wert / Säule;<br />

falls height als Matrix vorliegt <strong>und</strong> beside TRUE ist, kann space<br />

als jeweils zwei Werte angegeben werden; der erste ist dann der<br />

Zwischenraum zwischen zwei Säulen einer Spalte, der zweite dann<br />

zwischen den Spalten; in diesem Fall ist der default c(0,1) sonst<br />

0.2.<br />

– names.arg: ein Stringvektor mit Namen, die unter die<br />

Säulen(gruppen) geplottet werden; per default werden hier die<br />

(Spalten)Namen vom names–Attribut von height übernommen;<br />

– legend.text: ein Stringvektor, um eine Legende <strong>für</strong> den Plot zu<br />

erstellen, oder ein logischer Wert, der bestimmt, ob eine Legende<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

380


eingeschlossen werden soll; oft nützlich wenn height eine Matrix<br />

ist; in diesem Fall entsprechen die Zeilen von height den in der<br />

Legende aufgeführten Labels; falls legend.text TRUE ist werden<br />

per default die Zeilennamen von height verwendet.<br />

– beside: (logisch) siehe height<br />

– horiz: (logisch) per default FALSE; sollen die Säulen horizontal<br />

statt vertikal geplottet werden?<br />

– density: ein Vektor der die Dichte der Schraffur der<br />

Säulen(komponenten) in Linien/Zoll angibt, per default NULL;<br />

dann keine Schraffur<br />

– angle: Neigung der Schraffur als Winkel im Gegenuhrzeigersinn<br />

– col: (Vektor)(color) Farben der Säulen(komponenten)<br />

– border: Randfarbe der Säulen.<br />

– main, sub, item xlab, ylab, xlim, ylim, axes, axisnames, : wie<br />

bei plot<br />

– xpd: (logisch) dürfen Säulen aus dem Bild ragen?<br />

<br />

– cex.axis, cex.names: (cex character expansion)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

381


Vergrößerungsfaktor <strong>für</strong> die Achsenbeschriftung / Namen.<br />

– inside: (logisch) sollen Linien, die zwei aneinander angrenzende<br />

Säulen trennen, mitgezeichnet werden?<br />

– plot: (logisch) soll überhaupt etwas geplottet werden — oder ist<br />

man nur auf den Rückgabewert aus?<br />

– ...: weitere Graphikparameter (par), die an plot .window(),<br />

title () <strong>und</strong> axis weitergeleitet werden.<br />

Rückgabewert<br />

– ein numerischer Vektor (oder Matrix), sofern beside = TRUE,<br />

ergibt die x–Koordinaten aller Säulenmitten — nützlich um in<br />

diesen Plot weitere Information zu plotten.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

382


R–Beispiel 4.4-2 [Tote in GB durch Lungenkrankheiten]:<br />

#E i n l a d e n n o t w e n d i g e r B i b l i o t h e k e n<br />

l i b r a r y (MASS)<br />

l i b r a r y ( l a t t i c e )<br />

l i b r a r y ( t s )<br />

#B e r e i t s t e l l e n d e r D a t e n s a e t z e<br />

data ( mdeaths ) ; data ( f d e a t h s ) ;<br />

# (M a e nner <strong>und</strong> F rauen )<br />

l u n g e n . t o t e aggregate (<br />

t s . union ( mdeaths , f d e a t h s ) , 1)<br />

# A g g r e g i e r e n d e r Daten i n e i n e Matrix<br />

# mit S p a l t e n m / w <strong>und</strong> Z e i l e n Jahr<br />

# 1 . Saeulendiagramm<br />

b a r p l o t ( t ( l u n g e n . t o t e ) , names =<br />

dimnames ( l u n g e n . t o t e ) [ [ 1 ] ] ,<br />

<br />

main = " Tote ␣ i n ␣GB␣ durch ␣ L u n g e n k r a n k h e i t e n " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

383


# i n t e r a k t i v e s F e s t l e g e n d e r P o s i t i o n<br />

# d e r Legende<br />

i f ( i n t e r a c t i v e ( ) )<br />

<br />

l e g e n d ( l o c a t o r ( 1 ) , c ( " Maenner " , " Frauen " ) ,<br />

f i l l = c ( 2 , 3 ) )<br />

# 2 . Sauelendiagramm<br />

# a b l e g e n d e r x P o s i t i o n e n i n l o c<br />

l o c b a r p l o t ( t ( l u n g e n . t o t e ) , names =<br />

dimnames ( l u n g e n . t o t e ) [ [ 1 ] ] , a n g l e = c (45 , 135) ,<br />

d e n s i t y = 10 , c o l = 1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

384


# Berechnung d e r a b s o l u t e n Zahlen d e r<br />

# Lungentoten f u e r j e d e s Jahr<br />

t o t a l rowSums ( l u n g . d e a t h s )<br />

# B e s c h r i f t u n g des S a e u l e n mit d i e s e n<br />

# Zahlen o b e r h a l b d e r S a e u l e n<br />

# mit entsprechendem Abstand<br />

t e x t ( l o c , t o t a l + par ( " cxy " ) [ 2 ] , t o t a l ,<br />

<br />

cex = 0 . 7 , xpd = T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

385


Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

386


4.4.2 (c) Punktdiagramme — dotchart<br />

Alternative zu Säulendiagrammen; erstellt zwei Varianten von<br />

Dot–Plots wie sie sich in Cleveland (1985) finden<br />

auch <strong>für</strong> gruppierte Variablen — siehe Beispiel in session8.r<br />

Syntax:<br />

dotchart(x, labels = NULL, groups = NULL, gdata = NULL,<br />

Argumente<br />

bg = par("bg"), cex = par("cex"), pch = 21,<br />

gpch = 21, color = par("fg"), gcolor = par("fg"),<br />

lcolor="gray",main=NULL,xlab=NULL,ylab=NULL,...)<br />

– labels: String–Vektor mit Namen <strong>für</strong> jeden Punkt<br />

– groups: Gruppeneinteilung<br />

– gdata: Gruppen–Daten; normalerweise summary–Werte<br />

<br />

– gpch: Symbol(e) <strong>für</strong> die Gruppenvariablen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

387


– gcolor, lcolor: Gruppen–/ Labelfarbe<br />

– Rest wie barplot<br />

4.4.2 (d) Tortendiagramme — pie<br />

in R: pie<br />

Zitat aus der R–Hilfe<br />

Pie charts are a very bad way of displaying<br />

information. The eye is good at judging linear measures<br />

and bad at judging relative areas. A bar chart or dot chart<br />

is a preferable way of displaying this type of data.<br />

daher hier nicht ausführlich behandelt<br />

siehe Beispiel in session8.r<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

388


4.4.3 multivariate Diagramme<br />

bisher maximal Paare von Zufallsvariablen auf einmal betrachtet<br />

Wie visualisiert man multivariate Daten?<br />

4.4.3 (a) Scatterplots<br />

in einem matrix–artigen Schema wird jede Variable gegen jede<br />

abgetragen<br />

in R: pairs<br />

R–Beispiel 4.4-3 [Fertilität <strong>und</strong> soz.ök. Faktoren in CH]:<br />

#E i n l a d e n n o t w e n d i g e r B i b l i o t h e k e n<br />

l i b r a r y (MASS ) ; l i b r a r y ( modreg ) ; data ( s w i s s )<br />

#I n f o<br />

<br />

u e b e r Datensatz<br />

h e l p ( s w i s s )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

389


#Wandeln i n Data . frame<br />

s w i s s . d f data . frame (<br />

F e r t i l i t y =s w i s s [ , 1 ] , s w i s s [ , 1])<br />

#Funktion zum s i m u l t a n e n P l o t t e n d e r Punkte<br />

# <strong>und</strong> e i n e r l o k a l e n r o b u s t e n R e g r e s s i o n<br />

p o i n t s . l i n e s f u n c t i o n ( x , y , . . . )<br />

{ p o i n t s ( x , y , . . . ) ;<br />

l i n e s ( l o e s s . smooth ( x , y ) , . . . ) }<br />

#Erzeugen des S c a t t e r p l o t s<br />

p a i r s ( s w i s s . df , p a n e l=p o i n t s . l i n e s , pch =3,<br />

mkh=0.03 , cex =0.4)<br />

4.4.3 (b) matplot<br />

plottet die Spalten einer Matrix x gegen die einer anderen y;<br />

genauer:<br />

– x[,1] wird gegen y[,1], x[,2] gegen y[,2] u.s.w.<br />

geplottet.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

390


– Hat eine der beiden Matrizen weniger Spalten als die andere,<br />

werden die Spalten wie üblich zyklisch aufgefüllt;<br />

– insbesondere: x oder y kann ein Vektor sein, gegen den dann<br />

alle Koordinaten von y resp. x geplottet werden;<br />

Syntax:<br />

matplot(x, y, type = "p", lty = 1:5, lwd = 1, pch = NULL,<br />

Argumente<br />

– wie bei plot<br />

col = 1:6, cex = NULL, xlab = NULL, ylab = NULL,<br />

xlim = NULL, ylim = NULL,..., add = FALSE,<br />

verbose = getOption("verbose"))<br />

entsprechend zu points, lines : matpoints, matlines<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

391


4.4.3 (c) weitere Methoden in R / S-<strong>Plus</strong><br />

Star/Radar–Plots: stars — Darstellung als Sterne/Spinnen<br />

Symbol–Plots: symbols — Darstellung als Kreise, Quadrate,<br />

Rechtecke, Sterne, Thermometer oder Boxplots<br />

nur in S-<strong>Plus</strong>:<br />

2D–Histogramme : hist2d<br />

Bi-Plots : biplots — gemeinsame Darstellung von Zeilen– <strong>und</strong><br />

Spaltenraum einer multivariaten Variable in einem Plot<br />

Chernoff–Gesichter : faces — Darstellung als Gesichter; in R in<br />

Paket aplpack<br />

brush and spin<br />

<br />

: brush — interaktives Betrachten der Daten<br />

durch Rotation <strong>und</strong> Markierung von Teilmengen<br />

nicht in R hier nur eine Demo, siehe auch session8.r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

392


4.4.4 Interaktive Graphik<br />

ist eigentlich kein Ziel von R<br />

delegiert an andere Pakete Interfaces<br />

4.4.4 (a) Zusatzpaket <strong>für</strong> interaktive Graphik: TclTk<br />

basiert auf Tcl ( T ool Command Language), siehe auch<br />

http://www.msen.com/~clif/TclTutor.html <strong>und</strong> dem da<strong>für</strong><br />

plattformübergreifend zur Verfügung stehenden Toolkit (Tk) <strong>für</strong><br />

GUIs [lies “tickeltikej”]<br />

Interface von R zu tcltk<br />

– Autor ist Peter Dalgaard<br />

– wird bei der Standardinstallation automatisch mitinstalliert<br />

<br />

zum Anfangen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

393


– Artikel “A Primer on the R-Tcl/Tk package” <strong>und</strong> “Changes<br />

to the R-Tcl/Tk package” von Peter Dalgaard<br />

– Beispiele tkdensity <strong>und</strong> tkttest im Paket tcltk —<br />

abzurufen mit demo(tkdensity), demo(tkttest)<br />

– Beispiele von James Wettenhall auf<br />

http://bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/<br />

auf dieser Basis: die plattformunabhängige GUI (graphische<br />

Benutzeroberfläche) von J. Fox: R-Commander (Paket Rcmdr)<br />

4.4.4 (b) Zusatzpaket <strong>für</strong> interaktive Graphik: XGobi/GGobi<br />

entwickelt bei ATT von Swayne, Cook, Buja<br />

zunächst <strong>für</strong> X–Server geschrieben — frei verfügbar unter<br />

http://www.research.att.com/areas/stat/xgobi/<br />

fortentwickelt auf Basis von Gtk zu GGobi<br />

<br />

ausführliches Manual unter http://www.ggobi.org/manual.pdf<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

394


Interfaces gibt auch <strong>für</strong> R xgobi <strong>für</strong> Windows <strong>und</strong> Unix<br />

Interfaces von R zu X/GGobi<br />

– <strong>für</strong> XGobi: Paket xgobi<br />

– interaktiv<br />

£ genauer steht dieses Interface in Version 1.2-5 unter dem<br />

angegebenen Link zur Verfügung<br />

£ Autoren sind Martin Maechler <strong>und</strong> Kurt Hornik<br />

– <strong>für</strong> GGobi: Paket Rggobi<br />

£ Autor ist Duncan Temple Lang<br />

Ziel: Visualisierung hochdimensionaler Daten<br />

Ideen:<br />

– Daten in mehreren Perspektiven simultan in verschiedenen<br />

Fenstern anschauen<br />

£ Projektionen auf zwei Koordinaten<br />

£ Verwendung “paralleler” Koordinaten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

395


£ Beobachtungen identifizieren Labelling<br />

£ Untergruppen in anderer Farbe einfärben<br />

(transient/permanent) Brushing<br />

– dabei stets entsprechende Reaktion der anderen Fenster —<br />

einfärben, labeln<br />

Demo mit<br />

l i b r a r y ( Rggobi )<br />

? g g o b i<br />

g g o b i ( system . f i l e ( " data " , " f l e a . xml " ,<br />

package=" Rggobi " ) , c ( " n o i n i t " , " xml " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

396


4.4.5 Filme<br />

Abschnitt beruht auf Hinweisen von Matthias Templ<br />

benötigt: entweder R-Paket rgl+ImageMagick, vgl.<br />

http://magick.imagemagick.org/script/index.php<br />

oder R-Paket caTools<br />

Vorgehen bei rgl+ImageMagick<br />

– Erzeugen einer Sequenz von png’s mit rgl .snapshot<br />

– unter Windows: mit DOS-Kommando<br />

convert -delay 10 *.png -loop 0 pic.gif<br />

wird ein Film-gif erzeugt<br />

– unter Linux: komfortabler — Sequenz markieren <strong>und</strong> auf<br />

convert "werfen"<br />

Vorgehen bei caTools<br />

<br />

– Abspeichern der Folge von 2dim Graphiken als 3dim -Graphik<br />

mit der dritten Achse als Zeitachse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

397


– Erzeugen des .gif-Files mit write.gif<br />

Beispiel von Matthias Templ: demorgl.R <strong>und</strong> mandelbrot2.R<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

398


4.4.6 Flächendiagramme<br />

Für univariate Funktionen in zwei Variablen (z.B. ) kann<br />

man 3D–Plotfunktionen verwenden<br />

in R zur Verfügung stehende Methoden<br />

<br />

– perspektivischer 3D–Plot: persp<br />

– Plot der Niveaulinien: contour<br />

– farbkodierter Niveaulinienplot: image<br />

hier keine ausführliche Beschreibung der Funktionsweise<br />

siehe Demonstration <strong>und</strong> session8.r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

399


4.5 Grafikaufbereitung<br />

4.5.1 mehrere Plots in einem Diagramm<br />

4.5.1 (a) mehrere Plots nebeneinander in einem/mehreren Fenster(n)<br />

erste Methode: (ein Fenster)<br />

<br />

– par(mfrow=c(,)),<br />

– par(mfcol=c(,))<br />

zweite Methode: (mehrere Fenster)<br />

– mit windows() oder x11() neues Fenster öffnen<br />

– split .screen(fig=c(,)),<br />

– interaktiv mit split .screen(prompt.screen()),<br />

– ungleiche Größen mit<br />

split .screen(fig=(matrix(,,4)),<br />

wobei jede Zeile der Matrix von der Form<br />

(,,,) ist <strong>und</strong> alle<br />

Koordinaten in sind;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

400


– Zugriff mit screen(),<br />

– Schließen einzelner / aller Figuren/Screens mit<br />

close .screen(), bzw. (all=T)<br />

dritte Methode: (ein Fenster)<br />

layout — siehe auch Referat Matthias Brandl, Abschnitt 4.2<br />

Weiterschalten von verschiedenen Figuren: frame<br />

4.5.1 (b) mehrere Plots übereinander in einer Figur<br />

um da<strong>für</strong> zu sorgen, dass in dieselbe Figur geplottet wird:<br />

par(new=T) ab dem zweiten überlagerndem Plot<br />

um <strong>für</strong> eine einheitliche Skalierung zu sorgen: Verwendung von<br />

xlim, ylim<br />

um <strong>für</strong> eine einheitliche Beschriftung zu sorgen:<br />

– Setzen von xlab="", ylab="" in allen bis auf dem letzten Plot<br />

<br />

– Beschriftung durch xlab, ylab, title , sub erst im letzten Plot<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

401


neue Linien / Punkte in bestehenden Plot ohne weiteren Aufruf<br />

von plot (): line (), points(), matline(), matpoints() abline (),....;<br />

<br />

R–Beispiel 4.5-1 [Überlagern mit untersch. Gittern]:<br />

x1 seq ( 3.3 ,3 , l e n g t h =100)<br />

y1 3£ s i n (2 £ x1 )<br />

x2 seq ( 4 ,3.7 , l e n g t h =200)<br />

y2 2£ s i n (3 £ x2 )<br />

par ( new=T)<br />

#b e a c h t e : u n t e r s c h i e d l i c h e G i t t e r !<br />

xg c ( min ( c ( x1 , x2 )) 0.1 ,<br />

max( c ( x1 , x2 ) )+0.1)<br />

yg c ( min ( c ( y1 , y2 )) 0.1 ,<br />

max( c ( y1 , y2 ) )+0.1)<br />

p l o t ( x1 , y1 , t y p e=" l " , c o l=" r e d " , x l i m=xg ,<br />

y l i m=yg , x l a b="" , y l a b="" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

402


p l o t ( x2 , y2 , t y p e=" l " , c o l=" b l u e " , x l i m=xg ,<br />

y l i m=yg , x l a b="x" , y l a b="y" )<br />

t i t l e ( p a s t e ( " zwei ␣ v e r s c h i e d e n e ␣ Funktionen " ,<br />

" f1 , f 2 ␣ i n ␣ einem ␣ P l o t " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

403


y<br />

−3 −2 −1 0 1 2 3<br />

zwei verschiedene Funktionen f1,f2 in einem Plot<br />

−4 −2 0 2 4<br />

x<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

404


4.5.2 Hinzufügen von Information<br />

4.5.2 (a) Einfügen von Linien, Punkten etc.<br />

Befehle: abline, polygon,points, lines , segments, arrows, text<br />

Beachte die Verwendung von Expressions wie in<br />

Abschnitt 4.5.4 zum Erzeugen mathematischer Formeln /<br />

Symbole<br />

siehe auch Referat Matthias Brandl, Abschnitt 4.2<br />

4.5.2 (b) zusätzliche Achsen <strong>und</strong> Gitter<br />

manchmal sinnvoll: mehrere Achsen parallel — z.B. Celsius <strong>und</strong><br />

Fahrenheit<br />

<br />

gelöst durch den Befehl axis<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

405


Syntax:<br />

axis(side, at = NULL, labels = TRUE, tick = TRUE, line = 0,<br />

Argumente:<br />

pos = NA, outer = FALSE, font = NA, vfont = NULL, ...)<br />

– side: Zahl zwischen <strong>und</strong> — unten, links, oben,<br />

rechts,<br />

– at: Vektor von Punkten, an denen Achsen–Ticks gezeichnet<br />

werden sollen<br />

– labels:<br />

£ entweder (logisch) — numerische Beschriftung der<br />

Achsen–Ticks?<br />

£ oder ein Stringvektor dessen Elemente an die<br />

Achsen–Ticks geschrieben werden sollen<br />

– tick: (logisch) sollen Achsen–Ticks gezeichnet werden?<br />

– line: Abstand mit der die Achse zur Originalachse gezogen<br />

wird; setzt den Wert des par–Parameters mgp[3] außer Kraft;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

406


die relative Position der Achsen–Ticks bleibt unverändert<br />

– pos: Position der (neuen) Achse in der anderen Koordinate;<br />

setzt die Werte von line <strong>und</strong> mgp[3] außer Kraft.<br />

– outer: (logisch) Soll die Achse in den äußeren Rand statt in<br />

den “normalen” Rand geschrieben werden?<br />

– font: Schrifttyp <strong>für</strong> den Text<br />

– vfont: Vektor–Schrifttyp (TT <strong>für</strong> den Text<br />

– tck: Länge der Achsen–Ticks (zwischen <strong>und</strong> )<br />

– ...: weitere Graphikparameter<br />

4.5.2 (c) Legenden<br />

mit der Funktion legend können Legenden eingefügt werden<br />

Syntax:<br />

legend(x, y, legend, fill, col = "black", lty, lwd, pch,<br />

<br />

angle = NULL, density = NULL, bty = "o",<br />

bg = par("bg"), pt.bg = NA, cex = 1,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

407


Argumente<br />

xjust = 0, yjust = 1, x.intersp = 1,<br />

y.intersp = 1, adj = 0, text.width = NULL,<br />

merge = do.lines && has.pch, trace = FALSE, ncol = 1,<br />

horiz = FALSE)<br />

– x, y: x– <strong>und</strong> y–Koordinaten der Legende<br />

– legend: ein Stringvektor oder eine Expression wie in<br />

Abschnitt 4.5.4 der Länge mit dem Inhalt der Legende<br />

– fill: falls spezifiziert werden Boxen mit der Farbe gefüllt<br />

– col, lty, lwd, pch, cex: Parameter <strong>für</strong> Linien, Punkte,<br />

Symbole in der Legende — wie in plot<br />

– angle, density: Schraffurparameter wie in barplot<br />

– bg: Hintergr<strong>und</strong>farbe der Legenden–Box<br />

– pt.bg: Hintergr<strong>und</strong>farbe der Punkte<br />

– xjust, yjust: wie die Legenden–Box ausgerichtet wird; <br />

links/unten zentriert <strong>und</strong> rechts/oben.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

408


– x.intersp, y.intersp: Zeichenabständen<br />

(horizontal/vertikal)<br />

– adj: die Stringausrichtung des Legendentextes; nützlich bei<br />

Verwendung von Expressions wie in Abschnitt 4.5.4<br />

– text.width: Breite des Legendentextes in<br />

Benutzerkoordinaten;<br />

– merge: (logisch) Sollen Punkte <strong>und</strong> Linien vereinigt werden?<br />

– trace: (logisch) Sollen die Berechnungen von legend<br />

transparent sein?<br />

– ncol: Zahl der Spalten, in die die Legende aufgeteilt werden<br />

soll<br />

– horiz:( logisch) soll die Legende horizontal statt vertikal<br />

gesetzt werden? — setzt ncol außer Kraft.<br />

Rückgabewert: eine (unsichtbare) Liste von<br />

– rect: eine Liste mit Komponenten<br />

£ w, h (positive Zahlen: die Breite <strong>und</strong> Höhe der<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

409


Legenden–Box)<br />

£ left, top x– <strong>und</strong> y–Koordinaten der linken oberen<br />

Eckpunktes der Box<br />

– text: eine Liste mit Komponenten: x,y — numerische<br />

Vektoren in der Länge der Legende, mit den x– <strong>und</strong><br />

y–Koordinaten des Legendentexts<br />

4.5.2 (d) Titel, Randbeschriftungen<br />

die Befehle title , mtext<br />

siehe Referat Matthias Brandl, Abschnitt 4.2<br />

man beachte auch die Verwendung von Expressions wie in<br />

Abschnitt 4.5.4 zum Erzeugen mathematischer Formeln /<br />

Symbole<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

410


4.5.3 interaktives Bearbeiten<br />

manchmal sinnvoll: Punkte interaktiv identifizieren, Objekte<br />

interaktiv platzieren<br />

Identifizieren von Punkten / Beobachtungen durch identify<br />

Syntax: identify (x, ...) oder<br />

identify (x, y = NULL, labels = seq(along = x),<br />

pos = FALSE, n = length(x), plot = TRUE,<br />

offset = 0.5, ...)<br />

Argumente<br />

– x, y: Koordinaten der Punkte eines Scatterplots oder<br />

alternativ irgendein Objekt das Koordinaten definiert (z.B.<br />

eine Plot–Struktur eine Zeitreihe etc.); Übergabe auch als x<br />

allein möglich (y dann <strong>und</strong>efiniert).<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

411


– labels: ein optionaler Stringvektor der Länge von (x,y),<br />

mit Namen/Labeln <strong>für</strong> die Punkte.<br />

– pos: (logisch) — soll eine zusätzliche Komponente zum<br />

Rückgabewert hinzugefügt werden, der angibt, wohin der<br />

Name in Bezug auf das zu identifierende Objekt geplottet<br />

werden soll — ( unten, links, oben, <br />

rechts).<br />

– n: Maximalzahl an zu identifizierenden Objekten<br />

– plot: (logisch) sollen die Label an die Punkte geschrieben<br />

werden?<br />

– offset: der Abstand (in Zeichenweite) in dem die Label zum<br />

Objekt geschrieben werden;<br />

– ...: weitere Argumente an par.<br />

Details:<br />

– ist plot TRUE, so wird der identifizierte Punkt mit einem<br />

Label versehen;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

412


– dieser Label wird je nach Klickposition (in Bezug auf den<br />

identifizierten Punkt) unten, links, oben oder rechts gesetzt;<br />

– der Identifikations–Prozess wird durch Klicken mit der<br />

rechten Maustaste <strong>und</strong> anschliessender Auswahl des<br />

Menupunktes ‘Stop’ im Grafikfenster abgeschlossen<br />

– wird das Grafikfenster vor Abschluss des<br />

Identifikations–Prozesses umskaliert <strong>und</strong> anschließend das<br />

Fenster neu gezeichnet, verschwinden alle bis dahin<br />

identfizierten Label; sie werden erneut erscheinen, sobald der<br />

Identifikations–Prozess abgeschlossen ist <strong>und</strong> das Fenster<br />

neugezeichnet wird.<br />

Rückgabewert<br />

– ist pos FALSE, wird ein Integer–Vektor zurückgegeben mit<br />

den Indizes der identifizierten Punkte.<br />

– sonst wird dieser Vektor als Komponente ind mit einem<br />

weiteren Integer–Vektor — dieser als pos — zu einer Liste<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

413


zusammengefasst, in dem dann der Code <strong>für</strong> die relative<br />

Position des Labels steht<br />

identify wird im allgemeinen zusammen mit locator benutzt;<br />

locator liest die aktuelle Cursor–Position bei Klicken der linken<br />

Maustaste;<br />

Syntax: locator(n = 512, type = "n", ...)<br />

Argumente<br />

– n: wie bei identify<br />

– type: Punkt/Linientyp wie bei plot<br />

– ...: weitere Graphikargumente, die genutzt werden, sofern<br />

type nicht "n" ist<br />

Beispiel: vergleiche 0.7<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

414


4.5.4 Mathematik in Labels<br />

vor allem im mathematischen Kontext, aber auch sonst, ist es<br />

oft nötig Formelzeichen wie Integrale, Brüche u.s.w. exakt<br />

darzustellen — sei es in Überschriften, in Legenden, in<br />

Achsenbeschriftungen<br />

in der mathematischen Fachliteratur hat sich hierzu TEX / L ATEX<br />

durchgesetzt<br />

in R ist so etwas ähnliches möglich, indem der in<br />

“Mathematik–Modus” zu plottende Text als expression<br />

deklariert wird<br />

<br />

R–Beispiel 4.5-2 [mathem. Ausdrücke in Überschrift]:<br />

x seq ( 4 , 4 , l e n = 101)<br />

y c b i n d ( s i n ( x ) , cos ( x ) )<br />

<br />

matplot ( x , y , t y p e= " l " , x a x t= "n" ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

415


main= e x p r e s s i o n ( p a s t e ( p l a i n ( s i n ) £ phi ,<br />

"␣␣and␣␣" , p l a i n ( cos ) £ p h i ) ) ,<br />

y l a b= e x p r e s s i o n ( " s i n " £ phi , " cos " £ p h i ) ,<br />

# o n l y 1 s t i s taken<br />

x l a b= e x p r e s s i o n ( p a s t e ( " P h a s e n w i n k e l ␣" , p h i ) ) ,<br />

c o l . main= " b l u e " )<br />

a x i s ( 1 , at= c( pi , p i / 2 , 0 , p i / 2 , p i ) ,<br />

l a b= e x p r e s s i o n ( pi , p i / 2 , 0 , p i / 2 , p i ) )<br />

weitere Beispiele siehe help(plotmath) bzw. in session8.r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

416


sinφ<br />

−1.0 −0.5 0.0 0.5 1.0<br />

sinφ and cosφ<br />

− π − π 2 0 π 2 π<br />

Phasenwinkel φ<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

417


4.6 Bedingte Plots<br />

Situation: drei abhängige Variablen , <strong>und</strong> <br />

Ziel: graphische Darstellung der Relation gegeben<br />

oder <strong>für</strong> vorgebene Werte oder Regionen <br />

in R: durch coplot — Berechnung der Regionen durch<br />

<br />

co. intervals<br />

Spezifikation des “Ziels” durch Eingabe einer Formel — siehe<br />

auch Abschnitt 7.1.1 (b) — vom Typ X~Y|Z<br />

Literatur: Cleveland (1993)<br />

Syntax: co. intervals (x, number = 6, overlap = 0.5) <strong>und</strong><br />

coplot(formula, data, given.values, panel = points, rows,<br />

columns, show.given = TRUE, col = par("fg"),<br />

pch = par("pch"), bar.bg = c(num = gray(0.8),<br />

fac = gray(0.95)), subscripts = FALSE,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

418


xlab = c(x.name, paste("Given :", a.name)),<br />

ylab = c(y.name, paste("Given :", b.name)),<br />

axlabels = function(f) abbreviate(levels(f)),<br />

number = 6, overlap = 0.5, xlim, ylim, ...)<br />

co. intervals (., number, .) gibt eine number ¢ –Matrix ci<br />

zurück, wobei ci[k,] das –te Bedingungsintervall an<br />

x–Werten ist<br />

Argumente<br />

– x: ein numerischer Vektor<br />

– formula: (Formel) die Formel die den Co-Plot definiert; zu<br />

deren Syntax siehe Abschnitt 7.1.1 (b) zwei Typen: y ~ x | a<br />

<strong>und</strong> y ~ x| a £ b; bei letzterer wird nach den gemeinsamen<br />

Werten von (a,b) bedingt<br />

– data: ein Data–Frame, der alle Beobachtungen in den<br />

Variablen (x,y,a[,b]) enthält<br />

<br />

– panel: (Funktion vom Typ function(x, y, col , pch, ...) ):<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

419


gibt an, welche Aktion in jedem der Panels des Fensters<br />

durchgeführt werden soll; per default: points<br />

– rows, columns: die Panels werden in einer Tabelle abgelegt;<br />

rows gibt die Zeilenanzahl der Tabelle an, columns die<br />

Spaltenzahl<br />

– given.values: Bedingungswerte:<br />

£ ein Objekt (oder eine Liste von zwei Objekten), die die<br />

Bedingungswerte <strong>für</strong> a (<strong>und</strong> b) festlegt;<br />

£ liegt nur a vor:<br />

¡ gewöhnlich eine Matrix mit zwei Spalten, deren Zeilen<br />

die Bedingungs–Intervalle angeben<br />

¡ auch ein einzelner Werte–Vektor ist möglich<br />

¡ oder eine Menge von Faktor–Niveaus (sofern die<br />

bedingende Variable ein Faktor ist)<br />

¡ das Resultat von co. intervals kann direkt als Argument<br />

<strong>für</strong> given.values verwendet werden<br />

– show.given: (logisch) (möglicherweise der Dimension ¢ )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

420


sollen die bedingten Plots der entsprechenden bedingenden<br />

Variable ausgegeben werden?<br />

– col, pch: siehe plot<br />

– bar.bg: ein Vektor mit Komponentennamen "num" <strong>und</strong><br />

"fac" der die Hintergr<strong>und</strong>farben der Säulen <strong>für</strong> die<br />

numerischen bzw. Faktor–wertigen Variablen angibt<br />

– xlab, ylab: (String) Beschriftung <strong>für</strong> die x–Achse <strong>und</strong> die<br />

erste bedingende Variable (y–Achse <strong>und</strong> die zweite<br />

bedingende Variable). Ist nur ein Label angegeben, wird er<br />

<strong>für</strong> die x(y)–Achse verwendet <strong>und</strong> die default–Beschriftung<br />

<strong>für</strong> die bedingende Variable.<br />

– subscripts: (logisch) Soll der Panel–Funktion ein<br />

zusätzliches (drittes) Argument subscripts übergeben<br />

werden, das die übergebenen Beobachtungen auf die in<br />

subscripts angegeben einschränkt?<br />

<br />

– axlabels: (Funktion): erzeugt die<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

421


Achsen–Tick–Beschriftungen sofern x oder y Faktoren sind<br />

– number: (Integer) Zahl der Bedingungsintervalle <strong>für</strong> a, b —<br />

möglicherweise der Länge . Wird nur benutzt, wenn die<br />

entsprechende bedingende Variable kein Faktor ist<br />

– overlap: (numerisch), ; der Anteil an Überlappung der<br />

Bedingungsintervalle; möglicherweise der Länge <strong>für</strong> x <strong>und</strong> y<br />

– Richtung. Ist overlap < 0, werden Lücken zwischen die<br />

Intervalle gelegt.<br />

– xlim, ylim: der Plotbereich <strong>für</strong> die x(y)–Achse.<br />

– ...: weitere Argumente <strong>für</strong> die Panel–Funktion<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

422


R–Beispiel 4.6-1 [Bedingte Plots]:<br />

#E i n l a d e n n o t w e n d i g e r B i b l i o t h e k e n<br />

l i b r a r y (MASS ) ; l i b r a r y ( modreg )<br />

#I n f o u e b e r Datensatz<br />

data ( s w i s s ) ; h e l p ( s w i s s )<br />

#Wandeln i n Data . frame<br />

s w i s s . d f data . frame (<br />

F e r t i l i t y =s w i s s [ , 1 ] , s w i s s [ , 1])<br />

#S c h r e i b e n e i n e r Funktion zum s i m u l t a n e n P l o t t e n<br />

#d e r Punkte <strong>und</strong> e i n e r l o k a l e n r o b u s t e n R e g r e s s i o n<br />

p o i n t s . l i n e s f u n c t i o n ( x , y , . . . )<br />

{ p o i n t s ( x , y , . . . ) ;<br />

l i n e s ( l o e s s . smooth ( x , y ) , . . . ) }<br />

#Erzeugen des Co P l o t s<br />

c o p l o t ( F e r t i l i t y ~E d ucation<br />

<br />

| C a t h o l i c ,<br />

data=s w i s s . df , p a n e l=p o i n t s . l i n e s )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

423


Fertility<br />

40 50 60 70 80 90<br />

0 10 20 30 40 50<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

● ●<br />

●<br />

●<br />

●●<br />

●<br />

● ●●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

Given : Catholic<br />

20 40 60 80 100<br />

● ●<br />

●<br />

●●<br />

●<br />

● ●<br />

●<br />

●<br />

● ●<br />

●<br />

●<br />

●<br />

●<br />

● ●●<br />

●<br />

●<br />

●<br />

●<br />

0 10 20 30 40 50<br />

Education<br />

●<br />

0 10 20 30 40 50<br />

●●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

● ●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

40 50 60 70 80 90<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

424


4.7 Export von Daten <strong>und</strong> Graphik<br />

nach einem Referat von Matthias Kohl vom 10.06.2002<br />

Hinweis: Nicht (explizit) betrachtet werden hier die<br />

Exportmöglichkeiten via Verbindungen (connections) zu anderen<br />

Programmen wie etwa SPSS, SAS, SQL-Datenbanken, ...<br />

(Diese Verbindungen sind auch in erster Linie <strong>für</strong> den Import von<br />

Daten vorgesehen)<br />

4.7.1 Export von Daten<br />

4.7.1 (a) Export–Funktionen<br />

cat(..., file="", sep=" ", append=FALSE, ...):<br />

Schreibt die angegeben Objekte in ein File.<br />

file="": Ausgabe erfolgt auf die Konsole.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

425


write(x, file="data", ncolumns=if(is.character(x))<br />

1 else 5, append=FALSE):<br />

Schreibt die Daten aus x in ein file (default: ein File mit<br />

Namen data).<br />

ncolumns: Anzahl der Spalten, in die die Daten geschrieben<br />

werden<br />

write.table(x, file="", append=FALSE, quote=TRUE,<br />

sep="", dec=".", row.names=TRUE, col.names=TRUE,<br />

...):<br />

Schreibt die Daten aus dem Objekt x, in der Regel ein<br />

Dataframe, in eine Datei.<br />

quote=TRUE: es werden Anführungszeichen gesetzt<br />

write.matrix(x, file="", sep=" ", blocksize):<br />

Bestandteil der library MASS<br />

Schreibt eine Matrix oder einen Dataframe in eine Datei<br />

Generiert eine “spaltenorientierte” Ausgabe<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

426


locksize >= 0: das Object x wird in Blöcken mit jeweils<br />

blocksize Zeilen ausgegeben<br />

(effiziente Speichernutzung, es können auch sehr große Matrizen<br />

ausgegeben werden, möglicherweise die Blöcke leicht<br />

unterschiedlich formatiert).<br />

save(..., list=character(0), file="",<br />

envir=parent.frame(), ...)<br />

Speichert die Objekte, die mit ihren Namen oder mit Hilfe eines<br />

character Vektors angegeben werden können.<br />

Zur Portierung von Objekten zwischen verschiedenen<br />

Plattformen/Rechnern<br />

envir: Frame, in dem nach dem Objekt gesucht wird.<br />

Zum Laden gespeicherter Objekte: load()<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

427


4.7.1 (b) Beispiel <strong>für</strong> den Export nach Excel<br />

Vorgehensweise:<br />

Erzeuge einen Dataframe bzw. ein in einen Dataframe<br />

umwandelbares Objekt<br />

Exportiere in eine Datei:<br />

write.table(X, file="a:export.txt", dec=",",<br />

row.names=FALSE)<br />

Start von Excel <strong>und</strong> öffnen einer Textdatei<br />

Hinweis: Es gibt auch die Möglichkeit R unter Excel aufzurufen <strong>und</strong><br />

via einer DCOM-Verbindung zwischen R <strong>und</strong> Excel Daten<br />

auszutauschen (vgl. auch Abschnitt 1.3.4). Die notwendige Software<br />

findet man unter:<br />

http://cran.r-project.org/other-software.html<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

428


4.7.2 Export von Graphik<br />

4.7.2 (a) Graphik Devices<br />

Mit Hilfe von ?Devices Ausgabe der vorhanden Grafik Devices.<br />

Diese sind (unter Windows):<br />

windows(...): Öffnet auf dem aktuellen Display ein neues<br />

Grafik Fenster<br />

x11(...): Öffnet ein auf einem X Window System ein neues<br />

Grafik Fenster<br />

postscript(...): vgl. Vorlesung<br />

pdf(...): pdf-Dateien<br />

pictex(...): tex-Dateien zur Verwendung in TEX bzw. L ATEX<br />

win.metafile(...): wmf-Dateien<br />

<br />

win.print(...): Ausgabe auf Drucker<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

429


jpeg(...): jpeg-Dateien<br />

png(...): png-Dateien, besser als jpeg <strong>für</strong> die Darstellung<br />

von Linien geeignet<br />

bmp(...): bmp-Dateien<br />

xfig(...): fig-Dateien zur Verwendung in XFig (version 3.2)<br />

bitmap(...): verschiedene Grafik Formate (z.B. jpeg, png,<br />

tiff, ...), benötigt eine Version von ghostscript!<br />

dev.off(): Schließen der Grafik Device<br />

4.7.2 (b) Beispiel <strong>für</strong> den Export nach PowerPoint<br />

Starten der Grafik Device: win.metafile()<br />

Erzeugen der Plots<br />

Schließen der Grafik Device: dev.off()<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

430


Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

431


5 Schätzen <strong>und</strong> Testen<br />

5.1 klassische univariate Tests<br />

5.1.1 Abriss Testtheorie<br />

5.1.1 (a) Problemstellung<br />

Entscheidung zwischen Alternativen ist zu treffen<br />

zur Verfügung stehen Beobachtungen<br />

Voraussetzung: die Beobachtungen sind entweder gemäß<br />

(einem Element) der Hypothese (Nullhypothese) oder<br />

(einem Element) der Hypothese (Alternative) verteilt<br />

5.1.1 (b) Typen von Tests<br />

Zahl d. Elemente in Hypothese: einfach zusammengesetzt<br />

<br />

Art der Hypothese: parametrisch nichtparametrisch<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

432


“Richtung” der Hypothese: einseitig zweiseitig<br />

bei diskreten Verteilungen: randomisiert nicht–randomisiert<br />

nach Stichprobenumfang: exakt asymptotisch<br />

nach Art der Beobachtungen: Ein– Zwei–Stichprobentest<br />

5.1.1 (c) Güte von Tests<br />

Fehlertypen: Fehler erster <strong>und</strong> zweiter Art (– <strong>und</strong> –Fehler)<br />

Verlustfunktion: Kombination —<br />

unter Schranke an den Fehler erster Art<br />

(Signifikanzniveau; ausgewertet über ganz )<br />

Fehler zweiter Art minimieren<br />

(bzw. Macht maximieren; ausgewertet über ganz )<br />

bei zwei– oder mehrseitigen Tests: Unverfälschtheit,<br />

i.e. Fehler zweiter Art nie über <br />

<br />

– <strong>und</strong> –Fehler simultan durch größere Stichprobe verringerbar<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

433


5.1.1 (d) optimale Tests<br />

naheliegend: Finde diejenige Menge, auf der sich die<br />

unterstellten Maße gemäß bzw. maximal unterscheiden.<br />

interessant: Verteilung der Dichtequotienten (DQ)<br />

Neyman–Pearson–Lemma <strong>für</strong> einfach gegen einfach<br />

Test vom Neyman–Pearson–Typ:<br />

mit Teststatistik/Prüfgröße ergibt sich<br />

(ohne Randomisierung)<br />

<br />

<br />

<br />

<br />

falls ablehnen<br />

falls nicht ablehnen<br />

mit dem kritischen Wert — natürlich je nach Kontext auch<br />

mit “ ”<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

434


Ist die Realisation von , so heißt die ZV <br />

p-value <strong>und</strong> gibt das Signifikanzniveau an, zu dem der Test<br />

gerade noch ablehnen würde.<br />

bei monotonen DQ’s: Übertragung der Optimalitätsaussage auf<br />

einseitige / unter Unverfälschtheit zweiseitige Tests<br />

i.a. nur asymptotische Aussagen möglich ( ZGWS,<br />

Normalverteilung <strong>und</strong> abgeleitete Verteilungen)<br />

um Signifikanzniveau voll auszuschöpfen: bei diskreter<br />

Prüfgrößenverteilung Verbesserung der Macht durch<br />

randomisierte Entscheidung<br />

weitere Prinzipien (Stochastik II): Suffizienz, Invarianz<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

435


5.1.2 Gaußtest–Einstichprobenfall<br />

Modell: <br />

unbekannt<br />

<br />

, , bekannt, <br />

Hypothesen: (analoges auch mit “” “”)<br />

– <br />

– <br />

– <br />

Prüfgröße: , , (einseit. ) bzw. (zweiseit. )<br />

Kritischer Wert: <br />

Zweistichprobenfall analog — ebenfalls mit Gaußscher<br />

Prüfgrößenverteilung<br />

Umsetzung in R: so nicht implementiert;<br />

Ausweg: explizite Berechnung von als<br />

<br />

ccrit qnorm(alpha,mean=mu0,sd=sigma/sqrt(n))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

436


5.1.3 -Test <strong>für</strong> Mittelwert<br />

Modell: <br />

<br />

<br />

, ,<br />

– Einstichprobenfall: unbekannt, unbekannt,<br />

– Zweistichprobenfall: dazu sto. unabh. <br />

, unbekannt<br />

Hypothesen: (analoges auch mit “”“”)<br />

– <br />

– <br />

– <br />

Prüfgrößen:<br />

– Einstichprobenfall:<br />

£ einseitiges :<br />

<br />

<br />

<br />

mit <br />

<br />

<br />

,<br />

<br />

<br />

,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

437


£ zweiseitiges : <br />

– Zweistichprobenfall:<br />

£ einseitiges :<br />

<br />

<br />

<br />

<br />

<br />

<br />

mit , den entspr. an bzw. ausgewerteten<br />

Statistiken, <br />

£ zweiseitiges : <br />

Kritischer Wert: bzw. <br />

Umsetzung in R: in Paket ctest: ( classical tests) als t . test<br />

bzw. pairwise . t . test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

438


5.1.4 -Test <strong>für</strong> Varianzen<br />

<br />

Modell: , , unbekannt, <br />

bekannt oder unbekannt<br />

Hypothesen: (analoges auch mit “”“”)<br />

– <br />

– <br />

– <br />

Prüfgröße:<br />

– bekannt mit <br />

<br />

<br />

,<br />

– unbekannt , <br />

Kritischer Wert: , bzw. oberer <strong>und</strong> unterer Wert im<br />

zweiseitigen Fall;<br />

Umsetzung in R: so nicht implementiert; Ausweg: explizite<br />

Berechnung von <strong>für</strong> als ccrit qchisq(alpha,df=m)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

439


5.1.5 -Test <strong>für</strong> Varianzen<br />

<br />

Modell: , , dazu unabhängig,<br />

<br />

, , unbekannt, bekannt<br />

oder unbekannt (hier unbekannt)<br />

Hypothesen: (analoges auch mit “”“”)<br />

– <br />

– <br />

Prüfgröße: <br />

, <br />

Kritischer Wert: , bzw. oberer <strong>und</strong> unterer<br />

Wert im zweiseitigen Fall;<br />

Umsetzung in R: in Paket ctest: als var . test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

440


5.1.6 Binomialtest — Einstichprobenfall<br />

Modell: <br />

<br />

, , unbekannt<br />

Hypothesen: (analoges auch mit “”“”)<br />

– <br />

– <br />

Prüfgröße: Treffer, <br />

Kritischer Wert: , bzw. oberer <strong>und</strong> unterer<br />

Wert im zweiseitigen Fall;<br />

Umsetzung in R: in Paket ctest: als binom.test<br />

asymptotisch auch in R: in Paket ctest: als prop. test<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

441


5.1.7 exakter Test von Fisher —<br />

Zweistichprobenfall<br />

Modell: , , dazu unabhängig,<br />

<br />

, , unbekannt<br />

<br />

<br />

Hypothesen: (analoges auch mit “”“”)<br />

– <br />

– <br />

Prüfgröße: Treffer in Treffer in ,<br />

<br />

Kritischer Wert: , bzw. oberer <strong>und</strong><br />

unterer Wert im zweiseitigen Fall;<br />

Umsetzung in R: (mit entsprechenden Identifikationen) in Paket<br />

ctest: als fisher . test<br />

<br />

asymptotisch auch in R: in Paket ctest: als prop. test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

442


5.1.8 graphische Anpassungstests<br />

Modell: <br />

Hypothese:<br />

<br />

, <br />

<br />

bzw.<br />

<br />

graphische Überprüfung durch Plotten der Funktion<br />

<br />

<strong>für</strong> <br />

gute Anpassung <br />

Umsetzung in R: qqnorm bzw. qqplot; Einzeichnen der<br />

Winkelhalbierenden durch qqline<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

443


R–Beispiel 5.1-1 [Graph. Test mit synthetischen Daten]:<br />

# 200 Daten aus t5<br />

y r t (200 , df = 5)<br />

# V e r g l e i c h mit N o r m a l v e r t e i l u n g<br />

qqnorm ( y )<br />

# z u s a e t z l i c h d i e L i n i e t| >t e i n g e t r a g e n<br />

q q l i n e ( y , c o l = 2)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

444


Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

445


5.1.9 Shapiro–Wilk Normalverteilungstest<br />

— siehe auch<br />

http://www.itl.nist.gov/div898/handbook/prc/section2/prc213.htm<br />

Modell: <br />

<br />

<br />

, <br />

Hypothese: <br />

<br />

Prüfgröße: <br />

, liegt tabelliert vor<br />

Kritischer Wert: liegt tabelliert vor;<br />

Umsetzung in R: in Paket ctest: als shapiro . test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

446


5.1.10 Kolmogoroff(–Smirnoff)–Test<br />

<br />

Modell: , , unbekannt, bekannt<br />

oder dazu unabhängig, <br />

<strong>und</strong> unbekannt ,<br />

<br />

, <br />

Hypothese: <br />

(as.) Prüfgröße:<br />

– bekannt :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

, liegt tabelliert vor;<br />

– unbekannt :<br />

<br />

<br />

<br />

<br />

<br />

Kritischer Wert: liegt tabelliert vor;<br />

<br />

Umsetzung in R: in Paket ctest: als ks. test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

447


5.1.11 –Anpassungstest<br />

<br />

Modell: , , <br />

unbekannt, Kategorien “”, ,“”<br />

Bemerkung: entsteht auch durch Diskretisierung einer beliebigen<br />

Verteilungsfunktion , indem wir die Realisationen von <br />

klassieren<br />

Hypothese: <br />

<br />

<br />

Prüfgröße: <br />

<br />

– <br />

Kritischer Wert: <br />

<br />

<br />

¨ “” in © <br />

<br />

<br />

Umsetzung in R: in Paket ctest: als chisq . test<br />

<br />

,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

448


5.1.12 Wilcoxon–Rangtest<br />

Modell: , , unbekannt,<br />

oder dazu unabhängig, <br />

<strong>und</strong> unbekannt <br />

<br />

, , o.E. ,<br />

Hypothesen:<br />

<br />

– ist sym. um ist nicht sym. um <br />

– bei Paarung :<br />

ist symmetrisch um <br />

ist nicht symmetrisch um <br />

– haben selbes “Zentrum” <br />

haben nicht selbes “Zentrum”<br />

Prüfgröße:<br />

– positive negative , liegt<br />

tabelliert vor;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

449


– positive negative ,<br />

liegt tabelliert vor;<br />

<br />

– in , liegt<br />

tabelliert vor;<br />

Kritischer Wert: liegt tabelliert vor;<br />

Umsetzung in R: in Paket ctest: als wilcox . test<br />

5.1.13 Korrelationstest<br />

Modell: <br />

, ,<br />

Hypothese mit<br />

einem geeignetem Korrelationskoeffizienten, z.B.<br />

– klassischer Korrelationskoeffizient :<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

450


– Kendall’s :<br />

<br />

<br />

Kritischer Wert: liegt tabelliert vor;<br />

<br />

<br />

<br />

<br />

Sei . Dann ist<br />

<br />

<br />

<br />

<br />

– Spearman’s :<br />

mit in, in gilt:<br />

<br />

<br />

<br />

<br />

<br />

Prüfgröße: <br />

, liegt tabelliert vor;<br />

Umsetzung in R: in Paket ctest: als cor. test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

451


5.2 Schätzen eines Parameters<br />

5.2.1 Abriss der klassischen Schätztheorie<br />

5.2.1 (a) Problemstellung<br />

parametrisches Modell:<br />

eine Familie von W-Maßen auf bzw. <br />

parametrisiert durch Parameter aus einer offenen Menge<br />

¢ : ¢<br />

, <br />

zur Verfügung stehen Beobachtungen <br />

<br />

<br />

Aufgabe: Schätzung von , einer Funktion ¢ <br />

<br />

durch<br />

messbare Funktionen <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

452


5.2.1 (b) Typen von Schätzern<br />

Angabe einer möglichst “genauen” (zufälligen!) Näherung <strong>für</strong><br />

Punktschätzung<br />

Angabe einer möglichst “kleinen” (zufälligen!)<br />

Intervalls/Bereichs der mit gegebener WS einfängt<br />

Intervall–/Bereichsschätzung resp. Konfidenzintervalle<br />

Bayes–Schätzung<br />

– Bewertung der Wahrscheinlichkeit der verschiedenen ’s vor<br />

Kenntnis der à priori Verteilung,<br />

– Auffassen von als bedingte Wahrscheinlichkeit gegeben ,<br />

– mit erstellen der à posteriori Verteilung <strong>für</strong> <br />

gegeben <br />

– Schätzung von durch Erwartungswert dieser à posteriori<br />

Verteilung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

453


5.2.1 (c) Schätz–Methoden <strong>für</strong> Punktschätzer<br />

Momentenmethode<br />

Maximum–Likelihood–Prinzip<br />

M–Schätzer (Nullstellen einer M–Gleichung)<br />

L–Schätzer (Linearkombinationen von Ordnungsstatistiken)<br />

R–Schätzer (Schätzer basierend auf Rängen)<br />

Schätzer durch Bootstrap<br />

5.2.1 (d) Schätz–Methoden <strong>für</strong> Bereichsschätzer<br />

exakte Konfidenzintervalle mit Quantilsfunktion<br />

approximative Konfidenzintervalle mit<br />

Tschebyscheff–Ungleichung<br />

<br />

approximative Konfidenzintervalle durch Normalapproximation<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

454


5.2.1 (e) Güte von Schätzern<br />

Konsistenz: Gilt stochastisch / fast sicher?<br />

Unverzerrtheit: Gilt <strong>für</strong> alle ?<br />

Bemessung der Abweichung von zu durch<br />

Verlustfunktion, z.B. ¡ <br />

Gütekriterium: Risiko, i.e. erwarteter Verlust, z.B. MSE, ist zu<br />

minimieren Effizienz<br />

Konzentration der vorhandenden Information Suffizienz<br />

Wahrung von Invarianzeigenschaften des Modells Äquivarianz<br />

5.2.1 (f) optimale Schätzer<br />

Cramér–Rao–Schranke <strong>für</strong> die Varianz<br />

oft: Maximum Likelihood Schätzer (MLE) erreicht Schranke<br />

(zumindest asymptotisch)<br />

bei Beschränkung auf unverzerrte Schätzer: Prinzip “UMVU”<br />

<br />

bei Beschränkung auf lineare, unverzerrte Schätzer: Prinzip<br />

“BLUE”<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

455


5.2.2 Schätzen eines Parameters in R<br />

5.2.2 (a) “direkte Programmierung”<br />

Situation: MLE explizit analytisch zu ermitteln <strong>und</strong> auch<br />

Verteilung ist bekannt<br />

dann: einfaches Verwenden der Routinen in R, z.B. mean, IQR,<br />

bzw. zur Genauigkeit pbinom, qnorm, ....<br />

Beispiel — vgl. auch Blatt 8, Aufgabe A.8.1<br />

– <br />

– Lösung: , also mean<br />

mit <br />

<br />

<br />

<br />

, bekannt, gesucht <br />

– Angabe von –Konfidenzintervallen durch<br />

¦ qnorm <br />

Beispiel in R — Schätzung von in , falls unbekannt<br />

<br />

<strong>und</strong> <br />

<br />

gilt<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

456


R–Beispiel 5.2-1 [“direkte Programmierung”]:<br />

X rnorm ( 2 0 )<br />

# ML S c h a e t z e r : mean (X) , v a r (X)<br />

mmean (X ) ; V v a r (X)<br />

# G e n a u i g k e i t ?<br />

n l e n g t h (X)<br />

sn1 ( n/ ( n 1)£V)^0.5<br />

t1 qt ( 0 . 9 7 5 , df=n 1)/ s q r t ( n ) £ sn1<br />

cat ( " M i t t e l w e r t ␣ d e r ␣ e r s t e n ␣ S t i c h p r o b e ␣ w i r d ␣ mit " ,<br />

Xbo s o r t (Xb)<br />

"95%␣Ws␣ e i n g e f a n g e n ␣ durch ␣ [ " ,<br />

# mit B o o t s t r a p<br />

Xb numeric (1000)<br />

f o r ( i i n 1 : 1 0 0 0 )<br />

m1 t1 , " , " ,m1+t1 , " ] \ n" )<br />

Xb [ i ] mean ( sample (X, r e p l a c e=T) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

457


#<br />

cat ( " M i t t e l w e r t ␣ d e r ␣ e r s t e n ␣ S t i c h p r o b e ␣ w i r d ␣ mit " ,<br />

"95%␣Ws␣ e i n g e f a n g e n ␣ durch ␣ [ " ,<br />

Xbo [ 2 5 ] , " , " , Xbo [ 9 7 5 ] , " ] \ n" )<br />

5.2.2 (b) numerische Optimierung<br />

Angabe der Likelihood als Funktion in ¢ möglich,<br />

aber:<br />

– Likelihood nicht glatt in <br />

– keine analytische Angabe des (globalen) Maximums möglich<br />

Auswertung auf Gitter <strong>und</strong> Nutzung von which.max<br />

– Beispiel: Blatt 8, Aufgabe A.8.2, sowie:<br />

Schätzung der Freiheitsgrade einer -Verteilung durch ML<br />

R–Beispiel 5.2-2 [Gittersuche]:<br />

y r c h i s q (20 , df =4)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

458


d f t r y 1 : 4 0 # G i t t e r p u n k t e<br />

l i k e l i h o o d numeric ( 1 : 4 0 )<br />

f o r ( i i n 1 : 4 0 )<br />

l i k e l i h o o d [ i ] prod ( d c h i s q ( y , df=d f t r y [ i ] ) )<br />

d f e d f t r y [ which . max( l i k e l i h o o d ) ]<br />

#G e n a u i g k e i t mit B o o t s t r a p<br />

d f e b numeric (1000)<br />

f o r ( i i n 1 : 1 0 0 0 )<br />

{ yb sample ( y , r e p l a c e=T)<br />

f o r ( j i n 1 : 4 0 )<br />

l i k e l i h o o d [ j ] prod ( d c h i s q ( yb , df=d f t r y [ j ] ) )<br />

d f e b [ i ] d f t r y [ which . max( l i k e l i h o o d ) ] }<br />

dfebo s o r t ( d f e b )<br />

cat ( " wahre ␣ Zahl ␣ d e r ␣ F r e i h e h e i t s g r a d e ␣ w i r d ␣ mit " ,<br />

"95%␣Ws␣ e i n g e f a n g e n ␣ durch ␣ [ " ,<br />

dfebo [ 2 5 ] , " , " , dfebo [ 9 7 5 ] , " ] \ n" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

459


oder aber:<br />

– Parameter ist mehrdimensional<br />

– Nutzung der R–Funktionen optim oder optimize<br />

5.2.2 (c) numerisches Lösen von Gleichungen<br />

wie im vorigen Abschnitt, nur Likelihood glatt in <strong>und</strong> <br />

Finden des Maximums mit differentiellen Methoden als Nullstelle<br />

allgemeiner: bei Verwendung von M–Schätzern stößt man<br />

meistens auf nicht explizit lösbare Nullstellenprobleme<br />

Lösung von £ bzw. in <br />

mit R–Funktion uniroot<br />

Beispiel: Blatt 8, Aufgabe A.8.3 (a), sowie:<br />

numerisches Lösen der ML-Gleichung im Fall<br />

<br />

<br />

Es gilt £ £ <strong>und</strong> £ <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

460


R–Beispiel 5.2-3 [Maximierung mit uniroot]:<br />

x c ( 2 . 9 4 2 , 2 . 7 6 4 , 2 . 0 0 7 , 1 . 1 9 2 , 4.989 , 1 . 8 1 2 ,<br />

2 . 8 9 4 , 1 . 1 7 9 , 2 . 5 5 9 , 1 . 4 7 8 , 54.0169 ,<br />

1 . 3 8 2 )<br />

Lambda f u n c t i o n ( theta , y )<br />

{sum ( ( y t h e t a ) /(1+(y t h e t a )^2))}<br />

h e l p ( u n i r o o t )<br />

u n i r o o t ( Lambda , low= 20,up=20,<br />

f o r ( i<br />

<br />

i n 1 : 1 0 0 0 )<br />

t o l =1e 10, y=x , m a x i t e r =20)<br />

#Z u g r i f f a u f NS mit $ r o o t<br />

u n i r o o t ( Lambda , low= 20,up=20, t o l =1e 10,<br />

y=x , m a x i t e r =20)$ r o o t<br />

#G e n a u i g k e i t mit B o o t s t r a p<br />

thb numeric (1000)<br />

{ xb sample ( x , r e p l a c e=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

461


thb [ i ] u n i r o o t ( Lambda , low= 20,<br />

thbo s o r t ( thb )<br />

Bestimmung durch Bootstrap<br />

up=20, t o l =1e 10, y=xb ,<br />

m a x i t e r =20)$ r o o t }<br />

cat ( " wahrer ␣ Parameter ␣ t h e t a ␣ w i r d ␣ mit " ,<br />

"95%␣Ws␣ e i n g e f a n g e n ␣ durch ␣ [ " ,<br />

thbo [ 2 5 ] , " , " , thbo [ 9 7 5 ] , " ] \ n" )<br />

5.2.2 (d) Schätzgenauigkeit / Konfidenzintervall<br />

direkte Bestimmung (wie in Abschnitt 5.1.2.(a))<br />

theoretische Bestimmung mit Normalapproximation<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

462


5.2.3 Robuste Parameterschätzung in R<br />

5.2.3 (a) ein einführendes Beispiel<br />

Schätzung der Lokation unter Ausreißern<br />

Situation: –dimensionale Beobachtungen <br />

(ideales) Modell: , unbekannt, <br />

<br />

Kontaminations–Situation: ,<br />

unbekanntes <strong>und</strong> unkontrollierbares Maß<br />

<br />

konkret: , , ¦, ¦ , bekannt, unbekannt<br />

klassisch optimales Verfahren: <br />

unter Ausreißern: unbeschränkte Auslenkung!<br />

<br />

<br />

typische Anwender–Strategie: Verwerfe alle Beobachtungen <br />

mit “groß” (Hard Rejection)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

463


Problem: Auch in den verworfenen Beobachtungen steckt<br />

Information über !<br />

Alternative: ; verwertet alle<br />

Beobachtungen, viel stabiler als , aber auch viel mehr<br />

Beobachtungen nötig, um gleiche Effizienz zu erhalten<br />

(asympt.) Optimierungsproblem: finde ein Verfahren, das <strong>für</strong><br />

den mittleren quadratischen Fehler (MSE), also<br />

<strong>für</strong> alle Situationen, auch die kontaminierten,<br />

minimiert<br />

Lösung hier: One–Step–Konstruktion<br />

<br />

<br />

<br />

dabei werden <strong>und</strong> aus impliziten Gleichungen berechnet<br />

(vgl. Übung)<br />

Interpretation als Pseudobeobachtungen:<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

464


Interpretation der folgenden Grafik:<br />

– , , , M–Schätzer, <br />

<br />

– Ziffern: Beobachtungsindex<br />

– in grün: ideale Original–Beobachtungen,<br />

– in rot: kontaminierende Original–Beobachtungen,<br />

– in blau: Pseudobeobachtungen,<br />

– Kreise/Ellipsen: der äußere ist das Bild des inneren unter ;<br />

Punkte auf dem inneren Kreis werden längs gestrichelter Linien<br />

abgebildet<br />

– — falls nur ein “Transport”, sonst zuerst “Transport” mit<br />

dann Projektion auf Kreis mit Radius um <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

465


0 1 2 3 4 5<br />

9<br />

9<br />

4<br />

2<br />

1<br />

4 3<br />

5 2<br />

1<br />

8<br />

10 13 14<br />

10 13 14<br />

7<br />

7<br />

511<br />

36<br />

6<br />

11<br />

15<br />

m MO<br />

C<br />

m<br />

W<br />

12<br />

12<br />

−2 −1 0 1 2 3 4<br />

15<br />

8<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

466


5.2.3 (b) Begriffe der robusten Statistik<br />

qualitative Robustheit<br />

– Sind die Verfahren (gleichmäßig) stetig in der schwachen<br />

Topologie?<br />

d.h. konvergiert mein Schätzer stochastisch (ist konsistent)<br />

nicht nur <strong>für</strong> eine ideale Verteilung, sondern <strong>für</strong> alle<br />

Verteilungen, die in der “Nähe” dieser idealen Verteilung<br />

liegen?<br />

– dabei ist “nah” genau in dem Sinn zu verstehen, wie man<br />

sagt, dass im Zentralen Grenzwertsatz <strong>für</strong> –<br />

Beobachtungen die Verteilung von <br />

<br />

<br />

immer näher an liegt.<br />

– ist in diesem Sinn unstetig, der Median stetig, sofern er<br />

eindeutig ist<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

467


Ausreißer, Kontamination, Umgebungen um ideales Modell<br />

Nachbarschaften um ein ideales Modell:<br />

– Abstand zu nicht größer als <br />

Abstandsbegriffe (Auswahl):<br />

£ Kolmogoroffabstand ,<br />

£ Totalvariationsabstand ,<br />

£ Hellingerabstand <br />

<br />

– Konvexkontaminationsumgbg / Gross Error Model:<br />

zu werden alle Maße von der Form<br />

simultan betrachtet, ein kontaminierendes Maß<br />

– Interpretation: mit Wahrscheinlichkeit wird die<br />

Zufallsvariable mit Maß ersetzt durch einen Ausreißer mit<br />

Verteilung/Maß <br />

– Radius steuert Grad der Robustheit<br />

<br />

– feststehende schrumpfende Umgebungen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

468


Bruchpunkt:<br />

<br />

– bei wieviel Prozent Kontamination kann der Schätzer<br />

zusammenbrechen? anschaulich: wieviele Beobachtungen<br />

können beliebig manipuliert werden, ohne dass der Schätzer<br />

gegen ¦ (bzw. Rand des Wertebereichs) getrieben werden<br />

kann<br />

– z.B. hat Bruchpunkt , Bruchpunkt <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

469


Influenzkurve<br />

<br />

– Ableitungsbegriff <strong>für</strong> Schätzer / Funktionale<br />

– als Differentialquotient <strong>für</strong> ein Funktional<br />

<br />

– als mögliche Linearisierung:<br />

ein Schätzer (in einem glatten Modell) heißt asymptotisch<br />

linear in , falls es ein mit (5.2.1) <strong>und</strong> (5.2.2)<br />

gibt, so dass <br />

– Eigenschaften (5.2.1) <strong>und</strong> (5.2.2):<br />

(5.2.1)<br />

£ (5.2.2)<br />

dabei ist £ die –Ableitung von , die sich bei Glattheit<br />

bestimmt als <br />

; ein solches heißt Influenzkurve <strong>für</strong><br />

in <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

470


elative Effizienz<br />

– bei Verwendung von robusten Verfahren wird man im<br />

allgemeinen gegenüber dem klassisch optimalen Verfahren —<br />

oft durch Maximum Likelihood zu bestimmen — im idealen<br />

Modell asymptotisch einen Verlust an Effizienz eingehen,<br />

indem die (Spur der) Varianz größer sein wird als beim<br />

optimalen Verfahren<br />

– Anscombe: Betrachte diesen Effizienzverlust als<br />

Versicherungsprämie, der <strong>für</strong> einen Schutz gegen Ausreißer<br />

zu bezahlen ist<br />

– Beispiel: <br />

– Interpretation: um mit dem Median im idealen Modell die<br />

gleiche Genauigkeit wie mit dem arithmetischen Mittel zu<br />

erreichen, brauche ich mehr Beobachtungen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

471


5.2.3 (c) robuste Schätzer in einigen Beispielen<br />

Lokation — <br />

<br />

– klassisch optimal: <br />

<br />

, gesucht <br />

– am robustesten : (Bruchpunkt )<br />

– minimiert maximalen MSE in einer<br />

–Kontaminationsumgebung <strong>für</strong> :<br />

, <br />

,<br />

, – auch erreichbar durch<br />

£ M–Schätzer: Nullstelle von<br />

<br />

£ L–Schätzer: getrimmtes Mittel mit <br />

£ R–Schätzer: auf Rängen basierender Schätzer<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

472


IC IC IC IC IC<br />

−3 −3 −3 −3 −3 −2 −1 0 1 2 3<br />

1−Dim. Lokation: Influenzkurvenvergleich<br />

optimal robuste IC<br />

IC des Median<br />

IC des Mittelwertes<br />

−3 −2 −1 0 1 2 3<br />

u<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

473


Skala — <br />

<br />

<br />

– klassisch optimal: <br />

, gesucht <br />

– am robustesten : MAD — ¨ ©<br />

(Bruchpunkt )<br />

– lokale asymptotisch nicht zu unterscheiden vom IQR, aber<br />

dieser hat Bruchpunkt <br />

– minimiert maximalen MSE in einer<br />

–Kontaminationsumgebung <strong>für</strong> :<br />

, ,<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

474


IC IC IC IC IC<br />

−1 0 1 2 3 4<br />

1−Dimensionale Skala: Influenzkurvenvergleich<br />

optimal robuste IC<br />

IC des MAD<br />

klassisch optimale IC<br />

−3 −2 −1 0 1 2 3<br />

u<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

475


5.2.3 (d) robuste Verfahren in R<br />

Lokation/Skala: in Bibliothek MASS: huber, hubers<br />

Regression: in Bibliotheken MASS <strong>und</strong> lqs: rlm; verwendete /<br />

implementierte Verfahren:<br />

– Startschätzer: LTS (Least trimmed squares), S–Schätzer<br />

– –Funktionen: Huber–, Hampel– <strong>und</strong> Bisquare<br />

viel mehr (extra Bibliothek) in S-<strong>Plus</strong><br />

5.2.3 (e) Literatur<br />

Einstieg: Huber (1977)<br />

weitergehend: Huber (1981), Hampel et al. (1986), Rieder<br />

(1994)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

476


6 numerische Algorithmen in<br />

S-<strong>Plus</strong>/R<br />

6.1 Interpolation<br />

6.1.1 Problemstellung<br />

gegeben eine Funktion auf einem –Gitter<br />

<br />

gesucht der Funktionswert an einer Stelle<br />

<br />

6.1.2 Methoden<br />

Polynominterpolation<br />

<br />

– Idee: Funktion verhält sich lokal wie ein Polynom<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

477


– Tatsache: auf Kompakta liegen die Polynome dicht im<br />

, irgendein endliches Maß auf <strong>und</strong> <br />

– einfachstes Beispiel: lineare Interpolation<br />

gegeben , , ;<br />

Schätzung <strong>für</strong> durch<br />

<br />

– allgemein: Lagrange–Polynome<br />

<strong>für</strong> Stützstellen verwendet man die<br />

Lagrange–Polynome mit <strong>für</strong> <br />

<strong>und</strong> <strong>und</strong> erhält als interpolierendes Polynom<br />

— genaueres siehe Stoer (1999)<br />

rationale Interpolation<br />

– Idee: statt Polynomen zur Interpolation werden rationale<br />

Funktionen, i.e. Quotienten von Polynomen zur Interpolation<br />

verwendet<br />

<br />

– oft auch zur Modellierung einer Asymptotik <strong>für</strong> ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

478


falls diese vom Typ <strong>für</strong> ein <br />

Spline–Interpolation<br />

– möchte möglichst “glatt” durch die Interpolations–Punkte<br />

– “Glattheit” Größe der zweiten Ableitung Idee: minimiere<br />

<br />

unter allen interpolierenden Funktionen<br />

– Lösung: kubische Splines<br />

nicht -ige Datentreue<br />

– sind die Meßwerte nicht vollständig zuverlässig, kann man<br />

auch zu gunsten einer “einfacheren” (oder glatteren)<br />

Interpolationsfunktion zulassen, dass <br />

– führt auf kombinierte Datentreue / Glattheit (niedrige<br />

Ordnung) — Kriterien<br />

– Glättungskurven, Glättungssplines<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

479


6.1.3 Gütekriterien<br />

generell Datentreue (zum Beispiel gemessen in )<br />

bei Polynominterpolation: Einfachheit, also möglichst geringer<br />

Grad des interpolierenden Polynoms<br />

bei Splines: Glattheit gemessen in <br />

<br />

6.1.4 Vor– <strong>und</strong> Nachteile<br />

+ oft einfach zu bestimmen, einfacher als tatsächliche Funktion <br />

– prinzipiell schlecht bei Extrapolation<br />

? Behandlung von Bindungen — also mehrere Auswertungen an<br />

einer –Stelle<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

480


6.1.5 Umsetzung in R<br />

Lineare / Konstante Interpolation: die Funktionen approx <strong>und</strong><br />

<br />

approxfun<br />

– Syntax:<br />

approx(x, y, xout, method="linear", n=50,<br />

yleft, yright, rule = 1, f=0,<br />

ties = mean)<br />

approxfun(x, y, method="linear",<br />

yleft, yright, rule = 1, f=0,<br />

ties = mean)<br />

– Argumente<br />

£ x,y: Interpolationsgitter<br />

£ xout: (optional) Vektor mit Auswertungsstellen<br />

£ method: Interpolationsmethode — " linear " oder<br />

"constant"<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

481


£ n: falls keine Auswertungsstellen in xout spezifiziert<br />

werden, wird auf einem äquidistanten Gitter von n im<br />

Intervall min(x),max(x) interpoliert<br />

£ yleft,yright: Wert der zurückgegeben wird, falls die<br />

Auswertungsstelle x kleiner (größer) als min(x) (max(x))<br />

ist; per default durch das Argument rule festgelegt<br />

£ rule: legt fest, was als Extrapolationsverfahren verwendet<br />

werden soll; 1 NAs werden zurückgegeben, 2 wird der<br />

Gitterwert an der Gitterstelle zurückgegeben, die am<br />

nächsten zur Auswertungsstelle liegt.<br />

£ f: Falls method="constant" eine Zahl aus , die einen<br />

Kompromiss zwischen links– <strong>und</strong> rechtsstetiger<br />

Treppenfunktion angibt. Sind die Gitterwerte links <strong>und</strong><br />

rechts der Auswertungsstelle y0 <strong>und</strong> y1, so wird<br />

y0£(1 f)+y1£f zurückgegeben.<br />

£ ties: Behandlung von Bindungen (nicht hier!)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

482


– Details<br />

£ Es werden nur vollständige Paare (x, y) zur Interpolation<br />

verwendet<br />

– Rückgabewert<br />

£ approx gibt eine Liste mit Komponenten x <strong>und</strong> y, zurück —<br />

die n Interpolationspunkte<br />

£ approxfun gibt eine Funktion zurück, die dann lineare /<br />

konstante Interpolation durchführt; zu einem gegebenen<br />

x–Vektor als Argument gibt diese (zurückgegebene)<br />

Funktion die entsprechenden Interpolationswerte zurück<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

483


–<br />

<br />

R–Beispiel 6.1-1 [lineare/konstante Interpolation]:<br />

# G i t t e r d e r Fkt werte<br />

x 1 : 1 0 ; y rnorm ( 1 0 )<br />

#P l o t d e r G i t t e r p u n k t e<br />

par ( mfrow = c ( 2 , 1 ) )<br />

p l o t ( x , y ,<br />

main = " approx ( . ) ␣and␣ a p p r o x f u n ( . ) " )<br />

p o i n t s ( approx ( x , y ) , c o l = 2 , pch = "£" )<br />

p o i n t s ( approx ( x , y , method = " c o n s t a n t " ) ,<br />

c o l = 4 , pch = "£" )<br />

# i n t e r p o l i e r e n d e Kurve / Konstante<br />

f approxfun ( x , y )<br />

c u r v e ( f ( x ) , 0 , 10 , c o l = " g r e e n " )<br />

p o i n t s ( x , y )<br />

i s . f u n c t i o n ( f c approxfun ( x , y ,<br />

method = " c o n s t " ) ) # TRUE<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

484


c u r v e ( f c ( x ) , 0 , 10 , c o l = " d a r k b l u e " ,<br />

add = TRUE)<br />

(kubische) Spline–Interpolation: die Funktionen spline <strong>und</strong><br />

splinefun<br />

– Syntax:<br />

spline (x, y = NULL, n = 3*length(x),<br />

method = "fmm", xmin = min(x)<br />

xmax = max(x))<br />

splinefun (x, y = NULL, method = "fmm")<br />

– Argumente<br />

£ x,y: Interpolationsgitter<br />

£ xout: (optional) Vektor mit Auswertungsstellen<br />

£ n: es wird auf einem äquidistanten Gitter von n im<br />

Intervall min(x),max(x) interpoliert<br />

£ method: Spline–Interpolationsmethode — "fmm",<br />

"natural" oder " periodic "<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

485


#G i t t e r<br />

<br />

£ xmin,xmax: linker <strong>und</strong> rechter Endpunkt des<br />

Interpolationsbereichs<br />

– siehe auch<br />

£ Package splines<br />

£ Funktion smooth.spline im Package modreg<br />

£ Contributed Packages akima, cobs, gss, pspline<br />

– Rückgabewert<br />

£ spline gibt eine Liste mit Komponenten x <strong>und</strong> y, zurück —<br />

die n Interpolationspunkte<br />

£ splinefun ergibt wie approxfun eine Funktion<br />

– R–Beispiel 6.1-2 [kubische Spline–Interpolation]:<br />

#G r a p h i k v o r b e r e i t u n g<br />

op par ( mfrow = c ( 2 , 1 ) , mgp = c ( 2 , . 8 , 0 ) ,<br />

mar = .1+ c ( 3 , 3 , 3 , 1 ) )<br />

n 9 ; x 1 : n ; y rnorm ( n )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

486


p l o t ( x , y , main =<br />

p a s t e ( " s p l i n e [ fun ] ( . ) ␣ through " ,<br />

n , " p o i n t s " ) )<br />

l i n e s ( s p l i n e ( x , y ) )<br />

l i n e s ( s p l i n e ( x , y , n = 201) , c o l = 2)<br />

#e i n e g l a e t t e r e Funktion<br />

y ( x 6)^2<br />

p l o t ( x , y , main = " s p l i n e ( . ) ␣ ␣3␣ methods " )<br />

l i n e s ( s p l i n e ( x , y , n = 201) , c o l = 2)<br />

l i n e s ( s p l i n e ( x , y , n = 201 ,<br />

method = " n a t u r a l " ) , c o l = 3)<br />

l i n e s ( s p l i n e ( x , y , n = 201 ,<br />

method = " p e r i o d i c " ) , c o l = 4)<br />

l e gend ( 6 , 2 5 , c ( "fmm" , " n a t u r a l " , " p e r i o d i c " ) ,<br />

c o l =2:4 , l t y =1)<br />

f s p l i n e f u n ( x , y )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

487


l s ( e n v i r = environment ( f ) )<br />

s p l i n e c o e f e v a l ( e x p r e s s i o n ( z ) ,<br />

e n v i r = environment ( f ) )<br />

c u r v e ( f ( x ) , 1 , 10 , c o l = " g r e e n " , lwd = 1 . 5 )<br />

p o i n t s ( s p l i n e c o e f , c o l = " p u r p l e " , cex = 2)<br />

par ( op )<br />

6.2 numerische Invertierung<br />

6.2.1 Problemstellung<br />

gegeben eine monotone Funktion auf einem<br />

–Gitter <br />

zu einem vorgegebenen Funktionswert ,<br />

ist die Stelle gesucht, so dass<br />

<br />

6.2.2 Methode<br />

vertausche <strong>und</strong> <strong>und</strong> verwende Interpolationsmethode<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

488


6.3 Integration<br />

6.3.1 Problemstellung<br />

gegeben eine Funktion <strong>und</strong> ein Intervall <br />

gesucht <br />

<br />

<br />

<br />

6.3.2 Methoden<br />

Trapezverfahren, Simpsonverfahren<br />

Schrittweitenwahl<br />

Gaußintegration<br />

Extrapolationsverfahren<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

489


6.3.3 Umsetzung in R<br />

die Funktion integrate<br />

<br />

– Syntax<br />

integrate (f, lower, upper,subdivisions=100,<br />

rel.tol = .Machine$double.epsˆ0.25,<br />

abs.tol = rel.tol, stop.on.error = T,<br />

keep.xy = FALSE, aux = NULL, ...)<br />

– Argumente<br />

£ f: eine R–Funktion , die als erstes Argument die<br />

Integrationsvariable x hat <strong>und</strong> als Rückgabewert einen<br />

Vektor derselben Länge wie x; bei Rückgabe von ¦<br />

Fehler<br />

£ lower, upper: Integrationsgrenzen;<br />

dürfen unendlich sein<br />

£ subdivisions: Maximalzahl an Gitterpunkten<br />

£ rel.tol, abs.tol: relative / absolute geforderte<br />

Genauigkeit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

490


£ stop.on.error: (logisch) soll bei Fehlern abgebrochen<br />

werden (default) oder eine Warnmeldung herausgegeben<br />

werden?<br />

£ keep.xy, aux: nicht benutzt aus Kompatibilitätsgründen<br />

mit S<br />

£ ...: weitere Argumente <strong>für</strong> f<br />

– Details<br />

£ ist mindestens eine der beiden Grenzen unendlich, wird das<br />

unbegrenzte Intervall auf ein begrenztes abgebildet<br />

£ implementiert ist ein global adapitives (Schrittweitenwahl!)<br />

Verfahren zusammen mit einer Extrapolationstechnik<br />

£ basiert auf QUADPACK–Routinen dqags <strong>und</strong> dqagi von R.<br />

Piessens <strong>und</strong> E. deDoncker-Kapenga, aus der<br />

Netlib–Bibliothek<br />

£ rel . tol kann nicht weniger als<br />

max(50£.Machine$double.eps, 0.5e 28) sein, sofern<br />

abs. tol


– Rückgabewert: eine Liste vom Typ/Klasse "integrate" mit<br />

Attributen<br />

£ value: numerische Näherung <strong>für</strong> das Integral<br />

£ abs.error: Abschätzung <strong>für</strong> den Betrag des absoluten<br />

Fehlers<br />

£ subdivisions: tatsächliche Zahl an Stützstellen<br />

£ message: "OK" oder eine Warnmeldung<br />

£ call: der Funktionsaufruf<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

492


die Funktion adapt aus dem CRAN–Paket adapt<br />

– integriert eine Funktion über ein -dimensionales<br />

Rechteck , also ´, wobei ;<br />

– unbeschränkte Intervalle sind nicht erlaubt<br />

– Syntax<br />

adapt(ndim, lower, upper, minpts = 100,<br />

maxpts = NULL, functn, eps = 0.01, ...)<br />

– Argumente<br />

– Details<br />

£ ndim: – die Dimension des Integrationsbereichs<br />

£ lower, upper: Vektoren der Länge ndim mit den unteren<br />

(oberen) Integrationsgrenzen<br />

£ minpts, maxpts: minimale / maximale Zahl an<br />

Stützstellen; maxpts per default NULL<br />

£ functn: Integrand; siehe Parameter f in integrate<br />

£ eps: gewünschte Genauigkeit <strong>für</strong> den relativen Fehler<br />

£ ...: weitere Übergabeparameter <strong>für</strong> functn<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

493


£ modifizierter Code von Mike Meyer’s S Code; rufen eine<br />

FORTRAN subroutine von A.C. Genz auf<br />

£ die Original FORTRAN Funktion ist zur Kompatibilität mit<br />

R auf doppelte Genauigkeit modifiziert<br />

£ arbeitet nur <strong>für</strong> oder mehr Dimensionen, in einer<br />

Dimension wird integrate aufgerufen<br />

£ indem man maxpts auf NULL setzt, verdoppelt adapt<br />

beginnend mit max(minpts,500, r(ndim)) in jedem<br />

Schritt maxpts, bis die gewünschte Präzision erreicht ist<br />

oder der Speicher nicht mehr ausreicht;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

494


– man beachte, dass die Zahl der nötigen Gitterpunkte<br />

typischerweise exponentiell mit der Dimension ndim wächst<br />

<strong>und</strong> der zugr<strong>und</strong>eliegende Code mindestens maxpts >=<br />

r(ndim) verlangt, wobei <br />

– Rückgabewert: eine Liste vom Typ/Klasse "integration"<br />

mit Attributen<br />

£ value: numerische Näherung <strong>für</strong> das Integral<br />

£ relerr: Abschätzung <strong>für</strong> den relativen Fehler;<br />

£ minpts: tatsächliche Zahl der Stützstellen<br />

£ ifail: Fehlerindikator; fall ifail nicht 0 ist, gibt es einer<br />

Warnung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

495


6.4 Lösen von Gleichungssystemen II<br />

6.4.1 Problemstellung<br />

Gegeben Gleichungen (über ) in Unbekannten <br />

<strong>und</strong> vorgegebene rechte Seite <br />

gesucht mit <br />

6.4.2 Methoden<br />

Spezialfall: linear gegeben als ;<br />

in R x0solve(A,b)<br />

– im allgemeinen mit QR oder SVD–Zerlegung<br />

– spezielle Verfahren <strong>für</strong> strukturiertes <br />

£ (band–)diagonal<br />

£ obere Dreiecksmatrix<br />

£ dünn besetzt<br />

– in R: das Contributed Package Matrix<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

496


stochastische Suche:<br />

ziehe zufällig zulässige –Werte <strong>und</strong> wähle das mit<br />

minimalem <br />

<br />

? Frage: mit welcher W-keit?<br />

+ sehr einfach zu realisieren, keine Struktur nötig<br />

+ Konsistenz: mit beliebig hoher W–keit komme ich schließlich<br />

dem wahren (so es existiert) bis auf ein vorgegebenes <br />

nahe<br />

– sehr langsam<br />

– keine determistische Lösung<br />

– Variante: die Ziehungswahrscheinlichkeit sich um die bisher<br />

besten Werte konzentrieren lassen<br />

? mit welcher Rate?<br />

£ Schlagworte: Sintflut–Algo, Simulated Annealing,<br />

genetische Algorithmen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

497


ei Monotonie <strong>und</strong> : Bisektion<br />

[-1] finde Startintervallgrenzen <strong>und</strong> <br />

bestimme Abbruch–, Maxzahl an Iterationen <br />

[0] setze , <br />

[1] , , , <br />

[2] falls steigt: falls , sonst <br />

falls steigt: falls , sonst <br />

[3] gehe zu solange <strong>und</strong> <br />

+ sehr einfach zu realisieren<br />

+ geometrische Konvergenz (Intervalllänge wird exponentiell —<br />

aber mit fester Rate kürzer)<br />

– lokal gibt es u.U. bessere Verfahren<br />

– klebt an der Monotonie<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

498


ei Glattheit: Newtonverfahren<br />

[-1] Bestimme ; finde Startwert ;<br />

bestimme Abbruch–, Maxzahl an Iterationen , — evtl.<br />

Schrittweiten–Begrenzung<br />

[0] setze , <br />

[1] , , ,<br />

<br />

[2] gehe zu solange <strong>und</strong> <br />

+ lokal quadratische Konvergenz (unglaublich schnell!)<br />

– ab wann sind wir “lokal”?<br />

– unter Umständen sehr instabil (<strong>für</strong> )<br />

– benötigt Ableitung<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

499


ei Kontraktion: Fixpunktverfahren<br />

– dazu: <br />

– gesucht mit <br />

– falls bzw. im eindimensionalen<br />

( Kontraktion) in einer Umgebung<br />

von <strong>und</strong> Startwert so, dass die Folge der nie diese<br />

Umgebung verlässt, herrscht Konvergenz — Banachscher<br />

Fixpunktsatz<br />

[-1] finde Startwert ;<br />

bestimme Abbruch–, Maxzahl an Iterationen <br />

[0] setze , <br />

[1] , , , ,<br />

[2] gehe zu solange <strong>und</strong> <br />

genügt entsprechende Lipschitzbedingung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

500


! besser als Bisektion, falls <br />

+ geometrische Konvergenz — sofern in <br />

bleiben<br />

+ benötigt keine Monotonie, funktioniert auch mehrdimensional<br />

+ benötigt keine Ableitung — nur lokale Lipschitzbedingung an<br />

<br />

– wann ist das der Fall?<br />

– u.U. auch langsamer als Bisektion<br />

– lokal gibt es u.U. viel bessere Verfahren<br />

6.4.3 Literatur<br />

Press et al. (1992)<br />

Stoer (1999)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

501


6.4.4 Umsetzung in R<br />

uniroot<br />

polyroot<br />

siehe auch Abschnitt “Zero–Finding”, im Manual “Writing<br />

R–Extensions”, pp40–41<br />

Schnittstelle zu den Numerical Recipes (Press et al. (1992)):<br />

http://lib.stat.cmu.edu/S/recipes<br />

6.5 Minimierung<br />

6.5.1 Problemstellung<br />

Gegeben eine Funktion <br />

gesucht mit <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

502


6.5.2 Klassen von Problemen<br />

Definitionsbereich<br />

– diskret kontinuierlich<br />

– Dimension<br />

– Restriktionen: mit oder ohne Nebenbedingungen<br />

£ Gleichheitsnebenbedingungen<br />

£ Ungleichheitsnebenbedingungen<br />

Funktion <br />

– konvex oder nicht<br />

– differenzierbar oder nicht<br />

– unimodal oder nicht<br />

– speziell: linear oder quadratisch?<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

503


Optimierungstechniken<br />

<br />

– kombinatorische Optimierung<br />

£ Branch and Bo<strong>und</strong>/Cut<br />

£ stochastische Techniken<br />

– Lineare Optimierung<br />

£ Simplex–Algorithmus<br />

£ graphentheoretische Algorithmen<br />

– Quadratische Optimierung<br />

– glatte, konvexe Optimierung<br />

£ globale Optimierung<br />

¡ stochastische Techniken<br />

¡ gemischt stochastisch – deterministisch<br />

£ lokale Optimierung<br />

¡ Differentielle Argumente<br />

¡ diff–bare Lagrangetechniken<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

504


6.5.3 Methoden<br />

Minimierung auf Gitter<br />

– “Brute Force” — sehr langsam<br />

+ sehr leicht durchzuführen<br />

+ keine Ableitungen nötig<br />

? wie repräsentativ ist das Gitter?<br />

stochastische Suche<br />

– Eigenschaften siehe entsprechender Punkt bei Gleichungen<br />

bei Bitonie <strong>und</strong> :<br />

spezielles “Bisektions”–Verfahren —<br />

das “Goldener–Schnitt–Verfahren”<br />

[-1] Setze <br />

<br />

<strong>und</strong> suche Startintervall ,<br />

, so dass ;<br />

bestimme Abbruch–, Maxzahl an Iterationen <br />

[0] setze , , setze ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

505


[1] ,<br />

falls setze ,<br />

sonst ; , ;<br />

<br />

[2] falls : falls : , , <br />

, sonst , <br />

<br />

falls : falls : , , <br />

, sonst , <br />

[3] gehe zu solange <strong>und</strong> <br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

506


+ sehr einfach zu realisieren<br />

+ geometrische Konvergenz (Intervalllänge wird exponentiell —<br />

aber mit fester Rate kürzer)<br />

– lokal gibt es u.U. bessere Verfahren<br />

– klebt an der Bitonie<br />

im mehrdimensionalen: Trennung in Länge <strong>und</strong> Richtung <br />

– Line–Search (siehe oben)<br />

– Richtungssuche:<br />

£ steepest Descent (Gradienten–Verfahren)<br />

£ (modifiziertes) Newtonverfahren<br />

£ cg–Verfahren<br />

bei Glattheit: Lösungsverfahren <strong>für</strong> <br />

<br />

aus<br />

Abschnitt 5.2.2 (c)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

507


6.5.4 Literatur<br />

Press et al. (1992)<br />

Fletcher (1987), Luenberger (1969), 1984<br />

Geiger and Kanzow (1999), 2002<br />

6.5.5 Umsetzung in R<br />

optim<br />

nlm<br />

optimize<br />

Schnittstelle zu den Numerical Recipes (Press et al. (1992)):<br />

<br />

http://lib.stat.cmu.edu/S/recipes.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

508


6.6 sich selbst verändernde Programme<br />

Idee: lasse während des Ablaufs des Programms durch dieses<br />

R–code produzieren, der dann später abgearbeitet wird<br />

R–Beispiel 6.6-1 eval <strong>und</strong> parse:<br />

#<br />

<br />

Code: hier<br />

m 10<br />

n 21<br />

############################<br />

#<br />

### D i c h t e d e r m+1. O r d n u n g s s t a t i s t i k<br />

##<br />

### b e l i e b i g e V e r t e i l u n g , zB : FUN="norm " , " c h i s q " ,<br />

d i c h t e f u n c t i o n (FUN=stop ( " k e i n e ␣ Funktion " ) ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

509


#<br />

n=stop ( " k e i n ␣n" ) ,<br />

x=stop ( " k e i n ␣ Argument " ) , . . . )<br />

#Beachte Funktion kann mit z u s a e t z l i c h e n<br />

#Parametern wie d f f u e r c h i s q auf<br />

#g e r u f e n werden !<br />

#<br />

#b e r e c h n e t zu " b e l i b i g e m " F ( aus e i n e r<br />

#d e r i m p l e m e n t i e r t e n V e r t e i l u n g s k l a s s e n )<br />

#f_{ i : n}<br />

#<br />

#<br />

#FUN: S t r i n g mit Funktionsnamen<br />

#n : Umfang d e r S t i c h p r o b e (=2m+1)<br />

#x :<br />

<br />

A u s w e r t u n g s s t e l l e ( n ) d e r D i c h t e<br />

# . . . : w e i t e r e Argumente ,<br />

# z . B . d f f u e r c h i s q<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

510


#<br />

#Rueckgabewert f_{m+1:2m+1}(x )<br />

#<br />

{ i f ( n%%2==0) stop ( " nur ␣ u n g e r a d e s ␣n" )<br />

m n%/%2+1<br />

#Berechnung von i ( n choose i )<br />

C0m£gamma( n+1)/gamma(m+1)/gamma(m)<br />

#Berechnung von F( x ) , f ( x )<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( " f 1 p" ,FUN, " ( q=x , . . . ) " , sep="" ) ) )<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( "d1 d" ,FUN, " ( x=x , . . . ) " , sep="" ) ) )<br />

d i C0£ f 1 ^(m 1)£(1 f 1 )^(m 1)£d1<br />

r e t u r n ( d i )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

511


}<br />

#<br />

### I n t e g r a n d e n f u e r E [ Median ] ,<br />

## Var [ Median ]<br />

##<br />

### b e l i e b i g e V e r t e i l u n g ,<br />

## zB : FUN="norm " , " c h i s q "<br />

#<br />

#FUN: S t r i n g mit Funktionsnamen<br />

#n : Umfang d e r S t i c h p r o b e (=2m+1)<br />

#x : A u s w e r t u n g s s t e l l e ( n ) d e r D i c h t e<br />

# . . . : w e i t e r e Argumente ,<br />

# z . B . d f f u e r c h i s q<br />

#<br />

#Rueckgabewert<br />

<br />

x^ i f_{m+1:2m+1}(x ) ,<br />

#i =1,2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

512


#<br />

d i x f u n c t i o n ( x ,FUN=stop ( " k e i n e ␣ Funktion " ) ,<br />

n=stop ( " k e i n ␣n" ) , . . . )<br />

{ r e t u r n ( x£ d i c h t e ( x=x ,FUN=FUN, n=n , . . . ) ) }<br />

d i x 2 f u n c t i o n ( x ,FUN=stop ( " k e i n e ␣ Funktion " ) ,<br />

n=stop ( " k e i n ␣n" ) , . . . )<br />

{ r e t u r n ( x^2£ d i c h t e ( x=x ,FUN=FUN, n=n , . . . ) ) }<br />

### V e r g l e i c h von t a t s a e c h l i c h e r D i c h t e <strong>und</strong><br />

### D i c h t e d e r as . NV<br />

## s o w i e t a t s a e c h l i c h e r <strong>und</strong> a s y m p t o t i s c h e r<br />

## V a r i a n z<br />

##<br />

### b e l i e b i g e V e r t e i l u n g ,<br />

##<br />

<br />

zB : FUN="norm " , " c h i s q " , . . .<br />

#<br />

d v g l f u n c t i o n (FUN=stop ( " k e i n e ␣ Funktion " ) ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

513


#<br />

e v a l ( p a r s e ( t e x t=<br />

<br />

n=stop ( " k e i n ␣n" ) ,<br />

x=stop ( " k e i n ␣ Argument " ) , . . . )<br />

#FUN: S t r i n g mit Funktionsnamen<br />

#n : Umfang d e r S t i c h p r o b e (=2m+1)<br />

#x : A u s w e r t u n g s s t e l l e ( n ) d e r D i c h t e<br />

# . . . : w e i t e r e Argumente ,<br />

# z . B . d f f u e r c h i s q<br />

#<br />

#Rueckgabewert f ^{( asy )}_{m+1:2m+1}(x ) ,<br />

#<br />

{ #l i n k e r <strong>und</strong> r e c h t e r I n t e g r a t i o n s Rand<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( " l i q" ,FUN, " ( . 0 0 2 5 , . . . ) " , sep="" ) ) )<br />

p a s t e ( " r e q" ,FUN, " ( . 9 9 7 5 , . . . ) " , sep="" ) ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

514


#Median von FUN, Med(F)<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( "q0 q" ,FUN, " ( . 5 , . . . ) " , sep="" ) ) )<br />

#D i c h t e an d e r S t e l l e Med(F)<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( "d0 d" ,FUN, " ( q0 , . . . ) " , sep="" ) ) )<br />

#a s y m p t o t i s c h e D i c h t e<br />

d i dnorm ( x , mean=q0 , sd=1/2/d0/ s q r t ( n ) )<br />

#e x a k t e D i c h t e<br />

d i 0 d i c h t e (FUN=FUN, n=n , x=x , . . . )<br />

#e x a k t e r<br />

<br />

E r w a r t u n g s w e r t von Med_21<br />

# numerisch i n t e g r i e r t<br />

me i n t e g r a t e ( dix , l i , re ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

515


#P l o t d e r Dichten<br />

FUN=FUN, n=n , . . . ) $ v a l u e<br />

#e x a k t e V a r i a n z von Med_21<br />

# numerisch i n t e g r i e r t<br />

va i n t e g r a t e ( dix2 , l i , re ,<br />

FUN=FUN, n=n , . . . ) $ v a l u e me^2<br />

#A u f s k a l i e r u n g mit n<br />

van va £n<br />

#V e r g l e i c h mit n<br />

va . as (1 /2/d0 )^2<br />

p r i n t ( p a s t e ( " V a r i a n z e n : ␣" , van ,<br />

" ( e x a k t ) " , va . as , " ( asymptot ) " ) )<br />

matplot ( x , c b i n d ( di , d i 0 ) , t y p e=" l " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

516


}<br />

#<br />

r e t u r n ( d i )<br />

### e i n i g e Auswertungen<br />

#<br />

x seq ( 3 ,3 ,0.03)<br />

d1 d i c h t e (FUN="norm" , n=21, x=x )<br />

d2 d v g l (FUN="norm" , n=21, x=x )<br />

#<br />

### e x a k t e s K o n f i d e n z i n t e r v a l l<br />

# m i n i m a l e r Laenge<br />

##<br />

### b e l i e b i g e V e r t e i l u n g ,<br />

<br />

# zB : FUN="norm " , " c h i s q " , . . .<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

517


#r e c h t e r Endpunkt b e i vorgegebenem l i n k e n<br />

#<br />

repKI f u n c t i o n (FUN=stop ( " k e i n e ␣ Funktion " ) ,<br />

#<br />

n=stop ( " k e i n ␣n" ) , l i p = 30,<br />

itmax =40, d e l =10^( 8), a l p h a =0.05 ,<br />

l l = 100, r r = 1 0 0 , . . . )<br />

#FUN: S t r i n g mit Funktionsnamen<br />

#n : Umfang d e r S t i c h p r o b e (=2m+1)<br />

#l i p : l i n k e r Aufpunkt des KI ’ s<br />

#itmax : maximale Zahl an I t e r a t i o n e n<br />

#d e l : Abbruch e p s i l o n<br />

#a l p h a : 1 Ueberdeckungs WK des KI ’ s<br />

# l l :<br />

<br />

L i n k e r Rand d e r I n t e g r a t i o n<br />

#r r : R e c h t e r Rand d e r I n t e g r a t i o n<br />

# . . . : w e i t e r e Argumente ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

518


# z . B . d f f u e r c h i s q<br />

#<br />

#Rueckgabewert : r e c h t e r Endpunkt des KI ’ s<br />

#<br />

{<br />

# l i n k e r <strong>und</strong> r e c h t e r S t a r t p u n k t f u e r<br />

# B i s e k t i o n f u e r r e c h t e n Endpunkt<br />

me i n t e g r a t e ( dix , l l , r r ,<br />

FUN=FUN, n=n , . . . ) $ v a l u e<br />

va i n t e g r a t e ( dix2 , l l , r r ,<br />

r e l me<br />

# p r i n t ( c ( r e l , r e p ) )<br />

FUN=FUN, n=n , . . . ) $ v a l u e me^2<br />

r e r 9£ s q r t ( va)+me<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

519


# B i s e k t i o n s a l g o<br />

i 0<br />

de d e l +1<br />

w h i l e ( ( i d e l ) )<br />

{ rep0 ( r e l+r e r ) /2<br />

i i +1<br />

we i n t e g r a t e ( d i c h t e , l i p , rep0 ,<br />

# p r i n t ( c ( i , we ) )<br />

FUN=FUN, n=n , . . . ) $ v a l u e<br />

i f ( we


}<br />

#Test<br />

#<br />

repKI (FUN=" exp " , n=21, l l = 30, r r =30)<br />

#Bestimmung des KI m i n i m a l e r Laenge<br />

#<br />

K I l r f u n c t i o n (FUN=stop ( " k e i n e ␣ Funktion " ) ,<br />

#<br />

n=stop ( " k e i n ␣n" ) , l i p = 30,<br />

#FUN:<br />

<br />

S t r i n g mit Funktionsnamen<br />

itmax =40, d e l =10^( 8), a l p h a =0.05 ,<br />

s t e p=1/ 10^4 , l l = 100, r r =100 ,<br />

l i r , l i l , . . . )<br />

#n : Umfang d e r S t i c h p r o b e (=2m+1)<br />

#l i p : S t a r t p u n k t f u e r l i n k e n Aufpunkt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

521


#<br />

<br />

# des KI ’ s<br />

#itmax : maximale Zahl an I t e r a t i o n e n<br />

#d e l : Abbruch e p s i l o n<br />

#a l p h a : 1 Ueberdeckungs WK des KI ’ s<br />

# l l : L i n k e r Rand d e r I n t e g r a t i o n<br />

#r r : R e c h t e r Rand d e r I n t e g r a t i o n<br />

# l i l : l i n k e s Ende des<br />

# L i n k e r Endpunkt G i t t e r s<br />

# l i r : r e c h t e s Ende des<br />

# L i n k e r Endpunkt G i t t e r s<br />

#s t e p : S c h r i t t w e i t e des<br />

# L i n k e r Endpunkt G i t t e r s<br />

# . . . : w e i t e r e Argumente ,<br />

# z . B . d f f u e r c h i s q<br />

#Rueckgabewert : l i n k e r <strong>und</strong> r e c h t e r<br />

# Endpunkt des KI ’ s<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

522


#<br />

<br />

{me i n t e g r a t e ( dix , l l , r r ,<br />

FUN=FUN, n=n , . . . ) $ v a l u e<br />

va i n t e g r a t e ( dix2 , l l , r r ,<br />

FUN=FUN, n=n , . . . ) $ v a l u e me^2<br />

i f ( ( m i s s i n g ( l i r ) ) | | ( m i s s i n g ( l i l ) ) )<br />

{ l i r me<br />

l i l 6£ s q r t ( va)+me<br />

}<br />

p r i n t ( c ( l i l , l i r ) )<br />

l a 15£ s q r t ( va )<br />

rep0 6£ s q r t ( va )<br />

i 0<br />

f o r ( l i i n seq ( l i l , l i r , s t e p ) )<br />

{ r e o rep0<br />

rep0 repKI (FUN=FUN, n=n , l i p=l i ,<br />

itmax=itmax , d e l=del ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

523


}<br />

#<br />

#<br />

<br />

}<br />

i i +1<br />

a l p h a=alpha , l l =l l ,<br />

r r=r r , . . . )<br />

p r i n t ( c ( i , l i , rep0 , la ,<br />

l a o l a<br />

l a rep0 l i<br />

i f ( la >l a o )<br />

qnorm ( . 9 7 5 ) £2£ s q r t ( va ) ) )<br />

break<br />

r e t u r n ( c ( l i step , r e o ) )<br />

### B e i s p i e l Auswertungen<br />

K I l r (FUN=" c h i s q " , n=21, l l = 30, r r =30,<br />

s t e p =.1 , df =3)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

524


K I l r (FUN=" exp " , n=21, l l = 30, r r =30)<br />

#<br />

Vorgehensweise:<br />

(a) Zusammensetzen des Befehls-Strings mit Stringbefehlen wie<br />

paste<br />

(b) diesen in eine ausführbare expression mit<br />

parse(text=) wandeln<br />

(c) die expression auswerten mit eval<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

525


7 strukturierte Modelle<br />

7.1 Regressionsmodelle<br />

Situation: zwei Variablen <strong>und</strong> die irgendwie<br />

zusammenhängen;<br />

genauer: wird modelliert als Funktion von <strong>und</strong> weiteren<br />

unbeobachtbaren Größen<br />

Problem: Rekonstruiere den Zusammenhang von <strong>und</strong> <br />

Regressionsmodell: mit<br />

– Fehlern <br />

– Beobachtungen <br />

– Regressoren <br />

– Regressionsfunktion <br />

<br />

– der Statistiker “sieht” <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

526


weitere nötige Spezifikationen<br />

– Fehlerverteilung — sind diese unabhängig, identisch<br />

verteilt?<br />

– stochastische deterministische Regressoren<br />

– Spezifikation einer Klasse aus der stammt —<br />

£ parametrische Regression<br />

¡ lineare Parametrisierung?<br />

£ nichtparametrische Regression<br />

¡ Glattheitsklasse<br />

¡ globale / lokale Bandweite<br />

7.1.1 Lineare Statistische Modelle<br />

Bemerkung 7.1-1:<br />

Beachte: Nur die Parametrisierung ist linear, die Regressoren<br />

brauchen nicht linear einzugehen!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

527


7.1.1 (a) Modellformulierung<br />

Matrixform , mit ,<br />

, , , <br />

mit Indizes <br />

Dabei ist / sind<br />

<br />

,<br />

die -te Beobachtung (abhängige Variable / Response)<br />

der Vektor der Regressoren (unabhängigen Variablen,<br />

Kovariate) zur -ten Beobachtung<br />

<br />

<br />

, <br />

<br />

<strong>und</strong> unabhängig von oder bekannt<br />

weiter sei bzw. <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

528


Beispiel 7.1-2 [ein Regressionsmodell]:<br />

Wir wollen den hill–Datensatz aus R analysieren;<br />

Datenbestand:<br />

– Rekordzeiten zu verschiedenen Bergrennen<br />

– ¡ Wegstrecke des Rennens in Meilen<br />

– ¡ zu durchlaufende Höhenmeter<br />

Modell<br />

<br />

Faraway (2002), im WWW verfügbar!,<br />

<br />

<br />

weitere Referenz zu diesem Thema:<br />

Christensen (1996)<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

529


7.1.1 (b) Formulierung in R<br />

Syntax: ˜ + .... + mit <br />

der Response–Variablen <strong>und</strong> , . . . , den<br />

Regressoren<br />

R–Beispiel 7.1-3 [das Modell aus Beispiel 7.1-2]:<br />

l i b r a r y (MASS)<br />

data ( h i l l s )<br />

a t t a c h ( h i l l s )<br />

h i l l s<br />

f ormula time~ d i s t+c l i m b<br />

f ormula<br />

per default wird ein –Achsenabschnitt mit eingepasst ( <br />

Regressor )<br />

soll kein –Achsenabschnitt mit eingepasst werden, so gibt man<br />

dies durch Hinzufügen von -1 auf die rechte Seite der Formel an<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

530


ei Faktoren (diskreten Regressoren) wird per default <strong>für</strong> jedes<br />

Faktorniveau ein neuer Parameter / neuer –Achsenabschnitt<br />

mit eingepasst<br />

innerhalb einer Formel: übliche arithmetische Ausdrücke möglich<br />

— z.B. <strong>für</strong> das lineare (!) Modell :<br />

Y˜pmin(X1,X2)<br />

polynomiale Fits durch poly(,), z.B.<br />

Y~poly(X,2) <strong>für</strong> <br />

um +, * arithmetisch zu interpretieren: verwende I; so fittet<br />

y~x+I(u^2+z) das Modell mit Regressoren <strong>und</strong> <br />

soll nur eine bestehende Formel t modifiziert werden, so kann<br />

man sowohl die linke als auch die rechte Seite der<br />

Modelldefinition durch . abkürzen update<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

531


7.1.1 (c) kategorielle Merkmale <strong>und</strong> ANOVA<br />

Situation<br />

habe kategorielle Merkmale ( Faktoren) als Regressoren<br />

<strong>für</strong> lineares Modell sinnvoll: nur Regressoren <br />

Zahl der Faktoren “–fach–” oder “–Wege–”Design<br />

sehr viele Parameter:<br />

Hat man kategorielle Merkmale mit jeweils Ausprägungen,<br />

ergeben sich <br />

Parameter im “vollständigen” Design<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

532


Versuchsplanung<br />

kann die Versuchsbedingungen beim Versuchs–Design wählen<br />

um nicht zu viele Regressoren zu erzeugen, selten das<br />

vollständige Design — Problem multiplikativer Designs<br />

Planung des Versuchs: Welche Effekte sollen modelliert werden?<br />

Arbeit mit Faktoren<br />

Einzel–, Kreuzeffekte <strong>und</strong> hierarchische Modelle<br />

– aus obengenanntem Dimensionsproblemen, beschränkt man<br />

sich darauf nur bestimmte Merkmalskombinationen zu<br />

betrachten<br />

– am häufigsten ordnet man jedem Merkmal einen Einzeleffekt<br />

zu — in R einfach durch Angabe der einzelnen Variablen<br />

durch + verb<strong>und</strong>en in der Formel<br />

– daneben aber auch Kreuz– oder Interaktionseffekte — z.B.<br />

Variable mit Variable , oder die Variablen ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

533


dies geschieht in R durch Angabe der Variablengruppe, in der<br />

die Gruppenelemente durch : getrennt werden, z.B: X1:X4:X6<br />

– eine Abkürzung <strong>für</strong> X1+X4+X1:X4 ist X1£X4<br />

– schließlich ist es auch möglich mit Potenzen zu arbeiten —<br />

£ so bedeutet die Formel (1+a):(1+b):(1+c) 1 die Formel<br />

a+b+c+a:b+a:c+b:c+a:b:c<br />

£ <strong>und</strong> die Formel (a+b+c)^2 (a+b+c):(a+b+c)<br />

– sehr wichtige Technik zur Reduktion der Parametervielfalt:<br />

hierarchische (verschachtelte) Modelle<br />

£ Beispiel: angenommen eine kategorielle Variable ist<br />

Geschlecht; demgemäß wird die Population aufgeteilt in<br />

männlich / weiblich <strong>und</strong> <strong>für</strong> jede der Teilpopulationen ein<br />

separates Modell (mit gleichen weiteren Kovariaten)<br />

eingepasst<br />

£ in R realisiert durch a / , mit a der<br />

Aufteilungs–Variablen <strong>und</strong> der Formel, die in<br />

Abhängigkeit der Werte von a eingepasst werden soll<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

534


Faktorkodierung<br />

<br />

– zur Umsetzung von kategoriellen / ordinalen Merkmalen in<br />

Kovariate muss man diese erst kodieren<br />

– normalerweise benötigt man <strong>für</strong> eine Variable mit <br />

Merkmalsausprägungnen Indikator– oder<br />

Dummy–Variablen<br />

– diese Kodierungen ergeben die Kontrastmatrix:<br />

so erhält man mit der Treatment–Codierung <strong>für</strong> eine Variable<br />

mit Ausprägungen drei Indikator–Variablen , , ;<br />

trägt man die Wertebelegung matrixwertig ab, so erhält man<br />

eine Matrix mit Zeilen entsprechend den Ausprägungen <strong>und</strong><br />

Spalten entsprechend den Indikator–Variablen; in unserem<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

535


Beispiel <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

– folgende Kodierungen stehen in R zur Verfügung<br />

£ default <strong>für</strong> kategorielle Variablen in R:<br />

Treatment–Codierung, i.e. ein Null–Niveau wird<br />

ausgezeichnet <strong>und</strong> jeder andere erhält genau <strong>für</strong> einen<br />

Indikator die , jeder Indikator enthält auch nur genau eine<br />

— von Venables and Ripley (1999) empfohlen<br />

in R umgesetzt als contr.treatment<br />

£ default <strong>für</strong> kategorielle Variablen in S-<strong>Plus</strong>:<br />

Helmert–Codierung, i.e. zusätzlich verlangt man noch,<br />

dass die Indikatoren auf der Variable <strong>für</strong> den<br />

–Achsenabschnitt senkrecht stehen; schwieriger zu<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

536


interpretieren — in R umgesetzt als contr.helmert<br />

£ default <strong>für</strong> ordinale Variablen in R <strong>und</strong> S-<strong>Plus</strong>:<br />

orthogonale Polynome — R umgesetzt als contr.poly<br />

£ weiterhin implementiert: Summen–Codierung <strong>für</strong> ordinale<br />

Variablen, i.e. alle Einträge eines Indikators summieren sich<br />

auf <br />

in R umgesetzt als contr.sum<br />

Formulierung von Designs in R<br />

als Konstruktionsmehtode sind in R nicht so viele Möglichkeiten<br />

gegeben wie in S-<strong>Plus</strong>;<br />

immerhin gibt es expand.grid<br />

7.1.1 (d) Modell–Einpassung in R<br />

Methode: kleinste Quadrate<br />

<br />

die Funktion lm<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

537


Syntax:<br />

lm(formula, data, subset, weights, na.action,<br />

method = "qr", model = TRUE, x = FALSE,<br />

y = FALSE, qr = TRUE, singular.ok = TRUE,<br />

contrasts = NULL, offset = NULL, ...)<br />

Argumente:<br />

– formula: ein Formelausdruck wie in Abschnitt 7.1.1 (b)<br />

beschrieben<br />

– data: (optional) Data–Frame, der die Daten zum Fit des<br />

Modells enthält; per default werden die Daten der Umgebung<br />

environment(formula), entnommen<br />

– subset: (optional) Vektor spezifiziert Teilstichprobe, mit der<br />

das Modell gefittet werden soll<br />

– weights: (optional) ein Vektor mit Gewichten, mit denen die<br />

einzelnen Residuen beim Fit gewichtet werden sollen; falls<br />

spezifiziert, wird ein gewichteter Kleinste–Quadrate–Fit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

538


produziert; sonst werden gewöhnliche Kleinste Quadrate<br />

verwendet;<br />

– na.action: eine Funktion, die bestimmt, wie mit<br />

Beobachtungen, die Missings (NAs) enthalten, verfahren<br />

werden soll. default: das Attribut na.action von options<br />

— falls dieses gesetzt ist, sonst na.fail, also Abbruch mit<br />

Fehlermeldung; die “Ur”–Einstellung ist na.omit.<br />

– method: die Methode, die zum Fitten verwendet werden soll;<br />

z.Z. steht nur method="qr" zur Verfügung;<br />

method="model.frame" gibt den Modell–Frame zurück<br />

(das gleiche passiert mit model = TRUE, s.u.)<br />

– model, x, y, qr: (logisch) falls TRUE, werden die<br />

entsprechenden Komponenten des Fits (i.e. der<br />

Modell–Frame, die Modellmatrix, die Beobachtungen, die<br />

QR–Zerlegung) mit ausgegeben<br />

– singular.ok: (logisch): soll bei weitergemacht<br />

werden? — per default TRUE. FALSE noch nicht<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

539


implementiert<br />

– contrasts: (optional) eine Liste mit den Kontrasten (siehe<br />

Abschnitt zur Arbeit mit Faktoren)<br />

– offset: Mittelwertkorrektur; kann benützt werden, um eine<br />

im Vornhinein bekannte Komponente in die lineare<br />

Vorhersage einzuschließen; kann natürlich auch in die<br />

Modell–Formel eingeschlossen werden; falls beides angegeben<br />

ist, wird die Summe der beiden Terme benutzt<br />

– ...: weitere Argumente, die an weitere aufgerufene<br />

Regressions–Fit–Funktionen übergeben werden (s.u.)<br />

Details:<br />

– die Modelle <strong>für</strong> lm werden wie in Abschnitt 7.1.1 (b) <strong>und</strong> im<br />

Abschnitt zur Arbeit mit Faktoren spezifiziert; typischerweise<br />

von der Form response ˜ terms<br />

– der terms–Teil der Formel kann auch als ein linearer<br />

Prädiktor <strong>für</strong> response aufgefasst werden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

540


– lm ruft selbst Hilfsfunctionen wie lm.fit, etc. auf , um die<br />

tatsächlichen Berechnungen durchzuführen<br />

– <strong>für</strong> eine ANOVA schätzt man erst das lineare Modell mit lm<br />

<strong>und</strong> verwendet dann die generische Funktion anova auf den<br />

Rückgabewert an<br />

– stattdessen <strong>für</strong> ANOVA auch möglich: direkt aov<br />

Rückgabewert: eine Datenstruktur vom Typ "lm" oder mehrere<br />

Antworten vom Typ c("mlm", "lm") mit Elementen<br />

– coefficients: Koeffizientenvektor ( Vektor der<br />

Parameterschätzungen); die Elemente tragen Namen<br />

– residuals: die Residuen, i.e. tasächlicher minus gefitteter<br />

Wert <strong>für</strong> <br />

– fitted.values: gefittete Beobachtungen<br />

– rank: Rang der Beobachtungsmatrix<br />

– weights: (nur <strong>für</strong> gewichtete Kleinste Quadrate) die<br />

angegebenen Gewichte<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

541


– df.residual: Zahl der Freihheitsgrade der Residuen<br />

– call: der Aufruf, mit dem der Fit durchgeführt wurde<br />

– terms: die verwendete rechte Seite der Formel<br />

– contrasts: (nur falls relevant) die verwendeten Kontraste<br />

– xlevels: (nur falls relevant) die Merkmalsausprägungen der<br />

Faktoren, die zum Fit benützt worden sind<br />

– y: falls gewünscht, die benützten Beobachtungen<br />

– x: falls gewünscht, die benützte Modell– (oder<br />

Daten–)Matrix<br />

– model: falls gewünscht (per default: ja), der benützte<br />

Modell–Frame<br />

generische Methoden <strong>für</strong> Datenstruktur vom Typ "lm" — auf<br />

diese anzuwenden!<br />

– print wiederholt die Modellformel <strong>und</strong> gibt die<br />

Parameterschätzwerte aus<br />

– summary stellt zusammenfassend die Ergebnisse des Fits dar<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

542


– plot erstellt diagnostische Plots — siehe Abschnitt 7.1.1 (e)<br />

– coefficients liefert die Parameterschätzwerte<br />

– effects liefert die geschätzten Effekte bei einer ANOVA<br />

– fitted . values liefert die gefitteten –Werte<br />

– update aktualisiert einen Modellfit — nach Hinzunahme /<br />

Weglassen eines Regressors oder einer Beobachtung<br />

– residuals liefert die Residuen<br />

– deviance liefert die Fehlerquadratsumme (RSS)<br />

– anova erstellt die ANOVA–Tabelle der Ergebnisse; dessen<br />

Ergebnis kann auch “schön” print mit ausgegeben werden<br />

– lm. influence identifiziert Hebelpunkte / einflussreiche<br />

Beobachtungen<br />

– predict prognostiziert / liefert einen Schätzwert <strong>für</strong> einen<br />

“–Wert”, an dem kein “ ” vorliegt; siehe auch<br />

Abschnitt 7.1.1 (f)<br />

Hilfsfunktionen <strong>für</strong> Datenstruktur vom Typ "lm" — werden von<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

543


lm vewerdendet<br />

– lm. fit führt gewöhnlichen Kleinste–Quadrate Fit durch<br />

– lm. wfit führt gewichteten Kleinste–Quadrate Fit durch<br />

R–Beispiel 7.1-4 [ein Regressionsbeispiel]:<br />

l i b r a r y (MASS ) ; data ( h i l l s } ; a t t a c h ( h i l l s )<br />

f o r m u l time~c l i m b+d i s t<br />

e r g lm ( f o r m u l )<br />

p r i n t ( e r g ) ; c o e f f i c i e n t s ( e r g )<br />

summary ( e r g ) ; d e v i a n c e ( e r g )<br />

s1 o r d e r ( d i s t ) ; s2 o r d e r ( c l i m b )<br />

y f f i t t e d . v a l u e s ( e r g )<br />

par ( mfrow=c ( 3 , 2 ) ) ; p l o t ( e r g )<br />

matplot ( d i s t [ s1 ] , c b i n d ( time , y f ) [ s1 , ] ,<br />

t y p e=" l " , y l a b=" Z e i t " , x l a b=" D i s t " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

544


matplot ( c l i m b [ s2 ] , c b i n d ( time , y f ) [ s2 , ] ,<br />

t y p e=" l " , y l a b=" Z e i t " , x l a b=" S t e i g " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

new data . frame ( c l i m b =3000 , d i s t =20)<br />

p r e d i c t ( erg , newdata=new , i n t e r v a l=" c o n f i d e n c e " )<br />

p r e d i c t ( erg , newdata=new , i n t e r v a l=" p r e d i c t i o n " )<br />

7.1.1 (e) Regressions–Diagnostik<br />

die Summary: — umfasst<br />

– Formel,<br />

– fivenum–Statistik der Residuen,<br />

– die Koeffizientenschätzungen mit jeweils einer<br />

Streuungsschätzung <strong>und</strong> der entsprechenden –Statistik;<br />

<br />

letztere gibt an, mit welcher W–keit bei Vorliegen der als<br />

tatsächlichem Parameter der Schätzwert <strong>für</strong> diesen Parameter<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

545


weiter von der wegliegt, als die vorliegende Schätzung; d.h.<br />

kleine Werte deuten auf “signifikant von verschieden”, große<br />

Werte bedeuten, dass die Hypothese, der Parameter sei nicht zu<br />

einem vernünftigen Niveau abgelehnt werden kann.<br />

– die Standardabweichung der Residuen mit Angabe der<br />

Freiheitsgrade — <strong>für</strong> eine weitere Verwendung in Tests<br />

– multiples <strong>und</strong> korrigiertes als Gütemaß <strong>für</strong> die<br />

Modellanpassung — siehe Abschnitt 7.1.1 (g)<br />

– –Statistik als — <strong>für</strong> eine Verwendung in Tests auf<br />

Homoskedastizität, s.u.<br />

Residuenplot — eine der wichtigsten Diagnose–Methoden ist die<br />

Untersuchung der Residuen:<br />

– sind die Residuen symmetrisch verteilt? boxplot<br />

– sind die Residuen (annähernd) normalverteilt? qqnorm,<br />

c.f. Abschnitt 5.1.8<br />

<br />

– bei einem Plot (sofern möglich) : liegt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

546


eine Struktur vor?<br />

– bei einem Plot Distanzmaß vom Zentrum gegen (Betrag der<br />

empirischen) Influenzkurve: (s.u.) liegen Hebelpunkte,<br />

einflußreiche Beobachtungen vor?<br />

die Hutmatrix<br />

– die Residuen sind nicht unabhängig; ihre Kovarianz ist <br />

mit der Hutmatrix; — heißt so, weil sie<br />

den Beobachtungen einen “Hut” aufsetzt, indem die<br />

gefittet Werte ergibt<br />

– hoher Diagonalwert von deutet darauf hin, dass die<br />

–te Beobachtung ein großer Hebelpunkt ist, wobei “groß”<br />

ungefähr bis mal ist mit der Zahl der Regressoren<br />

<strong>und</strong> der Zahl der Beobachtungen<br />

– verschiedene Ideen, die Daten auf gleiche Skala zu bringen<br />

(vgl. Venables and Ripley (1999), p.157)<br />

<br />

£ standardisierte Residuen: normiert durch mit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

547


einer Skalenschätzung der Residuen<br />

£ studentisierte (oder Jackknife) Residuen:<br />

sei der ohne Beobachtung gefittete Wert <strong>für</strong> ; dann<br />

ist <br />

mit (emp) <br />

– in R: Zugriff auf die (Diagonale der) Hutmatrix über<br />

lm. influence zugreifen<br />

Hebelpunkte<br />

sind Beobachtungen deren Faktor sehr groß ist —<br />

ohne dass dabei das Residuum, also die empirische<br />

Modellabweichung an der Stelle groß sein muss, mit der Folge,<br />

dass sie einen großen Einfluß auf die Parameterschätzung haben<br />

lm. influence<br />

– wird angewendet auf ein Objekt vom Typ "lm"<br />

– der Rückgabewert besteht aus Komponenten, hat,<br />

coefficients <strong>und</strong> sigma<br />

<br />

– hat die Diagonale von <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

548


– coefficients: eine Matrix, deren -te Zeile aus besteht, wobei der Parameterschätzwert ist, den man ohne<br />

Beobachtung erhält<br />

– sigma die <br />

weitere Maße dfbeta, dffits , covratio, cooks.distance; siehe dazu<br />

Cook and Weisberg (1982), Belsley et al. (1980)<br />

Heteroskedastizität<br />

– die einzelnen Datenpunkte weisen unterschiedliche Varianz<br />

auf<br />

– fällt bei Residuenplot auf<br />

– kann man mit –Statistik prüfen (nicht hier)<br />

7.1.1 (f) Vorhersage<br />

Methode: wir verwenden als Prognose <br />

problematisch falls außerhalb der bisherigen Beobachtungen<br />

liegt (Extrapolation!)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

549


Unterscheide: Prädiktions– <strong>und</strong> Konfidenzintervall<br />

– ersteres berücksichtigt die zufällige Schwankung “” bei der<br />

vorherzusagenden Beobachtung — man würde ja nur eine<br />

Beobachtung an dieser Stelle machen<br />

– letzeres gibt an womit man im Durchschnitt bei<br />

Beobachtung von rechnen muß, wobei sich hier die “” ’s<br />

schon herausgemittelt haben<br />

in R: durch predict, angewendet auf ein gefittetes Model von<br />

Typ "lm"<br />

Syntax:<br />

predict (object, newdata, se.fit = FALSE, scale =<br />

NULL, df = Inf, interval = c("none",<br />

"confidence", "prediction"), level =<br />

0.95, type =c("response", "terms"),<br />

<br />

terms = NULL, ...)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

550


Argumente<br />

– object: Objekt vom Typ "lm"<br />

– newdata: Data–Frame (mit –Werten), <strong>für</strong> die vorhergesagt<br />

werden soll<br />

– se.fit: (logisch) sollen Standardabweichungen mit<br />

angegeben werden?<br />

– scale: Skalenparameter zur Berechnung der<br />

Standardabweichungen<br />

– df: Freiheitsgrade <strong>für</strong> den Skalenparameter<br />

– interval: was <strong>für</strong> ein Intervall soll angegeben werden —<br />

Konfidenz– oder Prädiktionsintervall?<br />

– level: Toleranz / Konfidenz – Niveau<br />

– type: Art der Vorhersage — eine Beobachtung oder eine<br />

Modellgröße<br />

– terms: Falls type="terms", welche Modellgrößen —<br />

default: alle<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

551


– ...: weitere Argumente, die an andere Methoden<br />

weitergereicht werden<br />

Rückgabewert<br />

predict<br />

<br />

– eine Matrix mit Spalten fit <strong>und</strong> evtl. lwr, upr, (falls<br />

interval spezifiziert ist); dabei sind lwr <strong>und</strong> upr untere<br />

<strong>und</strong> obere Intervallgrenzen des P.– oder K.–Intervalls<br />

– falls se.fit TRUE wird eine Liste zurückgegeben mit<br />

Komponenten<br />

£ fit: wie gerade<br />

£ se.fit: Standardabweichungen der Vorhersagen<br />

£ residual.scale: Standardabweichung der Residuen<br />

£ df: Freiheitsgrade <strong>für</strong> die Residuen<br />

Caveat: bei polynomialen Fits mit poly gibt es Probleme mit<br />

Ausweg: Verwendung von SafePrediction<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

552


7.1.1 (g) Modellwahl<br />

Idee bei geschachtelten Modellen:<br />

Ist beim Modellfit des höher–dim.-param. Modells ein<br />

Koeffizient nicht signifikant von verschieden, so können wir die<br />

entsprechende Variable weglassen<br />

Signifikanz einer einzelnen Variable wird dabei mit dem –Test<br />

geprüft<br />

Problem: obwohl ein Koeffizient nicht signifikant von <br />

verschieden ist, kann er trotzdem signifikante Auswirkungen auf<br />

die anderen Koeffizienten haben<br />

Vergleich im –Test: Fehlerquadratsumme mit <strong>und</strong> ohne den<br />

entsprechenden Regressor.<br />

<br />

<br />

<strong>und</strong> angepasstes ; ist dabei RSSTSS mit RSS der<br />

Fehlerquadratsumme <strong>und</strong> TSS der Summe aller<br />

Beobachtungsquadrate; da höher–dim. parametrisierte Modelle<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

553


zu einem höheren führen, wird dies durch einen Strafterm im<br />

angepassten ausgeglichen.<br />

ein anderer Ansatz ist Mallow’s , bei dem versucht wird,<br />

RSS ungefähr auf bekommen, wobei eine<br />

Schätzung <strong>für</strong> die Fehlervarianz auf Basis aller Beobachtungen<br />

AIC <strong>und</strong> BIC (Akaike Information Criterium, Bayes Information<br />

Criterium) legen die Loglikelihood der verschieden angepassten<br />

Modelle zugr<strong>und</strong>e; diese Kriterien gilt es zu minimieren<br />

in R realisiert durch leaps, drop1, step, update<br />

Caveat: Alle diese Verfahren sind mit Vorsicht zu genießen <strong>und</strong><br />

können keine wissenschaftliche Argumentation ersetzen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

554


R–Beispiel 7.1-5 [Modellanpassung]:<br />

l i b r a r y ( l e a p s )<br />

data ( s t a t e )<br />

s t a t e d a t a data . frame ( s t a t e . x77 ,<br />

row . names=s t a t e . abb , check . names=T)<br />

g lm ( L i f e . Exp ~ . , data=s t a t e d a t a )<br />

x model . m a t r i x ( g )[ , 1]<br />

y s t a t e d a t a $ L i f e<br />

g l e a p s ( x , y )<br />

p l o t ( g$ s i z e , g$Cp)<br />

a b l i n e ( g$ s i z e , g$ s i z e )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

555


7.1.1 (h) Wirkung von Datentransformationen<br />

sqrt(y)<br />

log(y)<br />

y<br />

exp(y)<br />

y^2<br />

<br />

sqrt(x)<br />

ein illustratives Beispiel aus Nagel et al. (1994), p. 183<br />

¡ log(x) ¢ x £ exp(x) x^2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

556


7.1.1 (i) Box-Cox–Transformation<br />

Idee: in vielen Beispielen stabilisiert eine Transformation der<br />

Beobachtungen die Varianz <strong>und</strong> vermeidet so Heteroskedastizität<br />

ein systematischer Ansatz zum Auffinden einer “guten”<br />

Transformation ist der Box–Cox Ansatz: — vgl. Faraway (2002),<br />

Kapitel 8<br />

bei strikt positiven Beobachtungen wird versucht per Maximum<br />

Likelihood die Potenz der Datentransformation zu schätzen<br />

in R realisiert durch boxcox<br />

Syntax:<br />

boxcox(object, lambda, plotit, interp,<br />

eps, xlab, ylab, ...)<br />

Argumente:<br />

<br />

– object: eine Formel oder ein Objekt vom Typ lm oder aov<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

557


– lambda: ein –Gitter; default seq( 2, 2,step=0.1)<br />

– plotit: (logisch) soll das Resultat geplottet werden?<br />

– interp: (logisch) — soll Spline–Interpolation genutzt<br />

werden?<br />

– eps: Toleranz <strong>für</strong> lambda = 0; defaults <br />

– xlab, ylab: Achsenbschriftungen; per default "lambda" <strong>und</strong><br />

"log-Likelihood"<br />

– ...: die üblichen weiteren Parameter<br />

Rückgabewert — falls kein Plot angefertigt wird: ein Gitter<br />

<br />

beim Plotten wird zusätzlich ein Konfidenzintervall um die<br />

ermittelte Maximalstelle angegeben<br />

falls interp = TRUE wird Spline–Interpolation zur Erzeugung<br />

eines glatteren Plots benutzt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

558


7.1.2 Generalisiert Lineare Modelle<br />

7.1.2 (a) ein einführendes Beispiel<br />

Modellierung der Kreditwürdigkeit eines Bankk<strong>und</strong>en<br />

Datensatz:<br />

– aus dem Datenarchiv der LMU München, unter Datensätze<br />

in Fahrmeir, Tutz (1996) “Kreditscoring zur Klassifikation<br />

von Kreditnehmern”<br />

– genaue Beschreibung der Daten siehe<br />

http://www.stat.uni-muenchen.de/service/datenarchiv/<br />

kredit/kreditvar.html<br />

Problem: Response binärwertig<br />

Ansatz: Nicht die Beobachtungen sind eine lineare Funktion<br />

der Regressoren, sondern ein Parameter der Verteilung der <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

559


Transformation der Beobachtungen durch Link–Funktion <br />

genauer wird transformiert <strong>und</strong> ist ein <br />

Referenzen: Fahrmeir and Tutz (2001) <strong>und</strong> generell: McCullagh<br />

and Nelder (1989)<br />

7.1.2 (b) wichtige Klassen<br />

Verteilungsfamilien<br />

Binomial: Parameter , zunächst noch nicht beliebig <br />

wertig Logit, Probit<br />

Gamma: Parameter <br />

Normal: Parameter <br />

Inverse-Gauss’sch: Parameter <br />

Poisson: Parameter <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

560


Linkfunktionen<br />

bei binären Variablen<br />

– Logit–Trafo: <br />

– Probit–Trafo: ¨ <br />

– cLog–Trafo: <br />

– cLoglog–Trafo: <br />

bei Zählvariablen<br />

– Log–Trafo: <br />

bei stetigen, positiven Variablen<br />

– Log–Trafo: <br />

– Inverse<br />

– Identität<br />

<br />

– Wurzel–Trafo: <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

561


Tabelle 7.1-6 [natürliche Linkfunktionen]:<br />

Vertlg. Familie kanonische Linkfunktion<br />

Binomial Logit<br />

Gamma Inverse<br />

Gauß’sch Identität<br />

Invers-Gauß’sch “1/muˆ2”<br />

Poisson Log<br />

7.1.2 (c) mögliche Aussagen / Fragestellungen<br />

Hat die Variable einen Einfluß auf die Kreditwürdigkeit?<br />

Um wieviel erhöht sich das Risiko, dass der K<strong>und</strong>e nicht<br />

zurückzahlt, wenn er in Kategorie fällt?<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

562


7.1.2 (d) Modell–Einpassung in R<br />

der Befehl glm<br />

Syntax:<br />

glm(formula, family = gaussian, data, weights =<br />

NULL, subset = NULL, na.action, start = NULL,<br />

offset = NULL, control = glm.control(...),<br />

model = TRUE, method = "glm.fit", x = FALSE,<br />

y = TRUE, contrasts = NULL, ...)<br />

Argumente<br />

– family: Modellfamilie — siehe Abschnitt zu Linkfunktionen<br />

– weights: (optionaler) Gewichtsvektor, der beim Einpassen<br />

benutzt wird<br />

– start: Parameterstartwerte <strong>für</strong> das iterative Schätzverfahren<br />

– etastart: Startwert <strong>für</strong> <br />

<br />

– mustart: Startwert <strong>für</strong> <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

563


– control: eine Liste mit Steuerungs/Kontrollgrößen <strong>für</strong> das<br />

iterative Schätzverfahren, wie Abbruch–, maximale<br />

Iterationszahl etc.<br />

– method: Schätzmethode — z.Z. nur glm.fit implementiert,<br />

das iterativ gewichtete Kleinste Quadrate (IWLS) benutzt<br />

– formula, data, subset, na.action, offset, model, x, y,<br />

contrasts, intercept, ...: wie bei der gewöhnlichen<br />

linearen Regression<br />

Rückgabewert ein Objekt vom Typ "glm" mit Elementen wie<br />

"lm"<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

564


zusätzlich:<br />

– linear.predictors: die lineare Einpassung im Raum der<br />

Linkfunktion<br />

– deviance: bis auf eine Konstante mal die maximierte<br />

Log-likelihood.<br />

– aic: AIC–Wert zur Bestimmung der Modellordnung<br />

– null.deviance: Eichwert des AIC an einem Null–Modell, zu<br />

vergleichen mit der deviance<br />

– iter: benötigte Zahl an Iterationen beim Fit<br />

– weights: die zuletzt benutzten the Gewichte<br />

– prior.weights: Start–Gewichte sofern angegeben<br />

– df.residual: Freiheitsgrade der Residuen<br />

– df.null: Freiheitsgrade der Residuen im Nullmodell.<br />

– converged: (logisch) Hat das Verfahren die ge-<br />

wünschte Genauigkeit geliefert?<br />

– bo<strong>und</strong>ary: (logisch) liegt der Parameter–Fit auf dem Rand<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

565


des Definitionsbereichs?<br />

– family, control: Parameter aus der Eingabe<br />

– xlevels: (sofern relevant) eine Aufstellung aller<br />

Faktor–Niveaus, die zum Fitten benutzt worden sind<br />

Caveat: Bei Zähl–/ Binomialmodellen muß man als –Vektor<br />

die absoluten Treffer–/ Fallzahlen angeben!<br />

7.1.3 ein Beispiel<br />

R–Beispiel 7.1-7 [das Kreditbeispiel vom Anfang]:<br />

k r e d i t data . frame ( read . t a b l e ( f i l e =<br />

"C : /programme/R/ uebung / k r e d i t . t x t " , h e a d e r=T) )<br />

a t t a c h ( k r e d i t )<br />

f o r m u l k r e d i t ~ l a u f z e i t+hoehe+s p a r k o n t+r a t e<br />

<br />

e r g glm ( formula=formul , data=k r e d i t ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

566


summary ( e r g )<br />

par ( mfrow=c ( 2 , 2 ) )<br />

p l o t ( e r g )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

b i n o m i a l ( l i n k = " p r o b i t " ) )<br />

7.1.3 (a) Modellwahl — die Deviance<br />

anders als bei klassischen linearen Modellen sind hier nur<br />

asymptotische Aussagen möglich;<br />

wichtiges Kriterium ist die Deviance (s.o.)<br />

in R steht dazu die generische Funktion deviance zur Verfügung<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

567


7.2 Elemente Multivariater Statistik<br />

7.2.1 die multivariate Normalverteilung<br />

Erzeugung einer Verteilung ¦ siehe Übung<br />

multivariate Normalverteilungstests: Idee<br />

¦ <strong>für</strong> alle <br />

siehe auch Pakete mvtnorm, ellipse<br />

7.2.2 graphische Methoden<br />

siehe Kapitel 4<br />

7.2.3 Allgemeines<br />

7.2.3 (a) generelle Fragestellungen<br />

Dimensionsreduktion<br />

Klassifikation mit / ohne Training<br />

<br />

Aufdecken interessanter Strukturen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

568


Wie kann man die Daten gut in einem niedrig–dimensionalen<br />

Raum repräsentieren?<br />

Mit welchen Variablen kann man gut klassifizieren?<br />

Gibt es gut unterscheidbare Teilklassen <strong>und</strong> wenn ja wieviele?<br />

7.2.3 (b) allgemeine Pakete zur mult.var. Statistik<br />

mva, modreg, MASS, multiv<br />

7.2.3 (c) allgemeine Literatur zur mult.var. Statistik<br />

Einstieg: Flury and Riedwyl (1983), Flury (1997), Härdle, W.<br />

and Simar, L. (2003)<br />

weiterführend: Anderson (1984), Mardia et al. (1979)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

569


7.2.4 Hauptkomponenten– <strong>und</strong> Faktoranalyse<br />

Fragestellungen<br />

1. In welchen Richtungen variieren die Daten vorzugsweise?<br />

2. Gibt es “neue” Variablen, die aus den alten als<br />

Linearkombinationen hervorgehen, <strong>und</strong> die Daten besser<br />

beschreiben als die alten?<br />

3. “Gute” zweidimensionale Abbildung einer hochdimensionalen<br />

Punktewolke<br />

Herangehensweise / Idee:<br />

– Spektralzerlegung (SVD) der (empirischen)<br />

Kovarianz–/Korrelationsmatrix der Daten<br />

– Projektion auf die ersten (größten) Eigenräume<br />

– bei der Faktoranalyse: nur noch verwenden der ersten<br />

(größten) Eigenräume — als latente Variablen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

570


Implementation in R — alles in Bibliothek mva<br />

<br />

– princomp, prcomp: Hauptkomponentenanalyse<br />

– factanal , varimax: Faktoranalyse<br />

– summary (generische Methode)<br />

– spezielle Plots: plot (generische Methode): erzeugt screeplot,<br />

biplot : siehe Kapitel 4<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

571


7.2.5 Multidimensional Scaling<br />

Fragestellung: aus einer Abstandsmatrix erzeuge eine niedrig<br />

()–dimensionale Konfiguration, so dass die Abstände der<br />

Punkte in der Konfiguration möglichst genau denen in der<br />

Abstandsmatrix entsprechen<br />

Verschiedene Abstandsbegriffe, similarities, dissimilarities,<br />

Ultrametriken<br />

numerische, iterative Algorithmen<br />

Implementation in R<br />

– in mva: cmdscale — klassisches (euklidisches) MDSCAL<br />

– dazu (ebenfall in mva): dist zur Erzeugung einer<br />

Abstandsmatrix<br />

– in MASS: isoMDS, sammon — zwei nicht–metrische<br />

MDSCAL’s von Venables and Ripley (1999)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

572


7.2.6 Cluster–Analyse<br />

Fragestellung: finde eine Partition der Stichprobe in homogene<br />

Teile;<br />

vorgegebene Zahl an Clustern mit zu bestimmen<br />

Strategien<br />

<br />

– hierarchisches Clustern (agglomerativ, verteilend)<br />

£ single / complete / average linkage<br />

£ weitere: Ward, centroid, median, mcquitty<br />

– –Mittel<br />

– modellbasiertes Clustern<br />

£ Modell: habe unterschiedliche Stichproben mit<br />

vollständig/bis auf endl.-dim. Parameter bekannte<br />

Verteilung; diese wurden vermischt;<br />

£ Aufgabe: rekonstruiere die Mixing–Indikatoren<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

573


Implementation in R<br />

– hierarchisches Clustern — in mva<br />

£ hclust — erzeugt Aufteilungshierarchie als Objekt vom<br />

Typ hclust; benötigt eine Abstandsmatrix (erzeugt durch<br />

dist )<br />

£ dazu plot (oder synonym plclust ) — Ausgabe des<br />

Hierarchie–Baums (Dendrogramm), identify . hclust<br />

£ cutree zerlegt eine Hierarchie in vorgegebene Zahl an<br />

Cluster / oder längs vorgegebener Hierarchie–Ebene<br />

– –Mittel — in mva: kmeans<br />

– modellbasiertes Clustern: Paket mclust; in S-<strong>Plus</strong>: mclust,<br />

mclass, mreloc<br />

– Extra–Pakete: cluster , cclust<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

574


7.2.7 Diskriminanzanalyse<br />

Fragestellung: Gegeben eine Lern–Stichprobe mit bekannter<br />

Aufteilung in Untergruppen, finde heraus, wie man bei einer<br />

neuen Beobachtung gut vorhersagen kann, zu welcher Gruppe<br />

sie gehört<br />

Methoden<br />

– Diskriminanzanalyse nach Fisher: versucht, den Quotienten<br />

aus Intra– <strong>und</strong> Inter–Gruppenvarianz zu maximieren<br />

– lineare Diskriminanzanalyse (Hypothese: alle<br />

Gruppenkovarianzen gleich)<br />

– bei Normalität: quadratische Diskriminanzanalyse<br />

Implementation in R<br />

– lineare Diskriminanzanalyse in MASS: lda<br />

– quadratische Diskriminanzanalyse in MASS: qda<br />

<br />

– Extra–Paket: mda<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

575


7.3 Zeitreihenanalyse<br />

7.3.1 Einführung<br />

7.3.1 (a) Gr<strong>und</strong>lagen<br />

im Unterschied zum –Setup nun abhängige Beobachtungen<br />

Reihenfolge / Anordnung der Beobachtungen wichtig<br />

Bezeichnung: das Objekt ¡ heißt stochastischer Prozess,<br />

eine Realisation heißt Zeitreihe<br />

um dennoch ähnliche Schlüsse wie im –Setup ziehen zu<br />

können, sind folgende Begriffe nötig<br />

– Stationarität: Hätte die beobachtete Zeitreihe von der<br />

Verteilung her betrachtet auch an einem anderen<br />

Startzeitpunkt starten können?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

576


– um mit nur einer Realisation (einer Zeitreihe) Inferenz auf<br />

weitere Beobachtungen möglich zu machen: Vertauschbarkeit<br />

der Mittelung “über ” mit der “über ” Ergodizität<br />

7.3.1 (b) Literatur<br />

Einstieg: Schlittgen and Streitberg (1987), Brockwell and Davis<br />

(2002), Wei (1990)<br />

weiterführend: Hamilton (1994), Brockwell and Davis (1991), Harvey<br />

(1993), Shumway and Stoffer (2000), Durbin and Koopman (2001)<br />

spezielle Themen: Granger and Newbold (1986), Gouriéroux (1997),<br />

Rothman (1999)<br />

7.3.1 (c) wichtige allgemeine Pakete in R<br />

— zu beziehen auf CRAN<br />

in der üblichen Distribution mit dabei: ts<br />

<br />

allgemein: tseries von Adrian Trapletti, gepflegt von Kurt Hornik,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

577


gerade <strong>für</strong> multiple Zeitreihen <strong>und</strong> Zustandsraummodelle: dse, von<br />

P. Gilbert<br />

Signalerkennung: Rwave, in S von Rene Carmona, in R portiert <strong>und</strong><br />

gepflegt von Brandon Whitcher<br />

Erkennen von Strukturbrüchen strucchange, von Achim Zeileis,<br />

Friedrich Leisch, Bruce Hansen, Kurt Hornik, Christian Kleiber,<br />

Andrea Peters, gepflegt von Achim Zeileis<br />

ökonometrische Modelle: sem, von John Fox<br />

periodische Zeitreihenmodelle: pear, in S von A. I. McLeod, in R<br />

portiert <strong>und</strong> gepflegt von Mehmet Balcilar<br />

nichtparametrische Statistiken <strong>für</strong> Zeitreihenmodelle: pastecs, von<br />

Frederic Ibanez, Philippe Grosjean <strong>und</strong> Michele Etienne, gepflegt von<br />

Philippe Grosjean<br />

Hilfspaket zum Umgang mit Zeiteinheiten: chron Original in S von<br />

<br />

David James, in R portiert <strong>und</strong> gepflegt von Kurt Hornik.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

578


7.3.1 (d) spezielle Klassen/Befehle in R zum Umgang mit<br />

Zeitpunkten<br />

neben Beobachtungsindex ein weitere Index: der<br />

Beobachtungszeitpunkt (“Time Stamp”)<br />

hilfreich zum Konvertieren von verschiedenen<br />

Datums-/Zeitformaten: Paket chron — siehe<br />

require (chron); ?chron; ?times; ?dates,<br />

bei regulärem Gitter ( ) einfache Umrechnung;<br />

umgesetzt in (S3)-Klasse ts (aus stats Paket)<br />

sonst: schwieriger; dazu<br />

– Attribut-Ansatz tframe aus Paket tframe:<br />

Beobachtungszeitpunkte werden kein Teil der Daten sondern<br />

ein Attribut des Datenobjekts<br />

– (S4)-Klasse its aus Paket its: Beobachtungszeitpunkte der<br />

Klasse POSIXct<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

579


– (S3)-Klasse irts aus Paket tseries:<br />

Beobachtungszeitpunkte der Klasse POSIXct<br />

– (S3)-Klasse zoo aus Paket zoo — Z.’s Achim Zeileis’<br />

ordered objects; hier müssen die Beobachtungszeitpunkte nur<br />

irgendwelche ordinale Merkmale sein!<br />

als (S3)/(S4)-Objekte handelt es sich hierbei jeweils um<br />

Datenstrukturen, bei denen eine Reihen von (generischen)<br />

Funktionen spezielle Funktionalität erhalten (s.u.)<br />

Konstruktoren: die Funktionen ts (), its (), irts (), tframe() <strong>und</strong> zoo()<br />

ts () erzeugt ein uni– oder multivariates Zeitreihen–Objekt der<br />

Klasse ts aus Argumenten:<br />

– data: die Daten;<br />

– start: Beobachtungstartpunkt<br />

– end: Beobachtungendpunkt<br />

<br />

– frequency: Beobachtungen/Zeiteinheit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

580


– deltat: Zeitabstand zwischen zwei Beobachtungen<br />

– ts.eps: ab wann gelten zwei Zeitpunkte gleich?<br />

– class: mts (multiple Zeitreihe); ts (univariate Zeitreihe)<br />

oder NULL sonst<br />

– names: Namen der Dimensionen der Zeitreihe<br />

zoo() erzeugt ein Objekt der Klasse zoo aus Argumenten:<br />

– x: die Daten;<br />

– order.by: Index —“Beobachtungzeitpunkte”— anhand<br />

deren man die Beobachtungen anordnen kann<br />

– siehe auch zoo-quickref.pdf bzw. zoo.pdf über<br />

HTML-Hilfe zum Paket <strong>und</strong> dort overview<br />

its (), irts (), tframe() erzeugen jeweils Objekte der Klassen its ,<br />

irts , tframe — siehe deren spezielle Hilfe<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

581


7.3.1 (e) Methoden aus Paketen ts <strong>und</strong> zoo<br />

überladene Methoden<br />

– Indexoperationen [....]<br />

– Typumwandlungen as.ts, is.ts, as.zoo, is.zoo, as.its,<br />

is.its, as.irts, is.irts<br />

– Ausgaben plot, lines, print<br />

– Verschmelzen von Zeitreihen (mit unterschiedlichen<br />

Beobachtungszeitpunkten) cbind ( cbind. ts), ts .union,<br />

ts . intersect bzw. allgemeiner <strong>und</strong> leistungsfähiger merge <strong>für</strong><br />

zoo Objekte<br />

– na.omit.ts: bei Missings wird omit nur an den Enden<br />

zugelassen<br />

<br />

– übliche Arithmetikoperationen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

582


spezielle Methoden<br />

– aggregate berechnet Zusammenfassungen über disjunkten<br />

Zeitintervallen<br />

– diff erzeugt die Zeitreihe <br />

– end Zeitpunkt der letzten Beobachtung<br />

– frequency Zahl der Beobachtungen pro Zeiteinheit<br />

– deltat Zeitabstand zwischen zwei Beobachtungen (ts)<br />

– time gibt Beobachtungszeitpunkte zurück / ändert sie<br />

– cycle erzeugt eine Zeitreihe durch Vorgabe der<br />

Beobachtungszeitpunkte innerhalb eines Zykluses<br />

– start Zeitpunkt der ersten Beobachtung<br />

– tsp, tsp Ausgabe/Modifikation der Zeitreihenattribute<br />

– window Herausfiltern einer Teilzeitreihe innerhalb eines<br />

Fensters<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

583


spezielle apply-artige Funktionen <strong>für</strong> Auswertungen auf<br />

gleitenden Fenstern (bei zoo)<br />

– rapply — wie apply auf Fenster der Länge width<br />

– speziell: rollmean, rollmax, rollmedian<br />

Interpolation/Fortschreibung —(Paket zoo)<br />

– na.approx ersetzt missings durch lineare Approximation der<br />

umliegenenden beobachteten Werte<br />

– na.locf ersetzt missings durch letzten beobachteten Wert<br />

weitere Methoden aus Paket ts<br />

– lag — mit lag . plot (auch in zoo)<br />

– ts . plot, month.plot<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

584


7.3.2 Autokovarianz <strong>und</strong> Spektrum<br />

7.3.2 (a) Begriffe<br />

wesentliches Instrument zur Beschreibung von Abhängigkeiten:<br />

die Kovarianz — die Autokovarianz<br />

im stationären Fall ; heißt<br />

Autokovarianzfunktion oder ACF von <br />

Satz aus der Fourier–Theorie (Herglotz):<br />

Autokovarianzfunktionen sind genau die Fouriertransformierten<br />

von beschränkten Maßen auf , <strong>und</strong> diese Relation ist <br />

das entsprechende Maß heißt Spektralmaß; falls das<br />

Spektralmaß eine (Spektral–)Dichte besitzt, erhält man diese als<br />

<br />

<br />

<br />

<br />

<br />

<strong>für</strong> (7.3.1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

585


Idee: Stelle die Zeitreihe als eine Überlagerung von Frequenzen<br />

dar Argumentation im Frequenzbereich Argumentation im<br />

Zeitbereich<br />

7.3.2 (b) Realisation in R<br />

Autokovarianz — aus Paket ts<br />

<br />

– acf berechnet die (empirische) Autokovarianz /–korrelation<br />

– pacf berechnet die (empirische) partielle Autokovarianz<br />

/–korrelation<br />

– zu den letzten beiden: spezielle plot–Funktion<br />

Spektraldichte /–verteilung — aus Paketen ts / MASS<br />

– ähnliche Probleme wie bei der Dichteschätzung<br />

– Methoden:<br />

£ Bestimmung aus Schätzung der ACF<br />

£ Bestimmung mit FFT<br />

£ Tapering<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

586


– in R — in ts<br />

£ Bestimmung aus Schätzung der ACF: spec. ar<br />

£ Bestimmung mit FFT: spec.pgram<br />

£ Tapering: spec.taper<br />

£ weitere Glättung durch gleitende Mittel mit span<br />

– alle in einer “Hülle” aufrufbar: spectrum<br />

– dazu spezielle plot–Methode:<br />

£ Angabe eines –Konfidenzintervalls<br />

£ Darstellung der Breite des Glättungsfensters<br />

– auch: empirische Verteilungsfunktion des Spektralmaßes als<br />

kumulatives Periodogramm — in MASS — cpgram<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

587


7.3.3 ARIMA–Modelle<br />

7.3.3 (a) Modelldefinition<br />

Modellgleichung <strong>für</strong> ARMA<br />

<br />

<br />

<br />

Stationarität <strong>und</strong> Invertierbarkeit alle Nullstellen über<br />

<br />

<br />

von ¨ bzw. ¤ sind <br />

<br />

<br />

<br />

(7.3.2)<br />

mit Beobachtungen ( Anfangswerten) <strong>und</strong> Innovationen <br />

Backshift:<br />

setzen wir <strong>und</strong><br />

¨ <br />

, ¤ <br />

, so wird aus (7.3.2)<br />

¨ ¤<br />

Identifizierbar falls ¨ <strong>und</strong> ¤ keine gemeinsame Nullstellen<br />

(7.3.3)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

588


“Stationarisierung” durch Differenzenbildung:<br />

mit ¡ heißt das Modell<br />

¡ ¨ ¤<br />

ARIMA–Modell der Ordnung <br />

7.3.3 (b) Realisation in R<br />

Simulation: arima.sim<br />

Parameterschätzung: arima, ar<br />

Vorhersage: predict .Arima<br />

Bestimmung der Modellordnung — zB mit arima, tsdiag<br />

7.3.4 Trend– <strong>und</strong> Saison–Bereinigung<br />

Zerlegungsmodelle<br />

(7.3.4)<br />

– (additive) Zerlegung in Trend, Saison <strong>und</strong> unstrukturiertes<br />

Rauschen —in R: StructTS<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

589


– saisonale ARIMA–Modelle —auch mit arima<br />

7.3.5 Multiple Zeitreihen<br />

7.3.5 (a) Einführung<br />

in vielen Situationen: Beobachte zu einem Zeitpunkt mehrere<br />

Phänomene simultan vektorwertige oder multiple Zeitreihen<br />

entsprechend Autokovarianz– bzw. Autokorrelationsfunktion<br />

matrixwertig Kreuzkorrelation / –spektrum<br />

auch “Stationarisierung” durch Bezug auf eine (nicht stationäre)<br />

Referenzzeitreihe Kointegration<br />

Modellierung komplexer Wechselwirkungen durch<br />

Transfer–Functions, c.f. Hamilton (1994)<br />

<br />

entsprechend vektorwertige ARIMA–Modelle VARIMA<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

590


7.3.5 (b) Realisation in R<br />

—in dse<br />

Simulation: simulate<br />

Modelldefinition: ARMA (ARMA), SS (Zustandsraummodell)<br />

Parameterschätzung: est .VARX.ar, est . black .box<br />

Bestimmung der Modellordnung est . black .box, reduction . Mittnik<br />

Vorhersage forecast , horizons . forecast<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

591


7.3.6 Zustandsraummodelle<br />

7.3.6 (a) Modelldefinition<br />

Modell in zwei Ebenen: Beobachtungs– <strong>und</strong> Zustandsebene<br />

im linearen, zeitdiskreten, Euklidischen Fall:<br />

(7.3.5)<br />

(7.3.6)<br />

interessierende Größe , Beobachtungen: <br />

je nach Horizont der zur Verfügung stehenden Beobachtungen<br />

Glättungs–, Filter– oder Vorhersageproblem<br />

sehr flexibel, extrem weiter Anwendungsbereich<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

592


7.3.6 (b) der Kalman–Filter<br />

mithilfe der Methode der kleinsten Qaudrate: rekursives<br />

Verfahren zur Schätzung der : der Kalman–Filter<br />

im linearen, zeitdiskreten, Euklidischen Fall:<br />

heißt Kalman–Gain<br />

in dse siehe Abschnitt 7.3.5 (b)<br />

(7.3.7)<br />

(7.3.8)<br />

(7.3.9)<br />

analoge Rekursionen <strong>für</strong> das Glättungs– <strong>und</strong> Prognoseproblem<br />

7.3.6 (c) Realisation in R<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

593


in robKalman — eine Bayreuth/Wiener Entwicklung <strong>und</strong> noch im<br />

“-Stadium”. . . — verfügbar unter<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/robKalman:<br />

– Paket <strong>für</strong> robustes Kalman-Filtern; siehe<br />

require (robKalman);?robKalman<br />

– (vorläufig) noch keine Verwendung von (S3)/(S4) Klassen<br />

– Simulation mit simulateState, simulateObs (inklusive<br />

Kontamination, wenn gewünscht)<br />

– Filtern mit KalmanFilter, bzw. robuste Alternativen: rLSFilter<br />

(auch multivariat), ACMfilter (univariat)<br />

in sspir :<br />

– Definition des Zustandsraums mit SS<br />

– sehr flexibel: auch GLM-Bestandteile <strong>und</strong> nichtlineare<br />

Übergänge möglich —siehe ?ssm<br />

– Simulation mit simulate<br />

– Kalman Filter kfilter<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

594


– Kalman Glätter smoother<br />

R–Beispiel 7.3-1 [Kalman-Filter]:<br />

data ( mumpsdat )<br />

time 1 : nrow ( mumpsdat )<br />

m3 ssm ( mumps ~ 1 + t v a r ( p o l y t i m e ( time , 1 ) ) +<br />

m3 . f i t k f s (m3)<br />

t v a r ( p o l y t r i g ( time , 1 2 , 1 ) ) ,<br />

f a m i l y=p o i s s o n ( l i n k=l o g ) , time=time ,<br />

data=mumpsdat )<br />

### ssm e x t r a h i e r t SS Modell aus d i e s e r Formel<br />

m3$ s s $ p h i [ " e p s i l o n " ] 0<br />

m3$ s s $ p h i [ " p o l y t i m e ( time , ␣ 1) time0 " ] 0<br />

m3$ s s $ p h i [ " p o l y t i m e ( time , ␣ 1) time1 " ] 0.0005<br />

m3$ s s $ p h i [ " p o l y t r i g ( time , 1 2 , 1 ) " ] 0.0001<br />

d i a g (m3$ s s $C0 ) 1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

595


7.3.7 (G)ARCH–Modelle<br />

7.3.7 (a) Modelldefinition<br />

ein nichtlineares Modell: Variabilität heute ist Funktion hängt ab<br />

von der Größe der Beobachtung gestern (<strong>und</strong> der Variabilität<br />

gestern im Fall von GARCH)<br />

Modell<br />

(7.3.10)<br />

<br />

Anwendung im Finanzbereich:<br />

Idee: Variabilität der Kurse hängt ab vom Marktvolumen<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(7.3.11)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

596


7.3.7 (b) Realisation in R — in tseries<br />

Simulation — händisch, siehe Beispiel zu ?garch<br />

Parameterschätzung garch<br />

Bestimmung der Modellordnung zB. garch, summary(auf ein<br />

garch-Objekt angewandt)<br />

Vorhersage predict<br />

7.3.8 weitere finanzmathematische Modelle<br />

z.B. CAPM, Sharpe ratio, Maxloss:<br />

portfolio .optim, sharpe, maxdrawdown<br />

übrigens auch: get. hist .quote, um historische Kurse von<br />

Yahoo!Finance herunterladen<br />

<br />

siehe Hilfe zu tseries<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

597


7.3.9 Tests aus Paket tseries<br />

7.3.9 (a) U.i.v.-Hypothese<br />

BDS-Test bds. test<br />

7.3.9 (b) Normalität<br />

Jarque-Bera-Test jarque .bera. test<br />

7.3.9 (c) Zufälligkeit bei binären Merkmalen<br />

Run-Test runs. test<br />

7.3.9 (d) Einheitswurzeltests<br />

Augmented Dickey-Fuller-Test adf. test<br />

Phillips-Perron-Test pp. test<br />

Kwiatkowski-Phillips-Schmidt-Shin (KPSS) kpss. test<br />

7.3.9 (e) Kointegrationstests<br />

<br />

Phillips-Ouliaris-Test po. test<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

598


7.4 Geostatistik<br />

7.4.1 Gr<strong>und</strong>lagen<br />

7.4.1 (a) Situation<br />

habe Messungen , die abhängen<br />

– vom Ort der Messung<br />

– evtl. Messzeitpunkt<br />

– Zufall<br />

also , der Ort, die Zeit<br />

Beispiele: Modellierung von Wetter, Metalleinlagerungen,<br />

Gewässerverunreinigung<br />

Schwierigkeit: niedrigdimensionale Modellierung der<br />

Abhängigkeit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

599


7.4.1 (b) Begriffe der räumlichen Statistik<br />

entsprechende Umsetzung der Begriffe Stationarität, Ergodizität<br />

Analogon zur ACF: Variogramm, Korrelogramm<br />

in R, genauer in spatial : Funktionen correlogram, variogram mit<br />

Modellierung expcov, gaucov, sphercov<br />

Caveat: Nugget–Effekt <strong>für</strong> Kovarianzen zwischen Punkten, die<br />

sehr nah beieinander liegen<br />

7.4.1 (c) Literatur<br />

anwendungsorientiert:<br />

Davis (1986), Isaaks and Srivastava (1989)<br />

Einstieg (allgemein):<br />

Unwin (1981), Cliff and Ord (1981), Ripley (1981),<br />

weiterführend: Cressie (1991), Ripley (1991)<br />

<br />

spezielle Themen: Stoyan et al. (1995)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

600


(zum Teil kommentierte) Literaturlisten:<br />

– http://www.geo.sbg.ac.at/staff/lorup/lv/geostats/literatur_kommentiert.htm<br />

– http://www.geo.sbg.ac.at/staff/lorup/lv/geostats2000/literatur_kommentiert.htm<br />

– http://slc.mathematik.uni-ulm.de/cgi-bin/vorlinfo.pl?lid=MAS020&semester=SS2002<br />

Links im WWW:<br />

– http://www.geog.fu-berlin.de/ ˜ jkrywkow/harald/geostatistik/referat.html<br />

– http://www.geocities.com/Tokyo/Flats/7335/medical_geography.htm<br />

– http://www.geo.sbg.ac.at/staff/lorup/lv/geostats2000s/links.htm<br />

– http://www.spatial-statistics.com/spatial_links_index.htm<br />

– http://www.statistical.org/<br />

7.4.1 (d) wichtige allgemeine Pakete in R<br />

— zu beziehen auf CRAN<br />

der üblichen Distribution mit dabei: spatial ,<br />

<br />

allgemeine Bibliotheken:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

601


– geoR von Paulo J. Ribeiro Jr Peter J. Diggle gepflegt von<br />

Paulo J. Ribeiro Jr<br />

– geoRglm — GLM’s <strong>für</strong> Random Fields, von Ole F. Christensen<br />

<strong>und</strong> Paulo J. Ribeiro Jr gepflegt von Ole F. Christensen<br />

– in BT naheliegend — auch <strong>für</strong> Extremwertstatistik:<br />

RandomFields von Martin Schlather<br />

– ein objekt–orientierter Rahmen <strong>für</strong> geostatistische<br />

Modellierung: sgeostat, Orignal in S von James J. Majure;<br />

portiert in R, erweitert <strong>und</strong> gepflegt von Albrecht Gebhardt<br />

Raumzeitprozesse:<br />

– pastecs — siehe Abschnitt 7.3.1 (b),<br />

– spatstat von Adrian Baddeley <strong>und</strong> Rolf Turner, gepflegt von<br />

Adrian Baddeley<br />

Pakete von Roger Bivand<br />

<br />

– Räumliche Abhängigkeit — Gewichtsschemen, Modelle <strong>und</strong><br />

Statistiken: spdep, von Roger Bivand, mit Beiträgen von<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

602


Nicholas Lewin-Koh <strong>und</strong> Michael Tiefelsdorf, gepflegt von<br />

Roger Bivand<br />

– Räumliche <strong>und</strong> raum–zeitliche Analyse von Punktprozessen:<br />

splancs von Barry Rowlingson <strong>und</strong> Peter Diggle, adaptiert, in<br />

ein R–Paket “geschnürt” <strong>und</strong> gepflegt von Roger Bivand,<br />

pcp–Funktionen von Giovanni Petris<br />

Hilfspakete zur Triangulierung:<br />

– Delaunay Triangulierung <strong>und</strong> Dirichlet / (Voronoi)<br />

Tesselation (Pflasterung?): deldir , von Rolf Turner<br />

– Triangulierung auf einem ungleichmäßigen, –dimensionalen<br />

Gitter beobachteter Daten: tripack , Fortran Code von R. J.<br />

Renka, in R portiert <strong>und</strong> gepflegt von Albrecht Gebhardt mit<br />

Beiträgen von Stephen Eglen <strong>und</strong> Sergei Zuyev<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

603


7.4.2 Interpolation <strong>und</strong> Kriging<br />

Problem: Habe Messungen nur auf Gitter Schätzung an<br />

Nichtgitterpunkten<br />

Methoden:<br />

– niedrigdimensionale, polynomiale Interpolation<br />

– lokale Trendflächen<br />

– Ausnutzung der Kovariogramm–Struktur: Kriging —<br />

Vorhersage eines linearen Modells ,<br />

indem man die Prognose nicht auf setzt, sondern auf<br />

die aus den Residuen hervorgehende Prognose <strong>für</strong> <br />

in R — in Paket spatial<br />

– polynomiale Interpolation: surf . ls zur Bestimmung des<br />

Polynoms <strong>und</strong> trmat zur Auswertung auf (neuem) Gitter<br />

– lokale Trendflächen — in Paket modreg: loess zur<br />

Bestimmung der lokalen Fläche <strong>und</strong> predict zur Auswertung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

604


auf (neuem) Gitter<br />

– Kriging: anstelle von trmat nun prmat zur Auswertung der<br />

Kriging–Vorhersage, semat zur Auswertung der Vorhersage<br />

des Residuums auf (neuem) Gitter<br />

7.4.3 Punktprozesse<br />

modelliert das (zufällige) Auftreten von Phänomenen auf einer<br />

“Beobachtungsfläche” (–region, –menge)<br />

Beispiel: Verbrechen an einem bestimmten Ort, Ausbruch einer<br />

Krankheit<br />

Standardprozess: Poisson–Prozess — keine “Gleichzeitigkeit”<br />

Begriffe:<br />

– Intensität in Abhängigkeit einer betrachteten Teilmenge:<br />

erwartete Zahl an Ereignissen in dieser Menge<br />

– die – bzw. –Funktion:<br />

Punkte innerhalb eines Abstands ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

605


;<br />

Schätzung durch Kfn; durchschnittliches mit Kaver,<br />

maximales/minimales mit Kenvl<br />

– Einlesen der Daten <strong>und</strong> setzen des interessierenden Gebiets<br />

mit ppinit , neu setzen dann durch ppregion<br />

Alternative zum Poissonprozess: der Strauss–Prozess in spatial<br />

realisiert durch Strauss (<strong>für</strong> Simulationen) <strong>und</strong> pplik zum<br />

Einpassen der Parameter an reale Daten<br />

R–Beispiel 7.4-1 [Piniendatensatz aus Schweden]:<br />

l i b r a r y ( s p a t i a l )<br />

# E i n l e s e n : Daten d e r P i n i e n + Def . b e r e i c h s<br />

p i n e s p p i n i t ( " p i n e s . dat " )<br />

par ( mfrow=c ( 2 , 2 ) , pty=" s " )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

606


p l o t ( p i n e s , x l i m=c ( 0 , 1 0 ) , y l i m=c ( 0 , 1 0 ) ,<br />

x l a b="" , y l a b="" , x a x s=" i " , yaxs=" i " )<br />

p l o t ( Kfn ( p i n e s , 5 ) , t y p e=" s " ,<br />

x l a b=" d i s t a n c e " , y l a b="L ( t ) " )<br />

l i m s Kenvl ( 5 , 100 , Psim ( 7 2 ) )<br />

l i n e s ( l i m s $x , l i m s $ l , l t y =2)<br />

l i n e s ( l i m s $x , l i m s $u , l t y =2)<br />

p p r e g i o n ( p i n e s )<br />

p l o t ( Kfn ( p i n e s , 1 . 5 ) , t y p e=" s " ,<br />

x l a b=" d i s t a n c e " , y l a b="L ( t ) " )<br />

l i m s Kenvl ( 1 . 5 , 1 0 0 , S t r a u s s (72 , 0 . 2 , 0 . 7 ) )<br />

l i n e s ( l i m s $x , l i m s $a , l t y =2)<br />

l i n e s ( l i m s $x , l i m s $ l , l t y =2)<br />

l i n e s ( l i m s $x ,<br />

<br />

l i m s $u , l t y =2)<br />

p p l i k ( p i n e s , 0 . 7 )<br />

l i n e s ( Kaver ( 1 . 5 , 1 0 0 , S t r a u s s (72 , 0 . 1 5 , 0 . 7 ) ) , l t y =3)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

607


8 fortgeschrittene<br />

Programmierung<br />

8.1 R als objektorientierte Sprache<br />

8.1.1 Paradigmen objektorientierter<br />

Programmierung (OOP)<br />

8.1.1 (a) Literatur<br />

Booch (1995)<br />

Stroustrup (1987)<br />

8.1.1 (b) allgemeine Prinzipien in der Programmierung<br />

prozedurales Programmieren:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

608


– Gr<strong>und</strong>situation: einzelner Programmierer<br />

aus Übersichtlichkeitsgründen: Aufteilen der Programmierung<br />

in einzelne Funktionen/Prozeduren<br />

– Paradigma: “Entscheide, welche Prozeduren Du willst;<br />

verwende den besten Algorithmus, den Du kennst.”<br />

modulares Programmieren<br />

– Gr<strong>und</strong>situation: Gruppe von Programmierern<br />

Aufteilen der Programmierung in einzelne Module von<br />

unterschiedlichen Autoren<br />

– Modul Menge von Prozeduren Daten die diese<br />

manipulieren<br />

– Paradigma: “Entscheide, welche Module Du brauchst; zerlege<br />

die Daten so in Module, dass die Daten in Module<br />

eingekapselt sind.”<br />

– Transfer von Daten in <strong>und</strong> aus Modul über<br />

Schnittstellenfunktionen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

609


Datenabstraktion<br />

– Anlegen spezifischer, benutzerdefinierter Typen ( abstrakte<br />

Datentypen)<br />

viele verschiedene Schnittstellenfunktionen<br />

– Paradigma: “Entscheide, welche Typen Du willst; stelle eine<br />

komplette Menge von Operationen zur Manipulation eines<br />

jeden Typs zur Verfügung.”<br />

– Problem: statische Typen oft nicht flexibel genug <strong>für</strong> geringe<br />

Erweiterungen<br />

objektorientiertes Programmieren [OOP]<br />

– Zusammenfassung von Datentyp (Daten: Attribute) <strong>und</strong><br />

zugehörigen Operatoren (Methoden) in einer Struktur<br />

(Klasse) mit eigenem Typ.<br />

– Paradigma: “Entscheide, welche Klassen Du brauchst; stelle<br />

<strong>für</strong> jede Klasse eine komplette Menge von Operationen zur<br />

Manipulation zur Verfügung; mache Gemeinsamkeiten mit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

610


anderen Klassen via Vererbung explizit.”<br />

Teile der folgenden Abschnitte sind einem Referat von Sebastian<br />

Schmidt vom 17.06.2002 entnommen.<br />

8.1.2 OOP – Allgemein<br />

8.1.2 (a) Gr<strong>und</strong>prinzipien der OOP<br />

Kapselung: Zugriff auf Attribute nur über Methoden der Klasse,<br />

kein direkter Zugriff auf Attribute erlaubt.<br />

Vererbung: Die abgeleitete Klasse erbt die Attribute <strong>und</strong><br />

Methoden ihrer Basisklasse(n). Spezialisierung ist dabei möglich<br />

durch<br />

– Überschreiben von Methoden <strong>und</strong><br />

<br />

– Hinzufügen neuer Methoden <strong>und</strong> Attribute.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

611


8.1.2 (b) Begriffe / Sprechweisen<br />

Klassen: (benutzerdefinierter) Datentyp; Struktur aus<br />

– Daten [Members] <strong>und</strong><br />

– Funktionen [Methoden], um diese Daten zu manipulieren<br />

Member/Elemente/Eigenschaften: typischerweise unter einem<br />

Obergesichtspunkt gruppierte Daten<br />

Methoden: Funktionen, um die Members einer Klasse zu<br />

manipulieren<br />

abgeleitete Klassen:<br />

– Erweiterung bestehender Klassen, indem die bisherigen<br />

Eigenschaften einfach übernommen (vererbt) werden <strong>und</strong><br />

neue hinzugefügt werden.<br />

– Methoden der ursrpünglichen Klasse können ohne<br />

Typumwandlung auf die Member der abgeleiteten Klasse<br />

zugreifen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

612


Instanz / Objekt: Variable vom Typ einer Klasse<br />

abstrakte Klassen / virtuelle Methoden:<br />

oft ist es aus Hierarchiegründen sinnvoll eine abstrakte<br />

“Urvater”-Klasse zu definieren, deren Methoden aber noch nicht<br />

sinnvoll zu definieren sind <strong>und</strong> erst bei abgeleiteten Klassen<br />

sinnvolle Realisierungen besitzen<br />

Konstruktor: Methode zur Initialisierung eines Objekts vom Typ<br />

der entsprechenden Klasse<br />

Destruktor: Methode zur Löschung eines Objekts vom Typ der<br />

entsprechenden Klasse (mit Speicherfreigabe)<br />

public/private/friends:<br />

– um die Kapselung zu erleichtern, können bestimmte<br />

Methoden <strong>und</strong> Member, die nur intern gebraucht werden<br />

(private), vor dem (fremden) Nutzer der Klasse verborgen<br />

bleiben;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

613


– dieser sieht nur die explizit als ihm zugänglich (public)<br />

gekennzeichneten Komponenten;<br />

– sollen bestimmte Komponenten im allgemeinen wie private<br />

behandelt werden, aber <strong>für</strong> in der Hierarchie nahestehende<br />

Klassen zugänglich sein friend–Konzept<br />

Templates:<br />

Ebenso wie es sinnvoll sein kann, verschiedene Instanzen ein <strong>und</strong><br />

derselben Klasse in Form von Variablen zu behandeln, ist es<br />

möglich, verschiedene ganz ähnlich zu realisierende Klassen in<br />

Form von einem Template zu realisieren; typischerweise können<br />

so verschiedene Realisierungen der gleichen Klasse, deren<br />

Member aber unterschiedliche Typen haben, z.B. eine Liste mit<br />

double–, bzw. char–Einträgen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

614


8.1.3 OOP – Realisierung in R<br />

8.1.3 (a) Exkurs: “Personen–Kult” zu John M. Chambers<br />

siehe auch seine Homepage:<br />

http://cm.bell-labs.com/cm/ms/who/jmc/index.html<br />

die “farbigen” Bücher<br />

– “Blue Book”:<br />

Becker et al. (1988), Einführung von S Version 2,<br />

– “White Book”:<br />

Chambers and Hastie (1992), Einführung von S Version 3<br />

— neue Strukturen zur Modellformulierung in S<br />

– “Green Book”:<br />

Chambers (1998), Beschreibung von S Version 4<br />

wichtige Papers:<br />

“Classes and methods in S.” Teil I/II (Chambers (1993a,b)),<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

615


auch im Netz: http://cm.bell-labs.com/stat/doc/93.26.ps <strong>und</strong><br />

http://cm.bell-labs.com/stat/doc/93.27.ps<br />

Bemerkung 8.1-1:<br />

Die OOP ist in R historisch bedingt auf zwei verschiedene Weisen<br />

realisiert:<br />

S3-Classes:<br />

basierend auf S Version 3 — einzige Objektorientierung bis<br />

einschließlich R 1.6.1<br />

– noch keine Polymorphie (siehe später)<br />

– keine formale Klassendefinition möglich<br />

– Feststellung der Klasse eines Objekts durch das Attribut<br />

class , s.u.<br />

– kein klarer Vererbungsmechanismus<br />

– immer noch wichtig: 80% des (Standard-R-)Codes noch mit<br />

S3-Konzept geschrieben<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

616


S4-Classes:<br />

basierend auf S Version 4 — ab R 1.7.0 zusätzlich zu<br />

S3-Classes; größere Umstellungen ab R 2.0.0<br />

– Polymorphie zulässig<br />

– Gr<strong>und</strong>lage dieser Vorlesung<br />

8.1.3 (b) Abstrakte Datentypen / Klassen<br />

eine einfache Idee, Programme lesbarer, modularer <strong>und</strong> leichter<br />

modifizierbar zu gestalten<br />

durch Verwendung eigener Datentypen wird man unabhängig<br />

von der konkreten (Rechner–)Darstellung / Implementierung der<br />

Daten, man muss nur wissen, welche Operationen zulässig sind<br />

Beispiel: lm1 lm(y~x) erzeugt ein Ergebnis vom Typ lm.<br />

<br />

– Aufgabe: Ausgabe der Residuen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

617


– Lösungen:<br />

new;<br />

<br />

a lm1$residuals<br />

b resid (lm1)<br />

– Ansatz (b) ist vorzuziehen, denn er verlangt nicht, dass lm1<br />

eine Liste ist<br />

– Nach Modifikation / Erweiterung des Typs lm ist der<br />

erweiterte Typ keine Liste mehr!<br />

– Ansatz (b) funktioniert aber weiter.<br />

“Nicht die Implementation eines Objekts steht im<br />

Vordergr<strong>und</strong> sondern das, was wir mit ihm tun.”<br />

CAVEAT: unterschiedliche Sprechweise: in S heißen Members<br />

slots<br />

Instanzierung/Initialisierung eines Objekts durch Konstruktor<br />

– Beispiel: xnew("circle",r=3.3)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

618


– generiert ein Objekt x vom Typ / Klasse “circle”<br />

8.1.3 (c) Methoden<br />

in den meisten Umsetzungen des OOP–Konzeps, wie C++, ADA,<br />

MODULA sind die Methoden spezielle Member <strong>und</strong> als solche über<br />

die Instanz zugänglich — vgl. z.B. in C++: Sei X eine Instanz der<br />

Klasse shape, <strong>und</strong> diese habe die Methode rotate, <strong>und</strong> die<br />

Member xcoordlist, ycoordlist. Dann rotieren wir die<br />

Member von X um durch Aufruf von X.rotate(20); eine<br />

solche Herangehensweise heißt in der Terminologie von<br />

Bengtsson (2003) COOP oder class-object-orientated<br />

programming<br />

in S dagegen: FOOP (function-object-orientated programming);<br />

hier sind die Methoden nicht am Objekt, sondern sind<br />

generischen Funktionen zugeordnet.<br />

Wie erkennt dann S, welche Methode print bei einem<br />

konkreten Objekt zu verwenden ist?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

619


Konzepte: generische Funktion <strong>und</strong> Method Dispatch<br />

[Methoden–Zuordnung]<br />

über generische Methoden wird Polymorphismus realisiert<br />

(mehrere print–Methoden <strong>für</strong> verschiedene Klassen)<br />

die Liste der Argumente einer Methode (vgl. args bei<br />

Funktionen) heißt auch Signatur<br />

es sei denn man hat gute Gründe: ... als Argument in<br />

generischer Funktionen, um diese leicht erweiterbar zu halten<br />

das Method Dispatching erfolgt über die generische Funktion,<br />

<strong>und</strong> zwar wie folgt:<br />

– bei Aufruf einer generischen Funktion werden alle unter<br />

diesem Namen verfügbaren Methoden gelistet<br />

– gemäß der Klassenhierarchie werden die Methoden<br />

angeordnet, <strong>und</strong> zwar die spezifischste (in der<br />

Vererbungs–Hierarchie am weitesten unten stehende) zuerst<br />

<strong>und</strong> dann die weniger spezifischen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

620


– die spezifischste Methode wird verwendet<br />

Welche Methode “spezifischer” ist als andere entscheidet S<br />

anhand der Klasse der Argumente der generischen Methode —<br />

<strong>und</strong> mit der damit implizierten Klassenhierarchie<br />

im S3–Klassenkonzept erfolgt das Dispatching nur anhand des<br />

ersten Arguments, im S4–Klassenkonzept anhand aller<br />

Argumente<br />

im S3–Klassenkonzept ist das Dispatching sehr informell;<br />

Objekte können ihre Klasse ändern oder auch extern<br />

umgewandelt werden.<br />

Im S4–Klassenkonzept ist die Klasse fix!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

621


8.1.3 (d) Klassen <strong>und</strong> Vererbung im S3–Klassenkonzept<br />

Jedes R-Objekt speichert seine Klasseninformation in einem<br />

String-Vektor. Das erste Element ist die Klasse des Objekts, das<br />

zweite die Vaterklasse, <br />

Setzen des Klassenvektors: class ()


Konflikt / Zweideutigkeit: foo.bar.baz wird sowohl als Methode<br />

bar.baz der Klasse foo als auch als Methode baz der Klasse<br />

<br />

foo.bar interpretiert<br />

Methoden können auch direkt aufgerufen werden (ohne<br />

generische Methode) Check der Argument-Typen notwendig<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

623


8.1.3 (e) Klassen <strong>und</strong> Vererbung im S4–Klassenkonzept<br />

viel umfassender als S3–Klassenkonzept<br />

<br />

– explizite Definition von Klassen <strong>und</strong> Spezifikation von<br />

Vererbung<br />

– generische Methoden führen Buch über spezifische Methoden<br />

– multiple Zuordnung [multiple dispatch] möglich<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

624


8.1.3 (f) weitere Literatur<br />

Beiträge von Bob Gentleman auf der Homepage des “S<br />

Programming Workshop” am Department of Statistics an der<br />

University of Auckland, 13. <strong>und</strong> 14. Februar 2003,<br />

http://www.stat.auckland.ac.nz/S-Workshop/<br />

– die Slides:<br />

http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/Methods.pdf<br />

– eine Kurzzusammenfassung:<br />

http://www.biostat.harvard.edu/courses/individual/<br />

die R–Manuals<br />

– Writing R Extensions:<br />

<br />

/bio271/lectures/L11/S4Objects.pdf<br />

– R Language Definition:<br />

http://cran.r-project.org/doc/manuals/R-lang.pdf<br />

http://cran.r-project.org/doc/manuals/R-exts.pdf<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

625


8.1.4 Befehle: Klassen im S4–Klassenkonzept<br />

8.1.4 (a) Klassendefinition: Syntax <strong>und</strong> Beispiele<br />

Verwendung der Bibliothek methods<br />

mithilfe der Funktion setClass<br />

diese hat als Argumente (in dieser Reihenfolge)<br />

– Class: ein Character-String als Name der Klasse<br />

– representation: Namen <strong>und</strong> Typen der Slots<br />

– prototype: normalerweise eine Liste mit<br />

Default–Slotbelegungen; spezifiziert, wie eine neue Instanz<br />

dieser Klasse bei der Initialisierung aussehen soll;<br />

kann auch über eine initialize–Methode <strong>für</strong> die Klasse<br />

kontrolliert werden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

626


– validate: eine Funktion, die überprüft, ob es sich bei einer<br />

Instanz um eine zulässige Wertebelegung der Klasse handelt<br />

– where: in welchem environment soll die Klassendefinition<br />

abgelegt werden?<br />

– contains: welche Klassen sind Ahnen dieser Klasse?<br />

Reihenfolge relevant <strong>für</strong> Dispatch.<br />

– package: optional: welchem Paket (package) soll die Klasse<br />

zugeordnet werden?<br />

– formal: Soll eine formale Definition verlangt werden?<br />

– sealed: Falls TRUE, wird diese Definition gegen<br />

Überschreiben, i.e. gegen Neuzuordnung dieses<br />

Klassennamens einer alternativen Klassendefinition per<br />

setClass , geschützt<br />

– removeSubclassLinks: Wenn eine Klasse gelöscht wird,<br />

werden alle Verknüpfungen anderer Klassen zu dieser Klasse<br />

ungültig. Sofern dieses Argument nicht auf FALSE gesetzt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

627


wird, sucht removeClass alle solchen Verknüpfungen ab <strong>und</strong><br />

löscht diese. Man kann dieses Argument auch weglassen,<br />

oder auch die Positionen in der Suchliste spezifizieren, die bei<br />

dieser Suche nach Verknüpfungen durchlaufen werden sollen<br />

— per default werden alle mit attach in die Suchliste<br />

aufgenommenen Objekt–tables durchlaufen<br />

– resetSubclasses: soll resetClass auch alle bekannten<br />

Unter/Nachfahren–Klassen zurücksetzen?<br />

normalerweiseTRUE<br />

Beispiel: eine Struktur <strong>für</strong> spezifische Messungen der Gestalt<br />

<br />

setClass ("track", representation (x="numeric", y="numeric"))<br />

Beispiel (fortges.):<br />

eine abgeleitete Klasse, die zusätzlich noch einen Slot smooth hat<br />

setClass ("trackCurve", representation ("track",smooth="numeric"))<br />

<br />

Beispiel (fortges.): eine Klasse, bei der simultan analog zu<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

628


matplot mehrere Kurven verarbeitet werden können; hier ist ein<br />

Prototyping sinnvoll:<br />

R–Beispiel 8.1-2 [eine trackMultiCurve-Klasse]:<br />

(aus Chambers (1998)/R-Hilfe)<br />

s e t C l a s s ( " t r a c k M u l t i C u r v e " , r e p r e s e n t a t i o n (<br />

x=" numeric " , y=" m a t r i x " , smooth=" m a t r i x " ) ,<br />

p r o t o t y p e= l i s t ( x=numeric ( ) ,<br />

y=m a t r i x ( 0 , 0 , 0 ) ,<br />

smooth=m a t r i x ( 0 , 0 , 0 ) ) )<br />

offenbar ist "trackMultiCurve" kein direkter Nachfahre von<br />

"trackCurve"; damit aber dennoch die Methoden von<br />

"trackCurve" <strong>für</strong> "trackMultiCurve" zur Verfügung stehen, wenn<br />

die Zahl der Spalten von y <strong>und</strong> smooth gleich ist, müssen wir<br />

ein bedingtes Casting definieren:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

629


R–Beispiel 8.1-3 [bedingtes Casting]:<br />

s e t I s ( " t r a c k M u l t i C u r v e " , " t r a c k C u r v e " ,<br />

t e s t = f u n c t i o n ( o b j )#<br />

{ n c o l ( s l o t ( obj , "y" ) ) == 1} ,<br />

c o e r c e = f u n c t i o n ( o b j ) {<br />

})<br />

new ( " t r a c k C u r v e " ,<br />

x = s l o t ( obj , "x" ) ,<br />

y = as . numeric ( s l o t ( obj , "y" ) ) ,<br />

smooth = as . numeric ( s l o t ( obj ,<br />

" smooth " ) ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

630


Generierung einer Instanz von "trackCurve":<br />

R–Beispiel 8.1-4 [Instanzierung]:<br />

x0 1 : 1 0<br />

y0 s i n ( 1 : 1 0 ) + 0 . 3 £ rnorm ( 1 0 )<br />

ys s p l i n e ( x0 , y0 ) $y<br />

mycurve new ( " t r a c k C u r v e " , x=x0 ,<br />

y=y0 , smooth=ys )<br />

8.1.4 (b) Zugriff auf Slots im S4–Klassenkonzept<br />

Typen <strong>und</strong> Namen der Slots eines Objekts bekommt man mit<br />

getSlots() bzw. slotNames()<br />

Zugriff auf Slots eines Objekts immer mit @ möglich, z.B. gibt<br />

mycurve@x den Slot x von mycurve aus, <strong>und</strong> mycurve@y2£y0<br />

modifiziert den Slot y von mycurve<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

631


ABER: direkter Zugriff auf die Slots ist ein Verstoß gegen das<br />

Prinzip der Datenabstraktion! — wir hängen nun von der<br />

konkreten Implementation der Klasse ab!<br />

Verdeutlichung anhand eines Beispiels:<br />

– wir betrachten eine Klasse, die das Konzept “Dreieck”<br />

umsetzt; sei eine Instanz davon<br />

– ein Dreieck kann man auf verschiedene Arten darstellen:<br />

£ Position aller drei Ecken im <br />

£ Position zweier Ecken im <strong>und</strong> deren Winkel<br />

£ Längen der Seiten <strong>und</strong> Angabe des Punktes <br />

£ <br />

– es sollen gewisse Berechnungen mit Dreiecken durchgeführt<br />

werden<br />

– Wenn wir auf den Flächeninhalt mit x@area zugreifen, muss<br />

die Klasse mit einem solchen Slot implementiert sein.<br />

<br />

– Wenn wir stattdessen area(x) verwenden, können wir die<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

632


Methode (mit ein <strong>und</strong> demselben Namen!) <strong>für</strong> die<br />

verschiedenen Darstellungen von Dreiecken implementieren;<br />

im Beispiel einer Implementierung mit Slot area könnte das<br />

dann so aussehen: setMethod("area"," triangle ",x@area)<br />

8.1.4 (c) Virtuelle Klassen<br />

eine virtuelle Klasse ist eine Klasse, von der keine Instanzen<br />

gebildet werden können<br />

Zweck: eine gemeinsame Struktur <strong>für</strong> verschiedene Klassen zur<br />

Verfügung stellen, von denen Instanzen gebildet werden können<br />

Generierung einer virtuellen Klasse:<br />

– entweder: kein representation–Argument in setClass<br />

angeben<br />

– oder: die Klasse VIRTUAL ins representation–Argument<br />

einschließen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

633


Konsequenzen<br />

– die Methoden der virtuellen Klasse stehen allen abgeleiteten<br />

Klassen zur Verfügung<br />

– ein Slot einer neuen Klasse kann vom Typ der virtuellen<br />

Klasse sein Polymorphismus, i.e. eine Klasse kann mehrere<br />

“Väter” haben<br />

– die Slots der virtuellen Klasse stehen allen abgeleiteten<br />

Klassen zur Verfügung<br />

Beispiel: die Klasse "vector" ist virtuell <strong>und</strong> hat als abgeleitete<br />

Klassen “getypte” Vektoren, also character, numeric<br />

siehe auch getClass("vector"), <strong>und</strong> getMethods("length") zeigt die<br />

<strong>für</strong> die virtuelle Klasse definierte Methode <strong>und</strong> wie diese<br />

überladen wird<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

634


8.1.4 (d) Anwendung virtueller Klassen I: rekursiv definierte Klassen<br />

es soll ein Dendrogramm realisiert werden, also ein Baum mit<br />

zusätzlichen Attributen<br />

genauer soll es einen Wurzelknoten wknot, innere Knoten iknot<br />

<strong>und</strong> terminale Knoten tknot geben<br />

der gemeinsame Vorfahre dieser drei Knotentypen sei knot<br />

Chambers: Rekursivität keine gute Idee, weil die “whole object” Perspektive<br />

nicht möglich ist kein effizienter vektorwertiger Zugriff auf<br />

die Knotenelemente eines Baums möglich<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

635


Realisierung:<br />

R–Beispiel 8.1-5 [eine Dendrogramm–Klasse]:<br />

s e t C l a s s ( " knot " )<br />

s e t C l a s s ( " wknot " , r e p r e s e n t a t i o n ( l i n k s=" knot " ,<br />

r e c h t s=" knot " , Hoehe=" numeric " ) ,<br />

c o n t a i n s=" knot " )<br />

s e t C l a s s ( " i k n o t " , r e p r e s e n t a t i o n ( " wknot " ,<br />

v a t e r=" knot " ) , c o n t a i n s=" wknot " )<br />

s e t C l a s s ( " t k n o t " , r e p r e s e n t a t i o n ( l a b e l=" c h a r a c t e r " ,<br />

v a l u e=" numeric " , Hoehe=" numeric " ,<br />

v a t e r=" knot " ) , c o n t a i n s=" knot " )<br />

8.1.4 (e) Anwendung virtueller Klassen II: gemeinsame Oberklasse<br />

oft soll ein Slot je nach Situation entweder leer sein oder eine<br />

Liste enthalten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

636


Problem: NULL ist selbst keine Liste! — daher so ohne weiteres<br />

kein gemeinsamer Slot möglich<br />

Lösung: gemeinsame Oberklasse <strong>für</strong> NULL <strong>und</strong> list<br />

da<strong>für</strong> ab R 1.8.0 setClassUnion<br />

Realisierung:<br />

<br />

R–Beispiel 8.1-6 [die listOrNULL–Klasse]:<br />

—vgl. Chambers (1998)<br />

s e t C l a s s ( " listOrNULL " )<br />

s e t I s ( " l i s t " , " listOrNULL " )<br />

s e t I s ( "NULL" , " listOrNULL " ) ;<br />

# ab R 1 . 8 . 0 k u e r z e r :<br />

s e t C l a s s U n i o n ( " l i s t O r N u l l " , c ( "NULL" , " l i s t " ) )<br />

# damit m o e g l i c h :<br />

s e t C l a s s ( " c1 " , r e p r e s e n t a t i o n (#<br />

v a l u e=" listOrNULL " ) )<br />

y1 new ( " c1 " , v a l u e=NULL ) ; y1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

637


y2 new ( " c1 " , v a l u e= l i s t ( a =3)); y2<br />

8.1.4 (f) Initialisierung <strong>und</strong> Prototyping<br />

bei der Erzeugung einer Instanz einer Klasse gibt es im Prinzip<br />

zwei Mechanismen<br />

– Prototyping: Angabe eines prototype–Arguments, i.e. einer<br />

Default–Wertebelegung, z.B.<br />

s e t C l a s s ( " t r a c k M u l t i C u r v e " , r e p r e s e n t a t i o n (#<br />

x=" numeric " , y=" m a t r i x " ,<br />

smooth=" m a t r i x " ) ,<br />

p r o t o t y p e= l i s t ( x=numeric ( ) ,<br />

<strong>und</strong> dann Generierung der Instanz per<br />

y1new("trackMultiCurve")<br />

y=m a t r i x ( 0 , 0 , 0 ) ,<br />

smooth=m a t r i x ( 0 , 0 , 0 ) ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

638


– Bereitstellung einer Initialisierungsmethode:<br />

R–Beispiel 8.1-7 [eine Initialisierungsmethode]:<br />

setMethod ( " i n i t i a l i z e " , " t r a c k M u l t i C u r v e " ,<br />

f u n c t i o n ( . Object , x ){#<br />

)<br />

. Object@x x<br />

. Object@y m a t r i x ( c ( s i n ( x ) , cos ( x ) ) ,<br />

l e n g t h ( x ) , 2 )<br />

. Object@smooth m a t r i x ( c ( s i n ( x ) ,<br />

cos ( x ) ) , l e n g t h ( x ) , 2 )<br />

. Object }<br />

mycurve new ( " t r a c k M u l t i C u r v e " , x =0:100)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

639


8.1.5 Befehle: Methoden im S3– <strong>und</strong><br />

S4–Klassenkonzept<br />

Erinnerung:<br />

Methoden sind in R Funktionen, die man mit unterschiedlichen<br />

Argumenttypen aufrufen kann.<br />

Generic Functions sind Funktionen, die in Abhängigkeit von der<br />

Klasse ihrer Attribute eine Funktion aufrufen, die die eigentliche<br />

Arbeit übernimmt.<br />

Beispiele: plot, print , summary<br />

8.1.5 (a) Methoden im S3–Klassenkonzept<br />

Aufruf einer Methode: direkt oder über eine generische Funktion<br />

methods(class = c) gibt alle S3-Methoden der Klasse c als Liste<br />

zurück.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

640


Anlegen der generischen Funktion:<br />

<br />

– schreibe eine Funktion ()<br />

– in dieser Funktion benutze UseMethod(generic=«name>")<br />

— Funktionsweise:<br />

Wird Funktion mit Argument aufgerufen <strong>und</strong><br />

besitzt den Klassenvektor c(class1", class2"), so<br />

versucht UseMethod (in dieser Reihenfolge) eine der<br />

Funktionen .class1, .class2 oder<br />

.default aufzurufen. Falls keine dieser Funktionen<br />

existiert, wird ein Fehler ausgegeben.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

641


Anlegen einer spezifischen Methode <strong>für</strong> Funktion <strong>und</strong><br />

S3-Klasse <br />

<br />

– schreibe eine Funktion .()<br />

(Namenskonvention verbindlich!)<br />

– sei Mutterklasse von <br />

– soll innerhalb . auch der Code der Methode<br />

. abgearbeitet werden, so ist dies möglich<br />

mit NextMethod(generic=«name>")<br />

— Funktionsweise:<br />

£ die Argumente der aufrufenden Funktion<br />

.() werden übergeben, auch<br />

ihre lokalen Variablen bleiben gültig.<br />

£ Vorsicht: Nach Abarbeitung der mit NextMethod<br />

aufgerufenen Methode kehrt das Programm nicht in die<br />

aufrufende Methode zurück, der auf NextMethod folgende<br />

Teil wird also übersprungen!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

642


8.1.5 (b) Generische Funktionen in S4<br />

Definition: mit setGeneric<br />

– Argumente:<br />

£ name: Zeichenkette; Name der generischen Funktion<br />

£ def: eine Funktionsdefinition; erforderlich, falls es bisher<br />

noch keine Funktion mit Namen name<br />

£ weitere Argumente: hier nicht; siehe Hilfe zu setGeneric<br />

– Beispiel<br />

s e t G e n e r i c ( "myFoo" , f u n c t i o n ( o b j e c t )<br />

s t a n d a r d G e n e r i c ( "myFoo" ) )<br />

– dabei gibt standardGeneric("myFoo") einen Fehler aus, wenn<br />

keine Methode "myFoo" <strong>für</strong> den Typ des Arguments definiert<br />

ist<br />

Deklaration spezifischer abgeleiteter Methoden <strong>für</strong> einzelne<br />

Argumenttypen mit setMethod<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

643


– Argumente:<br />

<br />

£ f: Der Name der generischen Funktion als Character-string<br />

£ signature: ein Satz formaler Argumentnamen von f mit<br />

den entsprechenden Klassennamen als Character-strings;<br />

kann auch nur ein Vektor von Klassennamen sein; dann<br />

entspricht der erste Name dem Typ des ersten Arguments,<br />

der zweite dem des zweiten Arguments usw.<br />

£ definition: Eine Funktionsdefinition, die verwendet wird,<br />

wenn die Argumente im Aufruf von f mit denen der<br />

Klassen im signature–Argument zusammenpassen, —<br />

entweder direkt oder per Vererbung<br />

£ weitere Argumente: hier nicht; siehe Hilfe zu setMethod<br />

– R–Beispiel 8.1-8:<br />

setMethod ( "myFoo" , " c h a r a c t e r " , f u n c t i o n ( o b j e c t )<br />

p r i n t ( o b j e c t ) )<br />

myFoo ( a ) # g i b t a aus<br />

myFoo ( 1 ) # F e h l e r da k e i n C h a r a c t e r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

644


– R–Beispiel 8.1-9 [ein plot-Befehl]:<br />

## Plot Methoden f u e r t r a c k Objekte<br />

##<br />

## z u e r s t mit nur einem Objekt a l s Argument :<br />

setMethod ( " p l o t " , s i g n a t u r e ( x=" t r a c k " ,<br />

)<br />

y=" m i s s i n g " ) ,<br />

f u n c t i o n ( x , y , . . . )#<br />

p l o t ( s l o t ( x , "x" ) , s l o t ( x , "y" ) , . . . )<br />

## nun : p l o t d i e Daten aus dem t r a c k Objekt a u f<br />

## d e r y Achse gegen was auch immer a u f d e r<br />

## x Achse<br />

setMethod ( " p l o t " , s i g n a t u r e ( y = " t r a c k " ) ,<br />

)<br />

f u n c t i o n ( x , y , . . . ) p l o t ( x , s l o t ( y , "y" ) , . . . )<br />

## <strong>und</strong> e n t s p r e c h e n d mit t r a c k Daten<br />

## a u f d e r x Achse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

645


## d a b e i b e n u t z t : Kurzform d e r<br />

## S i g n a t u r s p e z i f i k a t i o n<br />

setMethod ( " p l o t " , " t r a c k " ,<br />

)<br />

f u n c t i o n ( x , y , . . . )#<br />

p l o t ( s l o t ( x , "y" ) , y , . . . )<br />

Löschen von Methoden <strong>und</strong> generischen Funktionen mit<br />

removeGeneric, removeMethod, removeMethods — letzteres zum<br />

Löschen ganzer Gruppen von Methoden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

646


8.1.5 (c) Zugriffsmethoden — Accessor Functions<br />

um den unmittelbaren Zugriff auf Slots mit @ zu vermeiden <br />

Zugriffsfunktionen<br />

Beispiel: Zugriff (noch ohne Modifikationsmöglichkeit) auf Slot<br />

y von trackMultiCurve via Methode y<br />

<br />

R–Beispiel 8.1-10 [Zugriffsmethode]:<br />

i f ( ! i s G e n e r i c ( "y" ) ) {<br />

i f ( i s . f u n c t i o n ( "y" ) )<br />

fun y<br />

e l s e fun f u n c t i o n ( o b j e c t )<br />

s t a n d a r d G e n e r i c ( "y" )<br />

s e t G e n e r i c ( "y" , fun )}<br />

setMethod ( "y" , " t r a c k M u l t i C u r v e " ,<br />

f u n c t i o n ( o b j e c t ) o b j e c t @ y )<br />

mycurve new ( " t r a c k M u l t i C u r v e " , x =0:100)<br />

y ( mycurve )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

647


8.1.5 (d) Überladen bestehender Funktionen<br />

Beispiel: Überladen des +–Operators <strong>für</strong> Zeichenketten<br />

<br />

setMethod ( "+" , c ( " c h a r a c t e r " , " c h a r a c t e r " ) ,<br />

f u n c t i o n ( e1 , e2 )#<br />

p a s t e ( e1 , e2 , sep="" ) )<br />

R–Beispiel 8.1-11 [Indexoperator]:<br />

— siehe auch Übung/Hilfe:<br />

Obwohl "[" <strong>und</strong> "length" keine gewöhnlichen, sondern . Primitive<br />

Funktionen sind (d.h. Code nicht sichtbar!), kann man sie trotzdem<br />

überladen:<br />

setMethod ( " [ " , " t r a c k " ,<br />

f u n c t i o n ( x , i , j , . . . , drop ) {<br />

x@x x@x [ i ] ; x@y x@y [ i ]<br />

x })<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

648


t1 new ( " t r a c k " , x =1:20 , y =(1:20)^2)<br />

p l o t ( t1 [ 1 : 1 5 ] )<br />

8.1.5 (e) Ersetzungsmethoden<br />

Problem: in S eigentlich kein “Pass by Reference” zur Übergabe<br />

von Argumenten, sondern “Pass by Value”, i.e. es werden lokale<br />

Kopien angelegt<br />

eigentlich keine Modifikation von Argumenten möglich<br />

aber: in S geschieht alles über Funktionen! Wie ist also dann die<br />

Zuweisung x [1] 10 organisiert?<br />

– x [1] 10 wird intern umgesetzt in<br />

xdo. call ("[", list (x ,1, value=10))<br />

– dabei wird zuerst x kopiert <strong>und</strong> der Wert des ersten<br />

Elementes wird auf gesetzt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

649


– die Funktion [ gibt dann ein Objekt vom gleichen Typ wie<br />

x zurück, nur eben mit den gewünschten Änderungen<br />

– zuletzt verknüpft (rebinds) der Auswertungsmechanismus in<br />

S das Symbol x mit diesem neuen Wert<br />

auf diese Weise “Pass by Reference” nachgeahmt<br />

<strong>für</strong> Ersetzungsmethoden ist die Strategie ähnlich:<br />

– zuerst muss eine generische Funktion erzeugt werden — mit<br />

einem –Suffix<br />

– dann muss man die Ersetzungsmethode definieren<br />

– dabei heißt das letzte Argument value, <strong>und</strong> die Methode<br />

liefert eine modifizierte Kopie des ersten Arguments zurück<br />

– beide Argumente müssen dabei angegeben werden, damit die<br />

Methode funktioniert.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

650


R–Beispiel 8.1-12 [Ersetzungsmethode]:<br />

s e t G e n e r i c ( "y " , f u n c t i o n ( x , v a l u e ) #<br />

s t a n d a r d G e n e r i c ( "y " ) )<br />

setReplaceMethod ( "y" , " t r a c k M u l t i C u r v e " ,<br />

f u n c t i o n ( x , v a l u e )<br />

)<br />

{x@y v a l u e<br />

x}<br />

y ( mycurve ) y ( mycurve) 2<br />

anderer Trick, “Pass by Reference” nachzuahmen:<br />

eval .parent( substitute (x@value))<br />

Dabei gibt substitute zu einen nicht ausgewerteten Ausdruck im<br />

Argument den Parsing-Tree zurück; dieser wird dann mit eval .parent im<br />

<br />

aufrufenden frame ausgewertet; vgl. auch Beispiel 6.6-1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

651


R–Beispiel 8.1-13 [Simulationsbeispiel]:<br />

<br />

setMethod ( " s i m u l i e r e " ,<br />

)<br />

s i g n a t u r e ( x=" s i m u l a t i o n " ) ,#<br />

f u n c t i o n ( x )#<br />

{ s e t . seed ( x@seed )<br />

}<br />

i f ( x @ r u n z a h l £ x@samplesize >0)<br />

e v a l . p a r e n t ( s u b s t i t u t e (#<br />

x@Daten m a t r i x ( rnorm (#<br />

x @ r u n z a hl £ x @ s a m p l e s i z e ) ,#<br />

x@runzahl , x @ s a m p l e s i z e ) ) )<br />

r e t u r n ( i n v i s i b l e ( ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

652


8.1.5 (f) elementweise Funktionen, arithmetische <strong>und</strong> andere<br />

<br />

Operatoren<br />

in S möglich: Gruppierung von Methoden, um diese als Gruppe<br />

bestimmten Klassen zur Verfügung zu stellen (c.f. 8.1.5 (g))<br />

wichtige Gruppe: die Gruppe der Math–Funktionen<br />

– genauer: Math ist die Gruppe der elementweise auf<br />

Datenstrukturen ausführbaren Operationen, wie z.B. "+"<br />

(das unäre!), sin, is . null , ....<br />

– R–Beispiel 8.1-14 Math–Funktionen:<br />

£ Ziel: Math–Funktionen <strong>für</strong> Simulationsklasse aus Übung<br />

£ Umsetzung: Math–Funktionen wirken auf Slot Daten<br />

setMethod ( "Math" , " s i m u l a t i o n " ,<br />

f u n c t i o n ( x ){#<br />

x@Daten=c a l l G e n e r i c ( x@Daten )<br />

x })<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

653


weitere Gruppen:<br />

– Math2<br />

£ zusätzlich zu Math: ein zweites Argument digits, das die<br />

Genauigkeit steuert;<br />

£ Beispiele: ro<strong>und</strong>, signif<br />

– Summary<br />

£ aggregieren (meistens) numerische Werte<br />

£ Beispiele: sum, summary, max<br />

£ summary fasst auch nicht numerische Werte zusammen<br />

£ Problem: Anwendung einer Funktion auf eine Liste<br />

typ-heterogener Objekte?<br />

£ Lösung: S wendet die Funktion dann rekursiv elementweise<br />

mit der entsprechenden Methode an<br />

arithmetische Operatoren<br />

– S benutzt “infix”–Notation, d.h. x£y anstelle der funktionalen<br />

“postfix”–Notation "*"(x,y) wie z.B. Lisp<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

654


– aber nur eine Frage des Interpreters; realisiert sind diese<br />

Funktionen genauso wie gewöhnliche<br />

– jeder solche Operator ruft eine Funktion mit Namen des<br />

“infix”–Operators in Anführungszeichen auf, also z.B. wird<br />

x£y intern umgesetzt in "£"(x,y)<br />

– Gruppen solcher zweistelligen Operatoren:<br />

£ Arith — Beispiele: + (binär!), /, ^<br />

£ Compare — Beispiele: >, >=, !=, compare<br />

£ Logic — Beispiele: &, !, |<br />

£ Ops Arith,Compare,Logic<br />

– Problem: Was tun, wenn der erste Operand von anderem<br />

Typ wie der zweite?<br />

– genauso: falls der zweite Operand fehlt (“missing”), dann<br />

sollte der Operator als unär interpretiert werden können,<br />

wenn dies sinnvoll ist<br />

<br />

finden einer gemeinsamen Mutterklasse, Casting, siehe<br />

Abschnitt 8.1.8<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

655


Chambers: Operatoren sollten sinnvoll sein, wenn einer der beiden<br />

Operanden numerisch "+" <strong>für</strong> Strings — wie in JAVA —<br />

keine gute Idee<br />

8.1.5 (g) eigene Gruppen generischer Funktionen<br />

Ziel: Anlage eigener Gruppen analog zu Math–Funktionen<br />

wichtig: alle Funktionen in der Gruppe müssen die gleichen<br />

formalen Argumente (<strong>und</strong> Namen!) besitzen — es findet kein<br />

weiteres matching zwischen dem Aufruf <strong>und</strong> der Ausführung der<br />

Methode statt!<br />

Anlegen einer Gruppe durch:<br />

setGroupGeneric("",function()NULL)<br />

Eintragen als Mitglied einer Gruppe durch:<br />

– setGeneric("",group="")<br />

<br />

– falls die Funktion schon als generisch deklariert ist:<br />

setGroup("","")<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

656


Anzeige aller Gruppenmitglieder mit<br />

getGroupMembers("")<br />

8.1.6 Befehle: Anfragen, welche Methoden wie<br />

existieren<br />

mit exaktem match:<br />

<br />

– Gebe Methode zu vorgegebener Signatur in entsprechender<br />

Datenbank zurück: <br />

getMethod("", signature(),<br />

[where=|frame=])<br />

– Gibt es Methode zu vorgegebener Signatur in entsprechender<br />

Datenbank? <br />

existsMethod("", signature(),<br />

[where=|frame=])<br />

– Finde Methode zu vorgegebener Signatur: <br />

findMethod("", signature())<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

657


– Gebe alle Methoden zu einer generischen Funktion in<br />

entsprechender Datenbank zurück: <br />

getMethods("",[where=|<br />

frame=])<br />

– Zeige alle Methoden zu einer bestimmten generischen<br />

Funktion <br />

showMethods("",[where=|<br />

classes =|, includeDefs=|,<br />

inherited =|, printto =])<br />

Dabei ist eine Liste mit Klassen, auf die die<br />

Suche beschränkt werden kann, mit includeDefs=T lässt man<br />

sich die Bodies der Methoden mit ausgeben, mit<br />

inherited =T, werden die neu als ererbt erkannten Methoden<br />

mit angegeben, mit können wir eine andere<br />

Ausgabe als die Konsole wählen —meist ein File.<br />

mit Ableitung / Dispatch (i.e. extends– <strong>und</strong> group–Relationen)<br />

– Gebe Methode zu vorgegebener Signatur in entsprechender<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

658


Datenbank zurück: <br />

selectMethod("", signature(),<br />

[where=|frame=])<br />

– Gibt es Methode zu vorgegebener Signatur in entsprechender<br />

Datenbank? <br />

hasMethod("", signature(),<br />

[where=|frame=])<br />

In welcher Datenbank ist eine Methode als generisch deklariert?<br />

findGeneric ("")<br />

Ist Funktion als generisch deklariert? <br />

isGeneric ("")<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

659


8.1.7 Befehle: Versionsmanagement<br />

[noch nicht in R realisiert; nur in Chambers (1998) konzipiert]<br />

praktisch nicht vermeidendes Problem:<br />

möchte Instanz einer Klasse einlesen, habe aber zwischenzeitlich<br />

die Klassendefinition geändert<br />

Default Lösung: S liest die Instanz in einer “unklassierten” Form,<br />

d.h. in einem Typ, der die gleichen Daten enthält wie das<br />

ursprüngliche Objekt, aber nicht mehr von diesem Typ ist<br />

besser: S bietet Tools, um verschiedene Versionen von<br />

Klassendefinitionen zu verwalten; diese umfassen<br />

– Verwaltung eines Objekts vom Typ version<br />

– diese enthält Meta–Information wie<br />

£ sukzessive “ representation ”s einer Klasse<br />

genauer: unclass()<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

660


£ Methoden zur Konvertierung von einer Klassendefinition in<br />

eine andere — oft automatisch beim update erstellbar,<br />

bzw. falls nicht vom Entwickler bereitzustellen<br />

– Versionsmanagement ist optional aber sehr empfohlen<br />

– Anmeldung einer Klasse zum Versionsmanagement mit<br />

setClassVersion ("")<br />

– Anmeldung eines Klassenupdates zum Versionsmanagement<br />

mit setClassVersion ("")<br />

– Umwandlung der Objekte vom alten Typ in den neuen Typ<br />

mit updateObjects("")<br />

– bei einer einfachen Erweiterung wird die<br />

updateObjectsMethode gemäß folgender Heuristik<br />

automatisch erstellt<br />

1. Slots, die in einer alten Version vorhanden waren <strong>und</strong> in<br />

<br />

der neuen nicht mehr, werden außer acht gelassen<br />

2. neuhinzugekommene Slots werden mit den default–Werten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

661


aus dem prototype–Argument initialisiert<br />

3. wenn ein Slot, der in beiden Versionen vorhanden ist, seine<br />

Klasse geändert hat, wird versucht, diesen mit einem<br />

Aufruf der as–Methode zu casten<br />

– bei jedem Aufruf von setClassVersion werden außerdem<br />

Datum <strong>und</strong> ein default–Kommentar zu den Änderungen<br />

abgelegt; diesen kann man im Aufruf auch selbst setzen<br />

– bei substanzielleren Änderungen muss der Entwickler die<br />

update–Methode im setClassVersion –Argument method<br />

bereitstellen, in der er ein Objekt, das aus<br />

unclass() hervorgeht, in den neuen Typ<br />

konvertiert<br />

– weiterhin hat setClassVersion ein Argument which das<br />

steuert, in welche Version automatisch gecastet werden soll<br />

— unbedingt angeben, falls man nur eine Testversion<br />

anmelden möchte!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

662


8.1.8 Befehle: Typüberprüfung zur Laufzeit <strong>und</strong><br />

Casting<br />

mit den Vererbungsmechanismen <strong>und</strong> den ausgeklügelten<br />

Castings ist es faktisch nicht möglich, zum Zeitpunkt der<br />

Programmierung eine Typ–Prüfung durchzuführen<br />

Typüberprüfung zur Laufzeit<br />

8.1.8 (a) Validitäts–Checks<br />

bei (permanenten) Zuweisungen wird automatisch geprüft, ob<br />

ein Objekt der gültigen Klassendefiniton genügt <br />

automatischer Validitäts-Check<br />

auch: expliziter Validitäts-Check durch validObject<br />

per default: nur Prüfung der Typen der “ representation ” der<br />

Klasse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

663


oft genauere Prüfung sinnvoll <br />

– Angabe einer validity –Methode als Argument bei der<br />

Klassendefinition<br />

– oder spätere Angabe mit einem Aufruf von setValidity<br />

die validity –Methode liefert entweder TRUE oder eine<br />

String–Message mit einer Problembeschreibung<br />

Beispiel 8.1-15 [Validität <strong>für</strong> die Matrixklasse]:<br />

– in der Arrayklasse wird geprüft, ob die Elemente des<br />

Dimensions-Slots .Dim <strong>und</strong> positiv sind, <strong>und</strong> mit der Länge<br />

des data–Arguments zusammenpassen. . .<br />

– Angabe der validity –Methode durch<br />

setValidity ("array", validArray )<br />

– dabei verwenden wir <strong>für</strong> validArray folgende Definition:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

664


v a l i d a r r a y f u n c t i o n ( o b j e c t ){#<br />

d o b j e c t @ . Dim<br />

i f ( ! a l l ( d>=0))<br />

r e t u r n ( " N e g a t i v e ␣ Elemente ␣ i n ␣dim ! " )<br />

e l s e i f ( prod ( d ) !=l e n g t h ( o b j e c t @ . Data ) )<br />

r e t u r n ( " F a l s c h e ␣ Datenlaenge " )<br />

dn o b j e c t @ . Dimnames<br />

i f ( l e n g t h ( dn)>0&&l e n g t h ( dn ) !=l e n g t h ( d ) )<br />

r e t u r n ( " F a l s c h e ␣ Zahl ␣an␣Dim Namen ! " )<br />

e l s e {<br />

dn1 s a p p l y ( dn , l e n g t h )<br />

i f ( any ( dn1>0 & dn1 !=d ) )<br />

r e t u r n ( " F a l s c h e ␣ E l e m e n t l a e n g e n ! " )<br />

}<br />

r e t u r n (TRUE)<br />

}<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

665


– Achtung: eigentlich Verwendung von @ schlechter Stil, aber<br />

hier genau angebracht!<br />

Denn: hier soll explizit die Implementation überprüft werden!<br />

S wird diese neue validity –Methode nun bei jeder<br />

(permanenten) Zuweisung verwenden<br />

um bei einem fehlgeschlagenem Validitäts-Check bei einer<br />

Zuweisung keine Daten zu verlieren, wird das Objekt zwar<br />

zugewiesen aber mit unclass “unklassiert”<br />

generelle Frage: Wann soll geprüft werden?<br />

In S: bei (permanenten) Zuweisungen, da sonst zu zeitaufwendig<br />

bei Übergabe eines Objekts als Argument einer Funktion keine<br />

erneute Prüfung!!<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

666


8.1.8 (b) Spezifizieren von is–Relationen — der setIs Befehl<br />

Situation:<br />

– die Signatur einer Methode enthält ein Argument arg der<br />

Klasse c1;<br />

– wir wollen die Methode auf eine Instanz X der Klasse c2<br />

anwenden<br />

X muss — möglichst automatisch — in Klasse c1 gewandelt<br />

/ gecastet werden<br />

Sprechweise: in S heißt dies coercing<br />

beim automatischen Casting muss erst dessen Zulässigkeit<br />

überprüft werden<br />

statische Variante: is<br />

— gibt TRUE zurück, falls c1 eine Oberklasse von c2 ist<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

667


oft unflexibel:<br />

– die Oberklasse “weiß” gar nicht, dass sie eine Oberklasse ist<br />

– ein Casting ist nur in manchen wichtigen speziellen<br />

Wertbelegungen des Objekts möglich — vgl. Beispiel 8.1-3<br />

erster Punkt: explizite Deklaration einer is–Relation durch setIs<br />

zweiter Punkt S erlaubt bedingtes Vererben<br />

dazu explizite Angabe eines “bedingten” is durch setIs unter<br />

Angabe eines Arguments test — eine Funktion die testet, ob<br />

die Bedingung zum Casten erfüllt sind, dann TRUE zurückgibt<br />

<strong>und</strong> andernfalls einen Fehler ausgibt<br />

WICHTIG: die Testfunktion muss einen einzigen logischen Wert<br />

zurückgeben — niemals Vektoren oder NA’s<br />

keine Verwendung von ==<br />

Verwendung von any, all , identical<br />

die Relation “Klasse c1 ist Oberklasse zu Klasse c2” wird in S<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

668


durch die Funktion extends beschrieben<br />

um alle Oberklassen einer Klasse im aktuellen Suchpfad zu<br />

bekommen: extends("")<br />

extends ist transitiv!<br />

keine einfache automatische Typumwandlung möglich eigene<br />

Casting–Methode als Argument coerce der Funktion setIs<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

669


8.1.8 (c) explizites Casting: as–Relationen<br />

generelle Methode zur Typumwandlung<br />

as(,"")<br />

um eine eigene as–Methode zum expliziten Casten zur<br />

Verfügung zu stellen: Deklaration als as–Relationen mit setAs<br />

8.1.9 Erfahrungen mit S4-Klassen<br />

dieser Abschnitt wurde von Matthias Kohl beigetragen<br />

langsames Anlegen von S4-Objekten<br />

– Anlegen neuer S4-Objekte ist ziemlich aufwendig (evtl. inkl.<br />

einem validity check)<br />

TIP: innerhalb von Funktionen mit S4-Objekt einer bestimmten<br />

Klasse als Argument, die neues Objekt eben dieser Klasse<br />

erzeugen:<br />

<br />

£ besser: kein neues Objekt erzeugen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

670


£ sondern: direkt slots des übergebenen Objekts modifizieren<br />

—evtl. mit @-Operator <strong>und</strong> dieses zurückgeben<br />

deutlich schneller<br />

<br />

besser bestehende S4 Objekte modifizieren als neue<br />

generieren<br />

schnelleres Dispatchen ("beim zweiten Mal"...)<br />

– bei Aufruf konkreter Methode wird Methode mit konkreter<br />

Signatur im Suchpfad abgelegt (mit Angabe inherited from<br />

...)<br />

BSP "+" im Zusammenhang mit " distr "<br />

Aufruf dieser Methode ist beim nächsten Mal schneller<br />

– Beispiel-Code<br />

r e q u i r e ( " d i s t r " )<br />

showMethods ( "+" )<br />

Norm ( ) + Pois ( )<br />

showMethods ( "+" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

671


– Probleme:<br />

£ z.B. bei getInfGamma in Paket ROptEst<br />

£ Situation: konkrete Methode mit verschiedenen Signaturen<br />

£ gibt zwei zulässige (unterschiedlich spezfische) Methoden<br />

£ eine passt genau, die andere nur per Vererbung<br />

£ bei erstem Aufruf: genau passende wird verwendet<br />

£ dazwischen: Aufruf der Methode mit anderer Signatur<br />

genau passende wird überschrieben<br />

£ bei nächstem Aufruf mit ursprünglicher Signatur:<br />

schlechter passende wird verwendet<br />

zu showMethods: Wie kommt man an body einer Funktion?<br />

– S3 Methoden: am Beispiel print<br />

# oder<br />

<br />

methods ( p r i n t )<br />

# Methoden mit £ s i n d "non v i s i b l e "<br />

methods ( c l a s s = " anova " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

672


# Methoden f ü r bestimmte K l a s s e<br />

# a l s B e i s p i e l<br />

p r i n t . anova<br />

# oder<br />

getS3method ( " p r i n t " , c l a s s = " anova " )<br />

# f ü r non v i s i b l e ( i n welchem Namespace ?)<br />

getAnywhere ( " p r i n t . aov " )<br />

# aha , Namespace " s t a t s "<br />

# a l s o auch<br />

s t a t s : : : p r i n t . aov<br />

# oder<br />

getFromNamespace ( " p r i n t . aov " , " s t a t s " )<br />

– S4 Methoden: am Beispiel show<br />

# mit getMethods werden a l l e Methoden i n k l u s i v e<br />

# i h r e r D e f i n i t i o n a n g e z e i g t => u n ü b e r s i c h t l i c h<br />

<br />

# b e i v i e l e n Methoden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

673


getMethods ( "show" )<br />

# b e s s e r<br />

showMethods ( "show" )<br />

# um e i n z e l n e Methoden i n k l . D e f i n i t i o n<br />

# a n z u zeigen , kann man f o l g e n d e r m a ß e n vorgehen<br />

getMethod ( "show" , " t r a c e a b l e " )<br />

# oder etwas u m s t ä n d l i c h e r<br />

showMethods ( "show" , c l a s s e s=" t r a c e a b l e " ,<br />

i n c l u d e D e f s = TRUE)<br />

Wann wird/soll validate ausgeführt werden?<br />

– wegen Geschwindigkeit: in setValidity Methode nur einfache<br />

Checks einbauen<br />

– genauerer Check möglich z.B. über neue generische Funktion<br />

mit entspr. Methoden —vgl. checkIC in ROptEst<br />

– Anlegen der setValidity Methode am besten gleich bei<br />

Einführung neuer Klasse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

674


– sonst möglich: Probleme bei tief gehenden Vererbungen<br />

setIs , setAs —Erfahrung <strong>und</strong> unerwartetes Verhalten...<br />

<br />

– setIs , setAs noch nicht völlig ausgereift [Stand: R 2.0.1]:<br />

£ <strong>für</strong> nachträgliche setIs Relation: auch "coerce" Methode<br />

(per setAs) überladen!<br />

Achtung bei Verwendung von Namespaces:<br />

¡ Anlegen setAs-Relation benötige<br />

exportMethods("coerce")<br />

¡ Anlegen einer setIs -Relation erfordert zusätzlich<br />

exportMethods("coerce")<br />

£ weiteres Problem<br />

¡ Ziel: " UnivariateDistrList " der Länge 1 in entspr.<br />

Verteilung wandeln<br />

setAs(" UnivariateDistrList ", " UnivariateDistribution ")<br />

¡ Annahme: Objekt der Klasse " UnivariateDistrList " hat<br />

Länge 1 <strong>und</strong> enthält Objekt der Klasse "Norm".<br />

¡ Dann: as (...) liefert nicht Objekt der Klasse "Norm",<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

675


sondern " UnivariateDistribution "<br />

setAs <strong>für</strong> alle Verteilungsklassen einzeln definieren<br />

initialize oder nicht<br />

– bei Anlegen einer initialize Methode wird die<br />

default-Methode überschrieben, in der jeder einzelne Slot<br />

gesetzt werden kann<br />

– vermeidbar durch Einsatz von generating functions.<br />

– Chambers (1998) empfiehlt deren Einsatz, um Benutzer<br />

Generieren von Klassen zu erleichtern<br />

– in generating function / initialize Methode möglich:<br />

einfache Validity Checks<br />

– durch Verwendung der generating function bleibt default<br />

initialize Methode erhalten (deren Verwendung bei<br />

Programmierung manchmal von Vorteil)<br />

– eigene<br />

<br />

initialize Methode sinnvoll:<br />

£ will verhindern dass bestimmte Slots explizit beim<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

676


Initialisieren gesetzt werden können<br />

£ BSP: Verteilungen, bei denen man nur Setzen der<br />

Parameter erlauben will, während r,d,p <strong>und</strong> q-Slot<br />

garantiert durch base-Methoden belegt sein sollen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

677


8.2 Schreiben eigener Pakete<br />

nach einem Tutorial von T. Lumley <strong>und</strong> D. Bates in Wien 2003<br />

8.2.1 Wie benützt man R effizient?<br />

8.2.1 (a) Wie speichert man seine Routinen?<br />

als Workspace:<br />

– beim Starten von R liest dieses das File .RData<br />

– beim Beenden Frage: gesamter Arbeitsspeicher (ohne<br />

eingeladene Pakete) als Workspace auf dieses File schreiben?<br />

– dies ist auch jederzeit mit save.image() möglich; wieder<br />

einladen mit sys .load.image()<br />

als Binärdateien:<br />

– mit dem save–Befehl kann man einzelne Funktionen <strong>und</strong><br />

Daten in Binärdateien schreiben<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

678


– diese kann man mit attach oder load wieder einlesen<br />

als Quelldateien<br />

8.2.1 (b) mehrere Projekte<br />

“Extremstrategien”:<br />

jedes Projekt in ein eigenes Verzeichnis<br />

– mit einem .RData–File in diesem Verzeichnis alles Wichtige<br />

ständig im Speicher halten<br />

– wenn Daten <strong>und</strong> Funktionen in mehreren Projekten<br />

gebraucht werden, diese hin- <strong>und</strong> herkopieren<br />

– das .RData–File ist zentral; alle Quelldateien dienen nur der<br />

Dokumentation<br />

alles als Sourcen speichern<br />

– <strong>für</strong> jeden Analyseschritt hat man eine Quelldatei, mit der die<br />

Daten eingelesen, verarbeitet <strong>und</strong> möglicherweise wieder<br />

modifiziert abgespeichert werden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

679


– die Quelldatei ist zentral — alle anderen abgespeicherten<br />

Dateien dienen nur der Aufwandsminimierung beim<br />

Verarbeiten<br />

Empfehlung in R:<br />

Weil Objekte nicht automatisch gespeichert werden (wie in<br />

S-<strong>Plus</strong>) besser alles als Sourcen speichern!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

680


8.2.1 (c) Nutzung von R–Output<br />

– unter Windows kann man den Output der Konsole als<br />

Textfile abspeichern<br />

– write . table produziert formattierten Text <strong>und</strong> kann im<br />

wesentlichen von L ATEX weiterverwendet werden<br />

– im Prinzip ist es möglich, über die DCOM Schnittstelle<br />

automatisierte Reports in MS WORD zu generieren<br />

– mit dem XML package kann man die Ausgabe in XML erreichen<br />

8.2.2 das R–packaging System<br />

8.2.2 (a) Warum packages ?<br />

R packages — im folgenden Pakete — erlauben es, Funktionen <strong>und</strong><br />

Daten zusammen mit ihrer Dokumentation zusammenzufassen.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

681


Bemerkung: Nicht verwechseln!! library <strong>und</strong> package; dazu Zhu Wang and<br />

Douglas Bates in R-help, (May 2004) (aus Paket fortunes)<br />

Z.W.: “I am trying to create a library which uses some Fortran<br />

source files [...]”<br />

D.B.: “Someone named Martin Maechler will shortly be sending you<br />

email regarding the distinction between ’library’ and ’package’ :-)”<br />

Im Unterschied zu anderen Programmiersprachen gilt in S die Konvention: Ein<br />

Paket (package) wird in einer library abgelegt, d.h. library ist eine Suchliste<br />

–vgl. Abschnitt 1.10.3.<br />

dynamisches Ein– <strong>und</strong> Ausladen:<br />

das Paket beansprucht nur dann Speicher, wenn es benutzt wird<br />

einfaches Installieren <strong>und</strong> Aufdatieren:<br />

die Funktionen, Daten <strong>und</strong> Dokumentationen werden alle<br />

konsistent <strong>und</strong> an die korrekte Stelle mit einem einzigen Befehl<br />

installiert <strong>und</strong> können entweder innerhalb oder außerhalb R<br />

ausgeführt werden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

682


Anpassung durch Nutzer oder Administrator:<br />

neben LAN–weiten Bibliotheken können einzelne Nutzer<br />

individuelle, private Bibliotheken von Paketen haben<br />

automatische Validierung:<br />

R stellt Befehle zur Verfügung, um offensichtliche Fehler<br />

aufzudecken, <strong>und</strong> um zu überprüfen, ob eine Dokumentation<br />

existiert <strong>und</strong> ob die angegebenen Beispiele so lauffähig sind<br />

die meisten Nutzer kennen Pakete von der Gr<strong>und</strong>distribution von<br />

R <strong>und</strong> von CRAN; mit dem R–packaging System können noch viel<br />

mehr Leute zu der Entwicklung von R beitragen, wobei<br />

gleichzeitig gewisse Mindeststandards garantiert werden<br />

Data packages sind sehr sinnvoll in der Lehre: Datensätze<br />

können zusammen mit ihrer Dokumentation <strong>und</strong> Beispielen<br />

verfügbar gemacht werden — c.f. Devore5–Paket von D. Bates<br />

Private Pakete sind extrem nützlich, um oft genutzte<br />

Funktionen <strong>und</strong> Daten zu organisieren <strong>und</strong> zu speichern<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

683


8.2.3 Struktur von R–Paketen<br />

die Gr<strong>und</strong>struktur eines R–Pakets ist ein Verzeichnis, das<br />

gewöhnlich enthält<br />

– ein DESCRIPTION–File mit einer Beschreibung des Pakets,<br />

Autor <strong>und</strong> Lizenzvereinbarung in einer strukturierte Textdatei<br />

– ein INDEX file, das alle Funktionen <strong>und</strong> Daten (<strong>und</strong> optional<br />

weitere Informationen) enthält — kann automatisch erzeugt<br />

werden!<br />

– ein NAMESPACE file, siehe Abschnitt 8.2.7<br />

– ein CITATION file, in dem man einen BibTEX Eintrag <strong>für</strong> sein<br />

Paket vornehmen kann<br />

– ein configure file <strong>und</strong> ein cleanup file, in dem man unter<br />

Unix (Bourne-)shell Scripten zum Aufruf vor <strong>und</strong> (sofern mit<br />

Option –clean gearbeitet wird) nach der Installation<br />

ablaufen lassen will<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

684


– ein COPYING file, in dem —falls abweichend von der<br />

GPL-Lizenz— Regelungen zum Kopieren des Pakets angeben<br />

kann<br />

– ein man/–Unterverzeichnis mit Dokumentationsfiles (im<br />

.Rd-Format, siehe Abschnitt 8.2.6<br />

– ein R/–Unterverzeichnis mit den R–Quelltexten<br />

– ein data/–Unterverzeichnis mit den Datensätzen<br />

– ein src/–Unterverzeichnis mit den Quellfiles <strong>für</strong> C, FORTRAN<br />

oder C++ Routinen<br />

– ein demo/–Unterverzeichnis mit ausführbaren Demos zum<br />

Paket<br />

nicht immer enthält es<br />

– ein tests–Unterverzeichnis mit Validierungstests<br />

– ein exec/–Unterverzeichnis mit anderen ausführbaren<br />

Programmen (z.B. JAVA oder Perl–Routinen)<br />

– ein inst/–Unterverzeichnis mit verschiedenen anderen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

685


Dingen wie .ps–Files<br />

– ein configure–Skript um die Verfügbarkeit anderer<br />

benötigter Software zu checken oder um Unterschieden<br />

zwischen Betriebssystemen zu handlen<br />

optional enthält es (ohne dass R es verwendet)<br />

– README file<br />

– NEWS file<br />

– Changelog file<br />

außer dem DESCRIPTION– <strong>und</strong> dem INDEX–File sind die meisten<br />

Punkte optional<br />

aber jedes sinnvolle Paket wird eine Dokumentation <strong>und</strong><br />

mindestens entweder ein R/– oder ein data/–Verzeichnis haben<br />

wird.<br />

Referenz zu diesem Abschnitt: Writing R Extensions (2006b,<br />

Abschnitt 1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

686


8.2.4 Aufbau des DESCRIPTION-file<br />

Elemente:<br />

es müssen/können Angaben zu folgenden Punkten gemacht<br />

werden — in der Form : <br />

– obligatorisch: Package, Title, Version, Author, Maintainer,<br />

Description<br />

– optional: Abhängigkeiten: Depends, Imports, Suggests<br />

– optional: schnelleres Laden; LazyLoad, SaveImage,<br />

– optional: SystemRequirements, Date, URL<br />

Folgende Elemente werden automatisch generiert:<br />

– Built<br />

– Packaged<br />

dabei bedeuten<br />

<br />

– Date: Erstellungsdatum, in “JJJJ-MM-TT”-Format<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

687


– LazyLoad: ein Mechanismus, der ab R Version 2.0.0 zur<br />

Verfügung steht: er lässt zu, dass Objekte erst in den<br />

Speicher geladen werden, wenn sie gebraucht werden;<br />

genaueres siehe Ripley (2004)<br />

– SaveImage: ein Mechanismus, der regelt, ob die R Objekte<br />

des Pakets aus einem gespeicherten image geladen werden<br />

—d.h. ein mit save / save.image abgelegter Workspace, siehe<br />

Abschnitt 1.9.1<br />

– Description: Eine kurze, umfassende Beschreibung dessen,<br />

was im Paket steht (ein Absatz)<br />

– Maintainer: ein einzelner Verantwortlicher <strong>für</strong> das Paket<br />

– License: unter welcher Lizenz darf das Paket verwendet<br />

werden. . . —typischerweise GPL<br />

– URL: ein Link auf eine Homepage zu diesem Paket<br />

– Depends: eine Komma getrennte Liste von Paketen, die das<br />

eigene Paket braucht; optional können die Paketnamen von<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

688


einem Ausdruck (= ) mit der<br />

entsprechend benötigten Version gefolgt werden, z.B.<br />

distr(>= 1.3)<br />

– Imports: listet die Pakete auf, deren Namespaces importiert<br />

werden sollen, siehe auch Abschnitt 8.2.7<br />

– Suggests: gleiche Syntax wie Depends; listet Pakete die<br />

wünschenswert sind, aber nicht notwendig sind<br />

– SystemRequirements: darüber hinausgehende Anforderungen<br />

an das System<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

689


Beispiel<br />

<br />

Package : d i s t r<br />

Date : 2004 03 15<br />

T i t l e : O b j e c t o r i e n t a t e d i m p l e m e n t a t i o n o f d i s t r i b u t i o n s<br />

V e r s i o n : 1 . 5<br />

Depends : R(>= 2 . 0 . 0 ) , m e t h o d s , g r a p h i c s , setRNG<br />

I m p o r t s : s t a t s<br />

LazyLoad : y e s<br />

SaveImage : no<br />

A u t h o r : F l o r i a n Camphausen , M a t t h i a s Kohl , P e t e r R u c k d e s c h e l , Thomas<br />

S t a b l a<br />

D e s c r i p t i o n : O b j e c t o r i e n t a t e d i m p l e m e n t a t i o n o f d i s t r i b u t i o n s and<br />

some a d d i t i o n a l f u n c t i o n a l i t y<br />

M a i n t a i n e r : P e t e r R u c k d e s c h e l <br />

L i c e n s e : GPL ( v e r s i o n 2 o r l a t e r )<br />

URL : h t t p : / /www . u n i b a y r e u t h . de / d e p a r t m e n t s / math / o r g / mathe7 /DISTR/<br />

Packaged : Thu Apr 15 1 6 : 0 9 : 0 2 2 0 0 4 ; tom<br />

B u i l t : R 2 . 0 . 1 ; i 6 8 6 pc l i n u x gnu ; 2005 03 15 1 4 : 1 4 : 2 0 ; u n i x<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

690


8.2.5 Format <strong>für</strong> Datensätze<br />

Datensätze werden mit dem Befehl data() eingeladen; diese können<br />

abgelegt sein als<br />

Textfile (.txt, .tab, .csv)— entweder Komma– oder<br />

whitespace getrennt<br />

S Quelltext, (.r, .R) erzeugt durch den dump–Befehl<br />

R–Binärdateien, (.rda, .RData) erzeugt durch den save–Befehl<br />

Der Filetyp wird anhand der Endung bestimmt.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

691


8.2.6 Dokumentation<br />

Das R–Dokumentationsformat lehnt sich an L ATEX an. Details siehe<br />

Writing R Extensions (2006b, Abschnitt 2).<br />

R–Beispiel 8.2-1 [eine Beispieldokumentation]:<br />

\name{ b i r t h d a y } % Anzeigename des H i l f e F i l e s<br />

\ a l i a s { q b i r t h d a y } % d i e Funktionen ,<br />

\ a l i a s { p b i r t h d a y } % d i e h i e r d o k u m e n t i e r t werden<br />

%e i n z e i l i g e r T i t e l d e r D o k u m e n t a t i o n s s e i t e<br />

\ t i t l e { W a h r s c h e i n l i c h k e i t e i n e r K o i n z i d e n z }<br />

%k u r z e B e s c h r e i b u n g<br />

\ d e s c r i p t i o n {<br />

b e r e c h n e t approx . Lsg . zu v e r a l l g e m . G e b u r t s t a g s p b ;<br />

\ code { p b i r t h d a y } b e r e c h n e t d i e W k e i t ( K o i n z i d e n z ) <strong>und</strong><br />

\ code { q b i r t h d a y } . . . . }<br />

\ usage { % wie<br />

<br />

man d i e F u n k t i o n e n a u f r u f t<br />

p b i r t h d a y ( n , c l a s s e s =365 , c o i n c i d e n t =2)<br />

q b i r t h d a y ( prob =0.5 , c l a s s e s =365 , c o i n c i d e n t =2)}<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

692


\ keyword { d i s t r i b u t i o n }<br />

\ c o n c e p t { e l e m t a r y s t a t i s t i c a l p roblems }<br />

8.2.6 (a) Abschnitte des Hilfefiles<br />

\name: Anzeigename des Hilfe-Files; nicht notwendig<br />

Übereinstimmung mit Filenamen des .Rd-Files<br />

\ alias<br />

– zur Gruppierung der Dokumentation verschiedener ähnlicher,<br />

inhaltlich zusammengehörender Objekte; z.B. rnorm, pnorm,<br />

qnorm, dnorm<br />

– Kriterium <strong>für</strong> R CMD check: Ist jedes Objekt im Paket<br />

dokumentiert?<br />

\arguments: eine Aufzählung der Argumente <strong>und</strong> ihrer Bedeutung<br />

\value: Beschreibung des Rückgabewertes<br />

<br />

\ details : eine längere Beschreibung der Funktion, falls notwendig<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

693


\ references : Literaturhinweise oder andere bibliographische<br />

Verweise (v.a. InterNet)<br />

\seealso: Referenzen zu verwandten Befehlen<br />

\examples: Anwendungsbeispiele <strong>für</strong> die Funktion<br />

\keyword: zur Erstellung eines Index (vorgegebene Schlagwörter<br />

—siehe File KEYWORDS.db im Verzeichnis doc unter dem<br />

R-Stammverzeichnis<br />

\concept: selbstvergebene Schlagwörter<br />

\section{}: Abschnitt mit selbst gewähltem <br />

8.2.6 (b) Dokumentation von Datensätzen<br />

obligatorisch: \docType{data}, \usage{data()},<br />

\keyword{datasets}<br />

\format: in welchem Format die Daten vorliegen<br />

<br />

\source: woher die Daten stammen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

694


8.2.6 (c) Formatbefehle zur Textmarkierung à la LATEX Einfügen von Zeilenumbrüchen mit \cr, neue Absätze mit einer<br />

Leerzeile<br />

\emph{}, \bold{}, \strong{} zum<br />

Hervorheben<br />

\squote{}, \dquote{}: Zitate mit ‘. . . ’, bzw “. . . ”<br />

\code{}: R-code; die Zeichen %, , müssen durch \<br />

maskiert werden, d.h. man fügt ein ‘\’ vor diese Zeichen<br />

\preformatted{}: vorformatierter Quellcode/Text<br />

\samp{}: Beispiel einer Zeichenkette<br />

\kbd{}: Eingabe an Konsole<br />

\pkg{}: ein Paket<br />

\file{}: ein File<br />

<br />

\email{}: eine Email-Adresse<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

695


\url{}: eine URL<br />

\var{}: metasyntaktische Variable (??)<br />

\env{}: Umgebungsvariable<br />

\option{}: Kommandozeilenoption<br />

\command{}: Befehl<br />

\dfn{}: Definition (bei der Einführung eines<br />

Begriffs)<br />

\acronym{}: ein Acronym wie GNU<br />

\cite{}: unverlinkte Referenz, z.B. ein Buch<br />

\link[|:]{}: verlinkte Referenz auf<br />

die Hilfeseite zu Objekt (zu Paket , bzw. Thema<br />

in Paket )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

696


8.2.6 (d) Listen-/Tabellenbefehle à la LATEX Listen:<br />

– Befehle: \itemize, \enumerate wie in L ATEX <strong>und</strong><br />

\describe wie \description<br />

– Gruppierung mit der “Liste” mit {}; Listenelemente<br />

mit \item<br />

– Beispiel:<br />

\ i t e m i z e {<br />

\ item e r s t e r Punkt<br />

\ item z w e i t e r Punkt }<br />

– die Listenbefehle können verschachtelt werden<br />

Tabellen:<br />

– Befehl: \tabular{rcl} wie in L<br />

<br />

ATEX d.h. mit jeweils einem<br />

Argument aus r, c, l pro Spalte <strong>für</strong> links-, rechtsbündige<br />

bzw. zentrierte Ausrichtung der Tabellenelemente<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

697


– Spaltenwechsel mit \tab, Zeilenwechsel mit \cr<br />

– Beispiel<br />

\ t a b u l a r { r l l l }{<br />

[ , 1 ] \ tab Ozone \ tab numeric \ tab Ozone ( ppb )\ c r<br />

[ , 2 ] \ tab S o l a r \ tab numeric \ tab S o l a r R ( l a n g )\ c r<br />

}<br />

8.2.6 (e) spezielle Befehle à la L ATEX zum Setzen von Gleichungen<br />

\eqn[{}]{} <strong>für</strong> Formeln innerhalb<br />

des Texts<br />

\deqn[{}]{} <strong>für</strong> abgesetzte<br />

Formeln<br />

wobei L<br />

<br />

ATEX-code im Mathematikmodus ist <strong>und</strong><br />

bei HTML, chm <strong>und</strong> R-Hilfe-Format verwendet wird<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

698


8.2.6 (f) Sonderzeichen<br />

R (“wird geschrieben als”) \R,<br />

als Funktionsargument \dots<br />

als Ellipse im laufenden Text \ldots<br />

% ist ein Kommentarzeichen; Text, der in dieser Zeile folgt, wird<br />

ignoriert<br />

\, %, {, } werden generell maskiert<br />

innerhalb von code-artigen Umgebungen wie \code,<br />

\preformatted, \examples (aber nicht \file) müssen<br />

daneben keine weiteren Zeichen maskiert werden<br />

im laufenden Text müssen daneben auch ‘$’, ‘#’ <strong>und</strong> ‘_’<br />

maskiert werden<br />

‘^’ \eqn{\mbox{\textasciicircum}}{^},<br />

‘~’ \eqn{\mbox{\textasciitilde}}{~},<br />

‘’ \eqn{\sim}{~},<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

699


‘’, ‘’, and ‘’ stehen nur in \eqn bzw. \deqn zur Verfügung<br />

ä, Ä, ö,Ö, ü,Ü, ß, œ, Œ, æ, Æ, å, Å, ø, Ø, ł, Ł, ¿, ¡, sowie ó, ò,<br />

ô, õ, ˙o, ŏ, ǒ, ő, oo, o¸, o., ō <strong>und</strong> ähnliche Sonderzeichen können<br />

mithilfe von Konstruktionen wie \enc{¨o}{o} eingefügt<br />

werden, wobei das erste Argument verwendet wird, wo andere<br />

Zeichensätze erlaubt sind, <strong>und</strong> das zweite eine<br />

ASCII-Transkription ist<br />

8.2.6 (g) Format der Hilfe-Files<br />

Dokumentation kann automatisch in verschiedenen Formaten wie<br />

HTML, ASCII, Nroff–Format, dvi <strong>und</strong> PDF erzeugt bzw.<br />

umgewandelt werden — Befehle<br />

R CMD Rdconv konvertiert von einem R-Dokumentationsformat<br />

in ein anderes oder extrahiert die lauffähigen Beispiele zum<br />

online-Testen; Formate ASCII , HTML, LATEX, S3– <strong>und</strong><br />

S4–Dokumentationsformat<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

700


R CMD Rd2txt erzeugt “schöne” formatierten Text<br />

R CMD Rd2dvi erzeugt DVI oder, mit Option pdf, PDF Format<br />

R CMD Sd2Rd erzeugt S4 Doku-Format (nutzt SGML-Format)<br />

aus S3 Doku-Format (nutzt Nroff-Format) aus<br />

8.2.6 (h) Dokumentation von S4-Klassen <strong>und</strong> -Methoden<br />

[experimentell, noch im Umbruch]<br />

jede nach außen sichtbare Klasse <strong>und</strong> Methode sollte zumindest<br />

einen \ alias -Eintrag haben<br />

wichtig: \ alias -Einträge sind von der Form -class<br />

bzw. ,-method, wobei<br />

eine Liste mit der Signatur der Methode ist,<br />

kommagetrennt <strong>und</strong> ohne Freizeichen zwischen den Einträgen<br />

der Signatur (sonst funktioniert der help-Mechanismus <strong>für</strong><br />

S4-Klassen nicht richtig)<br />

<br />

Hüllen werden mit promptMethods <strong>und</strong> promptClasses angelegt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

701


zusätzlich, falls eine spezielle Methode besonders dokumentiert<br />

werden soll:<br />

\S4method{}{}(),<br />

\S3method{}{}()<br />

8.2.6 (i) Dokumentation des Pakets an sich<br />

Pakete können eine Übersichts-Hilfeseite erhalten — mit einem<br />

\ alias {-package},<br />

dann: package? öffnet diese Hilfeseite; noch besser<br />

(falls kollisionsfrei möglich) zusätzlich \ alias {}<br />

Schablone mit promptPackage()<br />

Anordnung des Inhalts ist weitestgehend freigestellt;<br />

obligatorischer Tag: \docType{package}<br />

Empfehlung: kurze Übersicht; etwas detaillierte Dokumentation<br />

sollte in eine Vignette<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

702


Erinnerung: Außerhalb von Paketen werden einzelne Routinen mit<br />

Hilfe–Files versehen wie in Abschnitt 3.3.4 beschrieben<br />

8.2.6 (j) Vignetten<br />

[nach einem DSC–Tutorial 2003 von D. Bates <strong>und</strong> T. Lumley]<br />

Idee: Literate Programming:<br />

<br />

– http://www.literateprogramming.com/<br />

– http://en.wikipedia.org/wiki/Literate_programming<br />

Dokumentation <strong>und</strong> Quelltext werden<br />

£ in ein File geschrieben <strong>und</strong><br />

£ anschließend mit speziellen Werkzeugen verarbeitet<br />

Sweave:<br />

– Entwickler: Friedrich Leisch<br />

– Idee: Verbinden von Dokumentation / Artikel <strong>und</strong><br />

lauffähigem R–Code reproducible research<br />

– man schreibt einen leicht erweiterten L ATEX–Code — Endung<br />

des Files .Snw bzw. .Rnw<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

703


– .S[/R]nw-File wird mit mit dem Befehl Sweave in R übersetzt<br />

– Sweave extrahiert den Code, lässt ihn unter R ablaufen <strong>und</strong><br />

setzt den Output wieder ins Dokument ein<br />

Leser sehen, dass der Code funktioniert<br />

Input, Output <strong>und</strong> Text können beliebig angeordnet<br />

werden<br />

das Dokument kann erneut unter R abgearbeitet werden,<br />

um Resultate aufzudatieren<br />

– Auslösen von R-Code aus .S[R]nw-File in R mit Stangle<br />

– aktuelle Dokumentation:<br />

http://www.ci.tuwien.ac.at/~leisch/Sweave<br />

– Alternative zu Sweave jenseits von TEX:<br />

£ Verweben mit ODF (Open Document Format) anstelle von<br />

L ATEX-Code<br />

£ in R mit Paket odfWeave<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

704


Vignetten:<br />

– Idee: Lücke zwischen Funktionsdokumentation <strong>und</strong> Büchern<br />

über R zu stopfen<br />

– stark verwendet im Bioconductor Project<br />

– was in eine Vignette steht:<br />

ein einzelnes Thema<br />

lauffähiger Code basierend auf Daten, die in R verfügbar<br />

sind; die benutzten Libraries müssen dokumentiert sein<br />

sollte mehr als eine einzelne Funktion sein; sollte einen<br />

Prozess / eine Problemlösung beschreiben <strong>und</strong><br />

typischerweise mehrere Funktionen umfassen<br />

– Aufruf von Vignetten von R aus mit vignette ()<br />

– Referenz: Writing R Extensions (2006b), Kapitel 1.4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

705


R–Beispiel 8.2-2 [Vignetten]:<br />

## A u f l i s t e n a l l e r vorhandenen V i g n e t t e n<br />

v i g n e t t e ( )<br />

## A u f r u f V i g n e t t e zu Paket g r i d<br />

v i g n e t t e ( " g r i d " )<br />

#oder<br />

v1 v i g n e t t e ( " g r i d " ) ; p r i n t ( v1 )<br />

## H e r a u s l o e s e n des Codes<br />

e d i t ( v1 )<br />

8.2.6 (k) Qualitätskontrolle<br />

Das packaging system kontrolliert die Dokumentation, ob<br />

– alle Objekte dokumentiert sind (d.h. ein entsprechender<br />

\ alias -Eintrag vorliegt)<br />

– die Dokumentation mit dem dokumentierten R-code<br />

konsistent ist<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

706


– die Angabe unter \usage konsistent zur Definition der<br />

Funktion ist<br />

– die Beispiele in der Sektion \examples laufen<br />

Mindeststandard <strong>für</strong> die Dokumentation<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

707


8.2.7 Namespaces<br />

Problematik: viele Entwickler schreiben simultan an ihren<br />

Routinen früher oder später kommt es zu Konflikten mit<br />

Namen von Objekten in verschiedenen Paketen<br />

Ausweg: Namespaces —vergleiche Tierney (2003a), Ligges<br />

(2005, S. 81ff <strong>und</strong> Abschnitt 10.6), sowie<br />

http://en.wikipedia.org/wiki/Namespaces<br />

Ideen:<br />

– nur noch bestimmte Objekte eines Paketes sind <strong>für</strong> den<br />

Nutzer sichtbar; deren Namen werden explizit exportiert<br />

– alle anderen Objekte sind nur <strong>für</strong> andere Funktionen im<br />

selben Namespace sichtbar<br />

– in eigene Pakete (mit eigenem Namespace) kann man auch<br />

Objekte aus anderen Paketen importieren; deren Namen<br />

kann dann nicht mehr vergeben werden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

708


Kommt es dennoch zu Namenskollisionen,<br />

– überschreibt das entsprechende Objekt aus dem<br />

eigenen Namespace nicht dasjenige aus einem<br />

fremden, sondern maskiert es nur;<br />

– das Objekt aus dem fremden Namespace bleibt<br />

erhalten, ist nur nicht mehr mit ansprechbar;<br />

– auf exportierte Objekte aus Paket greift man mit<br />

:: zu —dies funktioniert auch bei<br />

Maskierung!<br />

– auf nicht exportierte Objekte aus Paket greift man<br />

mit ::: zu —dies funktioniert auch bei<br />

Maskierung!<br />

– Achtung: Zugriffe mit :: oder gar ::: sind aufwendiger; es<br />

wird das entsprechende Paket geladen aber nicht in<br />

den Suchpfad eingetragen!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

709


nützlich zum Suchen von Objekten:<br />

getAnywhere: sucht nach Objekten im Suchpfad <strong>und</strong> in<br />

geladenen Namespaces, auch wenn das Objekt nicht exportiert<br />

oder der Namespace in den Suchpfad gehängt ist<br />

Anlage eines Namespace:<br />

<br />

– im Pakethauptverzeichnis legt man eine (Text-)Datei<br />

NAMESPACE an<br />

– Befehle<br />

£ export(,,....),<br />

exportPattern() (vgl. 1.10-1), exportieren<br />

(klassische) Objekte<br />

£ import(),<br />

importFrom(,,,....)<br />

importieren alle / bzw. die gelisteten (klassischen) Objekte<br />

aus Paket <br />

£ <strong>für</strong> S3-Klassen: S3method(,)<br />

registriert die S3-methode .()<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

710


£ <strong>für</strong> S4-Klassen:<br />

¡ per .onLoadfunction(,)require (methods)<br />

zu Beginn des ersten eingeladenen source-files muss das<br />

methods-Paket eingeladen werden<br />

¡ alle nach außen sichtbaren S4-Klassen <strong>und</strong> generischen<br />

Funktionen müssen mit exportClasses (),<br />

exportMethods(), exportiert werden<br />

¡ alle S4-Klassen <strong>und</strong> generischen Funktionen aus anderen<br />

Paketen, die im eigenen Paket genutzt werden, müssen<br />

per importMethodsFrom(), importClassesFrom() importiert<br />

werden<br />

£ <strong>für</strong> externen Code: useDynlib()<br />

löschen eines Namespaces mit<br />

alles noch im “Werden” Änderungen wahrscheinlich<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

711


8.2.8 Vorbereiten der Anlage eines Pakets<br />

die Funktion package.skeleton automatisiert teilweise das Anlegen<br />

eines Pakets mit einer korrekten Struktur <strong>und</strong> Dokumentation<br />

Syntax:<br />

package.skeleton(name="",list=c("",<br />

"",....),environment=.GlobalEnv,<br />

path=".", force=FALSE)<br />

legt ein R Paket "" im Verzeichnis unter Argument<br />

path an<br />

in dieses Paket kommen die Objekte aus list oder aus der<br />

Umgebung environment<br />

dabei werden die Objekte aufgeteilt in Datensätze data/–<br />

<strong>und</strong> Funktionen R/–Verzeichnis<br />

Skelette <strong>für</strong> die Help–Files <strong>für</strong> klassische Objekte werden mit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

712


dem prompt–Befehl erzeugt, <strong>für</strong> S4-Klassen <strong>und</strong> -Methoden mit<br />

promptClasses, promptMethods<br />

ein DESCRIPTION–File wird angelegt<br />

dann gibt die Funktion eine Liste an zu erledigenden Dingen aus<br />

8.2.9 Anlage eines Pakets<br />

mithilfe des Befehls R CMD build unter UNIX bzw. Rcmd build<br />

unter Windows<br />

das Resultat kann dann einfach von einem System zum anderen<br />

transportiert <strong>und</strong> ohne Entpacken installiert werden<br />

es gibt Optionen, Help– <strong>und</strong> Daten–Files in permanent gepackter<br />

Form zu speichern (nützlich auf alten Windows–Systemen, wo<br />

viele kleine Files viel Festplattenspeicher schlucken)<br />

hier gibt es definitiv Schwierigkeiten bei Win 9x <strong>und</strong>e ME;<br />

ab R 1.9.0 ist auch unter Windows die R CMD -Notation möglich.<br />

Unter Windows sind aber Vorabeiten nötig; siehe Abschnitt 8.2.12<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

713


um Windows-Binaries zu erzeugen: R CMD build binary<br />

hier<strong>für</strong> braucht man Perl; dieses muss im Windowspfad stehen<br />

in Win 9x/ME Schwierigkeiten mit langen Filenamen!<br />

8.2.10 Binär– <strong>und</strong> Quell–Pakete<br />

R CMD build erstellt Pakete aus R–Quellfiles<br />

wenn C– oder FORTRAN–Routinen mit benötigt werden, sollten<br />

<strong>für</strong> Windows Nutzer auch Binärdateien dieser Routinen zur<br />

Verfügung gestellt werden — siehe auch R for Windows FAQ<br />

Binärpakete werden mit R CMD build binary angelegt;<br />

die meisten R–Entwickler arbeiten unter Unix; selbst<br />

Windows–lauffähige Binarys werden unter Unix mit<br />

Crosscompilern erzeugt (vgl. R Installation and Administration<br />

(2006d, Abschnitt 3.1.8))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

714


8.2.11 Checken eines Pakets<br />

mithilfe des Befehls R CMD check unter UNIX bzw. Rcmd check<br />

unter Windows<br />

unterstützt Qualitätsanalyse <strong>und</strong> –kontrolle (QA/QC) <strong>für</strong> Pakete<br />

die Verzeichnisstruktur <strong>und</strong> das Format des DESCRIPTION <strong>und</strong><br />

INDEX–Files werden geprüft<br />

die Dokumentation wird in text in HTML <strong>und</strong> L ATEX gewandelt<br />

wenn L ATEX auf dem System gef<strong>und</strong>en wird, wird die<br />

Dokumentation geTEXt<br />

die Beispiele werden ausgeführt<br />

alle Tests im tests/–Verzeichnis werden ausgeführt<br />

hier gibt es definitiv Schwierigkeiten bei Windows 9x ME;<br />

ab R 1.9.0 ist auch unter Windows die R CMD -Notation möglich.<br />

Unter Windows sind aber Vorabeiten nötig; siehe Abschnitt 8.2.12<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

715


<strong>und</strong>okumentierte Objekte <strong>und</strong> solche, bei denen usage <strong>und</strong><br />

Definition nicht übereinstimmen, werden gemeldet<br />

8.2.12 Vorbereitungen zur Erzeugung von<br />

R-Paketen unter Windows<br />

dieser Abschnitt wurde im wesentlichen von Matthias Kohl beigetragen<br />

Referenz: http://www.murdoch-sutherland.com/Rtools/<br />

1. Installation von: Tcl, Perl, MinGW (evtl. MS HTML Compiler)<br />

<br />

http://www.activestate.com/Products/ActiveTcl/Download.html<br />

http://www.activestate.com/Products/ActivePerl/Download.html<br />

http://www.mingw.org/download.shtml<br />

http://www.microsoft.com/downloads/details.aspx?FamilyID=<br />

=00535334-c8a6-452f-9aa0-d597d16580cc&DisplayLang=en<br />

man benötigt MinGW mindestens in Version MinGW-5.0.2.exe<br />

<strong>und</strong> (z.Z.) zusätzlich mingw-runtime , was man am<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

716


esten direkt erhält unter<br />

http://prdownloads.sourceforge.net/mingw/mingw-runtime-3.10.tar.gz?download;<br />

frühere Versionen gehen nicht;<br />

MS HTML Compiler ist evtl. bereits installiert<br />

2. Für Unicode-Unterstützung unter WinME, Win9X: (ab R 2.1.0)<br />

benötigt:<br />

Opencow library: opencow.dll, installiert in im R–Stammverzeichnis<br />

unter src/gnuwin32/unicode<br />

libunicows import library: libunicows.a, installiert im Verzeichnis<br />

MinGW/lib directory<br />

iconv internationalization conversion library: iconv.dll, installiert im<br />

Verzeichnis src/gnuwin32/unicode<br />

weitere Details: im File src/gnuwin32/unicode/INSTALL (unter dem<br />

R–Stammverzeichnis)<br />

3. RTools ins R\tools Verzeichnis entpacken; zu beziehen von<br />

<br />

http://www.murdoch-sutherland.com/Rtools/tools.zip<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

717


4. beim Umgang mit mehreren Versionen von R simultan sehr<br />

nützlich: die batch-utilities von Gabor Grothendiek, zu<br />

entpacken am besten in R\batch-utils Verzeichnis; Details<br />

siehe README-Datei im entsprechenden .zip-File<br />

http://cran.r-project.org/contrib/extra/batchfiles/<br />

5. Pfad: Ergänzen von Tcl, Perl, MinGw, HTML Compiler,<br />

Rtools, <strong>und</strong> R Version bzw. batch-utils<br />

Bsp: (mit batch-utils)<br />

. ; C : \ Programme\R\ batch u t i l s ; C : \ Programme\R\ t o o l s ;<br />

C : \ Tcl \ b i n ; C : \ texmf \ miktex \ b i n ; C : \ P e r l \ b i n \ ;<br />

C : \ Mingw\ b i n ; C : \ Programme\HTML Help Workshop<br />

unter XP: Pfad zugänglich unter Systemsteuerung <br />

System Erweitert Umgebungsvariablen<br />

auf kurze Pfadnamen achten —sonst schneidet Windows<br />

mitten im Pfadnamen ab...!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

718


6. Anpassen der Datei MKRules: (im Verzeichnis /src/gnuwin32)<br />

(Achtung: möglichst keine Leerzeichen im Pfad, da es sonst evtl.<br />

nicht funktioniert ...)<br />

HHWDIR="C:/Programme/HTML Help Workshop"<br />

(Pfad <strong>für</strong> MS HTML Compiler)<br />

TCL_HOME = C:/Tcl (Pfad <strong>für</strong> Tcl)<br />

HEADER= C:/MinGw/include (Pfad <strong>für</strong> MinGw)<br />

7. evtl. Anlage einer Umgebungsvariable TMPDIR<br />

8. bei Nutzung von MikTeX >=2.4:<br />

Verändern der (lokalen [!]) miktex.ini-Datei: in folgenden<br />

Rubriken jeweils den Pfad auf die aktuelle Version des files<br />

rd.sty, im R Stammverzeichnis unter share\texmf<br />

—vgl. http://www.murdoch-sutherland.com/Rtools/miktex.html<br />

[LaTeX], [eLaTeX], [TeXinfo], [pdfteX],<br />

<br />

[pdfetex], [pdfLaTeX], [pdfeLaTeX], [pdftexinfo]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

719


Bemerkung 8.2-3 [R selbst compilieren]:<br />

nach diesen Vorbereitungen: R auch auf eigenem Rechner aus<br />

Sourcen compiliebar<br />

interessant <strong>für</strong> Paketentwickler, wenn eine neue R-Version kurz<br />

vor Veröffentlichung <strong>und</strong> zur Devel-Version nicht ständig neue<br />

Windows-Installer gebaut werden<br />

Details hierzu R Installation and Administration (2006d,<br />

Abschnitt 3.1 <strong>und</strong> Appendix F)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

720


8.2.13 Erstellen von B<strong>und</strong>les<br />

manchmal nützlich: Distribution mehrerer Pakete im Verb<strong>und</strong><br />

als ein B<strong>und</strong>le<br />

Beispiele: VR, RobASt<br />

Installation: wie ein Paket<br />

Deinstallation: keine (Stand 2.0.1) Deinsallation als Verb<strong>und</strong><br />

sondern jedes Paket einzeln<br />

Erstellung: wie bisher;<br />

DESCRIPTION files sehen anders aus:<br />

<br />

– das “Haupt”-DESCRIPTION file sieht en gros aus wie bisher<br />

– nicht enthalten: Punkte Package, Description<br />

– neu dabei: Punkte<br />

£ B<strong>und</strong>le: (B<strong>und</strong>le-Name)<br />

£ B<strong>und</strong>leDescription Beschreibung des B<strong>und</strong>les<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

721


£ Contains: Liste der in dem die verb<strong>und</strong>enen Pakete<br />

(durch Freizeichen getrennt)<br />

DESCRIPTION files der eigentlichen Pakete:<br />

– heißen DESCRIPTION.in<br />

– enthalten nur Punkte Package <strong>und</strong> Description<br />

8.2.14 Weitergabe eines Pakets/B<strong>und</strong>les<br />

siehe Abschnitt 8.4<br />

8.2.15 Erfahrungen mit dem Schnüren von<br />

Paketen<br />

dieser Abschnitt wurde von Matthias Kohl <strong>und</strong> Thomas Stabla<br />

beigetragen<br />

prompt promptClasses promptMethods<br />

– <strong>für</strong> Dokumentation von Funktion <strong>und</strong> Variablen ist<br />

<br />

prompt<br />

vorgesehen (auch <strong>für</strong> generische Funktionen!)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

722


– promptClasses zur Dokumentation von S4 Klassen<br />

<br />

– promptMethods zur Dokumentation von S4 Methoden<br />

– Unterschiede<br />

£ Im GGs. zu prompt <strong>und</strong> promptClasses: bei promptMethods<br />

keine Meldung der Form "Created File ..."<br />

– empfohlene Art der Dokumentation von Methoden<br />

£ bei generischer Funktion "\S3method" "\S4method"<br />

£ bei Klassen: S4 Methoden (z.B. Accessor-/Replacement<br />

Funktionen)<br />

£ Dokumentation bei Klassen problemlos, wenn Methode<br />

nur mit ihrer Signatur aufgerufen wird, nicht mit weiteren<br />

Parametern<br />

– von promptMethods erzeugte Rd-Datei kann verwendet werden<br />

£ zur Dokumentation von Methoden —vgl. ?Documentation<br />

£ zur Kopie der " alias "–Zeilen <strong>und</strong> des "Methods"–Abschnitt<br />

in bereits existierende Hilfedatei<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

723


Wie erstellt man am besten ein b<strong>und</strong>le<br />

– Erzeugung im Wesentlichen wie bei Paket<br />

– es gibt ein DESCRIPTION file <strong>für</strong> das B<strong>und</strong>le<br />

dort im Feld Contains anzugeben: Welche Pakete umfasst das<br />

B<strong>und</strong>le?<br />

– Reihenfolge relevant!! d.h., falls Paket des B<strong>und</strong>les anderes<br />

Paket des B<strong>und</strong>les benötigt, erstere nach dem zweiten im<br />

Contains-Feld<br />

– <strong>für</strong> die eingeschlossenen Pakete gibt es keine einzelnen<br />

DESCRIPTION files, sondern DESCRIPTION.in files<br />

– DESCRIPTION.in file kann im Prinzip alle Punkte enthalten,<br />

die nicht bereits im DESCRIPTION file des b<strong>und</strong>les enthalten<br />

sind — insbesondere Title, Depends, Suggests, Imports<br />

– zusätzlich: Feld B<strong>und</strong>leDescription<br />

– bei Abhängigkeiten innerhalb des B<strong>und</strong>els möglicherweise<br />

notwendig:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

724


£ Abhhängigkeiten mit .onLoad Funktion zu "erfüllen"<br />

£ Aufnahme im Depends-Feld der Description.in Datei<br />

reicht nicht! (Fehlermeldung deutete auf Zusammenhang<br />

mit den Namespaces)<br />

Pakete schnüren unter Linux:<br />

– beim Installieren von / Arbeiten mit R unter Linux:<br />

£ in SuSE Linux Distribution, Version 9.2 ist R nicht<br />

enthalten,<br />

vorkompiliertes rpm-Paket vom CRAN laden oder Sourcen<br />

holen <strong>und</strong> selbst kompilieren. . .<br />

£ im zweiten Fall: notwendig sind auf jeden Fall ein C <strong>und</strong><br />

ein Fortran Compiler<br />

£ typischer Fehler: vergessen, Linux-Pakete readline,<br />

readline-devel, xorg-x11-devel zu installieren<br />

£ erste beide notwendig <strong>für</strong> "History editing"-Funktion<br />

£ dritte nötig, um überhaupt Graphiken am Bildschirm<br />

anzeigen lassen zu können<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

725


– beim Erstellen von Paketen:<br />

<br />

£ hilfreich Ausgabe des Kommandos:<br />

R CMD help — v.A.<br />

= build | check<br />

£ dabei aus der commands-Liste aus dem Aufruf<br />

R help<br />

£ Beispiel: Ausgabe von R CMD check –help<br />

Usage : R CMD c h e c k [ o p t i o n s ] p k g d i r s<br />

Check R p a c k a g e s from p a c k a g e s o u r c e s i n t h e d i r e c t o r i e s<br />

s p e c i f i e d by p k g d i r s . A v a r i e t y o f d i a g n o s t i c c h e c k s on<br />

d i r e c t o r y s t r u c t u r e , i n d e x and c o n t r o l f i l e s a r e p e r f o r m e d .<br />

The p a c k a g e i s i n s t a l l e d i n t o t h e l o g d i r e c t o r y ( w h i c h<br />

i n c l u d e s t h e t r a n s l a t i o n o f a l l Rd f i l e s i n t o s e v e r a l f o r m a t s ) ,<br />

and t h e Rd f i l e s a r e t e s t e d by LaTeX ( i f a v a i l a b l e ) . A l l<br />

e x a m p l e s and t e s t s p r o v i d e d by t h e p a c k a g e a r e t e s t e d t o s e e<br />

i f t h e y r u n s u c c e s s f u l l y .<br />

O p t i o n s :<br />

h , h e l p p r i n t s h o r t h e l p message and e x i t<br />

v , v e r s i o n p r i n t ’ c h e c k ’ v e r s i o n i n f o and e x i t<br />

l , l i b r a r y =LIB l i b r a r y d i r e c t o r y u s e d f o r t e s t<br />

i n s t a l l a t i o n o f p a c k a g e s ( d e f a u l t i s o u t d i r )<br />

o , o u t d i r=DIR d i r e c t o r y u s e d f o r l o g f i l e s , R o u t p u t , e t c .<br />

( d e f a u l t i s ’ pkg . Rcheck ’ i n c u r r e n t d i r e c t o r y ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

726


where ’ pkg ’ i s t h e name o f t h e p a c k a g e c h e c k e d )<br />

no c l e a n do n o t c l e a n o u t d i r b e f o r e u s i n g i t<br />

no c o d o c do n o t c h e c k f o r c o de / d o c u m e n t a t i o n m i s m a t c h e s<br />

no e x a m p l e s do n o t r u n t h e e x a m p l e s i n t h e Rd f i l e s<br />

no i n s t a l l s k i p i n s t a l l a t i o n and a s s o c i a t e d t e s t s<br />

no t e s t s do n o t r u n code i n t e s t s s u b d i r e c t o r y<br />

no v i g n e t t e s do n o t c h e c k v i g n e t t e s i n Sweave f o r m a t<br />

no l a t e x do n o t r u n LaTeX on h e l p f i l e s<br />

use g c t u s e ’ g c t o r t u r e (TRUE) ’ when r u n n i n g e x a m p l e s /<br />

t e s t s<br />

By d e f a u l t , a l l t e s t s e c t i o n s a r e t u r n e d on .<br />

E m a i l bug r e p o r t s t o .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

727


8.3 Schnittstellen zu anderen<br />

Programmiersprachen<br />

8.3.1 Wozu ist das gut?<br />

um Code, der von Experten außerhalb von R geschrieben ist,<br />

nutzbar zu machen, insbesondere aus numerischen Bibliotheken<br />

wie Netlib<br />

manche (wenige!) Operationen lassen sich schlecht vektorisieren,<br />

<strong>und</strong> hier sind dann compilierte Sprachen überlegen<br />

ABER zuerst versuchen Code zu profilieren — siehe Abschnitt 8.3.2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

728


8.3.2 vor Nutzung von compiliertem Code:<br />

Profiling von R–Code<br />

nicht immer ist eine Portierung zeitkritischer Teilroutinen in C<br />

notwendig; alternativ kann man den R–Code erst bereinigen <strong>und</strong><br />

dann profilieren<br />

Referenz: Writing R Extensions (2006b, Abschnitt 3)<br />

erster Schritt: Bereinigen von R–Code<br />

<br />

– R–Code aus einer Library <strong>und</strong> solcher, der über den Prompt /<br />

mit Source eingelesen werden in R unterschiedlich behandelt:<br />

£ bei benutzer–eingegebenem Code wird der Source–Code<br />

immer mitgeführt <strong>und</strong> jedes Mal neu geparst<br />

£ bei Code aus Libraries wird nur noch der Parsing–Baum<br />

eingelesen<br />

£ “ent–Parsing”, i.e. automatisches Regenerieren des<br />

Source–Codes aus dem Parsing–Baum kann einen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

729


konsistenten, leichter lesbaren Code liefern, i.e.<br />

¡ einheitliche Einrücktiefe<br />

¡ einheitliche Konvention beim Zeilenumbruch vor / nach<br />

Funktionsdeklarationen<br />

¡ einheitliches Setzen von Spacings vor <strong>und</strong> nach<br />

Operatoren<br />

¡ Verwendung eines einheitlichen Zuweisungsoperators<br />

£ dazu muss das Source–Attribut der entspr. Funktion<br />

gelöscht werden<br />

¡ indem man die Option keep.source auf FALSE setzt<br />

¡ indem man das Attribut explizit löscht:<br />

attr (myfun,"source")NULL<br />

£ dann alle “ent–parsten” Funktionen zur Kommentierung<br />

<strong>und</strong> Nacheditierung in ein File dumpen:<br />

o p t i o n s ( keep . s o u r c e=F)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

s o u r c e ( " myfuns . R" )<br />

<br />

dump( l s ( a l l=TRUE) , f i l e ="new . myfuns . R" )<br />

730


zweiter Schritt: Profiling von R–Code<br />

– Profiling ist <strong>für</strong> Unix <strong>und</strong> Windows verfügbar, aber nicht <strong>für</strong><br />

Macintosh!<br />

– Befehl: Rprof — Details siehe help(Rprof)<br />

– <strong>für</strong> Rcmd Rprof muss unter Windows Perl installiert sein<br />

– Idee: Rprof nimmt in festen Zeitabständen (empfohlen: <br />

auf einem Rechner), welche R–Funktion gerade<br />

benutzt wird <strong>und</strong> schreibt das in ein File — per default<br />

Rprof.out im Arbeitsverzeichnis<br />

– anschließend kann man sich mit summaryRprof im prompt<br />

oder mit R CMD Rprof Rprof.out [Unix] bzw. Rcmd Rprof<br />

Rprof.out[Win] die Aktivitäten zusammenfassen lassen<br />

– ersteres erzeugt ein R–Objekt, braucht kein Perl ist aber<br />

langsamer (z.B. mal so langsam im Beispiel in Writing R<br />

Extensions) als letzteres<br />

<br />

Identifikation der Engpässe — nicht immer braucht man<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

731


dann zu deren Behebung compilierten Code<br />

dritter Schritt: Verwendung von Compiliertechniken <strong>für</strong> R–Code<br />

– steckt noch in den Kinderschuhen<br />

– Positionspapier von Tierney (2003b)<br />

http://www.stat.uiowa.edu/~luke/R/bytecode.html<br />

– folgende Features sollten (automatisch) umgesetzt werden<br />

£ Herausnahme unsinniger Dispatching Tests<br />

£ Reduktion der “Lookup”–Kosten durch Beschränkung auf<br />

lokale Symbole<br />

£ versiegelte (i.e. nicht zum Überschreiben freigegebene)<br />

Symbole als solche erkennen<br />

£ Ersatz “konstanter” Ausdrücke durch ihren Wert<br />

£ schließlich ein Byte–Code Compilat der Source<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

732


8.3.3 Schnittstellen von <strong>und</strong> zu anderen<br />

Programmiersprachen<br />

C / FORTRAN <strong>und</strong> R<br />

siehe Abschnitt 8.3.5<br />

JAVA <strong>und</strong> R<br />

– S-JAVA<br />

XLisp <strong>und</strong> R<br />

– RXLisp<br />

Python <strong>und</strong> R<br />

– RSPython<br />

Perl <strong>und</strong> R<br />

– RSPerl<br />

MATLAB <strong>und</strong> R<br />

– RMatlab<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

733


8.3.4 Schnittstellen zu Datenbanken — R <strong>und</strong><br />

MySQL<br />

8.3.4 (a) Motivation<br />

R <strong>und</strong> Datenbanken verfolgen subtil unterschiedliche<br />

Zielsetzungen (vgl. Abschnitt 0.2.3)<br />

dennoch hilfreich bei sehr großen Datensätzen:<br />

– klassisches Filesystem stößt an Grenzen<br />

– Nutzung von SQL zum Datenzugriff<br />

vergleiche auch Abschnitt 4 in “R Data Import/Export”<br />

gemeinsames “Frontend”-Paket; DBI, verschiedene<br />

Datenbanktreiber im Backend — hier nur Schnittstelle R <strong>und</strong><br />

MySQL RMySQL<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

734


weitere Schnittstellen zu Oracle (Paket: ROracle) <strong>und</strong> SQLite<br />

(Paket: RSQlite)<br />

8.3.4 (b) Installation<br />

unter Linux; standard (R CMD install RMySQL);<br />

etwas umständlicher unter Windows (im folgenden):<br />

Schritt 1: Installation des DBMS (Data Base Management<br />

System) — Download unter http://www.mysql.com/<br />

Schritt 2: Setzen von Pfaden (in Windows) z.B.<br />

path=%path%;C:\PROGRA~1\MySQL\MYSQLS~1.0\lib\opt<br />

Schritt 3: in R: Installation von Paket DBI<br />

Schritt 4: Vorbereiten des PC zum Erstellen von R Paketen<br />

(Tcl/TK, Perl, MinGw, ...), vgl. Abschnitt 8.2.12<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

735


Schritt 5:folgende Answeisungen an die Kommandozeile<br />

cd C: \PROGRA~1\MySQL\MYSQLS~1 . 0 \ l i b \ opt<br />

REM ## oder wo s o n s t MySQL l i e g t<br />

REM e r z e u g e LIBMYSQL . d e f<br />

reimp only d e f libmySQL . l i b<br />

REM e r z e u g e libmySQL . a ( e i n e Z e i l e ! )<br />

d l l t o o l dllname libmySQL . d l l d e f LIBMYSQL . d e f<br />

output l i b libmySQL . a k<br />

REM e i g e n t l i c h e I n s t a l l a t i o n<br />

R CMD i n s t a l l RMySQL<br />

in R: Einladen wie gewohnt mit require (RMySQL)<br />

<strong>für</strong> R-2.3.1 <strong>und</strong> MySQL Server 5.0: hier anstelle von Schritt 4<br />

<strong>und</strong> 5: RMySQL.zip<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

736


8.3.4 (c) Exkurs: Hauptbefehle in SQL<br />

hier nicht: Anlage von Datenbanken / Designfragen, i.e. CREATE<br />

TABLE, CREATE INDEX<br />

(vgl. entsprechende Informatik-Vorlesungen; oder kurz:<br />

Wikipedia)<br />

hier nicht: Datenmanipulation: i.e. INSERT, UPDATE, DELETE<br />

wichtigstes Konstrukt <strong>für</strong> uns: die Abfrage, i.e. SELECT Struktur:<br />

<br />

SELECT [ DISTINCT ] A u s w a h l l i s t e<br />

FROM Q u e l l e<br />

WHERE Where K l a u s e l<br />

[GROUP BY ( Group by A t t r i b u t )+<br />

[ HAVING Having K l a u s e l ] ]<br />

[ORDER BY ( S o r t i e r u n g s a t t r i b u t )+<br />

[ ASC | DESC ] ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

737


8.3.4 (d) Hauptbefehle in DBI<br />

Verbindung mit einer bestehenden Datenbank<br />

– Initialisierung eines mySQL-Clients:<br />

m MySQL() oder m dbDriver("MySQL")<br />

– Nutzer-Identifikation: geht zwar auch mittels dbConnect; aber<br />

aus Sicherheitsgründen besser: .my.cnf file, vgl. Seite 3 im<br />

Manual zu RMySQL<br />

– Verbindung mit Datenbank dbConnect<br />

Übermittlung einer SQL-Anfrage<br />

– dbSendQuery (Ergebnis vom Typ "DBIResult")<br />

– dbGetQuery (Ergebnis vom Typ data frame)<br />

– anschließend: (z.B. nach fetch mit dbClearResult:<br />

löschen der Ergebnisse<br />

<br />

fetch: gezieltes Auswählen einzelner “Zeilen”/Datensätze als Liste<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

738


ein Beispiel:<br />

## Not run :<br />

# c r e a t e an MySQL i n s t a n c e and<br />

# s e t 10000 o f rows p e r f e t c h .<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

m d b D r i v e r ( "MySQL" ,<br />

con dbConnect (m)<br />

f e t c h . d e f a u l t . r e c o r d s =10000)<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

r s dbSendQuery ( con , p a s t e (<br />

<strong>Fortgeschrittene</strong><br />

" s e l e c t ␣£␣ from ␣HTTP_ACCESS" ,<br />

" where ␣ IP_ADDRESS␣=␣ ’ 1 2 7 . 0 . 0 . 1 ’ " ) )<br />

df f e t c h ( rs , n = 50)<br />

df2 f e t c h ( rs , n = 1)<br />

d b C l e a r R e s u l t ( r s )<br />

pcon dbConnect ( p , group = " w i r e l e s s " )<br />

d b L i s t T a b l e s ( pcon )<br />

## End ( Not run )<br />

<br />

739


8.3.4 (e) Schnittstelle über ODBC<br />

ODBC (Open DataBase Connectivity):<br />

– standardisierte Datenbankschnittstelle auf Basis von SQL.<br />

– bietet Programmierschnittstelle (API) zur Entwicklung<br />

DBMS-unabhängiger Software<br />

– ursprgl. von Microsoft basisierend auf Call Level Interface<br />

– heute weitgehend Standard<br />

zwei Gruppen von Befehlen stehen zur Vefügung:<br />

– odbc£-Anweisungen (niedrige Ebene) ermöglichen Zugriff auf<br />

entsprechende ODBC Funktionen mit ähnlichem Namen,<br />

z.B.:odbcClearError, odbcClose, etc.<br />

– sql£-Anweisungen (höhere Ebene) zum Lesen, Schreiben,<br />

Manipulieren von Daten zw. Data Frames <strong>und</strong> SQL-Tabellen,<br />

z.B.: sqlFetch, sqlGetResults, sqlQuery<br />

– Achtung: oft Schwierigkeiten mit Verwendung von<br />

Spezialzeichen wie ä,ö,ß . . .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

740


8.3.5 C/FORTRAN–Code in R<br />

Beispiele wenn nicht weiter erwähnt aus Writing R Extensions<br />

(2006b, Abschnitt 5)<br />

8.3.5 (a) .Fortran<br />

Ziel: Verwendung einer Lapack–subroutine zur Berechnung der<br />

LU–Zerlegung einer Matrix<br />

der FORTRAN–Code<br />

. . . . . . . .<br />

SUBROUTINE DGETRF( M, N, A, LDA, IPIV , INFO )<br />

£ . . S k a l a r e Argumente<br />

INTEGER INFO , LDA, M, N<br />

£ . . M a t r i x / A r r a y Argumente . .<br />

INTEGER IPIV ( £ )<br />

DOUBLE PRECISION A( LDA, £ )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

741


dieser Code liege in compilierter Form als DLL/Shared Library<br />

(nicht als . o–Object–File!) bereit <strong>und</strong> muss bei Bedarf mit<br />

dyn.load dynamisch ein– <strong>und</strong> mit dyn.unload ausgeladen werden<br />

— siehe Abschnitt 8.3.6<br />

um dgetrf von R aus aufzurufen: Verwendung von .Fortran<br />

R–Beispiel 8.3-1 [FORTRAN in R]:<br />

mm m a t r i x ( rnorm ( 1 6 ) , nr =4)<br />

mmdc . F o r t r a n ( " d g e t r f " , m=as . i n t e g e r ( 4 ) ,<br />

s t r (mmdc)<br />

n=as . i n t e g e r ( 4 ) , a=as . double (mm) ,<br />

l d a=as . i n t e g e r ( 4 ) , i p i v=i n t e g e r ( 4 )<br />

i n f o=i n t e g e r ( 1 ) )<br />

der Fortran Code muss dabei eine Subroutine sein<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

742


wichtig: Sicherheits–/Absturzrisiko!<br />

– alle übergebenen Argumente müssen vom exakt richtigen<br />

Typ (<strong>für</strong> die Fortran Routine) sein<br />

explizites Casting mit as. integer,....<br />

explizite Deklaration der Dimension <strong>und</strong> des Speichermodus<br />

mit den Konstruktoren integer (n), double(n)....<br />

CAVEAT as. integer (4) integer (4) —<br />

erstes Objekt hat Länge <strong>und</strong> Wert , zweites gibt einen<br />

Vektor der Länge mit en<br />

– der Rückgabewert von .Fortran ist eine Liste mit den<br />

gleichen Elementen wie die Argumente von .Fortran — mit<br />

entsprechenden Namen so vorhanden<br />

– eine Tabelle mit den Entsprechungen von R, FORTRAN <strong>und</strong><br />

C–Typen findet sich in Writing R Extensions, Abschnitt 4.2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

743


üblich: “Wrapper”–Funktionen, die die Argumente checken,<br />

casten <strong>und</strong> anschließend auch das Resultat prüfen<br />

R–Beispiel 8.3-2 [FORTRAN–Wrapper]:<br />

LUdecom f u n c t i o n ( x ){<br />

}<br />

x as . m a t r i x ( x ) ; m nrow ( x ) ; n n c o l ( x )<br />

s t o r a g e . mode( x ) " d o u b l e "<br />

## x b l e i b t Matrix nur S p e i c h e r t y p a e n d e r t s i c h<br />

dc . F o r t r a n ( " d g e t r f " , m=m, n=n , a=x , l d a=m,<br />

##A u f r u f b e i s p i e l :<br />

<br />

i p i v=i n t e g e r ( min ( n ,m) ) , i n f o=i n t e g e r ( 1 ) )<br />

i f ( dc $ i n f o )<br />

stop ( p a s t e ( " d g e t r f ␣ r e t u r n e d ␣ e r r o r ␣ code " ,<br />

dc $ i n f o ) )<br />

l i s t ( l u=dc $a , i p i v=dc $ i p i v )<br />

mmdc LUdecom (mm) ; s t r (mmdc)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

744


Erläuterung:<br />

– storage.mode(x)="double" is ähnlich zu as.double(x), wirft<br />

aber die Attribute von x nicht weg<br />

– R–Matrizen haben als erste Dimension (c.f. lda) die<br />

Zeilenzahl<br />

8.3.5 (b) .C<br />

mit der Funktion .C ruft man eine C Funktion auf, die als<br />

Rückgabewert void hat<br />

alle Argumente der C–Funktionen müssen Zeiger [“call by<br />

reference”!] sein, genauer vom Typ int £, vom Typ double £ oder<br />

(seltener) Rcomplex £, char ££<br />

der Rückgabewert / das “output”–Objekt muss in R erzeugt<br />

werden <strong>und</strong> als Argument im Aufruf von .C übergeben werden<br />

Beispiel aus Writing R Extensions — detailliertere Information<br />

siehe dort<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

745


R–Beispiel 8.3-3 [Faltung zweier Vektoren mit .C]:<br />

– der C Code<br />

{<br />

}<br />

v oid c o n v o l v e ( double £a , i n t £na , double £b ,<br />

i n t £nb , double £ ab )<br />

i n t i , j , nab= £ na + £nb 1;<br />

f o r ( i =0; i


conv f u n c t i o n ( a , b ) { . C( " c o n v o l v e " , as . double ( a ) ,<br />

as . i n t e g e r ( l e n g t h ( a ) ) , as . double ( b ) ,<br />

as . i n t e g e r ( l e n g t h ( b ) ) ,<br />

ab=double ( l e n g t h ( a)+ l e n g t h ( b) 1)) $ab}<br />

Aufruf von C Code mit .C geht gut mit rein numerischen<br />

Berechnungen;<br />

wird schwerfällig bei Übergabe von komplizierter strukturierten<br />

Objekte<br />

der Großteil von R ist in C geschrieben interne Darstellung<br />

von R–Objekten ist dem C–Programmierer zugänglich<br />

8.3.5 (c) . Call<br />

bei strukturierten Objekten besser als .C: . Call — sehr<br />

mächtiges Tool!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

747


. Call übergibt R–Objekte im Typ raw <strong>und</strong> gibt auch ein solches<br />

R–Objekt vom Typ raw zurück<br />

wichtig: Sicherheits–/Absturzrisiko! —<br />

typisch: “Segmentation fault”<br />

<br />

– R hat eine eigene Speicherverwaltung, die eine Garbage<br />

Collection bereitstellt; diese konfligiert unter Umständen<br />

mit der C–Speicherverwaltung — siehe Abschnitt 8.3.9<br />

bei der Erzeugung von R–Objekten in C müssen diese vor der<br />

Garbage Collection mit PROTECT geschützt werden<br />

– vor der Rückkehr zu R muss die gleiche Anzahl an Zeigern<br />

mit UNPROTECT wieder freigegeben werden, die zuvor mit<br />

PROTECT geschützt worden ist<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

748


R–Beispiel 8.3-4 [Faltung zweier Vektoren mit .Call]:<br />

#i n c l u d e <br />

SEXP c o n v o l v e 2 (SEXP a , SEXP b ) /£ SEXP Typ : S E x p r e s s i o n £/<br />

{ i n t i , j , na , nb , nab ; double £xa , £xb , £ xab ; SEXP ab ;<br />

PROTECT( a = AS_NUMERIC( a ) ) ; PROTECT( b = AS_NUMERIC( b ) ) ;<br />

na=LENGTH( a ) ; nb=LENGTH( b ) ; nab=na+nb 1;<br />

PROTECT( ab = NEW_NUMERIC( nab ) ) ;<br />

xa=NUMERIC_POINTER( a ) ; xb=NUMERIC_POINTER( b ) ;<br />

xab=NUMERIC_POINTER( ab ) ;<br />

f o r ( i =0; i


der R–Code wird nun viel besser lesbar<br />

alle Argumente der C–Funktion sind nun vom Typ SEXP — ein<br />

Zeiger auf eine symbolic expression, in Anlehnung an LISP<br />

eine genauere Übersicht über die exakten R–SEXP–Typen findet<br />

sich in Writing R Extensions (2006b, Abschnitt 5.7.3)<br />

diese sind wichtig zum Anlegen von R–Objekten in C mit den<br />

Makros NEW_xxxx<br />

Typüberprüfung von R–Objekten in C erfolgt mit den Makros<br />

isxxxx; welche genau zur Verfügung stehen siehe Header–Dateien<br />

Rinternals.h <strong>und</strong> Rdefines.h<br />

wenn man den Aufruf einer C–Funktion nicht selbst verwendet,<br />

sollte man wie bei .Fortran eine Wrapper–Funktion schreiben,<br />

die alle Castings <strong>und</strong> Typ–Checks durchführt<br />

<br />

das Makro AS_NUMERIC ist ähnlich zur R–Funktion as.double<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

750


weil dieses Makro möglicherweise eine Kopie des R–Objekts in<br />

einem neuen Speichertyp erzeugt, muss das Ergebnis von<br />

AS_NUMERIC PROTECTed werden<br />

ein bisschen “tricky”: automatisches Setzen von Attributen<br />

(wie length, dim):<br />

– mit Funktionen getAttrib, setAttrib<br />

– Definitionen <strong>für</strong> die Attribute in C in Rinternals.h<br />

– Shortcuts: namesgets, dimgets, dimnamesgets als Analoga zu<br />

names, dim, dimnames<br />

– Utilities: GetMatrixDimnames, GetArrayDimnames<br />

– Definition neuer Attribute mit: install<br />

– Details: Writing R Extensions (2006b, Abschnitt 5.7.4)<br />

Vorsicht bei Listen:<br />

– üblicherweise S–Listen <strong>und</strong> keine LISP–Listen<br />

<br />

isNewList <strong>und</strong> allocVector (VECSXP,n) statt isList , allocList (n)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

751


Finden <strong>und</strong> Setzen von Variablen<br />

<br />

– Äquivalent zu get(name,envir=rho):<br />

SEXP getVar(SEXP name, SEXP rho)<br />

– Äquivalent zu find(name,envir=rho):<br />

SEXP findVar(SEXP name, SEXP rho); dazu aber nötig:<br />

Einrichten von name in der Symboltabelle mit install<br />

– Neuzuweisung / Manipulation von Variablen:<br />

£ void defineVar (SEXP symbol, SEXP value, SEXP rho) erzeugt<br />

eine neue Zuordnung Speicher Symboltabelle; entspricht<br />

assign (symbol, value , envir =rho, inherits =FALSE) — aber<br />

keine Kopie der Wertbelegung des Objekts<br />

£ void setVar(SEXP symbol, SEXP value, SEXP rho) ändert die<br />

Speicherbelegung bei einer bestehenden Zuordnung<br />

Speicher Symboltabelle; entspricht<br />

assign (symbol, value , envir =rho, inherits =TRUE)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

752


8.3.5 (d) Manipulation von R–Instanzen von R–Klassen in C<br />

besonders nützlich ist die Kombination von S4–Klassen <strong>und</strong> dem<br />

. Call–Interface<br />

weil die Typen <strong>und</strong> Namen von Slots in einer Instanz einer<br />

S4–Klasse in deren Klassendefinition definiert sind, kann man<br />

hier auf Typprüfung in einer Wrapping–Funktion weitgehend<br />

verzichten<br />

zur Interaktion mit Instanzen von S4–Klassen in C stehen die<br />

Makros GET_SLOT, SET_SLOT, NEW_OBJECT, MAKE_CLASS<br />

bereit<br />

Referenz zu diesem Thema (auch Quelle der Beispiele): Bates<br />

(2003)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

753


R–Beispiel 8.3-5 [LU Zerlegung mit S4 Klassen]:<br />

<br />

– Definition einer LU Zerlegungsklasse <strong>und</strong> eines Konstruktors<br />

in R<br />

s e t C l a s s ( "LUdec" , r e p r e s e n t a t i o n ( a=" m a t r i x " ,<br />

p i v o t= " i n t e g e r " ) )<br />

s e t C l a s s ( " d m a t r i x " , " m a t r i x " , v a l i d i t y=<br />

f u n c t i o n ( o b j e c t ){<br />

mode ( o b j e c t)==" numeric " })<br />

s e t C l a s s ( " DGEmatrix " , " d m a t r i x " )<br />

s e t G e n e r i c ( " decompose " , f u n c t i o n ( o b j e c t , . . . ) {<br />

s t a n d a r d G e n e r i c ( " decompose " ) } )<br />

setMethod ( " decompose " , " DGEmatrix " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

f u n c t i o n ( o b j e c t , . . . ) . C a l l ( "La_DGE_dc " , o b j e c t ) )<br />

754


– der C–Code dazu:<br />

<br />

#i n c l u d e <br />

SEXP La_DGE_dc (SEXP A)<br />

{SEXP aa=PROTECT( d u p l i c a t e (A ) ) ;<br />

SEXP adims , p i v o t , v a l ; i n t m, n , i n f o ;<br />

i f ( ! i s M a t r i x ( aa ) | | ! i s R e a l ( aa ) )<br />

e r r o r ( "A␣ must ␣ be ␣a␣ d o u b l e ␣ p r e c i s i o n ␣ m a t r i x " ) ;<br />

adims= GET_DIM( aa ) ; m=INTEGER( adims ) [ 0 ] ;<br />

n=INTEGER( adims ) [ 1 ] ;<br />

p i v o t=PROTECT(NEW_INTEGER(m


Kommentare zu diesem Beispiel:<br />

<br />

– der Wert des Arguments wird im Zuge der FORTRAN–Routine<br />

modifiziert er muss daher dupliziert werden, bevor er<br />

manipuliert werden kann<br />

– Makros wie GET_DIM <strong>und</strong> Funktionen wie isMatrix sind<br />

nützlich, um R–Eigenschaften dieser Objekte in C zu<br />

bekommen<br />

– das SET_SLOT Makro [<strong>und</strong> entsprechend GET_SLOT]:<br />

£ werden bei Instanzen von S4–Klassen benutzt<br />

£ das zweite Argument dieser Funktionen muss ein R–Objekt<br />

vom Typ name sein<br />

£ die install –Funktion konvertiert einen C–Character–String<br />

in ein solches Objekt<br />

£ install muss verwendet werden, geht aber schnell [wg.<br />

Hashing]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

756


R–Beispiel 8.3-6 [LUdec-Objekt <strong>und</strong> Matrixinverse]:<br />

<br />

– Nutzung eines Objekts aus der LU Zerlegungsklasse zur<br />

Berechung der Inversen der Originalmatrix<br />

– der C–Code dazu:<br />

SEXP La_DGE_t r i (SEXP LU)<br />

{<br />

SEXP aa=PROTECT( d u p l i c a t e (GET_SLOT(LU ,<br />

i n s t a l l ( "a" ) ) ) ) ;<br />

SEXP p i v o t =(GET_SLOT(LU , i n s t a l l ( " p i v o t " ) ) ) ;<br />

SEXP adims=GET_DIM( aa ) ;<br />

m=INTEGER( adims ) [ 0 ] ; n=INTEGER( adims ) [ 1 ] ;<br />

i n t i n f o , l w o r k = 1; double tmp , £ work ;<br />

i f (m != n )<br />

e r r o r ( "LU␣ k e i n e ␣ L U z e r l . ␣ e i n e r ␣ quadr . M a t r i x ! " ) ;<br />

/£ beim e r s t e n A u f r u f von d g e t r i bestimmt :<br />

o p t i m a l e G r o e s s e des A r b e i t s A r r a y s £/<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

757


F77_CALL( d e g e t r i ) (&n , REAL( aa ) ,&n ,<br />

INTEGER( p i v o t ) ,&tmp ,&lwork ,&i n f o ) ;<br />

check_Lapack_e r r o r ( i n f o , " d t r t r i " ) ;<br />

l w o r k= ( i n t ) tmp ;<br />

work = C a l l o c ( lwork , double ) ;<br />

/£ e i g e n t l i c h e r A u f r u f £/<br />

}<br />

F77_CALL( d e g e t r i ) (&n , REAL( aa ) ,&n ,<br />

INTEGER( p i v o t ) ,&tmp ,&lwork ,&i n f o ) ;<br />

check_Lapack_e r r o r ( i n f o , " d t r t r i " ) ;<br />

F r e e ( work ) ;<br />

UNPROTECT( 1 ) ;<br />

r e t u r n ( aa ) ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

758


Kommentare zu diesem Beispiel:<br />

– wir extrahieren die Slots, die wir brauchen von der Instanz<br />

– wieder duplizieren wir die Matrix, bevor sie manipuliert<br />

werden kann<br />

– beim ersten Aufruf der Lapack–Routine benutzen wir das<br />

Argument lwork=-1, um dieser zu signalisieren, dass man<br />

nur die benötigte Speichergröße ermitteln will; diese wird als<br />

erste Komponente der Arguments work zurückgegeben<br />

– anschließend allozieren wir den benötigten Speicher mit Calloc<br />

<strong>und</strong> geben ihn am Ende der Routine mit Free wieder frei<br />

– die Funktion check_Lapack_error überprüft, ob der Errorcode<br />

des Aufrufs der Lapack Routine nicht- ist <strong>und</strong> gibt<br />

gegebenenfalls eine informative Fehlermeldung aus:<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

759


void check_Lapack_e r r o r ( const i n t i n f o ,<br />

{ i f ( i n f o ==0) r e t u r n ;<br />

i f ( i n f o


Überblick über die in C zur Verfügung stehenden R–Verfahren,<br />

insbesondere <strong>für</strong> numerische Probleme: Writing R Extensions<br />

(2006b, Abschnitt 5.9)<br />

8.3.5 (e) Auswertung von R-Ausdrücken in C<br />

Hauptwerkzeug: SEXP eval(SEXP expr, SEXP rho);<br />

eval(expr, envir =rho)<br />

hier nicht! — c.f. Writing R Extensions, Abschnitt 4.9<br />

8.3.5 (f) Debugging von compiliertem Code<br />

will breakpoints im kompilierten Code setzen<br />

Vorgehensweise in Unix<br />

1. Debugger aufrufen mit R -d gdb<br />

2. R aufrufen<br />

<br />

3. am R prompt: Einladen der Library mit dyn.load oder library<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

761


4. senden eines Interrupt–Signals (mit strg-d), um in den<br />

Debug–Modus zu kommen<br />

5. setzen der breakpoints in den Code<br />

6. R weiterlaufen lassen mit signal 0[enter]<br />

Vorgehensweise in Windows<br />

1. setzen eines breakpoints <strong>für</strong> WinMain:<br />

gdb . . . / b i n / Rgui . exe<br />

( gdb ) break WinMain<br />

( gdb ) run<br />

# [ h a e l t an , nachdem DLL g e l a d e n ]<br />

( gdb ) break R_ReadConsole<br />

( gdb ) c o n t i n u e<br />

# [ h a e l t d i e R Console an ]<br />

( gdb ) c o n t i n u e<br />

2. am R prompt: Einladen der DLL mit dyn.load oder library<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

762


3. setzen der breakpoints in den Code<br />

4. R weiterlaufen lassen mit<br />

( gdb ) c l e a r R_ReadConsole<br />

( gdb ) c o n t i n u e<br />

in Windows funktioniert das Signalisieren nicht so gut besser<br />

unter Unix entwickeln....<br />

Beobachtung von R–Objekten beim Debuggen:<br />

– mit PrintValue(SEXP s) oder R_PV(SEXP s)<br />

– Details in Writing R Extensions (2006b, Abschnitt 5.10.2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

763


8.3.6 dynamisches Einladen von<br />

Bibliotheken/DLL’s<br />

damit die Funktionen .Fortran, .C, . Call überhaupt auf die<br />

Routinen zugreifen können müssen diese als “shared library” in<br />

den Arbeitspeicher geladen werden; dies geschieht<br />

über library :<br />

in den meisten Fällen wird man eine Library/DLL mit dem<br />

Befehl library .dynam in der Funktion . First . lib –Funktion eines<br />

Pakets einladen;<br />

– . First . lib wird aufgerufen, wenn ein Paket mit library oder<br />

requirePackage eingeladen wird<br />

– Syntax: . First . lib (libname, pkgname); dabei sind<br />

– libname: ein String mit dem Namen des Library–Verzeichnis,<br />

in dem zu suchen ist<br />

<br />

– pkgname: ein String mit dem Namen des Pakets<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

764


– Rückgabewert: ein Character–Vektor mit den Namen der<br />

Pakete, die diesen Befehl in der aktuellen Sitzung verwendet<br />

haben, um shared Libraries zu laden<br />

– Zweck von library .dynam: in der Funktion . First . lib Pakete<br />

dynamisch einladen;<br />

– Syntax: library .dynam(chname, package = .packages(),<br />

lib.loc = NULL, verbose = getOption("verbose"),<br />

file.ext, ...); dabei sind<br />

– chname: Name der shared Library/DLL<br />

– package: eine Liste mit Paketen die nach der DLL<br />

durchsucht werden sollen<br />

– lib.loc: ein Character–Vektor mit den<br />

R–Verzeichnisbäumen, die durchsucht werden sollen oder<br />

NULL, dann werden alle zur Zeit bekannten Libraries<br />

durchsucht<br />

<br />

– verbose: soll das Einladen auf der Konsole signalisiert<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

765


werden?<br />

– file.ext: File–Endung der zu ladenden Library<br />

– ...: weitere Argumente <strong>für</strong> dyn.load<br />

– new: ein Character–Vektor mit den Namen der Pakete, die<br />

bereits shared Libraries geladen haben<br />

– Rückgabewert: ein Character–Vektor mit den Namen der<br />

Pakete, die diesen Befehl in der aktuellen Sitzung verwendet<br />

haben, um shared Libraries zu laden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

766


explizit: Ein/Ausladen der Bibliothek mit den Befehlen<br />

dyn.load/dyn.unload<br />

– Syntax: dyn.load(x, local = TRUE, now = TRUE), resp.<br />

dyn.unload(x);<br />

dabei ist<br />

– x Pfad der Library als String; als Entwickler sollte man keine<br />

spezifische File–Endung <strong>für</strong> die Library festlegen, sondern<br />

besser eine Konstruktion wie die folgende verwenden:<br />

f i l e . path ( path1 , path2 , p a s t e ( " m y l i b " ,<br />

. Platform $ d y n l i b . ext , sep="" ) ) )<br />

in Unixsystemen kann der Pfad absolut sein, relativ zum<br />

Arbeitsverzeichnis oder relativ zum Stammverzeichnis<br />

– local sollen die Symbol–Namen der Funktionen aus der<br />

shared Library lokal in ihrer eigenen Symboltabelle verwaltet<br />

werden oder in der globalen Symboltabelle? wird unter<br />

Windows ignoriert<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

767


– now sollen alle Symbole unmittelbar aufgelöst werden (<strong>und</strong><br />

umplatziert) oder erst beim ersten Auftauch eines solchen<br />

Symbols in einem Ausdruck / in einem Aufruf; wird unter<br />

Windows ignoriert<br />

– weitere Informationen im File readme.packages<br />

Utilities zum Überprüfen welche Routinen im Speicher sind<br />

– is .loaded(, PACKAGE="");<br />

£ überprüft, ob das entsprechende Symbol bereits durch ein<br />

Einladen einer Shared Library zur Verfügung steht<br />

£ ist der Symbol–Name der Funktion (in "¡"),<br />

£ im PACKAGE–Argument kann spezifiziert werden, wo das<br />

Symbol gesucht werden soll<br />

– symbol.C()/symbol.For():<br />

bilden R–Symbolnamen (Strings!) <strong>für</strong> C/Fortran–Routinen<br />

in die entsprechenden Symbolnamen des compilierten Codes<br />

der Shared Library ab<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

768


– Achtung: wird ein Symbol in mehreren Bibliotheken<br />

verwendet, so überschreibt das zuletzt geladene alle<br />

vorangegangen Tabelleneinträge; Ausweg über Namespaces,<br />

vgl. Abschnitt 8.2.7<br />

– in Zukunft in Erwägung zu ziehen: Schreiben eigener<br />

Registrierungsroutinen <strong>für</strong> DLL’s — c.f. Writing R Extensions<br />

(2006b, Abschnitt 5.4)<br />

8.3.7 Erfahrungen mit C-Code in R<br />

dieser Abschnitt wurde von Thomas Stabla beigetragen<br />

ein kleines Beispiel zur Effizienz von C-Code im Vergleich zu<br />

R-Code: es sollen die Laufzeiten verglichen werden von<br />

– for-Schleifen in R<br />

– for-Schleifen in C<br />

– der effizienten R-methode sum<br />

<br />

C-Code<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

769


void sumInC ( double £A, i n t £ l e n g t h , double £ t o t a l )<br />

{<br />

}<br />

R-Code<br />

i n t i ;<br />

£ t o t a l = 0 ;<br />

TotalSum<br />

<br />

f o r ( i = 0 ; i < £ l e n g t h ; i++ )<br />

£ t o t a l += A [ i ] ;<br />

SimpleSum f u n c t i o n (A) {<br />

}<br />

TotalSum 0<br />

f o r ( i i n 1 : nrow (A) )<br />

f o r ( j i n 1 : n c o l (A) )<br />

TotalSum TotalSum + A[ i , j ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

770


#i n Unix<br />

dyn . l o a d ( " SimpleMath . so " )<br />

#i n Windows<br />

# dyn . l o a d (" SimpleMath . d l l ")<br />

i s . l o a d e d ( symbol . C( "sumInC" ) )<br />

CSum f u n c t i o n (A) {<br />

}<br />

. C( "sumInC" ,<br />

as . double (A) ,<br />

as . i n t e g e r ( l e n g t h (A) ) ,<br />

TotalSum = double ( 1 ) ) $TotalSum<br />

A m a t r i x ( rnorm (10^3) , 10^3 , 10^3)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

771


system . time ( SimpleSum (A ) ) [ 1 : 3 ]<br />

# => For S c h l e i f e s e h r langsam<br />

system . time (CSum(A ) ) [ 1 : 3 ]<br />

# => C Code s c h n e l l e r a l s For S c h l e i f e<br />

system . time ( sum (A ) ) [ 1 : 3 ]<br />

# => e f f i z i e n t e r R Code s c h l a e g t C<br />

# ( b e i A u f r u f von . C e i n g e w i s s e r<br />

# Overhead )<br />

#i n Unix<br />

dyn . unload ( " SimpleMath . so " )<br />

#i n Windows<br />

# dyn . unload (" SimpleMath . d l l ")<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

772


8.3.8 Erzeugen von Shared Libraries/DLL’s<br />

in Linux/Unix<br />

– mit dem Befehl R CMD SHLIB<br />

– dieser akzeptiert als Argument eine Liste von Files, die<br />

entweder als Object–Files (Endung ’.o’) oder als Sourcen<br />

von FORTRAN, C, C++ (mit Endungen ’.c’, ’.cc’, ’.cpp’, ’.C’<br />

bzw. ’.f’)<br />

– Spezifikation zusätzlicher Flaggen im File Makevars im<br />

Compilierverzeichnis<br />

– weitere Informationen mit R CMD SHLIB help<br />

in Windows<br />

– Vorbereitungen wie in Abschnitt 8.2.12<br />

– mit dem Befehl Rcmd SHLIB<br />

<br />

hier gibt es definitiv Schwierigkeiten bei Win 9x <strong>und</strong>e ME;<br />

ab R 1.9.0 ist auch unter Windows die R CMD -Notation möglich.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

773


– empfohlen: Einsatz spezifischer Makevars.win resp.<br />

Makefile.win Varianten der entsprechenden<br />

Unix/Linux–Varianten<br />

– weitere Informationen im File README.packages im<br />

R–Stammverzeichnis; diese File ist Schritt <strong>für</strong> Schritt<br />

abzuarbeiten<br />

£ einmal (nach Neuinstallation einer R-version):<br />

cd R_HOME\ s r c \ gnuwin32<br />

make l i b R . a l i b R b l a s . a<br />

– ACHTUNG: Groß- <strong>und</strong> Kleinschreibung beachten;<br />

insbesondere bei C-files Endung .c verwenden (sonst wird<br />

C++-Compiler verwendet)!<br />

8.3.9 Koordination der Speichermanager<br />

in R gibt nicht der Benutzer den Speicher frei, sondern von Zeit<br />

zu Zeit findet eine Garbage Collection statt, bei der dann der<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

774


gesamte (oder zumindest Teile des) ungenutzten Speichers<br />

wieder freigegeben werden — c.f. Abschnitt 8.3.10<br />

erzeugt man ein R–Objekt in C, so muss man R explizit<br />

mitteilen, dass dieses Objekt noch benötigt wird, <strong>und</strong> zwar mit<br />

PROTECT<br />

Achtung: das Objekt <strong>und</strong> nicht die Referenz (der Zeiger) wird<br />

geschützt; wichtig bei Neuzuweisungen von Werten an ein<br />

Objekt!<br />

der Schutzmechanismus wird mit einer Kellerstruktur/stack<br />

verwaltet; Freigabe der obersten (letzten) geschützten Objekte<br />

durch UNPROTECT(n)<br />

bei endgültigem Rücksprung aus der C Routine müssen alle<br />

PROTECT’s durch UNPROTECT’s gematcht werden — sonst<br />

Warnung "stack␣imbalance␣in␣. Call"<br />

während des Ablaufs der C–Routine kann theoretisch jede (<strong>für</strong><br />

den Nutzer nicht unmittelbar sichtbare) Zuweisung eine Garbage<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

775


Collection auslösen,...<br />

im allgemeinen PROTECT verwenden<br />

ABER in manchen Fällen genauere Analyse sinnvoll, insbesondere bei<br />

Verwendung großer Objekte — PROTECT/UNPROTECT <strong>für</strong><br />

mehrere Tausend Objekte auf einmal lässt den stack<br />

überlaufen!<br />

in solchen Fällen: am besten die Objekte als Slots/Elemente<br />

eines größeren Objekts schützen<br />

PROTECT ist nicht nötig <strong>für</strong> Funktionsargumente — hier “weiß”<br />

R, dass sie in Benutzung sind<br />

bei der Speicherverwaltung selbst dann zwei Strategien<br />

8.3.9 (a) R verwaltet den Speicher<br />

am Ende des Aufrufs von .C/. Call verfügt R über den<br />

allozierten Speicher<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

776


char£ R_alloc(long n, int size ): alloziert Einheiten à size bytes<br />

typische Verwendung:<br />

x= (int £) R_alloc(nrows(merge)+2, sizeof(int));<br />

analog:<br />

– S_alloc: initialisiert den allozierten Speicher mit <br />

– S_realloc(char£ p, long new, long old , int size ) — modifiziert<br />

die Speichergröße von old auf new Einheiten <strong>und</strong> initialisiert<br />

die neuen Einheiten mt <br />

allozierter Speicher wird vom Heap genommen<br />

8.3.9 (b) C verwaltet den Speicher<br />

R–Interface zu malloc — kümmert sich um Fehlerbehandlung<br />

eigene Funktionen zur Allozierung <strong>und</strong> Freigabe von Speicher:<br />

– allgemeine Schnittstellenfunktionen — Analoga zu calloc ,<br />

realloc , free:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

777


£ type£ Calloc( size _t n, type)<br />

£ type£ Realloc(any £p, size _t n, type)<br />

£ void Free(any £p)<br />

– spezielle allocxxxx–Funktion bereits in Rinternals.h<br />

vordefiniert; hier Kenntnis der R–Typen in C nötig, c.f.<br />

Writing R Extensions, Abschnitt 4.7.3<br />

– spezielle NEW_xxxx–Makros in Rdefines.h vordefiniert<br />

damit alles gut geht: explizites Casting!<br />

— z.B. von INTEGER auf REAL mit<br />

– PROTECT(=coerce(,REALSXP));<br />

– PROTECT(=AS_NUMERIC());<br />

8.3.10 Exkurs: Speichermanagement in R<br />

in der absoluten Mehrzahl der Fälle kein Benutzereingriff nötig<br />

<br />

Ausnahmen:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

778


– Schnittstellenprogrammierung, c.f. Abschnitt 8.3<br />

– extrem große Objekte<br />

– den dynamischen Speicher–Alloziermechanismus von R daran<br />

hindern mehr als erträglich Ressourcen <strong>für</strong> R abzuziehen<br />

8.3.10 (a) Wie alloziert R den benötigten Speicher?<br />

beim Aufruf von R bekommt R einen Default Arbeitsspeicher;<br />

dieser teilt sich auf in Heap <strong>und</strong> Felder von cons cells<br />

– der Heap wird <strong>für</strong> Objekte von variabler Größe verwendet<br />

<strong>und</strong> ist als heap von “Vcells” à organisiert<br />

– die cons cells erfassen Objekte mit fester Größe [c.f. Lisp]<br />

Sprachbausteine oder Parsing-Trees; jede solche Zelle<br />

umfasst auf einer – <strong>und</strong> auf einer<br />

–Architektur<br />

wenn ein neues Objekt erzeugt wird, sich ein existierendes nach<br />

einer Zuweisung in der Größe ändert, oder wenn ein neuer<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

779


Evaluation frame erzeugt wird, versucht R den Speicherbedarf<br />

aus diesem Arbeitsspeicher zu decken<br />

intern werden dazu die malloc–Funktionen verwendet<br />

werden bestimmte Schwellwerte in der Speicherauslastung<br />

überschritten, versucht R den Speicher aufzuräumen, um so<br />

wieder genügend freien Speicher zu haben; die Prozedur, die das<br />

erledigt heißt Garbage Collection<br />

die “Gr<strong>und</strong>ausstattung” an Speicher wird beim Aufruf von R<br />

vereinbart:<br />

– Kommandozeilenoption min nsize:<br />

steuert die verfügbare Zahl an cons cells<br />

– Kommandozeilenoption min vsize:<br />

steuert die verfügbare Größe des Heap in Bytes<br />

– diese “Gr<strong>und</strong>ausstattung” wird nie unterschritten<br />

£ ohne Einheit Zahl<br />

– Konvention der Einheiten: Einheit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

780


£ (übliches “kilo”) ¢ <br />

£ (Computer “kilo”) ¢ ¢ <br />

£ (Computer “Mega”) ¢ ¢ <br />

£ (Computer “Giga”) ¢ ¢ <br />

– in Windows: Kommandozeilenoption max mem size:<br />

£ Maximalausstattung — wird nie überschritten<br />

£ per default auf dem Minimum aus Arbeitsspeicher (RAM)<br />

des Rechners <strong>und</strong> <br />

£ minimal <br />

R–Befehle zum Speichermanagement während einer Session:<br />

siehe help(Memory)<br />

– gc: damit ruft der Benutzer die Garbage Collection explizit<br />

auf; falls Argument verbose auf TRUE, gibt gc anschließend<br />

einen Statusbericht über die Speicherverwendung ab<br />

– gcinfo: hiermit setzt man eine Flagge, ob man über eine<br />

ausgeführte Garbage Collection informiert werden will<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

781


– gctorture(on = TRUE): <strong>für</strong> Testzwecke (habe ich in meinem<br />

C–Interface alle Objekte auch wieder freigegeben?) —<br />

erzwingt eine Garbage Collection nach fast jeder<br />

Speicheranforderung; macht aber auch das System sehr<br />

langsam<br />

– memory.profile: gibt die Speicherverwendung nach Typen<br />

[genauer SEXPREC] getrennt aus<br />

– memory.size: gibt die maximale (falls Argument max auf<br />

TRUE) oder aktuelle (sonst) Speicherallokation durch malloc<br />

aus<br />

– memory.limits: gibt die aktuellen Speicherbelegungsgrenzen<br />

an (Argument NA) bzw. versucht diese zu vergrößern (auf<br />

Argument size)<br />

ACHTUNG Speicherbelegungsgrenzen können nur vergrößert werden!<br />

seit R Version 1.2.0 verwendet R einen “generationellen”<br />

Garbage Collector (gc)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

782


dieser verwaltet auch den Speicher dynamisch, d.h. er vergrößert<br />

<strong>und</strong> verkleinert den verfügbaren Speicher bei Bedarf (bis zu<br />

einem vorgegebenem Limit)<br />

Details siehe Tierney (2003b):<br />

http://www.stat.uiowa.edu/~luke/R/gengcnotes.html<br />

Idee: ein hierarchisches gc räumt zuerst bei den “jüngeren”<br />

Objekten auf<br />

es werden keine Speicherbereiche verschoben (“non moving<br />

strategy”)<br />

daher: bei sukzessivem Füllen/Löschen des Speichers wird dieser<br />

immer stärker zerstückelt<br />

R–Beispiel 8.3-7 [Speicherprobleme]:<br />

Code verfügbar unter http://www.uni-bayreuth.de/departments/<br />

l i b r a r y ( boot )<br />

/math/org/mathe7/rkurs/speicher.r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

783


data ( n u c l e a r )<br />

nuke n u c l e a r [ , c ( 1 , 2 , 5 , 7 , 8 , 1 0 , 1 1 ) ]<br />

nuke . lm glm ( l o g ( c o s t )~date+l o g ( cap)+ne+<br />

c t+l o g (cum . n)+pt , data=nuke )<br />

nuke . d i a g glm . d i a g ( nuke . lm )<br />

nuke . r e s nuke . d i a g $ r e s £ nuke . d i a g $ sd<br />

nuke . r e s nuke . r e s mean ( nuke . r e s )<br />

nuke . data data . frame ( nuke , r e s i d=nuke . r e s ,<br />

f i t =f i t t e d ( nuke . lm ) )<br />

new . data data . frame ( c o s t =1, date =73.00 , cap =886 ,<br />

ne =0, c t =0, cum . n=11, pt =1)<br />

new . f i t p r e d i c t ( nuke . lm , new . data )<br />

nuke . fun f u n c t i o n ( dat , i n d s , i . pred ,<br />

f i t . pred , x . pred )#<br />

{ a s s i g n ( " . i n d s " , i n d s , e n v i r =. GlobalEnv )<br />

<br />

lm . b glm ( f i t +r e s i d [ . i n d s ] ~date+<br />

l o g ( cap)+ne+c t+l o g (cum . n)+pt , data=dat )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

784


}<br />

pred . b p r e d i c t ( lm . b , x . pred )<br />

remove ( " . i n d s " , e n v i r =. GlobalEnv )<br />

c ( c o e f ( lm . b ) , pred . b<br />

( f i t . pred+dat $ r e s i d [ i . pred ] ) )<br />

f o r ( i i n 1 : 2 0 )<br />

p r i n t ( system . time ( boot ( nuke . data ,<br />

nuke . fun , R=999 , m=1,<br />

f i t . pred=new . f i t , x . pred=new . data ) ) )<br />

8.3.10 (b) Was passiert beim Einrichten eines neuen Evaluation<br />

Frame?<br />

Situation: ein Aufruf (Call) einer Funktion liegt vor <strong>und</strong> soll<br />

abgearbeitet werden<br />

<br />

Referenz: Chambers (1998, Abschnitt 4.9)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

785


dies geschieht in den folgenden vier/fünf Schritten<br />

1. New.frame erzeugt einen neuen Evaluation Frame <strong>für</strong> den<br />

Aufruf<br />

– als Element N einer Frames–Liste, in der die verschiedenen<br />

Frames verwaltet werden<br />

– dieser Evaluation Frame ist wieder ein S–Objekt, <strong>für</strong> das<br />

nun Speicher alloziert wird<br />

– parallel zur Frames–Liste “leben” in R noch eine<br />

Calls–Liste mit den entsprechenden Aufrufen <strong>und</strong> eine<br />

Functions–Liste mit den Funktionsdefinitionen<br />

2. der Auswertungsmechanismus ordnet die tatsächlichen<br />

Argumente des Aufrufs den formalen der Funktionsdefinition<br />

zu — vgl. Seiten 300ff.<br />

3. wenn Methoden <strong>für</strong> diese Funktion definiert sind — also die<br />

Funktion generisch ist, sucht der Auswertungsmechanismus<br />

die am besten passende Methode heraus<br />

4. eval(body,N) wertet den Körper (body) der Funktion /<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

786


Methode aus<br />

– funktioniert analog zum Befehl<br />

eval(,)<br />

– muss dabei womöglich wieder bei Zuweisungen <strong>und</strong><br />

weiteren Aufrufen neuen Speicher allozieren<br />

5. Clear .frame wird aufgerufen<br />

– Zweck: den Frame N wieder zu löschen<br />

– davor wird aber der Wert des Körpers — als Rückgabewert<br />

der Funktion / Methode in den Vater–Frame Parents[N]<br />

befördert<br />

lazy evaluation — vergleiche auch Seite 301 — bewirkt, dass<br />

Speicher <strong>für</strong> lokale Kopien (“Call by Value”!) nur dann<br />

angefordert wird, wenn das Argument im Körper zur Auswertung<br />

eines Ausdrucks / Aufrufs gebraucht wird<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

787


8.3.10 (c) Wann muss ein Objekt ausgewertet werden?<br />

Referenz: Chambers (1998, Abschnitt 4.9)<br />

die Möglichkeit, unausgewertete Ausdrücke (“promises”, c.f.<br />

Seite 301) zu übergeben, erspart beim “Call by Value” das<br />

Anlegen vieler Kopien<br />

genauer muss S eigentlich nur in folgenden drei Situationen<br />

Ausdrücke auswerten<br />

1. bei der Übergabe von Objekten an C, C++, Fortran,....;<br />

insbesondere benötigen (in C/Fortran vercodete) elementare<br />

arithmetische, logische Operationen den tatsächlichen Wert<br />

des Objekts<br />

2. beim Method Dispatching — vgl. Abschnitt 8.1.3 (c); hier<br />

wird aber nur der Typ benötigt; Missings sind hier zugelassen<br />

— i.a. nicht in 1.<br />

<br />

3. bei der Zuweisung, wenn es tatsächlich “kopiert” wird — s.u.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

788


S — <strong>und</strong> damit auch R haben das Prinzip des Data Sharing<br />

<br />

– nach Obengesagtem wird der Wert einer (lokalen Kopie)<br />

einers Objekts in einem Evaluation Frame nur durch<br />

Zuweisungen verändert;<br />

– solche Zuweisungen umfassen insbesondere auch<br />

Ersetzungsmethoden — vgl. Abschnitt 8.1.5 (e); ebenso<br />

mehr oder weniger analog: assign– oder eval–Ausdrücke<br />

– um beim (“Call by Value”!) nicht zu viele (unnötige) lokale<br />

Kopien anlegen zu müssen, verwendet R das Prinzip des<br />

Data Sharing; diese funktioniert so:<br />

£ jedes Objekt in S hat einen internen Referenzzähler;<br />

£ dieser zählt, wie oft dieses Objekt innerhalb eines Frames<br />

rechts von einer Zuweisung gestanden ist — explizit oder<br />

als Element / Slot eines Objekts.<br />

£ bei Übergabe eines Arguments in einem Funktionsaufruf<br />

wird bei Auswertung dieses Arguments in der Funktion<br />

dieses im neuen Evaluation Frame zugewiesen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

789


£ dabei werden die Referenzzähler des Objekts <strong>und</strong> aller<br />

seiner Elemente / Slots um erhöht, aber nicht wirklich<br />

eine Kopie angelegt<br />

£ erst wenn etwas am Objekt geändert wird — z.B. mit<br />

einer Ersetzungsmethode wird wirklich eine Kopie<br />

angelegt, — bei komplexeren Strukturen nur eine Kopie<br />

des entsprechenden Elements / Slots<br />

£ beim Verlassen des Frames wird dann der Evaluation<br />

Frame gelöscht — mit den evtl. angelegten tatsächlichen<br />

Kopien, der entsprechende Speicher freigegeben <strong>und</strong> der<br />

Referenzzähler um eins [oder mehr] verringert<br />

– diese Technik funktioniert gut bei Iterationen <strong>und</strong> nur sehr<br />

schlecht bei Rekursionen;<br />

£ wenn daher ein rekursiver Algorithmus auch gut als<br />

Iteration zu formulieren ist, sollten Iterationen verwendet<br />

werden<br />

£ bei Algorithmen wie quicksort ist dies nicht so gut<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

790


möglich Trade–Off zwischen guter Lesbarkeit der<br />

Rekursion <strong>und</strong> Speicherersparnis bei Iteration<br />

£ — bei quicksort zu , also in den<br />

meisten Fällen Rekursion vertretbar<br />

– Data Sharing auch relevant bei Schnittstellen zu C /<br />

Fortran<br />

£ per Default geht S auf Nummer sicher <strong>und</strong> legt Kopien an<br />

£ um dies zu vermeiden: man kann der Schnittstelle<br />

mitteilen, dass ein S-Objekt in C / Fortran nicht<br />

verändert werden wird COPY–Argument der Schnittstelle<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

791


8.3.11 Verschiedene Aufrufe von R <strong>und</strong><br />

Kommandozeilenoptionen<br />

8.3.11 (a) Ausführmodi von R<br />

interaktiver / Sitzungs–Modus: R wartet auf Eingaben an der<br />

Console<br />

BATCH–Modus: R verarbeitet ein Script <strong>und</strong> beendet sich<br />

anschließend, ohne auf Eingaben zu warten<br />

unter Windows wird der Modus durch Verwendung eines der<br />

beiden .exe–Files RGui.exe <strong>und</strong> Rterm.exe entschieden —<br />

siehe nächster Abschnitt<br />

unter Linux wird generell der Sitzungs–Modus verwendet, es sei<br />

denn man ruft R CMD BATCH auf — siehe nächster Abschnitt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

792


8.3.11 (b) Kommandozeilenoptionen<br />

generell: — vgl. An Introduction to R (2006a, Anhang B)<br />

<br />

– beim Aufruf von R können verschiedene Optionen bereits<br />

über die Kommandozeile gesetzt werden<br />

– der konkrete Aufruf unterscheidet sich je nach Betriebssystem<br />

– Optionen die bei allen Betriebssystemen funktionieren<br />

£ –version: gibt die Versionsnummer aus <strong>und</strong> beendet die<br />

Session<br />

£ –save/–no-save: kontrolliert, ob beim Beenden der<br />

Session der Arbeitsspeicher abgespeichert werden soll;<br />

wenn keine dieser Optionen angegeben wird, wird im<br />

interaktiven Modus beim Beenden der Sitzung danach<br />

gefragt; im BATCH–Modus muss eine der beiden<br />

angegeben werden<br />

£ –no-site-file: kein Laden eines site-weiten<br />

Initialisierungsfiles<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

793


£ –no-init-file: kein Laden eines benutzerdefinierten<br />

Initialisierungsfiles<br />

£ –no-environ: unterdrückt das Laden von<br />

Umgebungsvariablen<br />

£ –restore, –no-restore, –no-restore-history,<br />

–no-restore-data: kontrolliert, ob der Zustand der<br />

letzten Sitzung (oder zumindest die Daten)<br />

wiederhergestellt werden sollen<br />

£ –vanilla: Kombination aus –no-save, –no-restore,<br />

–no-site-file, –no-init-file <strong>und</strong> –no-environ<br />

£ –min-vsize=N, –min-nsize=N, –max-vsize=N,<br />

–max-nsize=N: siehe Abschnitt 8.3.10 (a)<br />

£ –quiet, –silent, -q: keine Startup Meldung<br />

£ –slave: R so still wie möglich laufen lassen<br />

£ –verbose: Ausgabe von detaillierter Ablauf–Information;<br />

insbesondere wird in options verbose auf TRUE gesetzt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

794


– Zugriff auf die Kommandozeilenparameter in R mit<br />

<br />

commandArgs<br />

– Ablauf des “Hochfahrens” von R<br />

£ Bei Aufruf ohne –no-environ wird aus<br />

Umgebungsvariable R_ENVIRON der Pfad auf File mit<br />

site–weiten Umgebungsvariablen entnommen; ist<br />

R_ENVIRON <strong>und</strong>efiniert, verwendet R<br />

$R_HOME/etc/Renviron.site, so dieses existiert<br />

£ die benutzersdef. Einstellungen werden aus File .Renviron<br />

im Stammverzeichnis des jew. Benutzers geladen<br />

£ diese beiden Files enthalten Zeilen der Form<br />

=; siehe auch help(Startup); wichtige<br />

Variablen dabei:<br />

¡ R_PAPERSIZE <strong>für</strong> die Default Papiergröße zum Drucken<br />

¡ R_PRINTCMD <strong>für</strong> den Default Druckbefehl<br />

¡ R_LIBS mit den Verzeichnissen, die nach<br />

R–Zusatzpaketen durchsucht werden sollen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

795


¡ R_PROFILE der Name des site–weiten startup–Profil<br />

£ dann sucht R das site–weite startup–Profil im File aus<br />

der Variablen R_PROFILE, es sei denn Option<br />

–no-site-file ist angegeben; falls keine Variable<br />

R_PROFILE existiert, verwendet R<br />

$R_HOME/etc/Rprofile.site, sofern dieses existiert<br />

£ dann sucht R das benutzereigene startup–Profil im File<br />

.Rprofile im Stammverzeichnis des aktuellen Benutzers<br />

<strong>und</strong> lädt es mit source ein, es sei denn Option<br />

–no-init-file ist angegeben;<br />

£ außerdem wird das File .RData im aktuellen Verzeichnis<br />

eingeladen, es sei denn Option –no-restore oder<br />

–no-restore-data ist angegeben;<br />

£ schließlich wird die Funktion . First aufgerufen, sofern<br />

diese existiert; diese <strong>und</strong> die Funktion .Last, die am<br />

Abschluss einer Sitzung ausgeführt wird, kann man in den<br />

geeigneten Startup–Files oder im File .RData ablegen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

796


– daneben auch Aufruf von speziellen R–utilities mit<br />

<br />

R CMD in Linux, bzw. Rcmd <br />

; an Kommandos gibt es<br />

£ BATCH: lässt R im BATCH Modus laufen<br />

£ INSTALL: installiert Zusatzpakete<br />

£ REMOVE: löscht Zusatzpakete<br />

£ build: “baut”/legt Zusatzpakete an— vgl. Abschnitt 8.2.9<br />

£ check: überprüft Zusatzpakete — vgl. Abschnitt 8.2.11<br />

£ Rprof: profiliert ein R–File, siehe Abschnitt 8.3.2<br />

£ Rdconv: konvertiert Files im .Rd–Format in verschiedene<br />

andere Formate wie HTML, Nroff, L ATEX, puren<br />

ASCII–Text <strong>und</strong> S–Dokumentations–Format<br />

£ Rd2dvi.sh: konvertiert Files im .Rd–Format in<br />

.dvi/.pdf–Format<br />

£ Rd2txt: konvertiert Files im .Rd–Format in puren puren<br />

ASCII–Text<br />

£ Sd2Rd: konvertiert Files im S–Dokumentations–Format in<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

797


.Rd–Format<br />

– Hilfe ist mit R CMD –help bzw.<br />

Rcmd –help verfügbar<br />

Unterschiede Windows/Unix<br />

– Syntax in Windows<br />

£ es gibt zwei verschiedene Aufrufe:<br />

¡ RGui.exe: “graphische Benutzeroberfläche” — ruft man<br />

normalerweise auf<br />

¡ Rterm.exe: terminal–Version — <strong>für</strong> BATCH–Aufrufe<br />

£ beide können mit Optionen den oben genannten gestartet<br />

werden<br />

£ bei Rterm.exe möglich: zusätzliches Setzen von Pipes <strong>für</strong><br />

Ein– <strong>und</strong> Ausgabefile, also<br />

Rterm[options][< infile][>outfile]<br />

£ spezielle Windows–Optionen:<br />

¡ –mdi, –sdi, –no-mdi: kontrolliert, ob mehrere Fenster<br />

als Unterfenster eines Hauptfenster (mdi) oder nur<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

798


Hauptfenster (sdi) <strong>für</strong> die Konsole, Graphic, Reports<br />

geöffnet werden sollen<br />

¡ –max-memsize=N: siehe Abschnitt 8.3.10 (a)<br />

¡ –ess: Konfiguriere R zur Zusammenarbeit mit EMACS im<br />

R-inferior-mode<br />

£ spezielle Umgebungsvariablen <strong>für</strong> R in Windows regeln das<br />

R–Stammverzeichnis:<br />

¡ mit höchster Priorität R_USER — falls definiert<br />

¡ dann HOME — falls definiert<br />

¡ sonst HOMEDRIVEHOMEPATH — falls definiert<br />

(normalerweise bei Win NT/2K der Fall)<br />

¡ sonst ist das Stammverzeichnis (üblicherweise C:\)<br />

R–Stammverzeichnis:<br />

– Syntax in Linux<br />

£ R[options][< infile][>outfile]<br />

£ spezielle Linux–Optionen:<br />

¡ –help, -h: gibt eine kurze Hilfe als Nachricht aus <strong>und</strong><br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

799


eendet die Session<br />

¡ RHOME: gibt das R–Stammverzeichnis aus <strong>und</strong> beendet<br />

die Session<br />

¡ –no-readline: schaltet das Kommandozeilen–Editieren<br />

über readline aus; nützlich <strong>für</strong> Nutzung von Emacs<br />

<strong>und</strong> ESS<br />

¡ –debugger=, -d : lässt R unter einem<br />

Debugger ablaufen<br />

¡ –gui=type, -g type: benutzt type als graphische<br />

Benutzeroberfläche; aktuell vorgesehen sind X11, gnome<br />

<strong>und</strong> none<br />

£ spezielle Kommandos <strong>für</strong> R CMD in Linux:<br />

¡ COMPILE: compiliert Files <strong>für</strong> R — z.B. C–Files mit<br />

Code <strong>für</strong> .C<br />

¡ SHLIB: legt Shared Library an — vgl. Abschnitt 8.3.8<br />

¡ LINK: linkt Files <strong>für</strong> R — Front–End <strong>für</strong> ausführbare<br />

Programme<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

800


8.3.12 R auf Parallelrechnern<br />

8.3.12 (a) Nutzung von <strong>für</strong> Multiprozessorbetrieb optimierter<br />

Infrastruktur<br />

numerische Infrastruktur von R:<br />

öffentliche Bibliotheken aus der Netlib<br />

von dort: insbesondere Routinen zur linearen Algebra (BLAS<br />

—Basic_Linear_Algebra_Subprograms)<br />

R1.7.0: Bibliotheken EISPACK <strong>und</strong> LINPACK<br />

aber: diese basieren (nur) auf Level 1 BLAS, d.h. nicht effizient<br />

auf Multi–Prozessor Rechnern mit gemeinsamen Speicher<br />

R1.7.0 Umstieg auf LApack (BLAS level 3 konform)<br />

auch möglich: Nutzung von system-optimiertem BLAS:<br />

ATLAS — Automatically Tuned Linear Algebra Software<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

801


Welche (am besten vorcompilierte) Version von ATLAS <strong>für</strong><br />

welche Architektur? Hinweise dazu:<br />

Mathematik VII<br />

http://www.kevinsheppard.com/research/matlabatlas/matlab_atlas.aspx<br />

Peter Ruckdeschel<br />

unter Linux: Steuerung beim Compilieren über Option<br />

with blas="",<br />

vgl. R Installation and Administration (2006d, Abschnitt A.2.2)<br />

<strong>für</strong> Windows: Archiv <strong>für</strong> viele vorcompilierte ATLAS-DLL’s <strong>für</strong><br />

verschiedene Architekturen auf CRAN unter<br />

bin/windows/contrib/ATLAS<br />

eigene Optimierung:<br />

1. Klärung: Welche Version von ATLAS ist die richtige?<br />

2. Herunterladen dieser Version<br />

3. Überschreiben der bestehenden Datei Rblas.dll im<br />

Verzeichnis R_HOME_bin<br />

<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

802


8.3.12 (b) “Poor Man’s Parallel” — händische Verteilung auf Knoten<br />

aus heutiger Sicht veraltet; aber didaktisch interessant;<br />

entstanden im Rahmen der Diplomarbeit von Florian Camphausen<br />

Vorbereitungen an R-Code . . .<br />

Übergabe von Parametern an R-Prozess<br />

– Aufruf (in csh) mit<br />

R $i restore save no readline gui=none < in.R > out$i;<br />

£ ruft R mit Übergabeparameter “Inhalt der Variable i” auf<br />

£ weitere Optionen wie in Abschnitt 8.3.11 (b) beschrieben<br />

£ das File in.R enthält den abzuarbeitenden Code<br />

£ das File out$i (wobei $i durch den Inhalt der Variable i<br />

ersetzt wird) wird mit allen Ausgaben von in.R gefüllt<br />

– Zugriff auf die Kommandozeilen-Übergabeparameter in R mit<br />

as. integer (commandArgs()[2])<br />

Steuerung der einzelnen R-Prozesse durch drei geschachtelte<br />

shell-scripten; Hintergr<strong>und</strong>:<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

803


– aus “politischen” Gründen sollen nicht mehr als Knoten<br />

simultan angefordert werden<br />

Teile Problem der Ordnung auf in <br />

Scheiben/Blöcke<br />

– fordere also mal Knoten an<br />

– was innerhalb Scheibe s von Prozessor zu tun ist, wird im<br />

R-Code in.R anhand des beim Aufruf übergebenen<br />

Parameters $i ¢ entschieden<br />

– kleiner Punkt zur csh-Syntax: Rückgabe des Werts der<br />

Variable mit $, numerische<br />

Berechnungen mit @<br />

shell-script Alltask mit einer Schleife, die die Scheiben bis <br />

durchläuft <strong>und</strong> jeweils einen Block von Knoten parallel<br />

anfordert (mit qsub) <strong>und</strong> beschickt<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

804


–<br />

Quelle unter AllTask<br />

#! / b i n / t c s h<br />

#<br />

d a t e ; q s t a t<br />

@ I = 1<br />

w h i l e ( $ I <br />

– (#Scheiben) wird mit $1, (#Knoten) mit $2 an<br />

qsub mit Option -v übergeben<br />

– qsub regelt die Mitprotokollierung sämtlicher Ausgaben von<br />

Task im Kontrollfile Task.o<br />

– Ausgabe von Alltask wird in File geschrieben<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

805


shell-script Task, das innerhalb einer Scheibe insgesamt <br />

R-Prozesse unter Verwendung von PBS beschickt<br />

<br />

– Quelle unter Task<br />

#! / b i n / t c s h<br />

#PBS l w a l l t i m e =24:00:00<br />

#PBS j oe<br />

#<br />

cd ; d a t e<br />

s e t n=‘ cat $PBS_NODEFILE ‘<br />

@ i = ( $ s c 1 ) £ $ w i e v i e l + 1<br />

@ j = 1<br />

w h i l e ( $ i


#<br />

w h i l e ( ‘ l s 1 £ . $ s c . run | wc l ‘ )<br />

end<br />

s l e e p 60<br />

m a i l ; d a t e<br />

# <strong>und</strong> Tschuess . . . .<br />

e x i t<br />

– # Prozessoren bereits von qsub in AllTask gesetzt<br />

– cat $PBS_NODEFILE schreibt in Variable n den Vektor der<br />

zugeteilten Knoten<br />

– rsh öffnet Shell auf Knoten $n[$j ] (Indizierung von n wie in<br />

C), auf der das Eingabefile myRcall ausgeführt wird;<br />

– in myRcall:<br />

vor Aufruf von R: Anlage d. Kontrollfiles Task.o<br />

nach Rückkehr von R: Löschung<br />

– & schiebt den rsh in den Hintergr<strong>und</strong>; es wird also nicht bis<br />

zu dessen Terminierung gewartet<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

807


– mit date: Protokollierung von Uhrzeit <strong>und</strong> Datum<br />

– erstes sleep zur Sicherheit, falls Fileserver zu langsam<br />

– Sinn der zweiten while Schleife:<br />

£ anhand der Kontrollfiles wird geprüft, wie lange der<br />

Prozess Task noch “leben” muss, bis man ihn mit exit<br />

verlassen darf:<br />

£ so lange, bis alle Kontrollfiles der Scheibe gelöscht sind<br />

£ ls 1 £.$sc.run listet alle Kontrollfiles dieser Scheibe,<br />

welche anschließend mit wc (“Wordcount”) gezählt werden<br />

£ bis wc Zeilen zählt, wartet man immer wieder weitere <br />

Sek<strong>und</strong>en<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

808


Textdatei myRcall mit eigentlichem R-Aufruf<br />

– Quelle unter myRcall<br />

cd ‘ pwd ‘<br />

echo " ’ $$ ’ " > $n [ $ j ] . $ s c . run<br />

R $ i r e s t o r e s a v e no r e a d l i n e \<br />

g u i=none < a l l e s . R > e r g $ i<br />

rm $n [ $ j ] . $ s c . run "<br />

– der Aufruf von echo legt das Kontrollfile $n[$j].$sc.run an,<br />

z.B. node29.3.run, <strong>und</strong> schreibt Prozessnummer hinein<br />

Diagnostik während des Ablaufs<br />

– <strong>für</strong> Einsicht in die Warteschlange (Queue), die qsub:<br />

qstat a; vgl. auch man qstat<br />

– <strong>für</strong> Löschungen von Einträgen in der Warteschlange: qdel;<br />

vgl. man qdel<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

809


8.3.12 (c) fertige Pakete zum parallelen Rechnen<br />

Mathematik VII<br />

[basiert auf Referat “Paralleles Rechnen mit R”von Lukas Gudm<strong>und</strong>sson am 14.09.2006]<br />

Peter Ruckdeschel<br />

Motivation: einige Beispiele von Anwendungen rechenintensiver, Matthias Kohl<br />

statistischer Verfahren<br />

R/S-plus <strong>für</strong><br />

Problem Verfahren Anwendugen<br />

Mustererkennung /<br />

maschinelles<br />

Lernen<br />

Untersuchung<br />

komplexer<br />

Wechselwirkungen<br />

/ Dimensionsre-<br />

duktion<br />

Neuronale Netze /<br />

Support Vector<br />

Machines (SVMs)<br />

/ Data-Mining<br />

stochastische /<br />

numerische<br />

Simulation,<br />

Gibbs-Sampler<br />

(MCMC)<br />

´ Analyse von<br />

K<strong>und</strong>endaten, Genetik:<br />

Microarray-Analysen,<br />

Pharmabereich:<br />

Wechselwirkungen von<br />

Medikamenten<br />

´ Meteorologie,<br />

Klimatologie, Geologie,<br />

Fahrzeugbau (Crashtests),<br />

Genetik: Sequenzierung,<br />

<br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

810


Problem Verfahren Anwendugen<br />

robuste<br />

Kovarianzen<br />

hochdimensionaler<br />

Daten<br />

Resampling-<br />

Techniken<br />

(Bootstrap)<br />

´ Ausreißeridentifikation,<br />

Sensitivitätsanalysen<br />

statistischer Verfahren<br />

Situation: eine Aufgabe ist “automatisiert” bestmöglich auf<br />

mehrere CPUs zu verteilen<br />

Problemvoraussetzung: Parallelisierbarkeit<br />

– mehrere Teilaufgaben können (weitgehend) unabhängig von<br />

einander parallel gelöst werden<br />

– dazu nötig: geringer Kommunikationsbedarf der Teilaufgaben<br />

untereinander<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

811


Hardware-Architekturen<br />

<br />

– Multiprozessor-Maschine<br />

£ ein Speicher<br />

£ Datenaustausch über<br />

Speicher<br />

£ (eine R - Version)<br />

– Cluster von Maschinen<br />

£ verschiedene Architektur<br />

£ Datenaustausch über<br />

Netzwerk<br />

£ (verschiedene R - Versionen)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

812


Software zur Regelung der Kommunikation <strong>und</strong> Verwaltung der<br />

Knoten<br />

<br />

– MPI (Message Passing Interface )<br />

£ Quasi-Standard<br />

£ fortlaufend in Weiterentwicklung<br />

£ hervorragend <strong>für</strong> Multiprozessor-Maschinen<br />

– PVM (Parallel Virtual Machine)<br />

£ weit verbreitet<br />

£ konzeptionell <strong>für</strong> heterogene Cluster von Maschinen<br />

£ seit ca. 1997 nicht weiterentwickelt<br />

– Verfügbarkeit/Installation<br />

£ beide Konzepte als Pakete im Open Source Projekt<br />

implementiert verfügbar<br />

£ Installation bei Multiprozessor-Maschinen nur einmal<br />

nötig, bei heterogenen Netzen u.U. mehrfach (nicht bei<br />

homogenen Netzen mit gemeinsamen Fileserver)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

813


R-Pakete zur Parallelisierung<br />

<br />

– RPVM (Na Li and Rossini (2001); liefert Infra-Struktur)<br />

£ Vorbereitung: Installation von PVM, Setzen von Pfaden<br />

£ Shell-Skripten zur Kommunikation zwischen PVM <strong>und</strong> R<br />

£ Starten der Prozesse in R<br />

£ Low-level <strong>und</strong> high-level Tools zur Parallelisierung<br />

– Rmpi (Yu (2002); liefert Infra-Struktur)<br />

£ Vorbereitung: Erstellen eines Beowulf Clusters;<br />

Installation von LAM-MPI<br />

£ Starten von R-Slaves aus R heraus<br />

£ Rmpi implementiert mehrere MPI-funktionen zu<br />

Parallelisierung in R<br />

– snow (Rossini et al. (2003); komfortables User-Interface)<br />

£ Basiert auf rpvm oder Rmpi<br />

£ Vor Beginn einer Sitzung: Initialisierung von PVM / MPI<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

814


£ Wichtige Funktionen in snow<br />

¡ Administrative Routinen<br />

: makeCluster: erzeugt einen neuen Cluster<br />

: stopCluster : schließt Cluster<br />

: clusterSetupSPRNG: Initialisierung <strong>für</strong> parallele Zufallszahlen<br />

¡ High Level Routinen<br />

: parLapply: paralleles lapply<br />

: parSapply: paralleles sapply<br />

: parApply: paralleles apply<br />

¡ Basic Routines<br />

: clusterExport : exportiert Variablen zu Knoten<br />

: clusterCall : ruft Funktion in jedem Knoten auf<br />

: clusterApply : wendet Fkt. auf Argumente in jedem Knoten an<br />

: clusterApplyLB: clusterApply mit ausgeglichener<br />

Aufgebenverteilung<br />

: clusterEvalQ: Auswertung eines Ausdrucks auf Knoten<br />

: clusterSplit : Aufteilung eines Vektors an Knoten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

815


R–Beispiel 8.3-8 [Beispiel mit snow <strong>und</strong> Rmpi]:<br />

r e q u i r e ( boot ) ; r e q u i r e ( snow}<br />

# e r z e u g t e i n C l u s t e r aus 4 Maschienen<br />

c l m akeCluster ( 4 , t y p e = "MPI" )<br />

# w e r t e t l i b r a r y ( boot ) a u f a l l e n Maschinen aus<br />

c l u s t e r E v a l Q ( c l , l i b r a r y ( boot ) )<br />

# d e f i n i t i o n d e r zu b e a r b e i t e n d e n Funktion<br />

r a t i o f u n c t i o n ( d , w) sum ( d$x £ w) /sum ( d$u £ w)<br />

# a u s f ü h r e n des B o o t s t r a p a u f dem C l u s t e r<br />

c l u s t e r C a l l ( c l , boot , c i t y , r a t i o , R=999 , s t y p e="w" )<br />

# Stopt den C l u s t e r<br />

s t o p C l u s t e r ( c l )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

816


Quellen<br />

– allgemeine Einführungen in paralelles Rechnen:<br />

http://www.llnl.gov/computing/tutorials/parallel_comp/,<br />

http://www.numa.uni-linz.ac.at/Staff/haase/parvor_e/node1.html<br />

– Links zu MPI: http://www.mpi-forum.org,<br />

http://www.lam-mpi.org<br />

– Links zu PVM: http://www.netlib.org/pvm3/,<br />

http://www.csm.ornl.gov/pvm/pvm_home.html<br />

– MPI <strong>und</strong> PVM im Vergleich: Geist et al. (1996)<br />

– Unix - Multiprozessoren Netzwerk Beowulf:<br />

http://www.beowulf.org<br />

– Einführung zum Parallelen Rechnen in R:<br />

Abstract <strong>und</strong> Folien zu Vortrag von<br />

Justin Harrington <strong>und</strong> Matias Salibian-Barrera<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

817


– snow von Luke Tierney, A.J. Rossini, Michael Na Li, H.<br />

Sevcikova, http://cran.us.r-project.org/src/contrib/Descriptions/snow.html;<br />

weitere Informationen unter Rossini et al. (2003) <strong>und</strong><br />

http://www.stat.uiowa.edu/~luke/R/cluster/cluster.html,<br />

sowie unter http://www.sfu.ca/~sblay/R/snow.html<br />

– pvclust von Ryota Suzuki <strong>und</strong> Hidetoshi Shimodaira,<br />

http://cran.us.r-project.org/src/contrib/Descriptions/pvclust.html;<br />

weitere Informationen unter<br />

http://www.is.titech.ac.jp/~shimo/prog/pvclust/<br />

– Rmpi von Hao Yu, http://cran.us.r-project.org/src/contrib/Descriptions/Rmpi.html;<br />

weitere Informationen unter Yu (2002) <strong>und</strong><br />

http://www.stats.uwo.ca/faculty/yu/Rmpi<br />

– rpvm von Na Li <strong>und</strong> A.J. Rossini,<br />

http://cran.us.r-project.org/src/contrib/Descriptions/Rpvm.html;<br />

weitere Informationen unter Na Li and Rossini (2001)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

818


8.3.13 Beispiel: R im InterNet — R im<br />

BATCH–Modus<br />

Beispiel von Matthias Kohl:<br />

<br />

<br />

Routine zur Berechnung des Minimax–Radiuses<br />

. . . z.Z. nicht online ausführbar, weil Rechner vom Netz, auf dem Web-Server <strong>und</strong> R liefen. . .<br />

Bereitstellung eines HTML–Formulars als Benutzerschnittstelle<br />

– c.f. http://www.uni-bayreuth.de/departments/math/org/<br />

/mathe7/radius/program.html<br />

– Benutzer: radius; Kennwort: unknown<br />

R–Beispiel 8.3-9 [der HTML-Code]:<br />

<br />

<br />


␣␣␣ c h a r s e t=i s o 8859 1"><br />

<br />

<br />

< t i t l e>The C o s t s o f Not Knowing t h e Radius<br />

<br />

<br />

P r e v i o u s page :<br />

<br />

<br />

Mathematical S t a t i s t i c s (MATHE V I I ) r a d i u s<br />

<br />

<br />

<br />

The C o s t s o f Not Knowing t h e Radius<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

820


Program f o r k d i m e n s i o n a l l o c a t i o n<br />

<br />

<br />

<br />

This program d e t e r m i n e s t h e l e a s t f a v o r a b l e r a d i u s<br />

r0 f o r a g i v e n r a d i u s i n t e r v a l<br />

[ ra , rb ] .<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Choose a d i m e n s i o n k between 1 and 2 5 :<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

821


<br />

<br />

<br />

<br />

S p e c i f i y a r a d i u s i n t e r v a l [ ra ,<br />

rb] , w i t h ra i n [ 0 , 5)<br />

and rb i n ( 0 , 5 ] .<br />

For unbo<strong>und</strong>ed r a d i u s i n t e r v a l s s e t rb<br />

to 6 !<br />

<br />

<br />

<br />

<br />

L e f t l i m i t ra o f t h e r a d i u s i n t e r v a l :<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

822


<br />

R i g h t l i m i t rb o f t h e r a d i u s i n t e r v a l :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

This page i s m a i n t a i n e d by<br />

<br />

M a t t h i a s Kohl<br />

L a s t m o d i f i e d : $Date : 2001/10/10 $<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

823


Auswertung der Eingabe in das Formular<br />

Übergabe per HTML–Methode "post" über stdin an cgi–Skript, einem<br />

ausführbaren C–Programm, das den Eingabestrom filtert (eigentlich besser<br />

geeignet: Perl), R aufruft <strong>und</strong> schließlich dynamisch Antwort-HTML-Seite<br />

erzeugt<br />

R–Beispiel 8.3-10 [der C-Code]:<br />

verfügbar unter http://www.uni-bayreuth.de/departments/math/<br />

# i n c l u d e <br />

# i n c l u d e <br />

# i n c l u d e < s t d l i b . h><br />

# d e f i n e b u f f e r 16<br />

/org/mathe7/rkurs/prgm.c<br />

void f i l e c o p y ( FILE £ i f p , FILE £ o f p ) ;<br />

/£ k o p i e r t F i l e £ i f p a u f F i l e £ o f p £/<br />

void f i l t e r ( char £££ v a r l i s t , char £££ i n h a l t l i s t ,<br />

<br />

i n t £n ) ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

824


£ f i l t e r t e i n e n Tokenstrom a u f s t d i n<br />

i n e i n e L i s t e vom Typ Eintragname=E i n t r a g £/<br />

i n t main ( void )<br />

{ i n t i =0,n= 1;<br />

char ££ v l , ££ i l ;<br />

/£ dynamische Erzeugung e i n e r HTML S e i t e<br />

a u f s t d o u t £/<br />

p r i n t f ( " Content t y p e : ␣ t e x t / html%c%c " , 1 0 , 1 0 ) ;<br />

p r i n t f ( "\n" ) ;<br />

p r i n t f ( "\n" ) ;<br />

/£ .. < w e g g e l a s s e n > . . . £/<br />

p r i n t f ( "\n" ) ;<br />

p r i n t f ( "\n" ) ;<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

825


£ . . H i n t e r g r u n d <strong>und</strong> Kopf d e r HTML S e i t e . . £/<br />

/£ .. < w e g g e l a s s e n > . . . £/<br />

/£ F i l t e r n des Tokenstroms a u f s t d i n £/<br />

f i l t e r (&v l , &i l , &n ) ;<br />

/£ d y n a m i s c h e s S c h r e i b e n e i n e s R S k r i p t s<br />

£/<br />

h i e r PFAD V a r i a b l e n aus S i c h e r h e i t s g r u e n d e n<br />

n i c h t o f f e n g e l e g t<br />

f o=f o p e n ( "$PFAD/make . r " , "w+" ) ;<br />

i f ( n>=0)<br />

{<br />

/£ U e b e r p r u e f u n g d e r Eingaben von s t d i n £/<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

826


i n t dim=a t o i ( i l [ 0 ] ) , t e s t ;<br />

double s t a r t=a t o f ( i l [ 1 ] ) , ende=a t o f ( i l [ 2 ] ) ;<br />

i n t len0 , l en1 , l e n 2 ;<br />

char £ a u f r u f ; /£ Unix Kommando£/<br />

char c ;<br />

FILE £ f o ;<br />

l e n 0=s t r l e n ( i l [ 0 ] ) ;<br />

l e n 1=s t r l e n ( i l [ 1 ] ) ;<br />

l e n 2=s t r l e n ( i l [ 2 ] ) ;<br />

/£ E i n g a b e f e h l e r abfangen .. < w e g g e l a s s e n > . . . £/<br />

/£ a l s e r s t e s w i r d im dynamisch e r z e u g t e n<br />

R S k r i p t das e i g e n t l i c h e R Source F i l e<br />

p e r s o u r c e e i n g e l e s e n £/<br />

f p r i n t f ( fo , "␣%s \n␣" ,<br />

" s o u r c e ( f i l e =\"$PFAD/ r a d i u s . r \") " ) ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

827


£ A u f r u f d e r e i g e n e n F u n k t i o n ’ o p t i m a l ’<br />

£/<br />

mit den E i n g a b e p a r a m e t e r n vom WWW S e r v e r<br />

f p r i n t f ( fo , "%s " , " o p t i m a l ( k=" ) ;<br />

f p r i n t f ( fo , "%d" , dim ) ;<br />

f p r i n t f ( fo , "%s " , " , ␣ s t a r t=" ) ;<br />

f p r i n t f ( fo , "%f " , s t a r t ) ;<br />

f p r i n t f ( fo , "%s " , " , ␣ ende=" ) ;<br />

f p r i n t f ( fo , "%f " , ende ) ;<br />

f p r i n t f ( fo , "%s " , " )\ n" ) ;<br />

f c l o s e ( f o ) ;<br />

/£ a u f r u f i s t S t r i n g vom Typ<br />

a u f r u f="R␣BATCH␣$PFAD/make . r ␣$PFAD/ ausgabe . t x t "<br />

h i e r PFAD V a r i a b l e n aus S i c h e r h e i t s g r u e n d e n<br />

n i c h t o f f e n g e l e g t £/<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

828


£ A u f r u f von R im BATCH Modus mit R S k r i p t ,<br />

£/<br />

K o n s o l e n a u sgabe a u f D a t e i ausgabe . t x t<br />

d a b e i s c h r e i b t r a d i u s . r d i e E r g e b n i s s e a u f F i l e s<br />

r a d i u s . t x t , i n e f f . t x t , dauer . t x t<br />

t e s t=system ( a u f r u f ) ;<br />

/£ A u s l e s e n £/<br />

f o=f o p e n ( "$PFAD/ r a d i u s . t x t " , " r " ) ;<br />

i f ( f o==NULL)<br />

p r i n t f ( " D a t e i ␣ konnte ␣ n i c h t ␣ g o e f f n e t ␣ werden ! " ) ;<br />

/£ s i m u l t a n : d y n a m i s c h e r Aufbau d e r E r g e b n i s s e i t e<br />

£/<br />

mit den R e s u l t a t e n durch S c h r e i b e n a u f s t d o u t<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "Program ␣ f o r ␣k d i m e n s i o n a l ␣ l o c a t i o n " ) ;<br />

p r i n t f ( "" ) ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

829


p r i n t f ( "" ) ;<br />

p r i n t f ( "The␣ r e s u l t s ␣ f o r ␣ d i m e n s i o n ␣k=%d" , dim ) ;<br />

p r i n t f ( " and ␣ r a d i u s ␣ i n t e r v a l " ) ;<br />

p r i n t f ( "" ) ;<br />

/£ Ausgabe Minimax Radius £/<br />

i f ( ende==6)<br />

{<br />

}<br />

e l s e<br />

{<br />

}<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "␣ [%1.2 f , ␣ i n f i n i t y ]" , s t a r t ) ;<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "␣ [%1.2 f , ␣%1.2 f ] ␣" , s t a r t , ende ) ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

830


p r i n t f ( "␣ a r e :" ) ;<br />

<br />

Mathematik VII<br />

p r i n t f ( " l e a s t ␣ f a v o r a b l e ␣ r a d i u s : " ;<br />

p r i n t f ( "" ) ;<br />

Peter Ruckdeschel<br />

w h i l e ( ( c=g e t c ( f o ) ) !=EOF && c !=’ \n ’ )<br />

Matthias Kohl<br />

{ p r i n t f ( "" ) ;<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "␣%c ␣" , c ) ; }<br />

f c l o s e ( f o ) ;<br />

/£ Ausgabe E f f i z i e n z v e r l u s t £/<br />

f o=f o p e n ( "$PFAD/ i n e f f . t x t " , " r " ) ;<br />

i f ( f o==NULL)<br />

p r i n t f ( " D a t e i ␣ konnte ␣ n i c h t ␣ g o e f f n e t ␣ werden ! " ) ;<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

831


p r i n t f ( "␣" ) ;<br />

p r i n t f ( " minimax ␣ i n e f f i c i e n c y : ␣" ) ;<br />

w h i l e ( ( c=g e t c ( f o ) ) !=EOF && c !=’ \n ’ )<br />

{ p r i n t f ( "" ) ;<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "␣%c ␣" , c ) ; }<br />

p r i n t f ( "" ) ;<br />

f c l o s e ( f o ) ;<br />

/£ Ausgabe R e c h e n z e i t £/<br />

f o=f o p e n ( "$PFAD/ dauer . t x t " , " r " ) ;<br />

i f ( f o==NULL)<br />

p r i n t f ( " D a t e i ␣ konnte ␣ n i c h t ␣ g o e f f n e t ␣ werden ! " ) ;<br />

p r i n t f ( "␣ computation ␣ time ␣ ( s e c ) : " ) ;<br />

p r i n t f ( "␣" ) ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

832


w h i l e ( ( c=g e t c ( f o ) ) !=EOF && c !=’ \n ’ )<br />

{ p r i n t f ( "" ) ;<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "␣%c ␣" , c ) ; }<br />

p r i n t f ( "" ) ;<br />

f c l o s e ( f o ) ;<br />

/£ Fuss <strong>und</strong> M a i n t a i n e r v e r m e r k £/<br />

p r i n t f ( "" ) ;<br />

p r i n t f ( "␣ This ␣ page ␣ i s ␣ m a i n t a i n e d ␣ by ␣" ) ;<br />

p r i n t f ( "


}<br />

<br />

}<br />

i f ( n>0)<br />

{<br />

}<br />

e l s e<br />

{<br />

}<br />

f o r ( i =0; i


das eigentliche R-Programm — verfügbar unter<br />

}<br />

<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/<br />

/rkurs/radius.r<br />

###########################################<br />

# Funktionen z u r Berechnung des l e a s t f a v .<br />

# Radius im F a l l k dim . L o k a t i o n f u e r e i n<br />

# v o rgeg . R a d i u s i n t e r v a l l [ s t a r t , ende ]<br />

###########################################<br />

#H i l f s f u n k t i o n " g e s t u t z t e " V e r t e i l u n g s f u n k t i o n<br />

F f k t f u n c t i o n ( k , t )<br />

{<br />

e r g pgamma ( ( t ^2/ 2 ) , ( k/ 2 ) )<br />

r e t u r n ( e r g )<br />

#H i l f s f u n k t i o n g e s t u t z t e r E r w a r t u n g s w e r t<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

835


E f k t f u n c t i o n ( k , t )<br />

{<br />

}<br />

e r g s q r t ( 2 ) £gamma ( ( k+1)/ 2) /gamma( k/ 2) £<br />

r e t u r n ( e r g )<br />

pgamma ( ( t ^2/ 2 ) , ( k+1)/ 2)<br />

#H i l f s f u n k t i o n g e s t u t z t e V a r i a n z<br />

Vfkt f u n c t i o n ( k , t )<br />

{<br />

}<br />

e r g k£pgamma ( ( t ^2/ 2 ) , ( k+2)/ 2)<br />

r e t u r n ( e r g )<br />

#Funktion<br />

<br />

z u r Berechnung d e r o p t i m a l e n<br />

#IC a l s Loesung des MSE Problems ( p . 2 0 7 ) im<br />

#L o k a t i o n s m o d e l l (P_0 = N_k ( 0 , I ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

836


#( v g l . Rieder (1994, Theorem 5.5.7(b)))<br />

#u n t e r Verwendung e i n e s z w e i d i m e n s i o n a l e n<br />

#Newton V e r f a h r e n s<br />

ICoptk f u n c t i o n ( k , r , A s t a r t =1, b s t a r t =1,<br />

{<br />

d e l t a =1e 9)<br />

A1 A s t a r t<br />

b1 b s t a r t<br />

A0 0<br />

b0 0<br />

#Ab S c h r i t t<br />

w h i l e (max( abs (A1 A0 ) , abs ( b1 b0 ) ) > d e l t a )<br />

{<br />

A0 A1<br />

b0 b1<br />

c0 b0/A0<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

837


g s q r t ( 2 ) £gamma ( ( k+1)/ 2) /gamma( k/ 2)<br />

f dgamma( c0^2/ 2 , k/ 2)<br />

e g£dgamma( c0^2/ 2 , ( k+1)/ 2)<br />

v k£dgamma( c0^2/ 2 , ( k+2)/ 2)<br />

Ff F f k t ( k , c0 )<br />

E E f k t ( k , c0 )<br />

V Vfkt ( k , c0 )<br />

G2 g E c0 + c0 £ Ff r ^2£ c0<br />

G2b 1/A0£( c0 £ e 1 + Ff +<br />

c0^2£ f r ^2)<br />

G2A 1/A0£ ( c0^2£ e + c0 c0 £ Ff<br />

c0^3£ f + r ^2£ c0 )<br />

detJ V£G2b ( g E) £G2A<br />

A1 ( k£G2b + G2£ ( c0 £v + g<br />

E c0^2£ e ) ) / detJ<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

838


}<br />

<br />

}<br />

b1 (k£G2A + G2£ (V c0^2£v +<br />

e r g c (A1 , b1 )<br />

r e t u r n ( e r g )<br />

c0^3£ e ) ) / detJ<br />

#H i l f s f u n k t i o n z u r Bestimmung des<br />

#o p t i m a l e n r0 i n n e r h a l b e i n e s bestimmten<br />

#B e r e i c h s [ begin , end ]<br />

i n t e r v a l l f u n c t i o n ( r , k , r l i , r r e , d e l t a )<br />

{<br />

Ab ICoptk ( k , r , 1 , 1 , d e l t a )<br />

i f ( r r e == 6)<br />

{<br />

}<br />

bmin k/ s q r t ( 2 ) /gamma ( ( k+1)/ 2) £gamma( k/ 2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

839


e l s e<br />

{<br />

}<br />

e f f r e Ab [ 2 ] ^ 2 /bmin^2<br />

Abre ICoptk ( k , r r e , 1 , 1 , d e l t a )<br />

e f f r e ( k£Ab [ 1 ] Ab [ 2 ] ^ 2 £ ( r ^2 r r e ^2)) /<br />

i f ( r l i == 0 . 0 )<br />

{<br />

}<br />

e l s e<br />

{<br />

( k£ Abre [ 1 ] )<br />

e f f l i ( k£Ab [ 1 ] Ab [ 2 ] ^ 2 £ r ^2)/k<br />

A b l i ICoptk ( k , r l i , 1 , 1 , d e l t a )<br />

e f f l i ( k£Ab [ 1 ] Ab [ 2 ] ^ 2 £ ( r ^2 r l i ^2)) /<br />

( k£ A b l i [ 1 ] )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

840


}<br />

<br />

}<br />

a s s i g n ( " e f f " , e f f r e ,<br />

e n v i r=s y s . frame ( which = 2))<br />

r e t u r n ( e f f r e e f f l i )<br />

#Funktion z u r Bestimmung des o p t i m a l e n r0<br />

#i n n e r h a l b e i n e s bestimmten B e r e i c h s [ begin , end ]<br />

o p t i m a l f u n c t i o n ( k , s t a r t , ende )<br />

{<br />

j e t z t proc . time ( ) [ 3 ]<br />

d e l t a 1e 8<br />

eps 1e 6<br />

r u n i r o o t ( i n t e r v a l l , lower = s t a r t ,<br />

upper = ende , t o l = eps , m a x i t e r = 50 ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

841


}<br />

k=k , r l i =s t a r t , r r e=ende ,<br />

d e l t a=d e l t a ) $ r o o t<br />

dauer proc . time ()[3] j e t z t<br />

cat ( ro<strong>und</strong> ( r , 4 ) , f i l e ="$PFAD/ r a d i u s . t x t " )<br />

cat ( ro<strong>und</strong> ( e f f , 4 ) , f i l e ="$PFAD/ i n e f f . t x t " )<br />

cat ( ro<strong>und</strong> ( dauer , 2 ) , f i l e ="$PFAD/ dauer . t x t " )<br />

r e t u r n ( c ( r , e f f ) )<br />

Bemerkung: Man würde <strong>für</strong> diese Zwecke heute eher das Paket CGIwithR von<br />

David Firth verwenden, zu beziehen unter<br />

http://cran.r-mirror.de/src/contrib/Descriptions/CGIwithR.html.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

842


8.4 Struktur von CRAN / das R Core Team<br />

8.4.1 das CRAN<br />

CRAN steht <strong>für</strong> Comprehensive R Archive Network<br />

organisierte Verteilungsstruktur um R weltweit verfügbar zu<br />

machen<br />

– offizielle Mirrors http://cran.r-project.org/mirrors.html<br />

– verlinkt mit StatLib<br />

– weitere inoffizielle Mirrors: z.B.<br />

ftp://ftp.uni-bayreuth.de/pub/math/statlib/R<br />

8.4.2 die R Fo<strong>und</strong>ation<br />

8.4.2 (a) Was ist das?<br />

genauer Titel “The R Fo<strong>und</strong>ation for Statistical Computing”<br />

<br />

non–profit Organisation<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

843


Sitz: in Wien, aktuell an der TU Wien<br />

eingetragene Vereinigung nach Österreichischem Recht<br />

8.4.2 (b) Zielsetzung<br />

soll dem R–Projekt <strong>und</strong> anderen Innovationen im Bereich<br />

rechnergestützte Statistik Unterstützung gewähren<br />

soll eine Anlaufstelle sein <strong>für</strong> Privatleute, Instititutionen oder<br />

kommerzielle Firmen die R unterstützen wollen oder mit der<br />

R–Entwicklergemeinde in Kontakt treten wollen<br />

soll das Urheberrecht über die R–Software <strong>und</strong> –Dokumentation<br />

innehaben <strong>und</strong> verwalten<br />

vergleichbar zu Apache Fo<strong>und</strong>ation <strong>und</strong> GNOME Fo<strong>und</strong>ation<br />

Link zu den Statuten<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

844


8.4.2 (c) Leitung<br />

Präsidenten: Robert Gentleman, Ross Ihaka<br />

Generalsekretär: Friedrich Leisch<br />

Schatzmeister: Kurt Hornik<br />

Ehrenmitglied: John Chambers<br />

Auditoren: Peter Dalgaard <strong>und</strong> Martin Mächler<br />

8.4.2 (d) Kontakt<br />

Adresse<br />

The R Fo<strong>und</strong>ation for Statistical Computing<br />

c/o Institut <strong>für</strong> Statistik <strong>und</strong> Wahrscheinlichkeitstheorie<br />

Technische Universität Wien<br />

Wiedner Hauptstraße 8-10/1071<br />

A-1040 Wien<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

845


Tel: (+43 1) 58801 10715<br />

Fax: (+43 1) 58801 10798<br />

Email: R-fo<strong>und</strong>ation@R-project.org<br />

Bankverbindung<br />

– Bank Austria Creditanstalt (Swift Code BKAUATWW)<br />

– innerhalb Österreich: Konto-Nr. 51582 121701, BLZ 12 000<br />

– international (IBAN): AT 93 1200 0515 8212 1701<br />

8.4.2 (e) Mitgliedschaft<br />

gewöhnliche Mitgliedschaft<br />

– durch Mehrheitsvotum der Vollversammlung<br />

– Kriterium: nicht–monetäre Beiträge zur Entwicklung von R<br />

unterstützende Mitgliedschaft<br />

<br />

– durch Zahlung jährlicher Beiträge<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

846


– Mitgliedschaft sowohl natürlicher als auch juristischer<br />

Personen möglich<br />

– Beiträge<br />

£ natürliche Personen: 25 e<br />

£ Institutionen: 250 e<br />

£ Wohltäter (“benefactor”) (?): 500 e<br />

8.4.3 R Core Team<br />

8.4.3 (a) Zusammensetzung / Organisation<br />

wie in Abschnitt 0.2.2 erwähnt:<br />

das “Projekt R” wurde initiiert von Ross Ihaka / Robert<br />

Gentlemen (University of Auckland)<br />

seit Mitte 1997 hat sich eine Kerngruppe von Entwicklern — das<br />

R Core Team zusammengef<strong>und</strong>en<br />

diese sind die einzigen mit Schreibrechten auf die R–Sourcen,<br />

wie sie sich im CRAN finden<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

847


Zusammensetzung<br />

– Douglas Bates (USA): bates@stat.wisc.edu<br />

– John Chambers (USA): jmc@research.bell-labs.com<br />

– Peter Dalgaard (Dänemark): p.dalgaard@biostat.ku.dk<br />

– Robert Gentleman (USA): rgentlem@jimmy.dfci.harvard.edu<br />

– Kurt Hornik (Österreich): Kurt.Hornik@ci.tuwien.ac.at<br />

– Stefano Iacus (Italien): stefano.iacus@unimi.it<br />

– Ross Ihaka (Neuseeland): ihaka@stat.auckland.ac.nz<br />

– Friedrich Leisch (Österreich): Friedrich.Leisch@univie.ac.at<br />

– Thomas Lumley (USA): tlumley@u.washington.edu<br />

– Martin Mächler (Schweiz): maechler@stat.math.ethz.ch<br />

– Guido Masarotto (Italien): guido@hal.stat.unipd.it<br />

– Duncan Murdoch (Kanada): murdoch@stats.uwo.ca<br />

– Paul Murrell (NZ): paul@stat.auckland.ac.nz<br />

– Martyn Plummer (Frankreich): plummer@iarc.fr<br />

<br />

– Brian Ripley (Großbritannien): ripley@stats.ox.ac.uk<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

848


– Duncan Temple Lang (USA): duncan@research.bell-labs.com<br />

– Luke Tierney (USA): luke@stat.umn.edu<br />

– <strong>und</strong> — bis Oktober 1999: Heiner Schwarte (Schweiz)<br />

h.schwarte@bluewin.ch<br />

8.4.3 (b) weitere wichtige Entwickler<br />

Valerio Aimale (Italien): valerio.aimale@biosgroup.com [Entwickler der Command history; R–Tester in<br />

der alpha-Phase]<br />

Thomas Baier (Österreich): Thomas.Baier@ci.tuwien.ac.at [Maintainer / Entwickler des R-COM–Servers]<br />

Roger Bivand (Norwegen): Roger.Bivand@nhh.no [Maintainer / Entwickler der Pakete GRASS, pixmap,<br />

spdep]<br />

Ben Bolker (USA): ben@zoo.ufl.edu [Maintainer / Entwickler der Pakete ape, gregmisc, landsc, boa,<br />

turtle, sparma, cannib, bbmisc]<br />

Göran Broström (Schweden): gb@stat.umu.se [Maintainer / Entwickler der Pakete eha, glmmML, spdep]<br />

Vince Carey (USA): stvjc@channing.harvard.edu [Entwickler im Bioconductor Projekt; Themen:<br />

externe Referenzen <strong>und</strong> RDBMS in Bioinformatik; Maintainer / Entwickler der Pakete combinat, gee,<br />

yags, outpack, cremo, Cmat, Cohort, alr, HIVresis, coild, lmsqreg]<br />

Saikat DebRoy (USA): saikat@stat.wisc.edu [Thema: Konvertierung großer R Pakete auf S4–Klassen;<br />

Maintainer / Entwickler der Pakete lme4, Matrix, nlme, RMySQL]<br />

Lyndon Drake (Neuseeland): lyndon@stat.auckland.ac.nz [Maintainer / Entwickler des Paketes<br />

gtkDevice]<br />

Brian D’Urso (USA): durso@hussle.harvard.edu [LATEX–CM Fonts <strong>für</strong> R]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

849


Dirk Eddelbüttel (Deutschland/USA): edd@debian.org [Maintainer / Entwickler des PaketesRQuantLib,<br />

zuständig <strong>für</strong> Debian Portierung, sehr aktiv in R-help]<br />

<br />

John Fox (Kanada): jfox@mcmaster.ca [Autor zu Fox (2002); Maintainer / Entwickler der Pakete car,<br />

effects, Rcmdr (GUI <strong>für</strong> R), sem]<br />

Paul Gilbert (Kanada): pgilbert@bank-banque-canada.ca [Maintainer / Entwickler der Pakete curve,<br />

dse1, dse2, dsepadi, juice, monitor, setRNG, syskern, tframe]<br />

Spencer Graves (?): spencer.graves@pdf.com [sehr aktiv in R-help]<br />

Philippe Grosjean (Belgien/Frankreich): [der Entwickler / Antreiber von GUI’s <strong>für</strong> R, Entwickler von<br />

SciViews; c.f. auch hier; Maintainer der Rubrik auf der R–Homepage Entwickler der Paketes pastecs,<br />

nlrq]<br />

Julian Harris [MacIntosh Portierung]<br />

Torsten Hothorn (Erlangen): Torsten.Hothorn@rzmail.uni-erlangen.de [Maintainer / Entwickler der<br />

Paketes StatDataML, exactRanktests, exactRanktests, ipred, lmtest, maxstat, multcomp, mvtnorm, RmSQL;<br />

Thema: Bagging/Boosting usw.]<br />

Robert King (Australien): robert.king@mailbox.gu.edu.au [Maintainer / Entwickler des Pakete gld]<br />

Wing Kwong (Tiki) Wan [MacIntosh Portierung]<br />

Philippe Lambert (Belgien): lambert@stat.ucl.ac.be [Maintainer / Entwickler des Pakets stable]<br />

Jan de Leeuw (USA): deleeuw@stat.ucla.edu [Maintainer / Entwickler des Pakete homals]<br />

Andy Liaw (USA): andy_liaw@merck.com [Maintainer / Entwickler des Pakete locfit, randomForest,<br />

spdep, sehr aktiv in R-help]<br />

Uwe Ligges (Dortm<strong>und</strong>): ligges@statistik.uni-dortm<strong>und</strong>.de [Maintainer / Entwickler des Pakets<br />

scatterplot3D, <strong>und</strong> der winedt.ini <strong>für</strong> R, siehe auch hier; sehr aktiv in R-help]<br />

Jim Lindsey (Belgien): jlindsey@luc.ac.be [Maintainer / Entwickler der Pakete gnlm, dna, event,<br />

repeated, growth, rmutil, stable, glim4; R–Tester in der alpha-Phase]<br />

Patrick Lindsey (Belgien): plindsey@luc.ac.be [Maintainer / Entwickler der Pakete ordinal; R–Tester<br />

in der alpha-Phase]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

850


Catherine Loader (USA): catherine@research.bell-labs.com [Maintainer / Entwickler des Pakets<br />

crossings, Locfit]<br />

<br />

Gordon Maclean (USA): maclean@atd.ucar.edu [R–Tester in der beta-Phase]<br />

John Maindonald (Australien):john.maindonald@anu.edu.au [Maintainer / Entwickler des Pakets hwde]<br />

David Meyer (Österreich): david.meyer@ci.tuwien.ac.at [Maintainer / Entwickler des Pakete<br />

StatDataML, vcd]<br />

Steve Oncley (USA): oncley@atd.ucar.edu [R–Tester in der beta-Phase]<br />

Richard O’Keefe (Neuseeland): ok@cs.otago.ac.nz [XML– <strong>und</strong> Datenstrukturen (Informatiker); aktiv<br />

in R-help]<br />

Hubert Palme: (Wuppertal) palme@uni-wuppertal.de [R–Tester in der beta-Phase]<br />

Jose Pinheiro (USA): jcp@research.bell-labs.com [Autor von Pinheiro and Bates (2000); siehe auch<br />

hier; Maintainer / Entwickler der Pakete nlme, SASmixed]<br />

Paulo J. Ribeiro, Jr. (Brasilien): Paulo.Ribeiro@est.ufpr.br [Maintainer / Entwickler der Pakete geoR,<br />

geoRglm; siehe auch hier]<br />

Jonathan Rougier (Großbritannien): J.C.Rougier@durham.ac.uk [Maintainer / Entwickler des Pakete<br />

Oarray, Tensor]<br />

Günther Sawitzki (Heidelberg): gs@statlib.uni-heidelberg.de [Autor eines deutschsprachigen Tutorial,<br />

Entwickler <strong>für</strong> OBERON]<br />

Martin Schlather (Bayreuth): martin.schlather@uni-bayreuth.de [Maintainer / Entwickler des Pakets<br />

RandomFields]<br />

Marc Schwartz (?): mschwartz@medanalytics.com [Maintainer / Entwickler der Pakete X-Tab, Coauthor<br />

gregmisc; sehr aktiv in R-help]<br />

Bill Simpson (Großbritannien): wsi@gcal.ac.uk [Maintainer / Entwickler der Pakete GRASS, pixmap,<br />

spdep]<br />

Gordon Smyth (Australien): smyth@wehi.edu.au [Maintainer / Entwickler der Pakete StatMod, SMAWEHI,<br />

Tweedie; Maintainer der Domain StatSci.org]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

851


Adrian Trapletti (Schweiz): adrian@olsen.ch [Maintainer / Entwickler der Pakete tseries, ffnet]<br />

Terry Therneau (USA): therneau.terry@mayo.edu [Maintainer / Entwickler der Pakete<br />

gamterms,plotterms, jitplot, mlowess, rpart, survival]<br />

Bill Venables (Australien): William.Venables@cmis.CSIRO.AU [Author von Venables and Ripley (1999)<br />

<strong>und</strong> Venables and Ripley (2000); wichtiger Programmierer <strong>für</strong> S-<strong>Plus</strong> <strong>und</strong> R]<br />

Gregory R. Warnes (USA): warnes@biostat.washington.edu [Maintainer / Entwickler von genetics,<br />

gregmisc, haplo.score, session]<br />

Andreas Weingessel (Österreich): Andreas.Weingessel@ci.tuwien.ac.at [Maintainer / Entwickler der<br />

Pakete bindata, princurve, quadprog]<br />

Simon Wood (Großbritannien): snw@mcs.st-and.ac.uk [Maintainer / Entwickler der Pakete mgcv, posum2]<br />

Achim Zeileis (Österreich): zeileis@ci.tuwien.ac.at [Mitorganisator der DSC–Konferenzen;<br />

Maintainer / Entwickler der Pakete strucchange,lmtest, ineq, vcd]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

852


8.4.3 (c) Entwicklungsprozess<br />

Abstimmung der Entwicklungsaktivitäten über / bei<br />

<br />

– Konferenzen<br />

– Newsletter: R News<br />

– spezielles Forum: r-devel —<br />

r-devel@stat.math.ethz.ch<br />

– einheitliche, konsistente Entwicklung mit<br />

subversion–System — siehe auch<br />

http://developer.r-project.org/SVNtips.html<br />

Beispiel 8.4-1 [Logfile vom 01.07.2003]:<br />

Tue Jul 1 08:03:04 UTC 2003, maechler<br />

sapply() matrix: no dimnames if no ..<br />

R NEWS,1.1547.2.72<br />

R/src/library/base/R sapply.R,1.4.44.1<br />

R/src/library/base/man lapply.Rd,1.8.10.2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

853


Tue Jul 1 08:03:37 UTC 2003, maechler<br />

branch update<br />

R NEWS,1.1669<br />

R/src/library/base/R sapply.R,1.5<br />

R/src/library/base/man lapply.Rd,1.12<br />

Tue Jul 1 09:14:54 UTC 2003, ripley<br />

remove unnecessary weights.lm method<br />

simplify model.matrix.lm<br />

now model.matrix.default handles empty models<br />

effects() does not work on empty models<br />

R/src/library/base/man effects.Rd,1.7 lm.summaries.Rd,1.35<br />

R/src/library/base/R lm.R,1.106<br />

R/tests reg-tests-2.R,1.72 reg-tests-2.Rout.save,1.85<br />

R NEWS,1.1670<br />

Tue Jul 1 09:39:37 UTC 2003, ripley<br />

lm.influence was misbehaving on a 0-rank model<br />

R/src/library/base/R lm.influence.R,1.15.2.1<br />

R NEWS,1.1547.2.73<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

854


Tue Jul 1 09:55:21 UTC 2003, hornik<br />

Updated.<br />

R FAQ,1.290.2.20<br />

R/doc/html faq.html,1.278.2.21<br />

R/doc/manual R-FAQ.texi,1.267.2.20<br />

R FAQ,1.310<br />

R/doc/html faq.html,1.298<br />

R/doc/manual R-FAQ.texi,1.287<br />

Tue Jul 1 09:58:08 UTC 2003, hornik<br />

Typos and cosmetics.<br />

R NEWS,1.1671<br />

R/src/library/base/R library.R,1.127<br />

R/src/library/base/man library.dynam.Rd,1.16<br />

Tue Jul 1 12:16:34 UTC 2003, duncan<br />

Fix from John to get methods for [[ (and other primitives)<br />

merged into the methods table when a second or more library<br />

is loaded with such methods. See SWinTypeLibs and<br />

RDCOMClient for an example.<br />

R/src/library/methods/R RMethodUtils.R,1.47<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

855


Tue Jul 1 12:35:58 UTC 2003, ripley<br />

lm.influence -- handle 0-rank models, add names to<br />

components of return value<br />

R NEWS,1.1672<br />

R/src/library/base/R lm.influence.R,1.16<br />

R/src/library/base/man lm.influence.Rd,1.19<br />

R/tests reg-tests-2.R,1.73 reg-tests-2.Rout.save,1.86<br />

Tue Jul 1 16:20:52 UTC 2003, ripley<br />

branch update<br />

R NEWS,1.1673<br />

Tue Jul 1 22:03:58 UTC 2003, iacus<br />

R/src/modules/aqua aquaconsole.c,1.17<br />

R/src/unix aqua.c,1.5<br />

R/src/modules/aqua aquaconsole.c,1.18<br />

R/src/modules/aqua/Contents/Resources/main.nib info.nib,1.7<br />

objects.xib,1.9<br />

R/src/modules/aqua R.fix,1.3<br />

Bug–Tracking<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

856


– automatisierte Formulare zur Fehlermeldung, z.B.<br />

http://r-bugs.biostat.ku.dk/cgi-bin/R<br />

8.4.3 (d) Zuständigkeiten<br />

Douglas Bates: lineare Modelle, AIC, prompt, stack; Pakete Devore5,<br />

Matrix, NISTNls, SASMixed, lme4, nlme,<br />

John Chambers: “Vater” von S .... — vieles also direkt oder indirekt von<br />

ihm; Pakete OOP, SLanguage<br />

Peter Dalgaard: as.function, edit .data.frame, gctorture, margin.table,<br />

match.fun, prop.table, subset, transform; Pakete TclTK, ISwR<br />

Robert Gentleman: match.fun, toString, match.fun; Pakete lgtdl, muhaz,<br />

panel, permax<br />

Kurt Hornik: Editor von R–News, aggregate, agrep, apropos, loglin ,<br />

read.fwf (Perl), [ r ,p,q,d]SignRank, [ r ,p,q,d]wilcox; Pakete chron, date,<br />

mda, oz, polynom, tseries, vcd, chron; aktuelle/ neue Projekte unter<br />

http://developer.r-project.org/TODO-KH.html<br />

Stefano Iacus: Paket ifs<br />

<br />

Ross Ihaka: Mitinitiator von R<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

857


Friedrich Leisch: formatC, mahalanobis, RweaveLatex, Rtangle, Sweave,<br />

....; Pakete bindata, bootstrap, e1071, fracdiff, mlbench, multiv,<br />

pixmap, ifs,<br />

Thomas Lumley: close [make,read].socket, esoph, image; Pakete acepack,<br />

adapt, dichromat, leaps, netCDF, rmeta, survey, survival<br />

Martin Mächler: apropos, Bessel, check.options, col2rgb, example,<br />

findInterval , formatC, jitter , methods, n2mfrow, noquote, plot . design,<br />

plot .lm, print .coefmat, RNGkind, str , sunflowerplot, symnum,<br />

which.min[max], xyz.coords, apropos; Pakete VLMC, cluster, cobs,<br />

lasso2, lokern, lpridge, normix, wavethresh; aktuelle/ neue Projekte<br />

unter http://developer.r-project.org/TODO-MM.html<br />

Guido Masarotto: library , link .html.help, png, Rwin configuration<br />

[Konfiguration R <strong>für</strong> Windows], saveplot, system, windows,<br />

Duncan Murdoch: Paket ellipse<br />

Paul Murrell: layout, plotmath, Paket grid; aktuelle/ neue Projekte unter<br />

http://developer.r-project.org/paul-todo.html<br />

Martyn Plummer: Paket gtkDevice<br />

<br />

Brian Ripley: “ R wie Ripley ....”, extrem aktiv in r-help; add1, alias , aov,<br />

bandwidth, C, chull, conflicts , ddebugger, dev2bitmap, dummy.coef,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

858


eff<br />

. aovlist , expand.grid, extractAIC, factor .scope, file . access,<br />

file . info , files , kappa, labels, link .html.help, list . files , manova,<br />

max.col, model.tables, page, pmatch, png, poly, predict .glm, proj,<br />

RANDOM, read.fwf, relevel , repilcations , rug, savePlot, se.aov,<br />

se. contras, sets, shell , step, summary.manova, Sys. info , Sys. sleep,<br />

system, ts methods, update, windows, zip . file .extract; Pakete<br />

KernSmooth, MASS, RODBC, boot, class, gee, logspline, mix, nnet,<br />

pspline, rpart, sm, spatial, tree, KernSmooth; aktuelle/ neue Projekte<br />

unter http://developer.r-project.org/BDR-TODO.html<br />

Duncan Temple Lang: [Programmierung; multiple threading...],<br />

getNativeSymbolInfo, getNumCConverters, getNumCConverters; Pakete<br />

REventLoop, RGdkPixbuf, RGtkxxx–Pakete, RObjectTables, RSPerl,<br />

SASXML, SJAVA, REventLoop, RWinRegistry, RWinTypeLibs, SXalan, Slcc ,<br />

Sxslt, XML, REventLoop; aktuelle/ neue Projekte unter<br />

http://developer.r-project.org/TODO-DTL.html<br />

Luke Tierney: viele konzeptionelle Ideen, u.a. Namespaces; siehe auch<br />

Beiträge auf http://developer.R-project.org/; bindenv, ns xxx,<br />

bindenv; Pakete serialize, snow, tkrplot<br />

Grafiktreiber c.f.<br />

http://www.stat.auckland.ac.nz/~paul/R/devices.html<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

859


Treiber Betriebssystem zuständig<br />

PostScript (<strong>und</strong> bitmap) alle R-core<br />

PicTeX alle R-core<br />

PDF alle R-core<br />

xfig alle R-core<br />

Java alle Duncan Temple-Lang<br />

GTK alle Martyn Plummer<br />

SVG alle T Jake Luciani<br />

X11 (<strong>und</strong> PNG <strong>und</strong> JPEG) *NIX R-core<br />

GNOME *NIX Martyn Plummer<br />

Quartz *NIX Stefano Iacus<br />

Windows Windows Duncan Murdoch<br />

proxy Windows Thomas Baier<br />

Macintosh<br />

<br />

Macintosh Stefano Iacus<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

860


8.4.4 Einreichung eigener Pakete bei CRAN<br />

8.4.4 (a) Vorbereitungen<br />

Anlegen eines Pakets — vgl. Abschnitt 8.2.2<br />

Bereinigen <strong>und</strong> Profilierung des Codes — vgl. Abschnitt 8.3.2<br />

systematische Dokumentation des Codes <strong>und</strong> der Daten<br />

– siehe auch Abschnitte 3.3.4 <strong>und</strong> 8.2.6<br />

– Referenz: Writing R Extensions, Kapitel 2<br />

8.4.4 (b) Einreichen bei CRAN<br />

packen <strong>und</strong> zippen mit tar -cf <strong>und</strong> gzip auf ein File mit<br />

Namen .tar.gz<br />

dabei muss name von der Form sein<br />

_version[_engine[_type]] mit:<br />

– [....] ist optional<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

861


– <strong>und</strong> version sind konsistent mit den<br />

Einträgen in DESCRIPTION File<br />

– engine gibt die S–Implementation an, <strong>für</strong> die das Paket<br />

gedacht ist — per default R<br />

– type gibt an, ob es sich um Quellen oder Binärdateien <strong>für</strong><br />

bestimmte Systeme handelt — siehe Writing R Extensions<br />

– Idee: Nutzbarkeit von S-<strong>Plus</strong>–Code auch <strong>für</strong> R<br />

upload auf CRAN mit ftp auf<br />

ftp://ftp.ci.tuwien.at/incoming<br />

Referenz: Writing R Extensions (2006b, Kapitel 1.5)<br />

formale Voraussetzungen:<br />

– R CMD check muss fehlerfrei laufen — vgl. Abschnitt 8.2.11<br />

– notwendig: License Statement in DESCRIPTION<br />

Feedback von allen möglichen Nutzern, ob das Paket auf<br />

allen möglichen esoterischen Konfigurationen läuft<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

862


Aufgabensammlung zur<br />

Veranstaltung<br />

R/S-<strong>Plus</strong> <strong>für</strong> <strong>Einsteiger</strong><br />

<strong>und</strong> <strong>für</strong> <strong>Fortgeschrittene</strong><br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

863


A Aufgaben<br />

A.1 Blatt 1<br />

Stoff bis einschließlich Abschnitt 1.2.2 — Vektoren, Matrizen,<br />

Arrays<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

864


A.1.1 Arbeit mit R-Skripten am Beispiel eines<br />

beliebigen Editors: (ohne direkte Anbindung<br />

an R)<br />

(a) Erzeugen Sie eine R-Datei.<br />

(b) Laden <strong>und</strong> arbeiten Sie die komplette (gespeicherte) Datei ab.<br />

(c) Laden <strong>und</strong> arbeiten Sie die ersten Befehle ab.<br />

(d) Laden <strong>und</strong> arbeiten Sie einzelne Befehle ab.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.1.1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

865


A.1.2 Auffinden von Datensätzen<br />

(a) Suchen Sie im Internet einen Datensatz, in dem die tägliche<br />

Kursentwicklung von Dollar zu DM/Euro über einen längeren<br />

Zeitraum dargestellt ist.<br />

(b) Suchen Sie im Internet einen Datensatz, in dem Klimadaten<br />

einer Wetterstation in Deutschland dargestellt sind.<br />

(c) Welche Pakete (packages) sind in S-<strong>Plus</strong>/R integriert? Wie<br />

lassen sich diese laden?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.1.2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

866


A.1.3 Datenimport<br />

(a) Welche Funktionen eignen sich zum Einlesen von Daten?<br />

(b) Importieren Sie einen Beispieldatensatz (z.B. Währungs- oder<br />

Klimadaten aus Aufgabe A.1.2).<br />

Lösungsvorschlag:<br />

.pdf-Version: L.1.3<br />

.R-Version (local): Blatt 1, Aufgabe 3(c)<br />

.R-Version (www): Blatt 1, Aufgabe 3(c)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

867


A.1.4 Mustererzeugung<br />

Erzeugen Sie eine Matrix mit 20 Spalten <strong>und</strong> den folgenden<br />

Zeileneinträgen:<br />

Zeile 1: 1, 2, ..., 20<br />

Zeile 2: Zahlen zwischen 0.25 <strong>und</strong> 5 mit Abstand 0.25<br />

Zeile 3: Spalte 1-10 mit Eintrag 1, Spalte 11-20 mit Eintrag 2<br />

Zeile 4: 1, 1, 2, 2, 1, 1, 2, 2, ...<br />

Zeile 5: 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6<br />

Zeile 6: 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3<br />

Lösungsvorschlag:<br />

.pdf-Version: L.1.4<br />

.R-Version: Blatt 1, Aufgabe 4<br />

<br />

.R-Version (www): Blatt 1, Aufgabe 4<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

868


A.2 Blatt 2<br />

Stoff bis einschließlich Abschnitt 1.9 — Datenausgabe<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

869


A.2.1 Indexoperationen, Matrizen<br />

(a) Erzeugen Sie die folgenden Matrizen:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(b) Laden Sie den painters-Datensatz aus des MASS-Pakets.<br />

Finden Sie alle Malernamen, die mindestens 3 mal den<br />

Buchstaben “e” enthalten.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Hinweis: Denken Sie an logische Indexoperationen.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

<br />

<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

870


Lösungsvorschlag:<br />

.pdf-Version: L.2.1<br />

.R-Version: Blatt 2, Aufgabe 1<br />

.R-Version (www): Blatt 2, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

871


A.2.2 Faktoren<br />

(a) Laden Sie den iris-Datensatz. Geben Sie dann <strong>für</strong> die einzelnen<br />

Species jeweils das Minimum <strong>und</strong> das Maximum <strong>für</strong><br />

Sepal.Length <strong>und</strong> Sepal.Width an.<br />

(b) Geben Sie <strong>für</strong> die Art setosa an, welche Werte der Variable<br />

Sepal.Length bzw. Sepal.Width jeweils am häufigsten<br />

angenommen werden.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.2.2<br />

.R-Version: Blatt 2, Aufgabe 2<br />

.R-Version (www): Blatt 2, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

872


A.2.3 String-, Matrixoperationen<br />

Weisen Sie eine der Matrizen aus Aufgabe A.2.1 einem Element mit<br />

Namen Hilbert einer Liste L zu <strong>und</strong> geben Sie deren Eigenwerte in<br />

Form einer Ausgabe vom Typ<br />

Die Eigenwerte der Matrix Hilbert sind 1.00, 2.00, 3.24, ...<br />

Die kursiv geschriebenen Ausdrücke beziehen Sie dabei direkt von L<br />

<strong>und</strong> formatieren Sie die Eigenwerte wie angedeutet.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.2.3<br />

.R-Version: Blatt 2, Aufgabe 3<br />

.R-Version (www): Blatt 2, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

873


A.2.4 Matrixoperationen<br />

(a) Erzeugen Sie die Matrix<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

.<br />

<br />

. <br />

<br />

.<br />

<br />

<br />

<br />

<br />

<br />

.<br />

.<br />

<br />

<br />

.<br />

.<br />

<br />

<br />

.<br />

.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(b) Bestimmen Sie die Determinante <strong>und</strong> Kondition von .<br />

(c) Lösen Sie das lineare Gleichungssystem .<br />

Verhältnis von Betrag des größten zum Betrag des kleinsten Eigenwerts; ist<br />

die Kondition gross, so spricht man von einer schlecht konditionierten Matrix<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

874


Lösungsvorschlag:<br />

.pdf-Version: L.2.4<br />

.R-Version: Blatt 2, Aufgabe 4<br />

.R-Version (www): Blatt 2, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

875


A.2.5 Schreiben von Daten auf File<br />

Schreiben Sie das Ergebnis aus Aufgabe A.2.3 auf 3 Stellen nach<br />

dem Komma formatiert in ein File “erg.txt”.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.2.5<br />

.R-Version: Blatt 2, Aufgabe 5<br />

.R-Version (www): Blatt 2, Aufgabe 5<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

876


A.3 Blatt 3<br />

Stoff bis einschließlich Abschnitt 2.4.7 — getrimmte <strong>und</strong><br />

winsorisierte Mittel<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

877


A.3.1 Skalenniveaus<br />

Klassifizieren Sie die folgenden Merkmale <strong>und</strong> begründen Sie jeweils,<br />

ob Mittelwert, Median <strong>und</strong> Modus <strong>für</strong> diese Merkmale zulässig bzw.<br />

sinnvoll sind<br />

Geschlecht<br />

Schulnoten<br />

Semesteranzahl<br />

Ideale Normalverteilung<br />

Lösungsvorschlag:<br />

.pdf-Version: L.3.1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

878


A.3.2 Univariate Analyse<br />

Beziehen Sie auf der Service–Homepage oder unter<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/rkurs/S<strong>Plus</strong>0203/kredit1.txt<br />

den Datensatz kredit1.txt:<br />

(a) Analysieren Sie separat die Variablen Laufzeit, Zahlungsmoral<br />

<strong>und</strong> Kredithöhe des kredit1 Datensatzes. Beachten Sie dabei<br />

die verschieden Skalenniveaus.<br />

(b) Verwenden Sie boxplot() <strong>und</strong> hist () <strong>für</strong> diejenigen Variablen, <strong>für</strong><br />

die dies möglich/sinnvoll ist.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.3.2<br />

.R-Version: Blatt 3, Aufgabe 2<br />

<br />

.R-Version (www): Blatt 3, Aufgabe 2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

879


A.3.3 Elementare Datenanalyse<br />

Beziehen Sie auf der Service–Homepage oder unter<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/rkurs/S<strong>Plus</strong>0203/baby.txt<br />

den Datensatz baby.txt:<br />

Von Babies wurde die Masse zur Geburt <strong>und</strong> der<br />

Massezuwachs (in % der Geburtsmasse) innerhalb des sten<br />

bis sten Tages nach der Geburt registriert (Daten nach<br />

P. Armitage (1971): The Theory of Linear Models and<br />

Multivariate Analysis. New York: Wiley.). Die Werte liegen<br />

als ASCII–Text vor (incl. Kopfzeilen), <strong>und</strong> wir wissen, daß<br />

es sich um Zeilen mit Spalten handelt.<br />

(a) Lesen Sie die Daten in ein Array / eine Matrix der Dimension<br />

.<br />

(b) Geben Sie ein Histogramm von aus.<br />

(c) Berechnen Sie Mittelwert, Median, Modalwert, Varianz <strong>und</strong><br />

Standardabweichung von , sowie die Korrelation von <strong>und</strong><br />

— alle jeweils auf Basis der empirischen Verteilung.<br />

Interpretieren Sie die Ergebnisse.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

880


(d) Erstellen Sie zu einen Boxplot <strong>und</strong> interpretieren Sie diesen.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.3.3<br />

.R-Version: Blatt 3, Aufgabe 3<br />

.R-Version (www): Blatt 3, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

881


A.3.4 Univariate Konvexkombinationen<br />

(a) Simulieren Sie Realisationen einer univariaten<br />

Zufallsvariable , welche der folgenden Verteilung folgt<br />

¡ ¡ <br />

Interpretieren Sie wie folgt: mit Wahrscheinlichkeit <br />

stammen die Daten aus einer idealen Situation, , <strong>und</strong> mit<br />

Wahrscheinlichkeit handelt es sich um Ausreißer, die aus <br />

stammen.<br />

(b) Analysieren Sie die Stichprobe aus Teil (a) mit Hilfe von<br />

summary() and stem() <strong>und</strong> interpretieren Sie die Resultate.<br />

(c) Erzeugen Sie einen Boxplot der Stichprobe aus Teil (a) <strong>und</strong><br />

interpretieren Sie diesen.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

882


Lösungsvorschlag:<br />

.pdf-Version: L.3.4<br />

.R-Version: Blatt 3, Aufgabe 4<br />

.R-Version (www): Blatt 3, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

883


A.3.5 Übungsaufgaben zur Stochastik<br />

(a) Berechnen Sie die Zahl an Personen in einem Raum, ab der<br />

die Wahrscheinlichkeit größer ist als , dass mindestens zwei<br />

Personen am gleichen Tag Geburtstag haben — denken Sie an<br />

qbinom.<br />

(b) Sie wollen feststellen, wieviele Reiskörner () in einem großen<br />

Gefäß sind. Dazu entnehmen Sie dem Gefäß eine Handvoll Reis,<br />

zählen dort die Körner (ergibt ), färben Sie rot <strong>und</strong><br />

geben Sie wieder in das Gefäß. Anschließend schütteln Sie das<br />

Gefäß kräftig <strong>und</strong> ziehen wieder eine Handvoll Reis, zählen die<br />

Körner — — <strong>und</strong> stellen fest, wieviele davon rot sind<br />

— . Geben Sie ein an, so dass die Wahrscheinlichkeit,<br />

dass ist, kleiner ist als — denken Sie an dhyper.<br />

(c) Sie waschen Paar schwarze Socken. Diese sind auf den<br />

ersten Blick nicht zu unterscheiden, bei genauerer Untersuchung<br />

aber schon. Daher ziehen Sie “blind” ohne Zurücklegen aus der<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

884


Trommel. Ab wieviel (einzelnen) Socken ist die<br />

Wahrscheinlichkeit größer als , dass Sie mindestens ein Paar<br />

beisammen haben?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.3.5<br />

.R-Version: Blatt 3, Aufgabe 5<br />

.R-Version (www): Blatt 3, Aufgabe 5<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

885


A.4 Blatt 4<br />

Stoff bis einschließlich Abschnitt 2.9.3 — Bootstrap<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

886


A.4.1 Visualisierung des (schwachen) Gesetzes der<br />

großen Zahlen<br />

(a) Erzeugen Sie <strong>für</strong> <strong>und</strong> <br />

(Pseudo–)–<br />

Zufallsgrößen , , mit<br />

<strong>für</strong> , <strong>und</strong> daraus die abgeleitete<br />

Größen . Welche Interpretation besitzen die ?<br />

(b) Berechnen Sie die im Gesetz der großen Zahlen auftauchenden<br />

Größen <br />

<br />

. Warum berechnen wir hier <br />

verschiedene Werte ?<br />

(c) Erzeugen Sie <strong>für</strong> die verschiedenen jeweils ein Histogramm<br />

<strong>und</strong> eine (empirische) Verteilungsfunktion der . Zur<br />

komprimierten Visualisierung können Sie auch Boxplots<br />

verwenden.<br />

<br />

(d) Berechnen Sie die (empirische) Varianz der in<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

887


Abhängigkeit von ,<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

In welcher Rate schrumpft die Varianz — <strong>und</strong> damit in welcher<br />

Rate die “Genauigkeit” in Termen der Standardabweichung?<br />

Können Sie sogar den Vorfaktor der Rate erkennen? Wie müsste<br />

er theoretisch heißen?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.4.1<br />

.R-Version: Blatt 4, Aufgabe 1<br />

.R-Version (www): Blatt 4, Aufgabe 1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

888


A.4.2 Numerische Integration: Berechnung von <br />

Betrachten Sie den Kreis<br />

<br />

<strong>und</strong> das Einheitsquadrat<br />

<br />

(a) Generieren Sie Realisationen einer Zufallsvariable ,<br />

welche uniform auf ¢ verteilt ist.<br />

(b) Berechnen Sie das Verhältnis aus Punkten im Kreis zur<br />

Gesamtzahl der gezogen Punkte. Warum schätzt dies das<br />

Verhältnis von der Fläche des Kreises zur Fläche des Quadrates?<br />

Wie läßt sich damit ein Näherungswert <strong>für</strong> angeben?<br />

(c) Wie groß ist zu wählen, um mit einer Wahrscheinlichkeit<br />

von 95% mit einem Fehler zu schätzen.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

889


weitere, nicht stochastische <strong>und</strong> in dieser Situation wesentlich besser geeignete Verfahren<br />

zur Berechnung von siehe auch http://www.jjj.de/hfloat/hfloatpage.html<br />

Lösungsvorschlag:<br />

.pdf-Version: L.4.2<br />

.R-Version: Blatt 4, Aufgabe 2<br />

.R-Version (www): Blatt 4, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

890


A.4.3 Berechnung von (a) Sei . Berechnen Sie analytisch.<br />

(b) Berechnen Sie in R als Mittelwert von verteilten<br />

Variablen. Schätzen Sie die Varianz Ihrer Näherung, indem Sie<br />

diesen Versuch mal wiederholen — keine<br />

for–Schleife, bitte. Können Sie die Varianz analytisch angeben?<br />

(c) Sie kennen die Dichte von — in R ist sie als dchisq()<br />

implementiert. Wählen Sie geschickt einen Abschneidepunkt ,<br />

<strong>und</strong> berechnen Sie in R als Mittelwert von Werten ,<br />

. Schätzen Sie auch hier die Varianz Ihrer<br />

Näherung, indem Sie diesen Versuch mal<br />

wiederholen.<br />

(d) Verwenden Sie in (c) jeweils auch die Werte als<br />

Ausgangswerte ( antithetische Variablen). Wie stark reduziert<br />

sich die Varianz Ihrer Näherung? Um fair zu bleiben, dürfen Sie<br />

nur je Werte <strong>und</strong> verwenden.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

891


(e) Sie wissen , . Berechnen Sie in R<br />

als Mittelwert von Werten , . Können Sie<br />

hier einen Unterschied zu dem Ergebnis aus (a) feststellen?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.4.3<br />

.R-Version: Blatt 4, Aufgabe 3<br />

.R-Version (www): Blatt 4, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

892


A.4.4 Konfidenzintervalle, Bootstrap<br />

(a) Erzeugen Sie eine Stichprobe von 21 u.i.v. N(0,1) verteilten<br />

Zufallsvariablen <strong>und</strong> berechnen Sie deren (emprischen)<br />

Median . Geben Sie mit Hilfe der in der Vorlesung in<br />

Abschnitt 2.8.3 vorgestellten Formel die asymptotische<br />

Verteilung des Medians an, d.h. gehen Sie vor wie in Lösung 1 in<br />

Abschnitt 2.8.3. Wie lautet also die Streuung von , die<br />

sich aus der asymptotischen Normalität ergibt?<br />

Bemerkung: Sie erhalten mit <strong>für</strong><br />

ein sogenanntes 95% Konfidenzintervall, d.h. ein<br />

(zufälliges)Intervall , das den wahren Median mit <br />

Wahrscheinlichkeit überdeckt.<br />

(b) Simulieren Sie nun 10000 Stichproben von 21 u.i.v. N(0,1)<br />

verteilten Zufallsvariablen <strong>und</strong> bestimmen Sie den empirischen<br />

Median, die empirische Streuung <strong>und</strong> geben Sie damit ein<br />

(empirisches) 95% Konfidenzintervall <strong>für</strong> den Median an.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

893


(c) Nehmen Sie die Stichprobe aus Teil (a) <strong>und</strong> erzeugen Sie hieraus<br />

1000 Bootstrap-Stichproben der Länge 21. Bestimmen Sie dann<br />

den gebootstrapten Median, die gebootstrapte Streuung des<br />

Median <strong>und</strong> berechnen Sie damit das zugehörige 95%<br />

Bootstrap-Konfidenzintervall <strong>für</strong> den Median.<br />

<br />

Erweiterung: Um die Genauigkeit des Ergebnisses <strong>für</strong> das<br />

Bootstrap zu erhöhen, erzeugen Sie 25 Stichproben von 21 u.i.v.<br />

N(0,1) verteilten Zufallsvariablen <strong>und</strong> führen <strong>für</strong> jede dieser<br />

Stichproben das Bootstrap-Verfahren durch. Mitteln Sie die<br />

Ergebnisse <strong>für</strong> den Median <strong>und</strong> die Grenzen der<br />

Konfidenzintervalle.<br />

(d) Vergleichen Sie die Ergebnisse aus den Teilaufgaben!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

894


Lösungsvorschlag:<br />

.pdf-Version: L.4.4<br />

.R-Version: Blatt 4, Aufgabe 4<br />

.R-Version (www): Blatt 4, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

895


A.5 Blatt 5<br />

Stoff bis einschließlich Abschnitt 3.6 — Rekursionen <strong>und</strong> Frames<br />

Abschnitt 3.4 (Debugging) wird in Aufgabe A.9.2 aufgegriffen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

896


A.5.1 Maximale Lücke<br />

Motivation: Die in der Numerik vorgestellten, deterministischen Methoden, um<br />

Integrale der Form <br />

numerisch zu berechnen, sind <strong>für</strong> niedrige<br />

Dimensionen der stochastischen Monte Carlo Integration weit überlegen. Gr<strong>und</strong><br />

da<strong>für</strong> ist die Eigenschaft stochastisch gezogener Stützstellen, sich in niedrigen<br />

Dimensionen zu “verklumpen”. Diesen Effekt mathematisch in den Griff zu<br />

bekommen ist nicht trivial; auf Simulationsbasis lässt er sich aber recht einfach<br />

untersuchen: Man betrachtet dabei die Verteilung der größten Lücke einer<br />

Stichprobe — hier im zweidimensionalen: <br />

mit ¡ dem Euklidischen Abstand im .<br />

Generieren Sie Stichproben der Länge , wobei<br />

die Realisationen einer 2-dimensionalen Zufallsvariable seien,<br />

welche uniform auf <br />

<br />

verteilt ist, d.h. ¡ .<br />

Betrachten Sie die Fälle <strong>und</strong> . Berechnen Sie dann<br />

<strong>für</strong> jede der Stichproben , wobei ¡ der<br />

Euklidische Abstand im ist. Betrachten Sie das “Summary” der<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

897


Minima <strong>und</strong> stellen Sie die Minima mit Hilfe von Boxplots <strong>und</strong><br />

Histogrammen graphisch dar. Interpretieren Sie die Ergebnisse!<br />

Lösungsvorschlag:<br />

.pdf-Version: L.5.1<br />

.R-Version: Blatt 5, Aufgabe 1<br />

.R-Version (www): Blatt 5, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

898


A.5.2 Buffons Nadelproblem — Berechnung von<br />

II<br />

(a) Geben Sie dazu im Quadrat vor — erste<br />

Streifengrenze bei — <strong>und</strong> ziehen Sie in uniform den<br />

Mittelpunkt einer jeden Nadel. Der Winkel der Nadel zur<br />

–Achse sei ebenfalls gleichverteilt auf . Legen Sie die –<br />

<strong>und</strong> –Koordinaten der beiden Endpunkte der Nadeln in<br />

Variablen xl, xr, yl, yr ab.<br />

(b) Finden Sie heraus, wie man analytisch anhand der Werte xl, xr,<br />

yl, yr <strong>und</strong> der Koordinaten der Streifengrenzen bestimmen<br />

kann, ob es zum Schnitt einer Nadel mit einer Streifengrenze<br />

kommt.<br />

Hinweis: Um for–Schleifen zu vermeiden bilden Sie eine Matrix in<br />

Dimensionen ¢ , die Zahl der Nadeln <strong>und</strong> die Zahl der<br />

<br />

Streifengrenzen, deren Eintrag gerade die –Koordinate des –ten<br />

Streifengrenzes ist. Betrachten Sie die Vorzeichen von <strong>und</strong> .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

899


(c) Berechnen Sie einen Indikator (Vektor mit Werten oder T,<br />

F), der anzeigt, ob Nadel einen Schnitt mit den<br />

Streifengrenzen hat oder nicht.<br />

(d) Berechnen Sie hieraus eine Schätzung <strong>für</strong> ; wie ist <br />

verteilt? Berechnen Sie in R zu vorgegebenen , ,<br />

, die Wahrscheinlichkeit .<br />

Finden Sie das minimale , so dass mit diese<br />

Wahrscheinlichkeit größer ist als .<br />

(e) Plotten Sie die Nadeln <strong>und</strong> die Streifen. Verwenden Sie dabei die<br />

Datei buffon.r auf der Service–Page als Hilfe–Stellung /<br />

Anregung.<br />

(f) Vergleichen Sie die Genauigkeit mit der der Methode aus<br />

Aufgabe A.4.2.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

900


Lösungsvorschlag:<br />

.pdf-Version: L.5.2<br />

.R-Version: Blatt 5, Aufgabe 2<br />

.R-Version (www): Blatt 5, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

901


A.5.3 Dichteplot<br />

(a) Schreiben Sie eine Funktion, welche als Übergabeparameter den<br />

Namen einer beliebigen Verteilungsklasse (z.B. norm, chisq, ...)<br />

<strong>und</strong> die <strong>für</strong> die Verteilungsklasse benötigten Parameter (z.B.<br />

mean, sd, df, ...) erhält. Zusätzlich werde eine Variable<br />

übergeben, die angibt, ob die Verteilung diskret oder stetig ist.<br />

Die Funktion gebe als Ergebnis das 1-te, 2-te (Median) <strong>und</strong> 3-te<br />

Quartil der jeweiligen Verteilung zurück <strong>und</strong> plote die Dichte<br />

(stetige Verteilung) bzw. Wahrscheinlichkeitsfunktion (diskrete<br />

Verteilung) im Bereich vom 5% bis zum 95%-Quantil. Dabei<br />

werde <strong>für</strong> stetige Verteilungen ein Linienplot <strong>und</strong> <strong>für</strong> diskrete<br />

Verteilungen ein ”step-plot“ erzeugt.<br />

Hinweis: Auf der Service–Seite findet sich in der Datei dichte.r Funktion<br />

dichte (), die ähnliches leistet.<br />

(b) Erzeugen Sie mit Hilfe der Funktion prompt() eine Hilfedatei zu<br />

Ihrer Funktion aus Teil (a).<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

902


Lösungsvorschlag:<br />

.pdf-Version: L.5.3<br />

.R-Version: Blatt 5, Aufgabe 3<br />

.R-Version (www): Blatt 5, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

903


A.5.4 Schleifen – Schleifenvermeidung –<br />

Laufzeitvergleich<br />

(a) Gegeben seien zwei Vektoren a <strong>und</strong> b, wobei a sehr viel größere<br />

Dimension besitze als b. Berechnen Sie hieraus einen Vektor s,<br />

der als Einträge s[i] die Anzahl der Einträge von a mit a[j]


Parameter lambda=8 <strong>und</strong> ein Vektor von Realisationen<br />

einer poisson-verteilten Zufallsvariable mit Parameter lambda=12<br />

sei. Lassen Sie mit jedem der Verfahren berechnen <strong>und</strong><br />

vergleichen Sie dabei mit Hilfe der Funktion system.time() die<br />

jeweiligen Rechenzeiten.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.5.4<br />

.R-Version: Blatt 5, Aufgabe 4<br />

.R-Version (www): Blatt 5, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

905


A.5.5 Adaptives Verfahren zur zweidimensionalen<br />

numerischen Integration<br />

Gegeben sei eine Funktion . Es soll eine numerische<br />

Näherung <strong>für</strong> <br />

berechnet werden.<br />

<br />

(a) Schreiben Sie eine Funktion, die dies adaptive (per Rekursion)<br />

erledigt. Gehen Sie dabei wie folgt vor:<br />

<br />

(1) Ziehen Sie Punkte aus ¢ <strong>und</strong><br />

werten Sie die Funktion an diesen Punkten aus.<br />

Wiederholen Sie dies 2 Mal, bilden Sie jeweils die Mittelwerte<br />

der Funktionswerte <strong>und</strong> multiplizieren diese mit der Fläche<br />

des Rechtecks, d.h. mit .<br />

(2) Ist die Abweichung größer als der vorgegebende Fehler, so<br />

splitten Sie auf in <strong>und</strong> mit <br />

<br />

<br />

<br />

<strong>und</strong> wiederholen Schritt (1) <strong>für</strong> die beiden “Teil-Vierecke”<br />

(ohne jedoch den Fehler zu halbieren)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

906


(3) Ist die Abweichung in einem der beiden neuen<br />

“Teil-Vierecke” (bzw. in beiden) erneut größer als der<br />

vorgegebene Fehler, so splitten Sie dieses Mal in -Richtung<br />

auf, d.h. wird ersetzt durch <strong>und</strong> mit<br />

<br />

<strong>und</strong> wiederholen Schritt (1) <strong>für</strong> die entstandenen<br />

“Teil-Vierecke” (ohne jedoch den Fehler zu halbieren).<br />

(4) Schreiben Sie eine Funktion, die (1)-(3) durchführt <strong>und</strong><br />

rufen Sie die Funktion mit recall () rekursiv auf bis <strong>für</strong> jedes<br />

der “Teil-Vierecke” der vorgegebene Fehler unterschritten<br />

wird bzw. die maximale Rekursionstiefe erreicht ist. Führen<br />

Sie zusätzlich einen Zähler mit, der Ihnen die Anzahl der<br />

Verdoppelungen protokolliert <strong>und</strong> der Ihnen angibt, ob die<br />

-Seiten (Zähler ungerade) oder die y-Seiten (Zähler gerade)<br />

der Vierecke zu halbieren sind.<br />

Hinweis: Orientieren Sie sich an der Funktion area() aus<br />

Beispiel 3.6-2 der Vorlesung.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

907


(b) Betrachten Sie <strong>für</strong> die -Funktion von<br />

, d.h. die Funktion<br />

<br />

¡ ¡ <br />

Berechnen Sie das Integral mit Hilfe Ihrer<br />

Funktion aus Teil (a) <strong>und</strong> protokollieren Sie die<br />

Auswertungsstellen. Geben Sie hierzu als maximale<br />

Rekursionstiefe <strong>und</strong> als Fehler vor.<br />

Hinweis: Ziehen Sie hierzu Beispiel 3.6-5 aus der Vorlesung<br />

heran. Zum Vergleich: Der exakte Wert dieses Integrals ist: <br />

.<br />

(c) Plotten Sie die Auswertungsstellen.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

908


Lösungsvorschlag:<br />

.pdf-Version: L.5.5<br />

.R-Version: Blatt 5, Aufgabe 5<br />

.R-Version (www): Blatt 5, Aufgabe 5<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

909


A.6 Blatt 6<br />

Stoff bis einschließlich Abschnitt 4.7.2 — Export von Graphik<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

910


A.6.1 Visualisierung<br />

(a) Visualisieren Sie Aufgabe A.4.2 — plotten Sie Kreis <strong>und</strong><br />

Quadrat <strong>und</strong> färben Sie die Punkte je nachdem, ob sie im Kreis<br />

liegen oder nicht in rot oder grün.<br />

(b) Visualisieren Sie eine Stichprobe aus Aufgabe A.5.1 — zeichnen<br />

sie die minimale Lücke als grüne Linie ein.<br />

(c) Plotten Sie Realisationen (Pfade) eines<br />

zweidimensionalen Random Walks der Länge , d.h. <br />

Folgen der Zufallsvariablen , ,<br />

, <br />

, ¦, <br />

jeweils mit Wahrscheinlichkeit . Färben Sie die Pfade rot ein,<br />

bei denen mindestens aufeinanderfolgende Zeitpunkte in einem<br />

Quadranten liegen.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

911


Lösungsvorschlag:<br />

.pdf-Version: L.6.1<br />

.R-Version: Blatt 6, Aufgabe 1<br />

.R-Version (www): Blatt 6, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

912


A.6.2 B<strong>und</strong>estagswahl 2002<br />

(a) Beziehen Sie von der Homepage des statistischen B<strong>und</strong>esamts<br />

die Wahlergebnisse (absolute Stimmenzahlen) der<br />

B<strong>und</strong>estagswahl 2002 <strong>und</strong> teilen Sie die Ergebnisse auf in<br />

CDU/CSU, SPD, Grüne, FDP, PDS, “Sonstige” <strong>und</strong><br />

Nichtwähler. Beschränken Sie sich dabei auf 5 B<strong>und</strong>esländer<br />

Ihrer Wahl. Erzeugen Sie einen Dataframe, wobei Sie die<br />

Spalten den B<strong>und</strong>esländern <strong>und</strong> die Zeilen den verschiedenen<br />

Gruppen (Parteien) zuordnen.<br />

Link: http://www.b<strong>und</strong>eswahlleiter.de<br />

(b) Generieren Sie mit Hilfe von matplot() <strong>und</strong> barplot () graphische<br />

Darstellungen der Ergebnisse. Im Fall von matplot() soll jede<br />

Kurve dem Wahlergebnis einer Gruppe (Partei) entsprechen,<br />

wobei Sie <strong>für</strong> jede Gruppe (Partei) eine andere Farbe verwenden.<br />

Im Fall von barplot () soll jede Säule einem B<strong>und</strong>esland<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

913


entsprechen, wobei Sie die Gruppen (Parteien) einmal mit<br />

Schraffierungen <strong>und</strong> einmal mit Farben unterscheiden.<br />

(c) Stellen Sie die drei Plots zusammen auf einer Seite dar von der<br />

Form:<br />

<br />

Plot1<br />

Plot2 Plot3<br />

Hinweis: Gehen Sie vor wie in Abschnitt 4.2.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.6.2<br />

.R-Version: Blatt 6, Aufgabe 2<br />

.R-Version (www): Blatt 6, Aufgabe 2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

914


A.6.3 Multivariate Konvexkombination<br />

(a) Erzeugen Sie Realisationen von Paaren <br />

unabhängig identisch verteilter Normalverteilungen .<br />

Erzeugen Sie <strong>für</strong> jede Realisation hieraus Realisationen der<br />

Zufallsvariablen , welche die folgende Verteilung besitzt:<br />

¡ ¡ <br />

mit <strong>und</strong> , wobei , ,<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Protokollieren Sie dabei mit, welche Realisationen aus der<br />

kontaminierenden Verteilung stammen.<br />

<br />

<br />

<br />

<br />

<br />

Hinweis: Vergleiche Aufgabe A.3.3 bzw. das entsprechende R-File.<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

915


(b) Erzeugen Sie eine ellipsenförmige ( )-Konfidenzregion <strong>für</strong><br />

die ideale Verteilung . Gehen Sie wie folgt vor:<br />

Berechnen Sie die Singulärwertzerlegung (svd()) von in<br />

die Matrizen , , , wobei eine Diagonalmatrix ist <strong>und</strong> in<br />

nur die Diagonalelemente abgelegt sind.<br />

Bestimmen Sie dann <strong>für</strong> ein -Gitter, , die Werte<br />

von <strong>und</strong> , wobei<br />

qnorm <strong>und</strong> die Diagonalelemente von <br />

sind. Wählen Sie .<br />

Multiplizieren Sie (Matrixmultiplikation) die Matrix mit der<br />

Matrix, die als Zeilen <strong>und</strong> enthält <strong>und</strong> plotten Sie die<br />

Zeilen der Ergebnismatrix gegeneinander.<br />

(c) Ergänzen Sie den Plot nun um die in Teil (a) generierten Daten.<br />

Dabei zeichnen Sie die Punkte aus der kontaminierenden<br />

Verteilung rot, falls sie innerhalb der Ellipse liegen <strong>und</strong> orange,<br />

falls sie außerhalb liegen. Die Punkte aus der idealen Verteilung<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

916


zeichnen Sie grün, falls Sie innerhalb der Ellipse liegen <strong>und</strong> blau,<br />

falls sie außerhalb liegen. Für die Fallunterscheidungen<br />

multiplizieren Sie Ihre Beobachtungen mit , d.h.<br />

£ <strong>und</strong> kontrollieren, ob<br />

Lösungsvorschlag:<br />

.pdf-Version: L.6.3<br />

<br />

<br />

<br />

<br />

<br />

.R-Version: Blatt 6, Aufgabe 3<br />

<br />

<br />

<br />

<br />

.R-Version (www): Blatt 6, Aufgabe 3<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

917


A.6.4 Regressionsplots<br />

(a) Erzeugen Sie Realisationen einer Zufallsvariable mit<br />

Verteilung <strong>und</strong> addieren Sie zu dieser das -fache<br />

des Vektor <strong>und</strong> die Konstante<br />

, d.h. .<br />

(b) Wenden Sie auf aus Teil (a) die Exponentialfunktion exp() an<br />

<strong>und</strong> plotten Sie die Punkte . Fügen Sie dem<br />

Plot die Kurve hinzu.<br />

(c) Erzeugen Sie einen zweiten Plot von , wobei Sie dieses Mal<br />

die -Achse logarithmisch transformieren. Beschriften Sie die<br />

-Achse sowohl mit den Werten von als auch mit<br />

den Werten von . Ergänzen Sie abschließend den Plot noch um<br />

die Kurve .<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

918


Lösungsvorschlag:<br />

.pdf-Version: L.6.4<br />

.R-Version: Blatt 6, Aufgabe 4<br />

.R-Version (www): Blatt 6, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

919


A.6.5 Powerpoint-Präsentation<br />

Bereiten Sie einen der Plots aus den Aufgaben A.6.1-A.6.4 <strong>für</strong> eine<br />

Powerpoint-Präsentation vor. Ergänzen Sie den Plot vorher, d.h. falls<br />

noch nicht geschehen, um eine passende Überschrift, Untertitel <strong>und</strong><br />

Legende.<br />

Hinweis: Gehen Sie vor wie in Abschnitt 4.7.2<br />

Lösungsvorschlag:<br />

.pdf-Version: L.6.5<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

920


A.7 Blatt 7<br />

Stoff bis einschließlich Abschnitt 5.1 — Testtheorie<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

921


A.7.1 Shapiro-Wilk, Kolmogorov-Smirnov,<br />

-Anpassungstest<br />

Testen Sie mit Hilfe von Shapiro-Wilk, Kolmogorov–(Smirnov) <strong>und</strong><br />

-Anpassungs-Test, ob die Nullhypothese, dass die Daten im<br />

normal Datensatz auf der Service–Homepage -verteilt sind,<br />

bei einem Signifikanzniveau von 10% abgelehnt werden muss.<br />

Erstellen Sie zusätzlich einen qq–Plot der Daten.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.7.1<br />

.R-Version: Blatt 7, Aufgabe 1<br />

.R-Version (www): Blatt 7, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

922


A.7.2 Wilcoxon <strong>und</strong> t-Test, - <strong>und</strong> F-Test<br />

(a) Auf der Service–Homepage finden Sie den Datensatz uscomp.<br />

Testen Sie mit Hilfe des Wilcoxon <strong>und</strong> des t-Tests, ob die<br />

Nullhypothese, dass die Mittelwerte der Sektoren Energie <strong>und</strong><br />

Finanzen <strong>für</strong> die Variable X6 gleich groß sind, bei einem<br />

Signifikanzniveau von 10% abgelehnt werden muss. Wie groß<br />

sind die jeweiligen p-Werte?<br />

(b) Testen Sie mit Hilfe des -Tests, ob die Nullhypothese, dass die<br />

Varianz des Sektors Energie <strong>für</strong> die Variable X6 den Wert 100<br />

hat, bei einem Signifikanzniveau von 10% abgelehnt werden<br />

muss.<br />

(c) Testen Sie mit Hilfe des F-Tests, ob die Nullhypothese, dass die<br />

Varianzen der Sektoren Energie <strong>und</strong> Finanzen <strong>für</strong> die Variable<br />

X6 gleich groß sind, bei einem Signifikanzniveau von 10%<br />

abgelehnt werden muss. Welchen p-Wert erhalten Sie?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

923


Lösungsvorschlag:<br />

.pdf-Version: L.7.2<br />

.R-Version: Blatt 7, Aufgabe 2<br />

.R-Version (www): Blatt 7, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

924


A.7.3 Fisher- <strong>und</strong> t-Test<br />

(a) Ermitteln Sie im kredit1 Datensatz aus Aufgabe A.3.2 den<br />

Anteil der Arbeitslosen in der Gruppe der “Kreditwürdigen” bzw.<br />

der “Kreditunwürdigen”.<br />

(b) Testen Sie mit Hilfe des exakten Fishertests, der asymptotischen<br />

Variante des exakten Fishertests <strong>und</strong> des t-Tests, ob die<br />

Nullhypothese, dass der Anteil in beiden Gruppen gleich gross<br />

ist, bei einem Signifikanzniveau von 10% abgelehnt werden<br />

muss. Wie gross sind die p-Werte bei den letzten beiden Tests?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.7.3<br />

.R-Version: Blatt 7, Aufgabe 3<br />

.R-Version (www): Blatt 7, Aufgabe 3<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

925


A.7.4 Testvergleich durch Simulation<br />

<br />

Seien . Wir wollen testen, ob <br />

oder zutrifft. Als Test verwenden wir einmal den<br />

Neyman–Pearson–Test (NPT) <strong>und</strong> andererseits einen Test, basierend<br />

auf der Zahl der Beobachtungen, so dass ist — ein<br />

Vorzeichentest (VZT) also.<br />

(a) (freiwillig) Bestimmen Sie den NPT zum Niveau .<br />

Lösung (NPT): <br />

mit qnorm(0.95,sd=1/sqrt(10))<br />

Geben Sie die Verteilung von , der Zahl der positiven Beobachtungen, unter <br />

<strong>und</strong> unter an. Bestimmen Sie einen VZT (mit <strong>und</strong> ohne Randomisierung) zum<br />

Niveau <strong>für</strong> Beobachtungen zum Niveau .<br />

Lösungen (VZT):<br />

unrandomisiert: <br />

randomisiert: £ , wobei<br />

unabhängig von mit<br />

pbinom(8,10,0.5) dbinom(8,10,0.5)<br />

Berechnen Sie die Macht des VZT <strong>und</strong> vergleichen Sie diese mit der des NPT.<br />

Sie haben die (unabh.) Beobachtungen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

926


gemacht. Treffen Sie eine Testentscheidung mit dem NPT <strong>und</strong> dem VZT zum<br />

Niveau <strong>und</strong> geben Sie dazu auch den p–Wert an. Nun ersetzen Sie die erste<br />

Beobachtung durch . Ändert sich Ihre Entscheidung? Welcher der beiden<br />

Tests reagiert sensibler auf diesen “Ausreißer”. Argumentieren Sie, warum dem so<br />

ist.<br />

(b) Simulieren Sie mal Stichproben der Länge jeweils<br />

unter unter .<br />

(c) Treffen Sie <strong>für</strong> jede Stichprobe die Testentscheidung mit dem<br />

VZT <strong>und</strong> dem NPT <strong>und</strong> berechnen Sie jeweils (empirisch) den<br />

Fehler 1. <strong>und</strong> 2. Art.<br />

(d) Nun simulieren Sie wie folgt Ausreißer–behaftete Stichproben:<br />

Zu jeder Variablen , , , <br />

( resp. ) erzeugen Sie die Variable<br />

¡ mit<br />

<br />

<strong>und</strong> unabhängig zu den .<br />

(eingerahmt in der freiwilligen Teilaufgabe)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

927


(e) Führen Sie wieder <strong>für</strong> jede der Stichproben den VZT <strong>und</strong> den<br />

NPT durch <strong>und</strong> berechnen Sie jeweils (empirisch) den Fehler 1.<br />

<strong>und</strong> 2. Art. Halten die Tests auch unter den kontaminierten<br />

Stichproben das Niveau ein? Was passiert mit der Macht?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.7.4<br />

.R-Version: Blatt 7, Aufgabe 4<br />

.R-Version (www): Blatt 7, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

928


A.8 Blatt 8<br />

Stoff bis einschließlich Abschnitt 5.2.3<br />

ML–Schätzung mit numerischen Methoden wird noch einmal in<br />

Aufgabe A.9.2 aufgegriffen<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

929


A.8.1 Indiskrete Umfrage<br />

In einer Umfrage soll das Treueverhalten von Ehegatten erfragt<br />

werden. Damit weder der Interviewer noch sonst jemand<br />

identifizieren kann, welche Antwort der Befragte gegeben hat, geht<br />

man so vor: Der Interviewer lässt den Befragten zweimal eine Münze<br />

werfen, wobei der Interviewer die Resultate <strong>und</strong> nicht sieht.<br />

Ist “Kopf”, so beantwortet der Befragte die indiskrete Frage,<br />

ist “Zahl”, so gibt er das Resultat des zweiten Münzwurfs an<br />

— “Kopf” “ja”, “Zahl” “nein”. Insgesamt werden<br />

Männer befragt. Es antworten mit “ja” auf die<br />

Frage “Sind sie untreu?”. Geben Sie eine ML–Schätzung <strong>für</strong> den<br />

Anteil der untreuen Männer, sowie ein (auf der Normalapproximation<br />

beruhendes) –Konfidenzintervall da<strong>für</strong> an.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

930


Lösungsvorschlag:<br />

.pdf-Version: L.8.1<br />

.R-Version: Blatt 8, Aufgabe 1<br />

.R-Version (www): Blatt 8, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

931


A.8.2 ML–Schätzer <strong>für</strong> aus <br />

Berechnen Sie den ML–Schätzer <strong>für</strong> den Parameter einer<br />

Hypergeometrischen Verteilung . Bei <br />

unabhängigen Ziehungen aus mit <strong>und</strong><br />

wurden Realisationen gezogen, d.h. nach<br />

jeder Ziehung von Kugeln wird ermittelt, <strong>und</strong> anschließend<br />

werden die Kugeln wieder in die Urne gegeben. Bestimmen Sie den<br />

ML–Schätzer , indem Sie die Likelihood numerisch<br />

optimieren.<br />

Gesamtzahl der Kugeln in der Urne, Zahl der weißen Kugeln in der<br />

Urne, Zahl der Ziehungen ohne Zurücklegen, <strong>und</strong> die Zufallsgröße ist die<br />

Zahl der gezogenen weißen Kugeln<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

932


Lösungsvorschlag:<br />

.pdf-Version: L.8.2<br />

.R-Version: Blatt 8, Aufgabe 2<br />

.R-Version (www): Blatt 8, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

933


A.8.3 Simulationsstudie<br />

(a) Schreiben Sie mit Hilfe der Funktion uniroot() eine Funktion, die<br />

aus einem Vektor X beliebiger Länge den M–Schätzer zur<br />

–Funktion ermittelt.<br />

(b) Simulieren Sie ideal verteilte Stichproben<br />

<br />

der Längen — ,<br />

, sowie entsprechend kontaminiert verteilte<br />

Stichproben <br />

<br />

(c) Berechnen Sie <strong>für</strong> jede der idealen <strong>und</strong> kontaminierten<br />

Stichproben das arithmetische Mittel <br />

, den Median<br />

<br />

<strong>und</strong> den M–Schätzer <br />

<br />

.<br />

(d) Fertigen Sie jeweils <strong>für</strong> fixiert gemeinsame Boxplots der drei<br />

Schätzer jeweils in der idealen <strong>und</strong> in der kontaminierten<br />

Situation an, sowie zur besseren Unterscheidung bei<br />

Kontamination einen mit Median <strong>und</strong> M–Schätzer. Insgesamt<br />

also ( ¢ ) Plots in ein Graphikfenster.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

934


(e) Schätzen Sie die Varianzen <strong>und</strong> mittleren quadratischen Fehler<br />

(MSE) der Schätzer in der idealen <strong>und</strong> in der kontaminierten<br />

Situation durch die Stichprobenvarianz bzw. den<br />

Stichproben–MSE.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.8.3<br />

.R-Version: Blatt 8, Aufgabe 3<br />

.R-Version (www): Blatt 8, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

935


A.9 Blatt 9<br />

Stoff bis einschließlich Abschnitt 6.6 — sich selbst verändernde<br />

Programme<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

936


A.9.1 Berechnung eines Quantils<br />

Gegeben sei die Funktion pnorm(x) (die Verteilungsfunktion<br />

der Standard-Normalverteilung ). Berechnen Sie so, dass<br />

, d.h. ist das 95%-Quantil von (zur<br />

Kontrolle: qnorm(0.95)). Verwenden Sie hierzu folgende Verfahren:<br />

(a) Bisektionsverfahren<br />

(b) Newton-Verfahren<br />

Hinweis: Der -te Iterationsschritt im Newton-Verfahren lautet<br />

wobei dnorm(x).<br />

<br />

<br />

(c) Numerische Invertierung der Funktion <br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

937


Lösungsvorschlag:<br />

.pdf-Version: L.9.1<br />

.R-Version: Blatt 9, Aufgabe 1<br />

.R-Version (www): Blatt 9, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

938


A.9.2 Schätzung eines eindimensionalen<br />

Parameters<br />

Die Daten im truncpois Datensatz sind Realisationen einer an der<br />

Null abgeschnittenen Poisson-Variable , d.h. einer Zufallsvariable<br />

mit Wahrscheinlichkeitsfunktion<br />

<strong>und</strong> Erwartungswert<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(a) (freiwillig) Leiten Sie die Bestimmungsgleichung <strong>für</strong> den<br />

Maximum-Likelihood-Schätzer in dieser Situation her — einmal als<br />

Maximierungsproblem, einmal als Nullstellenproblem.<br />

Kontrolle:<br />

Maximierungsproblem:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

!<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

939


Nullstellenproblem:<br />

<br />

<br />

mit dem arithmetischen Mittel der Realisationen von <br />

(b) Schreiben Sie eine Funktion, welche <strong>für</strong> eine gegebene<br />

Stichprobe den Maximum-Likelihood-Schätzer als<br />

Maximierungsproblem mit einer vorgegebenen Genauigkeit<br />

numerisch ermittelt; verwenden Sie einmal eine selbst<br />

geschriebene Gittersuche, einmal optim() oder optimize().<br />

(c) Schreiben Sie eine Funktion, welche <strong>für</strong> eine gegebene<br />

Stichprobe den Maximum-Likelihood-Schätzer als<br />

Nullstellenproblem mit einer vorgegebenen Genauigkeit<br />

numerisch ermittelt; verwenden Sie einmal einen selbst<br />

geschriebenen Bisektionsalgorithmus, einmal ein ein selbst<br />

geschriebenes Newtonverfahren, einmal uniroot().<br />

Kontrolle: Die Bestimmungsgleichung im Newtonverfahren lautet<br />

<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

940


(d) Integrieren Sie in Ihre Funktionen einen Übergabeparameter, der<br />

die Ausgabe des Zwischenergebnisses <strong>für</strong> am Ende jedes<br />

Iterationsschrittes steuert. Realisieren Sie die folgenden<br />

Möglichkeiten:<br />

Ausgabe des Zwischenergebnisses [ print (), cat()]<br />

Anhalten der Programmausführung <strong>und</strong> Kontrolle der<br />

Variablen [browser()]<br />

Keine Ausgabe des Zwischenergebnisses<br />

(e) Welchen Wert erhalten Sie <strong>für</strong> den<br />

Maximum-Likelihood-Schätzer bei einer vorgegebenen<br />

Genauigkeit von ?<br />

Lösungsvorschlag:<br />

.pdf-Version: L.9.2<br />

.R-Version: Blatt 9, Aufgabe 2<br />

<br />

.R-Version (www): Blatt 9, Aufgabe 2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

941


A.9.3 Numerische Probleme mit dem<br />

Coupon-Collector<br />

Betrachten Sie das Coupon-Collector Problem:<br />

Eine Firma legt ihrem Produkt Sammelbilder bei ( verschiedene<br />

Coupons). Um Ihnen eine realistische Größenordnung zu geben: Bei<br />

der letzten Fußball-WM gab es ein PANINI -Sammelalbum mit<br />

Sammelbildern! Nehmen Sie an, dass Sie jedes Bild mit<br />

gleicher Wahrscheinlichkeit beim Kauf vorfinden. Die<br />

Wahrscheinlichkeit zum ersten Mal bei ( ) gekauften Bildern<br />

jeweils mindestens 1 Bild von allen zu besitzen, ergibt sich mit<br />

Hilfe der “Siebformel” als<br />

¡ falls <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

¡ falls <br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

942


mit Erwartungswert<br />

¡<br />

<br />

<br />

<br />

<br />

(b) Simulieren Sie nun mit Hilfe von R / S-<strong>Plus</strong> <strong>und</strong> der Funktion<br />

sample(), wie viele Bilder Sie kaufen müssen, um von jedem Bild<br />

mindestens 1 zu besitzen. Wiederholen Sie dies “mehrere”<br />

( ) Male <strong>und</strong> berechnen Sie Mittelwert <strong>und</strong> empirische<br />

Varianz. Vergleichen Sie Ihre Ergebnisse mit den Ergebnissen aus<br />

Teilaufgabe (b).<br />

<br />

<br />

<br />

<br />

¡<br />

<br />

<br />

(a) Aufgr<strong>und</strong> numerischer Auslöschungseffekte ist die Formel<br />

numerisch unzuverlässig <strong>für</strong> . Um einen Eindruck von<br />

der Wahrscheinlichkeitsfunktion zu bekommen, werten Sie die<br />

Ausdrücke aus <strong>für</strong> <strong>und</strong> plotten Sie die<br />

Funktion im Bereich von <strong>und</strong><br />

berechnen Sie jeweils auch den Erwartungswert <br />

sowie die Größe . Was legt dies <strong>für</strong> nahe?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

943


Zur Orientierung: 10 Durchläufe auf einem Pentium III benötigen etwa 9<br />

Minuten.<br />

(c) Fasst man als <br />

auf, wobei die Zahl der Käufe ist,<br />

die nötig sind, um ein Bild zu erhalten, welches sich von den<br />

verschiedenen Bildern unterscheidet, die man bereits<br />

erhalten hat, so erhält man die Darstellung als<br />

<br />

. Die besitzen dabei eine geometrische<br />

Verteilung mit sich ändernder Erfolgswahrscheinlichkeit.<br />

Offenbar ist diese Formel numerisch viel zuverlässiger!<br />

Berechnen Sie <strong>für</strong> den Erwartungswert exakt<br />

<strong>und</strong> näherungsweise, indem Sie die Approximation<br />

<br />

verwenden, wobei <strong>und</strong><br />

die Eulersche Konstante ist.<br />

(d) Simulieren Sie die geometrisch verteilten Variablen !<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

944


Lösungsvorschlag:<br />

.pdf-Version: L.9.3<br />

.R-Version: Blatt 9, Aufgabe 3<br />

.R-Version (www): Blatt 9, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

945


A.9.4 Optimale Prognose<br />

Betrachten Sie das Modell , wobei <strong>und</strong> stochastisch<br />

unabhängige Zufallsvariablen seien. Gesucht ist eine Schätzung <strong>für</strong><br />

auf der Basis von . Nun sei mit<br />

Dichte <strong>und</strong><br />

(i) , mit Dichte <br />

(ii) ¡ ¡ , mit Dichte<br />

¡ ¡ <br />

(iii) , mit Dichte <br />

Führen Sie <strong>für</strong> die Fälle (i)-(iii) die folgenden Berechnungen durch:<br />

(a) Berechnen Sie den bedingten Erwartungswert ,<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

946


wobei<br />

<br />

<br />

<br />

<br />

auf einem -Gitter ( ), wobei Sie lediglich den Zähler<br />

<br />

<br />

<br />

(A.9.1)<br />

auf einem -Gitter ( ), indem Sie <strong>für</strong> jeden -Wert die<br />

Integrale in (A.9.1) mit Hilfe der Funktion <br />

berechnen.<br />

Hinweis: Verwenden Sie die Funktion bed.Erw(). Um diese im<br />

Fall (ii) anwenden zu können, müssen Sie die Dichte von als<br />

eine eigene Funktion implementieren.<br />

(b) Berechnen Sie den Posterior Modus , wobei<br />

<br />

<br />

<br />

<br />

<br />

<br />

(A.9.2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

947


von (A.9.2) maximieren. Der Nenner nämlich ist konstant in <br />

<strong>und</strong> kann daher <strong>für</strong> die Maximierung vernachlässigt werden.<br />

Bestimmen Sie die Maximalstelle, indem Sie den Zähler von<br />

auf einem vorgegebenem -Gitter ( ) <strong>für</strong><br />

jedes der maximieren.<br />

(c) Glätten Sie die Funktionen <strong>und</strong><br />

mit Hilfe von Splines <strong>und</strong> plotten Sie die<br />

Ergebnisse.<br />

(d) Simulieren Sie Realisationen der Zufallsvariablen <br />

<strong>und</strong> <strong>und</strong> berechnen Sie ( ) <strong>für</strong> die<br />

Fälle (i)-(iii). Für jede der Stichproben bestimmen Sie dann mit<br />

Hilfe der 6 geglätteten Funktionen aus Teil (c) <strong>und</strong> Inter- bzw.<br />

Extrapolationsverfahren den bedingten Erwartungswert <strong>und</strong> den<br />

Posterior Modus <strong>für</strong> , d.h. Sie erhalten 18<br />

verschiedene Ergebnisse.<br />

<br />

(e) Vergleichen Sie die verschiedenen Schätzungen <strong>für</strong> , indem Sie<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

948


den empirischen mean squared error berechnen, d.h.<br />

<br />

, wobei die Ergebnisse aus Teil (d) sind.<br />

Stellen Sie die Ergebnisse in einem Data.frame zusammen.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.9.4<br />

.R-Version: Blatt 9, Aufgabe 4<br />

.R-Version (www): Blatt 9, Aufgabe 4<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

949


A.10 Blatt 10<br />

Stoff bis einschließlich Abschnitt 7.1.1 (g) — Modellwahl<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

950


A.10.1 Lineare Regression<br />

Plotten Sie den crabs.data Datensatz, d.h. plotten Sie die<br />

Variablen presz <strong>und</strong> postsz gegeneinander. Welches lineare Modell<br />

vermuten Sie? Geben Sie die entsprechende R-Formel hier<strong>für</strong> an.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.10.1<br />

.R-Version: Blatt 10, Aufgabe 1<br />

.R-Version (www): Blatt 10, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

951


A.10.2 Freier Fall eines Körpers<br />

Unter Vernachlässigung der Reibung ist die Höhe eines frei<br />

fallenden Körpers zum Zeitpunkt gegeben durch die Formel<br />

<br />

wobei die Höhe des Körpers zum Zeitpunkt ist, die<br />

Anfangsgeschwindigkeit des Körpers <strong>und</strong> die halbe<br />

Gravitationsbeschleunigung .<br />

Es liegt die folgende Serie annähernd gleich genauer Messungen<br />

während eines Fallvorgangs vor:<br />

t [s] h [cm] t [s] h [cm] t [s] h [cm] t [s] h [cm] t [s] h [cm]<br />

<br />

11.86 <br />

26.69 <br />

51.13 <br />

85.44 <br />

<br />

<br />

15.67 <br />

33.71 <br />

61.49 <br />

99.08 <br />

<br />

<br />

20.60 <br />

41.93 <br />

72.90 <br />

113.77<br />

129.54<br />

146.48<br />

Schätzen Sie die Konstanten , , mit Hilfe der Methode der<br />

kleinsten Quadrate <strong>und</strong> versehen Sie Ihre Schätzung der<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

952


Gravitationskonstante mit einem Schätzfehler. Lösungsvorschlag:<br />

.pdf-Version: L.10.2<br />

.R-Version: Blatt 10, Aufgabe 2<br />

.R-Version (www): Blatt 10, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

953


A.10.3 Länge der alten Meile<br />

Entlang einer jahrh<strong>und</strong>ertealten Straße befinden sich sechs<br />

Meilensteine an den folgenden Positionen:<br />

Meilenstein 1 784 m<br />

Meilenstein 2 2 460 m<br />

Meilenstein 3 4 147 m<br />

Meilenstein 4 5 826 m<br />

Meilenstein 5 7 515 m<br />

Meilenstein 6 9 187 m<br />

Der Nullpunkt ist dabei beliebig gewählt. Schätzen Sie die Länge der<br />

diesen Meilensteinen zugr<strong>und</strong>eliegenden alten Meile unter Annahme<br />

folgender Modelle:<br />

Modell 1. Die Steine wurden einst exakt an den richtigen<br />

Positionen eingesetzt, doch im Laufe der Zeit verrückt<br />

(beispielsweise ausgepflügt <strong>und</strong> wieder eingesetzt).<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

954


Modell 2. Die Positionen der Steine wurden einst etwas ungenau<br />

bestimmt <strong>und</strong> blieben seither unverändert.<br />

Bestimmen Sie <strong>für</strong> jedes der beiden Modelle den besten linearen<br />

erwartungstreuen Schätzer der Länge der alten Meile, <strong>und</strong> versehen<br />

Sie beide Schätzungen mit einem Standardfehler. Lösungsvorschlag:<br />

.pdf-Version: L.10.3<br />

.R-Version: Blatt 10, Aufgabe 3<br />

.R-Version (www): Blatt 10, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

955


A.10.4 Modellanpassung, Modellwahl<br />

Betrachten Sie den Datensatz model.<br />

(a) Vergleichen Sie die folgenden Modelle miteinander<br />

(a) <br />

(b) <br />

(c) <br />

<br />

Welches Modell erweist sich mit Hilfe der Funktionen update()<br />

(forward bzw. backward), step() (bzw. drop1()) <strong>und</strong> leaps () (in<br />

des Pakets leaps enthalten) jeweils als das beste?<br />

(b) Plotten Sie die Daten <strong>und</strong> die mit Modell (ii) (entspricht dem<br />

realen Modell) angepasste Kurve.<br />

(c) Die Daten enthalten eine Lücke, d.h. <strong>für</strong> liegen<br />

keine Daten vor. Bestimmen Sie mit Hilfe der angepassten Kurve<br />

aus Teil (b) den Wert <strong>für</strong> . Legen Sie im Bereich der<br />

Lücke ein 95% Konfidenzintervall um die angepasste Kurve.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

956


Hinweis: Verwenden Sie die Funktion predict ().<br />

(d) Im Datensatz luecke finden sich die fehlenden Werte <strong>für</strong> das<br />

Intervall . Ergänzen Sie zur Kontrolle den Plot aus Teil<br />

(c) um diese Daten.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.10.4<br />

.R-Version: Blatt 10, Aufgabe 4<br />

.R-Version (www): Blatt 10, Aufgabe 4<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

957


A.11 Blatt 11<br />

Stoff bis einschließlich Abschnitt 7.1.2 — Generalisiert lineare<br />

Modelle<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

958


A.11.1 ANOVA<br />

Der Absatz von Produkten wird durch die Preispolitik <strong>und</strong> die Art<br />

der Werbung beeinflußt. Für eine Margarinesorte stehen der<br />

Marketing-Abteilung eines Konzerns bezüglich Preispolitik<br />

(Faktor A) drei Strategien (Faktorstufen), nämlich Niedrig-, Normal<strong>und</strong><br />

Hochpreispolitik, <strong>und</strong> bezüglich der Art der Werbung (Faktor B)<br />

zwei Möglichkeiten (Faktorstufen), nämlich Postwurfsendungen <strong>und</strong><br />

Anzeigenwerbung, zur Verfügung. Zur Untersuchung dieser Optionen<br />

hinsichtlich ihrer Wirkung wurden an 10 zufällig ausgewählten Tagen<br />

die abgesetzten Mengen der Margarinesorte in 6 Supermärkten<br />

erfaßt, wobei sichergestellt wurde, dass die K<strong>und</strong>en eines jeden<br />

Supermarktes nur mit einer Kombination von Preis- <strong>und</strong><br />

Werbestrategie konfrontiert wurden. Stellen Sie die Daten in<br />

margarine.txt geeignet graphisch dar <strong>und</strong> führen Sie eine ANOVA<br />

durch. Berücksichtigen Sie dabei auch eine mögliche Interaktion<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

959


zwischen den beiden Faktoren.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.11.1<br />

.R-Version: Blatt 11, Aufgabe 1<br />

.R-Version (www): Blatt 11, Aufgabe 1<br />

Beispiel stammt aus Fahrmeier, L., Hamerle, A.(1984), Multivariate<br />

Statistische Verfahren, p. 168<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

960


A.11.2 Box–Cox–Transformation I<br />

Betrachten Sie den gauge Datensatz.<br />

(a) Passen Sie an die Daten ein einfaches lineares Modell an <strong>und</strong><br />

plotten Sie die Residuen. Was fällt auf?<br />

(b) Finden Sie mit Hilfe der Funktion boxcox() aus dem MASS Paket<br />

eine geeignete Transformation <strong>für</strong> die Daten.<br />

(c) Passen Sie an die transformierten Daten ein einfaches lineares<br />

Modell an <strong>und</strong> plotten Sie die Residuen.<br />

(d) Plotten Sie nun die Daten <strong>und</strong> die angepassten Kurven aus Teil<br />

(a) <strong>und</strong> (c).<br />

Lösungsvorschlag:<br />

.pdf-Version: L.11.2<br />

.R-Version: Blatt 11, Aufgabe 2<br />

<br />

.R-Version (www): Blatt 11, Aufgabe 2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

961


A.11.3 Box–Cox–Transformation II<br />

Betrachten Sie noch einmal Aufgabe A.9.3; schließen Sie nun mit<br />

Hilfe der Box-Cox-Transformation auf die Asymptotik von .<br />

Lösungsvorschlag:<br />

.pdf-Version: L.11.3<br />

.R-Version: Blatt 11, Aufgabe 3<br />

.R-Version (www): Blatt 11, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

962


A.11.4 Generalisiert lineares Modell<br />

Betrachten Sie den adver Datensatz. Es handelt sich dabei um<br />

Daten, die im Zusammenhang mit einer Studie über Wirkung <strong>und</strong><br />

Wahrnehmung der Werbung im Fernsehen erhoben wurden. Es<br />

wurde 66 Personen während eines Zeitraumes von 171 Wochen<br />

wöchentlich eine Frage zu Werbespots <strong>für</strong> einen bekannten<br />

Schokoladenriegel gestellt. Außerdem wurde noch der wöchentliche<br />

Werbeaufwand in einer skalaren, metrischen Größe erfasst. Da <strong>für</strong><br />

einige Wochen die Antworten leider fehlen, wurden die<br />

entsprechenden fehlenden Werte mit "0"kodiert.<br />

Führen Sie eine Analyse mit Hilfe des Logit- <strong>und</strong> des Probit-Modells<br />

durch <strong>und</strong> vergleichen Sie die Ergebnisse. Verwenden Sie dabei auch<br />

geeignete graphische Darstellungen.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

963


Lösungsvorschlag:<br />

.pdf-Version: L.11.4<br />

.R-Version: Blatt 11, Aufgabe 4<br />

.R-Version (www): Blatt 11, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

964


A.12 Blatt 12<br />

Stoff bis einschließlich Abschnitt 7.2 — Elemente multivariater<br />

Statistik<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

965


A.12.1 Multivariate Normalverteilung<br />

(a) Schreiben Sie selbst eine Funktion zur Erzeugung multivariater<br />

normalverteilter Daten zu vorgegebenem Mittelwert <strong>und</strong><br />

Kovarianz.<br />

(b) Erzeugen Sie mit dieser Funktion bivariate Zufallsvariablen<br />

gemäß<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(d) Ergänzen Sie den Plot nun um die in Teil (b) generierten Daten.<br />

Dabei zeichnen Sie die Punkte aus der kontaminierenden<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

wobei die erste Komponente einer idealen Verteilung, die zweite<br />

einer Kontamination entspricht, <strong>und</strong> protokollieren Sie bei der<br />

Simulation mit, welche Situation jeweils in einer einzelnen<br />

Beobachtung vorliegt.<br />

(c) Erzeugen Sie eine ellipsenförmige -Konfidenzregion <strong>für</strong> die<br />

ideale Verteilung .<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

966


Verteilung rot, falls sie innerhalb der Ellipse liegen <strong>und</strong> orange,<br />

falls sie außerhalb liegen. Die Punkte aus der idealen Verteilung<br />

zeichnen Sie grün, falls Sie innerhalb der Ellipse liegen <strong>und</strong> blau,<br />

falls sie außerhalb liegen.<br />

(e) Finden Sie heraus, wie man die Aufgabe mit den Paketen<br />

mvtnorm, ellipse erledigt.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.12.1<br />

.R-Version: Blatt 12, Aufgabe 1<br />

.R-Version (www): Blatt 12, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

967


A.12.2 Clustering, Diskriminanzanalyse<br />

Betrachten Sie den Banknoten-Datensatz bank2. Der Datensatz<br />

enthält Messungen von 100 echten <strong>und</strong> 100 falschen Schweizer<br />

Banknoten. Es wurden dabei 6 verschiedene Größen vermessen<br />

(Länge, Breite, Diagonale, ...).<br />

(a) Wenden Sie auf den gesamten bank2 Datensatz mindestens zwei<br />

verschiedene Clusteralgorithmen an. Vergleichen <strong>und</strong><br />

interpretieren Sie die Ergebnisse.<br />

(b) Wenden Sie eine lineare Diskriminanzanalyse auf den bank2<br />

Datensatz an. Verwenden Sie die Beobachtungen 1 bis 70 <strong>und</strong><br />

131 bis 200 als Trainingsstichprobe <strong>und</strong> die Beobachtungen 71<br />

bis 130 als Validierungsstichprobe.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.12.2<br />

<br />

.R-Version: Blatt 12, Aufgabe 2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

968


.R-Version (www): Blatt 12, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

969


A.12.3 Hauptkomponentenanalyse, Faktoranalyse<br />

Betrachten Sie erneut den bank2 Datensatz.<br />

(a) Führen Sie <strong>für</strong> den gesamten bank2 Datensatz eine<br />

Hauptkomponentenanalyse durch <strong>und</strong> interpretieren Sie das<br />

Ergebnis.<br />

(b) Wenden Sie auf den gesamten bank2 Datensatz eine<br />

Faktoranalyse an <strong>und</strong> interpretieren Sie das Ergebnis.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.12.3<br />

.R-Version: Blatt 12, Aufgabe 3<br />

.R-Version (www): Blatt 12, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

970


A.12.4 Normalisierte Hauptkomponentenanalyse<br />

Beziehen Sie auf der Service–Homepage oder unter<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/rkurs/S<strong>Plus</strong>0203/uscrime.dat<br />

den Datensatz uscrime.dat:<br />

Messungen von Variablen; es wird die Zahl der Verbrechen im Jahr<br />

1985 in jedem der Staaten der USA in verschiedenen Kategorien —<br />

X3–X7 angegeben:<br />

X1 Fläche des Staates X7 Einbrüche<br />

X2 Bevölkerung des Staates 1985 X8 Diebstahl (larcery)<br />

X3 Morde X9 Autodiebstahl (autothieft)<br />

X4 Vergewaltigungen X10 Region des Staates<br />

X5 Raubüberfälle X11 GebietsNr. des Staates<br />

X6 Anschläge<br />

Regionen codiert als<br />

1<br />

<br />

Nordosten 3 Süden<br />

2 Mittlerer Westen 4 Westen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

971


Gebiete codiert als<br />

1 Neuengland 6 East South Central<br />

2 Mittlere Atlantikküste 7 West South Central<br />

3 East North Central 8 Gebirgsregion<br />

4 West North Central 9 Pazifikküste<br />

5 Südliche Atlantikküste<br />

Daten nach<br />

Härdle, W. and Simar, L. (2003), S. B.18; die Werte liegen als ASCII–Text<br />

vor (ohne Kopfzeilen!).<br />

Wenden Sie eine normalisierte Hauptkomponentenanalyse (NPCA)<br />

auf den uscrime.dat Datensatz an. Dabei werden alle Variablen vor<br />

der eigentlichen Hauptkomponentenanalyse zuerst zentriert <strong>und</strong><br />

standardisiert. Interpretieren Sie die Ergebnisse. Ist es nötig, die<br />

dritte PC zu betrachten? Können Sie Unterschiede zwischen den vier<br />

Regionen erkennen? Wiederholen Sie die Analyse ohne die Variable<br />

X1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

972


Lösungsvorschlag:<br />

.pdf-Version: L.12.4<br />

.R-Version: Blatt 12, Aufgabe 4<br />

.R-Version (www): Blatt 12, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

973


A.13 Blatt 13<br />

Stoff bis einschließlich Abschnitt 7.4.3 — Punktprozesse<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

974


A.13.1 Zeitreihenanalyse I<br />

Beziehen Sie auf der Service–Homepage oder unter<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/rkurs/S<strong>Plus</strong>0203/daten01.txt<br />

den Datensatz daten01.txt mit einem Zeitindex <strong>und</strong> <br />

verschiedenen realen <strong>und</strong> simulierten Zeitreihen der Länge <br />

(a) Erstellen sie Plots des Zeitindexes gegen alle anderen Variablen.<br />

Welche Zeitreihen erscheinen (visuell) stationär? Bei welchen<br />

Zeitreihen liegt deutlich ein Trend vor, bei welchen ist (visuell)<br />

die Autokorrelation zum Lag stark positiv?<br />

(b) Lassen Sie sich von allen Zeitreihen die (empirische)<br />

Autokovarianzfunktion, Autokorrelationsfunktion <strong>und</strong> die<br />

paritelle Autokorrelationsfunktion ausgeben. Stimmen die<br />

Resultate mit den visuellen Eindrücken überein?<br />

(c) Bei welchen der in Teil (a) <strong>und</strong> (b) sich als nicht stationär<br />

erwiesenen Zeitreihen eleminiert Differenzenbildung den Trend?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

975


Lösungsvorschlag:<br />

.pdf-Version: L.13.1<br />

.R-Version: Blatt 13, Aufgabe 1<br />

.R-Version (www): Blatt 13, Aufgabe 1<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

976


A.13.2 Zeitreihenanalyse II<br />

(a) Simulieren Sie mit Hilfe von arima.sim() Beobachtungen<br />

aus einem ARMA(1,1)-Modell mit AR-Parameter ,<br />

MA-Parameter <strong>und</strong> Innovationen, welche normalverteilt<br />

sind mit Erwartungswert <strong>und</strong> Varianz . Schätzen Sie dann<br />

die Parameter <strong>und</strong> die Autokovarianzfunktion.<br />

(b) Betrachten Sie den LakeHuron Datensatz aus dem per default<br />

bereits eingeladenen Paket stats. Subtrahieren Sie von den<br />

Werten zuerst 570 <strong>und</strong> von den Ergebnissen dann das<br />

arithmetische Mittel dieser neuen Werte. Passen Sie nun an<br />

diesen zentrierten Datensatz mit Hilfe von arima0() bzw. arima()<br />

ein ARMA(1,1) Modell an <strong>und</strong> schätzen Sie die<br />

Autokovarianzfunktion. Berechnen Sie außerdem eine 5-Schritt<br />

Prognose.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

977


Lösungsvorschlag:<br />

.pdf-Version: L.13.2<br />

.R-Version: Blatt 13, Aufgabe 2<br />

.R-Version (www): Blatt 13, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

978


A.13.3 Räumliche Statistik<br />

Wiederholen Sie mit dem s101 Datensatz das Beispiel zur<br />

räumlichen Statistik aus der Vorlesung. Es handelt sich dabei um ein<br />

Objekt der Klasse geodata. Verwenden Sie daher zum Laden des<br />

Datensatzes den Befehl load()!<br />

Hinweis: Die Befehle finden sich im R Skript geoRintro.R.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.13.3<br />

.R-Version: Blatt 13, Aufgabe 3<br />

.R-Version (www): Blatt 13, Aufgabe 3<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

979


A.14 Blatt 14<br />

Stoff bis einschließlich Abschnitt 8.1 — Objektorientierung in R<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

980


A.14.1 Entwurf einer Simulationsklasse<br />

(a) Entwerfen Sie eine Simulationsklasse; diese sollte als Slot die<br />

Daten enthalten, sowie den Stichprobenumfang <strong>und</strong> die Zahl der<br />

Runs, den Seed <strong>und</strong> einen Filenamen in dem die Informationen<br />

zur Erzeugung der Simulation abgelegt werden. Als Methoden<br />

sollte die Funktion, mit der gesampelt werden soll, eine Ausgabe<br />

vom Typ summary sowie eine plot-Methode angeb<strong>und</strong>en sein.<br />

(b) Leiten Sie nun eine Klasse ab, bei der Sie geeignet kontaminierte<br />

/ <strong>und</strong> ideal verteilte Stichproben ziehen können <strong>und</strong> dabei<br />

geeignet mitprotokollieren, welche Daten kontaminiert sind <strong>und</strong><br />

welche nicht.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.14.1<br />

.R-Version: Blatt 14, Aufgabe 1<br />

<br />

.R-Version (www): Blatt 14, Aufgabe 1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

981


A.14.2 Indexoperator<br />

Definieren Sie einen Indexoperator <strong>für</strong> die Klasse Simulation, so dass<br />

bei einem Objekt dieser Klasse X[i] die -te Stichprobe (-ten<br />

Run) zurückgibt.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.14.2<br />

.R-Version: Blatt 14, Aufgabe 2<br />

.R-Version (www): Blatt 14, Aufgabe 2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

982


A.14.3 Simulationsklasse II<br />

(a) Machen Sie die Gruppe der Math–Methoden <strong>für</strong> die Klasse<br />

verfügbar, so dass, falls X eine Instanz aus dieser Klasse ist,<br />

Ausdrücke wie Y


A.14.4 Schätzerauswertungsklasse<br />

(a) Definieren Sie eine Klasse DatenClass als Oberklasse von<br />

Simulation. Diese sollte die Slots Name, samplesize, Daten,<br />

runzahl enthalten. Damit könnte man dann auch reale Daten<br />

abdecken — runzahl dann als Versuchswiederholung<br />

interpretiert.<br />

(b) Definieren Sie eine Klasse AuswertungsClass mit Slots<br />

Schätzer — eine Funktion<br />

Schätzer <br />

die den Schätzer auf den Daten auswertet, DatenName — der<br />

Name des Datensatzes, <strong>und</strong> Ergebnis — das Ergebnis der<br />

Schätzerauswertung auf den Daten.<br />

(c) Schreiben eine Funktion Auswertung,<br />

<br />

¢ Schätzer SchätzerClass<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

984


die eine Instanz vom Typ AuswertungsClass erzeugt, wobei sie<br />

die Slots Schätzer, DatenName <strong>und</strong> Ergebnis belegt.<br />

(d) Füllen Sie als proof of concept mit dem Median als Schätzer<br />

eine entsprechende Instanz vom Typ Ergebnis mit der Funktion<br />

Auswertung.<br />

Lösungsvorschlag:<br />

.pdf-Version: L.14.4<br />

.R-Version: Blatt 14, Aufgabe 4<br />

.R-Version (www): Blatt 14, Aufgabe 4<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

985


A.15 Blatt 15<br />

Stoff bis einschließlich Abschnitt 8.2 — eigene Pakete in R<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

986


A.15.1 Checken/Erstellen eines Pakets<br />

(a) Bereiten Sie ggf. Ihren Rechner wie in Abschnitt 8.2.12<br />

beschrieben auf die Anlage eines R-Pakets vor.<br />

(b) Legen Sie ein Directory Rtest an. Laden Sie<br />

sich auf Ihren Rechner die tar.gz-Version des Pakets distr unter<br />

http://cran.us.r-project.org/src/contrib/Descriptions/distr.html.<br />

Entpacken Sie dieses Archiv in einem Unter-Directory<br />

Rtest/mdistr.<br />

(c) Modifizieren Sie den Titel des Pakets im DESCRIPTION-File auf<br />

mdistr.<br />

(d) Checken Sie das Paket mit R CMD check <strong>und</strong> erstellen Sie es mit<br />

R CMD build als tar.gz bzw. als Windows-Binary (.zip-File).<br />

(e) Installieren Sie das neue Paket mdistr <strong>und</strong> testen Sie es mit den<br />

Demos.<br />

<br />

(f) Deinstallieren Sie das Paket mdistr wieder.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

987


Kopieren Sie dabei alle Konsolenergebnisse in eine Textdatei <strong>und</strong><br />

schnüren Sie diese mit der tar.gz– <strong>und</strong> der zip–Version Ihres<br />

Paketes in ein zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

A.15.2 Anlegen eines Daten-Pakets<br />

Erstellen Sie aus dem Datensatz hills aus dem MASS-Paket ein<br />

neues Paket<br />

(a) Lassen Sie sich mit package.skeleton eine Hülle erstellen.<br />

(b) Legen Sie ein DESCRIPTION-File an.<br />

(c) Erstellen Sie ein Dokumentations- / rd-File<br />

(d) Checken <strong>und</strong> erstellen Sie das Paket (ungepackt <strong>und</strong> als Binary).<br />

<br />

(e) Installieren <strong>und</strong> deinstallieren Sie es.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

988


Kopieren Sie dabei alle Konsolenergebnisse in eine Textdatei <strong>und</strong><br />

schnüren Sie diese mit der tar.gz– <strong>und</strong> der zip–Version Ihres<br />

Paketes in ein zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

A.15.3 Anlegen eines eigenen R-Pakets<br />

Fassen Sie alle Ihre Routinen zu Blatt A.14 in einem R–Paket<br />

zusammen. Gehen Sie vor wie bei Aufgabe 1 <strong>und</strong> erstellen Sie die<br />

notwendigen DESCRIPTION-Files <strong>und</strong> rd-Files. Erstellen Sie ein<br />

NAMESPACE-File. Checken <strong>und</strong> erstellen Sie das Paket (ungepackt<br />

<strong>und</strong> als Binary). Kopieren Sie dabei alle Konsolenergebnisse in eine<br />

Textdatei <strong>und</strong> schnüren Sie diese mit der tar.gz– <strong>und</strong> der<br />

<br />

zip–Version Ihres Paketes in ein zip-File.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

989


Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

A.15.4 Arbeit mit Sweave<br />

Führen Sie mit der Schätzerklasse aus Blatt A.14 eine kleine<br />

Simulationsstudie durch <strong>und</strong> beschreiben die Ergebnisse in einem<br />

L ATEX-File, das Sie mit R-Code–Chunks versehen. Erstellen Sie jeweils<br />

ein .R-, ein .tex- <strong>und</strong> ein .txt-File (letzteres mit den Befehlen zur<br />

Erzeugung der Vignette). Schnüren Sie alle Files in ein zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

990


A.16 Blatt 16<br />

Stoff bis Ende des Kurses<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

991


A.16.1 R <strong>und</strong> MySQL<br />

(a) Installieren Sie MySQL <strong>und</strong> RMySQL.<br />

(b) Erzeugen Sie bei sich die Sakila Datenbank<br />

http://dev.mysql.com/doc/sakila/en/sakila.html.<br />

(c) Finden Sie mit SQL-Anfragen die überfälligen DVDs heraus <strong>und</strong><br />

importieren Sie das Ergebnis dieser Anfrage nach R.<br />

Erstellen Sie jeweils ein .txt- <strong>und</strong> ein .R-File (ersteres mit den<br />

SQL-Anfragen. Schnüren Sie alle Files in ein zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

A.16.2 Aufruf von C Code unter R<br />

(a) Bereiten Sie Ihren Rechner wie in Abschnitt 8.3.8 beschrieben<br />

auf die Anlage eines R-Pakets vor.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

992


(b) Schreiben Sie den Algorithmus aus Beispiel 3.6-2 um in C.<br />

(c) Schreiben Sie eine (einfache) R Funktion, die Ihre C-Funktion<br />

aus (b) mit mit der .C-Schnittstelle ansteuert.<br />

(d) Wiederholen Sie (c) nur jetzt mit der .Call-Schnittstelle<br />

Erstellen Sie jeweils ein .c-, ein .R- <strong>und</strong> ein .txt-File (letzteres mit<br />

den Befehlen zur Erzeugung des .so/.dll-Files). Schnüren Sie alle<br />

Files in ein zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

A.16.3 Aufruf von Fortran Code unter R<br />

(a) Laden Sie sich aus dem Netz den Fortran-Quelltext zur<br />

Integrations-Routine dqagse aus der Fortran-Bibliothek<br />

quadpack herunter.<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

993


(b) Verwenden Sie dqagse, um das gleiche wie in Aufgabe A.16.3<br />

mit der .Fortran-Schnittstelle zu erreichen.<br />

Erstellen Sie ein .R- <strong>und</strong> ein .txt-File (letzteres mit den Befehlen<br />

zur Erzeugung des .so/.dll-Files). Schnüren Sie alle Files in ein<br />

zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

A.16.4 Paralleles Rechnen mit R<br />

(a) Verschaffen Sie sich Zugang zu einem Compute-Cluster mit<br />

bereits installiertem R ;-)<br />

(b) Richten Sie sich eine lokale Library ~/myRlibs ein, in die Sie die<br />

Pakete snow <strong>und</strong> Rmpi aus den Sourcen mit R CMD INSTALL<br />

installieren, <strong>und</strong> erstellen Sie in Ihrem Stammverzeichnis ein File<br />

.Renviron mit Inhalt R_LIBS="~/myRlibs:${R_LIBS}".<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

994


(c) Wiederholen Sie Aufgabe A.5.1, allerdings diesmal mit<br />

Stichproben der Länge , <strong>für</strong> <br />

<br />

—auf mindestens Knoten.<br />

(d) Versuchen Sie mit boxcox das asymptotische Verhalten der<br />

Verteilungsfunktion in den Flanken in Abhängigkeit von zu<br />

beschreiben.<br />

Erstellen Sie jeweils ein .c-, ein .R- <strong>und</strong> ein .txt-File (letzteres mit<br />

den Befehlen zur Erzeugung des .so/.dll-Files). Schnüren Sie alle<br />

Files in ein zip-File.<br />

Lösungsvorschlag:<br />

hier liegt noch keine Musterlösung vor.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

995


L Lösungen<br />

L.1 Lösungsvorschläge Blatt 1<br />

L.1.1 Arbeit mit R-Skripten am Beispiel eines<br />

beliebigen editors: (ohne direkte Anbindung<br />

an R)<br />

(a) Öffnen Sie eine neue Text-Datei – Benennen <strong>und</strong> speichern Sie<br />

die Datei mit der Dateiendung .R – Starten Sie R<br />

(b) Laden <strong>und</strong> Abarbeiten der kompletten (gespeicherten) Datei<br />

mit source( file ="c:/ ... /bsp.R", ...) , bzw.<br />

eval(parse( file ="c:/ ... /bsp.R", n= 1, ...))<br />

(c) Laden <strong>und</strong> Abarbeiten der ersten Befehle mit<br />

eval(parse( file ="c:/ ... /bsp.R", n=m, ...))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

996


(d) Laden <strong>und</strong> Abarbeiten Sie einzelner Befehle (am besten) mit<br />

cut and paste.<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

997


L.1.2 Auffinden von Datensätzen<br />

(a) Zum Beispiel: http://www.oanda.com/convert/fxhistory?lang=de<br />

(b) Zum Beispiel:<br />

http://www.dwd.de/research/klis/daten/online/wwr/form deu.htm<br />

(c) Aufruf von library () liefert:<br />

In S-<strong>Plus</strong> 2000:<br />

The following sections are available in the library directory:<br />

SECTION BRIEF DESCRIPTION<br />

chron Functions to handle dates and times.<br />

class Functions for non-parametric classification from<br />

Venables and Ripley.<br />

design Functions for biostats and epidemiological<br />

modeling from Frank Harrel.<br />

examples Functions and objects from The New S Language.<br />

hmisc Miscellaneous functions from Frank Harrel.<br />

maps Display of maps with projections.<br />

MASS Functions and data sets from "Modern Applied<br />

Matrix Statistics with S-PLUS" by Venables and Ripley.<br />

New Matrix class functions for numerical linear<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

998


algebra<br />

nlme2 Non-Linear Mixed Effects Functions version 2.1<br />

nnet Software for feed-forward neural networks from<br />

Venables and Ripley.<br />

olddates Date functions which use deprecated century<br />

handling rules.<br />

progdraw Sdraw example from Programmer’s Manual.<br />

progexam Examples from Programmer’s Manual.<br />

semantics Functions from chapter 11 of The New S Language.<br />

spatial Spatial statistics library from Venables<br />

and Ripley.<br />

For more information on each library section see the README<br />

file in each library section directory. You can also in<br />

S-PLUS run: \lstinline{library( help = )}<br />

In R 1.6.0:<br />

Packages in library ‘C:/PROGRAMME/R/RW1060/library’:<br />

acepack ace() and avas() for selecting regression<br />

transformations<br />

adapt adapt -- multidimensional numerical<br />

integration<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

999


agce<br />

analysis of growth curve experiments<br />

akima Interpolation of irregularly spaced data<br />

AnalyzeFMRI Functions for analysis of fMRI datasets<br />

stored in the ANALYZE format.<br />

ape Analyses of Phylogenetics and Evolution<br />

ash David Scott’s ASH routines<br />

base The R base package<br />

Bhat General likelihood exploration<br />

bindata Generation of Artificial Binary Data<br />

blighty British Isles coastlines<br />

boot Bootstrap R (S-<strong>Plus</strong>) Functions (Canty)<br />

bootstrap Functions for the Book "An Introduction<br />

to the Bootstrap"<br />

bqtl Bayesian QTL mapping toolkit<br />

brlr Bias-reduced Logistic Regression<br />

car Companion to Applied Regression<br />

cclust Convex Clustering Methods and Clustering<br />

Indexes<br />

cfa Analysis of configuration frequencies (CFA)<br />

chron Chronological objects which can handle<br />

CircStats dates and times<br />

Circular Statistics<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1000


class<br />

Functions for classification<br />

cluster Functions for clustering (by Rousseeuw et al.)<br />

cmprsk Subdistribution Analysis of Competing Risks<br />

cobs COBS -- Constrained B-splines<br />

CoCoAn Constrained Correspondence Analysis<br />

coda Output analysis and diagnostics for MCMC<br />

combinat combinatorics utilities<br />

conf.design Construction of factorial designs<br />

cramer Multivariate nonparametric Cramer-Test<br />

ctest Classical Tests<br />

date Functions for handling dates<br />

dblcens Compute the NPMLE of distribution from doubly<br />

censored data<br />

deal Learning Bayesian Networks with Mixed<br />

Variables<br />

deldir Delaunay Triangulation and Dirichlet<br />

(Voronoi) Tesselation.<br />

Devore5 Data sets from Devore’s "Prob and Stat<br />

for Eng (5th ed)"<br />

diamonds Analysis and sampling grids from diamond<br />

dichromat partitions<br />

Color schemes for dichromats<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1001


dr<br />

Dimension reduction for regression<br />

dse1 Dynamic Systems Estimation (time series<br />

package)<br />

dse2 Dynamic Systems Estimation - extensions<br />

e1071 Misc Functions of the Department of<br />

Statistics (e1071), TU Wien<br />

eda Exploratory Data Analysis<br />

ellipse Functions to plot pairwise confidence<br />

regions<br />

emplik empirical likelihood ratio for<br />

censored/truncated data<br />

EMV Estimation of Missing Values for a<br />

Data Matrix<br />

evd Functions for extreme value distributions<br />

exactRankTests Exact Distributions for Rank and<br />

Permutation Tests<br />

fastICA FastICA algorithms to perform ICA and<br />

Projection Pursuit<br />

fdim Functions for calculating fractal dimension<br />

fields Tools for spatial data<br />

foreign fracdiff<br />

Read data stored by Minitab, SAS, SPSS, ...<br />

Fractionally differenced ARIMA (p,d,q) models<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1002


g.data<br />

Delayed-Data Packages<br />

gafit Genetic Algorithm for Curve Fitting<br />

gee Generalized Estimation Equation solver<br />

geepack Generalized Estimating Equation Package<br />

GeneSOM Clustering Genes using Self-Organizing Map<br />

GenKern Functions for generating and manipulating<br />

generalised kernel density estimates<br />

geoR geoR - functions for geostatistical analysis<br />

geoRglm geoRglm a package for generalised linear<br />

spatial models<br />

gld Basic functions for the generalised (Tukey)<br />

lambda distribution<br />

gllm Generalised log-linear model<br />

GLMMGibbs Generalised Linear Mixed Models by Gibbs<br />

Sampling<br />

gregmisc Greg’s Miscellaneous Functions<br />

grid The Grid Graphics Package<br />

gss General Smoothing Splines<br />

haplo.score Score Tests for Association of Traits with<br />

Haplotypes when Linkage Phase is Ambiguous.<br />

ifs ineq<br />

Iterated Function Systems estimator<br />

Measuring inequality, concentration and<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1003


ipred<br />

poverty<br />

Improved Predictors<br />

ISwR Data sets for "Introductory Statistics<br />

with R"<br />

KernSmooth Functions for kernel smoothing for<br />

Wand & Jones (1995)<br />

KMsurv Data sets from Klein and Moesschberger (1997),<br />

"Survival Analysis"<br />

knnTree k-nn classification with variable selection<br />

inside leaves of a tree<br />

lasso2 L1 constrained estimation aka ‘lasso’<br />

lattice Lattice Graphics<br />

leaps regression subset selection<br />

lgtdl A set of methods for longitudinal data<br />

objects.<br />

lmtest Testing Linear Regression Models<br />

logspline Logspline density estimation<br />

lokern Kernel Regression Smoothing with Local or<br />

Global Plug-in Bandwidth<br />

lpridge Local Polynomial (Ridge) Regression<br />

lqs maptree<br />

Resistant Regression and Covariance Estimation<br />

Mapping, pruning, and graphing tree models<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1004


MASS<br />

Main Library of Venables and Ripley’s MASS<br />

Matrix A Matrix package for R<br />

maxstat Maximally Selected Rank- and Gauss statistics<br />

mda Mixture and flexible discriminant analysis<br />

meanscore Meanscore method for missing covariate<br />

data in logistic regression models<br />

methods Formal Methods and Classes<br />

mgcv Multiple smoothing parameter estimation<br />

and GAMs by GCV<br />

mlbench Machine Learning Benchmark Problems<br />

moc General Nonlinear Mixture of curves.<br />

modreg Modern Regression: Smoothing and Local<br />

Methods<br />

muhaz Hazard Function Estimation in Survival<br />

Analysis<br />

multcomp Multiple Tests and Simultaneous Confidence<br />

Intervals<br />

multiv Multivariate Data Analysis Routines<br />

mva Classical Multivariate Analysis<br />

mvnmle ML estimation for multivariate normal data<br />

mvtnorm with missing values.<br />

Multivariate Normal and T Distribution<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1005


netCDF<br />

read data in UCAR’s netCDF format<br />

NISTnls Nonlinear least squares examples from NIST<br />

nlme Linear and nonlinear mixed effects models<br />

nlrq Nonlinear quantile regression<br />

nls Nonlinear regression<br />

nnet Feed-forward neural networks and multinomial<br />

log-linear models<br />

norm Analysis of multivariate normal datasets with<br />

missing values<br />

normix Normal Mixture Models (1-d) {Classes and<br />

Methods}<br />

npmc Nonparametric Multiple Comparisons<br />

Oarray Arrays with arbitrary offsets<br />

odesolve Solvers for Ordinary Differential Equations<br />

oz Plot the Australian coastline and states<br />

panel Panel<br />

pastecs Package for Analysis of Space-Time<br />

Ecological Series<br />

pcurve Principal Curve analysis<br />

pear periodic autoregression library<br />

permax pinktoe<br />

permax<br />

convert S trees to HTML/perl for interactive<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1006


pixmap<br />

tree traversal<br />

Bitmap Images (‘‘Pixel Maps’’)<br />

polymars Polychotomous Regression based on MARS<br />

polynom A collection of functions to implement a class<br />

for univariate polynomial manipulations<br />

princurve Fits a Principal Curve in Arbitrary Dimension<br />

pspline Penalized Smoothing Splines<br />

PTAk Principal Tensor Analysis on k modes<br />

qtl Tools for analyzing QTL experiments<br />

quadprog Functions to solve Quadratic Programming<br />

Problems.<br />

quantreg Quantile Regression<br />

qvcalc Quasi-variances for Model Coefficients<br />

RadioSonde Tools for plotting skew-T diagrams and winds<br />

profiles<br />

RandomFields Simulation and Analysis of Random Fields<br />

randomForest Breiman’s random forest for classification and<br />

regression<br />

RArcInfo Functions to import data from Arc/Info V7.x<br />

binary coverages<br />

relimp Relative Contribution of Effects in a<br />

Regression Model<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1007


meta<br />

Meta-analysis<br />

RMySQL MySQL interface for R<br />

rpart Recursive partitioning<br />

Rwave Time-Frequency analysis of 1-D signals<br />

SASmixed Data sets from "SAS System for Mixed Models"<br />

scatterplot3d 3D Scatter Plot<br />

sem Structural Equation Models<br />

serialize Simple Serialization Interface<br />

sgeostat An Object-oriented Framework for<br />

Geostatistical Modeling in S+<br />

sm kernel smoothing methods: Bowman & Azzalini<br />

(1997)<br />

sma Statistics for Microarray Analysis<br />

sn The skew-normal and skew-t distributions<br />

sna Tools for Social Network Analysis<br />

so<strong>und</strong> A So<strong>und</strong> Interface for R<br />

spatial functions for kriging and point pattern<br />

analysis<br />

spatstat Analysis of spatial point patterns<br />

spdep Spatial dependence: weighting schemes,<br />

splancs statistics and models<br />

Spatial and Space-Time Point Pattern Analysis<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1008


splines<br />

Regression Spline Functions and Classes<br />

StatDataML alpha implementation of the StatDataML<br />

proposal<br />

stepfun Step Functions, including Empirical<br />

Distributions<br />

strucchange Testing for Structural Change<br />

subselect Selecting variable subsets.<br />

SuppDists Supplementary distributions<br />

survival Survival analysis, including penalised<br />

likelihood.<br />

syskern Coding Kernel for R/S Differences<br />

systemfit Simultaneous Equation Estimation Package<br />

tcltk Interface to Tcl/Tk<br />

tensor Tensor product of arrays<br />

tframe Time Frame coding kernel<br />

tkrplot TK Rplot<br />

tools Tools for Package Development and<br />

Administration<br />

tree Classification and regression trees<br />

tripack Triangulation of irregularly spaced data<br />

ts tseries<br />

Time series functions<br />

Time series analysis and computational finance<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1009


twostage<br />

Optimal design of two-stage-studies using the<br />

Mean Score method<br />

vegan Community Ecology Package<br />

VLMC VLMC -- Variable Length Markov Chains<br />

waveslim Basic wavelet routines for time series and<br />

image analysis<br />

wavethresh Software to perform wavelet statistics and<br />

transforms.<br />

wle Weighted Likelihood Estimation<br />

xgobi Interface to the XGobi and XGvis programs for<br />

graphical data analysis<br />

XML Tools for parsing and generating XML within R<br />

and S-<strong>Plus</strong>.<br />

xtable Export tables to LaTeX or HTML<br />

Ab R 1.4.1 gibt es auch noch die Möglichkeit sich die<br />

vorhandenen Pakete per .packages(all . available =TRUE)<br />

anzusehen. Die Pakete lassen sich mit der Funktion library ()<br />

bzw. require () laden, wobei require () zusätzlich mitteilt, ob der<br />

Ladevorgang erfolgreich war (innerhalb von Funktionen!).<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1010


L.1.3 Datenimport<br />

(a) read. table ()<br />

davon mit speziellen Optionen abgeleitet:<br />

(b)<br />

<br />

read.csv(), read.csv2(), read.delim(), read.delim2(),<br />

read.fwf()<br />

scan()<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 1 Aufgabe 3( c )<br />

############################################<br />

# E i n l e s e n des D a t e n s a t z e s<br />

d o l l a r read . t a b l e (<br />

f i l e ="C : . . . \ \ d o l l a r . data " ,<br />

header=T,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1011


c o l C l a s s e s = c ( " c h a r a c t e r " , " numeric " )<br />

)<br />

# Handelt e s s i c h um e i n e n data . frame ?<br />

i s . data . frame ( d o l l a r )<br />

# Spaltennamen<br />

names ( d o l l a r )<br />

# Zeilennamen<br />

row . names ( d o l l a r )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1012


L.1.4 Mustererzeugung<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 1 Aufgabe 4<br />

############################################<br />

# Z e i l e 1<br />

M 1 : 2 0<br />

# Z e i l e 2<br />

M r b i n d (M, seq ( from =0.25 , to =5, by =0.25))<br />

# oder auch<br />

M r b i n d (M, seq ( from =0.25 , to =5, l e n g t h =20))<br />

# Z e i l e 3<br />

M r b i n d (M, rep ( 1 : 2 , rep ( 1 0 , 2 ) ) )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1013


# Z e i l e 4<br />

M r b i n d (M, rep ( rep ( 1 : 2 , rep ( 2 , 2 ) ) , 5 ) )<br />

# oder auch<br />

M r b i n d (M, rep ( 1 : 2 , rep ( 2 , 2 ) ) )<br />

# e r z e u g t nur : 1 1 2 2<br />

# j e d o c h : w i r d d i e Z e i l e a u t o m a t i s c h g e f u e l l t ,<br />

# indem d i e s e r Vektor w i e d e r h o l t w i r d<br />

# Z e i l e 5<br />

M r b i n d (M, rep ( 1 : 6 , c ( 2 , 2 , 2 , 4 , 4 , 6 ) ) )<br />

# Z e i l e 6<br />

M r b i n d (M, rep ( rep ( 1 : 3 , c ( 1 , 3 , 6 ) ) , 2 ) )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1014


L.2 Lösungsvorschläge Blatt 2<br />

L.2.1 Indexoperationen, Matrizen<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 2 Aufgabe 1<br />

############################################<br />

############################################<br />

#T e i l ( a )<br />

############################################<br />

# Matrix 1)<br />

M1 d i a g ( 2 , nrow=6)<br />

M1[ c o l (M1)>row (M1) ] 1<br />

<br />

# oder auch<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1015


M1 M1 + upper . t r i (M1)<br />

# Matrix 2<br />

M2 d i a g ( 4 , nrow=6)<br />

M2[ ( c o l (M2) row (M2))==1] c ( 1 , 2 , 1 , 2 , 1 )<br />

M2[ 1 , 1 ] 2<br />

M2[ 6 , 6 ] 2<br />

# oder auch<br />

M2 d i a g ( c ( 2 , rep ( 4 , 4 ) , 2 ) , nrow=6)<br />

M2[ ( c o l (M2) row (M2))==1] c ( 1 , 2 , 1 , 2 , 1 )<br />

# Matrix 3<br />

M3 m a t r i x ( rep ( c ( 2 : 7 ) , rep ( 6 , 6 ) ) , nrow=6, n c o l =6)<br />

M3 M3^( row (M3) 1)<br />

############################################<br />

#T e i l ( b )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1016


############################################<br />

l i b r a r y (MASS)<br />

data ( p a i n t e r s )<br />

namen row . names ( p a i n t e r s )<br />

namen [ grep ( p a t t e r n= ’ e . £ e . £ e ’ , namen ) ]<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1017


L.2.2 Faktoren<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 2 Aufgabe 2<br />

############################################<br />

############################################<br />

#T e i l ( a )<br />

############################################<br />

data ( i r i s )<br />

a t t a c h ( i r i s )<br />

t a p p l y ( S e p a l . Length , S p e c i e s , min )<br />

t a p p l y ( S e p a l . Width , S p e c i e s , min )<br />

t a p p l y ( S e p a l . Length , S p e c i e s , max)<br />

t a p p l y ( S e p a l . Width , S p e c i e s , max)<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1018


#T e i l ( b )<br />

############################################<br />

l e n as . m a t r i x ( t a p p l y (<br />

S e p a l . Length , S p e c i e s , t a b l e ) $ s e t o s a )<br />

l e n [ l e n==max( l e n ) ]<br />

# bzw .<br />

l e n [ which . max( l e n ) ]<br />

# g i b t j e d o c h nur e i n e s d e r b e i d e n Maxima aus<br />

wid as . m a t r i x ( t a p p l y (<br />

S e p a l . Width , S p e c i e s , t a b l e ) $ s e t o s a )<br />

wid [ wid==max( wid ) ]<br />

# bzw .<br />

wid [ which . max( wid ) ]<br />

# h i e r<br />

<br />

o . k . , da e s nur e i n Maximum g i b t<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1019


L.2.3 String-, Matrixoperationen<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 2 Aufgabe 3<br />

############################################<br />

#b i t t e beachten : Verwendung des Pfades<br />

# so koennen F i l e z u g r i f f e l e i c h t zum Laufen<br />

# a u f l o k a l e V e r z e i c h n i s s t r u k t u r e n g e b r a c h t werden<br />

###z . B . :<br />

PFAD "C : / e i g e n e ␣ D a t e i e n / A r b e i t /Uebungen/R/TeX/"<br />

Filename p a s t e (PFAD, "BL02Aufg3 . t x t " ,<br />

c o l l a p s e="" , sep="" )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1020


# Matrix 3 aus Aufgabe 1 ( a )<br />

M3 m a t r i x ( rep ( c ( 2 : 7 ) , rep ( 6 , 6 ) ) , nrow=6,<br />

n c o l =6)<br />

M3 M3^( row (M3) 1)<br />

L l i s t ( H i l b e r t=M3)<br />

EWs e i g e n ( L$ H i l b e r t ) $ v a l u e s<br />

# 1 . M o e g l i c h k e i t<br />

cat ( p a s t e ( " Die ␣ E i g e n w e r t e ␣ d e r ␣ Matrix " ,<br />

names ( L ) , " s i n d ␣" ) , f i l e =Filename )<br />

cat ( format (EWs, n s m a l l =2, d i g i t s =3) ,<br />

sep=" , ␣" , f i l e =Filename , append=T)<br />

# 2 . M o e g l i c h k e i t<br />

<br />

cat ( p a s t e ( " Die ␣ E i g e n w e r t e ␣ d e r ␣ Matrix " ,<br />

names ( L ) , " s i n d ␣" ) , f i l e =Filename )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1021


cat ( ro<strong>und</strong> (EWs, 2 ) , sep=" , ␣" ,<br />

<br />

f i l e =Filename , append=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1022


L.2.4 Matrixoperationen<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 2 Aufgabe 4<br />

############################################<br />

# T e i l ( a )<br />

M m a t r i x ( 0 , nrow=6, n c o l =6)<br />

M 1/ ( row (M)+ c o l (M) 1)<br />

#T e i l ( b )<br />

det (M)<br />

#K o n d i t i o n<br />

v a l e i g e n (M, symmetric=TRUE) $ v a l u e s<br />

abs (max( v a l ) ) / abs ( min ( v a l ) )<br />

##oder<br />

<br />

kappa (M, e x a c t=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1023


#T e i l ( c )<br />

b 1 : 6<br />

s o l v e (M, b )<br />

#oder :<br />

qr . s o l v e (M, b )<br />

#e v t l wegen d e r s c h l e c h t e n K o n d i t i o n<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1024


L.2.5 Schreiben von Daten auf File<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 2 Aufgabe 5<br />

############################################<br />

#b i t t e beachten : Verwendung des Pfades<br />

# so koennen F i l e z u g r i f f e l e i c h t zum Laufen<br />

# a u f l o k a l e V e r z e i c h n i s s t r u k t u r e n g e b r a c h t werden<br />

###z . B . :<br />

PFAD "C : / e i g e n e ␣ D a t e i e n / A r b e i t /Uebungen/R/TeX/"<br />

Filename p a s t e (PFAD, " e r g . t x t " , c o l l a p s e="" , sep="" )<br />

# verwenden Matrix 3 aus Aufgabe 1 ( a )<br />

<br />

M3 m a t r i x ( rep ( c ( 2 : 7 ) , rep ( 6 , 6 ) ) , nrow=6, n c o l =6)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1025


M3 M3^( row (M3) 1)<br />

# Ausgabe<br />

cat ( " Die ␣ Matrix ␣M␣ l a u t e t ␣\n" ,<br />

<br />

sep=c ( "" , rep ( c ( rep ( " , ␣" , 5 ) , "\n" ) , 6 ) ) ,<br />

format ( t (M3) , d i g i t s =5, n s m a l l =3) ,<br />

f i l e =Filename )<br />

cat ( " Die ␣ E i g e n w e r t e ␣ d e r ␣ Matrix ␣M␣ s i n d ␣\n ( " ,<br />

sep=c ( "" , rep ( " , ␣" , 5 ) , "\n" ) ,<br />

format ( e i g e n (M3) $ v a l u e s , d i g i t s =5,<br />

n s m a l l =3) , " ) " , f i l e =Filename , append=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1026


L.3 Lösungsvorschläge Blatt 3<br />

L.3.1 Skalenniveaus<br />

Geschlecht (kategorielles Merkmal): Modus<br />

Schulnoten, Semesteranzahl (ordinale Merkmale): Modus,<br />

Median, mit Einschraenkungen ist auch Mittelwert bzw. Note<br />

2.3 sinnvoll (ist die 1 von der 2 so "weit"weg wie die 3 von<br />

der 4)<br />

Ideale Normalverteilung (metrisches Merkmal): Mittelwert,<br />

Median, Modus nicht sinnvoll — es sei denn als Modus der<br />

Dichte!!!<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1027


L.3.2 Univariate Analyse<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 3 Aufgabe 2<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# V o r a r b e i t :<br />

# Download von k r e d i t 1 . t x t aus Netz i n D a t e i<br />

# C : . . . \ k r e d i t 1 . t x t<br />

k r e d i t read . t a b l e ( f i l e ="C : . . . \ k r e d i t 1 . t x t " ,<br />

a t t a c h ( k r e d i t )<br />

<br />

names ( k r e d i t )<br />

header=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1028


stem ( L a u f z e i t )<br />

summary ( L a u f z e i t )<br />

stem ( K r e d i t h o e h e )<br />

summary ( K r e d i t h o e h e )<br />

t a b l e ( Zahlungsmoral )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

par ( mfrow=c ( 2 , 2 ) )<br />

b o x p l o t ( L a u f z e i t )<br />

t i t l e ( " Boxplot ␣ d e r ␣ L a u f z e i t " )<br />

h i s t ( L a u f z e i t )<br />

<br />

b o x p l o t ( K r e d i t h o e h e )<br />

t i t l e ( " Boxplot ␣ d e r ␣ K r e d i t h o e h e " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1029


h i s t ( K r e d i t h o e h e )<br />

detach ( )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1030


L.3.3 Elementare Datenanalyse<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 3 Aufgabe 3<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# V o r a r b e i t :<br />

# Download von baby . t x t aus Netz i n D a t e i<br />

# C : . . . \ baby . t x t<br />

a read . t a b l e (<br />

f i l e ="C : . . . / baby . t x t " , sep=" , " ,<br />

header=F , s k i p =2)<br />

# U e b e r l e s e n d e r e r s t e n b e i d e n Z e i l e n ( s k i p = . . )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1031


# T r e n n u n g s z e i c h e n i s t " ,"<br />

# Umwandeln i n e i n e Matrix<br />

a data . m a t r i x ( a )<br />

M a [ , 1 ] # wie i n Angabe Masse b e i Geburt<br />

R a [ , 2 ] # wie i n Angabe r e l . Massezuwachs<br />

# i n d e r e r s t e n Woche<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

# Histogramm von R<br />

h i s t (R)<br />

############################################<br />

# T e i l ( c )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1032


############################################<br />

# Berechnen e i n i g e r Kenngroessen<br />

# d e r e m p i r i s c h e n V e r t e i l u n g<br />

mean (M)<br />

median (M)<br />

v a r (M)<br />

sd (M)<br />

cor ( c b i n d (M, R) )<br />

max(M) # n i c h t Modalwert !<br />

# Modalwert<br />

modal as . m a t r i x ( t a b l e (M) )<br />

modal modal [ modal==max( modal ) ]<br />

# bzw .<br />

modal<br />

<br />

modal [ which . max( modal ) ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1033


############################################<br />

# T e i l ( d )<br />

############################################<br />

b o x p l o t (R)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1034


L.3.4 Univariate Konvexkombinationen<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 3 Aufgabe 4<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

n 100<br />

X rnorm ( n , 0 + 3£ rbinom ( n , 1 , 0 . 1 ) , 1)<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

stem (X)<br />

<br />

summary (X)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1035


############################################<br />

# T e i l ( c )<br />

############################################<br />

b o x p l o t (X)<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1036


L.3.5 Übungsaufgaben zur Stochastik<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 3 Aufgabe 5<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# W a h r s c h e i n l i c h k e i t , d a s s w e n i g s t e n s n<br />

# am g l e i c h e n Tag G e b u r t s t a g haben f u e r<br />

# n = 1 , . . . , 3 6 5<br />

Pcum 1 cumprod (365 1:365) / 365^(1:365)<br />

Pcum [ i s . na (Pcum ) ] 1<br />

# a u f g r u n d n u m e r i s c h e r S c h w i e r i g k e i t e n muss<br />

# Pcum irgendwann von Hand 1 a u f g e s e t z t<br />

<br />

# werden !<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1037


# e i n f a c h e r :<br />

PP0cumsum( l o g (365 1:365)) (1:365) £ l o g (365)<br />

Pcum 1 exp (PP0)<br />

# a l l e E r g e b n i s s e d i e k l e i n e r a l s 0 . 2 5 s i n d<br />

# <strong>und</strong> e i n e r dazu<br />

e r g e b n i s sum (Pcum


# k q<br />

pte 1 phyper ( q=23, m=120 , n =1:1000 , k=100)<br />

e r g e b n i s sum ( pte


N 20<br />

e i n z e l S o c k e 0 :N<br />

SockeninTrommel 2£N e i n z e l S o c k e<br />

PaarSockeninTrommel SockeninTrommel e i n z e l S o c k e<br />

# im S c h r i t t k kann entweder e i n b e r e i t s<br />

# a u s s e n l i e g e n d e r Socke gezogen werden <strong>und</strong><br />

# e s g i b t e i n Paar > Ppaarcond<br />

# oder n i c h t > Pnpaarcond<br />

Ppaarcond e i n z e l S o c k e / SockeninTrommel<br />

Pnpaarcond 1 Ppaarcond<br />

# w i e d e r l o g T r a f o zum s t a b i l e r e n<br />

# Rechnen mit F a k u l t a e t e n<br />

lPnpaarcond<br />

<br />

l o g ( Pnpaarcond )<br />

# W a h r s c h e i n l i c h k e i t b i s Zug k k e i n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1040


# Paar bekommen zu haben<br />

Pncum exp (cumsum( lPnpaarcond ) )<br />

# v e r s c h i e b e n um W a h r s c h e i n l i c h k e i t<br />

# d a s s i n Zug k e r s t e s Paar<br />

Ppaarcond c ( Ppaarcond , 0 )<br />

Pncum c ( 1 , Pncum)<br />

pte Pncum£ Ppaarcond<br />

# W a h r s c h e i n l i c h k e i t e n<br />

# pte<br />

sum ( pte ) # K o n t r o l l e<br />

# W a h r s c h e i n l i c h k e i t b i s zum k ten Zug<br />

# e i n Paar = 1 Pncum<br />

# cumsum ( pte )<br />

<br />

sum (cumsum( pte )


L.4 Lösungsvorschläge Blatt 4<br />

L.4.1 Visualisierung des (schwachen) Gesetzes der<br />

großen Zahlen<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 4 Aufgabe 1<br />

############################################<br />

# w i r s c h r e i b e n das ganze g l e i c h<br />

# a l s Funktion i n N <strong>und</strong> M<br />

LLN f u n c t i o n (N,M){<br />

############################################<br />

# T e i l ( a )<br />

<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1042


# Ziehen d e r W u e r f e l e r g e b n i s s e<br />

# (M£N Stueck )<br />

W sample ( seq ( 1 : 6 ) , s i z e=N£M, r e p l a c e=T)<br />

# d a r a u s A b l e i t e n des I n d i k a t o r s<br />

# "Habe e i n e 6"<br />

s (W==6)<br />

# i n Matrix > M^="r u n s " N^=S t i c h p r o b e n<br />

s m a t r i x ( s , M, N)<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

# f u e r j e d e d e r M S t i c h p r o b e n :<br />

# Berechnen des S t i c h p r o b e n m i t t e l w e r t e s<br />

S <br />

<br />

a p p l y ( s , 1 , mean )<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1043


# T e i l ( c )<br />

############################################<br />

h i s t ( S )<br />

b o x p l o t ( S )<br />

############################################<br />

#T e i l ( d )<br />

############################################<br />

}<br />

VN mean ( ( S 1/ 6)^2)<br />

r e t u r n ( l i s t (VN, S ) )<br />

############################################<br />

<br />

# A u s f u e h ren d e r Funktion<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1044


# v e r s c h i e d e n e n Werte<br />

n c ( 1 , 3 , 5 , 1 0 , 5 0 , 1 0 0 , 1 0 0 0 )<br />

# ohne f o r S c h l e i f e !<br />

e r g s a p p l y ( n , LLN , M=10000)<br />

VNsim m a t r i x ( u n l i s t ( e r g [ 1 , ] ) , n c o l =1)<br />

SS data . frame ( m a t r i x ( u n l i s t ( e r g [ 2 , ] ) ,<br />

nrow =10000 , n c o l=l e n g t h ( n ) ) )<br />

names ( SS ) p a s t e ( n )<br />

b o x p l o t ( SS )<br />

dev . o f f ( )<br />

## s u g g e r i e r t a b k l i n g e n mit 1/N<br />

# V o r f a k t o r e r r a t e n : 5/36<br />

<br />

# V e r g l e i c h T h e o r i e / S i m u l a t i o n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1045


VNtheo 1/36/n<br />

VNa c b i n d ( VNsim , VNtheo )<br />

matplot ( n , VNa , t y p e=" l " )<br />

par ( new=T)<br />

par ( mfrow=c ( 3 , 2 ) )<br />

myhist f u n c t i o n ( iS , XX, s i z , . . . ) {<br />

<br />

h i s t (XX[ , i S ] , main=p a s t e ( "n=" , s i z [ i S ] ) , . . . ) }<br />

s a p p l y ( 1 : 7 , myhist , XX=SS , s i z=n ,<br />

x l a b="S_i=r e l . ␣ H a u e f i g k e i t ␣ e i n e r ␣6" ,<br />

y l a b="#␣S_i =.. ␣ i n ␣ 10000 ␣ r u n s " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1046


L.4.2 Numerische Integration: Berechnung von <br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 4 Aufgabe 2<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

n 1000<br />

U m a t r i x ( r u n i f ( n=2£n , min=0, max=1) ,<br />

nrow=n , n c o l =2)<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

<br />

K ( (U[ ,1] 0.5)^2 + (U[ ,2] 0.5)^2


p i 4 sum (K) /n<br />

p i . emp 4£ p i 4<br />

############################################<br />

# T e i l ( c )<br />

############################################<br />

# Normalapproximation :<br />

# s q r t ( n ) ( p_n p ) > N( 0 , p(1 p ) )<br />

# mit p_n r e l a t i v e r A n t e i l s w e r t ;<br />

# k o n s e r v a t i v : p(1 p) 10^ 6)=<br />

# P( s q r t ( n ) | p_n p|> s q r t ( n ) 10^ 6)<br />

# ~ P ( | N(0 , 1 /4)| > s q r t ( n ) 10^ 6) != 0 . 9 5<br />

# Phi (2 s q r t ( n ) 10^ 6) >= 0.975<br />

# 2 s q r t ( n ) 10^ 6 >= Phi ^ 1(0.975)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1048


# s q r t ( n ) >= 2 Phi ^ 1(0.975) 10^6<br />

# n >= 4 x 10^12<br />

# Z u s a e t z l i c h : ( E r l a e u t e r u n g s p a e t e r )<br />

# e i n p l o t t e n i n e i n e n K r e i s<br />

############################################<br />

# Berechnung <strong>und</strong> P l o t des K r e i s e s<br />

############################################<br />

x seq ( from =0, to =1, by =0.001)<br />

y1 0 . 5 + s q r t ( x x ^2)<br />

y2 0 . 5 s q r t ( x x ^2)<br />

l i 0.2<br />

r e 1 . 3<br />

par ( c o l =1)<br />

<br />

p l o t ( x , y1 , t y p e=" l " , x l i m=c ( l i , r e ) , y l i m=c ( l i , r e ) ,<br />

x l a b="x Achse " , y l a b="y Achse " , lwd =2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1049


l i n e s ( x , y2 , lwd =2)<br />

# P l o t des Quadrates<br />

l i n e s ( c ( 0 , 1 , 1 , 0 , 0 ) , c ( 0 , 0 , 1 , 1 , 0 ) , lwd =2)<br />

# P l o t d e r Punkte<br />

im . K r e i s U£K<br />

im . K r e i s m a t r i x ( im . K r e i s [ im . K r e i s !=0 ] ,<br />

aus . K r e i s U£(1 K)<br />

par ( c o l =3, pch=4)<br />

<br />

nrow=sum (K) , n c o l =2)<br />

aus . K r e i s m a t r i x ( aus . K r e i s [ aus . K r e i s !=0 ] ,<br />

par ( c o l =2, pch=1)<br />

nrow=sum(1 K) , n c o l =2)<br />

p o i n t s ( im . K r e i s [ , 1 ] , im . K r e i s [ , 2 ] )<br />

p o i n t s ( aus . K r e i s [ , 1 ] , aus . K r e i s [ , 2 ] )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1050


par ( c o l =1)<br />

t i t l e ( p a s t e ( " Schaetzung ␣ d e r ␣ K r e i s z a h l ␣ p i ␣=␣" ,<br />

<br />

ro<strong>und</strong> ( pi , 6 ) ) )<br />

legend ( l i , re , legend=c ( "im␣ K r e i s " , " a u s s e r h a l b " ) ,<br />

pch=c ( 1 , 4 ) , c o l=c ( 2 , 3 ) )<br />

t e x t ( 0 . 5 , 0.1 , l a b e l s=p a s t e ( " Der ␣ a k t u e l l e ␣" ,<br />

" S c h a e t z w e r t ␣ f u e r ␣ p i ␣ i s t " , p i . emp ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1051


L.4.3 Berechnung von ############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 4 Aufgabe 3<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# X~N( 0 , 1 )<br />

# E [Y]=E [X^2]=1<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

<br />

M 10000<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1052


n 100<br />

x m a t r i x ( r c h i s q (M£n , df =1) , nrow=M, n c o l=n )<br />

mws a p p l y ( x , 1 , mean )<br />

v a r g v a r (mws)<br />

p r i n t ( c ( mean (mws) , v a r g ) )<br />

# a n a l y t i s c h :<br />

# Var [ ave (Y_i ) ] =<br />

# = Var [ ave (X_i ^2)] =<br />

# = (E [X^4] E [X^2]^2) /n = 2/n<br />

############################################<br />

# T e i l ( c )<br />

############################################<br />

#Abschneidepunkt wo<br />

<br />

# i n t_c^ I n f x f_x dx < 10^ 6<br />

# V a r i a b l e n t r a f o e r g i b t<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1053


# i n t_c ’^ I n f gamma( a=3/ 2 ) [ x ] dx < 10^ 6<br />

# Abschätzung des I n t e g r a l s durch<br />

# gamma( a=5/ 2 ) [ x ]<br />

T qgamma(1 10^ 6, shape=5/ 2)<br />

U m a t r i x ( r u n i f (M£n , min=0, max=T) , nrow=M, n c o l=n )<br />

f s d c h i s q ( df =1, x=U) £U<br />

mws2 T£ a p p l y ( f s , 1 , mean )<br />

varg2 v a r (mws2)<br />

p r i n t ( c ( mean (mws2 ) , varg2 ) )<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

U21 U [ , 1 : ( n/ 2 ) ]<br />

<br />

U22 T U21<br />

f s 1 d c h i s q ( df =1, x=U21 ) £U21<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1054


f s 2 d c h i s q ( df =1, x=U22 ) £U22<br />

mws3 T£ a p p l y ( c b i n d ( fs1 , f s 2 ) , 1 , mean )<br />

varg3 v a r (mws3)<br />

p r i n t ( c ( mean (mws3 ) , varg3 ) )<br />

############################################<br />

# T e i l ( e )<br />

############################################<br />

x m a t r i x ( rnorm (M£n ) , nrow=M, n c o l=n )<br />

mws4 a p p l y ( x ^2 , 1 , mean )<br />

varg4 v a r (mws4)<br />

p r i n t ( c ( mean (mws4 ) , varg4 ) )<br />

############################################<br />

<br />

# E r w e i t e r u n g : a n t i t h e t i s c h mit c h i s q<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1055


V m a t r i x ( r u n i f (M£n ) , nrow=M, n c o l=n )<br />

V21 V [ , 1 : ( n/ 2 ) ]<br />

V22 1 V21<br />

x21 q c h i s q ( p=V21 , df =1)<br />

x22 q c h i s q ( p=V22 , df =1)<br />

mws6 a p p l y ( c b i n d ( x21 , x22 ) , 1 , mean )<br />

varg6 v a r (mws6)<br />

p r i n t ( c ( mean (mws6 ) , varg6 ) )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1056


L.4.4 Konfidenzintervalle, Bootstrap<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 4 Aufgabe 4<br />

############################################<br />

n 21<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

s t i c h p a rnorm ( n )<br />

meda median ( s t i c h p a )<br />

# Berechnung d e r Bandweiten mit<br />

# v e r s c h i e d e n e n Methoden<br />

d1 d e n s i t y ( s t i c h p a , n=1, from=meda ,<br />

<br />

to=(meda +0.01) , bw=bw . nrd0 ( s t i c h p a ) ) $y<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1057


d2 d e n s i t y ( s t i c h p a , n=1, from=meda ,<br />

to=(meda +0.01) , bw=bw . nrd ( s t i c h p a ) ) $y<br />

#d1 d e n s i t y ( s t i c h p a , n=1, from=meda ,<br />

# to=(meda +0.01) , bw=bw . ucv ( s t i c h p a ) ) $y<br />

#d2 d e n s i t y ( s t i c h p a , n=1, from=meda ,<br />

# to=(meda0 . 0 1 ) , bw=bw . bcv ( s t i c h p a ) ) $y<br />

s t r e u a 1/ (2 £ s q r t ( n ) £ ( d1+d2 ) / 2)<br />

KIa c ( qnorm ( 0 . 0 2 5 ) £ s t r e u a , qnorm ( 0 . 9 7 5 ) £ s t r e u a )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

N 10000<br />

s t i c h p b<br />

<br />

m a t r i x ( rnorm ( n£N) , nrow=N, n c o l=n )<br />

medb a p p l y ( s t i c h p b , 1 , median )<br />

medb . emp mean ( medb )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1058


s t r e u b sd ( medb )<br />

KIb q u a n t i l e ( medb , c ( 0 . 0 2 5 , 0 . 9 7 5 ) )<br />

############################################<br />

# T e i l ( c )<br />

############################################<br />

M 1000<br />

s t i c h p c m a t r i x ( sample ( s t i c h p a , s i z e=n£M,<br />

r e p l a c e=T) , nrow=M, n c o l=n )<br />

medc a p p l y ( s t i c h p c , 1 , median )<br />

medc . bs mean ( medc )<br />

s t r e u c sd ( medc )<br />

KIc q u a n t i l e ( medc , c ( 0 . 0 2 5 , 0 . 9 7 5 ) )<br />

############################################<br />

# E r w e i t e r u n g<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1059


############################################<br />

m 25<br />

medf . bs numeric (m)<br />

s t r e u f numeric (m)<br />

K I f m a t r i x ( 0 , nrow=m, n c o l =2)<br />

f o r ( i i n 1 :m)<br />

{<br />

K I f [ i , ]<br />

<br />

q u a n t i l e ( medf , c ( 0 . 0 2 5 , 0 . 9 7 5 ) )<br />

}<br />

s t i c h p f 1 rnorm ( n )<br />

s t i c h p f m a t r i x ( sample ( s t i c h p f 1 , s i z e=n£M,<br />

r e p l a c e=T) , nrow=M, n c o l=n )<br />

medf a p p l y ( s t i c h p f , 1 , median )<br />

medf . bs [ i ] mean ( medf )<br />

s t r e u f [ i ] sd ( medf )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1060


medf . bsm mean ( medf . bs )<br />

s t r e u f . bsm mean ( s t r e u f )<br />

K I f . bsm a p p l y ( KIf , 2 , mean )<br />

############################################<br />

# T e i l ( d ) : V e r g l e i c h d e r E r g e b n i s s e<br />

############################################<br />

cat ( "============================================\n" )<br />

cat ( " Die ␣ E r g e b n i s s e ␣ f u e r ␣ den ␣ Median : \ n" )<br />

cat ( " T e i l ( a ) : \ t " , meda , "\n" )<br />

cat ( " T e i l ( b ) : \ t " , medb . emp , "\n" )<br />

cat ( " T e i l ( c ) : \ t " , medc . bs , "\n" )<br />

cat ( " T e i l ( c ) ␣ E r w e i t e r u n g : \ t " , medf . bsm , "\n" )<br />

cat ( "============================================\n" )<br />

cat ( " Die ␣ E r g e b n i s s e ␣ f u e r ␣ d i e ␣ Streuung : \ n" )<br />

<br />

cat ( " T e i l ( a ) : \ t " , s t r e u a , "\n" )<br />

cat ( " T e i l ( b ) : \ t " , s t r e u b , "\n" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1061


cat ( " T e i l ( c ) : \ t " , s t r e u c , "\n" )<br />

cat ( " T e i l ( c ) ␣ E r w e i t e r u n g : \ t " , s t r e u f . bsm , "\n" )<br />

cat ( "=============================================\n" )<br />

cat ( " Die ␣ K o n f i d e n z i n t e r v a l l e : \ n" )<br />

cat ( " T e i l ( a ) : \ t " , KIa , "\n" )<br />

cat ( " T e i l ( b ) : \ t " , KIb , "\n" )<br />

cat ( " T e i l ( c ) : \ t " , KIc , "\n" )<br />

cat ( " T e i l ( c ) ␣ E r w e i t e r u n g : \ t " , K I f . bsm , "\n" )<br />

cat ( "=============================================\n" )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1062


L.5 Lösungsvorschläge Blatt 5<br />

L.5.1 Maximale Lücke<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 5 Aufgabe 1<br />

############################################<br />

############################################<br />

# z u e r s t mit " f o r " S c h l e i f e<br />

############################################<br />

# Funktion z u r Berechnung d e r Minima<br />

# U1 i s t e i n Array d e r Dimension n x k x M<br />

minima f u n c t i o n (U1){<br />

<br />

M dim (U1 ) [ 3 ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1063


n dim (U1 ) [ 1 ]<br />

minima v e c t o r ( " numeric " , l e n g t h=M)<br />

f o r ( i i n 1 :M){<br />

U2 U1 [ , , i ]<br />

e r g I n f<br />

f o r ( j i n 1 : n )<br />

f o r ( k i n 1 : n ){<br />

i f ( k !=j ){<br />

}<br />

e l s e {<br />

}<br />

vek U2 [ j ,] U2 [ k , ]<br />

e r g 1 t ( vek ) %£% vek<br />

e r g 1 I n f<br />

i f ( e r g > e r g 1 ) e r g e r g 1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1064


}<br />

}<br />

k 2<br />

M 500<br />

# n = 5<br />

n 5<br />

}<br />

minima [ i ] e r g<br />

r e t u r n ( minima )<br />

U1 <br />

<br />

m a t r i x ( r u n i f (M£k£n , 0 , 1 ) , nrow=M£n , n c o l=k )<br />

U1 a r r a y (U1 , dim=c ( n , k ,M) )<br />

Min1 minima (U1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1065


# n = 25<br />

n 25<br />

U1 m a t r i x ( r u n i f (M£k£n , 0 , 1 ) , nrow=M£n , n c o l=k )<br />

U1 a r r a y (U1 , dim=c ( n , k ,M) )<br />

Min2 minima (U1)<br />

# n = 100<br />

n 100<br />

U1 m a t r i x ( r u n i f (M£k£n , 0 , 1 ) , nrow=M£n , n c o l=k )<br />

U1 a r r a y (U1 , dim=c ( n , k ,M) )<br />

Min3 minima (U1)<br />

# n = 500<br />

n 500<br />

<br />

U1 m a t r i x ( r u n i f (M£k£n , 0 , 1 ) , nrow=M£n , n c o l=k )<br />

U1 a r r a y (U1 , dim=c ( n , k ,M) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1066


Min4 minima (U1)<br />

summary ( Min1 )<br />

summary ( Min2 )<br />

summary ( Min3 )<br />

summary ( Min4 )<br />

# g r u p p i e r t e r Boxplot<br />

b o x p l o t ( l i s t ( Min1=Min1 , Min2=Min2 , Min3=Min3 ,<br />

# neues G r a p h i k f e n s t e r<br />

windows ( )<br />

par ( mfrow=c ( 2 , 2 ) )<br />

<br />

Min4=Min4 ) , main=" B o x p l o t s " )<br />

# 2 x 2 B i l d e r im G r a p h i k f e n s t e r<br />

h i s t ( Min1 , main="n=5" )<br />

h i s t ( Min2 , main="n=25" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1067


h i s t ( Min3 , main="n=100" )<br />

h i s t ( Min4 , main="n=500" )<br />

############################################<br />

# v e k t o r w e r t i g e A l t e r n a t i v e im V e r g l e i c h<br />

# I d e e nur 2 d i m e n s i o n e n > h i e r " f o r "<br />

# n i c h t schlimm<br />

# a b e r v i e l e Beobachtungen > h i e r " f o r "<br />

# schlimm<br />

############################################<br />

# v e k t o r w e r t i g e F o r m u l i e r u n g<br />

l u e c k e . vec f u n c t i o n ( n ) { #e r s t d i e x K o o r d i n a t e<br />

X . x r u n i f ( n )<br />

# e r z e u g e e i n e Matrix mit i d e n t i s c h e n Z e i l e n<br />

X . xx1 m a t r i x (X . x , nrow=n , n c o l=n )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1068


# M a t r t i x mit i d e n t i s c h e n S p a l t e n<br />

X . xx2 t (X . xx1 )<br />

# Matrix mit E i n t r a e g e n (X_i X_j )^2_{ i , j }<br />

X . xd (X . xx1 X . xx2 )^2<br />

# D i a g o n a l e aus Minimumbildung a u s s c h l i e s s e n<br />

X . xd [ row (X . xd)==c o l (X . xd ) ] 2<br />

# P l a t z machen<br />

rm(X . xx1 , X . xx2 )<br />

# das g l e i c h e f u e r d i e y K o o r d i n a t e<br />

X . y r u n i f ( n )<br />

X . yy1<br />

<br />

m a t r i x (X . y , nrow=n , n c o l=n )<br />

X . yy2 t (X . yy1 )<br />

X . yd (X . yy1 X . yy2 )^2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1069


X . yd [ row (X . yd)==c o l (X . yd ) ] 2<br />

# P l a t z machen<br />

rm(X . yy1 , X . yy2 )<br />

# A d d i t i o n d e r K o o r d i n a t e n<br />

}<br />

X . d X . xd + X . yd<br />

r e t u r n ( min ( s q r t (X . d ) ) )<br />

# Berechnen von M S i m u l a t i o n s d r u c h g a e n g e n<br />

# ohne " f o r "<br />

d l u e c k e . vec f u n c t i o n (X, n ){ l u e c k e . vec ( n )}<br />

Mluecke<br />

<br />

f u n c t i o n (M, n ){<br />

s a p p l y ( 1 :M, d l u e c k e . vec , n=n )}<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1070


# Berechnen von M S i m u l a t i o n s d r u c h g a e n g e n<br />

# ohne " f o r " f u e r v e r s c h i e d e n e n<br />

Mnluecke f u n c t i o n (X, M, f k t=min ){<br />

M 100<br />

<br />

f k t ( Mluecke (M=M, n=X) ) }<br />

n c ( 5 , 25 , 100 , 500)<br />

Minluecke f u n c t i o n (M, n , a f k t=min ){<br />

s a p p l y ( n , Mnluecke ,M=M, f k t=a f k t )}<br />

Minluecke (M=M, n=n , summary )<br />

Minluecke (M=M, n=n , h i s t )<br />

Minluecke (M=M, n=n , b o x p l o t )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1071


L.5.2 Buffons Nadelproblem — Berechnung von <br />

II<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 5 Aufgabe 2<br />

############################################<br />

############################################<br />

# H i l f e s t e l l u n g f u e r B u f f o n s Nadel Problem<br />

# Zeichnen d e r S t r e i f e n Enden<br />

############################################<br />

# S t r e i f e n Abstand<br />

d 2<br />

############################################<br />

<br />

# damit das ganze n i c h t p e r s p e k t i v i s c h<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1072


# v e r z e r r t w i r k t , s o l l das F e n s t e r e i n<br />

# Quadrat , h i e r [ 10 ,10]^2 , a b b i l d e n<br />

############################################<br />

# x G i t t e r w e r t e<br />

x seq ( 10 , 10 , by=d )<br />

m l e n g t h ( x )<br />

# w i r verwenden d i e Funktion " l i n e s "<br />

# d i e s e v e r l a n g t j e w e i l s e i n Argument x <strong>und</strong> y :<br />

# j e w e i l s e i n e L i s t e d e r x [ y] K o o r d i n a t e n<br />

# d e r L i n i e n d e r Form<br />

# x1 1. Endpunkt , x1 2. Endpunkt ,NA (zum Trennen ! ) ,<br />

# x2 1. Endpunkt , x2 2. Endpunkt ,NA (zum Trennen ! ) ,<br />

# . . .<br />

# ( y e n t s p r e c h e n d )<br />

<br />

# d i e Y K o o r d i n a t e n d e r S t r e i f e n Enden s i n d<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1073


# j e w e i l s 10 <strong>und</strong> 10<br />

y x£0 10 # d i e u n t e r e n K o o r d i n a t e n<br />

# j e t z t Erzeugung e i n e r Matrix xx d e r Form<br />

# x1 1,x1 2,NA<br />

# x2 2,x2 2,NA<br />

# . . . .<br />

# xm 1,xm 2,NA<br />

#<br />

# yy e n t s p r e c h e n d<br />

xx c b i n d ( x , x , x£NA)<br />

yy c b i n d ( y , y , y£NA)<br />

# Umwandeln i n d i e e n t s p r e c h e n d e n L i s t e n<br />

xx as . v e c t o r ( t ( xx ) )<br />

<br />

yy as . v e c t o r ( t ( yy ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1074


# Erzeugen des K o o r d i n a t e n s s y s t e m s<br />

# ( e i g e n t l i c h P l o t d e r Punkte ( 10, 10) <strong>und</strong> ( 1 0 , 1 0 )<br />

# a b e r d i e b e i d e n Punkte werden durch t y p e="n"<br />

# n i c h t g e p l o t t e t ; e b e n f a l l s k e i n e<br />

# x <strong>und</strong> y Achsenbezeichnung )<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

p l o t ( c ( 10 ,10) , c ( 10 ,10) , t y p e="n" , x l a b="" , y l a b="" ) R/S-plus <strong>für</strong><br />

# nun d i e L i n i e n<br />

l i n e s ( x=xx , y=yy )<br />

############################################<br />

# T e i l ( a ) : Ziehung d e r Nadeln<br />

############################################<br />

l 1<br />

N 10000<br />

<br />

# N a d e l m i t t e l p u n k t e<br />

<br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1075


xmid r u n i f (N, min= 10, max=10)<br />

ymid r u n i f (N, min= 10, max=10)<br />

# Winkel<br />

a n g l r u n i f (N, min=0,max=2£ p i )<br />

# Umrechnung i n Endpunkte<br />

c a n g l cos ( a n g l )<br />

s a n g l s i n ( a n g l )<br />

x l xmid l £ c a n g l /2<br />

x r xmid+l £ c a n g l /2<br />

y l ymid l £ s a n g l /2<br />

y r ymid+l £ s a n g l /2<br />

############################################<br />

# T e i l ( b ) / ( c ) : S c h n i t t von Nadel i mit<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1076


# e i n e r S t r e i f e n g r e n z e j , f a l l s<br />

# s i g n ( x l [ i ] M[ i , j ]) s i g n ( x r [ i ] M[ i , j ] )<br />

############################################<br />

s x l s i g n ( x l t ( m a t r i x ( x , l e n g t h ( x ) , N) ) )<br />

s x r s i g n ( x r t ( m a t r i x ( x , l e n g t h ( x ) , N) ) )<br />

i n d a p p l y ( ( s x r £ s x l == 1), 1 , sum )<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

d l 1e 3<br />

dr 1e 3<br />

Pexakt f u n c t i o n ( n , pr=1/ pi , ob=1/ ( p i+d l ) ,<br />

pbinom ( n£ob , s i z e=n ,<br />

<br />

}<br />

unt=1/ ( p i+dr ) ) {#<br />

prob=pr ) pbinom ( n£ unt , s i z e=n , prob=pr )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1077


Pexakt (10^6)<br />

Pexakt (10^7)<br />

Pexakt (10^8)<br />

Pexakt ( . 8 5 £ 10^8)<br />

Pexakt ( . 8 2 £ 10^8)<br />

Pexakt ( . 8 1 £ 10^8)<br />

Pexakt ( . 8 1 5 £ 10^8)<br />

Pexakt ( . 8 1 3 £ 10^8)<br />

Pexakt ( . 8 1 2 £ 10^8)<br />

Pexakt ( . 8 1 2 5 £ 10^8)<br />

Pexakt ( . 8 1 2 3 £ 10^8)<br />

Pexakt ( . 8 1 2 1 £ 10^8)<br />

Pexakt ( . 8 1 2 0 £ 10^8)<br />

Pexakt ( . 8 1 2 0 5 £ 10^8)<br />

<br />

Pexakt ( . 8 1 2 0 1 £ 10^8)<br />

Pexakt (81201000)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1078


Pexakt (81200000)<br />

# zu ungenau !<br />

###<br />

############################################<br />

# T e i l ( e )<br />

############################################<br />

# V o r b e r e i t u n g f u e r l i n e s<br />

XX c b i n d ( x l , xr , x r £NA)<br />

YY c b i n d ( y l , yr , y r £NA)<br />

l i n e s ( l i s t ( x=as . v e c t o r ( t (XX) ) , y=as . v e c t o r ( t (YY) ) ) ,<br />

l t y =1)<br />

# S c h n i t t Nadeln i n r o t<br />

XXc XX[ i n d ==1,]<br />

YYc YY[ i n d ==1,]<br />

<br />

l i n e s ( l i s t ( x=as . v e c t o r ( t (XXc ) ) , y=as . v e c t o r ( t (YYc ) ) ) ,<br />

l t y =1, c o l=" r e d " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1079


1/mean ( i n d )<br />

############################################<br />

# T e i l ( f ) : Methode B l a t t 4 Aufgabe 2 v i e l<br />

# b e s s e r ( ca . Faktor 100 mal w e n i g e r<br />

# Beobachtungen n o e t i g f u e r g l e i c h e<br />

# G e n a u i g k e i t )<br />

############################################<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1080


L.5.3 Dichteplot<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 5 Aufgabe 3<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

d i c h t e p l o t f u n c t i o n ( v t l g , typ , . . . ) {<br />

q u a r t numeric ( 3 )<br />

f o r ( i i n 1 : 3 )<br />

e v a l ( p a r s e ( t e x t=p a s t e ( " q u a r t [ i ] q" , v t l g ,<br />

" ( i / 4 , ␣ . . . ) " , sep="" ) ) )<br />

e v a l ( p a r s e ( t e x t=p a s t e ( " l i n k s q" ,<br />

<br />

v t l g , " ( 0 . 0 5 , ␣ . . . ) " , sep="" ) ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1081


e v a l ( p a r s e ( t e x t=p a s t e ( " r e c h t s q" ,<br />

i f ( typ==" d i s k r e t " ){<br />

}<br />

e l s e {<br />

v t l g , " ( 0 . 9 5 , ␣ . . . ) " , sep="" ) ) )<br />

x seq ( from=l i n k s , to=r e c h t s , by=1)<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( " p l o t ( x , d" , v t l g , " ( x , . . . ) , " ,<br />

" t y p e=\" s \" , ␣ y l a b=\"WS Funktion \" ) " ,<br />

sep="" ) ) )<br />

t i t l e ( p a s t e ( " B e i s p i e l ␣ e i n e r ␣WS Funktion " ,<br />

" f u e r ␣ d i e ␣ V e r t e i l u n g s k l a s s e " , v t l g ) )<br />

x seq ( from=l i n k s , to=r e c h t s , by =0.01)<br />

e v a l ( p a r s e ( t e x t=<br />

p a s t e ( " p l o t ( x , d" , v t l g , " ( x , . . . ) , " ,<br />

" t y p e=\" l \" , ␣ y l a b=\" D i c h t e \" ) " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1082


}<br />

}<br />

sep="" ) ) )<br />

t i t l e ( p a s t e ( " B e i s p i e l ␣ e i n e s ␣ D i c h t e p l o t s " ,<br />

r e t u r n ( as . l i s t ( q u a r t ) )<br />

" f u e r ␣ d i e ␣ V e r t e i l u n g s k l a s s e " , v t l g ) )<br />

############################################<br />

#T e i l ( b )<br />

############################################<br />

# prompt ( d i c h t e p l o t )<br />

# E r z e u g t D a t e i d i c h t e p l o t . Rd im a k t u e l l e n<br />

# V e r z e i c h n i s<br />

# E i n f a c h e s<br />

<br />

E d i t i e r e n i n einem E d i t o r m o e g l i c h<br />

# A n s c h l i e s s e n d : K opieren d e r D a t e i i n das<br />

# V e r z e i c h n i s "man"<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1083


# d e r l i b r a r y , zu d e r d i e Funktion g e h o e r t<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1084


L.5.4 Schleifen – Schleifenvermeidung –<br />

Laufzeitvergleich<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 5 Aufgabe 4<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

f o r . s c h l e i f e f u n c t i o n ( a , b ){<br />

n l e n g t h ( a )<br />

m l e n g t h ( b )<br />

s numeric (m)<br />

f o r ( i i n 1 :m)<br />

<br />

f o r ( j i n 1 : n ){<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1085


}<br />

}<br />

i t e r i 0<br />

<br />

i f ( a [ j ]


}<br />

}<br />

i t e r j 0<br />

w h i l e ( i t e r j < n ){<br />

}<br />

r e t u r n ( s )<br />

s<br />

<br />

numeric (m)<br />

i t e r j i t e r j + 1<br />

i f ( a [ i t e r j ]


}<br />

r e p e a t {<br />

}<br />

i t e r i i t e r i + 1<br />

i t e r j 0<br />

r e p e a t {<br />

}<br />

i t e r j i t e r j + 1<br />

i f ( a [ i t e r j ]


}<br />

}<br />

M o u t e r ( as . numeric ( names ( at ) ) , b , "


############################################<br />

# T e i l ( c )<br />

############################################<br />

a r p o i s (5000 , lambda=8)<br />

b r p o i s (50 , lambda =12)<br />

system . time ( e r g . f o r v e r g l e i c h ( a=a , b=b ,<br />

v e r f a h r e n=" f o r . s c h l e i f e " ) )<br />

system . time ( e r g . w h i l e v e r g l e i c h ( a=a , b=b ,<br />

v e r f a h r e n=" w h i l e . s c h l e i f e " ) )<br />

system . time ( e r g . r e p e a t v e r g l e i c h ( a=a , b=b ,<br />

v e r f a h r e n=" r e p e a t . s c h l e i f e " ) )<br />

system . time ( e r g . k e i n e<br />

<br />

v e r g l e i c h ( a=a , b=b ,<br />

v e r f a h r e n=" k e i n e . s c h l e i f e " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1090


L.5.5 Adaptives Verfahren zur 2-dimensionalen<br />

numerischen Integration<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 5 Aufgabe 5<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

a r e a 2 f u n c t i o n ( f , a , b , c , d , M=10, l i m i t =10,<br />

{<br />

# p r i n t ( i t e r )<br />

i t e r =1, eps=1e 5, . . . )<br />

x1 r u n i f (M, min=a , max=b )<br />

y1 r u n i f (M, min=c , max=d )<br />

<br />

i n t 1 ( b a ) £ ( d c ) £mean ( f ( x1 , y1 , . . . ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1091


# c a t (" i n t 1 : \ t " , i n t 1 , "\n ")<br />

x2 r u n i f (M, min=a , max=b )<br />

y2 r u n i f (M, min=c , max=d )<br />

i n t 2 ( b a ) £ ( d c ) £mean ( f ( x2 , y2 , . . . ) )<br />

# c a t (" i n t 2 : \ t " , i n t 2 , "\n ")<br />

i f ( abs ( i n t 1 i n t 2 ) < eps ) r e t u r n ( ( i n t 1+i n t 2 ) / 2)<br />

i f ( l i m i t ==0)<br />

{<br />

}<br />

i f ( ( i t e r%%2)==0)<br />

{<br />

warning ( " Maximale ␣ R e k u r s i o n s t i e f e ␣ e r r e i c h t ! " )<br />

r e t u r n ( ( i n t 1+i n t 2 ) / 2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1092


}<br />

}<br />

e l s e<br />

{<br />

}<br />

m ( c+d ) /2<br />

( R e c a l l ( f , a , b , c , m, l i m i t=l i m i t 1,<br />

i t e r=i t e r +1, eps=eps , . . . ) +<br />

R e c a l l ( f , a , b , m, d , l i m i t=l i m i t 1,<br />

m ( a+b ) /2<br />

i t e r=i t e r +1, eps=eps , . . . ) )<br />

( R e c a l l ( f , a , m, c , d , l i m i t=l i m i t 1,<br />

i t e r=i t e r +1, eps=eps , . . . ) +<br />

R e c a l l ( f , m, b , c , d , l i m i t=l i m i t 1,<br />

i t e r=i t e r +1, eps=eps , . . . ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1093


############################################<br />

# T e i l ( b )<br />

############################################<br />

f b e t a . tmp f u n c t i o n ( x , y , alph , bet )<br />

{<br />

}<br />

a s s i g n ( " v a l x " , c ( v a l x , x ) , e n v i r=s y s . frame ( 0 ) )<br />

a s s i g n ( " v a l y " , c ( v a l y , y ) , e n v i r=s y s . frame ( 0 ) )<br />

i f ( x^2+y^2 > 1)<br />

{<br />

}<br />

e l s e<br />

r e t u r n ( 0 )<br />

{ ww s q r t ( x^2+y ^2)^( alph 1)<br />

wwww£(1 s q r t ( x^2+y ^2))^( bet 1)<br />

r e t u r n (ww)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1094


}<br />

a s s i g n ( " v a l x " , NULL , e n v i r=s y s . frame ( 0 ) )<br />

a s s i g n ( " v a l y " , NULL , e n v i r=s y s . frame ( 0 ) )<br />

system . time ( i n t a r e a 2 ( f b e t a . tmp , a= 1, b=1, c= 1,<br />

par ( pch="£" )<br />

p l o t ( v a l x , v a l y , t y p e="p" ,<br />

<br />

d=1, M=10, l i m i t =10, a l p h =3,<br />

bet =2))<br />

x l a b="x Achse " , y l a b="y Achse " )<br />

t i t l e ( " A u s w e r t u n g s s t e l l e n ␣ d e r ␣ I n t e g r a t i o n " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1095


L.6 Lösungsvorschläge Blatt 6<br />

L.6.1 Visualisierung<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 6 Aufgabe 1<br />

############################################<br />

# PFAD "C : / E i gene D a t e i e n / . . . /"<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# B l a t t 4 Aufgabe 2<br />

n 1000<br />

<br />

U m a t r i x ( r u n i f ( n=2£n , min=0, max=1) ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1096


nrow=n , n c o l =2)<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

K ( (U[ ,1] 0.5)^2 + (U[ ,2] 0.5)^2 N( 0 , p(1 p ) )<br />

# mit p_n r e l a t i v e r A n t e i l s w e r t ;<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1097


# k o n s e r v a t i v : p(1 p) 10^ 6)=<br />

# P( s q r t ( n ) | p_n p|> s q r t ( n ) 10^ 6)<br />

# ~ P ( | N(0 , 1 /4)| > s q r t ( n ) 10^ 6) != 0 . 9 5<br />

# Phi (2 s q r t ( n ) 10^ 6) >= 0.975<br />

# 2 s q r t ( n ) 10^ 6 >= Phi ^ 1(0.975)<br />

# s q r t ( n ) >= 2 Phi ^ 1(0.975) 10^6<br />

# n >= 4 x 10^12<br />

############################################<br />

# Berechnung <strong>und</strong> P l o t des K r e i s e s<br />

############################################<br />

x seq ( from =0, to =1, by =0.001)<br />

<br />

y1 0 . 5 + s q r t ( x x ^2)<br />

y2 0 . 5 s q r t ( x x ^2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1098


l i 0.2<br />

r e 1 . 3<br />

par ( c o l =1)<br />

p l o t ( x , y1 , t y p e=" l " , x l i m=c ( l i , r e ) , y l i m=c ( l i , r e ) ,<br />

x l a b="x Achse " , y l a b="y Achse " , lwd =2)<br />

l i n e s ( x , y2 , lwd =2)<br />

# P l o t des Quadrates<br />

l i n e s ( c ( 0 , 1 , 1 , 0 , 0 ) , c ( 0 , 0 , 1 , 1 , 0 ) , lwd =2)<br />

# P l o t d e r Punkte<br />

im . K r e i s U£K<br />

im . K r e i s m a t r i x ( im . K r e i s [ im . K r e i s !=0 ] ,<br />

aus . K r e i s U£(1 K)<br />

<br />

nrow=sum (K) , n c o l =2)<br />

aus . K r e i s m a t r i x ( aus . K r e i s [ aus . K r e i s !=0 ] ,<br />

nrow=sum(1 K) , n c o l =2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1099


par ( c o l =2, pch=1)<br />

p o i n t s ( im . K r e i s [ , 1 ] , im . K r e i s [ , 2 ] )<br />

par ( c o l =3, pch=4)<br />

p o i n t s ( aus . K r e i s [ , 1 ] , aus . K r e i s [ , 2 ] )<br />

par ( c o l =1)<br />

t i t l e ( p a s t e ( " Schätzung ␣ d e r ␣ K r e i s z a h l ␣ p i ␣=␣" ,<br />

ro<strong>und</strong> ( pi , 6 ) ) )<br />

legend ( l i , re , legend=c ( "im␣ K r e i s " , " a u s s e r h a l b " ) ,<br />

t e x t ( 0 . 5 , 0.1 ,<br />

pch=c ( 1 , 4 ) , c o l=c ( 2 , 3 ) )<br />

l a b e l s=p a s t e ( " Der ␣ a k t u e l l e ␣ S c h ä t z w e r t ␣ f ü r ␣ p i ␣ i s t " ,<br />

p i . emp ) )<br />

#dev . o f f ( )<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1100


# T e i l ( b )<br />

############################################<br />

# B l a t t 5 Aufgabe 1<br />

l u e c k e . vec f u n c t i o n ( n ) { #e r s t d i e x K o o r d i n a t e<br />

X . x r u n i f ( n )<br />

# e r z e u g e e i n e Matrix mit i d e n t i s c h e n Z e i l e n<br />

X . xx1 m a t r i x (X . x , nrow=n , n c o l=n )<br />

# M a t r t i x mit i d e n t i s c h e n S p a l t e n<br />

X . xx2 t (X . xx1 )<br />

# Matrix mit E i n t r a e g e n (X_i X_j )^2_{ i , j }<br />

X . xd (X . xx1 X . xx2 )^2<br />

# D i a g o n a l e<br />

<br />

aus Minimumbildung a u s s c h l i e s s e n<br />

X . xd [ row (X . xd)==c o l (X . xd ) ] 2<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1101


# P l a t z machen<br />

rm(X . xx1 , X . xx2 )<br />

# das g l e i c h e f u e r d i e y K o o r d i n a t e<br />

X . y r u n i f ( n )<br />

X . yy1 m a t r i x (X . y , nrow=n , n c o l=n )<br />

X . yy2 t (X . yy1 )<br />

X . yd (X . yy1 X . yy2 )^2<br />

X . yd [ row (X . yd)==c o l (X . yd ) ] 2<br />

# P l a t z machen<br />

rm(X . yy1 , X . yy2 )<br />

# A d d i t i o n d e r K o o r d i n a t e n<br />

X . d<br />

<br />

s q r t (X . xd + X . yd )<br />

# Minimum <strong>und</strong> M i n i m a l s t e l l e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1102


mi min (X . d )<br />

i n d X . d==mi<br />

i n d [ row ( i n d )> c o l ( i n d ) ] FALSE<br />

i n d . x cumsum( a p p l y ( ind , 1 , sum ) )<br />

i n d . x1 sum ( i n d . x==0) + 1<br />

i n d . y cumsum( a p p l y ( ind , 2 , sum ) )<br />

i n d . y1 sum ( i n d . y==0) + 1<br />

# m o d i f i z i e r t :<br />

# png ( p a s t e (PFAD, "BL6Aufg1 . png " ,<br />

# c o l l a p s e ="", sep =""))<br />

# win . m e t a f i l e ( f i l e n a m e=p a s t e (PFAD, "BL6Aufg1 . wmf" ,<br />

# c o l l a p s e ="", sep =""))<br />

p l o t (X . x , X . y )<br />

<br />

l i n e s ( c (X . x [ i n d . x1 ] , X . x [ i n d . y1 ] ) ,<br />

c (X . y [ i n d . x1 ] , X . y [ i n d . y1 ] ) , c o l=" g r e e n " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1103


e t u r n ( l i s t ( mat1=X . x , mat2=X . y ,<br />

# dev . o f f ( )<br />

}<br />

i n d 1=i n d . x1 , i n d 2=i n d . y1 ) )<br />

r e t u r n ( min ( s q r t (X . d ) ) )<br />

e r g l u e c k e . vec ( 2 0 )<br />

############################################<br />

# T e i l ( c )<br />

############################################<br />

n 50<br />

M 10<br />

# l e i d e r g i b t e s u n s e r e s Wissens nach<br />

# k e i n e f o r / w h i l e f r e i e M o e g l i c h k e i t<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1104


# f e s t z u s t e l l e n , ob e s i n einem l o g i s c h e n<br />

# Vektor X Folgen d e r Laenge m von "TRUE"<br />

# g i b t daher :<br />

g i b t r u n s f u n c t i o n (X, m){<br />

r e t u r n (wm)<br />

<br />

}<br />

i 0<br />

w1 0<br />

wm FALSE<br />

n l e n g t h (X)<br />

w h i l e ( ( i =m)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1105


walk . 1 f u n c t i o n ( n ){<br />

}<br />

s c h r i t t sample ( c ( 1 , 1 ) , n , r e p l a c e=T)<br />

pfad cumsum( s c h r i t t )<br />

mwalks . 1 f u n c t i o n (X, n ){ mwalk . 1 ( n )}<br />

Pfade . 1 f u n c t i o n (M, n ){ s a p p l y ( 1 :M, mwalk . 1 , n=n )}<br />

e r g Pfade (M, n )<br />

r w a l k f u n c t i o n ( n , M, f o l g =4){<br />

Pfade . x Pfade (M, n )<br />

Pfade . y Pfade (M, n )<br />

missM numeric (M)<br />

missM [ 1 :M] NA<br />

<br />

x l i min ( Pfade . x ) 1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1106


x r e max( Pfade . x ) + 1<br />

y l i min ( Pfade . y ) 1<br />

y r e max( Pfade . y ) + 1<br />

# Test im e r s t e n Quadranten<br />

p f . im1 ( Pfade . x >0)£ ( Pfade . y >0)<br />

v i e r . s p a l t e . im1 a p p l y ( pf . im1 , 2 , g i b t r u n s ,<br />

# Test im d r i t t e n Quadranten<br />

m=f o l g )>0<br />

# e r g i b t I n d i k a t o r welche d e r S p a l t e n / Pfade 4<br />

# mal a u f e i n a n d e r f o l g e n d im 1 . Quadranten<br />

# Test im z w e i t e n Quadranten<br />

p f . im2 ( Pfade . x 0)<br />

v i e r . s p a l t e . im2 a p p l y ( pf . im2 , 2 , g i b t r u n s ,<br />

m=f o l g )>0<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1107


p f . im3 ( Pfade . x >0)£ ( Pfade . y 0<br />

p f . im4 ( Pfade . x


Pfade4 . ym r b i n d ( j i t t e r ( Pfade . y [ , v i e r . s p a l t e ==1],<br />

# p r i n t ( Pfade4 . xm)<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

# c o l l a p s e ="", sep =""))<br />

<strong>Einsteiger</strong> <strong>und</strong><br />

# win . m e t a f i l e ( f i l e n a m e=p a s t e (PFAD, " BL6Aufg1_2 . wmf" , <strong>Fortgeschrittene</strong><br />

# l i n e s ( Pfade4 . xm , Pfade4 . ym)<br />

<br />

amount =0.2) , missM [ v i e r . s p a l t e ==1])<br />

p f z a h l ( dim ( Pfade4 . xm ) ) [ 2 ]<br />

# png ( p a s t e (PFAD, " BL6Aufg1_2 . png " ,<br />

# c o l l a p s e ="", sep =""))<br />

p l o t ( c ( x l i , x r e ) , c ( y l i , y r e ) , t y p e="n" ,<br />

x l a b="" , y l a b="" )<br />

# entweder a l l e a u f e i n m a l<br />

# oder a l s S c h l e i f e mit v e r s c h i e d e n e n Farben<br />

<br />

1109


i 0<br />

w h i l e ( i


L.6.2 B<strong>und</strong>estagswahl 2002<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 6 Aufgabe 2<br />

############################################<br />

# Pfad<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

#<br />

Filename " wahlen2 . t x t "<br />

wahl read . t a b l e ( f i l e =<br />

p r i n t ( wahl )<br />

wahl r b i n d ( wahl , wahl [3 ,] a p p l y ( wahl [ 4 : 8 , ] ,<br />

<br />

2 , sum ) )<br />

p a s t e (PFAD, Filename , c o l l a p s e="" , sep="" ) ,<br />

row . names=1, h eader=T, s k i p =1, sep="\ t " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1111


ow . names ( wahl ) [ 9 ] " S o n s t i g e "<br />

wahl r b i n d ( wahl , wahl [1 ,] wahl [ 2 , ] )<br />

row . names ( wahl ) [ 1 0 ] " N i c h t w a e h l e r "<br />

p r i n t ( wahl )<br />

############################################<br />

# T e i l ( b )&( c )<br />

############################################<br />

# png ( p a s t e (PFAD, " BL6Aufg2 . png " ,<br />

# c o l l a p s e ="", sep ="") , width =900 , h e i g h t =600)<br />

# win . m e t a f i l e ( f i l e n a m e=p a s t e (PFAD, " BL6Aufg2 . wmf" ,<br />

# c o l l a p s e ="", sep =""))<br />

d e f . par par ( no . r e a d o n l y = TRUE)<br />

# zu l a y o u t : mat Parameter r e g e l t , i n w e l c h e r<br />

# R e i h e n f o l g e d i e P a n e l s bemalt werden ; wenn<br />

# e i n e Zahl 2x a u f a u c h t h e i s s t das , d a s s d i e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1112


# e n t s p r e c h e n d e n P a n e l s v e r e i n i g t werden <strong>und</strong><br />

# b e p l o t t e t werden<br />

l a y o u t ( mat=m a t r i x ( c ( 1 , 2 , 1 , 3 ) , n c o l =2))<br />

matplot ( l o g ( t ( wahl [ 4 : 1 0 , ] ) ) , t y p e=" l " ,<br />

c o l=c ( " r e d " , " b l a c k " , " g r e e n " , " y e l l o w " ,<br />

" p i n k " , " g r e y " , " b l u e " ) , lwd =2,<br />

x l a b=" B<strong>und</strong>esland " , y l a b=" W a e h l e r z a h l " ,<br />

a x e s=F , l t y =1, y l i m=c ( l o g (1 e3 ) ,<br />

l o g ( 2 . 5 £10 e6 ) ) )<br />

a x i s ( 1 , at =1:6 , l a b e l s=names ( wahl ) [ 1 : 6 ] )<br />

a x i s ( 2 , at=l o g ( c (1 e3 , 1e4 , 1e5 , 1e6 , 5 e6 ) ) ,<br />

box ( )<br />

l a b e l s=as . c h a r a c t e r ( c (1 e3 , 1e4 , 1e5 , 1e6 , 5 e6 ) ) )<br />

t i t l e ( p a s t e ( " B<strong>und</strong>estagswahl ␣ 2002: ␣" ,<br />

<br />

" a u s g e w a e h l t e ␣ B u n d e s l a e n d e r " ) )<br />

legend ( 1 , l o g (1 e4 ) , legend=row . names ( wahl ) [ 4 : 1 0 ] ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1113


n c o l =3, cex =0.6 ,<br />

f i l l =c ( " r e d " , " b l a c k " , " g r e e n " ,<br />

" y e l l o w " , " p i n k " , " g r e y " , " b l u e " ) )<br />

# a b s o l u t e Zahlen i n f a r b i g e n Bar P l o t s<br />

names ( wahl ) c ( "BAY" , "B W" , "B" , "SAC" ,<br />

"NRW" , "GES" )<br />

wahl . gruppen as . m a t r i x ( wahl [ 4 : 1 0 , ] )<br />

# U n t e r s c h e i d u n g mit Farben<br />

l o c b a r p l o t ( wahl . gruppen ,<br />

c o l=c ( " r e d " , " b l a c k " , " g r e e n " , " y e l l o w " ,<br />

" p u r p l e " , " g r e y " , " b l u e " ) ,<br />

b e s i d e=T)<br />

t o t a l a p p l y ( wahl . gruppen , 2 , sum )<br />

# t e x t ( l o c ,<br />

<br />

t o t a l + par (" cxy " ) [ 2 ] , t o t a l , cex =0.5 ,<br />

# xpd=T)<br />

t i t l e ( " Ausgewaehlte ␣ B u n d e s l a e n d e r " , cex =2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1114


# p r i n t ( l o c a t o r ( 1 ) )<br />

i f ( i n t e r a c t i v e ()==T){<br />

}<br />

e l s e {<br />

l e g e n d ( l o c a t o r ( 1 ) , legend=row . names ( wahl . gruppen ) ,<br />

n c o l =2, cex =0.5 , f i l l =c ( " r e d " , " b l a c k " ,<br />

" g r e e n " , " y e l l o w " , " p u r p l e " , " g r e y " ,<br />

" b l u e " ) )<br />

l e g e n d ( xy , 3 . 5 , max( wahl . gruppen ) ,<br />

legend=row . names ( wahl . gruppen ) , n c o l =2,<br />

cex =0.5 , f i l l =c ( " r e d " , " b l a c k " , " g r e e n " ,<br />

# U n t e r s c h e i d u n g<br />

<br />

mit S c h r a f f u r e n<br />

" y e l l o w " , " p u r p l e " , " g r e y " , " b l u e " ) ) }<br />

# r e l a t i v e Zahlen i n f a r b i g e n Bar P l o t s<br />

# a l l e b i s a u f N i c h t w a e h l e r b e z i e h e n s i c h<br />

# a u f g u e l t i g e Stimmen<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1115


wahl . gruppen . r e l t ( t ( wahl . gruppen ) /<br />

as . v e c t o r ( t ( as . m a t r i x ( wahl [ 3 , ] ) ) ) ) £ 100<br />

# N i c h t w a e h l e r b e z i e h e n a u f a l l e B e r e c h t i g t e n<br />

wahl . gruppen . r e l [ 7 , ] t ( t ( wahl . gruppen [ 7 , ] ) /<br />

as . v e c t o r ( t ( as . m a t r i x ( wahl [ 1 , ] ) ) ) ) £ 100<br />

p r i n t ( wahl . gruppen . r e l )<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

l o c b a r p l o t ( wahl . gruppen . r e l , a n g l e =(1:7) £ 360/ 7 , <strong>Einsteiger</strong> <strong>und</strong><br />

d e n s i t y =(1:7) £ 5 , c o l=c ( " r e d " , " b l a c k " , <strong>Fortgeschrittene</strong><br />

" g r e e n " , " y e l l o w " , " p u r p l e " , " g r e y " ,<br />

" b l u e " ) )<br />

t o t a l a p p l y ( wahl . gruppen . r e l , 2 , sum )<br />

# t e x t ( l o c , t o t a l + par (" cxy " ) [ 2 ] , t o t a l , cex =0.5 ,<br />

# xpd=T)<br />

t i t l e ( " Ausgewaehlte ␣ B u n d e s l a e n d e r " , cex =2)<br />

legend ( 1 . 5 ,<br />

<br />

30 , legend=row . names ( wahl . gruppen ) ,<br />

n c o l =2, cex =0.5 ,<br />

f i l l =c ( " r e d " , " b l a c k " , " g r e e n " ,<br />

<br />

1116


#dev . o f f ( )<br />

<br />

" y e l l o w " , " p u r p l e " , " g r e y " , " b l u e " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1117


L.6.3 Multivariate Konvexkombination<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 6 Aufgabe 3<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

n 100<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

k 2 #Dimension<br />

r 0 . 1 #K o n t a m i n a t i o n s r a d i u s<br />

muid c ( 0 , 0 )<br />

mucont c ( 1 , 1 )<br />

<br />

Sid m a t r i x ( c (1 , 1 , 1 ,2) , nrow=k , n c o l=k )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1118


Scont d i a g ( rep ( 0 . 6 4 , k ) )<br />

Y m a t r i x ( rnorm ( k£n ) , nrow=k , n c o l=n )<br />

Xid S i d %£% Y + muid<br />

Xcont Scont %£% Y + mucont<br />

# " P r o t o k o l l " : Ub==1 Kontamination<br />

Ub rbinom ( n=n , s i z e =1, prob=r )<br />

Ub r b i n d (Ub , Ub)<br />

Xb (1 Ub) £ Xid + Ub£ Xcont<br />

Xbcont Ub£ Xcont<br />

Xbcont m a t r i x ( Xbcont [ Xbcont !=0 ] , nrow=2)<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

<br />

r qnorm (1 0.025)<br />

z e r l svd ( S i d%£%S i d )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1119


t h e t a seq ( from =0, to=2£ pi , by =0.01)<br />

X r b i n d ( r £ cos ( t h e t a ) £ s q r t ( z e r l $d [ 1 ] ) ,<br />

r £ s i n ( t h e t a ) £ s q r t ( z e r l $d [ 2 ] ) )<br />

X z e r l $u %£% X<br />

# Grenzen f ü r d i e P l o t s<br />

r e c e i l i n g (max(Xb [ 1 , ] , X [ 1 , ] ) )<br />

l i f l o o r ( min (Xb [ 1 , ] , X [ 1 , ] ) )<br />

ob c e i l i n g (max(Xb [ 2 , ] , X [ 2 , ] ) )<br />

un f l o o r ( min (Xb [ 2 , ] , X [ 2 , ] ) )<br />

# png ( p a s t e (PFAD, " BL6Aufg3 . png " ,<br />

# c o l l a p s e ="", sep =""))<br />

# win . m e t a f i l e ( f i l e n a m e=p a s t e (PFAD,<br />

#<br />

<br />

"BL6Aufg3 . wmf" , c o l l a p s e ="", sep =""))<br />

par ( mfrow=c ( 1 , 1 ) , c o l=" dark ␣ r e d " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1120


p l o t (X [ 1 , ] , X [ 2 , ] , t y p e=" l " , x l a b="X1" , y l a b="X2" ,<br />

x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) , lwd =2)<br />

############################################<br />

#T e i l ( c )<br />

############################################<br />

Xbu z e r l $u %£% Xb<br />

i n d 1 ( ( Xbu [ 1 , ] ^ 2 / z e r l $d [ 1 ] +<br />

Xbu [ 2 , ] ^ 2 / z e r l $d [ 2 ] )


Xid . a2 (1 i n d 1 ) £Xb [ 2 , ]<br />

Xid . a1 Xid . a1 [ Xid . a1 !=0 ]<br />

Xid . a2 Xid . a2 [ Xid . a2 !=0 ]<br />

Xbcontu z e r l $u %£% Xbcont<br />

i n d 2 ( ( Xbcontu [ 1 , ] ^ 2 / z e r l $d [ 1 ] +<br />

Xbcontu [ 2 , ] ^ 2 / z e r l $d [ 2 ] )


par ( c o l=" b l a c k " )<br />

p l o t ( 0 , 0 , t y p e="n" , x l a b="X1" , y l a b="X2" ,<br />

<br />

x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) )<br />

par ( c o l=" g r e e n " )<br />

p o i n t s ( Xid . i1 , Xid . i 2 )<br />

par ( c o l=" b l u e " )<br />

p o i n t s ( Xid . a1 , Xid . a2 )<br />

par ( c o l=" r e d " )<br />

p o i n t s ( Xbcont . i1 , Xbcont . i 2 )<br />

par ( c o l=" orange " )<br />

p o i n t s ( Xbcont . a1 , Xbcont . a2 )<br />

par ( c o l=" b l a c k " )<br />

t i t l e ( e x p r e s s i o n ( p a s t e ( " B i v a r i a t e ␣ Konvexkombination ␣" ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

(1 r ) , i t a l i c (N) , " ( " , mu[ i d ] , " , " , S [ i d ]^2 , " ) ␣" ,<br />

+ r , i t a l i c (N) ,<br />

" ) " ) ) )<br />

" ( " , mu[ cont ] , " , " , S [ cont ]^2 ,<br />

1123


t e x t ( 0 . 5 , 3 , "95%␣ K o n f i d e n z i n t e r v a l l " , c o l=" dark ␣ r e d " ,<br />

<br />

cex =1.1)<br />

legend ( l i , un+4, legend=c ( " i d e a l ␣ i n n e r h a l b " ,<br />

" i d e a l ␣ a u s s e r h a l b " , " kont ␣ i n n e r h a l b " ,<br />

" kont ␣ a u s s e r h a l b " ) , pch =1,<br />

c o l=c ( " g r e e n " , " b l u e " , " r e d " , " orange " ) )<br />

legend ( l i , un+4, legend=c ( " i d e a l ␣ i n n e r h a l b " ,<br />

#dev . o f f ( )<br />

" i d e a l ␣ a u s s e r h a l b " , " kont ␣ i n n e r h a l b " ,<br />

" kont ␣ a u s s e r h a l b " ) , pch =1,<br />

c o l=c ( " g r e e n " , " b l u e " , " r e d " , " orange " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1124


L.6.4 Regressionsplots<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 6 Aufgabe 4<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

n 16<br />

eps rnorm (16 , sd =2)<br />

X 5:10<br />

t h e t a 2<br />

<br />

a l p h a 1<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1125


Y t h e t a £X+a l p h a+eps<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

Z exp (Y)<br />

p l o t (X, Z , t y p e="p" , y l i m=c ( min (Z ) ,<br />

max(Z , exp ( t h e t a £X+a l p h a ) ) ) ,<br />

x l a b="X" , y l a b="Z" )<br />

# png ( p a s t e (PFAD, " BL6Aufg4_1 . png " ,<br />

# c o l l a p s e ="", sep =""))<br />

par ( new=T)<br />

p l o t (X, exp ( t h e t a £X+a l p h a ) , t y p e=" l " ,<br />

y l i m=c ( min (Z ) , max(Z , exp ( t h e t a £X+a l p h a ) ) ) ,<br />

<br />

#dev . o f f ( )<br />

x l a b="X" , y l a b="Z" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1126


############################################<br />

# T e i l ( c )<br />

############################################<br />

# png ( p a s t e (PFAD, " BL6Aufg4_2 . png " ,<br />

# c o l l a p s e ="", sep =""))<br />

windows ( )<br />

p l o t (X, Y, t y p e="p" , x l i m=c ( 5 , 10) , a x e s=F ,<br />

y l i m=c ( min (Y) , max(Y) ) , x l a b="X" ,<br />

y l a b="" )<br />

a x i s ( 2 , at=c ( 10 , 5, 0 , 5 , 10 , 15 , 20 , 25) ,<br />

l a b e l s=c ( " 10" , " 5" , "0" , "5" , "10" ,<br />

"15" , "20" , "25" ) )<br />

a x i s ( 4 ,<br />

<br />

at=c ( 10 , 5, 0 , 5 , 10 , 15 , 20 , 25) ,<br />

l a b e l s=c ( "4e 5" , "7e 3" , "1" , " 1 . 5 e2 " ,<br />

" 2 . 2 e4 " , " 3 . 2 7 e7 " , " 4 . 8 5 e8 " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1127


" 7 . 2 0 e10 " ) )<br />

a x i s ( 1 , at=c ( 5 , 1, 0 , 1 , 5 , 10) ,<br />

box ( )<br />

par ( new=T)<br />

l a b e l s=c ( 5 , 1, 0 , 1 , 5 , 1 0 ) )<br />

p l o t (X, t h e t a £X+alpha , t y p e=" l " ,<br />

x l i m=c ( 5 , 10) , a x e s=F , y l i m=c ( min (Y) ,<br />

max(Y) ) , x l a b="X" , y l a b="" )<br />

t i t l e ( " Nicht l i n e a r e ␣ R e g r e s s i o n " )<br />

#dev . o f f ( )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1128


L.6.5 Powerpoint-Präsentation<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1129


L.7 Lösungsvorschläge Blatt 7<br />

L.7.1 Shapiro-Wilk, Kolmogorov-Smirnov,<br />

-Anpassungstest<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 7 Aufgabe 1<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " normal . t x t "<br />

#<br />

normal read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( normal )<br />

<br />

names ( normal )<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1130


e q u i r e ( c t e s t )<br />

######################<br />

### Shapiro Wilk Test<br />

######################<br />

s h a p i r o . t e s t ( x )<br />

# => k e i n e s w e g s a b l e h n e n<br />

##############################<br />

### Kolmogoroff S m i r n o f f Test<br />

##############################<br />

# Frage : NV mit welchen Parametern i n K S Test ?<br />

# mit<br />

<br />

vorgegebenen ( t h e o r e t i s c h e n )<br />

ks . t e s t ( x , "pnorm" , mean=1, sd=s q r t ( 3 ) )<br />

# => a b l e h n e n ( hoch s i g n i f i k a n t ! )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1131


# mit denen , so d a s s das Ablehnen am s c h w i e r i g s t e n i s t<br />

k s 2 d i s t f u n c t i o n ( theta , XX){<br />

}<br />

ks . t e s t (XX, "pnorm" , mean=t h e t a [ 1 ] ,<br />

###############<br />

<br />

sd=t h e t a [ 2 ] ) $ s t a t i s t i c<br />

k m i n 2 d i s t f u n c t i o n (XX, t h e t a 0=c ( 0 , 1 ) ) {<br />

}<br />

optim ( par=theta0 , f n=k s 2 d i s t , XX=XX) $ par<br />

th k m i n 2 d i s t ( x )<br />

p r i n t ( th )<br />

ks . t e s t ( x , "pnorm" , mean=th [ 1 ] , sd=th [ 2 ] )<br />

# => k e i n e s w e g s a b l e h n e n<br />

### c h i ^2 Test<br />

###############<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1132


#U n t e r t e i l e n d e r Daten i n K l a s s e n<br />

#mit H i l f e von qnorm ( p , 1 , 3)<br />

#p =0.1 , 0 . 2 , 0 . 3 , . . . , 0 . 9<br />

k l a s s i e r u n g f u n c t i o n ( x , k l a s s ){<br />

}<br />

n l e n g t h ( k l a s s )<br />

y a p p l y ( o u t e r ( x , k l a s s , "


#oder w i e d e r mit den Parametern , so d a s s das<br />

#Ablehnen am s c h w i e r i g s t e n i s t<br />

c h i 2 d i s t f u n c t i o n ( theta , XX){<br />

}<br />

k l a s s qnorm ( p , mean=t h e t a [ 1 ] , sd=t h e t a [ 2 ] )<br />

y k l a s s i e r u n g (XX, k l a s s )<br />

c h i s q . t e s t ( y ) $ s t a t i s i t c<br />

c h m i n 2 d i s t f u n c t i o n (XX, t h e t a 0=c ( 0 , 1 ) ) {<br />

}<br />

optim ( par=theta0 , f n=c h i 2 d i s t ,XX=XX) $ par<br />

th c h m i n 2 d i s t ( x )<br />

p r i n t ( th )<br />

k l a s s qnorm ( p , mean=th [ 1 ] , sd=th [ 2 ] )<br />

y k l a s s i e r u n g ( x , k l a s s )<br />

<br />

c h i s q . t e s t ( y )<br />

# => n i c h t a b l e h n e n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1134


###########<br />

### qq P l o t<br />

###########<br />

qqnorm ( x )<br />

q q l i n e ( x )<br />

detach ( )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1135


L.7.2 Wilcoxon <strong>und</strong> t-Test, - <strong>und</strong> F-Test<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 7 Aufgabe 2<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME "uscomp . t x t "<br />

r e q u i r e ( c t e s t )<br />

uscomp read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( uscomp )<br />

<br />

names ( uscomp )<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1136


X6 . l i s t e s p l i t (X6 , S e c t o r )<br />

w i l c o x . t e s t (X6 . l i s t e $ Energy , X6 . l i s t e $ Finance ,<br />

a l p h a<br />

<br />

0 . 1<br />

c o n f . l e v e l =0.9)<br />

# => n i c h t a b l e h n e n !<br />

t . t e s t (X6 . l i s t e $ Energy , X6 . l i s t e $ Finance ,<br />

c o n f . l e v e l =0.9)<br />

# => n i c h t a b l e h n e n !<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

# c h i ^2 Test<br />

sigma0 100<br />

n l e n g t h (X6 . l i s t e $ Energy )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1137


c c r i t u q c h i s q ( p=( a l p h a / 2 ) , df=n 1)<br />

c c r i t o q c h i s q ( p=(1 a l p h a / 2 ) , df=n 1)<br />

T e s t s t a t i s t i k ( n 1)£ v a r (X6 . l i s t e $ Energy ) / sigma0<br />

pwert 2£ p c h i s q ( q=T e s t s t a t i s t i k , df=n 1)<br />

cat ( " c h i ^2 Test ␣zum␣ S i g n i f i k a n z n i v e a u ␣ von ␣ a l p h a=" ,<br />

alpha , "%:\n" )<br />

cat ( " u n t e r e r ␣ k r i t . ␣Wert : \ t " , c c r i t u , "\n" )<br />

cat ( " o b e r e r ␣ k r i t . ␣Wert : \ t " , c c r i t o , "\n" )<br />

cat ( " P r u e f g r o e s s e : \ t " , T e s t s t a t i s t i k , "\n" )<br />

cat ( "P Value : \ t " , pwert , "\n" )<br />

# => n i c h t a b l e h n e n !<br />

############################################<br />

<br />

# T e i l ( c )<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1138


# F Test<br />

v a r . t e s t (X6 . l i s t e $ Energy , X6 . l i s t e $ Finance ,<br />

<br />

c o n f . l e v e l =0.9)<br />

# => n i c h t a b l e h n e n !<br />

detach ( )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1139


L.7.3 Fisher- <strong>und</strong> t-Test<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 7 Aufgabe 3<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " k r e d i t 1 . t x t "<br />

k r e d i t read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( k r e d i t )<br />

names ( k r e d i t )<br />

<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1140


# B e r u f s t a t u s ==1: a r b e i t s l o s<br />

B e r u f s t a t u s as . i n t e g e r ( B e r u f s t a t u s ==1)<br />

# Zusammenfassen d e r " K r e d i t w u e r d i g e n "<br />

# nach dem B e r u f s t a t u s<br />

j o b as . m a t r i x ( t a b l e ( K r e d i t w u e r d i g k e i t ,<br />

B e r u f s t a t u s ) )<br />

# A n t e i l d e r " K r e d i t w u e r d i g e n " bzw .<br />

# " K r e d i t u n w u e r d i g e n "<br />

j a 1 j o b [ 1 , 1 ] /sum ( j o b [ 1 , ] )<br />

n e i n 1 j o b [ 2 , 1 ] /sum ( j o b [ 2 , ] )<br />

cat ( " A n t e i l ␣ d e r ␣ K r e d i t w u e r d i g e n : \ t " ,<br />

ja , "\n" )<br />

cat ( " A n t e i l ␣ d e r ␣ K r e d i t u n w u e r d i g e n : \ t " ,<br />

nein , "\n" )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1141


############################################<br />

# T e i l ( b )<br />

############################################<br />

r e q u i r e ( c t e s t )<br />

a l p h a 0 . 1 #S i g n i f i k a n z n i v e a u<br />

k r e d i t [ , 5 ] B e r u f s t a t u s<br />

# A u f s p a l t e n des K r e d i t d a t e n s a t z e s nach<br />

# K r e d i t w u e r d i g k e i t<br />

k r e d i t . l i s t e s p l i t ( k r e d i t ,<br />

#t Test<br />

<br />

K r e d i t w u e r d i g k e i t )<br />

k r e d i t 0 k r e d i t . l i s t e [ [ 1 ] ] [ , 5 ]<br />

k r e d i t 1 k r e d i t . l i s t e [ [ 2 ] ] [ , 5 ]<br />

t . t e s t ( k r e d i t 0 , k r e d i t 1 ,<br />

c o n f . l e v e l =(1 a l p h a ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1142


#a s y m p t o t i s c h e r F i s h e r Test<br />

#V e r t a u s c h e n d e r S p a l t e n i n job Matrix ,<br />

#um d i e A n t e i l e d e r A r b e i t s l o s e n zu t e s t e n<br />

j o b 1 j o b [ , 2 ]<br />

j o b 1 c b i n d ( job1 , j o b [ , 1 ] )<br />

prop . t e s t ( job1 , c o n f . l e v e l =(1 a l p h a ) )<br />

#e x a k t e r F i s h e r Test<br />

c c r i t u qhyper ( p=( a l p h a / 2 ) , m=sum ( j o b [ 1 , ] ) ,<br />

n=sum ( j o b [ 2 , ] ) , k=sum ( j o b [ , 2 ] ) )<br />

c c r i t o qhyper ( p=(1 a l p h a / 2 ) , m=sum ( j o b [ 1 , ] ) ,<br />

n=sum ( j o b [ 2 , ] ) , k=sum ( j o b [ , 2 ] ) )<br />

cat ( " u n t e r e r ␣ k r i t . ␣Wert : \ t " , c c r i t u , "\n" )<br />

cat ( " o b e r e r ␣ k r i t . ␣Wert : \ t " ,<br />

<br />

c c r i t o , "\n" )<br />

cat ( " P r u e f g r o e s s e : \ t " , j o b [ 1 , 2 ] , "\n" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1143


detach ( )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1144


L.7.4 Testvergleich durch Simulation<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 7 Aufgabe 4<br />

############################################<br />

n 10<br />

a l p h a 0 . 0 5<br />

############################################<br />

# f r e i w i l l i g e r T e i l :<br />

############################################<br />

# NPT<br />

# D i c h t q u o t i e n t :<br />

# D i c h t e d e r X1 . . Xn u n t e r H0<br />

# prod_i ( dnorm ( x i ) )<br />

<br />

# = (2 p i )^( n/ 2) exp( sum_i ( x_i ^2)/ 2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1145


#<br />

# D i c h t e d e r X1 . . Xn u n t e r H1<br />

# prod_i ( dnorm ( x i 1))<br />

# = (2 p i )^( n/ 2) exp( sum_i ( ( x_i 1)^2)/ 2)<br />

#<br />

# l o g DQ: 1/2 sum_i x_i ^2 (x_i 1)^2 = sum_i x_i n/2<br />

c qnorm(1 a l p h a ) / s q r t ( n )<br />

<br />

= n ( mean (X) 1/ 2)<br />

# a l s o DQ >= c mean (X) >= c ’<br />

#<br />

# a b e r mean (X)~ [ u n t e r H0 ] N(0 , 1 /n )<br />

#<br />

# => c r i t i s c h e r Wert a l s P(N(0 , 1 /n)>c ’)= alpha ,<br />

# => P(N(0,1) c ’=qnorm((1 a l p h a ) ) / s q r t ( n )<br />

# c =0.5201<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1146


############################################<br />

# VZT<br />

#<br />

# b e t r a c h t e Yi =1(Xi >0);<br />

# dann Yi u i v ~ [ u n t e r H0 ] Bin ( 1 , p0 )<br />

# <strong>und</strong> p0=1/2<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

# s c h r e i b e P_0 f u e r P u n t e r H0 <strong>und</strong> P_1 f u e r P u n t e r H1<strong>Einsteiger</strong><br />

<strong>und</strong><br />

# E_0 " E_1 " <strong>Fortgeschrittene</strong><br />

# => N ~ [ u n t e r H0 ] Bin ( n , p0 ) , p0=1/2<br />

# => P_0(N=k)=dbinom ( x=k , s i z e=n , prob=1/ 2)<br />

p0 1/2<br />

#<br />

# u n t e r H1 w i r d im a l l g e m e i n e n N g r o e s s e r s e i n !<br />

# => Test : l e h n e ab f a l l s N zu g r o s s ;<br />

# F e h l e r<br />

<br />

1 . Art !


# Niveau w i r d n i c h t a u s g e s c h o e p f t :<br />

# Ablehnen b e i N=8 ,9 ,10<br />

# ^= pbinom ( q=7, s i z e =10, prob=1/ 2)=0.9453125<br />

# Ablehnen b e i N=9 ,10<br />

# ^= pbinom ( q=8, s i z e =10, prob=1/ 2)=0.9892578<br />

# => u n r a n d o m i s i e r t Ablehnen b e i 9 ,10<br />

# => r a n d o m i s i e r t : immer Ablehnen b e i 9 ,10 ,<br />

# b e i 8 mit Ws r0 ( wie a u f Angabe ) a b l e h n e n<br />

qbinom(1 alpha , n , p0 )<br />

# 8 !<br />

pbinom ( q=7, s i z e=n , prob=p0 )<br />

pbinom ( q=8, s i z e=n , prob=p0 )<br />

r0 ( pbinom ( 8 , n , p0 ) 0.95) /dbinom ( 8 , n , p0 )<br />

#<br />

# MACHT<br />

<br />

#<br />

# Macht VZT u n r a n d o m i s i e r t :<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1148


#<br />

# E_1 [ 1 (N=9 oder 1 0 ) ] =P_1(N=9 oder 10)<br />

# N ~ [ u n t e r H1 ] Bin ( n , p1 ) , p1=P(N(1 ,1) >0)<br />

#<br />

############################################<br />

# Bemerkung : nun T e s t s i t u a t i o n z w e i e r<br />

# Muenzen M0,M1<br />

# P(M0=1)=1/ 2 , P(M1=1)=0.841<br />

# nach n Wuerfen mit Muenze , d i e entweder<br />

# M0 oder M1 i s t<br />

# E n t s c h e i d u n g : War ’ s M0 oder M1<br />

############################################<br />

p1 1 pnorm ( 0 , mean=1) # 0.8413<br />

#<br />

macht . v z t u<br />

<br />

1 pbinom ( 8 , n , p1 )<br />

### 0.5129<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1149


# Macht VZT r a n d o m i s i e r t :<br />

#<br />

# E_1 [ 1 (N=9 oder 10)+1(N=8)1(R=1)] =<br />

# = P_1(N=9 oder 10)+P_1(N=8)P(R=1)=<br />

# = p1+r0 dbinom ( 8 , n , p1 )<br />

macht . v z t r macht . v z t u + r0 £dbinom ( 8 , n , p1 )<br />

### 0.7669<br />

#<br />

# Macht NPT<br />

#<br />

macht . npt 1 pnorm ( c , mean=1, sd=1/ s q r t ( n ) )<br />

### 0.9354<br />

#<br />

############################################<br />

xa c ( 0 . 1 , 2 . 1 , 1.2 , 1 . 0 , 1 . 6 , 1 . 3 , 0 . 2 , 0 . 1 ,<br />

0 . 3 , 2 . 2 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1150


meana mean ( xa ) # 0 . 7 7 => NPT l e h n t ab<br />

p v a l u e . npt 1 pnorm ( meana , sd=1/ s q r t ( n ) )<br />

### 0.0074<br />

Na sum ( xa >0) # 9 => VZTu VZTr l e h n e n ab<br />

p v a l u e . v z t 1 pbinom ( q=8, s i z e=n , prob=p0 )<br />

### 0.0107<br />

xac c ( 20.2 , 2 . 1 , 1.2 , 1 . 0 , 1 . 6 , 1 . 3 , 0 . 2 , 0 . 1 ,<br />

### 0.0547<br />

<br />

0 . 3 , 2 . 2 )<br />

meanac mean ( xac ) # 1.26 => NPT l e h n t n i c h t ab<br />

p v a l u e c . npt 1 pnorm ( meanac , sd=1/ s q r t ( n ) )<br />

### 1.0000<br />

Nac sum ( xac >0) # 8 => VZTu l e h n t ab<br />

p v a l u e c . v z t u 1 pbinom ( q=7, s i z e=n , prob=p0 )<br />

R rbinom ( 1 , 1 , r0 )<br />

R # f a l l s R=1 ablehnen , f a l l s R=0 annehmen . . .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1151


#<br />

#Begruendung :<br />

#<br />

# i n NPT gehen d i e Beobachtungen u n b e s c h r a e n k t e i n<br />

# => b e l i e b i g e Auslenkung d e r T e s t s t a t i s t i k<br />

# durch e i n e Beobachtung<br />

# i n VZT gehen nur d i e V o r z e i c h e n e i n<br />

# => k e i n e b e l i e b i g e Auslenkung d e r T e s t s t a t i s t i k<br />

# durch e i n e Beobachtung<br />

############################################<br />

# e i g e n t l i c h e Aufgabe<br />

############################################<br />

# T e i l ( a )<br />

<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1152


M 10000<br />

ve 0 . 0 5<br />

X . i d . 0 m a t r i x ( rnorm (M£n ) , nrow=M, n c o l=n )<br />

X . i d . 1 m a t r i x ( rnorm (M£n , mean=1) , nrow=M, n c o l=n )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

#NPT<br />

e n t s c h . i d . 0 . npt a p p l y (X . i d . 0 , 1 , mean)>c<br />

e m p f e h l e r . i d . 1 . npt mean ( e n t s c h . i d . 0 . npt )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 1 . Art ␣ b e i ␣NPT<br />

␣␣␣␣␣ ( i d e a l e ␣ S i t u a t i o n ) : " ,<br />

<br />

e m p f e h l e r . i d . 1 . npt , "\n" )<br />

e n t s c h . i d . 1 . npt a p p l y (X . i d . 1 , 1 , mean)>c<br />

e m p f e h l e r . i d . 2 . npt 1 mean ( e n t s c h . i d . 1 . npt )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1153


cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 2 . Art ␣ b e i ␣NPT<br />

␣␣␣␣␣ ( i d e a l e ␣ S i t u a t i o n ) : " , e m p f e h l e r . i d . 2 . npt , "\n" )<br />

#VZTu ( u n r a n d o m i s i e r t )<br />

e n t s c h . i d . 0 . v z t u a p p l y ( (X . i d .0 >0) ,1 , sum)>8<br />

e m p f e h l e r . i d . 1 . v z t u mean ( e n t s c h . i d . 0 . v z t u )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 1 . Art ␣ b e i ␣VZTu<br />

␣␣␣␣␣ ( i d e a l e ␣ S i t u a t i o n ) : " , e m p f e h l e r . i d . 1 . vztu , "\n" )<br />

e n t s c h . i d . 1 . v z t u a p p l y ( (X . i d .1 >0) ,1 , sum)>8<br />

e m p f e h l e r . i d . 2 . v z t u 1 mean ( e n t s c h . i d . 1 . v z t u )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 2 . Art ␣ b e i ␣VZTu<br />

␣␣␣␣␣ ( i d e a l e ␣ S i t u a t i o n ) : " , e m p f e h l e r . i d . 2 . vztu , "\n" )<br />

#VZTr ( r a n d o m i s i e r t )<br />

R. 0 m a t r i x ( rbinom (M, 1 , r0 ) , nrow=M, n c o l =1)<br />

<br />

# Aussondern d e r E r e i g n i s s e N=8<br />

e n t s c h . i d . 0 . v z t r 0 a p p l y ( (X . i d .0 >0) ,1 , sum)==8<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1154


e n t s c h . i d . 0 . v z t r e n t s c h . i d . 0 . v z t u<br />

+ e n t s c h . i d . 0 . v z t r 0 £R. 0<br />

e m p f e h l e r . i d . 1 . v z t r mean ( e n t s c h . i d . 0 . v z t r )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 1 . Art ␣ b e i ␣VZTr<br />

␣␣␣␣␣ ( i d e a l e ␣ S i t u a t i o n ) : " , e m p f e h l e r . i d . 1 . v z t r , "\n" )<br />

R. 1 m a t r i x ( rbinom (M, 1 , r0 ) , nrow=M, n c o l =1)<br />

# Aussondern d e r E r e i g n i s s e N=8<br />

e n t s c h . i d . 1 . v z t r 0 a p p l y ( (X . i d .1 >0) ,1 , sum)==8<br />

e n t s c h . i d . 1 . v z t r e n t s c h . i d . 1 . v z t u<br />

+ e n t s c h . i d . 1 . v z t r 0 £R. 1<br />

e m p f e h l e r . i d . 2 . v z t r 1 mean ( e n t s c h . i d . 1 . v z t r )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 2 . Art ␣ b e i ␣VZTu<br />

␣␣␣␣␣ ( i d e a l e ␣ S i t u a t i o n ) : " , e m p f e h l e r . i d . 2 . v z t r , "\n" )<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1155


# T e i l ( c )<br />

############################################<br />

# nenne Y Xc ;<br />

# e s g i l t Yc0~(1 ve )N(0 ,1)+ ve N( 1 0 , 1 )<br />

# Yc1~(1 ve )N(1 ,1)+ ve N( 10 ,1)<br />

U. 0 m a t r i x ( rbinom (M£n , 1 , ve ) , nrow=M, n c o l=n )<br />

U. 1 m a t r i x ( rbinom (M£n , 1 , ve ) , nrow=M, n c o l=n )<br />

X . c . 0 X . i d .0+U. 0 £10<br />

X . c . 1 X . i d .1 U. 1 £10<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

#NPT<br />

<br />

e n t s c h . c . 0 . npt a p p l y (X . c . 0 , 1 , mean)>c<br />

e m p f e h l e r . c . 1 . npt mean ( e n t s c h . c . 0 . npt )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1156


cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 1 . Art ␣ b e i ␣NPT<br />

␣␣␣␣␣␣␣␣ ( kont . ␣ S i t u a t i o n ) : " , e m p f e h l e r . c . 1 . npt , "\n" )<br />

e n t s c h . c . 1 . npt a p p l y (X . c . 1 , 1 , mean)>c<br />

e m p f e h l e r . c . 2 . npt 1 mean ( e n t s c h . c . 1 . npt )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 2 . Art ␣ b e i ␣NPT<br />

␣␣␣␣␣␣␣␣ ( kont . ␣ S i t u a t i o n ) : " , e m p f e h l e r . c . 2 . npt , "\n" )<br />

#VZTu ( u n r a n d o m i s i e r t )<br />

e n t s c h . c . 0 . v z t u a p p l y ( (X . c .0 >0) , 1 , sum)>8<br />

e m p f e h l e r . c . 1 . v z t u mean ( e n t s c h . c . 0 . v z t u )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 1 . Art ␣ b e i ␣VZTu<br />

␣␣␣␣␣␣␣␣ ( kont . ␣ S i t u a t i o n ) : " , e m p f e h l e r . c . 1 . vztu , "\n" )<br />

e n t s c h . c . 1 . v z t u a p p l y ( (X . c .1 >0) , 1 , sum)>8<br />

e m p f e h l e r . c . 2 . v z t u 1 mean ( e n t s c h . c . 1 . v z t u )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 2 . Art ␣ b e i ␣VZTu<br />

␣␣␣␣␣␣␣␣ ( kont . ␣ S i t u a t i o n ) : " , e m p f e h l e r . c . 2 . vztu , "\n" )<br />

1157


#VZTr ( r a n d o m i s i e r t )<br />

R. 0 m a t r i x ( rbinom (M, 1 , r0 ) , nrow=M, n c o l =1)<br />

# Aussondern d e r E r e i g n i s s e N=8<br />

e n t s c h . c . 0 . v z t r 0 a p p l y ( (X . c .0 >0) , 1 , sum)==8<br />

e n t s c h . c . 0 . v z t r e n t s c h . c . 0 . v z t u<br />

+ e n t s c h . c . 0 . v z t r 0 £R. 0<br />

e m p f e h l e r . c . 1 . v z t r mean ( e n t s c h . c . 0 . v z t r )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 1 . Art ␣ b e i ␣VZTr<br />

␣␣␣␣␣␣␣␣ ( kont . ␣ S i t u a t i o n ) : " , e m p f e h l e r . c . 1 . v z t r , "\n" )<br />

R. 1 m a t r i x ( rbinom (M, 1 , r0 ) , nrow=M, n c o l =1)<br />

# Aussondern d e r E r e i g n i s s e N=8<br />

e n t s c h . c . 1 . v z t r 0 a p p l y ( (X . c .1 >0) , 1 , sum)==8<br />

e n t s c h . c . 1 . v z t r e n t s c h . c . 1 . v z t u<br />

+ e n t s c h . c . 1 . v z t r 0 £R. 1<br />

e m p f e h l e r . c . 2 . v z t r 1 mean ( e n t s c h . c . 1 . v z t r )<br />

cat ( " E m p i r i s c h e r ␣ F e h l e r ␣ 2 . Art ␣ b e i ␣VZTu<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1158


␣␣␣␣␣␣␣␣ ( kont . ␣ S i t u a t i o n ) : " , e m p f e h l e r . c . 2 . v z t r , "\n" )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1159


L.8 Lösungsvorschläge Blatt 8<br />

L.8.1 Indiskrete Umfrage<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 8 Aufgabe 1<br />

############################################<br />

############################################<br />

# M1i : E r g e b n i s des 1 . Muenzwurfs b e i i tem Befragtem<br />

# M2i : E r g e b n i s des 2 . Muenzwurfs b e i i tem Befragtem<br />

# I i : Antwort a u f i n d i s k r . Frage b e i i tem Befragtem<br />

# Ai : gegebene Antwort<br />

#<br />

# " Kopf " ^= 1 , " Zahl " ^= 0<br />

<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1160


# M1i , M2i , I i s t o unabh<br />

# M1i ~Bin (1 , 1 / 2)<br />

# M2i ~Bin (1 , 1 / 2)<br />

# I i ~Bin ( 1 , p ) , p g e s u c h t<br />

#<br />

# ( M1i , M2i , I i )_i i d e n t i s c h v e r t e i l t<br />

#<br />

# => Ai=M1i£ I i +(1 M1i ) £M2i u i v<br />

#<br />

# Ai nimmt e b e n f a l l s nur d i e Werte 0 ,1 an<br />

#<br />

# a l s o Ai ~Bin ( 1 , q )<br />

# d a b e i<br />

# q=q ( p)=<br />

# =P( Ai=1)=<br />

<br />

# =P( ( M1i=1 <strong>und</strong> I i =1) oder ( M1i=0 <strong>und</strong> M2i=1))=<br />

# d a b e i oder ^= entweder oder<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1161


# a l s o =P( M1i=1 <strong>und</strong> I i =1)+P( M1i=0 <strong>und</strong> M2i=1)=<br />

# s t o . Unabh . von M1i , I i <strong>und</strong> M1i , M2i<br />

# =P( M1i=1)P( I i =1)+P( M1i=0)P( M2i=1)=<br />

# =p/2+1/4<br />

############################################<br />

############################################<br />

# ML Schaetzung<br />

############################################<br />

# L i k e l i h o o d von A_1 . . . A_n<br />

#<br />

# P_p ( Ai=ai , i =1.. n ) =[ s t o u ] prod_i P_p ( Ai=a i )<br />

# = prod_i [ q ( p )^(1{ Ai=1})+(1 q ( p ))^(1{ Ai =0})]<br />

# S= #{ i : a i =1}<br />

# = q ( p)^S+(1 q ( p ) ) ^ ( n S )<br />

<br />

# a l s o<br />

# l o g P_p ( A_i=a_i , i =1.. n )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1162


# = S l o g ( q ( p ) ) ( n S ) l o g (1 q ( p ) )<br />

#<br />

# <strong>und</strong> damit<br />

#<br />

# Lambda_p ( ( Ai )_i )<br />

# = d/dp l o g P_p ( A_i=a_i , i =1.. n )<br />

# = S/q £ 1/2 ( n S ) /(1 q ) £ 1/2<br />

#<br />

# <strong>und</strong> damit d/dp l o g P_p ( A_i=a_i , i =1.. n ) = 0<br />

# q^ML=S/n p^ML = 2 S/n 1/2<br />

#<br />

# d a b e i S ~ Bin ( n , q )<br />

#<br />

# E_p [ p^ML]= 2 E_p [ S ] /n 1/2 = 2q 1/2 = p<br />

# a l s o<br />

<br />

p^ML b i a s f r e i<br />

# Var_p [ p^ML]= 4/n^2 Var_p [ S]= 4q(1 q ) /n<br />

#<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1163


# F i s h e r I n f o :<br />

# E_p [ ( Lambda_p ( ( Ai )_i ))^2]=<br />

# = E_p [ { ( S nq ) / (2 q(1 q ))}^2]=<br />

# = n/ ( 4 ( q(1 q ) ) = 1/Var_p [ p^ML]<br />

#<br />

# a l s o e r r e i c h t p^ML d i e Cramer Rao Schranke<br />

#<br />

################################################<br />

############################################<br />

# Normalapproximation f u e r p^ML<br />

############################################<br />

# de Moivre L a p l a c e<br />

#<br />

# s q r t ( n ) ( S/n q ) => N( 0 , q(1 q ) )<br />

#<br />

#=> s q r t ( n ) 2( S/n q ) => N( 0 , 4 q(1 q ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1164


#<br />

#a b e r 2( S/n q ) = p^ML p<br />

#################################################<br />

############################################<br />

# a p p r o x i m a t i v e s K o n f i d e n z i n t e r v a l l<br />

############################################<br />

#<br />

# P_p ( | p^ML p | < s ) ~= P ( | N( 0 , 1 ) |<br />

# < s /2 s q r t ( n/ ( q(1 q ) ) ) != 0.9756<br />

# s e i t=s /2 s q r t ( n/ ( q(1 q ) ) )<br />

# P( t


#<br />

# V e r g l e i c h : " u n v e r s c h l e i e r t e " Befragung<br />

#<br />

# s0= Phi ^( 1)(1.9756 / 2) s q r t ( p(1 p ) /n )<br />

#<br />

############################################<br />

############################################<br />

# e i g e n t l i c h e Berechnungen<br />

############################################<br />

n 2300<br />

S 682<br />

pML 2£S/n 1/2<br />

qML S/n<br />

<br />

s 2£qnorm ( 1 . 9 7 5 6 / 2) £ s q r t (qML£(1 qML) /n )<br />

s0 qnorm ( 1 . 9 7 5 6 / 2) £ s q r t (pML£(1 pML) /n )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1166


f a c s / s0<br />

cat ( " Schaetzung ␣ f u e r ␣p : " ,pML)<br />

cat ( "\n97.56% K o n f i d e n z i n t e r v a l l : ␣ [ " ,pML s , " ; " ,<br />

<br />

pML+s , " ] " )<br />

cat ( "\n97.56% K o n f i d e n z i n t e r v a l l ␣ ( b e i<br />

␣␣␣␣ u n v e r s c h l e i e r t e r ␣ Befragung ) : ␣ [ " ,<br />

pML s0 , " ; " ,pML+s0 , " ] " )<br />

cat ( "\n^=um␣ F aktor ␣" , fac , "␣␣ g r o e s s e r ␣<strong>und</strong>␣um␣ F a k t o r ␣" ,<br />

f a c ^2 , "mehr␣ Beobachtungen ␣ n o e t i g ␣ f u e r ␣ g l e i c h e<br />

␣␣␣␣␣␣␣␣ G e n a u i g k e i t " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1167


L.8.2 ML–Schätzer <strong>für</strong> aus <br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 8 Aufgabe 2<br />

############################################<br />

############################################<br />

# Umrechnung d e r Parameter i n Angabe ( S u f f i x a )<br />

# i n Parameter i n R ( S u f f i x R)<br />

#<br />

# Na = mR +nR<br />

# Ka = mR<br />

# na = kR<br />

# ka = xR<br />

#<br />

############################################<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1168


Na 30<br />

na 10<br />

ka c ( 3 , 4 , 6 , 4 , 7 )<br />

#m o e g l i c h e Werte f u e r K<br />

Km 0 : 3 0<br />

############################################<br />

# L i k e l i h o o d a l s Funktion i n Km<br />

# da w i r e s i n s a p p l y e i n s e t z e n w o l l e n :<br />

# a l s Argument X i n L i k e l<br />

############################################<br />

L i k e l f u n c t i o n (X, N, n , k ){<br />

kR n<br />

xR<br />

<br />

k<br />

mR X<br />

nR N X<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1169


}<br />

p dhyper ( x=xR , m=mR, n=nR , k=kR )<br />

r e t u r n ( prod ( p ) )<br />

# Berechnung des L i k e l i h o o d v e k t o r s<br />

LV s a p p l y (Km, L i k e l , N=Na , n=na , k=ka )<br />

i which . max(LV)<br />

KML Km[ i ]<br />

p r i n t (KML)<br />

############################################<br />

# E r w e i t e r u n g : Bestimmung d e r G e n a u i g k e i t<br />

# mit B o o t s t r a p<br />

############################################<br />

<br />

r e s a m p l f u n c t i o n (X, k , N, n , Km){<br />

l e l e n g t h ( k )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1170


}<br />

<br />

ks sample ( k , l e , r e p l a c e=T)<br />

LV s a p p l y (Km, L i k e l , N=Na , n=na , k=ks )<br />

r e t u r n (Km[ which . max(LV ) ] )<br />

z a h l b o o t s t r a p 1000<br />

kboot s a p p l y ( 1 : z a h l b o o t s t r a p , resampl ,<br />

Kmb mean ( kboot )<br />

Kmv v a r ( kboot )<br />

k=ka , N=Na , n=na , Km=Km)<br />

cat ( " M i t t e l w e r t : " , Kmb, "\ t V a r i a n z : " , Kmv, "\n\n" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1171


L.8.3 Simulationsstudie<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 8 Aufgabe 3<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# i m p l e m e n t i e r e summe_i p s i_t h e t a ( x_i )<br />

# mit p s i_m, t h e t a ( x)= max( m, min ( ( x t h e t a ) ,m) )<br />

# ( v e r g l e i c h e Uebung )<br />

psim f u n c t i o n ( theta , y , m0=0.7){<br />

# s c h n e l l e r a l s mean ( ) !<br />

<br />

}<br />

sum ( pmin ( pmax( m0, y t h e t a ) ,m0) ) / l e n g t h ( y )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1172


# f i n d e N u l l s t e l l e t h e t a_0 so d a s s<br />

# summe_i p s i_{m, t h e t a_0}( x_i ) = 0<br />

Mschaetz f u n c t i o n ( x , m=0.7){<br />

}<br />

u n i r o o t ( psim , low= 20, up=20, t o l =1e 10,<br />

#z u r b e s s e r e n L e s b a r k e i t<br />

y=x , m0=m, m a x i t e r =20)$ r o o t<br />

############################################<br />

# T e i l ( b ) ( e )<br />

############################################<br />

# w i l l w i e d e r mit s a p p l y a r b e i t e n => X s t a t t n<br />

t u e a l l e s f u n c t i o n (X, M, ve =0.1 , m0=0.7){<br />

n X<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1173


# T e i l ( b )<br />

Xid m a t r i x ( rnorm (M£n ) , nrow=M, n c o l=n )<br />

# Auswahlmechanismus wie i n B l a t t 2<br />

R m a t r i x ( rbinom ( n=M£n , s i z e =1, p=ve ) ,<br />

nrow=M, n c o l=n )<br />

Xct m a t r i x ( rcauchy (M£n ) , nrow=M, n c o l=n )<br />

Xc (1 R) £ Xid + R£ Xct<br />

# T e i l ( c )<br />

# S c h a e t z e r a u s w e r t u n g<br />

Xqid a p p l y ( Xid , 1 , mean )<br />

Medid a p p l y ( Xid , 1 , median )<br />

Mid a p p l y ( Xid , 1 , Mschaetz , m=m0)<br />

S i d<br />

<br />

c b i n d (Xq=Xqid , Med=Medid , M=Mid )<br />

b o x p l o t ( data . frame ( Sid ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1174


# T e i l ( d )<br />

t i t l e ( main=" i d e a l e ␣ S i t u a t i o n " ,<br />

sub=p a s t e ( "n=" , n , c o l l a p s e="" ) )<br />

Xqc a p p l y ( Xc , 1 , mean )<br />

Medc a p p l y ( Xc , 1 , median )<br />

Mc a p p l y ( Xc , 1 , Mschaetz , m=m0)<br />

Sc c b i n d (Xq=Xqc , Med=Medc , M=Mc)<br />

b o x p l o t ( data . frame ( Sc ) )<br />

t i t l e ( main="kontam . ␣ S i t u a t i o n " ,<br />

sub=p a s t e ( "n=" , n , c o l l a p s e="" ) )<br />

b o x p l o t ( data . frame ( Sc [ , 2 : 3 ] ) )<br />

t i t l e ( main="kontam . ␣ S i t u a t i o n " ,<br />

# i d e a l e S i t u a t i o n<br />

sub=p a s t e ( "n=" , n , c o l l a p s e="" ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1175


a s v a r n X i d n£ v a r ( Xqid )<br />

a s B i a s X i d s q r t ( n ) £mean ( Xqid )<br />

asvarnMedid n£ v a r ( Medid )<br />

asBiasMedid s q r t ( n ) £mean ( Medid )<br />

asvarnMid n£ v a r ( Mid )<br />

asBiasMid s q r t ( n ) £mean ( Mid )<br />

cat ( " E m p i r i s c h e ␣ Werte ␣ f u e r ␣ Varianz , ␣ B i a s<br />

␣␣␣␣␣␣␣␣␣␣␣␣<strong>und</strong>␣MSE: ␣ ␣ i d e a l e ␣ S i t u a t i o n ␣ ␣ [ ␣n␣=" ,<br />

n , " ] \ n\n" )<br />

cat ( "n␣x␣ V a r i a n z : \ tXq : ␣" , asvarnXid , "\ t \tMed : ␣" ,<br />

asvarnMedid , "\ t \tM Sch : ␣" , asvarnMid , "\n" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

cat ( "n ^0.5 ␣x␣ B i a s : \ t \tXq : ␣" , asBiasXid , "\ t \tMed : ␣" ,<br />

<br />

asBiasMedid , "\ t \tM Sch : ␣" , asBiasMid ,<br />

cat ( "n␣x␣MSE: \ t \tXq : ␣" , a s v a r n X i d+a s B i a s X i d ^2 ,<br />

"\n" )<br />

"\ t \tMed : ␣" ,<br />

1176


asvarnMedid+asBiasMedid ^2 , "\ t \tM Sch : ␣" ,<br />

asvarnMid+asBiasMid ^2 , "\n\n\n" )<br />

# k o n t a m i n i e r t e S i t u a t i o n<br />

asvarnXc n£ v a r ( Xqc )<br />

asBiasXc s q r t ( n ) £mean ( Xqc )<br />

asvarnMedc n£ v a r ( Medc )<br />

asBiasMedc s q r t ( n ) £mean ( Medc )<br />

asvarnMc n£ v a r (Mc)<br />

asBiasMc s q r t ( n ) £mean (Mc)<br />

cat ( " E m p i r i s c h e ␣ Werte ␣ f u e r ␣ Varianz , ␣ B i a s<br />

␣␣␣␣␣␣␣␣␣␣␣␣<strong>und</strong>␣MSE: ␣ ␣ kont . ␣ S i t u a t i o n ␣ ␣ [ ␣n␣=" ,<br />

<br />

n , " ] \ n\n" )<br />

cat ( "n␣x␣ V a r i a n z : \ tXq : ␣" , asvarnXc , "\ t \tMed : ␣" ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1177


}<br />

m 0 . 7<br />

<br />

asvarnMedc , "\ t \tM Sch : ␣" , asvarnMc , "\n" )<br />

<br />

cat ( "n ^0.5 ␣x␣ B i a s : \ t \tXq : ␣" , asBiasXc , "\ t \tMed : ␣" ,<br />

asBiasMedc , "\ t \tM Sch : ␣" , asBiasMc , "\n" ) Mathematik VII<br />

cat ( "n␣x␣MSE: \ t \tXq : ␣" , asvarnXc+asBiasXc ^2 , "\ t \tMed : ␣" ,<br />

# gesamter A b l a u f<br />

asvarnMedc+asBiasMedc ^2 , "\ t \tM Sch : ␣" ,<br />

asvarnMc+asBiasMc ^2 , "\n\n\n" )<br />

#PFAD "C : / E i gene D a t e i e n / . . . /"<br />

#FILENAME " BL8Aufg3plot . png"<br />

M 1000<br />

n c ( 5 , 1 0 , 1 0 0 )<br />

ve 0 . 1<br />

# png ( f i l e n a m e=p a s t e (PFAD, FILENAME , c o l l a p s e ="",<br />

# sep ="") , width =900 , h e i g h t =900)<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1178


par ( new=F , mar=c ( 5 . 1 , 4 . 1 , 6 . 7 , 2 . 1 ) )<br />

par ( mfrow=c ( 3 , 3 ) )<br />

g s a p p l y (X=n , t u e a l l e s , M=M, ve=ve , m0=m)<br />

par ( mfrow=c ( 1 , 1 ) )<br />

par ( new=F , mar=c ( 5 . 1 , 4 . 1 , 1 . 8 , 2 . 1 ) )<br />

mtext ( " V e r s c h i e d e n e ␣ S c h a e t z e r ␣ i n ␣ i d . [ N( 0 , 1 ) ]<br />

␣␣␣␣␣␣␣␣&␣ kont . S i t . [ 0 . 9 N(0 ,1)+0.1 Cauchy ] " )<br />

#dev . o f f ( )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1179


L.9 Lösungsvorschläge Blatt 9<br />

L.9.1 Berechnung eines Quantils<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 9 Aufgabe 1<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# B i s e k t i o n s a l g o r i t h m u s<br />

q u a n t i l . b i s e k t i o n f u n c t i o n ( a l p h a =0.95 , s t a r t =0,<br />

t e s t 1.0<br />

<br />

ende =5, d e l t a =1e 8){<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1180


x s t a r t<br />

x . l i s t a r t<br />

x . r e ende<br />

i t e r 0<br />

w h i l e ( abs ( t e s t ) > d e l t a ){<br />

i t e r i t e r + 1<br />

i f ( t e s t < 0){<br />

}<br />

e l s e {<br />

}<br />

x . l i x<br />

x ( x . l i + x . r e ) /2<br />

x . r e x<br />

x ( x . l i + x . r e ) /2<br />

t e s t pnorm ( x) a l p h a<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1181


}<br />

}<br />

cat ( " I t e r a t i o n e n ␣ f u e r ␣ B i s e k t i o n : \ t " , i t e r , "\n" )<br />

r e t u r n ( x )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

# Newton A l g o r i t h m u s<br />

q u a n t i l . newton f u n c t i o n ( a l p h a =0.95 , s t a r t =1,<br />

t e s t<br />

<br />

1 . 0<br />

x . a l t s t a r t<br />

d e l t a =1e 8){<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1182


}<br />

i t e r 0<br />

w h i l e ( t e s t > d e l t a ){<br />

}<br />

i t e r i t e r + 1<br />

x . neu x . a l t<br />

( pnorm ( x . a l t ) 0.95) /dnorm ( x . a l t )<br />

t e s t abs ( x . neu x . a l t )<br />

x . a l t x . neu<br />

cat ( " I t e r a t i o n e n ␣ f u e r ␣Newton : \ t " , i t e r , "\n" )<br />

r e t u r n ( x . a l t )<br />

############################################<br />

# T e i l ( c )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1183


############################################<br />

# Numerische I n v e r t i e r u n g<br />

x seq ( from =0, to =5, by =0.01)<br />

y pnorm ( x )<br />

q u a n t i l . i n v e r t s p l i n e f u n ( y , x )<br />

############################################<br />

# I t e r a t i o n s a l g o r i t h m u s<br />

############################################<br />

# Achtung : pnorm ( x . a l t ) ! ! !<br />

q u a n t i l . i t e r a t i o n f u n c t i o n ( a l p h a =0.95 ,<br />

t e s t 1 . 0<br />

x . a l t<br />

<br />

s t a r t<br />

i t e r 0<br />

s t a r t =1.5 , d e l t a =1e 8){<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1184


}<br />

w h i l e ( t e s t > d e l t a ){<br />

}<br />

i t e r i t e r + 1<br />

x . neu s i g n ( dnorm ( x . a l t ) ) £<br />

( pnorm ( x . a l t ) a l p h a ) + x . a l t<br />

t e s t abs ( x . neu x . a l t )<br />

x . a l t x . neu<br />

cat ( " I t e r a t i o n e n ␣ f u e r ␣ I t e r a t i o n : \ t " , i t e r , "\n" )<br />

r e t u r n ( x . a l t )<br />

############################################<br />

<br />

# Verwendung d e r Funktion u n i r o o t<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1185


f k t f u n c t i o n ( x , a l p h a ){ pnorm ( x ) a l p h a }<br />

# Zur K o n t r o l l e<br />

a l p h a 0 . 9 5<br />

qnorm ( a l p h a )<br />

q u a n t i l . b i s e k t i o n ( a l p h a=a l p h a )<br />

q u a n t i l . newton ( a l p h a=a l p h a )<br />

q u a n t i l . i n v e r t ( a l p h a )<br />

q u a n t i l . i t e r a t i o n ( a l p h a=a l p h a )<br />

u n i r o o t ( f=f k t , l o wer =0, upper =5, t o l =1e 8,<br />

<br />

a l p h a=a l p h a )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1186


L.9.2 Schätzung eines eindimensionalen<br />

Parameters<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 9 Aufgabe 2<br />

############################################<br />

############################################<br />

# T e i l ( a )&( b )<br />

############################################<br />

# H i l f s f u n k t i o n z u r Berechnung von Y_i !<br />

# i n d e r Maximum Suche<br />

f a c t o r i a l f u n c t i o n ( x ){<br />

i f e l s e ( x==0, e r g 1 ,<br />

r e t u r n ( e r g )<br />

e r g prod ( seq ( from =1, to=x , by =1)))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1187


}<br />

l i k e l i h o o d f u n c t i o n ( lambda , Y){<br />

}<br />

1/ ( exp ( lambda ) 1)^ l e n g t h (Y) £ lambda ^(sum (Y) ) /<br />

prod ( s a p p l y (Y, f a c t o r i a l ) )<br />

n s g l e i c h u n g f u n c t i o n ( lambda , Y){<br />

}<br />

lambda mean (Y) £(1 exp( lambda ) )<br />

#Maximum Suche<br />

maximum f u n c t i o n (Y, s t a r t =1, ende =5,<br />

n<br />

<br />

l e n g t h (Y)<br />

#lambda G i t t e r<br />

d e l t a =1e 4, k o n t r o l l e=" k e i n e " ){<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1188


lambda c ( s t a r t , ( ende s t a r t ) / 2 , ende )<br />

g i t t e r ( ende s t a r t ) /2 #G i t t e r w e i t e<br />

t e s t 1 . 0<br />

maxalt 1<br />

w h i l e ( ( g i t t e r > d e l t a ) | | ( t e s t > d e l t a ) ) {<br />

l g i t l i k e l i h o o d ( lambda , Y)<br />

maxneu max( l g i t )<br />

t e s t abs ( maxalt maxneu )<br />

#Berechnung des neuen lambda G i t t e r s<br />

i f ( t e s t > 0 . 0 ) {<br />

maxalt maxneu<br />

m i t t e lambda [ l g i t==maxneu ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1189


}<br />

<br />

}<br />

e l s e {<br />

}<br />

g i t t e r g i t t e r /2<br />

lambda c ( mitte g i t t e r , mitte ,<br />

m i t t e+g i t t e r )<br />

m i t t e lambda [ l g i t==maxneu ]<br />

g i t t e r g i t t e r /2<br />

lambda c ( mitte g i t t e r , mitte ,<br />

m i t t e+g i t t e r )<br />

s w i t c h ( k o n t r o l l e , ausgabe=<br />

r e t u r n ( m i t t e )<br />

cat ( "Das␣ a k t u e l l e ␣ lambda : \ t " ,<br />

mitte , "\n" ) , browser=browser ( ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1190


}<br />

#Newton A l g o r i t h m u s<br />

newton f u n c t i o n (Y, s t a r t =2.5 , d e l t a =1e 4,<br />

<br />

t e s t 1 . 0<br />

lambda . a l t s t a r t<br />

w h i l e ( t e s t > d e l t a ){<br />

k o n t r o l l e=" k e i n e " ){<br />

lambda . neu lambda . a l t ( lambda . a l t<br />

mean (Y) £(1 exp( lambda . a l t ) ) ) /<br />

(1 mean (Y) £ exp( lambda . a l t ) )<br />

t e s t abs ( lambda . neu lambda . a l t )<br />

lambda . a l t lambda . neu<br />

s w i t c h ( k o n t r o l l e , ausgabe=<br />

cat ( "Das␣ a k t u e l l e ␣ lambda : \ t " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1191


}<br />

}<br />

lambda . l i<br />

<br />

s t a r t<br />

lambda . a l t , "\n" ) , browser=browser ( ) )<br />

r e t u r n ( lambda . a l t )<br />

#B i s e k t i o n s a l g o r i t h m u s<br />

b i s e k t i o n f u n c t i o n (Y, s t a r t =1, ende =5,<br />

t e s t 1 . 0<br />

t e s t 1 1.0<br />

lambda s t a r t<br />

lambda . r e ende<br />

d e l t a =1e 4, k o n t r o l l e=" k e i n e " ){<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1192


}<br />

w h i l e ( t e s t > d e l t a ){<br />

i f ( t e s t 1 < 0){<br />

}<br />

e l s e {<br />

}<br />

lambda . l i lambda<br />

lambda ( lambda . l i + lambda . r e ) /2<br />

lambda . r e lambda<br />

lambda ( lambda . l i + lambda . r e ) /2<br />

t e s t 1 lambda mean (Y) £(1 exp( lambda ) )<br />

t e s t abs ( t e s t 1 )<br />

s w i t c h ( k o n t r o l l e , ausgabe=<br />

cat ( "Das␣ a k t u e l l e ␣ lambda : \ t " ,<br />

lambda , "\n" ) , browser=browser ( ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1193


}<br />

r e t u r n ( lambda )<br />

############################################<br />

#T e i l ( c )<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " t r u n c p o i s . t x t "<br />

Y read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME , sep="" ,<br />

d e l t a 1e 4<br />

s t a r t w mean (Y [ , 1 ] )<br />

Z Y [ , 1 ]<br />

c o l l a p s e="" ) , header=F)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1194


lambda1 maximum(Y [ , 1 ] , d e l t a=d e l t a ,<br />

k o n t r o l l e=" ausgabe " )<br />

n l i k e l i h o o d f u n c t i o n ( lambda , Y){<br />

}<br />

l i k e l i h o o d ( lambda , Y)<br />

optim ( s t a r t w , n l i k e l i h o o d , Y=Z)<br />

lambda2 optim ( s t a r t w , n l i k e l i h o o d , Y=Z) $ par<br />

lambda3 b i s e k t i o n (Y [ , 1 ] , d e l t a=d e l t a ,<br />

k o n t r o l l e=" ausgabe " )<br />

lambda4 newton (Y [ , 1 ] , d e l t a=d e l t a ,<br />

k o n t r o l l e=" ausgabe " )<br />

l w e r t e<br />

<br />

seq ( 0 , max(Y [ , 1 ] ) , 0 . 0 3 )<br />

l b w e r t e s a p p l y ( l w e r t e , n s g l e i c h u n g , Y=Z)<br />

p l o t ( l w e r t e , l b w e r t e )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1195


i n t e r v c ( 1 , max(Y [ , 1 ] ) )<br />

lambda5 u n i r o o t ( n s g l e i c h u n g , Y=Z ,<br />

<br />

i n t e r v a l=i n t e r v , t o l=d e l t a ) $ r o o t<br />

c ( lambda1 , lambda2 , lambda3 , lambda4 , lambda5 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1196


L.9.3 Numerische Probleme mit dem<br />

Coupon-Collector<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 9 Aufgabe 3<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

S i e b f o r m e l f u n c t i o n (N, n ){<br />

i f (N==n ){<br />

}<br />

e l s e {<br />

<br />

k 0 : n<br />

e r g ( 1)^k£ choose ( n , k ) £(1 k/n)^N<br />

k 0 : ( n 1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1197


}<br />

}<br />

e r g ( 1)^k£ choose ( ( n 1) , k )<br />

e r g e r g £(1 (k+1)/n )^(N 1)<br />

r e t u r n (max ( 0 , sum ( e r g ) ) )<br />

S i e b f o r m e l . erw f u n c t i o n ( n ){<br />

}<br />

k 1 : ( n 1)<br />

e r g ( 1)^(k 1)£ choose ( n , k ) £(1 k/n)^n/k<br />

r e t u r n ( n£ ( sum ( e r g )+1))<br />

############################################<br />

<br />

# n i c h t B e s t a n d t e i l d e r Aufgabe<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1198


S i e b f o r m e l . v a r f u n c t i o n ( n ){<br />

}<br />

k 1 : ( n 1)<br />

e r g 0 ( 1)^(k 1)£ choose ( n , k ) £(1 k/n)^n/k<br />

e r g 1 sum ( e r g 0 )<br />

e r g 2 ( 1)^(k 1)£ choose ( n , k ) £(1 k/n)^n/k^2<br />

e r g (2 £sum ( e r g 2 ) e r g 1 ^2)£n^2 n£ e r g 1<br />

r e t u r n ( e r g )<br />

n c ( 2 , 3 , 5 , 20 , 50 , 75)<br />

erw numeric ( l e n g t h ( n ) )<br />

s t r e u numeric ( l e n g t h ( n ) )<br />

par ( mfrow=c ( 3 , 2 ) )<br />

i t e r 0<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1199


f o r ( i i n n ){<br />

}<br />

<br />

WS numeric (10 £ i i +1)<br />

f o r ( j i n seq ( from=i , to=10£ i , by =1))<br />

WS[ j i +1] S i e b f o r m e l (N=j , n=i )<br />

i t e r i t e r + 1<br />

erw [ i t e r ] S i e b f o r m e l . erw ( i )<br />

s t r e u [ i t e r ] s q r t ( S i e b f o r m e l . v a r ( i ) )<br />

p r i n t (WS)<br />

p l o t ( seq ( from=i , to=l e n g t h (WS)+ i 1, by =1) ,<br />

WS, t y p e=" s " , x l a b="N" , y l a b="WS" )<br />

t i t l e ( p a s t e ( " W a h r s c h e i n l i c h k e i t s f u n k t i o n<br />

␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ f u e r ␣n=" , i ) )<br />

cat ( " Die ␣ E r w a r t u n g s w e r t e ␣ l a u t e n : \ t " , erw , "\n" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1200


cat ( " Die ␣ Streuung ␣ i s t : \ t " , s t r e u , "\n" )<br />

cat ( " V e r h a e l t n i s ␣E(N) /n : \ t " , erw /n , "\n" )<br />

# L o g a r i t h m i s c h e s Wachstum<br />

# Zum V e r g l e i c h :<br />

cat ( " V e r g l e i c h ␣ mit ␣ l o g ( n )+0.6:\ t " , l o g ( n )+0.6 , "\n" )<br />

# A l s o f u e r n=576 g i l t n a e h e r u n g s w e i s e :<br />

# erw /n i n [ 6 . 5 , 7 ]<br />

# A l s o E r w a r t u n g s w e r t : erw i n [ 3 7 4 4 , 4032]<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

n 576<br />

x 1 : n<br />

<br />

i t e r 100<br />

c o u n t e r rep ( n , i t e r )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1201


# z u r V e r a n s c h a u l i c h u n g :<br />

# 30 Ziehungen aus 1 : 2 0<br />

sample ( 1 : 2 0 , 3 0 , r e p l a c e=T)<br />

# T a b e l l e d e r angenommen Werte<br />

t a b l e ( sample ( 1 : 2 0 , 3 0 , r e p l a c e=T) )<br />

# a l s Matrix<br />

as . m a t r i x ( t a b l e ( sample ( 1 : 2 0 , 3 0 , r e p l a c e=T) ) )<br />

# Album v o l l Matrix hat n Z e i l e n<br />

f o r ( i i n 1 : i t e r ){<br />

<br />

t e s t 1<br />

y sample ( x , n , r e p l a c e=T)<br />

w h i l e ( t e s t


}<br />

}<br />

p r i n t ( i )<br />

y as . i n t e g e r ( row . names ( y ) )<br />

t e s t l e n g t h ( y )<br />

cat ( " M i t t e l w e r t : \ t " , mean ( c o u n t e r ) , "\n" )<br />

cat ( " E m p i r i s c h e ␣ V a r i a n z : \ t " , v a r ( c o u n t e r ) , "\n" )<br />

############################################<br />

# T e i l ( c )<br />

############################################<br />

# E e x a k t<br />

Eexakt f u n c t i o n ( n ){ n£sum (1 / ( 1 : n ) ) }<br />

Emacheron<br />

<br />

f u n c t i o n ( n ){ n£ ( l o g ( n )+0.5772)}<br />

n c ( 2 , 3 , 5 , 20 , 50 , 75 , 576)<br />

s a p p l y ( n , Eexakt )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1203


s a p p l y ( n , Emacheron )<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

ziehgeom1 f u n c t i o n ( n , N){<br />

<br />

rgeom (1 ,1 (n 1)/N)+1<br />

} # Ziehung von X_n<br />

ziehgeomn f u n c t i o n ( a , N){<br />

}<br />

geoms s a p p l y ( 1 : N, ziehgeom1 ,N=N ) ; sum ( geoms )<br />

ziehgeomo f u n c t i o n (M, N){<br />

}<br />

s a p p l y ( 1 :M, ziehgeomn ,N=N)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1204


L.9.4 Optimale Prognose<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 9 Aufgabe 4<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

y seq ( from =0, to =10, by =0.1)<br />

bed . Erw f u n c t i o n ( y , Fkt , . . . )<br />

{<br />

{<br />

<br />

i n t e g r a n d 1 f u n c t i o n ( x , y , Fkt , . . . )<br />

e v a l ( p a r s e ( t e x t=p a s t e ( "x£" , Fkt ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1205


}<br />

<br />

" ( y x , ␣ . . . ) £dnorm ( x ) " , sep="" ) ) )<br />

i n t 1 i n t e g r a t e ( i n t e g r a n d 1 , lower= I n f ,<br />

upper=I n f , r e l . t o l =1e 12, y=y ,<br />

Fkt=Fkt , . . . ) $ v a l u e<br />

i n t e g r a n d 2 f u n c t i o n ( x , y , Fkt , . . . )<br />

{<br />

}<br />

e v a l ( p a r s e ( t e x t=p a s t e ( Fkt ,<br />

" ( y x , ␣ . . . ) £dnorm ( x ) " ,<br />

sep="" ) ) )<br />

i n t 2 i n t e g r a t e ( i n t e g r a n d 2 , lower= I n f ,<br />

upper=I n f , r e l . t o l =1e 12, y=y ,<br />

Fkt=Fkt , . . . ) $ v a l u e<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1206


}<br />

# T e i l ( b )<br />

<br />

r e t u r n ( i n t 1 / i n t 2 )<br />

f . konv f u n c t i o n ( x , r =0.1 , sd =3)<br />

{<br />

}<br />

(1 r ) £dnorm ( x ) + r £dnorm ( x , sd =3)<br />

g . i s a p p l y ( y , bed . Erw , Fkt="dnorm" )<br />

g . i i s a p p l y ( y , bed . Erw , Fkt=" f . konv " )<br />

g . i i i s a p p l y ( y , bed . Erw , Fkt=" dcauchy " )<br />

############################################<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1207


postmod f u n c t i o n ( y , x . l i =0, x . r e =5,<br />

{<br />

}<br />

w e i t e =0.01 , Fkt , . . . )<br />

x seq ( from=x . l i , to=x . re , by=w e i t e )<br />

e v a l ( p a r s e ( t e x t=p a s t e ( " h i l f ␣ ␣" , Fkt ,<br />

" ( y x , ␣ . . . ) £dnorm ( x ) " , sep="" ) ) )<br />

postmod x [ o r d e r ( h i l f ) ] [ l e n g t h ( x ) ]<br />

r e t u r n ( postmod )<br />

h . i s a p p l y ( y , postmod , Fkt="dnorm" )<br />

h . i i s a p p l y ( y , postmod , Fkt=" f . konv " )<br />

h . i i i<br />

<br />

s a p p l y ( y , postmod , Fkt=" dcauchy " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1208


############################################<br />

# T e i l ( c )<br />

############################################<br />

g . i . g l a t t s p l i n e ( y , g . i , n=5£ l e n g t h ( y ) )<br />

g . i i . g l a t t s p l i n e ( y , g . i i , n=5£ l e n g t h ( y ) )<br />

g . i i i . g l a t t s p l i n e ( y , g . i i i , n=5£ l e n g t h ( y ) )<br />

h . i . g l a t t s p l i n e ( y , h . i , n=5£ l e n g t h ( y ) )<br />

h . i i . g l a t t s p l i n e ( y , h . i i , n=5£ l e n g t h ( y ) )<br />

h . i i i . g l a t t s p l i n e ( y , h . i i i , n=5£ l e n g t h ( y ) )<br />

par ( c o l=" g r e e n " )<br />

p l o t ( g . i . g l a t t $x , g . i . g l a t t $y , t y p e=" l " ,<br />

x l i m=c ( min ( y ) , max( y ) ) ,<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

par ( new=T, c o l=" b l u e " )<br />

p l o t ( g . i i . g l a t t $x , g . i i . g l a t t $y , t y p e=" l " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1209


x l i m=c ( min ( y ) , max( y ) ) ,<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

par ( new=T, c o l=" p u r p l e " )<br />

p l o t ( g . i i i . g l a t t $x , g . i i i . g l a t t $y , t y p e=" l " ,<br />

x l i m=c ( min ( y ) , max( y ) ) ,<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

par ( new=T, c o l=" y e l l o w " , l t y =2)<br />

p l o t ( h . i . g l a t t $x , h . i . g l a t t $y , t y p e=" l " ,<br />

x l i m=c ( min ( y ) , max( y ) ) ,<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

par ( new=T, c o l=" orange " , l t y =1)<br />

p l o t ( h . i i . g l a t t $x , h . i i . g l a t t $y , t y p e=" l " ,<br />

x l i m=c ( min ( y ) , max( y ) ) ,<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

par ( new=T, c o l=" r e d " )<br />

<br />

p l o t ( h . i i i . g l a t t $x , h . i i i . g l a t t $y , t y p e=" l " ,<br />

x l i m=c ( min ( y ) , max( y ) ) ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1210


n 5000<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

par ( new=T, c o l=" b l a c k " )<br />

p l o t ( 0 , 0 , t y p e="n" , x l i m=c ( min ( y ) , max( y ) ) ,<br />

y l i m=c ( 0 , 5 ) , x l a b="" , y l a b="" )<br />

t i t l e ( " B e d i n g t e r ␣ E r w a r t u n g s w e r t ␣<strong>und</strong>␣ P o s t e r i o r ␣Modus" )<br />

legend ( min ( y ) , 5 , legend=c ( " ( a ) , i " , " ( a ) , i i " ,<br />

" ( a ) , i i i " , " ( b ) , i " , " ( b ) , i i " , " ( b ) , i i i " ) ,<br />

n c o l =2, f i l l =c ( " g r e e n " , " b l u e " , " p u r p l e " ,<br />

" y e l l o w " , " orange " , " r e d " ) )<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1211


X rnorm ( n )<br />

eps . i rnorm ( n )<br />

r rbinom ( n , prob =0.1 , s i z e =1)<br />

eps . i i (1 r ) £ rnorm ( n ) + r £ rnorm ( n , sd =3)<br />

eps . i i i rcauchy ( n )<br />

Y . i X + eps . i<br />

Y . i i X + eps . i i<br />

Y . i i i X + eps . i i i<br />

g . i . f k t s p l i n e f u n ( g . i . g l a t t $x , g . i . g l a t t $y )<br />

g . i i . f k t s p l i n e f u n ( g . i i . g l a t t $x , g . i i . g l a t t $y )<br />

g . i i i . f k t s p l i n e f u n ( g . i i i . g l a t t $x , g . i i i . g l a t t $y )<br />

h . i . f k t s p l i n e f u n ( h . i . g l a t t $x , h . i . g l a t t $y )<br />

h . i i . f k t<br />

<br />

s p l i n e f u n ( h . i i . g l a t t $x , h . i i . g l a t t $y )<br />

h . i i i . f k t s p l i n e f u n ( h . i i i . g l a t t $x , h . i i i . g l a t t $y )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1212


k . a . i . i g . i . f k t (Y . i )<br />

k . a . i . i i g . i . f k t (Y . i i )<br />

k . a . i . i i i g . i . f k t (Y . i i i )<br />

k . a . i i . i g . i i . f k t (Y . i )<br />

k . a . i i . i i g . i i . f k t (Y . i i )<br />

k . a . i i . i i i g . i i . f k t (Y . i i i )<br />

k . a . i i i . i g . i i i . f k t (Y . i )<br />

k . a . i i i . i i g . i i i . f k t (Y . i i )<br />

k . a . i i i . i i i g . i i i . f k t (Y . i i i )<br />

k . b . i . i h . i . f k t (Y . i )<br />

k . b . i . i i h . i . f k t (Y . i i )<br />

k . b . i . i i i h . i . f k t (Y . i i i )<br />

k . b . i i . i h . i i . f k t (Y . i )<br />

k . b . i i . i i h . i i . f k t (Y . i i )<br />

<br />

k . b . i i . i i i h . i i . f k t (Y . i i i )<br />

k . b . i i i . i h . i i i . f k t (Y . i )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1213


k . b . i i i . i i h . i i i . f k t (Y . i i )<br />

k . b . i i i . i i i h . i i i . f k t (Y . i i i )<br />

############################################<br />

# T e i l ( e )<br />

############################################<br />

emp . mse as . data . frame ( m a t r i x (<br />

c ( mean ( (Y . i k . a . i . i )^2) ,<br />

mean ( (Y . i i k . a . i . i i )^2) ,<br />

mean ( (Y . i i i k . a . i . i i i )^2) ,<br />

mean ( (Y . i k . a . i i . i )^2) ,<br />

mean ( (Y . i i k . a . i i . i i )^2) ,<br />

mean ( (Y . i i i<br />

<br />

k . a . i i . i i i )^2) ,<br />

mean ( (Y . i k . a . i i i . i )^2) ,<br />

mean ( (Y . i i k . a . i i i . i i )^2) ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1214


) )<br />

<br />

mean ( (Y . i i i k . a . i i i . i i i )^2) ,<br />

mean ( (Y . i k . b . i . i )^2) ,<br />

mean ( (Y . i i k . b . i . i i )^2) ,<br />

mean ( (Y . i i i k . b . i . i i i )^2) ,<br />

mean ( (Y . i k . b . i i . i )^2) ,<br />

mean ( (Y . i i k . b . i i . i i )^2) ,<br />

mean ( (Y . i i i k . b . i i . i i i )^2) ,<br />

mean ( (Y . i k . b . i i i . i )^2) ,<br />

mean ( (Y . i i k . b . i i i . i i )^2) ,<br />

mean ( (Y . i i i k . b . i i i . i i i ) ^ 2 ) ) ,<br />

n c o l =3, byrow=T,<br />

dimnames= l i s t ( c ( " ( a ) , i " , " ( a ) , i i " , " ( a ) , i i i " ,<br />

" ( b ) , i " , " ( b ) , i i " , " ( b ) , i i i " ) ,<br />

c ( " normal " , " konvex " , " cauchy " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1215


L.10 Lösungsvorschläge Blatt 10<br />

L.10.1 Lineare Regression<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 10 Aufgabe 1<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " c r a b s . data "<br />

c r a b s read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( c r a b s )<br />

names ( c r a b s )<br />

<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

p l o t ( p o s t s z , p r e s z , t y p e="p" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1216


# Vermutung :<br />

# p r e s z = c o n s t + t h e t a £ p o s t s z + F e h l e r<br />

# R Formel<br />

# p o s t s z ~ p r e s z<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1217


L.10.2 Freier Fall eines Körpers<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 10 Aufgabe 2<br />

############################################<br />

# Z e i t p u n k t e<br />

t seq ( from=1/ 30 , to=14/ 30 , by=1/ 30)<br />

t<br />

# Höhe<br />

h c ( 1 1 . 8 6 , 1 5 . 6 7 , 2 0 . 6 , 2 6 . 6 9 , 3 3 . 7 1 ,<br />

h<br />

# D e s i g n m a t r i x<br />

4 1 . 9 3 , 5 1 . 1 3 , 6 1 . 4 9 , 7 2 . 9 0 , 8 5 . 4 4 ,<br />

9 9 . 0 8 , 1 1 3 . 7 7 , 1 2 9 . 5 4 , 1 4 6 . 4 8 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1218


e i n s rep ( 1 , l e n g t h ( h ) )<br />

X m a t r i x ( c ( e i n s , t , t ^2) , n c o l =3)<br />

X<br />

# K l e i n s t e Quadrate S c h ä t z e r<br />

beta . l s s o l v e ( t (X)%£%X)%£%t (X)%£%h<br />

beta . l s<br />

# Schätzung f ü r G r a v i t a t i o n s k o n s t a n t e g<br />

g 2£ beta . l s [ 3 ] /100<br />

g<br />

# Streung von beta_1<br />

V a r i a n z sum ( ( h beta . l s [ 1 ] beta . l s [ 2 ] £ t<br />

V a r i a n z<br />

beta . l s [ 3 ] £ t ^2)^2) / ( l e n g t h ( h) 3)<br />

K o v a r i a n z s o l v e ( t (X)%£%X) £ V a r i a n z<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1219


K o v a r i a n z<br />

Streuung 2£ s q r t ( K o v a r i a n z [ 3 , 3 ] ) /100<br />

Streuung<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1220


L.10.3 Länge der alten Meile<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 10 Aufgabe 3<br />

############################################<br />

# D e s i g n m a t r i x f ü r Modell 1<br />

X1 m a t r i x ( c ( 1 , 1 , 1 , 1 , 1 , 1 ,<br />

X1<br />

1 , 2 , 3 , 4 , 5 , 6 ) , n c o l =2)<br />

# B e o b a c h t u n g s v e k t o r<br />

y c (784 , 2460 , 4147 , 5826 , 7515 , 9187)<br />

y<br />

# K l e i n s t e Quadrate S c h ä t z e r<br />

<br />

beta . l s 1 s o l v e ( t (X1)%£%X1)%£%t (X1)%£%y<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1221


eta . l s 1<br />

# Streung von beta_1<br />

V a r i a n z 1 sum ( ( y beta . l s 1 [ 1 ]<br />

V a r i a n z 1<br />

X2<br />

<br />

c ( 1 : 6 ) £ beta . l s 1 [ 2 ] ) ^ 2 ) /(6 2)<br />

K o v a r i a nz1 s o l v e ( t (X1)%£%X1) £ V a r i a n z 1<br />

K o v a r i a n z 1<br />

Streuung1 s q r t ( K ovarianz1 [ 2 , 2 ] )<br />

Streuung1<br />

# D e s i g n m a t r i x f ü r Modell 2<br />

X2 m a t r i x ( rep ( 1 , 5 ) , n c o l =1)<br />

# B e o b a c h t u n g s v e k t o r<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1222


z y [2:6] y [ 1 : 5 ]<br />

z<br />

# K l e i n s t e Quadrate S c h ä t z e r<br />

beta . l s 2 s o l v e ( t (X2)%£%X2)%£%t (X2)%£%z<br />

beta . l s 2<br />

# Streung von beta_1<br />

V a r i a n z 2 sum ( ( z beta . l s 2 )^2) /(5 1)<br />

V a r i a n z 2<br />

K o v a r i a n z2 s o l v e ( t (X2)%£%X2) £ V a r i a n z 2<br />

K o v a r i a n z2<br />

Streuung2 s q r t ( K ovarianz2 )<br />

Streuung2<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1223


L.10.4 Modellanpassung, Modellwahl<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 10 Aufgabe 4<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " model . t x t "<br />

model read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( model )<br />

model<br />

# T e i l ( a )<br />

<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

############################################<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1224


# backward s e l e c t i o n<br />

lm . i i i lm (Y ~ X + I (X^2))<br />

summary ( lm . i i i )<br />

lm . i i update ( lm . i i i , . ~ . I (X^2))<br />

summary ( lm . i i )<br />

# f o r w a r d s e l e c t i o n<br />

lm . i lm (Y ~ 1)<br />

summary ( lm . i )<br />

lm . i i update ( lm . i , . ~ . + X)<br />

summary ( lm . i i )<br />

lm . i i i update ( lm . i i , . ~ . + I (X^2))<br />

summary ( lm . i i i )<br />

# AIC K r i t e r i u m<br />

<br />

s t e p ( lm . i i i )<br />

drop1 ( lm . i i i , t e s t="F" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1225


drop1 ( lm . i i i , t e s t=" Chisq " )<br />

# Cp K r i t e r i u m<br />

r e q u i r e ( l e a p s )<br />

lm1 l e a p s ( m a t r i x ( c (X, X^2) , n c o l =2) , Y)<br />

# nehme das Modell mit cp=p a l s o h i e r y=ax+b<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

p l o t (X, Y)<br />

l i n e s (X, f i t t e d ( lm . i i ) )<br />

t i t l e ( " P l o t ␣ d e r ␣ a n g e p a s s t e n ␣ Kurve " )<br />

############################################<br />

<br />

# T e i l ( c )<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1226


# 1 . M o e g l i c h k e i t<br />

#k u r v e s p l i n e f u n (X, f i t t e d ( lm . i i ) )<br />

#p o i n t s ( 2 , k u r v e ( 2) , c o l ="r e d ")<br />

# 2 . M o e g l i c h k e i t<br />

neu1 data . frame (X = 2)<br />

p o i n t s ( 2 , p r e d i c t ( lm . i i , neu1 , se . f i t =T) $ f i t ,<br />

# T e i l ( d )<br />

<br />

c o l=" r e d " )<br />

neu data . frame (X = seq ( 3 , 1, 0 . 1 ) )<br />

pred . KI p r e d i c t ( lm . i i , neu , i n t e r v a l=" p r e d i c t i o n " )<br />

l i n e s ( neu $X, pred . KI [ , 2 ] , c o l=" r e d " )<br />

l i n e s ( neu $X, pred . KI [ , 3 ] , c o l=" r e d " )<br />

############################################<br />

############################################<br />

FILENAME " l u e c k e . t x t "<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1227


l u e c k e read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

p o i n t s ( l u e c k e [ , 2 ] , l u e c k e [ , 1 ] , c o l=" b l u e " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1228


L.11 Lösungsvorschläge Blatt 11<br />

L.11.1 ANOVA<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 11 Aufgabe 1<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " m a r g a r i n e . t x t "<br />

m a r g a r i n e read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

m a r g a r i n e<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

# K o v a r i a t e a l s Faktoren k o d i e r e n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1229


m a r g a r i n e [ , 2 ] f a c t o r ( m a r g a r i n e [ , 2 ] )<br />

m a r g a r i n e [ , 3 ] f a c t o r ( m a r g a r i n e [ , 3 ] )<br />

a t t a c h ( m a r g a r i n e )<br />

par ( mfrow=c ( 2 , 1 ) )<br />

p l o t (Y ~ FaktorA £ FaktorB )<br />

windows ( )<br />

par ( mfrow=c ( 2 , 1 ) )<br />

i n t e r a c t i o n . p l o t ( FaktorA , FaktorB , Y)<br />

i n t e r a c t i o n . p l o t ( FaktorB , FaktorA , Y)<br />

# Geraden n i c h t p a r a l l e l e s g i b t I n t e r a k t i o n e n<br />

lm1 lm (Y ~ FaktorA £ FaktorB )<br />

p r i n t ( lm1 )<br />

summary ( lm1 )<br />

p l o t ( lm1 )<br />

<br />

anova ( lm1 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1230


windows ( )<br />

par ( mfrow=c ( 2 , 1 ) )<br />

qqnorm ( lm1$ r e s )<br />

q q l i n e ( lm1$ r e s )<br />

p l o t ( lm1$ f i t t e d , lm1$ r e s , x l a b=" g e f i t t e t e ␣ Werte " ,<br />

<br />

y l a b=" Residuen " )<br />

t i t l e ( " R e s i d u e n p l o t " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1231


L.11.2 Box–Cox–Transformation I<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 11 Aufgabe 2<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " gauge . t x t "<br />

gauge read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( gauge )<br />

gauge<br />

# T e i l ( a )<br />

<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

############################################<br />

############################################<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1232


lm1 lm ( g a i n ~ d e n s i t y )<br />

summary ( lm1 )<br />

par ( mfrow=c ( 2 , 1 ) )<br />

p l o t ( d e n s i t y , lm1$ r e s i d , x l a b=" d e n s i t y " ,<br />

y l a b=" Residuen " )<br />

t i t l e ( main=" R e s i d u e n p l o t s ␣ f ü r ␣ d i e ␣ O r i g i n a l d a t e n " )<br />

p l o t ( lm1$ f i t t e d , lm1$ r e s i d , x l a b=" g e f i t t e t e ␣ Werte " ,<br />

y l a b=" Residuen " )<br />

# q u a d r a t i s c h e Funktion i n d e n s i t y . . .<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

r e q u i r e (MASS)<br />

# 1 . Versuch : lambda=d e f a u l t=seq ( 3 , 3 , 0 . 1 )<br />

windows ( )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1233


par ( mfrow=c ( 1 , 3 ) )<br />

boxcox ( o b j e c t=g a i n ~ d e n s i t y )<br />

# 2 . Versuch :<br />

boxcox ( o b j e c t=g a i n ~ d e n s i t y ,<br />

# 3 . Versuch :<br />

# T e i l ( c )<br />

<br />

lambda=seq ( 0.2 , 0 , 0 . 0 1 ) )<br />

boxcox ( o b j e c t=g a i n ~ d e n s i t y ,<br />

g a i n 1 g a i n ^( 0.09)<br />

lambda=seq ( 0.1 , 0.05 , 0 . 0 1 ) )<br />

############################################<br />

############################################<br />

lm2 lm ( g a i n 1 ~ d e n s i t y )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1234


summary ( lm2 )<br />

windows ( )<br />

par ( mfrow=c ( 2 , 1 ) )<br />

p l o t ( d e n s i t y , r e s i d ( lm2 ) , x l a b=" d e n s i t y " ,<br />

y l a b=" r e s i d u e n ( g a i n ) " )<br />

t i t l e ( " R e s i d u e n p l o t ␣ f ü r ␣ d i e ␣ t r a n s f o r m i e r t e n ␣ Daten " )<br />

p l o t ( lm2$ f i t t e d , lm2$ r e s i d , x l a b=" g e f i t t e t e ␣ Werte " ,<br />

y l a b=" Residuen " )<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

windows ( )<br />

p l o t ( d e n s i t y , g a i n )<br />

l i n e s ( d e n s i t y ,<br />

<br />

f i t t e d ( lm1 ) , c o l=" b l u e " )<br />

l i n e s ( d e n s i t y , f i t t e d ( lm2)^( 1/ 0 . 0 9 ) , c o l=" r e d " )<br />

t i t l e ( " Der ␣ gauge ␣ Datensatz ␣ mit ␣ a n g e p a s s t e n ␣ Kurven " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1235


legend ( min ( d e n s i t y ) , 100 , legend=c ( " o r i g i n a l " ,<br />

<br />

" t r a n s f o r m i e r t " ) , f i l l =c ( " b l u e " , " r e d " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1236


L.11.3 Box–Cox–Transformation II<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 11 Aufgabe 3<br />

############################################<br />

# aus B l a t t 9 Aufgabe 3<br />

# E e x a k t<br />

Eexakt f u n c t i o n ( n ){ n£sum (1 / ( 1 : n ) ) }<br />

n 1:100<br />

y s a p p l y ( n , Eexakt )<br />

yn s a p p l y ( n , Eexakt ) /n<br />

r e q u i r e (MASS)<br />

# ACHTUNG boxcox t r a n s f o r m i e r t d i e y ’ s n i c h t d i e x ’ s<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1237


# > Vertauschung von y > x<br />

par ( mfrow=c ( 1 , 2 ) )<br />

boxcox ( o b j e c t=n ~ y ) # => u e b e r l i n e a r<br />

boxcox ( o b j e c t=n ~ yn ) # ~ 0 a l s o l o g<br />

par ( mfrow=c ( 1 , 1 ) )<br />

# a l s o E( n)= a £ l o g ( n ) £n + c ?<br />

lm ( y~ I ( l o g ( n ) £n ) )<br />

p l o t ( n , yn )<br />

par ( new="T" )<br />

p l o t ( n , 1 . 1 2 £n£ l o g ( n )+4.724)<br />

matplot ( n , c b i n d ( y , 1 . 1 2 £n£ l o g ( n )+4.724))<br />

r e s y 1 . 1 2 £n£ l o g ( n ) 4 . 7 2<br />

p l o t ( r e s )<br />

<br />

# so noch n i c h t b e f r i e d i g e n d . . .<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1238


# a l s o E( n ) /n= a £ l o g ( n ) + c ?<br />

lm ( yn~ I ( l o g ( n ) ) )<br />

r e s 2 1 yn 0 . 9 6 £ l o g ( n ) 0 . 7 6<br />

r e s 2 n£ ( yn 0 . 9 6 £ l o g ( n ) 0 . 7 6 )<br />

p l o t ( r e s 2 1 )<br />

p l o t ( r e s 2 )<br />

# oder : E( n)= a £ n£ l o g ( n ) + b£n + c ?<br />

lm ( y~ I ( n£ l o g ( n))+n )<br />

r e s 3 lm ( yn~ I ( n£ l o g ( n))+n ) $ r e s<br />

p l o t ( r e s 3 )<br />

# gar n i c h t s c h l e c h t , a b e r . . .<br />

# Asymptotik n i c h t gut f u e r k l e i n e s n?<br />

e r g lm ( y [ 1 0 : 1 0 0 ] ~ I ( n [ 1 0 : 1 0 0 ] £ l o g ( n [ 1 0 : 1 0 0 ] ) )<br />

<br />

p r i n t ( e r g )<br />

+ n [ 1 0 : 1 0 0 ] )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1239


e s 4 y e r g $co [ 1 ] e r g $co [ 2 ] £n£ l o g ( n )<br />

p l o t ( r e s 4 )<br />

N 1:100000<br />

<br />

n£ e r g $co [ 3 ]<br />

# schon f a s t prima . . .<br />

e r g 2 lm ( y [ 2 0 : 1 0 0 ] ~ I ( n [ 2 0 : 1 0 0 ] £ l o g ( n [ 2 0 : 1 0 0 ] ) )<br />

p r i n t ( e r g 2 )<br />

+ n [ 2 0 : 1 0 0 ] )<br />

r e s 5 y e r g 2 $co [ 1 ] e r g 2 $co [ 2 ] £n£ l o g ( n )<br />

p l o t ( r e s 5 )<br />

p l o t ( e r g 2 $ r e s )<br />

# prima , oder ?<br />

n£ e r g 2 $co [ 3 ]<br />

mach sum (1 /N) l o g (100000)<br />

p r i n t ( c ( mach=mach , gesch=e r g 2 $co [ 3 ] ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1240


d i f f=mach e r g 2 $co [ 3 ] ) )<br />

# > a u f 3 S t e l l e n genau !<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1241


L.11.4 Generalisiert lineares Modell<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 11 Aufgabe 4<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " a d v e r . t x t "<br />

a d v e r read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

a t t a c h ( a d v e r )<br />

a d v e r<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

# e r s t e S p a l t e : Wochenzaehler ,<br />

# z w e i t e S p a l t e : Anzahl d e r "JA"<br />

<br />

# d r i t t e S p a l t e : Budget<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1242


# e r z e u g e n d e r Response V a r i a b l e n : aus<br />

# t e c h n i s c h e n Gruenden ( MISSINGS ! )<br />

# b e n o e t i g t R d i e Zahl d e r ja ’ s i n e i n e r S p a l t e ,<br />

# d i e Zahl d e r nein ’ s i n e i n e r z w e i t e n<br />

p e r s o n e n m a t r i x ( c ( pers , 66 p e r s ) , n c o l =2)<br />

glm1 glm ( formula=p e r s o n e n ~ aufw , f a m i l y=b i n o m i a l )<br />

glm2 glm ( formula=p e r s o n e n ~ aufw ,<br />

summary ( glm1 )<br />

summary ( glm2 )<br />

windows ( )<br />

<br />

par ( mfrow=c ( 2 , 2 ) )<br />

p l o t ( glm1 )<br />

f a m i l y=b i n o m i a l ( l i n k=p r o b i t ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1243


windows ( )<br />

par ( mfrow=c ( 2 , 2 ) )<br />

p l o t ( glm2 )<br />

# U n t e r s t e l l t e r Zusammenhang<br />

x seq ( 0 , max( aufw ) £ 1 . 1 , 0 . 1 )<br />

# l i n e a r e P r e d i k t o r e n<br />

l p r e d 1 glm1$ coe [ 1 ] + glm1$ coe [ 2 ] £x<br />

l p r e d 2 glm2$ coe [ 1 ] + glm2$ coe [ 2 ] £x<br />

# L i n k<br />

l i n k 1 exp ( l p r e d 1 ) / (1 + exp ( l p r e d 1 ) )<br />

l i n k 2 pnorm ( l p r e d 2 )<br />

windows ( )<br />

matplot ( x , c b i n d ( l i n k 1 , l i n k 2 ) , t y p e=" l " ,<br />

<br />

y l i m=c ( 0.05 , max( p e r s / 66)+0.05) ,<br />

y l a b=" Prognose ␣ f u e r ␣ d i e ␣ Wirksamkeit " ,<br />

x l a b=" Budget " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1244


p o i n t s ( aufw , p e r s / 66)<br />

detach ( )<br />

# kaum U n t e r s c h i e d e z w s i c h e n P r o b i t <strong>und</strong> l o g i t<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1245


L.12 Lösungsvorschläge Blatt 12<br />

L.12.1 Multivariate Normalverteilung<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 12 Aufgabe 1<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# z i e h t d i e Wurzel aus e i n e r p o s i t i v d e f i n i t e n<br />

# Matrix mit svd<br />

w u r z e l f u n c t i o n ( x ){# D i a g n o s t i k :<br />

i f ( nrow ( x ) !=n c o l ( x ) )<br />

<br />

stop ( " k e i n e ␣ q u a d r a t i s c h e ␣ Matrix ! " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1246


}<br />

i f ( sum ( t ( x ) !=x )>0)<br />

stop ( " k e i n e ␣ s ymmetrische ␣ Matrix ! " )<br />

e r g svd ( x )<br />

i f ( sum ( e i g e n ( x , symmetric=T) $ v a l u e s 0)<br />

stop ( " k e i n e ␣ pos . ␣ s e m i d e f i n i t e ␣ Matrix ! " )<br />

r e t u r n ( e r g $u %£% d i a g ( s q r t ( e r g $d ) ) %£% t ( e r g $v ) )<br />

# z i e h t d i e Wurzel aus e i n e r p o s i t i v d e f i n i t e n<br />

# Matrix mit c h o l e s k i<br />

w u r z e l 2 f u n c t i o n ( x ){# D i a g n o s t i k :<br />

i f ( nrow ( x ) !=n c o l ( x ) )<br />

stop ( " k e i n e ␣ q u a d r a t i s c h e ␣ Matrix ! " )<br />

i f ( sum ( t ( x ) !=x )>0)<br />

<br />

stop ( " k e i n e ␣ s ymmetrische ␣ Matrix ! " )<br />

e r g t ( c h o l ( x ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1247


}<br />

r e t u r n ( e r g )<br />

# m e h r d i m e n s i o n a l e N o r m a l v e r t e i l u n g<br />

rnnorm f u n c t i o n ( n , mu, sigma ){<br />

}<br />

# T e i l ( b )<br />

<br />

d l e n g t h (mu)<br />

X0 m a t r i x ( rnorm ( d£n ) , d , n )<br />

X t ( w u r z e l ( sigma )%£%X0 + mu)<br />

r e t u r n (X)<br />

############################################<br />

############################################<br />

# m e h r d i m e n s i o n a l e Konvexkombination von<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1248


# N o r m a l v e r t e i l u n g e n<br />

contnorm f u n c t i o n ( n , mu . id , sigma . id , mu . c ,<br />

}<br />

sigma . c , r ){<br />

X . i d rnnorm ( n , mu . id , sigma . i d )<br />

X . c rnnorm ( n , mu . c , sigma . c )<br />

U rbinom ( n , 1 , r )<br />

X (1 U) £X . i d + U£X . c<br />

r e t u r n ( l i s t ( r=X, i d=X . id , c=X . c , U=U) )<br />

S . i d m a t r i x ( c ( 1 , 1, 1, 2 ) , 2 , 2)<br />

m. i d c ( 0 , 0 )<br />

S . c m a t r i x ( c ( 0 . 1 , 0 . 1 5 , 0 . 1 5 , 4 ) , 2 , 2)<br />

m. c c (5 , 2)<br />

X contnorm ( n=200 , mu . i d=m. id , sigma . i d=S . id ,<br />

<br />

mu . c=m. c , sigma . c=S . c , r =0.1)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1249


############################################<br />

# T e i l ( c )<br />

############################################<br />

rad qnorm (1 0 . 0 2 5 )<br />

z e r l svd ( S . i d )<br />

t h e t a seq ( from =0, to=2£ pi , by =0.01)<br />

e l l i p s e r b i n d ( rad £ cos ( t h e t a ) £ s q r t ( z e r l $d [ 1 ] ) ,<br />

rad £ s i n ( t h e t a ) £ s q r t ( z e r l $d [ 2 ] ) )<br />

e l l i p s e t ( z e r l $u %£% e l l i p s e )<br />

#Grenzen f ü r d i e P l o t s<br />

r e c e i l i n g (max( e l l i p s e [ , 1 ] , X$ r [ , 1 ] , X$ i d [ , 1 ] ) + 0 . 5 )<br />

l i f l o o r ( min ( e l l i p s e [ , 1 ] , X$ r [ , 1 ] , X$ i d [ , 1 ] ) 0 . 5 )<br />

ob c e i l i n g (max( e l l i p s e [ , 2 ] , X$ r [ , 2 ] , X$ i d [ , 2 ] ) + 0 . 5 )<br />

un f l o o r ( min ( e l l i p s e [ , 2 ] , X$ r [ , 2 ] , X$ i d [ , 2 ] ) 0 . 5 )<br />

<br />

par ( mfrow=c ( 1 , 1 ) , c o l=" dark ␣ r e d " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1250


p l o t ( e l l i p s e , t y p e=" l " , x l a b="X1" , y l a b="X2" ,<br />

x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) , lwd =2)<br />

# f e s t s t e l l e n ob i n oder n i c h t i n E l l i p s e<br />

############################################<br />

# T e i l ( d )<br />

############################################<br />

X . im . u t ( z e r l $u %£% t (X$ r ) )<br />

i n d . i n . e l l ( (X . im . u [ , 1 ] ^ 2 / z e r l $d [ 1 ] +<br />

X . im . u [ , 2 ] ^ 2 / z e r l $d [ 2 ] )


X . aus . c X$ r [ ( ! i n d . i n . e l l )&(X$U==1) ,]<br />

par ( new=T, c o l=" g r e e n " )<br />

p l o t (X . im . id , t y p e="p" , x l a b="X1" , y l a b="X2" ,<br />

par ( new=T, c o l =1)<br />

<br />

x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) )<br />

par ( new=T, c o l=" b l u e " )<br />

p l o t (X . aus . id , t y p e="p" , x l a b="X1" , y l a b="X2" ,<br />

x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) )<br />

par ( new=T, c o l=" r e d " )<br />

p l o t (X . i n . c , Xbcont . i2 , t y p e="p" , x l a b="X1" ,<br />

y l a b="X2" , x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) )<br />

par ( new=T, c o l=" orange " )<br />

p l o t (X . aus . c , t y p e="p" , x l a b="X1" ,<br />

y l a b="X2" , x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) )<br />

p l o t ( 0 , 0 , t y p e="n" , x l a b="X1" , y l a b="X2" ,<br />

x l i m=c ( l i , r e ) , y l i m=c ( un , ob ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1252


t i t l e ( e x p r e s s i o n ( p a s t e ( " B i v a r i a t e ␣ Konvexkombination ␣" ,<br />

<br />

(1 r ) , i t a l i c (N) , " ( " , mu[ i d ] , " , " , Sigma [ i d ] ,<br />

" ) ␣" , + r , i t a l i c (N) , " ( " , mu[ cont ] , " , " ,<br />

Sigma [ cont ] , " ) " ) ) )<br />

t e x t ( 0 . 5 , 3 , "95%␣ K o n f i d e n z i n t e r v a l l " ,<br />

c o l=" dark ␣ r e d " , cex =1.1)<br />

legend ( l i , un+4, legend=c ( " i d e a l ␣ i n n e r h a l b " ,<br />

" i d e a l ␣ a u ß e r h a l b " , " kont ␣ i n n e r h a l b " ,<br />

" kont ␣ a u ß e r h a l b " ) , pch =1,<br />

c o l=c ( " g r e e n " , " b l u e " , " r e d " , " orange " ) )<br />

legend ( l i , un+4, legend=c ( " i d e a l ␣ i n n e r h a l b " ,<br />

" i d e a l ␣ a u ß e r h a l b " , " kont ␣ i n n e r h a l b " ,<br />

" kont ␣ a u ß e r h a l b " ) , pch =1,<br />

c o l=c ( " g r e e n " , " b l u e " , " r e d " , " orange " ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1253


L.12.2 Clustering, Diskriminanzanalyse<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 12 Aufgabe 2<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " bank2 . t x t "<br />

bank2 read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

# complete l i n k a g e<br />

<br />

sep="" , c o l l a p s e="" ) , header=F)<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

r e q u i r e ( mva)<br />

h1 h c l u s t ( d i s t ( bank2 ) , method=" complete " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1254


p l o t ( h1 , main=" Complete ␣ L i n k a g e " )<br />

# s i n g l e l i n k a g e<br />

h2 h c l u s t ( d i s t ( bank2 ) , method=" s i n g l e " )<br />

windows ( )<br />

p l o t ( h2 , main=" S i n g l e ␣ L i n k a g e " )<br />

# a v e r a g e l i n k a g e<br />

h3 h c l u s t ( d i s t ( bank2 ) , method=" a v e r a g e " )<br />

windows ( )<br />

p l o t ( h3 , main=" Average ␣ L i n k a g e " )<br />

# Ward A l g o r i t h m u s<br />

h4 h c l u s t ( d i s t ( bank2 ) , method=" ward " )<br />

windows ( )<br />

<br />

p l o t ( h4 , main="Ward A l g o r i t h m u s " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1255


# C e n t r o i d A l g o r i t h m u s<br />

h5 h c l u s t ( d i s t ( bank2 ) , method=" c e n t r o i d " )<br />

windows ( )<br />

p l o t ( h5 , main=" C e n t r o i d A l g o r i t h m u s " )<br />

# McQuitty A l g o r i t h m u s<br />

h6 h c l u s t ( d i s t ( bank2 ) , method=" m c q u i t t y " )<br />

windows ( )<br />

p l o t ( h6 , main=" McQuitty A l g o r i t h m u s " )<br />

# Median A l g o r i t h m u s<br />

h7 h c l u s t ( d i s t ( bank2 ) , method=" median " )<br />

windows ( )<br />

p l o t ( h7 , main="Median A l g o r i t h m u s " )<br />

############################################<br />

# T e i l ( b )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1256


############################################<br />

#e = e c h t e <strong>und</strong> f = f a l s c h e Banknoten<br />

groups c ( rep ( " e " , 1 0 0 ) , rep ( " f " , 1 0 0 ) )<br />

bank c b i n d ( bank2 , groups )<br />

# T r a i n i n g s <strong>und</strong> V a l i d i e r u n g s s t i c h p r o b e<br />

t r a i n c ( 1 : 7 0 , 1 3 1 : 2 0 0 )<br />

v a l i d c ( 7 1 : 1 3 0 )<br />

r e q u i r e (MASS)<br />

# L i n e a r e DA<br />

l l d a ( groups ~ . , bank , s u b s e t=t r a i n )<br />

l . p r e p r e d i c t ( l , bank [ v a l i d , ] )<br />

# Q u a d r a t i s c h e DA<br />

<br />

q qda ( groups ~ . , bank , s u b s e t=t r a i n )<br />

q . p r e p r e d i c t ( q , bank [ v a l i d , ] )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1257


l . p r e $ c l a s s<br />

q . p r e $ c l a s s<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1258


L.12.3 Hauptkomponentenanalyse, Faktoranalyse<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 12 Aufgabe 3<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " bank2 . t x t "<br />

bank2 read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

sep="" , c o l l a p s e="" ) , header=F)<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

# 1 . M o e g l i c h k e i t<br />

bank . pr prcomp ( s c a l e ( bank2 , c e n t e r=T, s c a l e=T) )<br />

<br />

bank . pr<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1259


summary ( bank . pr )<br />

bank . pr1 prcomp ( bank2 , c e n t e r=T)<br />

bank . pr1<br />

summary ( bank . pr1 )<br />

# e q u a l s c a l e d p l o t<br />

e q s c p l o t ( bank . pr $x [ , 1 : 2 ] , t y p e="n" ,<br />

x l a b=" 1 . ␣Hauptkomp . " ,<br />

y l a b=" 2 . Hauptkomp . " )<br />

t e x t ( bank . pr $x [ , 1 : 2 ] , c ( rep ( " e " , 1 0 0 ) , rep ( " f " , 1 0 0 ) ) )<br />

t i t l e ( " Hauptkomponentenanalyse ␣ f ü r ␣ Banknoten " )<br />

windows ( )<br />

e q s c p l o t ( bank . pr1 $x [ , 1 : 2 ] , t y p e="n" ,<br />

x l a b=" 1 . ␣Hauptkomp . " ,<br />

y l a b=" 2 . Hauptkomp . " )<br />

t e x t ( bank . pr1 $x [ , 1 : 2 ] , c ( rep ( " e " , 1 0 0 ) , rep ( " f " , 1 0 0 ) ) )<br />

t i t l e ( " Hauptkomponentenanalyse ␣ f ü r ␣ Banknoten " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1260


# 2 . M o e g l i c h k e i t<br />

bank . p r i n princomp ( bank2 )<br />

summary ( bank . p r i n )<br />

p l o t ( bank . p r i n )<br />

b i p l o t ( bank . p r i n )<br />

bank . p r i n 1 princomp ( bank2 , cor=T)<br />

summary ( bank . p r i n 1 )<br />

p l o t ( bank . p r i n 1 )<br />

b i p l o t ( bank . p r i n 1 )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

<br />

# 2 Faktoren<br />

f a c t 2 f a c t a n a l ( bank2 , f a c t o r s =2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1261


f a c t 2<br />

l o a d i n g s ( f a c t 2 )<br />

varimax ( f a c t 2 $ l o a d i n g s , n o r m a l i z e = FALSE)<br />

varimax ( f a c t 2 $ l o a d i n g s )<br />

promax ( f a c t 2 $ l o a d i n g s )<br />

# 3 Faktoren<br />

f a c t 3 f a c t a n a l ( bank2 , f a c t o r s =3)<br />

f a c t 3<br />

l o a d i n g s ( f a c t 3 )<br />

varimax ( f a c t 3 $ l o a d i n g s , n o r m a l i z e = FALSE)<br />

varimax ( f a c t 2 $ l o a d i n g s )<br />

promax ( f a c t 3 $ l o a d i n g s )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1262


L.12.4 normalisierte Hauptkomponentenanalyse<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 12 Aufgabe 4<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " u s c r i m e . dat "<br />

u s c r i m e read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

sep="" , c o l l a p s e="" ) , header=F)<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

crime0 as . m a t r i x ( u s c r i m e [ , c ( 1 : 9 ) ] )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1263


#s t a n d a r d i s i e r u n g<br />

crimem a p p l y ( crime0 , 2 , mean )<br />

c r i m e s a p p l y ( crime0 , 2 , sd )<br />

c r i m e t ( ( t ( crime0) crimem ) / c r i m e s )<br />

R cor ( c r i m e )<br />

# E i g e n w e r t e <strong>und</strong> E i g e n v e k t o r e n d e r<br />

# K o r r e l a t i o n s m a t r i x<br />

EWR e i g e n (R) $ v a l u e s<br />

EVktR e i g e n (R) $ v e c t o r s<br />

EWR<br />

<br />

EVktR<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1264


#E r k l ä r t e V a r i a n z<br />

p s i 1 EWR[ 1 ] /sum (EWR)<br />

p s i 2 (EWR[1]+EWR[ 2 ] ) /sum (EWR)<br />

p s i 3 (EWR[1]+EWR[2]+EWR[ 3 ] ) /sum (EWR)<br />

p s i 1<br />

p s i 2<br />

p s i 3<br />

#U n t e r s c h i e d e z w i s c h e n den Regionen<br />

#Berechnung d e r NPCs<br />

NPC1 c r i m e %£% EVktR [ , 1 ]<br />

NPC2 c r i m e %£% EVktR [ , 2 ]<br />

NPC3 c r i m e %£% EVktR [ , 3 ]<br />

i n d 1 u s c r i m e [ ,10]==1<br />

<br />

i n d 2 u s c r i m e [ ,10]==2<br />

i n d 3 u s c r i m e [ ,10]==3<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1265


i n d 4 u s c r i m e [ ,10]==4<br />

#P l o t s<br />

par ( mfrow=c ( 2 , 2 ) )<br />

p l o t (NPC1 , NPC2 , t y p e="p" , x l a b="NPC1" ,<br />

y l a b="NPC2" , main=" e r s t e ␣ gegen ␣ z w e i t e ␣NPC" )<br />

t e x t (NPC1 [ i n d 1 ==1], NPC2 [ i n d 1 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 1 ==1], c o l=" r e d " )<br />

t e x t (NPC1 [ i n d 2 ==1], NPC2 [ i n d 2 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 2 ==1], c o l=" g r e e n " )<br />

t e x t (NPC1 [ i n d 3 ==1], NPC2 [ i n d 3 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 3 ==1], c o l=" b l a c k " )<br />

t e x t (NPC1 [ i n d 4 ==1], NPC2 [ i n d 4 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 4 ==1], c o l=" b l u e " )<br />

p l o t (NPC2 , NPC3 , t y p e="p" , x l a b="NPC2" ,<br />

y l a b="NPC3" , main=" z w e i t e ␣ gegen ␣ d r i t t e ␣NPC" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1266


t e x t (NPC2 [ i n d 1 ==1], NPC3 [ i n d 1 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 1 ==1], c o l=" r e d " )<br />

t e x t (NPC2 [ i n d 2 ==1], NPC3 [ i n d 2 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 2 ==1], c o l=" g r e e n " )<br />

t e x t (NPC2 [ i n d 3 ==1], NPC3 [ i n d 3 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 3 ==1], c o l=" b l a c k " )<br />

t e x t (NPC2 [ i n d 4 ==1], NPC3 [ i n d 4 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 4 ==1], c o l=" b l u e " )<br />

p l o t (NPC1 , NPC3 , t y p e="p" , x l a b="NPC1" ,<br />

y l a b="NPC3" , main=" e r s t e ␣ gegen ␣ d r i t t e ␣NPC" )<br />

t e x t (NPC1 [ i n d 1 ==1], NPC3 [ i n d 1 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 1 ==1], c o l=" r e d " )<br />

t e x t (NPC1 [ i n d 2 ==1], NPC3 [ i n d 2 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 2 ==1], c o l=" g r e e n " )<br />

<br />

t e x t (NPC1 [ i n d 3 ==1], NPC3 [ i n d 3 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 3 ==1], c o l=" b l a c k " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1267


t e x t (NPC1 [ i n d 4 ==1], NPC3 [ i n d 4 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 4 ==1], c o l=" b l u e " )<br />

p l o t ( c ( 1 : 9 ) , EWR, t y p e="p" , x l a b=" I n d e x " ,<br />

y l a b="Lambda" , main=" E i g e n w e r t e " )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

#Ohne V a r i a b l e a r e a o f s t a t e<br />

crimeb c r i m e [ , 2 : 9 ]<br />

Rb cor ( crimeb )<br />

# E i g e n w e r t e<br />

<br />

<strong>und</strong> E i g e n v e k t o r e n d e r<br />

# K o r r e l a t i o n s m a t r i x<br />

EWRb e i g e n (Rb) $ v a l u e s<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1268


EVktRb e i g e n (Rb) $ v e c t o r s<br />

EWRb<br />

EVktRb<br />

#E r k l ä r t e V a r i a n z<br />

p s i 1 b EWRb[ 1 ] /sum (EWRb)<br />

p s i 2 b (EWRb[1]+EWRb [ 2 ] ) /sum (EWRb)<br />

p s i 3 b (EWRb[1]+EWRb[2]+EWRb [ 3 ] ) /sum (EWRb)<br />

p s i 1 b<br />

p s i 2 b<br />

p s i 3 b<br />

#U n t e r s c h i e d e z w i s c h e n den Regionen<br />

#Berechnung d e r NPCs<br />

NPC1b crimeb %£% EVktRb [ , 1 ]<br />

<br />

NPC2b crimeb %£% EVktRb [ , 2 ]<br />

NPC3b crimeb %£% EVktRb [ , 3 ]<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1269


#P l o t s<br />

par ( mfrow=c ( 2 , 2 ) )<br />

p l o t (NPC1b , NPC2b , t y p e="p" , x l a b="NPCb1" ,<br />

y l a b="NPC2b" , main=" e r s t e ␣ gegen ␣ z w e i t e ␣NPC␣ ␣b" )<br />

t e x t (NPC1b [ i n d 1 ==1], NPC2b [ i n d 1 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 1 ==1], c o l=" r e d " )<br />

t e x t (NPC1b [ i n d 2 ==1], NPC2b [ i n d 2 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 2 ==1], c o l=" g r e e n " )<br />

t e x t (NPC1b [ i n d 3 ==1], NPC2b [ i n d 3 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 3 ==1], c o l=" b l a c k " )<br />

t e x t (NPC1b [ i n d 4 ==1], NPC2b [ i n d 4 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 4 ==1], c o l=" b l u e " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

p l o t (NPC2b , NPC3b , t y p e="p" , x l a b="NPC2" ,<br />

<br />

y l a b="NPC3" , main=" z w e i t e ␣ gegen ␣ d r i t t e ␣NPC␣ ␣b" )<br />

<br />

t e x t (NPC2b [ i n d 1 ==1], NPC3b [ i n d 1 ==1],<br />

1270


( u s c r i m e [ , 1 0 ] ) [ i n d 1 ==1], c o l=" r e d " )<br />

t e x t (NPC2b [ i n d 2 ==1], NPC3b [ i n d 2 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 2 ==1], c o l=" g r e e n " )<br />

t e x t (NPC2b [ i n d 3 ==1], NPC3b [ i n d 3 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 3 ==1], c o l=" b l a c k " )<br />

t e x t (NPC2b [ i n d 4 ==1], NPC3b [ i n d 4 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 4 ==1], c o l=" b l u e " )<br />

p l o t (NPC1b , NPC3b , t y p e="p" , x l a b="NPC1" ,<br />

y l a b="NPC3" , main=" e r s t e ␣ gegen ␣ d r i t t e ␣NPC␣ ␣b" )<br />

t e x t (NPC1b [ i n d 1 ==1], NPC3b [ i n d 1 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 1 ==1], c o l=" r e d " )<br />

t e x t (NPC1b [ i n d 2 ==1], NPC3b [ i n d 2 ==1],<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 2 ==1], c o l=" g r e e n " )<br />

t e x t (NPC1b [ i n d 3 ==1], NPC3b [ i n d 3 ==1],<br />

<br />

( u s c r i m e [ , 1 0 ] ) [ i n d 3 ==1], c o l=" b l a c k " )<br />

t e x t (NPC1b [ i n d 4 ==1], NPC3b [ i n d 4 ==1],<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1271


( u s c r i m e [ , 1 0 ] ) [ i n d 4 ==1], c o l=" b l u e " )<br />

p l o t ( c ( 1 : 8 ) , EWRb, t y p e="p" , x l a b=" I n d e x " ,<br />

y l a b="Lambda" , main=" E i g e n w e r t e " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1272


L.13 Lösungsvorschläge Blatt 13<br />

L.13.1 Zeitreihenanalyse I<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 13 Aufgabe 1<br />

############################################<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

FILENAME " daten01 . t x t "<br />

z e i t d read . t a b l e ( f i l e =p a s t e (PFAD, FILENAME ,<br />

############################################<br />

<br />

# T e i l ( a )<br />

sep="" , c o l l a p s e="" ) , header=T)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1273


############################################<br />

par ( mfrow=c ( 4 , 3 ) )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V1" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V2" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V3" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V4" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V5" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V6" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V7" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V8" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V9" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V10" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V11" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V12" , t y p e=" l " )<br />

<br />

par ( mfrow=c ( 1 , 1 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1274


#" s t a t " : 2 4 8 9 10 11<br />

## ab j e t z t i n d i e s e r R e i h e n f o l g e<br />

par ( mfrow=c ( 4 , 3 ) )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V1" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V3" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V5" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V6" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V7" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V12" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V2" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V4" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V8" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V9" , t y p e=" l " )<br />

<br />

p l o t ( z e i t d $"V1" , z e i t d $"V10" , t y p e=" l " )<br />

p l o t ( z e i t d $"V1" , z e i t d $"V11" , t y p e=" l " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1275


par ( mfrow=c ( 1 , 1 ) )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

par ( mfrow=c ( 4 , 3 ) )<br />

a c f ( z e i t d $"V1" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V3" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V5" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V6" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V7" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V12" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V2" , t y p e=" c o v a r i a n c e " )<br />

<br />

a c f ( z e i t d $"V4" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V8" , t y p e=" c o v a r i a n c e " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1276


a c f ( z e i t d $"V9" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V10" , t y p e=" c o v a r i a n c e " )<br />

a c f ( z e i t d $"V11" , t y p e=" c o v a r i a n c e " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

par ( mfrow=c ( 4 , 3 ) )<br />

a c f ( z e i t d $"V1" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V3" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V5" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V6" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V7" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V12" , t y p e=" c o r r e l a t i o n " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

par ( mfrow=c ( 4 , 3 ) )<br />

<br />

a c f ( z e i t d $"V1" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V3" , t y p e=" p a r t i a l " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1277


a c f ( z e i t d $"V5" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V6" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V7" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V12" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V2" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V4" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V8" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V9" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V10" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V11" , t y p e=" p a r t i a l " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

## nur d i e s t a t i o n a e r e n<br />

par ( mfrow=c ( 4 , 3 ) )<br />

<br />

a c f ( z e i t d $"V2" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V4" , t y p e=" c o r r e l a t i o n " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1278


a c f ( z e i t d $"V8" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V9" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V10" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V11" , t y p e=" c o r r e l a t i o n " )<br />

a c f ( z e i t d $"V2" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V4" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V8" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V9" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V10" , t y p e=" p a r t i a l " )<br />

a c f ( z e i t d $"V11" , t y p e=" p a r t i a l " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

#=><br />

#2 w e i s s e s Rauschen ?<br />

#4 AR( 1 )<br />

<br />

mit pos . K o e f f ?<br />

#8 w e i s s e s Rauschen ?<br />

#9 AR( 1 ) mit pos . K o e f f ?<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1279


#10 MA( 1 ) mit pos . K o e f f ?<br />

#11 ARMA( 1 , 1 ) oder ( 2 , 2 ) ?<br />

############################################<br />

# T e i l ( c )<br />

############################################<br />

W1 d i f f ( z e i t d $"V1" , 1 , 1 )<br />

W3 d i f f ( z e i t d $"V3" , 1 , 1 )<br />

W5 d i f f ( z e i t d $"V5" , 1 , 1 )<br />

W6 d i f f ( z e i t d $"V6" , 1 , 1 )<br />

W7 d i f f ( z e i t d $"V7" , 1 , 1 )<br />

W12 d i f f ( z e i t d $"V12" , 1 , 1 )<br />

WW1 d i f f ( z e i t d $"V1" , 1 , 2 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1280


WW3 d i f f ( z e i t d $"V3" , 1 , 2 )<br />

WW5 d i f f ( z e i t d $"V5" , 1 , 2 )<br />

WW6 d i f f ( z e i t d $"V6" , 1 , 2 )<br />

WW7 d i f f ( z e i t d $"V7" , 1 , 2 )<br />

WW12 d i f f ( z e i t d $"V12" , 1 , 2 )<br />

z e i t d d l i s t (W1=W1,W3=W3,W5=W5,W6=W6,<br />

par ( mfrow=c ( 4 , 3 ) )<br />

W7=W7, W12=W12,<br />

WW1=WW1,WW3=WW3,WW5=WW5,<br />

WW6=WW6,WW7=WW7,WW12=WW12)<br />

p l o t ( 2 : 1 0 0 , z e i t d d $"W1" , t y p e=" l " )<br />

p l o t ( 2 : 1 0 0 , z e i t d d $"W3" , t y p e=" l " )<br />

p l o t ( 2 : 1 0 0 , z e i t d d $"W5" , t y p e=" l " )<br />

<br />

p l o t ( 2 : 1 0 0 , z e i t d d $"W6" , t y p e=" l " )<br />

p l o t ( 2 : 1 0 0 , z e i t d d $"W7" , t y p e=" l " )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1281


p l o t ( 2 : 1 0 0 , z e i t d d $"W12" , t y p e=" l " )<br />

p l o t ( 3 : 1 0 0 , z e i t d d $"WW1" , t y p e=" l " )<br />

p l o t ( 3 : 1 0 0 , z e i t d d $"WW3" , t y p e=" l " )<br />

p l o t ( 3 : 1 0 0 , z e i t d d $"WW5" , t y p e=" l " )<br />

p l o t ( 3 : 1 0 0 , z e i t d d $"WW6" , t y p e=" l " )<br />

p l o t ( 3 : 1 0 0 , z e i t d d $"WW7" , t y p e=" l " )<br />

p l o t ( 3 : 1 0 0 , z e i t d d $"WW12" , t y p e=" l " )<br />

par ( mfrow=c ( 1 , 1 ) )<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1282


L.13.2 Zeitreihenanalyse II<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 13 Aufgabe 2<br />

############################################<br />

############################################<br />

# T e i l ( a )<br />

############################################<br />

r e q u i r e ( t s )<br />

X arima . sim ( n=100 , l i s t ( a r =.7 , ma=.35) ,<br />

X<br />

p l o t (X)<br />

ac1 a c f (X, t y p e=" c o r r e l a t i o n " )<br />

<br />

pac1 p a c f (X)<br />

sd=s q r t ( 0 . 5 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1283


e s t arima (X, o r d e r=c ( 1 , 0 , 1 ) )<br />

e s t<br />

p l o t ( e s t $ r e s i d u a l s )<br />

############################################<br />

# T e i l ( b )<br />

############################################<br />

data ( LakeHuron )<br />

LH2 LakeHuron 570<br />

LH2z LH2 mean (LH2)<br />

p l o t ( LH2z )<br />

e s t 2 arima (LH2 , o r d e r=c ( 1 , 0 , 1 ) )<br />

e s t 2<br />

p l o t ( e s t 2 $ r e s i d u a l s )<br />

ac2 a c f (LH2 , t y p e=" c o r r e l a t i o n " )<br />

<br />

pac2 p a c f (LH2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1284


# V o r h e r s a g e<br />

p r e d i c t ( est2 , n . ahead = 5)<br />

prog p r e d i c t ( est2 , n . ahead = 5) $ pred<br />

<br />

+ mean (LH2) + 570<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1285


L.13.3 Räumliche Statistik<br />

############################################<br />

# L o e s u n g s v o r s c h l a g zu B l a t t 13 Aufgabe 3<br />

############################################<br />

# Nach S k r i p t f i l e g e o R i n t r o . R<br />

##<br />

##<br />

## Commands i n c l u d e d i n the g e o R i n t r o web page<br />

##<br />

##<br />

## 1 . S o u r c i n g the package<br />

##<br />

r e q u i r e ( geoR )<br />

PFAD "C : / E i gene ␣ D a t e i e n / . . . /"<br />

<br />

FILENAME " s101 . RData"<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1286


l o a d ( f i l e =p a s t e (PFAD, FILENAME , sep="" , c o l l a p s e="" ) )<br />

par . o r i par ( no . r e a d o n l y=TRUE)<br />

##<br />

## 2 . D e s c r i p t i v e p l o t s<br />

##<br />

p l o t ( s101 )<br />

##<br />

par ( mfrow = c ( 2 , 2 ) , mar=c ( 3 , 3 , 1 , 1 ) , mgp=c ( 2 , 1 , 0 ) )<br />

p o i n t s ( s101 , x l a b = " Coord ␣X" , y l a b = " Coord ␣Y" )<br />

p o i n t s ( s101 , x l a b = " Coord ␣X" , y l a b = " Coord ␣Y" ,<br />

pt . d i v i d e = " rank . prop " )<br />

p o i n t s ( s101 , x l a b = " Coord ␣X" , y l a b = " Coord ␣Y" ,<br />

cex . max = 1 . 7 ,<br />

c o l = gray ( seq ( 1 , 0 . 1 , l =100)) ,<br />

pt . d i v i d e = " e q u a l " )<br />

p o i n t s ( s101 , pt . d i v i d e = " q u i n t i l e " ,<br />

x l a b = " Coord ␣X" , y l a b = " Coord ␣Y" )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1287


par ( par . o r i )<br />

##<br />

## 3 . Variograms<br />

##<br />

c l o u d 1 v a r i o g ( s101 , o p t i o n = " c l o u d " , max . d i s t =1)<br />

c l o u d 2 v a r i o g ( s101 , o p t i o n = " c l o u d " ,<br />

e s t i m a t o r . t y p e = " modulus " , max . d i s t =1)<br />

b i n 1 v a r i o g ( s101 , uvec=seq ( 0 , 1 , l =11))<br />

b i n 2 v a r i o g ( s101 , uvec=seq ( 0 , 1 , l =11) ,<br />

par ( mfrow=c ( 2 , 2 ) )<br />

e s t i m a t o r . t y p e= " modulus " )<br />

p l o t ( cloud1 , main = " c l a s s i c a l ␣ e s t i m a t o r " )<br />

p l o t ( cloud2 , main = " modulus ␣ e s t i m a t o r " )<br />

p l o t ( bin1 , main = " c l a s s i c a l ␣ e s t i m a t o r " )<br />

p l o t ( bin2 , main = " modulus ␣ e s t i m a t o r " )<br />

<br />

par ( par . o r i )<br />

##<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1288


i n 1 v a r i o g ( s101 , uvec = seq ( 0 , 1 , l =11) ,<br />

b i n . c l o u d = T)<br />

b i n 2 v a r i o g ( s101 , uvec = seq ( 0 , 1 , l =11) ,<br />

par ( mfrow = c ( 1 , 2 ) )<br />

e s t i m a t o r . t y p e = " modulus " ,<br />

b i n . c l o u d = T)<br />

p l o t ( bin1 , b i n . c l o u d = T,<br />

main = " c l a s s i c a l ␣ e s t i m a t o r " )<br />

p l o t ( bin2 , b i n . c l o u d = T,<br />

main = " modulus ␣ e s t i m a t o r " )<br />

par ( par . o r i )<br />

##<br />

b i n 1 v a r i o g ( s101 , uvec = seq ( 0 , 1 , l =11))<br />

p l o t ( b i n 1 )<br />

l i n e s . v a r i o m o d e l ( l i s t ( nugget = 0 ,<br />

<br />

cov . p a r s = c ( 1 , 0 . 3 ) , max . d i s t = 1 ,<br />

cov . model = " exp " ) , lwd = 3)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1289


smooth v a r i o g ( s101 , o p t i o n = " smooth " ,<br />

max . d i s t = 1 , n . p o i n t s = 100 ,<br />

k e r n e l = " normal " , band = 0 . 2 )<br />

l i n e s ( smooth , t y p e =" l " , l t y = 2)<br />

legend ( 0 . 3 , 0 . 4 ,<br />

##<br />

c ( " e m p i r i c a l " , " e x p o n e n t i a l ␣ model " , " smoothed " ) ,<br />

l t y = c ( 1 , 1 , 2 ) , lwd = c ( 1 , 3 , 1 ) )<br />

v a r i o 6 0 v a r i o g ( s101 , max . d i s t = 1 , d i r e c t i o n=p i / 3)<br />

v a r i o . 4 v a r i o g 4 ( s101 , max . d i s t = 1)<br />

p l o t ( v a r i o . 4 )<br />

##<br />

## 4 . Parameter e s t i m a t i o n<br />

##<br />

## F i t t i n g<br />

<br />

models with nugget f i x e d to z e r o<br />

ml l i k f i t ( s101 , i n i = c ( 1 , 0 . 5 ) , f i x . nugget = T)<br />

reml l i k f i t ( s101 , i n i = c ( 1 , 0 . 5 ) , f i x . nugget = T,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1290


method = "RML" )<br />

o l s v a r i o f i t ( bin1 , i n i = c ( 1 , 0 . 5 ) , f i x . nugget = T,<br />

w e i g h t s=" e q u a l " )<br />

w l s v a r i o f i t ( bin1 , i n i = c ( 1 , 0 . 5 ) , f i x . nugget = T)<br />

## F i t t i n g models with a f i x e d v a l u e f o r the nugget<br />

ml . f n l i k f i t ( s101 , i n i = c ( 1 , 0 . 5 ) , f i x . nugget = T,<br />

nugget = 0 . 1 5 )<br />

reml . f n l i k f i t ( s101 , i n i = c ( 1 , 0 . 5 ) ,<br />

f i x . nugget = T, nugget = 0 . 1 5 ,<br />

method = "RML" )<br />

o l s . f n v a r i o f i t ( bin1 , i n i = c ( 1 , 0 . 5 ) ,<br />

f i x . nugget = T, nugget = 0 . 1 5 ,<br />

w e i g h t s=" e q u a l " )<br />

w l s . f n v a r i o f i t ( bin1 , i n i = c ( 1 , 0 . 5 ) ,<br />

f i x . nugget = T, nugget = 0 . 1 5 )<br />

## F i t t i n g models e s t i m a t e d nugget<br />

ml . n l i k f i t ( s101 , i n i = c ( 1 , 0 . 5 ) , nug = 0 . 5 )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1291


eml . n l i k f i t ( s101 , i n i = c ( 1 , 0 . 5 ) , nug = 0 . 5 ,<br />

##<br />

method = "RML" )<br />

o l s . n v a r i o f i t ( bin1 , i n i = c ( 1 , 0 . 5 ) , nugget =0.5 ,<br />

w e i g h t s=" e q u a l " )<br />

w l s . n v a r i o f i t ( bin1 , i n i = c ( 1 , 0 . 5 ) , nugget =0.5)<br />

##<br />

par ( mfrow = c ( 1 , 3 ) )<br />

p l o t ( bin1 , main =<br />

e x p r e s s i o n ( p a s t e ( tau ^2 == 0 , "␣␣ ( f i x e d ) " ) ) )<br />

l i n e s ( ml , max . d i s t = 1)<br />

l i n e s ( reml , lwd = 2 , max . d i s t = 1)<br />

l i n e s ( o l s , l t y = 2 , max . d i s t = 1)<br />

l i n e s ( wls , l t y = 2 , lwd = 2 , max . d i s t = 1)<br />

legend ( 0 . 5 , 0 . 4 ,<br />

legend = c ( "ML" , "REML" , "OLS" , "WLS" ) ,<br />

l t y = c ( 1 , 1 , 2 , 2 ) , lwd = c ( 1 , 2 , 1 , 2 ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1292


p l o t ( bin1 , main =<br />

e x p r e s s i o n ( p a s t e ( tau ^2 == 0 . 1 5 , "␣␣ ( f i x e d ) " ) ) )<br />

l i n e s ( ml . fn , max . d i s t = 1)<br />

l i n e s ( reml . fn , lwd = 2 , max . d i s t = 1)<br />

l i n e s ( o l s . fn , l t y = 2 , max . d i s t = 1)<br />

l i n e s ( w l s . fn , l t y = 2 , lwd = 2 , max . d i s t = 1)<br />

legend ( 0 . 5 , 0 . 4 ,<br />

##<br />

l e g e n d = c ( "ML" , "REML" , "OLS" , "WLS" ) ,<br />

l t y = c ( 1 , 1 , 2 , 2 ) , lwd = c ( 1 , 2 , 1 , 2 ) )<br />

p l o t ( bin1 , main =<br />

e x p r e s s i o n ( p a s t e ( " e s t i m a t e d ␣␣" , tau ^2)))<br />

l i n e s ( ml . n , max . d i s t = 1)<br />

l i n e s ( reml . n , lwd = 2 , max . d i s t = 1)<br />

l i n e s ( o l s . n , l t y = 2 , max . d i s t = 1)<br />

<br />

l i n e s ( w l s . n , l t y =2, lwd = 2 , max . d i s t = 1)<br />

legend ( 0 . 5 , 0 . 4 ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1293


##<br />

l e g e n d = c ( "ML" , "REML" , "OLS" , "WLS" ) ,<br />

l t y = c ( 1 , 1 , 2 , 2 ) , lwd = c ( 1 , 2 , 1 , 2 ) )<br />

par ( par . o r i )<br />

##<br />

#s a v e . image ( )<br />

ml . n<br />

summary ( ml . n )<br />

##<br />

## 5 . Variogram E n v e l o p e s<br />

##<br />

env . mc v a r i o g . mc . env ( s101 , o b j . v a r=b i n 1 )<br />

env . model v a r i o g . model . env ( s101 , o b j . v a r=bin1 ,<br />

par ( mfrow=c ( 1 , 2 ) )<br />

<br />

model=w l s )<br />

p l o t ( bin1 , e n v e l o p e=env . mc)<br />

p l o t ( bin1 , e n v e l o p e=env . model )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1294


par ( par . o r i )<br />

##<br />

## 6 . P r o f i l e l i k e l i h o o d<br />

##<br />

p r o f p r o f l i k ( ml , geodata = s101 ,<br />

par ( mfrow=c ( 1 , 3 ) )<br />

##<br />

<br />

s i l l . v a l = seq ( 0 . 4 8 , 2 , l =11) ,<br />

range . v a l = seq ( 0 . 1 , 0 . 5 2 , l =11) ,<br />

u n i . o n l y = FALSE)<br />

p l o t ( p r o f , n l e v e l s =16)<br />

par ( par . o r i )<br />

##<br />

## 7 . Cross v a l i d a t i o n<br />

## z e i t a u f w e n d i g ! ! !<br />

xv . ml x v a l i d ( s101 , model=ml )<br />

xv . w l s x v a l i d ( s101 , model=w l s )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1295


xvR . ml x v a l i d ( s101 , model=ml , r e e s t=TRUE)<br />

xvR . w l s x v a l i d ( s101 , model=wls , r e e s t=TRUE,<br />

#s a v e . image ( )<br />

##<br />

v a r i o g . o b j=b i n 1 )<br />

par ( mfcol = c ( 5 , 2 ) , mar=c ( 2 . 5 , 2 . 5 , . 5 , . 5 ) ,<br />

mgp=c ( 1 . 8 , 0 . 8 , 0 ) )<br />

p l o t ( xv . w l s )<br />

par ( par . o r i )<br />

##<br />

## 8 . K r i g i n g<br />

##<br />

p l o t ( s101 $ coords , x l i m=c ( 0 , 1 . 2 ) , y l i m=c ( 0 , 1 . 2 ) )<br />

l o c i m a t r i x (<br />

c ( 0 . 2 , 0 . 6 , 0 . 2 , 1 . 1 , 0 . 2 , 0 . 3 , 1 . 0 , 1 . 1 ) ,<br />

t e x t ( l o c i , as . c h a r a c t e r ( 1 : 4 ) , cex =1.3 , c o l=" r e d " )<br />

n c o l =2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1296


polygon ( x=c ( 0 , 1 , 1 , 0 ) , y=c ( 0 , 0 , 1 , 1 ) , l t y =2)<br />

kc4 k r i g e . conv ( s101 , l o c a t i o n s = l o c i , k r i g e =<br />

## d e f i n i n g the g r i d<br />

#s a v e . image ( )<br />

<br />

k r i g e . c o n t r o l ( cov . p a r s = w l s $ cov . p a r s ) )<br />

pred . g r i d expand . g r i d ( seq ( 0 , 1 , l =51) ,<br />

seq ( 0 , 1 , l =51))<br />

#pred . g r i d expand . g r i d ( seq ( 0 , 1 , l =101) ,<br />

# seq ( 0 , 1 , l =101))<br />

## k r i g i n g c a l c u l a t i o n s<br />

kc k r i g e . conv ( s101 , l o c a t i o n s = pred . g r i d , k r i g e =<br />

k r i g e . c o n t r o l ( cov . p a r s = ml$ cov . p a r s ) )<br />

## d i s p l a y i n g p r e d i c t e d v a l u e s<br />

image ( kc , l o c = pred . g r i d , coords = s101 $ coords ,<br />

##<br />

c o l=gray ( seq ( 1 , 0 . 1 , l =30)))<br />

## 9 . B a y e s i a n p r e d i c t i o n<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1297


##<br />

pr p r i o r . c o n t r o l ( p h i . d i s c r e t e = seq ( 0 , 5 , l =101) ,<br />

p h i . p r i o r=" r e c " )<br />

bsp4 k r i g e . bayes ( s101 , l o c = l o c i , p r i o r = pr ,<br />

output = output . c o n t r o l ( n . p o s t =10000))<br />

h i s t ( bsp4 $ p o s t e r i o r $ sample $ beta , main="" ,<br />

x l a b=e x p r e s s i o n ( beta ) , prob = T)<br />

h i s t ( bsp4 $ p o s t e r i o r $ sample $ sigmasq , main="" ,<br />

x l a b=e x p r e s s i o n ( sigma ^2) , prob = T)<br />

h i s t ( bsp4 $ p o s t e r i o r $ sample $ phi , main="" ,<br />

x l a b=e x p r e s s i o n ( p h i ) , prob = T)<br />

p l o t ( bin1 , y l i m = c ( 0 , 2 ) )<br />

l i n e s ( bsp4 , max . d i s t = 1 . 2 )<br />

l i n e s ( bsp4 , max . d i s t = 1 . 2 , summ = " median " ,<br />

l t y = 2)<br />

l i n e s ( bsp4 , max . d i s t = 1 . 2 , summ = "mean" ,<br />

lwd = 2 , l t y = 2)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1298


legend ( 0 . 4 , 0 . 4 ,<br />

l e g e n d = c ( " p o s t e r i o r ␣mode" , " p o s t e r i o r ␣ median " ,<br />

#s a v e . image ( )<br />

##<br />

" p o s t e r i o r ␣mean" ) , l t y = c ( 1 , 2 , 2 ) ,<br />

lwd = c ( 1 , 1 , 2 ) )<br />

par ( mfrow=c ( 2 , 2 ) , mar=c ( 3 , 3 , . 5 , . 5 ) , mgp=c ( 1 . 5 , . 7 , 0 ) )<br />

f o r ( i i n 1 : 4 ) {<br />

## c u r v e ( dnorm ( x , mean=kc4 $ pred [ i ] ,<br />

## sd=s q r t ( kc4 $ k r i g e . v a r [ i ] ) ) ,<br />

## from=kc4 $ pred [ i ] 3£ s q r t ( kc4 $ k r i g e . v a r [ i ] ) ,<br />

## kc4 $ pred [ i ] +3£ s q r t ( kc4 $ k r i g e . v a r [ i ] ) )<br />

kpx seq ( kc4 $ pred [ i ] 3£ s q r t ( kc4 $ k r i g e . v a r [ i ] ) ,<br />

kc4 $ pred [ i ] +3£ s q r t ( kc4 $ k r i g e . v a r [ i ] ) ,<br />

l =100)<br />

kpy dnorm ( kpx , mean=kc4 $ pred [ i ] ,<br />

sd=s q r t ( kc4 $ k r i g e . v a r [ i ] ) )<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1299


p d e n s i t y ( bsp4 $ p r e d i c $ sim [ i , ] )<br />

r x range ( c ( kpx , bp$x ) )<br />

r y range ( c ( kpy , bp$y ) )<br />

p l o t ( c b i n d ( rx , r y ) , t y p e="n" ,<br />

x l a b=p a s t e ( " L o c a t i o n " , i ) , y l a b=" d e n s i t y " ,<br />

x l i m=c ( 4 , 4 ) , y l i m=c ( 0 , 1 . 1 ) )<br />

l i n e s ( kpx , kpy , l t y =2)<br />

l i n e s ( bp )}<br />

par ( par . o r i )<br />

## d e f i n i g g r i d<br />

pred . g r i d expand . g r i d ( seq ( 0 , 1 , l =51) ,<br />

## B a y e s i a n p r e d i c t i o n<br />

<br />

seq ( 0 , 1 , l =51))<br />

#pred . g r i d expand . g r i d ( seq ( 0 , 1 , l =101) ,<br />

# seq ( 0 , 1 , l =101))<br />

## s e h r z e i t a u f w e n d i g ! ! !<br />

bsp k r i g e . bayes ( s101 , l o c = pred . g r i d , p r i o r =<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1300


#s a v e . image ( )<br />

p r i o r . c o n t r o l ( p h i . d i s c r e t e = seq ( 0 , 5 , l =101)) ,<br />

output=output . c o n t r o l ( n . p r e d i c t i v e =2))<br />

par ( mfrow=c ( 2 , 2 ) , mar=c ( 3 , 3 , 3 , 0 ) )<br />

image ( bsp , l o c = pred . g r i d , main = " p r e d i c t e d " ,<br />

c o l=gray ( seq ( 1 , 0 . 1 , l =30)))<br />

image ( bsp , v a l =" v a r i a n c e " , l o c = pred . g r i d ,<br />

main = " p r e d i c t i o n ␣ v a r i a n c e " ,<br />

c o l=gray ( seq ( 1 , 0 . 1 , l =30)))<br />

image ( bsp , v a l = " s i m u l a t i o n " , number . c o l = 1 ,<br />

l o c = pred . g r i d , main =<br />

"a␣ s i m u l a t i o n ␣ from \ nthe ␣ p r e d i c t i v e ␣ d i s t r i b u t i o n " ,<br />

c o l=gray ( seq ( 1 , 0 . 1 , l =30)))<br />

image ( bsp , v a l = " s i m u l a t i o n " , number . c o l = 2 ,<br />

l o c = pred . g r i d , main =<br />

<br />

" a n o t h e r ␣ s i m u l a t i o n ␣ from ␣\n<br />

␣␣␣␣ the ␣ p r e d i c t i v e ␣ d i s t r i b u t i o n " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1301


c o l=gray ( seq ( 1 , 0 . 1 , l =30)))<br />

par ( par . o r i )<br />

##<br />

## 1 0 . S i m u l a t i o n<br />

##<br />

sim1 g r f (100 , cov . p a r s=c ( 1 , . 2 5 ) )<br />

p o i n t s . geodata ( sim1 , main=<br />

image ( sim3 , main=<br />

" s i m u l a t e d ␣ l o c a t i o n s ␣and␣ v a l u e s " )<br />

p l o t ( sim1 , max . d i s t =1, main=<br />

" t r u e ␣and␣ e m p i r i c a l ␣ v a r i o g r a m s " )<br />

sim2 g r f (441 , g r i d=" r e g " , cov . p a r s=c ( 1 , . 2 5 ) )<br />

image ( sim2 , main="a␣\" s m a l l i s h \"␣ s i m u l a t i o n " ,<br />

c o l=gray ( seq ( 1 , . 1 , l =30)))<br />

sim3 g r f (40401 , g r i d=" r e g " , cov . p a r s=c ( 1 0 , . 2 ) ,<br />

met=" c i r c " )<br />

"a␣much␣ f i n e r ␣ g r i d ␣ f o r ␣ the ␣␣ s i m u l a t i o n " ,<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1302


##<br />

##<br />

##<br />

<br />

c o l=gray ( seq ( 1 , . 1 , l =30)))<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1303


L.14 Lösungsvorschläge Blatt 14<br />

L.14.1 Entwurf einer Simulationsklasse<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1304


L.14.2 Indexoperator<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1305


L.14.3 Simulationsklasse II<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1306


L.14.4 Schätzerauswertungsklasse<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1307


L.15 Lösungsvorschläge Blatt 15<br />

L.15.1 Checken/Erstellen eines Pakets<br />

L.15.2 Anlegen eines Daten-Pakets<br />

L.15.3 Anlegen eines eigenen R-Pakets<br />

L.15.4 Arbeit mit Sweave<br />

L.16 Lösungsvorschläge Blatt 16<br />

<br />

L.16.2 R <strong>und</strong> MySQL<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1308


L.16.3 Aufruf von C Code unter R<br />

L.16.4 Aufruf von Fortran Code unter R<br />

L.16.5 Paralleles Rechnen mit R<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1309


Literatur<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1310


Literatur<br />

Homepage John Chambers: http://cm.bell-labs.com/cm/ms/who/jmc/pub.html.<br />

R Development Core Team (2006): R: A language and environment for statistical computing. R<br />

Fo<strong>und</strong>ation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0. http://www.R-project.org.<br />

—— (2006a): R: An Introduction to R. R Fo<strong>und</strong>ation for Statistical Computing, Vienna, Austria.<br />

http://cran.r-project.org/doc/manuals/R-intro.pdf. 8.3.11 (b)<br />

—— (2006b): R: Writing R Extensions. R Fo<strong>und</strong>ation for Statistical Computing, Vienna, Austria.<br />

http://cran.r-project.org/doc/manuals/R-exts.pdf. 3.4, 8.2.3, 8.2.6, 8.2.6 (j), 8.3.2, 8.3.5, 8.3-4, 8.3-6,<br />

8.3.5 (f), 8.3.6, 8.4.4 (b)<br />

—— (2006c): R: R Language Definition. R Fo<strong>und</strong>ation for Statistical Computing, Vienna, Austria.<br />

http://cran.r-project.org/doc/manuals/R-lang.pdf. 3.4, 3.6.3<br />

—— (2006d): R: R Installation and Administration. R Fo<strong>und</strong>ation for Statistical Computing, Vienna,<br />

Austria. http://cran.r-project.org/doc/manuals/R-admin.pdf. 8.2.10, 8.2-3, 8.3.12 (a)<br />

—— (2006e): R: Manuals-Homepage. R Fo<strong>und</strong>ation for Statistical Computing, Vienna, Austria.<br />

http://cran.r-project.org/manuals.html.<br />

—— (2006f): R: weitere Dokumentation. http://cran.r-project.org/other-docs.html.<br />

Homepage Auckland Workshop: (2003): http://www.stat.auckland.ac.nz/S-Workshop/.<br />

Baron, J.(2005): “R reference card”. Zu beziehen unter<br />

http://cran.r-project.org/doc/contrib/refcard.pdf 0.6<br />

<br />

Short, T.(2005): “R reference card”. Zu beziehen unter<br />

http://cran.r-project.org/doc/contrib/Short-refcard.pdf 0.6<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1311


Ruckdeschel, Kohl, Stabla and Camphausen(2006): Homepage zu Paket “distr”:<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/DISTR.<br />

Aho A.V., Sethi R. and Ullman J.D. (1988): Compilerbau. Teil 1. (Compiler construction. Pt 1).<br />

Internationale Computer-Bibliothek. Addison-Wesley Publishing Company, Bonn etc. 1.10-1<br />

Anderson T. (1984): An introduction to multivariate statistical analysis. Wiley Series in Probability and<br />

Mathematical Statistics. John Wiley & Sons, Inc., 2. Aufl. 7.2.3 (c)<br />

Bates, D. (2003): Using external routines. http://www.stat.wisc.edu/courses/st771-bates/slides/wk3-4.pdf.<br />

8.3.5 (d)<br />

Bavington, M. (2003): Debugging Without (Too Many) Tears.. R-News, 3(3): 29–32. 3.4<br />

Becker R.A., Chambers J.M. and Wilks A.R. (1988): The new S language. A programming environment for<br />

data analysis and graphics.. Wadsworth & Brooks/Cole Computer Science Series. Wadsworth &<br />

Brooks/Cole Advanced Books & Software., Pacific Grove, CA. 8.1.3 (a)<br />

Belsley D.A., Kuh E. and Welsch R.E. (1980): Regression diagnostics: identifying influential data and<br />

sources of collinearity. Wiley Series in Probability and Mathematical Statistics: Applied Probability and<br />

Statistics Section. Chapman and Hall. 7.1.1 (e)<br />

Bengtsson H. (2003): The R.oo package - object-oriented programming with references using standard R<br />

code. In: Hornik K., Leisch F. and Zeileis A. (Eds.) Proceedings of the 3rd International Workshop on<br />

Distributed Statistical Computing (DSC 2003). Vienna, Austria. Published as<br />

http://www.ci.tuwien.ac.at/Conferences/DSC-2003/. 8.1.3 (c)<br />

Booch G. (1995): Objektorientierte Analyse <strong>und</strong> Design. (Object oriented analysis and design).<br />

Addison-Wesley., 1., korrigierter Nachdruck Deutsche Übersetzung. 8.1.1 (a)<br />

<br />

Brockwell P.J. and Davis R.A. (1991): Time series: theory and methods. Springer Series in Statistics.<br />

Springer, 2. Aufl. 7.3.1 (b)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1312


—— (2002): Introduction to time series and forecasting. Springer Texts in Statistics. Springer, 2. Aufl.<br />

7.3.1 (b)<br />

Chambers J.M. (1993a): Classes and methods in S. I: Recent developments. Comput. Stat., 8(3): 167–184.<br />

http://cm.bell-labs.com/stat/doc/93.26.ps. 8.1.3 (a)<br />

—— (1993b): Classes and methods in S. II: Future directions. Comput. Stat., 8(3): 185–196.<br />

http://cm.bell-labs.com/stat/doc/93.27.ps. 8.1.3 (a)<br />

—— (1998): Programming with data. A guide to the S language. Springer. Siehe auch<br />

http://cm.bell-labs.com/stat/Sbook/index.html. 0.1.4, 0.6, 8.1.3 (a), 8.1-2, 8.1-6, 8.1.7, 8.1.9, 8.3.10 (b),<br />

8.3.10 (c)<br />

Chambers J.M. and Hastie T.J. (1992): Statistical models in .. Wadsworth & Brooks/Cole Computer<br />

Science Series. Wadsworth & Brooks/Cole Advanced Book & Software., Pacific Grove, CA. 8.1.3 (a)<br />

Christensen R. (1996): Plane answers to complex questions. The theory of linear models. Springer Texts in<br />

Statistics. Springer, 2. Aufl. 7.1-2<br />

Cleveland W.S. (1985): The Elements of Graphing Data. Wadsworth. 4.3-2, 4.4.2 (c)<br />

—— (1993): Visualizing Data. Hobart Press, Summit, N.J. 4.6<br />

Cliff A. and Ord J. (1981): Spatial processes: models and applications.. Pion Ltd., London. 7.4.1 (c)<br />

Cook R. and Weisberg S. (1982): Residuals and influence in regression. Monographs on Statistics and<br />

Applied Probability. Chapman and Hall. 7.1.1 (e)<br />

Cressie N.A. (1991): Statistics for spatial data.. Wiley Series in Probability and Mathematical Statistics.<br />

John Wiley & Sons. 7.4.1 (c)<br />

<br />

Dalgaard P. (2002): Introductory Statistics with R. Springer. Siehe auch<br />

http://www.biostat.ku.dk/ pd/ISwR.html 0.6<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1313


Davis J.C. (1986): Statistics and Data Analysis in Geology. John Wiley and Sons, 2. Aufl. 7.4.1 (c)<br />

Dolić D. (2004): Statistik mit R. Oldenbourg. Siehe auch http://www.dolic.de/R/index.html 0.6<br />

Durbin J. and Koopman S.J. (2001): Time Series Analysis by State Space Methods. Oxford University<br />

Press. 7.3.1 (b)<br />

Efron B. and Tibshirani R.J. (1993): An introduction to the bootstrap, Bd. 57 von Monographs on<br />

Statistics and Applied Probability. Chapman & Hall. 2.9.3<br />

Fahrmeir L. and Tutz G. (2001): Multivariate statistical modelling based on generalized linear models..<br />

Springer Series in Statistics. Springer, 2. Aufl. 7.1.2 (a)<br />

Fahrmeir L., Hamerle A. and Tutz G. (Hrsg.) (1996): Multivariate statistische Verfahren.(Multivariate<br />

statistical methods). Springer Series in Statistics. Walter de Gruyter, 2., revidierte Aufl. Unter<br />

Mitarbeit von Wolfgang Brachinger, Walter Häußler, Heinz Kaufmann, Peter Kemény, Christian<br />

Kredler, Willi Nagl, Friedemann Ost, Heinz Pape.<br />

Faraway J.J. (2002): Practical Regression and Anova using R.<br />

http://cran.r-project.org/doc/contrib/Faraway-PRA.pdf. 0.6, 7.1-2, 7.1.1 (i)<br />

—— (2004): Linear Models with R. CRC Press. Siehe auch http://www.stat.lsa.umich.edu/ faraway/LMR/.<br />

Fletcher R. (1987): Practical methods of optimization. Wiley, 2. Aufl. 6.5.4<br />

Flury B. (1997): A first course in multivariate statistics. Springer Texts in Statistics. Springer. 7.2.3 (c)<br />

Flury B. and Riedwyl H. (1983): Angewandte multivariate Statistik. Computergestuetzte Analyse<br />

mehrdimensionaler Daten. Gustav Fischer Verlag, Stuttgart - New York. 7.2.3 (c)<br />

<br />

Fox J. (2002): An R and S-<strong>Plus</strong> Companion to Applied Regression. Sage Publications, Thousand Oaks, CA,<br />

USA. http://www.socsci.mcmaster.ca/jfox/Books/Companion/. 0.6, 8.4.3 (b)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1314


Geiger C. and Kanzow C. (1999): Numerische Verfahren zur Lösung unrestringierter Optimierungsaufgaben.<br />

(Numerical methods for solution of unconstrained optimization problems). Springer. 6.5.4<br />

—— (2002): Theorie <strong>und</strong> Numerik restringierter Optimierungsaufgaben. (Theory and numerics of<br />

constrained problems of optimization).. Springer. 6.5.4<br />

Geist G.A., Kohl, J.A. and Papadopoulos P.M. (1996): PVM and MPI: A Comparison of Features.<br />

Calculateurs Paralleles, 8(2) http://www.csm.ornl.gov/pvm/PVMvsMPI.ps 8.3-8<br />

Gentleman R. (2002): S4 Classes in 15 Pages, more or less.<br />

http://www.biostat.harvard.edu/courses/individual/bio271/lectures/L11/S4Objects.pdf. 0.1.4<br />

—— (2003): Object Orientated Programming. Slides of a Short Course held in Auckland .<br />

http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/Methods.pdf.<br />

Georgii H.O. (2002): Stochastik: Einführung in die Wahrscheinlichkeitstheorie <strong>und</strong> Statistik. de Gruyter<br />

Lehrbuch. de Gruyter. 2.3-15<br />

Gouriéroux C. (1997): ARCH Models and financial applications.. Springer Series in Statistics. Springer.<br />

7.3.1 (b)<br />

Granger C. and Newbold P. (1986): Forecasting economic time series.. Economic Theory, Econometrics,<br />

and Mathematical Economics. Academic Press, Inc. (Harcourt Brace Jovanovich, Publishers), 2. Aufl.<br />

7.3.1 (b)<br />

Hamilton J.D. (1994): Time series analysis. Princeton University Press. 7.3.1 (b), 7.3.5 (a)<br />

Hammersley J. and Handscomb D. (1964): Monte Carlo methods. Methuens Monographs on Applied<br />

Probability and Statistics. Methuen & Co. Ltd. / John Wiley & Sons Inc. , London / New York.<br />

2.3.2 (g)<br />

<br />

Hampel F.R., Ronchetti E.M., Rousseeuw P.J. and Stahel W.A. (1986): Robust statistics. The approach<br />

based on influence functions. Wiley Series in Probability and Mathematical Statistics. Wiley. 5.2.3 (e)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1315


Härdle W., Müller M., Sperlich S. and Werwatz A. (1998): Non– and Semiparametric Modelling.<br />

http://wotan.wiwi.hu-berlin.de/statistik/lehrmaterial/statmat_e.html. 2.7, 2.7.3 (d)<br />

Härdle, W. (1991a): Applied nonparametric regression, Bd. 19 von Econometric Society Monographs.<br />

Cambridge University Press. 2.7<br />

—— (1991b): Smoothing techniques. With implementation in S. Springer Series in Statistics.<br />

Springer-Verlag. 2.7.2<br />

Härdle, W. and Simar, L. (2003): Applied Multivariate Statistical Analysis. Springer.<br />

http://www.quantlet.com/mdstat/scripts/mva/pdf/mvapdf.pdf. 7.2.3 (c), A.12.4<br />

Harvey A. (1993): Time series models. Harvester Wheatsheaf, 2. Aufl. 7.3.1 (b)<br />

Huber P.J. (1977): Robust statistical procedures, Bd. 27 von CBMS - NSF Regional Conference Series in<br />

Applied Mathematics.. Society for Industrial and Applied Mathematics (SIAM), Philadelphia,<br />

Pennsylvania. 5.2.3 (e)<br />

—— (1981): Robust statistics. Wiley Series in Probability and Mathematical Statistics. Wiley. 5.2.3 (e)<br />

Ihaka R. and Gentleman R. (1996): R: A language for data analysis and graphics. Journal of Computational<br />

and Graphical Statistics, 5(3): 299–314.<br />

Isaaks E. and Srivastava R. (1989): An introduction into applied geostatistics. Oxford university press.<br />

7.4.1 (c)<br />

Knuth D.E. (1998): The art of computer programming, Bd. 2 – Seminumerical algorithms.<br />

Addison-Wesley, Bonn, 3. Aufl. 2.3.2 (f), 2.3.2 (g)<br />

Krause A. and Olson M. (2000): The basics of S and S-<strong>Plus</strong>. Statistics and Computing. Springer, 2. Aufl.<br />

<br />

Ligges U. (2005): Programmieren mit R. Springer Texts in Statistics. Springer. Siehe<br />

http://www.statistik.uni-dortm<strong>und</strong>.de/~ligges/PmitR/ 0.6, 8.2.7<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1316


Luenberger D. (1969): Optimization by vector space methods (Series in Decision and Control). John Wiley<br />

and Sons, Inc. 6.5.4<br />

Luenberger D.G. (1984): Linear and nonlinear programming. Addison-Wesley Publishing Company, 2. Aufl.<br />

6.5.4<br />

Mardia K.V., Kent J.T. and Bibby J.M. (1979): Multivariate analysis. Probability and Mathematical<br />

Statistics. Academic Press. 7.2.3 (c)<br />

Marsaglia G. (1997): A random number generator in C.. Discussion paper; posting on Usenet newsgroup<br />

‘sci.stat.math’. 2.3.2 (f)<br />

Marsaglia G. and Zanan A. (1994): Some portable very-long-period random number genrators. Computers<br />

in Physics, 8: 117–121. 2.3.2 (f)<br />

Matsumoto M. and Nishimura T. (1998): Mersenne twister: A 623-dimensionally equidistributed uniform<br />

pseudo-random number generator. ACM Trans. Model. Comput. Simul., 8(1): 3–30. 2.3.2 (f)<br />

McCullagh P. and Nelder J. (1989): Generalized linear models, Bd. 37 von Monographs on Statistics and<br />

Applied Probability. Chapman and Hall, 2. Aufl. 7.1.2 (a)<br />

Na Li M. and Rossini A.J. (2001): RPVM: Cluster Statistical Computing in R. R News, 1(3): 4–7. Siehe<br />

http://CRAN.R-project.org/doc/Rnews/. 8.3.12 (c), 8.3-8<br />

Nagel M., Wernecke K.D. and Fleischer W. (1994): Computergestützte Datenanalyse. (Computer<br />

supported data analysis). Verlag Technik, München. 7.1.1 (h)<br />

Nolan D. and Speed T. (2000): Stat Labs. Mathematical statistics through applications. Springer Texts in<br />

Statistics. Springer.<br />

<br />

Peng, R. (2002): An Introduction to the Interactive Debugging Tools in R.<br />

http://www.biostat.jhsph.edu/ rpeng/docs/R-debug-tools.pdf. 3.4, 3.4-3<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1317


Pinheiro J.C. and Bates D. (2000): Mixed-Effects Models in S and S-<strong>Plus</strong>. Springer Texts in Statistics.<br />

Springer. http://nlme.stat.wisc.edu/MEMSS/. 8.4.3 (b)<br />

Press W.H., Teukolsky S.A., Vetterling W.T. and Flannery B.P. (1992): Numerical recipes in C. The art of<br />

scientific computing. Cambridge Univ. Press, 2. Aufl. 6.4.3, 6.4.4, 6.5.4, 6.5.5<br />

Rieder H. (1994): Robust asymptotic statistics. Springer Series in Statistics. Springer. 5.2.3 (e), 1<br />

Ripley B.D. (1981): Spatial statistics.. Wiley Series in Probability and Mathematical Statistics. John Wiley<br />

& Sons. 7.4.1 (c)<br />

—— (1987): Stochastic simulation. Wiley Series in Probability and Mathematical Statistics. Applied<br />

Probability and Statistics. John Wiley & Sons. 0.1.4, 2.3-7, 2.3-8, 2.3.2 (g), 2.8.3<br />

—— (1991): Statistical inference for spatial processes. Cambridge University Press. 7.4.1 (c)<br />

—— (2004): Lazy Loading and Packages in R 2.0.0. R News, 4(2): 2–5. Siehe<br />

http://CRAN.R-project.org/doc/Rnews/. 8.2.4<br />

Rossini A.J., Tierney L. and Na Li, M. (2003): Simple Parallel Statistical Computing in R. UW Biostatistics<br />

Working Paper Series. University of Washington 193. http://www.bepress.com/uwbiostat/paper193.<br />

8.3.12 (c), 8.3-8<br />

Rothman P.e. (1999): Nonlinear time series analysis of economic and financial data, Bd. 1 von Dynamic<br />

Modeling and Econometrics in Economics and Finance. Kluwer Academic Publishers. 7.3.1 (b)<br />

Ruckdeschel P., Kohl M., Stabla T., and Camphausen F. (2006): S4 Classes for Distributions. R-News,<br />

6(2): 10–13. http://CRAN.R-project.org/doc/Rnews/. Siehe auch<br />

http://www.uni-bayreuth.de/departments/math/org/mathe7/RUCKDESCHEL/pubs/distr.pdf. 0.1.6, 2.2<br />

<br />

Sachs L. and Hedderich J. (2006 ): Angewandte Statistik. Methodensammlung mit R. Springer.<br />

(Taschenbuch) 12., vollst. neu bearb. Aufl. 0.6<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1318


Sawitzki G. (2005): Einführung in S. Zu beziehen unter<br />

http://www.statlab.uni-heidelberg.de/projects/s/s.pdf.<br />

Schlittgen R. and Streitberg B.H.J. (1987): Zeitreihenanalyse. (Time series analysis). R. Oldenbourg<br />

Verlag, München-Wien, 2. Aufl. 7.3.1 (b)<br />

Shumway R.H. and Stoffer D.S. (2000): Time series analysis and its applications.. Springer Texts in<br />

Statistics. Springer. 7.3.1 (b)<br />

Silverman B. (1986): Density estimation for statistics and data analysis. Monographs on Statistics and<br />

Applied Probability. Chapman and Hall. 2.7<br />

Stoer J. (1999): Numerische Mathematik. 1: Eine Einführung - unter Berücksichtigung von Vorlesungen<br />

von F. L. Bauer. (Numerical mathematics. 1: An introduction - <strong>und</strong>er consideration of lectures by F. L.<br />

Bauer). Springer, 8., revidierte <strong>und</strong>erweiterteAufl. 6.1.2, 6.4.3<br />

Stoyan D., Kendall W.S. and Mecke J. (1995): Stochastic geometry and its applications. Wiley Series in<br />

Probability and Mathematical Statistics. John Wiley & Sons Ltd., 2. Aufl. 7.4.1 (c)<br />

Stroustrup B. (1987): Die C++ Programmiersprache. (The C++ programming language). Internationale<br />

Computer-Bibliothek. Addison-Wesley Verlag. Deutsche Übersetzung. 8.1.1 (a)<br />

Tierney L. (2003b): Namespace Management for R. R News, 3(1): 2–6. Siehe<br />

http://CRAN.R-project.org/doc/Rnews/. 8.2.7<br />

—— (2003b): Notes on the Generational GC for R. http://www.stat.uiowa.edu/~luke/R/bytecode.html. 8.3.2,<br />

8.3.10 (a)<br />

—— (2003c): Notes on Compilation in R. http://www.stat.uiowa.edu/~luke/R/gengcnotes.html.<br />

<br />

Unwin D. (1981): Introductory spatial analysis. Methuen, New York, London. 7.4.1 (c)<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1319


Venables W. and Ripley B. (1999): Modern Applied Statistics with S-<strong>Plus</strong>. Statistics and Computing.<br />

Springer, 3. Aufl. inzwischen (2002) ist die 4. Aufl. erhältich; siehe dazu auch<br />

http://www.stats.ox.ac.uk/pub/MASS4/ 2, 0.1.3, 0.1.4, 0.2, 0.4, 0.6, 0.7, 161, 1.10.4, 1.10.4, 2.6, 3, 3.4-4,<br />

3.6.1 (c), 3.6-3, 4.4-1, 7.1.1 (c), 7.1.1 (e), 7.2.5, 8.4.3 (b)<br />

—— (2000): S Programming. Statistics and Computing. Springer. Siehe dazu auch<br />

http://www.stats.ox.ac.uk/pub/MASS3/Sprog/ 0.6, 8.4.3 (b)<br />

von Alemann H. (1984): Der Forschungsprozess. Eine Einführung in die Praxis der empirischen<br />

Sozialforschung. Studienskripten zur Soziologie. Teubner, Stuttgart, 2 Aufl. (document)<br />

Wei W.W.S. (1990): Time series analysis. Univariate and multivariate methods. Addison-Wesley. 7.3.1 (b)<br />

Wichmann B. and Hill I. (1982): Algorithm AS 183: An Efficient and Portable Pseudo-random Number<br />

Generator. Applied Statistics, 31: 188–90. Remarks: 34, 198 and 35, 89. 2.3.2 (f)<br />

Yu H. (2002): Rmpi: Parallel Statistical Computing in R. R News, 2(2): 10–14. Siehe<br />

http://CRAN.R-project.org/doc/Rnews/. 8.3.12 (c), 8.3-8<br />

<br />

<br />

Mathematik VII<br />

Peter Ruckdeschel<br />

Matthias Kohl<br />

R/S-plus <strong>für</strong><br />

<strong>Einsteiger</strong> <strong>und</strong><br />

<strong>Fortgeschrittene</strong><br />

1320

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!