H. P. Wolf
Statistik und Informatik
Fakultät für Wirtschaftswissenschaften
Universität Bielefeld
Wie bekommt man einen Führerschein für statistische Werkzeuge? Leider (?) gibt es so einen Schein bei uns noch nicht, und es gibt demzufolge auch keine allgemeinen gesetzlichen Regelungen, wie ein solcher zu erlangen ist. Dennoch benötigt man für einen geeigneten Umgang mit statistischen Werkzeugen sowohl theoretisches Grundwissen wie auch praktische Erfahrung. Wird nur Theorie vermittelt, wird der Studierende in realen Problemsituationen die Übertragungsleistung nicht bewältigen können und kapitulieren müssen. Lernt er an Beispielen, Kochrezepte einzusetzen, bleiben Zusammenhänge wie auch die Bedeutung von Annahmen unreflektiert, so daß eine adäquate Interpretation der Ergebnisse unterbleiben wird. Ziel der statistischen Ausbildung muß es also sein, statistische Konzepte theoretisch wie auch in ihrer Anwendung zu vermitteln.
Die klassische Vorlesung begleitet von Kleingruppenübungen kann die Einführung in das theoretische Gebäude leisten. Auch können an kleinen Beispielen die Konzepte verdeutlicht werden. Reale Problemfälle, die in der Regel mit größeren Datenmengen verbunden sind, lassen sich aber ohne weiteres nicht diskutieren. Hierfür wird eine Unterstützung durch Rechner mit statistischer Software notwendig, die aber nicht für Ausbildungssituationen geschaffen sind. Mit diesem vorliegenden elektronischen Buch, dem revbook , wird ein Versuch gemacht, den beschriebenen Mangel zu mildern. Durch dieses Buch, das in gespeicherter Form auf Rechnern vielerlei Funktionalitäten bietet, erhält der Lernende ein neues Medium, mit dem und in dem er werkeln und erfahren kann.
Um Erfahrungen an einem konkreten Gegenstand zu machen, beginnen die Gedanken dieser Abhandlung in einem realen Problembereich. In diesem werden Fragen aufgeworfen und unter Einsatz von statistischen Konzepten und Werkzeugen beantwortet.
Dieses Buch dient damit zwei unterschiedlichen Zielen:
Das Buch soll als zusätzliches Angebot eine Einführungsvorlesung begleiten. Deshalb werden nicht alle Grundkonzepte der Statistik hier eingeführt. So erfährt zum Beispiel der Wahrscheinlichkeitsbegriff keine nähere Problematisierung, sondern es wird davon ausgegangen, daß solche theoretischen Konzepte an anderer Stelle vertieft erklärt werden. Zur Unterstützung enthält der Text aber Literaturhinweise.
Ebenso findet keine Einführung in S-PLUS statt. S-PLUS ist die Software, die dieses elektronische Buch als Fundament hat. Für einen Anfänger dürfte die Sprache S-PLUS sehr viele kleine technische Probleme aufwerfen, die ihn von der eigentlichen Auseinandersetzung ablenken können. Deshalb ist von der Beherrschung der Sprache vorsetzlich auch nicht ausgegangen worden. Alle S-PLUS-Anweisungsfolgen sind für ihre Benutzung zu Modulen, von denen der Anfänger nur die satzähnlichen Namen erfährt, zusammengefaßt. Module können direkt und zum Teil auch über Menüs angesprochen werden. Der Kenner von S-PLUS kann natürlich von seinem Wissen profitieren, und der Neugierige kann stöbern und die Inhalte der Module herausfinden.
ghostview revbook.psJedoch ist das Lesen eines Buches an einem Bildschirm eine Zumutung und auch hier nicht angestrebt. Hauptanliegen der Rechnerversion besteht darin, interaktiv mit dem Buch arbeiten zu können. Dazu läßt sich das Buch als Abfolge von Textstücken (text chunks) und Anweisungsblöcken (code chunks) auffassen. Die Texte sind für den menschlichen Leser bestimmt und beinhalten, wie gesagt, Gedanken, Ergebnisse und Interpretationen. Die Anweisungsblöcke, die in den verschiedenen Kapiteln auftauchen, bestehen im wesentlichen aus Modulaufrufen, deren Definitionen über die eingetragenen Referenznummern im Anhang zu finden sind.
SplusS-PLUS meldet sich dann mit dem Eingabeaufforderungszeichen (Prompt) > .
> motif()Hiernach ist das neue Graphik-Fenster das aktive Fenster.
> library(revive)
> show.revbook()umsetzen. Hierdurch wird das schon oben erwähnte Programm ghostview
mit passender Input-Datei gestartet. ( ghostview wird mit einem Druck auf die Taste Q wieder geschlossen.)
> open.revbook()Nun müssen einige Initialisierungen ablaufen, die einige Meldungen ausgeben. Andernfalls ist ein Fehler aufgetreten, den es zu beheben gilt.
revive.. 9 -: s MENUHiernach wird das Hauptmenu angezeigt. Mit diesem kann der Bediener zu bestimmten Punkten im Buch gelangen oder spezielle Menüs einzelner Kapitel aktivieren.
revive.. 9 -: s 10Die Nummer des Moduls findet man im revbook auf dem linken Rand neben dem gewünschten Anweisungsblock.
revive.. 9 -: > 1+1liefert erwartungsgemäß 2.
Zur Information folgt ein Abdruck des zentralen Menüs:
------------------------------ Abk.: lange Bezeichnung: ------------------------------ items: a Abbruch b MENU allgemeines Menu c start.mz Kapitel Masszahlen d start.gr Kapitel Graphische Beschreibungstechniken e start.mu Kapitel Multivariate Beschreibungstechniken f start.mo Kapitel Modellierungsschritte g start.nv Kapitel Normalverteilung h v.bern Abschnitt Bernoulli-Verteilung i v.binom Abschnitt Binomial-Verteilung j v.geom Abschnitt geometrische Verteilung k v.exp Abschnitt Exponentialverteilung l v.pois Abschnitt Poisson-Verteilung m menu.mz Menue Masszahlen n menu.gr Menue Graphische Beschreibungstechniken o menu.mu Menue Multivariate Beschreibungstechniken p menu.mo Menue Modellierungsschritte Selection:
Autorenkollektiv, ohne Jahr:
Grundausbildung in Statistik für Wirtschaftswissenschaftler,
FU Berlin, Universität Bielefeld, TU Hannover, Ruck-Zuck-Druck, Bielefeld.
BAMBERG, G., BAUR, F., 1980:
Statistik,
Oldenbourg Verlag, München/Wien.
CHAMBERS, J.M., CLEVELAND, W.S., KLEINER, B., TUKEY, P.A., 1983:
Graphical Methods for Data Analysis,
Duxbury Press, Boston.
HOAGLIN, D.C., MOSTELLER, F., TUKEY, J.W., (EDS.), 1982:
Understanding Robust & Exploratory Data Analysis.
John Wiley & Sons, New York.
LANG, L., WOLF, H.P., 1995:
Ein Spidery WEB System für SPLUS.
Diskussionspapier Nr. 296, der Fakultät für
Wirtschaftswissenschaften
der Universität Bielefeld, Bielefeld.
SCHLITTGEN, R., 1990:
Einführung in die Statistik,
Oldenbourg Verlag, München/Wien.
VENABLES, W.N., RIPLEY, B.D., 1994:
Modern Applied Statistics with S-Plus,
Springer-Verlag, New York/Berlin.
BECKER, R.A., CHAMBERS, J.M., WILKS, A.R., 1980:
The new S Language,
Wadsworth & Brooks/Cole, Pacific Grove.
WOLF, P., 1995:
Eine Reportschmiede für den Datenanalytiker.
Diskussionspapier Nr. 301 der Fakultät für
Wirtschaftswissenschaften
der Universität Bielefeld, Bielefeld.
kann aber auch über die Auswahlmenus auf diese Daten zugegriffen werden. Hierfür ist es nicht erforderlich, die Namen der Variablen zu kennen.
[1:]
<<*>>=
cat("Revbook:1.a:start.mz:Kapitel Masszahlen\n")
Zum Literaturstudium sei hingewiesen auf: [Autorenkollektiv:
Abschnitte über Lokalisationsmaße und Maßzahlen der Variabilität],
[Bamberg, Baur: Abschnitte über Lageparameter und Streuungsparameter],
[Schlittgen: Abschnitte über Lageparameter und Streuungsparameter].
Die treibenden Fragen in allgemeiner Formulierung zu diesem Kapitel sind:
Für die zulässige Anwendung eines Werkzeuges müssen im allgemeinen bestimmte Bedingungen erfüllt sein. Dies gilt auch für Werkzeuge der Statistik. So kann man nicht jedes Datenmaterial mit jedem Werkzeug bearbeiten und dann die resultierenden Rechenergebnisse interpretieren. Statistische Verfahren, in denen mit Daten gerechnet wird, erwarten, daß die Rechenoperationen für die Daten geeignet sind. Für die Beobachtungen männlich und weiblich ist die Addition keine geeignete Operation, da für eine Addition ein nominales Skalenniveau nicht ausreicht. Auch geordnete Größenklassen erfüllen diese Forderung nicht (Beispiel hierfür: winzig, klein, normal, groß, riesig). Erst eine metrisch skalierte Variable erlaubt Summation und Durchschnittsbildung; hier lassen sich auch Differenzen der Beobachtungen sinnvoll interpretieren. Für die im folgenden eingesetzten Operationen wird implizit die Zulässigkeit unterstellt. Fragen der Metrik werden nicht näher diskutiert. Hierzu sei auf die Literatur verwiesen.
[2:]
<<*>>=
<<lege Zwischenzeiten vom 03.02.97 auf {\tt x} ab>>
<<drucke {\tt x} aus>>
[1] 1077 4862 24449 554 164 1667 67 3670 639 350 83 524 [13] 2236 403 240 6 131 2 1 44 351 615 14 12 [25] 8 106 312 1183 697 1021 771 46 153 29 672 516 [37] 116 285 73 15 120 14 490 788 600 117 2772 197 [49] 6 11 2 1 19 21 503 1374 133 337 320 1754 [61] 119 44 433 718 158 46 712 58 139 40 165 344 [73] 1378 588 455 870 2409 1021 547 10 1 8 40 67 [85] 166 1145 778 260 1515 540 1281 1965 207 1913 2330 174 [97] 573 1702 49 107 290 362 1381

abgelegten Zahlen berechnet. / steht für Division, + , - und *
für Addition, Substraktion und Multiplikation. Außerdem sei noch bemerkt, daß S-PLUS die Funktion mean() kennt, die das arithmetische Mittel der ihr übergebenen Variablen berechnet. Hier ist das Modul zur Mittelwertberechnung von x :
[3:]
<<*>>=
<<berechne Mittelwert von {\tt x}>>
Mittelwert [1] 823.8Da die Daten als Einheit Sekunden haben, beträgt die durchschnittliche Wartezeit auf den nächsten Zugriff eine knappe Viertelstunde. Das scheint nicht sehr viel zu sein.

[4:]
<<*>>=
<<berechne Median von {\tt x}>>
Median [1] 312Fast jedes zweite Mal beträgt also der Abstand zwischen zwei Zugriffsversuchen weniger als 6 Minuten. Damit erscheint die Belastung viel höher zu sein, als das Mittel vermuten ließ.
[5:]
<<*>>=
<<berechne Extrema von {\tt x}>>
Maximum [1] 24449 Minimum [1] 1In der Tat weicht der größte Wert erheblich von dem Bereich (bis 1000) ab, in dem sich die bisher berechneten Lageparameter befinden. Damit wird klar, daß man das Mittel in dem vorliegenden Fall nicht ohne weiteres als Argument für Belastungsfragen heranziehen darf.

[6:]
<<*>>=
<<berechne Midrange von {\tt x}>>
Midrange [1] 12225

[7:]
<<*>>=
<<berechne getrimmtes Mittel von {\tt x}>>
getrimmtes Mittel
Wieviel Prozent sollen an jeder Seite enfernt werden?
Eingabe:
[1] 10
ergibt:
[1] 439.11
Das getrimmte Mittel liegt offensichtlich dem Median viel näher als
das nicht getrimmte. Haben Sie hierfür eine Erklärung?

(Die Definition eines empirischen Quantils ist nicht genormt, so daß kleine Unterschiede auftreten können. Diese spielen für größere Stichprobenumfänge kaum eine Rolle. Werden jedoch von verschiedenen Software-Produkte unterschiedliche Werte ermittelt, kann das auf unterschiedliche Definitionen zurückzuführen sein. S-PLUS sieht die Welt so: Das p-Quantil ist gegeben durch g-1(p), wobei g-1 die Umkehrfunktion von g(x) ist; g(x) ist die Funktion, die sich aus dem Polygonzug der Punkte (x(i), (i-1)/(n-1)) ergibt. x(i) ist dabei der i-te Wert der Rangwertreihe (sortierte Folge der Werte).)

Auch diese Begriffe sind nicht genormt.

verkettet mehrere Dinge zu einer großen Einheit.
[8:]
<<*>>=
<<berechne Trimean von {\tt x}>>
Trimean [1] 357.75Der Leser kann sich nun überlegen, welche Vorteile das Trimean aufweist.

[9:]
<<*>>=
<<berechne Spannweite von {\tt x}>>
Spannweite [1] 2444824448 Sekunden sind ungefähr 400 Minuten oder 6 Stunden und 40 Minuten. Die Wartezeiten auf den nächsten Serverzugriff schwanken also erheblich. Wie schon oben festgestellt wurde, kann es sein, daß man nur 1 Sekunde auf den nächsten Zugriff warten muß. Jedoch gab es auch eine Phase von über 6 Stunden Länge, in der keine Tätigkeit stattfand. Könnten solche Schwankungen zufällig entstanden sein oder gibt Erklärungen? Überlegen Sie einmal, inwieweit sich Lebensgewohnheiten auf die Serverbelastung auswirken könnten! (Übrigens können Serverbelastungen auch auf die zu zahlenden Telefongebühren zurückwirken!)


[10:]
<<*>>=
<<berechne Stichprobenvarianz von {\tt x}>>
Stichprobenvarianz [1] 6187227Diese Zahl erzeugt wirklich Interpretationsprobleme.
[11:]
<<*>>=
<<berechne Standardabweichung von {\tt x}>>
Stichprobenstandardabweichung [1] 2487.4Hiermit läßt sich vielleicht vermuten, daß sehr viele Beobachtungen in einem Bereich von [ mean(x)-2500 , mean(x)+2500 ] anzutreffen sind. Überlegen Sie, welche Datenkonstellationen zu einer Stichprobenstandardabweichung von 2500 führen.

[12:]
<<*>>=
<<berechne Inter-Quartilsabstand von {\tt x}>>
Inter-Quartilsabstand [1] 682Der Größenordnung nach paßt dieses Ergebnis besser zu den Lokalisationsmaßen Median und getrimmtes arithmetisches Mittel.
Als Antwort auf die Belastungsfragen können wir formulieren: Jede zweite Zwischenzeit zwischen zwei Zugriffszeitpunkten liegt in etwa unter 6 Minuten. 50 % der Zeitabstände liegen in einem Intervall mit einer Länge von etwas weniger als 11 Minuten.
[13:]
<<*>>=
<<berechne zusammenfassende Statistiken von {\tt x}>>
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
1 62.5 312 823.8 744.5 24450 2487.4 103
Wir sehen die Extremwerte, den Mittelwert, den Median und die beiden
Quartile. Außerdem werden die Stichprobenstandardabweichung (
Std.Dev.
)
und der Stichprobenumfang mit ausgegeben.
Damit wird der Datensatz auf acht Zahlen reduziert, aus denen
vieles bezüglich Lage und Variabilität abzulesen ist. Mit diesen Zahlen
ist der Datensatz recht gut beschrieben. Im besonderen erkennt man, daß die
Daten asymmetrisch verteilt sind. Median und Mittel stimmen nicht gut
überein und beide liegen nicht in der Mitte zwischen den Extremwerten.
(Übrigens werden manchmal zur Datenanalyse sogenannte Letter-Value-Diagramme
erstellt. Diese zeigen den Median, die Extremwerte und die Quartile sowie
den Stichprobenumfang in tabellarischer Form.
Versuchen Sie, in der Literatur Beispiele zu finden!
Überlegen Sie den Gebrauchswert dieser Diagramme!)
Eine Klasse von Transformationen ist durch die Box-Cox-Transformationen gegeben.

Je nach Wahl des Parameters
ergibt sich eine andere Transformation.
[14:]
<<*>>=
<<transformiere {\tt x} mittels Box-Cox-Transformation, zeige Statistiken>>
Statistiken der transformierten Daten
[1] "Bitte lambda eingeben:"
1: 0
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0 4.133 5.743 5.265 6.612 10.1 2.0082 103
[15:]
<<*>>=
cat("Revbook:1.m:menu.mz:Menue Masszahlen\n")
<<Auswahl zu den Aufgaben des ersten Kapitels>>
Zur Information wird das Auswahlmenü präsentiert:
Revbook:1.m:menu.mz:Menue Masszahlen items: a Abbruch/Ende b lege Daten auf x ab c zeige x an d zeige Rangwertreihe von x an e berechne Mittelwert f berechne Median g berechne Extrema h berechne Midrange i berechne getrimmtes Mittel j berechne Trimean k berechne Stichprobenvarianz l berechne Standardabweichung m berechne Inter-Quartilsabstand n berechne zusammenfassende Statistiken o transformiere mittels Box-Cox-Transformation Selection:
[16:]
<<*>>=
cat("Revbook:2.a:start.gr:Kapitel Graphische Beschreibungstechniken\n")
Zum Literaturstudium sei hingewiesen auf: [Autorenkollektiv:
Abschnitt über Graphische Darstellungen des Inhalts von Häufigkeitstabellen
sowie Abschnitt über empirische Verteilungsfunktionen],
[Bamberg, Baur: Kapitel über Auswertungsmethoden für eindimensionales
Datenmaterial],
[Schlittgen: Kapitel über Darstellung eindimensionaler Datensätze].
Zu den oben aufgeführten allgemeinen Fragen
Im folgenden werden die zum Teil um den Einsatz konkurrienden Instrumente Boxplot, Jitterplot, Stabdiagramm, Stem-and-Leaf-Diagramm, Histogramm, Dichtespur und der Plot der empirischen Verteilungsfunktion vorgestellt.
zusammen mit den oben gestellten Fragen zur Serverbelastung.
[17:]
<<*>>=
<<lege Zwischen-Zeitpunkte vom 03.02.97 auf {\tt x} ab>>

Die Zahlen von eins bis fünf besitzen die Extrema eins und fünf, den Median drei und die Quartile zwei und vier. Als graphische 5-Zahlen-Zusammenfassung ergibt sich mit dem Modul:
[18:]
<<*>>= <<erstelle graphische 5-Zahlen-Zusammenfassung von 1, 2, 3, 4, 5>>... folgendes Bild:
[19:]
<<*>>=
<<erstelle graphische 5-Zahlen-Zusammenfassung von {\tt x}>>
Die Box, in der 50 % der Daten liegen sollen, ist nicht mehr als Box zu erkennen. Sie befindet sich im unteren Bereich des Bildes, fast zu einem Strich degeneriert. Der größte Teil der Daten muß unter 1000 gesucht werden. Damit hat man eine grobe Vorstellung von der Lage der Daten. Besonders auffällig ist die starke Asymmetrie des Datensatzes, für die das obere Viertel der Werte verantwortlich zu sein scheint. Diese großen Werte beanspruchen soviel von dem gesamten Darstellungsbereich, daß sich selbst das Minimum nicht mehr von der Box abhebt. Für eine präzisere Antwort auf die Lagefrage müßte man eine Ausschnittsvergrößerung betrachten.
Werden die vertikalen Linien (whiskers), die von der Box ausgehen, höchstens eine standardisierte Spanne lang und weiter entfernt liegende Werte isoliert gezeichnet, erhält man den Boxplot.

[20:]
<<*>>=
<<erstelle Boxplot zu {\tt x}>>
Wesentlich wirkt sich auf das Erscheinungsbild wieder der größte Beobachtungswert aus. Dieser liegt weit von den übrigen Werten entfernt. Man erahnt den Einfluß der großen Zwischenzeiten auf Mittel (Schwerpunkt) und Stichprobenvarianz. Möglicherweise sind mehrere Werte von der Größe 24449 vorhanden. Wir wollen uns die 10 größten und die 10 kleinsten Werte (das sind die ersten und die letzten 10 Werte der Rangwertreihe) ausdrucken.
[21:]
<<*>>=
<<zeige die 10 kleinsten und die 10 gr\"o{\ss}ten Werte von {\tt x} an>>
10 kleinsten Werte von x: [1] 1 1 1 2 2 6 6 8 8 10 10 groessten Werte von x: [1] 24449 4862 3670 2772 2409 2330 2236 1965 1913 1754Offensichtlich gibt es nur einen Wert der Größe 24449. Der zweitgrößte ist von dem Maximum schon erheblich entfernt. Weiter sieht man, daß die Abstände zwischen den anderen großen Werten noch um ein Vielfaches größer sind als die Abstände zwischen den kleinsten Werten.
Die enorme Asymmetrie unseres Datensatzes kann vielleicht durch eine Transformation gemildert werden. Versuchen wir das Logarithmieren. Wir wollen deshalb einen Boxplot der logarithmierten Daten erstellen.
[22:]
<<*>>=
<<erstelle Boxplot zu {\tt log(x)}>>
In der Tat ist das Erscheinungsbild jetzt deutlich symmetrischer. Das logarithmierte Minimum wird isoliert als möglicher Ausreißer dargestellt. Der horizontale Strich markiert übrigens gleich drei Beobachtungen (vgl. oben die kleinsten 10 Werte).
Wir wollen das Maximum als Ausreißer einstufen und für die weiteren Betrachtungen aus dem Datensatz x entfernen.
[23:]
<<*>>=
<<bilde Ausschnitt der Daten {\tt x}>>
Wir wollen den Boxplot für die verbleibenden Daten erstellen.
[24:]
<<*>>=
<<erstelle Boxplot zu {\tt x}>>
Wir erhalten:
Dieser Boxplot erscheint für die Belastungsfragen eher geeignet zu sein. Wir sehen, daß 75 % der Daten unterhalb von ca. 800 liegen, mehr als 50 % liegen unter 500. Zum Maximum hin dünnen die Werte immer mehr aus. Das Minimum liegt nicht weit vom Zentrum der Daten entfernt.
[25:]
<<*>>= <<starte Erfahrungssammelfunktion zum Boxplot>>

Zufallszahlen haben Eigenschaften wie Zahlen, die zufällig ausgewählt werden. Die Zufallszahlen übermitteln keine weiteren Informationen, ihre Bedeutung liegt nur in der Generierung des Erscheinungsbildes, wie es in der nächsten Abbildung zu sehen ist.
[26:]
<<*>>=
<<erstelle Jitterplot zu {\tt x}>>
In diesem Plot sind alle noch auf x befindlichen Beobachtungen abgedruckt.
Durch die zufälligen y-Werte wirkt das Ergebnis wie ein Mückenschwarm oder die Bestandteile eines Gases, wobei die Dichte am linken Bildrand am größten zu sein scheint. Die bisherigen Ergebnisse bezüglich der Lage werden unterstützt.
![\fbox {
\begin{minipage}
{14cm}
\em Algorithmus: {Stabdiagramm\ [1ex]
Im Stabdi...
...t\uml abe \uml uber den jeweiligen Beobachtungen
dargestellt.
}
\end{minipage}}](img34.gif)
[27:]
<<*>>=
<<erstelle Stabdiagramm zu {\tt x}>>
Im wesentlichen werden die Eindrücke aus dem Jitterplot bestätigt. Bezüglich Fragen der Dichtheit stellt das Stabdiagramm gegenüber dem Jitterplot keine Verbesserung dar. Wir sehen, daß die meisten Werte nur einzeln vorkommen, einige Ausprägungen wurden doppelt getroffen und eine trat dreifach auf. Zum Überprüfung läßt sich schnell die Häufigkeitstabelle berechnen.
[28:]
<<*>>=
<<erstelle H\"aufigkeitstabelle zu {\tt x}>>
1 2 6 8 10 11 12 14 15 19 21 29 40 44 46 49 58 67 73 83 106 107 116 117 119
3 2 2 2 1 1 1 2 1 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1
120 131 133 139 153 158 164 165 166 174 197 207 240 260 285 290 312 320 337
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
344 350 351 362 403 433 455 490 503 516 524 540 547 554 573 588 600 615 639
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
672 697 712 718 771 778 788 870 1021 1145 1183 1281 1374 1378 1381 1515 1667
1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
1702 1754 1913 1965 2236 2330 2409 2772 3670 4862
1 1 1 1 1 1 1 1 1 1
Ein Stabdiagramm ist für den Problembereich
der Zeitdifferenzen offensichtlich nicht besonders
hilfreich.
Eher interessiert die Frage, wie häufig sich Ausprägungen in bestimmten
Abschnitten oder Intervallen eingestellt haben.
[29:]
<<*>>=
<<erstelle spezielles Balkendiagramm zu {\tt x}>>
An dieser Stelle soll noch einmal die Problematik des Stabdiagramms reflektiert
werden. Denn die mangelnde Eignung des Diagramms liegt nicht in den speziellen
Werten des Datensatzes begründet, sondern darin, daß das Merkmal
Zeitdifferenzen als ein kontinuierliches Merkmal einzustufen ist.
Alle Punkte aus einem Zeitintervall sind nämlich als Realisation
denkbar.
Bei solchen Gegebenheiten geht man in der Regel
zur Betrachtung, Darstellung (siehe zum
Beispiel Histogramm) und Interpretation von Intervallen
über. Lassen sich nur Ausprägungen
vorstellen, die nicht zu Intervallen zusammengefaßt werden können, spricht
man naheliegenderweise von diskreten Merkmalen. Bei diesen kann ein
Stabdiagramm sehr sinnvoll sein. Dazu denke man nur an die Realisationen
von 100 Würfelwürfen, bei denen die relative Häufigkeit der möglichen
Ausprägungen
sehr wohl interessiert. Es könnte jetzt
eingewendet werden, daß die Zeiten und Zeitdifferenzen nur in ganzen Sekunden
erhoben worden sind und damit ein diskretes Merkmal zugrundeliegt. Dem ist
zu entgegnen, daß zum ersten auch Zwischenwerte interpretierbar sind und zum
zweiten diskrete Merkmale mit sehr vielen Ausprägungen oft wie kontinuierliche
Merkmale behandelt werden.
Dieser aus Textzeichen aufgebaute Plot zeigt Beobachtungsanzahl, Median, Quartile und ein numerisches Balkendiagramm, eventuell gefolgt von einigen speziellen Werten.
[30:]
<<*>>=
<<erstelle Stem-and-Leaf-Plot zu {\tt x}>>
Es sei daran erinnert, daß von
x
der extrem große Wert 24449 entfernt
worden war.
N = 102 Median = 301
Quartiles = 58, 718
Decimal point is 2 places to the right of the colon
0 : 000001111111111223444455567778
1 : 112222334566677
2 : 014689
3 : 1244556
4 : 0359
5 : 02245579
6 : 0147
7 : 012789
8 : 7
9 :
10 : 228
11 : 48
12 : 8
13 : 788
14 :
15 : 1
16 : 7
17 : 05
18 :
19 : 16
High: 2236 2330 2409 2772 3670 4862
![\fbox {
\begin{minipage}
{14cm}
\em Algorithmus: {Stem-and-Leaf-Diagramm\ [1ex]...
...ml urden; sie sind eventu{}ell
als Ausrei{\ss}er einzustufen.
}
\end{minipage}}](img38.gif)
Letzteres ist deshalb bemerkenswert, weil bei kleinen Zwischenzeiten zwischen Zugriffen die Belastung am größten ist. Den WEB-Master dürfte diese Erkenntnis nicht zu sehr erfreuen oder doch?
In gewisser Weise ist das Histogramm, obwohl älter, eine optische, aber nicht unbedingt qualitative Weiterentwicklung des Stem-and-Leaf-Diagramms. Es versucht, die im Jitterplot gesehene Dichtheit der Daten mit Hilfe relativer Häufigkeiten darzustellen.
![\fbox {
\begin{minipage}
{14cm}
\em Algorithmus: {Histogramm\ [1ex]
Zun\uml ach...
... Fl\uml acheninhalt der relativen H\uml aufigkeit entspricht.
}
\end{minipage}}](img39.gif)
Damit wird die Dichtevorstellung, die der Jitterplot implizit geliefert hat, explizit darstellt.
[31:]
<<*>>=
<<erstelle Histogramm zu {\tt x}>>
Wir können an diesem Diagramm ablesen, daß in 0.0012*500 = 60 % aller Fälle die Zeitdifferenzen kleiner als 500 waren (Höhe des ersten Rechtecks: 0.0012, Rechteckbreite: 500). Die Klassengrenzen wurden automatisch gewählt. Sie können aber auch vorgegeben werden.
[32:]
<<*>>=
<<erstelle Histogramm zu {\tt x} mit Grenzen 0, 200, 400, ..., 5000>>
Dieses Modul liefert folgendes Bild:
Wir wollen noch ein Modul bereitstellen, mit dem Klassengrenzen per Hand eingegeben werden können.
[33:]
<<*>>=
<<erstelle Histogramm von {\tt x} mit manueller Wahl der Grenzen>>
Das folgende Histogramm erhält man für die Eingabe der Grenzen:
0, 100, 200, 300, 500, 700, 1000, 1500, 3000, 5000.
Es sei darauf hingewiesen, daß bei kontinuierlichen Merkmalen das Histogramm die Zwecke erfüllt, für die im diskreten Fall das Stabdiagramm herangezogen wird.
Unzufriedenheit mit dem Histogramm führt zu Dichtespuren:

[34:]
<<*>>=
<<erstelle Dichtespur zu {\tt x}>>
Man erkennt sehr schön, wie
sein Maximum nahe bei 0 hat und dann
allmählich nach rechts abfällt.
[35:]
<<*>>=
<<aktiviere interaktives Dichtespur-Sektion zu {\tt x}>>
Zum Verlassen dieses kleinen Programms muß man mit der Maus EXIT
anklicken (Mauszeiger auf EXIT bewegen und linke Maustaste drücken).
Eine andere Fensterbreite kann durch einen Mausklick direkt über der Linie,
unter der
rel.width
steht, gewählt werden. Ganz links ist die Fensterbreite
0 zugeordnet, ganz rechts 100 % der Spanneweite. Mit dem zweiten Schieberegler
(unterste horizontale Linie) läßt sich ein
für die
Box-Cox-Transformation wählen, mit der der ursprüngliche Datensatz
x
transformiert werden sollen.
oder (
, w=0.141)
ergeben.

Verteilungsfunktionen sind für den Statistiker besonders statistische Instrumente. An dieser Stelle wollen wir aber keine tiefere Diskussion anstellen.
[36:]
<<*>>=
<<erstelle F.dach von {\tt x}>>
Wir bekommen folgendes Bild aufgrund der Daten
x
.

[37:]
<<*>>=
<<erstelle F.dach f\"ur klassierte Daten zu {\tt x}>>
Mit Hilfe dieser Graphiken lassen sich die Fragen nach Anteilen und
Häufigkeiten von Bereichen
beantworten. Man sieht, bei zirka 300 wird der Datensatz halbiert
(
). 20 % aller
Zwischenzeiten liegen unterhalb
von 50 Sekunden (sehen ist hier etwas übertrieben).
Hiervon ausgehend dürfte ein Experte für den Serverbetrieb
bei wachsender Belastung Engpässe erwarten.
Wir wollen die Möglichkeit der selbständigen Wahl der Grenzen anbieten:
[38:]
<<*>>=
<<erstelle emp. Verteilungsfunktion mit manueller Wahl der Grenzen zu {\tt x}>>
Das folgende Bild erhält man für die Eingabe der Grenzen:
0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 500, 1000, 2000, 3000,
5000
Für genauere Abschätzungen soll der Zugriff auf die Verteilungsfunktion auch graphisch unterstützt werden. Dazu kann man mit der Maus zwei Punkte im Verteilungsfunktionsplot anklicken. Probieren geht hier über Studieren!
[39:]
<<*>>=
<<befrage F.dach zu {\tt x} graphisch>>
Ein mögliches Bild könnte folgendes sein:
Dies führt zu dem numerischen Ergebnis:
[1] "bitte zweimal Punkt im F.dach-Plot anklicken!"
x1 F.dach(x1) 1-F.dach(x1) x2 F.dach(x2) 1-F.dach(x2)
158 0.4019608 0.5980392 1011.577 0.7941176 0.2058824
F.dach(x2)-F.dach(x1)
0.3921569
Für Zugriffsfragen mit Hilfe der Verteilungsfunktion sei hier an den Satz
16 aus dem Kapitel 2 des Skriptes [Autorenkollektiv] erinnert.
[40:]
<<*>>=
cat("Revbook:2.m:menu.gr:Menue Graphische Beschreibungstechniken\n")
<<Auswahl zu den Aufgaben des Kapitels \"uber Graphiken>>
Zur Information wird das Auswahlmenü gezeigt:
items: a Abbruch/Ende b lege Daten auf x ab c bilde Ausschnitt der Daten d erstelle graphische 5-Zahlen-Zusammenfassung e erstelle Boxplot f erstelle Jitterplot g erstelle Stabdiagramm h erstelle Haeufigkeitstabelle i erstelle Stem-and-Leaf-Plot j erstelle Histogramm k erstelle Histogramm mit manuellen Grenzen l erstelle Dichtespur m aktiviere interaktives Dichtespur-Sektion n erstelle F.dach o erstelle F.dach mit manuellen Grenzen p befrage F.dach graphisch q transformiere mittels Box-Cox-Transformation Selection:
[41:]
<<*>>=
cat("Revbook:3.a:start.mu:Kapitel Multivariate Beschreibungstechniken\n")
Zum Literaturstudium sei hingewiesen auf:
[Bamberg, Baur: Kapitel über Auswertungsmethoden für mehrdimensionales
Datenmaterial], [Chambers et al., Kapitel:
Comparing Data Distributions, Studying Two-Dimensional Data, Plotting
Mulitvariate Data],
[Schlittgen: Kapitel über Darstellung multivariater Datensätze].
Demgegenüber sind in der Situation der Frage 3 die Daten der Merkmale Zwischenzeiten und übertragene Mengen über Zugriffsereignisse miteinander verbunden. Man kann sich vorstellen, daß die Beobachtungen zur Frage 3 in Form von Paaren (Wartezeit, nach der Wartezeit übertragene Menge) vorliegen. Der Statistiker vergleicht in der Situation der ersten Frage Statistiken der einzelnen Datensätze und die Gestalten der empirischen Verteilungen anhand von geeigneten Graphiken. In der verbundenen Situation wird zunächst die Vermutung der Unabhängigkeit untersucht. Eine Ablehnung der Vermutung führt dann zur Beschreibung der Abhängigkeiten. (Für Interessierte sei an dieser Stelle auf die Kapitel über Regressionsanalyse in der Einführungsliteratur hingewiesen.)
Die Klassifikation der zweiten Frage hängt von ihrer Umsetzung ab. Eine Möglichkeit besteht darin, die Zwischenzeiten eines Tages bezüglich der Anzahl von Ereignissen in gleich große Teile zu zerlegen und die Teilstichproben zu vergleichen. Die laufende Nummer kann dann als Bindungsmerkmal interpretiert werden. Dann lassen sich die jeweils i-ten Beobachtungen der einzelnen Teile gegenüberstellen. Werden die Belastungsdaten jedoch in gleich große Zeitklassen -- wie: nachts, morgens, nachmittags und abends -- eingeteilt, so ergeben sich neue, kleinere Datensätze, deren Beobachtungen als unverbunden angesehen werden müssen. Als drittes bietet es sich an, die Zugriffszeitpunkte einer Inspektion zu unterziehen; dieser Weg wird zu eindimensionalen Techniken zurückführen.
Anhand der Fragen wird der Leser in diesem Kapitel mit Techniken vertraut gemacht, die zur Beantwortung der gestellten Fragen hilfreich sind. Zu diesen gehören: vergleichende Boxplots, Vergleichsplot der empirischen Verteilungsfunktionen, Scatterplots mit konvexen Hüllen, Draftsman's Displays. Zusätzlich wird die Idee von Bootstrap-Verfahren vorgestellt.
[42:]
<<*>>=
<<lege Zwischenzeiten vom 03.02.97 und vom 17.02.97 auf {\tt xy} ab>>
[43:]
<<*>>=
<<berechne zusammenfassende Statistiken zu {\tt xy}>>
$dz.03.02.97:
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
1 62.5 312 823.8 744.5 24450 2487.4 103
$dz.17.02.97:
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
1 85 428 970.9 1356 8513 1415.5 87
Die Quartile und das Mittel
vom 17.02.97 sind größer als die entsprechenden Größen vom 03.02.97.
Dagegen gehört das Gesamtmaximum zu den Daten vom 03.02.97.
Damit deuten sich Unterschiede zwischen den Tagen an.
[44:]
<<*>>=
<<erstelle Boxplot zu {\tt xy}>>
Wieder einmal wird der Gesamteindruck erheblich von den möglichen Ausreißern beherrscht. Deshalb wollen wir die Werte oberhalb von 5000 entfernen und den Plot wiederholen.
[45:]
<<*>>=
<<bilde Ausschnitte der Komponenten von {\tt xy}>>
[1] "Komponente: dz.03.02.97" [1] "Die Werte der 1 -ten Komponente liegen in" [1] 1 24449 [1] "Bis zu welcher Untergrenze sollen Werte von der" [1] "1 -ten Komponente entfernt werden?" 1: 0 [1] "Ab welcher Obergrenze sollen Werte von der" [1] "1 -ten Komponente entfernt werden?" 1: 5000 [1] "Komponente: dz.17.02.97" [1] "Die Werte der 2 -ten Komponente liegen in" [1] 1 8513 [1] "Bis zu welcher Untergrenze sollen Werte von der" [1] "2 -ten Komponente entfernt werden?" 1: 0 [1] "Ab welcher Obergrenze sollen Werte von der" [1] "2 -ten Komponente entfernt werden?" 1: 5000Die so definierten Ausschnitte führen mit dem Modul ...
[46:]
<<*>>=
<<erstelle Boxplot zu {\tt xy}>>
... zu den Boxplots:
Jetzt lassen sich die Verteilungen schon besser vergleichen. Die Mediane und der Bereich unterhalb des Medians sind nicht sehr unterschiedlich. Der Teil der Verteilungen zwischen Median und drittem Quartil ist für den 17.02.97 stärker auseinandergezogen. Die stark unterschiedliche Lage der dritten Quartile konnte natürlich schon den zusammenfassenden Statistiken entnommen werden.
[47:]
<<*>>=
<<zeichne Histogramme zu {\tt xy}>>
Für zehn Klassen erhält man folgendes Bild.
Unterschiede sind wieder nur im rechten Bereich der Verteilungen zu erkennen. Für den Vergleich bestimmter Intervalle helfen die Histogramme nicht sehr weiter.
[48:]
<<*>>=
<<zeichne zu {\tt xy} F.dach und f.dach>>
Das Bild hat nicht viel mehr Aussagekraft als die vergleichenden Boxplots. Für die Daten vom 03.02.97 (durchgezogene Linie) werden im Intervall von 0 bis zirka 300 jedoch erhöhte Häufigkeiten ausgewiesen. Die lokalen Maxima sollten nicht überinterpretiert werden.

[49:]
<<*>>=
<<erstelle zu den ersten beiden Elementen von {\tt xy} einen QQ-Plot>>
Deutlich weichen die Punkte von der Diametralen ab. Dies kann als ein Indiz für eine unterschiedliche Verteilung angesehen werden.
Damit sind Unterschiede erkennbar geworden. Es ist jedoch noch nicht klar, ob man sie als bemerkenswert einstufen darf oder ob sie sich auch aufgrund von Zufalls-Schwankungen einstellen würden.
[50:]
<<*>>=
<<zeige Bootstrap-Stichprobenverteilungen mit {\tt xy}>>
Die ursprünglichen Datensätze werden durch Zahlen markiert, die Boxplots der zugehörigen Bootstrap-Stichproben folgen jeweils rechts daneben und sind durch kleine Buchstaben gekennzeichnet. Alle dritten Quartile der Wiederholungen zu dem zweiten Datensatz 2
(das sieht man an den fünf rechten Boxplots) sind größer als diejenigen des ersten Datensatzes. Für die Mediane ist eine solch klare Aussage nicht zu treffen.
eine ausgewählt werden.
[51:]
<<*>>=
<<zeige Verteilung einer Statistik von Bootstrap-Stichproben aus {\tt xy}>>
Die dritten Quartile der Stichproben zu dem Datensatz vom 17.02.97 sind alle größer als die der anderen Stichproben. Damit erscheint ein zufälliger Unterschied eher unwahrscheinlich.
[52:]
<<*>>=
<<lege Zwischenzeiten und Mengen vom 03.02.97 auf {\tt xy} ab>>

In einem Scatterplot läßt sich erkennen, ob die Daten eher wie zufällig verteilt sind oder ob bestimmte Strukturen beziehungsweise Beziehungen zwischen den Merkmalen zu erkennen sind. So können sich die Punkte an bestimmten Stellen häufen oder sie können um eine Linie herum streuen. Strukturen irgendwelcher Form sprechen gegen eine Zufälligkeitsvermutung. In Fällen, in den es gelingt, aufgrund der Ausprägung des einen Merkmals Schlüsse für die Realisation des anderen zu ziehen, werden die Merkmale als nicht unabhängig, d.h. abhängig bezeichnet. Dann versucht man als nächstes, die Abhängigkeitsstrukturen zu beschreiben. Bei der Gegenüberstellung der Merkmale Körpergröße und Gewicht von Studierenden würde man zum Beispiel deutliche Abhängigkeitsstrukturen erkennen können.
[53:]
<<*>>=
<<erstelle Scatterplot zu den ersten beiden Elementen von {\tt xy}>>
[54:]
<<*>>=
<<transformiere Elemente von {\tt xy} mittels Box-Cox-Transformation>>
Durch zweimalige Eingabe von "
0
" logarithmiert das Modul die
beiden Datensätze. Nun kann der Scatterplot wiederholt werden.
[55:]
<<*>>=
<<erstelle Scatterplot zu den ersten beiden Elementen von {\tt xy}>>
Wir erkennen, daß die Wolke schön aufgelockert ist. Die weit entfernt liegenden Werte sind nun am Rand der Wolke zu finden. Besondere Strukturen, die als Abhängigkeiten der beiden Merkmale deutbar sein könnten, treten aber nicht hervor.
![\fbox {
\begin{minipage}
{14cm}
\em Algorithmus: {--- Konvexe H\uml ulle\ [1ex]...
...e
ist das kleinste die Punktewolke umschlie{\ss}ende Polygon.
}
\end{minipage}}](img72.gif)
Notwendigerweise werden die Eckpunkte des Polygons durch Beobachtungspunkte definiert. Entfernt man die Datenpunkte, die zum Polygon gehören, aus dem Datensatz, läßt sich wieder die konvexe Hülle der verbliebenen Punkte finden. Nach dieser Melodie, auch data peeling genannt, kann man solange fortfahren, bis (fast) alle Punkte entfernt sind.
[56:]
<<*>>=
<<erstelle Scatterplot zu {\tt xy} und zeichne konvexe H\"ullen>>
Allenfalls läßt sich ablesen, daß bei sehr kleinen Zeitdifferenzen nicht die größten Datenmengen transportiert werden. Eine Struktur nach dem Motto je größer das eine, umso größer (oder kleiner) das andere, ist nicht zu erkennen.
Ist der Korrelationskoeffizient nahe bei 0, liegt kein linearer Zusammenhang vor. Liegen alle Beobachtungen sehr nahe einer Geraden mit positiver (negativer) Steigung, so nimmt er Werte in der Nähe von +1 (-1) an.
Wie viele andere Maße auch, besitzt der Korrelationskoeffizient die Schwäche der Ausreißerempfindlichkeit. Außerdem mißt er, wie gesagt, nur den Grad des linearen Zusammenhangs, so daß zum Beispiel bei Punkten, die nahe einer Kreislinie liegen, die Abhängigkeitsstruktur nicht erkannt werden kann.
[57:]
<<*>>=
<<berechne Korrelationskoeffizienten der ersten beiden Elementen von {\tt xy}>>
[1] 0.02028Das Ergebnis weicht nicht wesentlich von 0 ab. Das haben wir auch nach dem letzten Bild erwartet, da sich dort auch kein linearer Zusammenhang gezeigt hat.
Um ein Beispiel zu zeigen, bei dem ein gewisser Zusammenhang zu erkennen ist, legen wir auf xy Kornerträge und festgestellte Niederschlagsmengen ab und setzen die letzten beiden Module noch einmal ein. Man kann sich schon vorstellen, daß es zwischen den beiden Merkmalen Regenmenge und Ertrag Zusammenhänge gibt. (Siehe [Becker et al., Datensatz corn , p. 647].)
[58:]
<<*>>=
<<lege Regenmengen und Kornertr\"age auf {\tt xy} ab>>
<<erstelle Scatterplot zu {\tt xy} und zeichne konvexe H\"ullen>>
<<berechne Korrelationskoeffizienten der ersten beiden Elementen von {\tt xy}>>
Wir erhalten:
Berechnung des Korrelationskoeffizienten zu xy [1] 0.402629Ein Wert von 0.40 zeigt nur einen sehr schwachen linearen Zusammenhang an. Jedoch ist aus dem Scatterplot abzulesen, daß bei großen Regenmengen keine kleinen Erträge beobachtet wurden. Die Hüllen haben auch alle eine gewisse Tendenz von links unten nach rechts oben, so daß wohl doch von einem Zusammenhang auszugehen ist.
Als zweites Beispiel seien zwei Datensätze vorgeführt, die Regendaten aus zwei verschiedenen Quellen, die sich beide auf New York und die gleichen Zeiträume beziehen, zeigen. (Siehe [Becker et al., Datensatz rain , p. 656].)
[59:]
<<*>>=
<<lege Regendatens\"atze auf {\tt xy} ab>>
<<erstelle Scatterplot zu {\tt xy} und zeichne konvexe H\"ullen>>
<<berechne Korrelationskoeffizienten der ersten beiden Elementen von {\tt xy}>>
Berechnung des Korrelationskoeffizienten zu xy [1] 0.7133686Hier ist der Korrelationskoeffizient schon größer und auch das Bild unterstützt die Abhängigkeitsvermutung. Es ist aber erstaunlich, daß sich die Abhängigkeit als nicht noch stärker erweist. Spürnasen können ja über die angegebene Literaturstelle weitere Forschungen anstellen.
Kommen wir zum ersten Vorgehensvorschlag, bei dem die Daten anzahlenmäßig in gleich große Stücke geteilt werden. Damit steht über die laufende Nummer ein Bindungsmerkmal zur Verfügung, mittels dessen Gegenüberstellungen vorgenommen werden können.
Zunächst führen wir die Aufteilung durch.
[60:]
<<*>>=
<<lege Zwischenzeiten vom 03.02.97 auf {\tt xy} ab>>
<<ordne Daten von {\tt xy} in {\tt anz} gleich gro{\ss}e Klassen ein: {\tt xy}>>

Hier ist ein Beispiel, das in der statistischen Literatur häufig diskutiert wird. (Siehe [Becker et al., Datensatz: iris , p. 650].)
Der Plot ist sicher hilfreich bei der Strukturensuche.
[61:]
<<*>>=
<<erstelle Draftsman's Display zu {\tt xy}>>
Das Auffälligste sind die unterschiedlichen Bereiche, in denen die Werte der einzelnen Teildatensätze liegen. Das erste Viertel der Daten beansprucht im wesentlichen einen Bereich von 0 bis zirka 5000 (Sekunden), wobei zusätzlich der Extremwert von knapp 25000 im Ausschnitt untergebracht ist. Das Fenster des zweiten Viertels geht von 0 bis knapp unter 3000, das des nächsten bis etwas über 1500 und das des vierten bis 2500. Betrachtet man die größten Zeitdifferenzen als Indikator, so zeigen diese die größten Zugriffspausen an und lassen damit Folgerungen für die Belastung zu, die in Richtung der oben angestellten Vermutungen gehen. Sehr überzeugend ist diese Argumentation aber nicht, da die meisten Beobachtungen (Bildpunkte) nicht verarbeitet worden sind und die Zeit nur implizit aus dem graphischen Ergebnis zu erkennen ist.
In den kleinen Plots ist übrigens keine Beziehung zwischen den vier Vierteln zu erkennen. Wir wollen an dieser Stelle weitere Gedanken dem Leser/Experimentator überlassen und uns dem zweiten Weg widmen. Immerhin hat uns der erste Versuch das Werkzeug Draftsman's Display beschert.
[62:]
<<*>>=
<<lege Zwischenzeiten und Zeiten vom 03.02.97 auf {\tt xy} ab>>
<<ordne {\tt xy[1] }gem\"a{\ss} {\tt xy[2] }in {\tt anz} Klassen ein: {\tt xy}>>
[63:]
<<*>>=
<<erstelle Boxplot zu {\tt xy}>>
Für vier zeitlich gleich große Teile erhalten wir:
Jeder Boxplot repräsentiert 6 Stunden des Tages 03.02.97. Auf den ersten Blick sehen die vier einzelnen Plots recht ähnlich aus. Doch besteht der erste nur aus einer Box, deren Niveau über den anderen drei Boxen liegt. Der zweite Teildatensatz beinhaltet die größte Zwischenzeit, die knapp unter 25000 Sekunden abgebildet ist. Der dritte und der vierte Datensatz scheinen sich von der Struktur her nicht zu sehr zu unterscheiden. Jetzt haben wir zwar eine zeitgemäße Zerteilung der Daten vorgenommen, doch fördert das gewählte Instrument Boxplots Unterschiede nicht sehr deutlich zu Tage. Wir wollen mit QQ-Plots die vier generierten Datensätze gegenüberstellen.
Oben haben wir zum direkten Vergleich verschiedener Stichproben QQ-Plots kennengelernt. Wir wollen nun zum Vergleich der vier Teildatensätze QQ-Plots erstellen und wie beim Draftsman's Display schachbrettartig anordnen.
[64:]
<<*>>=
<<erstelle zum paarweisen Vergleich der Datens\"atze von {\tt xy} QQ-Plots>>
Die sicher etwas zu kleinen Bilder der ersten Bilderspalte unterstützen die erste Vermutung: Der Plot oben links zeigt den QQ-Plot der Zwischenankunftszeiten, die den ersten sechs Stunden zuzurechnen sind, mit sich selbst. Es sind nur zwei Punkte in dem Plot zu erkennen. Die vier Plots in der Süd-Ost-Ecke der Gesamtgraphik weisen dagegen eine Vielzahl von Punkten auf. Mit den unterschiedlichen Punktezahlen ist offensichtlich eine unterschiedliche Zugriffsintensität belegt.
Zur Bestätigung wollen wir die Anzahlen der einzelnen Teildatensätze genau berechnen.
[65:]
<<*>>=
<<errechne Anzahlen der Stichproben von {\tt xy}>>
Wir erhalten:
Anzahlen der Stichproben von xy $"1": [1] 2 $"2": [1] 25 $"3": [1] 48 $"4": [1] 28Die größte Belastung herrscht demnach im Zeitraum zwischen 12.00 und 18.00. Weiter zeigen die Teildatensätze drei und vier recht ähnliche Strukturen. Vergleiche mit dem zweiten Plot lassen sich aufgrund des Ausreißers nicht gut anstellen. Wir wollen zum Abschluß versuchen, mögliche Belastungsunterschiede, die sich im Laufe eines Tages einstellen, deutlicher zusammenhängend darzustellen. Dazu wollen wir uns nur bekannter Instrumente bedienen.
[66:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt xy} ab>>
Zunächst erstellen wir einen Jitterplot der Zugriffszeitpunkte.
[67:]
<<*>>=
<<zeichne Jitterplot zu {\tt xy}>>
Wir erhalten:
Jetzt sieht man den Belastungsunterschied schon sehr deutlich. Um eine quantitative Vorstellung zu bekommen, hilft uns die empirische Verteilungsfunktion weiter.
[68:]
<<*>>=
<<zeichne {\tt F.dach} zu {\tt xy}>>
Die empirische Verteilungsfunktion zeigt eine klare Zweiteilung.
Im ersten Teil des Bildes steigt die Kurve kaum an, im zweiten
dafür um so kräftiger.
Damit ist die Vermutung untermauert, daß die Belastung in der Nacht erheblich geringer ist als am Tage. Spitzenbelastungen, die mit einem starken Anstieg der Kurve einhergehen, lassen sich jedoch nur vage abschätzen.
Zur Ermittlung der dichtesten Bereiche empfehlen sich Dichtespuren als Instrument. Na, dann auf!
[69:]
<<*>>=
<<zeichne Dichtespuren zu {\tt xy}>>
Für die nach einigen Versuchen gewählte Fensterbreite von 15000 erhält man:
Nun haben wir wirklich eine plastische Vorstellung von der Belastung im Tagesablauf bekommen. Es muß natürlich bei der Interpretation berücksichtigt werden, daß die Kurve am rechten Rand fallen muß, da jenseits der Tagesgrenze keine Werte eingegangen sind. Kritisch ist auch anzumerken, daß für eine Präsentation die Achsenbeschriftung nicht sehr geeignet ist. Wer kann schon 180000 Sekunden in Kopf umrechnen (180000 Sekunden = 3000 Minuten = 50 Stunden = 2 Tage und 2 Stunden, entsprechend: 216000 Sekunden = 3600 Minuten = 60 Stunden = 2 Tage und 12 Stunden)?
[70:]
<<*>>= <<rechne Sekunden in Tage, Stunden und Minuten um>>
Die Belastungsfragen und die Strukturensuche ist noch lange nicht ausgereizt. Doch erscheint an dieser Stelle eine Unterbrechung angebracht zu sein. Als Zugabe wird noch eine Graphik präsentiert, die eine Dichtespur über die ersten 18 Tage des Februars zeigt. Die einzelnen Tagesgrenzen sind durch senkrechte Linien hervorgehoben. Als Input wurden die Zeitpunkte der Serverzugriffe verwendet. Deutlich sieht man, daß an jedem Tag ein lokales Maximum anzutreffen ist. Außerdem erkennt man ohne weiteres die Wochenstruktur. Zur Erinnerung sei gesagt: der Tag 01.02.97 war ein Samstag.
Leider ist die Achsenbeschriftung in einem unschönen Format.
Da die einzelnen Werte hier aber keine Rolle spielen, ist keine zusätzliche
Mühe zur Verschönerung aufgewendet worden. Zur Vermeidung von
Mißverständnissen sei am Beispiel erklärt,
daß
1.5*10^6
=
= 1 500 000.
Viele Datensätze haben nur ein ordinales oder auch nur ein nominales Meßniveau. Für solche sind die oben beschriebenen Techniken wohl nicht geeignet. Dieser Abschnitt soll daran erinnern, daß man dann nach anderen als den hier beschriebenen Methoden Ausschau halten muß. Als Tropfen auf den heißen Stein ist im Auswahlmenue zu diesem Kapitel ein Punkt zu finden, mit dem man Kontingenztabelle ein wenig untersuchen kann.
Die Aufgaben sollen mit folgenden unterstützenden Möglichkeiten bearbeitet werden.
[71:]
<<*>>=
cat("Revbook:3.m:menu.mu:Menue Multivariate Beschreibungstechniken\n")
<<Auswahl zu den Aufgaben des Kapitels \"uber multivariate Graphiken>>
Zur Information wird wieder das Auswahlmenü gezeigt:
items:
a Abbruch/Ende
b lege Datensaetze zur Bearbeitung auf xy ab
c modifiziere Datensaetze xy
d lege einen Datensatz von xy auf x ab
e ermittle einige Ma{\ss}zahlen zu xy
f erstelle Boxplot zu xy
g erstelle Jitterplot zu xy
h zeichne Histogramme zu xy
i zeichne Dichtespuren zu xy
j zeichne F.dach zu xy
k zeichne zu xy F.dach und f.dach
l erstelle Scatterplot zu den ersten beiden Elementen von xy
m erstelle Scatterplot zu xy und zeichne konvexe Huellen
n erstelle zu xy[1:2] einen QQ-Plot
o erstelle Draftsmans Display zu xy
p erstelle zum paarweisen Vergleich von xy QQ-Plots
q mache mit xy Bootstrap-Experimente
r Kontingenztabellenfunktion mit xy
Selection:
[72:]
<<*>>=
cat("Revbook:4.a:start.mo:Kapitel Modellierungsschritte\n")
Zum Literaturstudium sei hingewiesen auf:
[Autorenkollektiv: Abschnitt über das Verteilungsmodell],
[Bamberg, Baur: Kapitel über Zufallsvariablen und ihre Verteilungen],
[Schlittgen: Kapitel über diskrete Verteilungsmodelle und über stetige
Verteilungsmodelle].
Der Gedankengang dieses Kapitels wird durch folgende Fragen geleitet.
[73:]
<<*>>=
cat("Revbook:4.d1:v.bern:Abschnitt Bernoulli-Verteilung\n")
![\fbox {
\begin{minipage}
{14cm}
\em Bernoulli-Experiment \ [1ex]
Ein Experiment...
...olg} $q=1-p$\space betr\uml agt, hei{\ss}t Bernoulli-Experiment.\end{minipage}}](img87.gif)
![\fbox {
\begin{minipage}
{14cm}
\em Bernoulli-Verteilung \ [1ex]
$X$\space hei{...
...ernoulli$(p)$\space und es gilt:
E$(X)=p$\space und Var$(X)=pq$.\end{minipage}}](img88.gif)
![]()
[74:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>
<<zeige die ersten Werte von {\tt x} an>>
Dieses liefert:
Wie viele Minuten sollen untersucht werden (Default=100)? 1: 100 [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0Es zeigen sich viele 0-Ergebnisse. Das zugehörige p dürfte wohl von 0.5 verschieden sein. Aber welcher Wert ist geeignet? Wir wollen die Auswirkung verschiedener p-Werte experimentell untersuchen.
Entsprechend zu solchen realen 0-1-Ergebnissen läßt sich ein Bernoulli-Experiment wiederholt durchführen. Falls sich die einzelnen Bernoulli-Experimente nicht beeinflussen und der Parameter p konstant bleibt, heißt eine solche Abfolge von Experimenten Bernoulli-Prozeß.
Wir wollen computergestützt Bernoulli-Prozesse mit vorgegebenen p realisieren und studieren, ob das p wiederentdeckt werden kann.
[75:]
<<*>>=
<<lege Parameter {\tt p,n,ZZ} f\"ur wiederholte Bernoulli-Experimente fest>>
<<starte Bernoulli-Experimente, Bedingungen: {\tt n, p, ZZ}, Ergebnis: {\tt x}>>
Festlegung der Bedingungen fuer wiederholte Bernoulli-Experimente Legen Sie die Erfolgswahrscheinlichkeit p fest (Default: 0.5): p=? [1] 0.5 Legen Sie die Anzahl n der Bernoulli-Experimente fest (Default: 200): n=? [1] 200 Zufallsstart: Geben Sie eine ganze Zahl zwischen 0 und 1000 ein (Default: 17): ZZ=? [1] 17
Nun können wir die erzeugte 0-1-Folge ( x ) mit den deskriptiven Techniken der Statistik beschreiben. Ein Stabdiagramm zeigt die relative Häufigkeit der beiden Ergebnisse an.
[76:]
<<*>>=
<<erstelle Stabdiagramm zu {\tt x}>>
Für die oben abgedruckten Setzungen erhält man das Stabdiagramm:
Die relative Häufigkeit für einen Erfolg beträgt nicht ganz 50 %.
Der Mittelwert der Ergebnisse gleicht übrigens der relativen Häufigkeit oder dem Anteil der Erfolgsausgänge. Warum ist das so?
Anzahl der Nullen
Anzahl der Einsen)/n = Anteil der Einsen
[77:]
<<*>>=
<<berechne Mittelwert von {\tt x}>>
Wir berechnen aus den Ergebnissen der Bernoulli-Experimente den
Mittelwert [1] 0.495und können dies als Schätzvorschlag in die Diskussion einbringen.
[78:]
<<*>>=
<<plotte Durchschnitte f\"ur die ersten $k$ Elemente von {\tt x} gegen $k$>>
Aufgrund der Daten der Bernoulli-Experimente erhalten wir folgende
Durchschnittskurve:
Die Folge der Mittel schwanken mit wachsendem n immer weniger und ihr Pfad in der Darstellung strebt wohl gegen p=0.5. Die relative Häufigkeit geht gegen die vorher festgesetzte Wahrscheinlichkeit. Würde man den zutreffenden Parameter p nicht kennen, könnte man auch aufgrund dieses Bildes p=0.495 oder gerundet p=0.5 schätzen.
![]()
[79:]
<<*>>=
<<lege Parameter {\tt p,n,ZZ} f\"ur wiederholte Bernoulli-Experimente fest>>
<<lege Wiederholungsanzahl {\tt w} fest>>
<<ziehe Stichprobe, zeichne Durchschnittskurven und ermittle Statistiken>>
Festlegung der Bedingungen fuer wiederholte Bernoulli-Experimente Legen Sie die Erfolgswahrscheinlichkeit p fest (Default: 0.5): p=? [1] 0.5 Legen Sie die Anzahl n der Bernoulli-Experimente fest (Default: 200): n=? [1] 200 Zufallsstart: Geben Sie eine ganze Zahl zwischen 0 und 1000 ein (Default: 17): ZZ=? [1] 17 Legen Sie die Anzahl w der Wiederholungen der n Versuche fest (Default: 20): w=? [1] 20
Mit diesen Setzungen erhalten wir w+1= 21 Pfade:
und außerdem für die Stelle k=200 die zusammenfassenden Statistiken:
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n 0.445 0.48 0.5 0.5 0.52 0.57 0.03365264 21
[80:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>
<<berechne zusammenfassende Statistiken von {\tt x}>>
Wir erhalten:
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0 0 0 0.05972 0 1 0.2370538 1440
und können als Wert für den Parameter
p
den Wert 0.06 vorschlagen.
Mit diesem
p
, mit
n=1440=24*60
, mit
ZZ=17
und mit
w=20
können wir das letzte Bild wiederholen.
Wir erhalten dann als graphisches Ergebnis den linken der beiden folgenden Plots. (Die Bedeutung des rechten Plots wird etwas weiter unten dargelegt.)
Als Berechnungsergebnisse erhalten wir:
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0.04931 0.05625 0.05972 0.06214 0.06597 0.08333 0.008569059 21
Die Pfade streben im Mittel einem Wert von ungefähr 6 % entgegen, wobei selbst für den großen Stichprobenumfang (n=1440) die errechneten Durchschnitte noch zwischen zirka 0.05 und 0.08 schwanken.
[81:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>
<<plotte Durchschnitte f\"ur die ersten $k$ Elemente von {\tt x} gegen $k$>>
Gegenüber der Antwort müssen wir aufgrund des letzten Bildes einige
Vorbehalte anmelden.
Erstens zeigt das Bild bei genauer Inspektion einen Anstieg der Kurve
ab k=500.
Dieses stimmt mit der Beobachtung aus dem letzten
Kapitel überein, daß die Verteilung der Belastung über den Tag hinweg nicht
gleichmäßig ist.
Ein p-Wert für morgens wird sich von einem für nachmittags oder abends
unterscheiden.
Damit ist die Modellierung der Minuten eines ganzen Tages mit Hilfe eines
Bernoulli-Prozesses mit konstantem p nicht sehr geeignet.
Zweitens dürften sich von Tag zu Tag Schwankungen ergeben, so daß nicht
das Phänomen der Variabilität zwischen verschiedenen Tagen
übersehen werden darf.
Auf die gestellte Frage ist darum
die Gegenfrage nach Tag und Uhrzeit berechtigt.
Erhält man keine zusätzlichen Hinweise, muß man sich
mit der dargestellten Modellierung zufrieden geben.
Erst mit genaueren Angaben könnten bessere Daten(ausschnitte) ausgewählt
und ein tages- und stundenspezifisches p vorgeschlagen werden.
Wenden wir uns nun der zweiten Frage dieses Kapitels zu. Damit erhalten wir nebenbei ein Instrumentarium zur Quantifizierung der Variabilitäten der Schätzungen.
[82:]
<<*>>=
cat("Revbook:4.d2:v.binom:Abschnitt Binomial-Verteilung\n")
![\fbox {
\begin{minipage}
{14cm}
\em Binomial-Verteilung \ [1ex]
Sind die Zufall...
...nd{displaymath}und es gilt E$(S_n)=np$\space und Var$(S_n)=npq$.\end{minipage}}](img102.gif)
[83:]
<<*>>=
<<ziehe {\tt r} binomialverteilte Zufallszahlen mit {\tt n} und {\tt p}: {\tt x}>>
Stichprobe aus Binomial-Verteilung [1] "Wie gross soll der Parameter n sein (Default: n=1)?" 1: 60 [1] "Wie gross soll der Parameter p sein (Default: p=0.5)?" 1: 0.5 [1] "Wie viele Zufallszahlen wollen Sie (Default: r=100)?" 1: 1000 [1] "Zufallsstartgeneratorstart (Default: ZZ=17)?" 1: 17
Wir ermitteln die Übersichtsstatistiken und erstellen Graphiken: Jitterplot, Boxplot, Stabdiagramm und die empirische Verteilungsfunktion.
[84:]
<<*>>=
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>
Zusammenfassende Statistiken Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n 17 28 30 30.08 33 41 3.867178 1000
Zu den oben genannten Experimentbedingungen erhält man die Graphik:
Die Verteilung scheint sehr symmetrisch zu sein. Die mittlere Erfolgsanzahl liegt (wie erwartet) bei 30 Erfolgen. Extreme Ausreißer scheinen nicht aufzutreten. Die meisten Realisationen liegen grob zwischen 20 und 40.
Nach dieser Vorübung steht ein auf unsere Situation angepaßtes Experiment auf der Tagesordnung. Eine Stichprobe aus einer Binomial-Verteilung mit n=60 und p=0.06, dem festgestellten Anteil von Minuten mit Serverzugriffen, führt zu folgendem Übersichtsplot.
Im Unterschied zu den Ergebnissen mit p=0.5 zeigt der Boxplot eine gewisse Asymmetrie, wie dem Stabdiagramm zu entnehmen ist. Mittel und Median dürften deshalb auch deutlich voneinander abweichen.
Hier sind die Zahlen:
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0 2 3.5 3.621 5 12 1.825566 1000
Der Mittelwert und der Median sind fast gleich, dies ist eher
ein Zeichen für Symmetrie.
Da der Median genau in der Mitte zwischen den Quartilen liegt, geht
die angedeutete Asymmetrie wesentlich auf die Schwänze der
Verteilung zurück.
Weiter läßt sich feststellen, daß die Spanne zwischen den Quartilen
3 beträgt, bei dem Experiment mit p=0.5 dagegen 6.
Die Stichprobenstreuungen unterscheiden sich um einen Faktor größer als 2.
![]()
![]()
[85:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<berechne und plotte Minuten mit Zugriffen der Stunden von {\tt x}>>
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0 0.75 3.5 3.583 5 13 3.437854 24
sowie
Die Realität sieht -- wie wir schon erwartet haben -- wieder einmal etwas anders aus als die Theorie. Zwar gehören die Ergebnisse von 1 bis 6 zu den häufigeren Ergebnissen, jedoch ist das Ergebnis 0 extrem oft vertreten, und es gibt drei Stunden mit mehr als 8 Minuten, in denen Zugriffe stattfanden. Bis auf die Streuung belegen die berechneten Statistiken dagegen den Unterschied nicht.
Es könnte der Hinweis kommen, daß für einen fairen Vergleich die Anzahl der Wiederholungen r
im letzten Experiment mit der Stichprobe aus einer Binomial-Verteilung auf 24 festgesetzt werden muß. Deshalb wollen wir auch noch ein Bild und die zusammenfassenden Statistiken einer Stichprobe vom Umfang 24 aus Binomial(60,0.06) beisteuern.
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
1 3 4 3.875 5 7 1.676241 24
In dem Bild ist gar kein Ergebnis mit 0 oder mehr als 7 Erfolgen zu erkennen. Damit ist die Spanne viel kleiner als bei den realen Daten, die ja auch verglichen mit dem Binomial-Verteilungsmodell eine viel zu große Streuung besitzen. Gibt es dafür eine Erklärung?
![]()
[86:]
<<*>>=
<<aktiviere {\tt binomial.calculator}>>
[1] "binomial.calculator"
[1] "Bitte n eingeben! (Default: n=1) n=?"
1: 60
[1] "Bitte p eingeben! (Default: p=0.5) p=?"
1: 0.06
E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma
3.6 3.384 1.8395652 -0.079130332 1.7604348 5.4395652 7.2791303
[1] "Auswahl von binomial.calculator"
items:
a Ende
b n eingeben
c p eingeben
d f(x) und F(x) berechnen
e Quantile berechnen
f Statistiken von a*X berechnen
g Plot erstellen
Selection: d
[1] "Bitte x eingeben! x=?"
1: 0 6
3:
[1] "Werte der Wahrscheinlichkeitsfunktion:"
x f(x)
[1,] 0 0.024415814
[2,] 6 0.082667714
[1] "Werte der Verteilungsfunktion:"
x F(x)
[1,] 0 0.024415814
[2,] 6 0.932863863
[1] "Auswahl von binomial.calculator"
items:
a Ende
b n eingeben
c p eingeben
d f(x) und F(x) berechnen
e Quantile berechnen
f Statistiken von a*X berechnen
g Plot erstellen
Selection: a
Die Wahrscheinlichkeit der Realisation 0 beträgt also ungefähr 2.5 %
und die von einem Ergebnis größer 6 ungefähr 6.7 %.
[87:]
<<*>>=
cat("Revbook:4.d3:v.geom:Abschnitt geometrische Verteilung\n")
In der einfachsten Form der Wartezeitmodellierung wird die Zeit in Versuchen gemessen, und es wird für die Versuche ein Bernoulli-Prozeß unterstellt. In diesem Fall ist Wartezeit bis zum nächsten Erfolg geometrisch verteilt.
![\fbox {
\begin{minipage}
{14cm}
\em Geometrische Verteilung \ [1ex]
Sind die Zu...
...d{displaymath}und es gilt E$(W)=q/p$\space und Var$(W)=q/{p^2}$.\end{minipage}}](img116.gif)
Für p=0.5 müssen wir im Durchschnitt mit einem Fehlversuch (q/p=1) rechnen. Ist p=0.1, folgt: E(W)=q/p=0.9/0.1=9 und wir müssen uns auf eine Wartezeit von im Mittel 9 einstellen.
gewählt werden müssen. Wir wollen im Rahmen der bisherigen Überlegungen p=0.06 sowie die Defaultwerte ZZ=17 und n=100 wählen.
[88:]
<<*>>=
<<ziehe {\tt n} geometrisch verteilte Zufallszahlen mit {\tt p}: {\tt x}>>
Nun lassen sich die Wartezeiten als horizontale Linien darstellen.
[89:]
<<*>>=
<<plotte {\tt x} als horizontale St\"abe>>
Zur Darstellung der simulierten Verteilung helfen einige schon eingesetzte Anweisungen.
[90:]
<<*>>=
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>
Mit Hilfe der zusammenfassenden Statistiken bekommen wir einen quantitativen Zugang.
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0 4 10 15.52 19 143 19.22513 100
Zunächst fällt die starke Asymmetrie der simulierten Verteilung ins Auge.
Sowohl Boxplot als auch Jitterplot und Stabdiagramm sprechen eine
eindeutige Sprache. In ganz wenigen Fällen muß man sehr lange warten. Da der
Median 10 ist, liegt in 50 % die Wartezeit unter 11 Versuchen. Die Differenz
zwischen Mittel und Median ist beträchtlich und ist zum Teil dem Ausreißer (?)
143 anzulasten.
An dieser Stelle sei daran erinnert, daß die Darstellungen der
Zwischenzugriffszeiten zu verwandten Bildern geführt haben. Wir werden darauf
zurückkommen.
Falls die Annahmen des Modells zutreffen, kommen wir aufgrund der Simulationen zu der Antwort: Im Durchschnitt müssen wir ungefähr 16 Minuten warten, bis eine Minute mit einem Serverzugriff eintritt. In ungefähr 25 % der Fälle wird die Wartezeit jedoch weniger als 5 Minuten betragen.
[91:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<berechne aus {\tt x} Wartezeiten in Minuten: {\tt x}>>
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>
Wir erhalten:
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0 1 6 15.44 13 407 45.21758 85
Die Grundstruktur stimmt in etwa. Jedoch ist die Variabilität doch noch um einiges größer als im Modell. Im besonderen ist das Maximum erheblich vom Zentrum der Daten entfernt.
![]()
Da jedoch jedes passendere Modell auch komplizierter werden wird, wollen wir die geometrische Verteilung noch näher studieren.
[92:]
<<*>>=
<<aktiviere {\tt geometric.calculator}>>
Die geometrische Verteilung besitzt kein Gedächtnis!Bei dieser Aussage handelt es sich um eine verbale Interpretation eines formalen Zusammenhangs, denn für die geometrische Verteilung gilt für
Wenn man also schon x0-1 Versuche erfolglos gewartet hat, ist die Wahrscheinlichkeit, weniger als weitere x-x0 Versuche warten zu müssen, genauso groß wie die Wahrscheinlichkeit, ohne Bedingung x-x0 Versuche zu warten.
Zum anderen gilt:
![]()
Entfernt man dann die Wartezeitbeobachtungen, die kleiner als ein vorgegebener Wert x0 sind, so muß sich für den Rest nach Verschiebung um x0 wieder ein in etwa ähnliches Bild mit einer ähnlich gelagerten Geraden ergeben.
[93:]
<<*>>= <<bereite Ged\"achnisexperiment vor und f\"uhre es durch>>
Stichprobe aus geometrischer Verteilung [1] "Welches p wuenschen Sie (Default=0.5)? p=?" 1: .06 [1] "Welche Wiederholungsanzahl n wuenschen Sie (Default=100)? n=?" 1: 5000 [1] "Welchen Zufallsgeneratorstart ZZ wuenschen Sie (Default=17)? ZZ=?" 1: 17 [1] "Wie gross soll x.0 sein (Default: x.0=5)?" 1: 5
erhalten wir folgende Ergebnisse:
[1] "Plot und Daten aufgrund der Stichprobe"
p aus Achsenabschnitt p aus Steigung
0.05957634 0.05932194
[1] "Plot und Daten nach Modifikation"
p aus Achsenabschnitt p aus Steigung
0.05901169 0.05779475
Zum ersten Plot läßt sich feststellen, daß sehr viele Punkte ganz gut in der Nähe einer Geraden liegen. Dies kann als Beleg der Eignung des geometrischen Modells für die Stichprobendaten gelten. Im Bereich kleiner Wartezeiten streuen die Punkte weniger als in demjenigem großer Zeiten. Die Schätzungen aus dem ersten Plot kommen dem vorgegebenen p sehr nahe.
Die Ergebnisse zu dem zweiten Plot sind qualitativ nicht von den ersten zu unterscheiden. Also auch zu der modifizierten Stichprobe paßt -- wie erwartet -- ein geometrisches Modell und die Schätzungen des unbekannten Parameters fallen sehr ähnlich aus.
[94:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<berechne aus {\tt x} Wartezeiten in Minuten: {\tt x}>>
<<zeichne Erkennungsplot f\"ur die geometrische Verteilung>>
[1] "Plot und Daten aufgrund der Stichprobe"
p aus Achsenabschnitt p aus Steigung
0.083944023 0.082995951
Die Punkte liegen nicht sehr überzeugend auf einer Geraden. Besonders
der Ausreißer jenseits 400 paßt nicht ins Bild. Er wird natürlich wieder
durch die lange Nachtpause verursacht.
[95:]
<<*>>=
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>
<<berechne aus {\tt x} Wartezeiten in Minuten: {\tt x}>>
<<erfrage {\tt x.0}>>
<<ermittle und verschiebe die Werte von {\tt x} gr\"o{\ss}er {\tt x.0}: {\tt x}>>
<<zeichne Erkennungsplot f\"ur die geometrische Verteilung>>
Wie man schnell durch Probieren herausfindet, macht nur ein
kleiner
x.0
-Wert Sinn. Für die Wahl
x.0=2
:
Zeitpunkte vom 03.02.97 auf x ablegen Serverzugriff pro Minute ermitteln [1] "Welchen Wert fuer x.0 wuenschen Sie?" 1: 2
erhalten wir
sowie
Erkennungsplot fuer geometrische Verteilung
[1] "Plot und Daten aufgrund der Stichprobe"
p aus Achsenabschnitt p aus Steigung
0.049628984 0.025023162
Das Verfahren errechnet jetzt ganz andere Werte. Damit ist wieder eine gewisse Skepsis gegen die Modellierung mittels einer geometrischen Verteilung angebracht. Es sollte bei weitergehenden Interpretationen berücksichtigt werden, daß im Simulationsexperiment ein Stichprobenumfang von 5000 gewählt werden konnte, nach der Modifikation mit x.0=2 für den letzten Plot aber nur noch 63 Daten zur Verfügung stehen.
Besonders die letzten beiden Bilder regen sicher dazu an, die Modellierung zu verbessern. Wenn man sich vor Augen hält, daß die ursprünglichen Sekunden-Daten in Minuteninformationen überführt worden sind, könnte eine Modellierung mit feineren Zeiteinteilungen Verbesserungen bringen. Im nächsten Abschnitt wird diese Idee durch Unterstellung einer kontinuierlichen Zeit umgesetzt. Damit entfällt dann auch das Problem, mehrere (Zugriffs-)Ereignisse in einem Intervall nicht auswerten zu können.
In diesem Abschnitt wurde verschiedenes Material zur geometrischen Verteilung zur Verfügung gestellt. Mit diesem lassen sich geometrisch verteilte Zufallszahlen erzeugen und darstellen. Der geometric.calculator
ermöglicht Berechnungen rund um die geometrische Verteilung. Ein graphisches Werkzeug zur Prüfung des Verteilungsmodells wurde vorgestellt. Zur Frage der Überschrift Wie viele Minuten muß man auf den nächsten Serverzugriff warten? läßt sich antworten: Nach dem angepaßten Modell im Mittel etwas mehr als eine Viertelstunde, wobei in 50 % der Fälle 10 Minuten ausreichen sollten. Diese Ergebnisse werden dadurch relativiert, daß die Daten zum Teil erheblich unterschiedlicher Eigenschaften aufweisen als aus einer geometrischen Verteilung gezogene Daten.
[96:]
<<*>>=
cat("Revbook:4.d4:v.exp:Abschnitt Exponentialverteilung\n")
In diesem Abschnitt wird als Pendant zur geometrischen Verteilung die Exponentialverteilung vorgestellt. Diese Verteilung eignet sich dazu, Wartezeitsituation zu modellieren, für die einige einfache Bedingungen erfüllt sind. Zunächst wird die Exponentialverteilung motiviert, dann werden Stichproben aus exponentialverteilten Grundgesamtheiten untersucht und ein Kalkulator für die Exponentialverteilung angeboten. Für die Zwischenzeiten des Servers wird untersucht, inwieweit eine Modellierung mit Hilfe der Exponentialverteilung angemessen ist und was letztlich auf die gestellte Frage geantwortet werden kann.
Die geometrische Verteilung zeichnet sich durch zwei sich bedingende Eigenschaften aus:
![]()
![]()
![\fbox {
\begin{minipage}
{14cm}
\em Exponentialverteilung \ [1ex]
Eine Zufallsv...
...^{-\lambda x}$, E$(X)=1/\lambda$\space und Var$(X)=1/\lambda^2$.\end{minipage}}](img130.gif)
Damit besitzt die Exponentialverteilung die gewünschten Eigenschaften.
[97:]
<<*>>=
<<ziehe Stichprobe aus einer Exponentialverteilung mit $\lambda$: {\tt x}>>
Mit den Setzungen
Stichprobenziehung -- Exponentialverteilung [1] "Welches lambda wuenschen Sie (Default=1)? lambda=?" [1] 1 [1] "Welchen Stichprobenumfang n wuenschen Sie (Default=100)? n=?" [1] 100 [1] "Welchen Zufallsgeneratorstart ZZ wuenschen Sie (Default=17)? ZZ=?" [1] 17erhalten wir aufgrund der Anweisungen
[98:]
<<*>>=
<<plotte {\tt x} als horizontale St\"abe>>
den Plot Output:
Zur ersten Untersuchung der Stichprobe lassen sich bereits bekannte Anweisungen verwenden.
[99:]
<<*>>=
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- kontinuierlich>>
Wir erhalten als
Zusammenfassende Statistiken
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
0.0001549 0.2668 0.6735 0.9914 1.225 8.872 1.188518 100
und als Plot:
[100:]
<<*>>=
<<aktiviere {\tt exponential.calculator}>>
Die Auswahlpunkte, die dieses Werkzeug bietet, lassen sich aus folgendem
Protokoll entnehmen.
[1] "exponential.calculator start"
[1] "Bitte lambda eingeben! (Default: lambda=1) lambda=?"
1: 10
E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma
0.1 0.01 0.1 -0.1 0 0.2 0.3
[1] "Auswahl von exponential.calculator"
items:
a Ende
b lambda eingeben
c f(x) und F(x) berechnen
d Quantile berechnen
e Statistiken berechnen
f Plot erstellen
Selection: c
[1] "Bitte x eingeben! x=?"
1: 0.1 0.5 1
4:
[1] "Werte der Dichtefunktion und der Verteilungsfunktion:"
x f(x) F(x)
[1,] 0.1 3.6787944e+00 0.63212056
[2,] 0.5 6.7379470e-02 0.99326205
[3,] 1.0 4.5399930e-04 0.99995460
[1] "Auswahl von exponential.calculator"
items:
a Ende
b lambda eingeben
c f(x) und F(x) berechnen
d Quantile berechnen
e Statistiken berechnen
f Plot erstellen
Selection: f
Die letzte Anweisung liefert eine Darstellung der Dichte.
![]()
[101:]
<<*>>=
<<lege Zwischenzeiten vom 03.02.97 auf {\tt x} ab>>
<<erstelle f\"ur {\tt x} Erkennungsplot zur Exponentialverteilung>>
Die Anweisungen führen zu dem Bild:
sowie einem Vorschlag für
:
Exponential-Erkennungsplot lambda.dach 0.001908848
Wieder sehen wir ein Bild, bei dem der bekannte Ausreißer eine gute Ausnutzung der Darstellungsfläche verhindert. Die Punkte liegen zum großen Teil in der Nähe der eingezeichneten Geraden.
Nach den letzten Überlegungen müßte der Durchschnitt der Wartezeiten in dem Bereich um 500 Sekunden liegen. Wir wollen deshalb schnell noch einmal die wesentlichen Statistiken zu den Zwischenzeiten vom 03.02.97 auflisten.
[102:]
<<*>>=
<<berechne zusammenfassende Statistiken von {\tt x}>>
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
1 62.5 312 823.8 744.5 24450 2487.414 103
In der Tat liegt der oben berechnete Wert zwischen dem Median und dem Mittel
des Datensatzes. Berechnet man umgekehrt
den Kehrwert des Mittels, so erhält man
1/823.8=0.0012. Zur Rate 0.0012 gehört also eine durchschnittliche
Wartezeit von 823.8 Sekunden oder zirka 13.7 Minuten.
Über das Mittel aller Zwischenzeiten würde man also eine Rate
0.0012 vorschlagen.
Die Erkenntnis, die hinter den Berechnungen steckt, mag als eine Wiederholung schon bekannter Dinge angesehen werden. Jedoch können wir nun begrifflich besser mit den Phänomenen umgehen. Die Belastungsrate verkörpert die konzentrierte Antwort auf die zugrundeliegende Belastungsfrage.
Mit einem Exponential-Modell und einer Belastungsrate von
=0.0019
können wir die Daten (bezogen auf Sekunden) einigermaßen beschreiben.
Leider befriedigt dieses noch nicht völlig, da die Unterschiedlichkeit
der Belastung über den Tag hinweg noch nicht faßbar wird.
Verfeinerungen
könnten darin bestehen, eine kompliziertere Verteilung heranzuziehen oder
aber die Erkenntnis umzusetzen, daß es über einen Tag hinweg verschiedene
Belastungsraten gibt. Wir wollen den zweiten dieser beiden Wege
gehen und die Belastungsrate im Zeitablauf abschätzen.
Um sich verändernde Raten zu ermitteln, benötigen wir noch ein weiteres Instrument. Der hier angebotene Vorschlag geht nach folgenden Schritten vor:
aufeinanderfolgenden Zugriffszeitpunkten an.
[103:]
<<*>>= <<ermittele Belastung anhand zusammenh\"angender Zugriffszeitpunkte>>
Belastungsrate im Zeitablauf [1] "Geben Sie die Zahl der Ereignisse an, die zusammen betrachtet" [1] "werden sollen! Es duerfen auch mehrere Werte (maximal 9 Werte)" [1] "Zahlen eingegeben werden. (Default: 5 10 20)" 1: 4 7 10 15 20 25 35 45 55erhalten wir 9 Plots:
gewählt wird, umso glatter und flacher wird der Plot. Wird sie zu klein gewählt, wird das Bild von zufällig nahe beieinanderliegenden Ereignissen beherrscht. Ist die Anzahl zu groß, werden Belastungswechsel verdeckt. Leider scheint es keine ausgezeichnete oder richtige Anzahl zu geben.
An dieser Stelle könnte das Werkzeug noch weiteren Verbesserungen unterzogen und es könnte auch ein Bezug zum Dichteschätzinstrument am Ende des Kapitels über multivariate Beschreibungstechniken gezogen werden. Dieses würde jedoch zu umfangreich sein und unterbleibt deshalb.
[104:]
<<*>>=
cat("Revbook:4.d5:v.pois:Abschnitt Poisson-Verteilung\n")
Für einen Systemverwalter ist die Frage nach der Wartezeit bis zum
nächsten Ereignis höchstens eine vorgelagerte Frage. Wichtiger ist
ihm, in welchen Zeiträumen sich wieviel tut. Anhand der Belastungsrate
im Zeitablauf kann man schon stark belastete Zeiten ausmachen.
Jedoch fehlt noch die Abschätzung für die Stärke der Beanspruchung
oder spezieller für Ereignishäufigkeiten in vorgegebenen Zeitintervallen.
Schaut man zurück, so stellt man fest, daß in dem Abschnitt zur Binomial-Verteilung eine entsprechende Frage beantwortet wurde. Die Binomial-Verteilung liefert Wahrscheinlichkeiten für die Anzahlen von Erfolgen bei einer festen Anzahl von Versuchen. Hier interessieren wir uns für die Wahrscheinlichkeiten der Anzahlen von Ereignissen in einem festen Zeitintervall. Die gesuchte Verteilung müßte sich also wie folgt ergeben:
Bei diesem Prozeß wächst in der üblichen
Symbolik der Binomial-Verteilung n an.
Entsprechend muß pn, die Wahrscheinlichkeit, in einem
kleinen Intervall ein Ereignis anzutreffen, kleiner werden. Da npn die
erwartete Anzahl der Erfolge im Gesamtintervall ist, wollen wir sie
auf
festsetzen. Dann folgt formal
und
Geht jetzt
, folgt:
Insgesamt erhält man also:
![]()
![\fbox {
\begin{minipage}
{14cm}
\em Poisson-Verteilung \ [1ex]
Eine Zufallsvari...
...\lambda$. \ Es gilt: E$(X)=\lambda$\space und Var$(X)=\lambda$.\end{minipage}}](img144.gif)
Sind die Zwischenankunftszeiten exponentialverteilt mit dem Parameter
, so lassen sich die Wahrscheinlichkeiten für die Anzahl von
Ereignissen in einem Zeitintervall mit Hilfe der Poisson-Verteilung
mit Parameter
berechnen. Dabei ist die Länge des Zeitintervalls
durch das Intervall vorgegeben, auf das sich die Rate der
Exponentialverteilung bezieht.
[105:]
<<*>>=
<<ziehe Stichprobe aus einer Poisson-Verteilung mit $\lambda$: {\tt x}>>
Wir wollen im Anschluß an obige Diskussionen einmal einen großen Wert
für Stichprobenziehung -- Poisson-Verteilung [1] "Welches lambda wuenschen Sie (Default=1)? lambda=?" 1: 10 [1] "Welchen Stichprobenumfang n wuenschen Sie (Default=100)? n=?" 1: 200 [1] "Welchen Zufallsgeneratorstart ZZ wuenschen Sie (Default=17)? ZZ=?" 1: 17
Zur Untersuchung der Stichprobe hilft:
[106:]
<<*>>=
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>
Diese Anweisungen liefern:
Min. 1st Qu. Median Mean 3rd Qu. Max. Std.Dev. n
3 8 10 10.2 12 21 3.188701 200
und das Bild:
Der Mittelwert ist mit 10.195 dem Erwartungswert von 10 sehr nah. Die Verteilung wirkt fast symmetrisch, doch sind im Boxplot zwei Ausreißer ausgewiesen, die beide auf einer Seite liegen. Die relativen Häufigkeiten führen im Gegensatz zur empirischen Verteilungsfunktion der simulierten Daten nicht zu einem so gleichmäßigen Stabdiagramm, wie man das aufgrund der Wahrscheinlichkeitsfunktion vermutet kann (siehe dazu unten: poisson.calculator ).
läßt sich wieder von einer Stichprobe ausgehend ein Plot erstellen,
in dem bei Eignung der Poisson-Verteilung die Punkte nahe der Geraden
mit dem Achsenabschnitt
und der Steigung
liegen.
Hier sind die zugehörigen Anweisungen.
[107:]
<<*>>=
<<erstelle f\"ur {\tt x} Erkennungsplot zur Poisson-Verteilung>>
Wir erhalten für die Stichprobe aus der Poisson-Verteilung:
sowie
Poisson-Erkennungsplot
lambda.dach1 lambda.dach2
10.124575 10.141854
Für die Stichprobe finden wir den uns ja bekannten Parameter ziemlich genau
wieder.
[108:]
<<*>>=
<<aktiviere {\tt poisson.calculator}>>
Gehen wir einmal von der hohen Belastungsrate [1] "poisson.calculator start" [1] "Bitte lambda eingeben! (Default: lambda=1) lambda=?" 1: 10 E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma 10 10 3.162278 3.675445 6.837722 13.16228 16.32456 [1] "Auswahl von poisson.calculator" items: a Ende b lambda eingeben c f(x) und F(x) berechnen d Quantile berechnen e Statistiken berechnen f Plot erstellen Selection: c [1] "Bitte x eingeben! x=?" 1:
[1] "Werte der Wahrscheinlichkeits- und der Verteilungsfunktion:"
x f(x) F(x)
[1,] 3 0.007566655 0.010336051
[2,] 4 0.018916637 0.029252688
[3,] 5 0.037833275 0.067085963
[4,] 6 0.063055458 0.130141421
[5,] 7 0.090079226 0.220220647
[6,] 8 0.112599032 0.332819679
[7,] 9 0.125110036 0.457929714
[8,] 10 0.125110036 0.583039750
[9,] 11 0.113736396 0.696776146
[10,] 12 0.094780330 0.791556476
[11,] 13 0.072907946 0.864464423
[12,] 14 0.052077104 0.916541527
[13,] 15 0.034718070 0.951259597
[14,] 16 0.021698794 0.972958390
[15,] 17 0.012763996 0.985722386
[16,] 18 0.007091109 0.992813495
[1] "Auswahl von poisson.calculator"
items:
a Ende
b lambda eingeben
c f(x) und F(x) berechnen
d Quantile berechnen
e Statistiken berechnen
f Plot erstellen
Selection: f
Der erstellte Plot sieht schon sehr normal aus ...
... Normal in dem Sinn, daß die Gestalt sehr stark der von der Normalverteilung entspricht. Mehr zur Normalverteilung erfahren Sie im nächsten Kapitel.
[109:]
<<*>>=
<<lege Zwischenzeiten vom 03.02.97 auf {\tt x} ab>>
<<erstelle zu {\tt x} einen QQ-Plot zur Modellpr\"ufung>>
Hier ist der Plot zu unserem Datensatz, der bei der Wahl
Exponentialverteilung
entsteht.
Das entstandene Bild sieht dem Erkennungs-Plot aus dem Abschnitt zur Exponentialverteilung äußerst ähnlich. Warum ist das wohl so?
[110:]
<<*>>=
cat("Revbook:4.m:menu.mo:Menue Modellierungsschritte\n")
<<Auswahl zu den Aufgaben des Kapitels Modelle>>
Zur Information wieder das Auswahlmenü:
items: a Abbruch b lege Datensaetze zur Bearbeitung auf x ab c erzeuge Stichprobe x d modifiziere Datensaetze x e zeige x an, berechne Statistiken, stelle x dar f aktiviere Verteilungskalkulator g erstelle Verteilungs-Erkennungsplots h erstelle QQ-Plots zur Modellueberpruefung i erstelle Durchschnittskurven j ermittle Belastung im Zeitablauf Selection:
[111:]
<<*>>=
cat("Revbook:5.a:start.nv:Kapitel Normalverteilung\n")
Zum Literaturstudium sei hingewiesen auf:
[Autorenkollektiv: Kapitel 6],
[Bamberg, Baur: Abschnitte über Binomialverteilung, Normalverteilung,
den zentralen Grenzwertsatz],
[Schlittgen: Kapitel über die Normalverteilung].
Theorem (De Moivre-Laplace): Es sei Xn binomialverteilt mit den Parametern n und p. Dann geht fürDamit ist die Anzahl der Gewinntips approximativ normalverteilt mit den Parameterndie Verteilung von
gegen die Standardnormalverteilung:
Der Quotient
ist also approximativ N(0,1)-verteilt.
[112:]
<<*>>=
<<aktiviere Experiment zur Approximation von {\em Binom(n,p)} durch NV>>
Die Approximation könnte besser sein.
Diese Erkenntnis steht nicht im Widerspruch
zu allgemeinen Empfehlungen. Zum Beispiel werden im Statistik-Skript
die Approximationsvoraussetzungen
und
genannt.
Offensichtlich ist die erste nicht erfüllt.
Für 5 Jahre ist die Bedingung erfüllt und könnte verwendet werden. Dieses
sollte der Leser am Rechner tun.
Wie man schnell prüfen kann, führen p-Werte nahe 0.5 zu viel besseren
Ergebnissen. Für n=104 und p=0.5 würde man zum Beispiel erhalten:
Theorem (Zentraler Grenzwertsatz): Es seienDie Prämissen dieses Satzes sind äußerst allgemein. Außerdem gibt es in der Statistik viele Situationen (wie zum Beispiel in der Testtheorie), in denen eine Frage auf die Summe von unabhängigen und identisch verteilten Zufallsvariablen zurückgeführt werden kann. Die Normalverteilung erlangt aus diesem Grund über den zentralen Grenzwertsatz aber auch aufgrund ihrer mathematischen Eigenschaften ihre herausragende Bedeutung.identisch verteilte, unabhängige Zufallsvariablen mit E(Xi)=a und Var(Xi)=b2. Dann gilt:
mit
es konvergiert also die Verteilungsfunktion der standardisierten Summe bzw. des standardisierten Mittels dieser Zufallsvariablen mit steigender Summandenzahl gegen die Verteilungsfunktion der standardisierten Normalverteilung.
Die Qualität der Approximation hängt vom Stichprobenumfang wie auch von der Verteilung der Stichprobenvariablen ab. Um hierfür ein Gespür zu bekommen, folgt nun ein Experiment, in dem diese beiden Einflußgrößen gewählt werden können.
[113:]
<<*>>= <<aktiviere Experiment zum zentralen Grenzwertsatz>>
Demonstration der Approximation von standardisierten Stichprobenmitteln durch die Normalverteilung Modell / Aus welcher Verteilung sollen Stichproben gezogen werden (Default: Normalverteilung)? items: a Abbruch/Ende b Normalverteilung c Exponentialverteilung d Gleichverteilung e Cauchy-Verteilung f Binomialverteilung g Poisson-Verteilung Selection: d Bitte Untergrenze der Gleichverteilung eingeben (Default: 0)! 1: -0.5 Bitte Obergrenze eingeben (Default: 1)! 1: 0.5 Bitte Umfang der einzelnen Stichproben eingeben! (Default: 5) 1: 48 Bitte Umfang der Wiederholungen eingeben! (Default: 100) 1: 100 Bitte Start des Zufallszahlengenerators eingeben! (Default: 13) 1: 13 ...
Die empirische Verteilungsfunktion (durch Punkte markiert) liegt sehr nahe bei der von der Standardnormalverteilung (durchgezogene Linie). Daß dieses bei Verletzung der Annahmen des Satzes nicht so ist, zeigt der Plot, der sich bei der Cauchy-Verteilung mit zum Beispiel folgenden Setzungen ergibt:
Bitte Zentrum der Cauchy-Verteilung eingeben (Default: 0)! 1: 0 Bitte Skalenparameter eingeben (Default: 1)! 1: 1 Bitte Umfang der einzelnen Stichproben eingeben! (Default: 5) 1: 200 Bitte Umfang der Wiederholungen eingeben! (Default: 100) 1: 100 Bitte Start des Zufallszahlengenerators eingeben! (Default: 13) 1: 13 ...
Man sieht, daß die Pfade immer wieder wie durch einen Impuls Sprünge machen. Am Plot der Verteilungsfunktionen erkennt man, daß sich besonders die Schwänze unterscheiden. Dazu sei angemerkt, daß bei vielen realen Problemsituationen den Schwänzen der Verteilungen eine besondere Bedeutung zukommt. Zum Beispiel werden sich die zentralen Überlegungen beim Testen von Hypothesen ausschließlich auf die Randbereiche von Verteilungen beziehen, so daß die Qualitäten einer Approximation wesentlich an den Schwanzenden festgemacht werden sollten.
Wir wollen es bei dieser Demonstration belassen und keine weiteren theoretischen Ausführungen anstellen. Es empfiehlt sich, Versuche mit der Exponenentialverteilung und kleinen Stichprobenumfängen und auch den diskreten Verteilungen mit kleineren und größeren Umfängen anzustellen.
[114:]
<<*>>= <<aktiviere Normalverteilungskalkulator>>
[1] "normal.calculator start" [1] "Bitte Mittel eingeben! (Default: mu=0) mu=?" 1: 2.08 [1] "sigma ist festzulegen!" [1] "Wenn Sie" [1] " Standardabweichung eingeben wollen, bitte 0 eingeben," [1] " Varianz eingeben wollen, bitte 1 eingeben!" [1] " (Default -- leere Eingabe: 0)" 1: 1 [1] "Bitte VARIANZ festlegen! (Default: 1) sigma^2=?" 1: 2.04 E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma 2.08 2.04 1.428286 -0.7765714 0.6517143 3.508286 4.936571
[1] "Auswahl von normal.calculator" items: a Ende b Mittel festsetzen c Variabilitaet festlegen d f(x), F(x), (1-F(x)) berechnen e Quantile berechnen f X verschieben g X skalieren Selection: d
[1] "Bitte x eingeben! x=?"
1: 1
E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma
2.08 2.04 1.428286 -0.7765714 0.6517143 3.508286 4.936571
[1] "Dichte- und Verteilungsfunktion:"
x f(x) F(x) 1-F(x)
[1,] 1 0.209864 0.2247793 0.7752207
[1] "Auswahl von normal.calculator"
In dem Dialog wurde
zuerst das Modell fixiert. Dann wurde ermittelt, wie groß die
Wahrscheinlichkeit ist, ein Gewinnlos zu bekommen. Der Kalkulator berechnete
einen Wert von zirka 78 %. Das zugehörige Bild sieht wie folgt aus:
Es wurde oben schon deutlich, daß die Approximation nicht allzu gut ist. Natürlich sollte man bei dieser Konstellation nicht zur Approximation greifen. Genauere Ergebnisse bekommt man hier mit dem Binomial-Kalkulator. Der Fall Gewinnlose in 5 Jahren bleibt wieder dem Leser überlassen.
Für das Beispiel mit den Tankmengenfehlern ist eine Normalverteilung
mit den Parameter
und
zu verwenden. Mit dem folgenden
Dialog wurde festgestellt, daß sich in 90 % aller Fälle
der Fehler grob zwischen -3.3 und 3.3 bewegen wird.
[1] "normal.calculator start"
[1] "Bitte Mittel eingeben! (Default: mu=0) mu=?"
1: 0
[1] "sigma ist festzulegen!"
[1] "Wenn Sie"
[1] " Standardabweichung eingeben wollen, bitte 0 eingeben,"
[1] " Varianz eingeben wollen, bitte 1 eingeben!"
[1] " (Default -- leere Eingabe: 0)"
1: 0
[1] "Bitte STANDARDABWEICHUNG festlegen! (Default: 1) sigma=?"
1: 2
E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma
0 4 2 -4 -2 2 4
[1] "Auswahl von normal.calculator" items: a Ende b Mittel festsetzen c Variabilitaet festlegen d f(x), F(x), (1-F(x)) berechnen e Quantile berechnen f X verschieben g X skalieren Selection: e
[1] "Bitte Wahrscheinlichkeiten eingeben! F(x)=?"
[1] 0.05 0.95
E(X) Var(X) sigma E(X)-2sigma E(X)-sigma E(X)+sigma E(X)+2sigma
0 4 2 -4 -2 2 4
[1] "Quantile:"
F(x) x
[1,] 0.05 -3.289707
[2,] 0.95 3.289707
[1] "Auswahl von normal.calculator"
...
Dazu gehört das folgende Bild:
[115:]
<<*>>=
cat("Revbook:0:MENU:allgemeines Menu\n")
cat("------------------------------\n")
cat(" Abk.: lange Bezeichnung:\n")
cat("------------------------------\n")
activate.jump(menu.jump)
[116:]
<<*>>=
cat("------------------------------------\n")
cat(" Sie sind am Ende angekommen!")
cat(" Waehlen Sie einen neuen Startpunkt! \n")
cmds<-"sMENU"
[117:]
<<start>>=
print("Start der revbook-Initialisierung")
init.revbook()
revbook.obj.flag<-T
if(dev.cur()==1){
if(exists("win.graph")) win.graph() else motif()
}
synchronize()
[118:]
<<start>>=
print("Start der Initialisierung - Kapitel Masszahlen - 2.10.97")
[119:]
<<lege Zwischenzeiten vom 03.02.97 auf {\tt x} ab>>=
cat("x <- dzeitpunkte.03.02.97\n")
x<-dzeitpunkte.03.02.97
[120:]
<<drucke {\tt x} aus>>=
cat("x ausdrucken\n")
print(x)
[121:]
<<berechne Mittelwert von {\tt x}>>=
cat("Mittelwert\n")
print(mean(x))
[122:]
<<berechne Median von {\tt x}>>=
cat("Median\n")
print(median(x))
[123:]
<<berechne Extrema von {\tt x}>>=
cat("Maximum\n")
print(max(x))
cat("Minimum\n")
print(min(x))
[124:]
<<berechne Midrange von {\tt x}>>=
cat("Midrange\n")
print((min(x)+max(x))/2)
[125:]
<<berechne getrimmtes Mittel von {\tt x}>>=
cat("getrimmtes Mittel\n")
cat("Wieviel Prozent sollen an jeder Seite enfernt werden?\n")
cat(" Eingabe:\n")
result<-mean(x,trim=min(.5,.01*c(scan(,0,n=1),0)[1]))
cat(" ergibt:\n")
print(result)
[126:]
<<berechne Trimean von {\tt x}>>=
cat("Trimean\n")
print(sum(c(0.25,0.5,0.25)*quantile(x,c(0.25,0.5,0.75))))
[127:]
<<berechne Spannweite von {\tt x}>>=
cat("Spannweite\n")
print(max(x)-min(x))
[128:]
<<berechne Stichprobenvarianz von {\tt x}>>=
cat("Stichprobenvarianz\n")
print(var(x))
[129:]
<<berechne Standardabweichung von {\tt x}>>=
cat("Stichprobenstandardabweichung\n")
print(var(x)^0.5)
[130:]
<<berechne Inter-Quartilsabstand von {\tt x}>>=
cat("Inter-Quartilsabstand\n")
print(as.vector(quantile(x,0.75)-quantile(x,0.25)))
[131:]
<<berechne zusammenfassende Statistiken von {\tt x}>>=
cat("Zusammenfassende Statistiken\n")
print(summary.stats(x))
[132:]
<<transformiere {\tt x} mittels Box-Cox-Transformation, zeige Statistiken>>=
cat("Statistiken der transformierten Daten\n")
xtrans<-box.cox.transformation(x)
print(summary.stats(xtrans))
print("Wollen Sie das Transformationsergebnis auf x ablegen (j/n)?")
if(readline()[1]=="j") x<-xtrans
[133:]
<<Auswahl zu den Aufgaben des ersten Kapitels>>= auswahl.masszahlen()
[134:]
<<start>>=
<<initialisiere Auswahl zu den Aufgaben des Kapitels Ma{\ss}zahlen>>
print("Ende der Initialisierung - Kapitel Masszahlen")
[135:]
<<start>>=
print("Start der Initialisierung - Kapitel Graphiken - 22.9.97")
[136:]
<<lege Zwischen-Zeitpunkte vom 03.02.97 auf {\tt x} ab>>=
cat("Zwischen-Zeitpunkte vom 03.02.97 als Daten -> x\n")
x<-dzeitpunkte.03.02.97
[137:]
<<erstelle graphische 5-Zahlen-Zusammenfassung von 1, 2, 3, 4, 5>>=
cat("Graphische 5-Zahlen-Zusammenfassung\n")
boxplot(1:5,range=0)
[138:]
<<erstelle graphische 5-Zahlen-Zusammenfassung von {\tt x}>>=
cat("Graphische 5-Zahlen-Zusammenfassung\n")
boxplot(x,range=0)
[139:]
<<erstelle Boxplot zu {\tt log(x)}>>=
cat("Boxplot der logarithmierten Daten\n")
boxplot(log(x))
[140:]
<<erstelle Boxplot zu {\tt x}>>=
cat("Boxplot\n")
boxplot(x)
[141:]
<<zeige die 10 kleinsten und die 10 gr\"o{\ss}ten Werte von {\tt x} an>>=
cat("10 kleinsten Werte von x:\n")
print(sort(x)[1:10])
cat("10 groessten Werte von x:\n")
print(rev(sort(x))[1:10])
[142:]
<<bilde Ausschnitt der Daten {\tt x}>>=
cat("Entfernung extremer Werte\n")
x<-remove.extreme.values(x)
[143:]
<<starte Erfahrungssammelfunktion zum Boxplot>>= boxplotexp()
[144:]
<<erstelle Jitterplot zu {\tt x}>>=
cat("Jitterplot\n")
jitterplot(x)
[145:]
<<erstelle Stabdiagramm zu {\tt x}>>=
cat("Stabdiagramm\n")
stabdiagramm(x)
[146:]
<<erstelle H\"aufigkeitstabelle zu {\tt x}>>=
cat("Haeufigkeitstabelle von x\n")
print(table(x))
[147:]
<<erstelle spezielles Balkendiagramm zu {\tt x}>>=
cat("spezielles Balkendiagramm\n")
balkendiagramm(x,c(0,100,200,300,400,500,600,700,800,900,1000,5000))
[148:]
<<erstelle Stem-and-Leaf-Plot zu {\tt x}>>=
cat("Stem-and-Leaf-Plot\n")
stem.and.leaf(x)
[149:]
<<erstelle Histogramm zu {\tt x}>>=
cat("Histogramm\n")
histogramm(x)
[150:]
<<erstelle Histogramm zu {\tt x} mit Grenzen 0, 200, 400, ..., 5000>>=
cat("Histogramm\n")
hxh<-pmin(5000,pmax(0,x))
if(length(hxh)!=length(x))
cat("Warnung: Werte wurden auf den Bereich [0,5000] reduziert!\n")
histogramm(hxh,breaks=seq(from=0,to=5000,by=200))
[151:]
<<erstelle Histogramm von {\tt x} mit manueller Wahl der Grenzen>>=
cat("Histogramm mit manuell eingegebenen Klassengrenzen")
print("Grenzen nach einander eingeben")
print("Nach Eingabe der letzten Klasse noch einmal: -> ENTER")
print("Hinweis: Alle Werte muessen sich innerhalb der Grenzen befinden!")
histogramm(x,breaks=sort(scan(,0)))
[152:]
<<erstelle Dichtespur zu {\tt x}>>=
cat("Dichtespur\n")
dichtespur(x)
[153:]
<<aktiviere interaktives Dichtespur-Sektion zu {\tt x}>>=
cat("interaktive Dichtespur\n")
dichtespur.interaktiv(x)
[154:]
<<erstelle F.dach von {\tt x}>>=
cat("Verteilungsfunktion\n")
F.dach(x)
[155:]
<<erstelle F.dach f\"ur klassierte Daten zu {\tt x}>>=
cat("Empirischen Verteilungsfunktion -- klassierte Daten\n")
F.dach(x,breaks=seq(from=0,to=5000,by=40))
[156:]
<<erstelle emp. Verteilungsfunktion mit manueller Wahl der Grenzen zu {\tt x}>>=
cat("emp. Vtlgsfktn mit manuell eingegebenen Klassengrenzen")
print("Grenzen nach einander eingeben")
print("Nach Eingabe der letzten Klasse noch einmal: -> ENTER")
F.dach(x,breaks=sort(scan(,0)))
[157:]
<<befrage F.dach zu {\tt x} graphisch>>=
cat("Graphische Befragung der empirischen Verteilungsfunktion\n")
F.dach(x)
F.dach.look.up(x)
[158:]
<<Auswahl zu den Aufgaben des Kapitels \"uber Graphiken>>= auswahl.graphiken()
[159:]
<<erstelle Box-Cox-Transformation f\"ur {\tt x}>>=
cat("Statistiken der transformierten Daten\n")
xtrans<-box.cox.transformation(x)
print(summary(xtrans))
print("Wollen Sie das Transformationsergebnis auf x ablegen (j/n)?")
if(readline()[1]=="j") x<-xtrans
[160:]
<<start>>=
<<initialisiere Auswahl zu den Aufgaben des Kapitels Graphiken>>
print("Ende der Initialisierung - Kapitel Graphiken")
[161:]
<<start>>=
print("Start der Initialisierung - Kapitel multivariate Graphiken - 5.8.97")
[162:]
<<lege Zwischenzeiten vom 03.02.97 und vom 17.02.97 auf {\tt xy} ab>>=
cat("Zusammenfassung von dzeitpunkte vom 03.02.97 und 17.02.97 auf xy\n")
xy<-list(dz.03.02.97=dzeitpunkte.03.02.97,
dz.17.02.97=dzeitpunkte.17.02.97)
[163:]
<<berechne zusammenfassende Statistiken zu {\tt xy}>>=
cat("Berechnung der zusammenfassenden Statistiken von xy\n")
print(summary.stats(xy))
[164:]
<<erstelle Boxplot zu {\tt xy}>>=
cat("Boxplots zu xy\n")
boxplot(xy)
[165:]
<<bilde Ausschnitte der Komponenten von {\tt xy}>>=
cat("Entfernung extremer Werte\n")
xy<-remove.extreme.values(xy)
[166:]
<<zeichne Histogramme zu {\tt xy}>>=
cat("Histogramme zu xy\n")
print("Wie viele Klassen sind sollen gebildet werden?")
nclass<-c(scan(,0,n=1),7)[1]
histogramm(xy,nclass=nclass)
[167:]
<<zeichne zu {\tt xy} F.dach und f.dach>>=
cat("F.dach und f.dach zu xy[1:2]\n")
OLDPAR<-par(); par(mfrow=2:1)
<<zeichne {\tt F.dach} zu {\tt xy}>>
<<zeichne Dichtespuren zu {\tt xy}>>
par(OLDPAR)
[168:]
<<erstelle zu den ersten beiden Elementen von {\tt xy} einen QQ-Plot>>=
cat("QQ-Plot von xy[1:2]\n")
qqplot(xy{\tt 1},xy{\tt 2},xlab=getnames(xy)[1],ylab=getnames(xy)[2])
abline(0,1)
[169:]
<<zeige Bootstrap-Stichprobenverteilungen mit {\tt xy}>>=
cat("Bootstrap-Stichprobenverteilungen mit xy\n")
bootstrap.experiment(xy)
[170:]
<<zeige Verteilung einer Statistik von Bootstrap-Stichproben aus {\tt xy}>>=
bootstrap.experiment(xy,type="?")
[171:]
<<lege Zwischenzeiten und Mengen vom 03.02.97 auf {\tt xy} ab>>=
cat("Speicherung der dzeitpunkte und Mengen vom 03.02.97 auf xy\n")
xy<-cbind(dz.03.02.97=dzeitpunkte.03.02.97,m.03.02.97=mengen.03.02.97)
xy<-split(xy,col(xy))
[172:]
<<erstelle Scatterplot zu den ersten beiden Elementen von {\tt xy}>>=
cat("Scatterplot zu xy\n")
scatter(xy)
[173:]
<<transformiere Elemente von {\tt xy} mittels Box-Cox-Transformation>>=
cat("Box-Cox-Transformation von xy\n")
xy<-box.cox.transformation(xy)
[174:]
<<erstelle Scatterplot zu {\tt xy} und zeichne konvexe H\"ullen>>=
cat("Scatterplot von xy mit Huellen\n")
scatter(xy, hull=100)
[175:]
<<berechne Korrelationskoeffizienten der ersten beiden Elementen von {\tt xy}>>=
cat("Berechnung des Korrelationskoeffizienten zu xy\n")
print(cor(xy{\tt 1},xy{\tt 2}))
[176:]
<<lege Regenmengen und Kornertr\"age auf {\tt xy} ab>>=
cat("Regen- und Ertragsdaten auf xy ablegen\n")
xy<-list("Regen"=corn.rain,"Ertrag"=corn.yield)
[177:]
<<lege Regendatens\"atze auf {\tt xy} ab>>=
cat("Regendatensaetze auf xy ablegen\n")
xy<-list("Regen 1"=rain.nyc1,"Regen 2"=rain.nyc2)
[178:]
<<lege Zwischenzeiten vom 03.02.97 auf {\tt xy} ab>>=
cat("Zwischenzeiten vom 03.02.97 auf xy ablegen\n")
xy<-list(dzeitpunkte.03.02.97)
[179:]
<<ordne Daten von {\tt xy} in {\tt anz} gleich gro{\ss}e Klassen ein: {\tt xy}>>=
cat("xy in gleich grosse Klassen einteilen: xy\n")
xy<-split.in.eq.classes(xy)
[180:]
<<erstelle Draftsman's Display zu {\tt xy}>>=
pairs(matrix(unlist(xy),ncol=length(xy)),labels=as.character(1:length(xy)))
[181:]
<<lege Zwischenzeiten und Zeiten vom 03.02.97 auf {\tt xy} ab>>=
cat("Zwischenzeiten und Zeiten auf xy ablegen\n")
xy<-list(dzeitpunkte.03.02.97, zeitpunkte.03.02.97)
[182:]
<<ordne {\tt xy[1] }gem\"a{\ss} {\tt xy[2] }in {\tt anz} Klassen ein: {\tt xy}>>=
cat(paste(getnames(xy)[1],"gemaess",getnames(xy)[2]))
cat("in anz Klassen einteilen\n")
xy<-split.x.by.y(xy{\tt 1},xy{\tt 2})
[183:]
<<erstelle zum paarweisen Vergleich der Datens\"atze von {\tt xy} QQ-Plots>>=
cat("QQ-Plots zwischen den einzelnen Datensaetzen von xy\n")
qqpairsplot(xy)
[184:]
<<errechne Anzahlen der Stichproben von {\tt xy}>>=
cat("Anzahlen der Stichproben von xy\n")
print(lapply(xy,length))
[185:]
<<lege Zeitpunkte vom 03.02.97 auf {\tt xy} ab>>=
cat("Zeitpunkte vom 03.02.97 auf xy ablegen\n")
xy<-list(zeitpunkte.03.02.97)
[186:]
<<zeichne Jitterplot zu {\tt xy}>>=
jitterplot(xy)
[187:]
<<zeichne {\tt F.dach} zu {\tt xy}>>=
cat("F.dach zu xy zeichnen\n")
F.dach(xy)
[188:]
<<zeichne Dichtespuren zu {\tt xy}>>=
cat("Dichtespuren zu xy\n")
dichtespur(xy)
[189:]
<<rechne Sekunden in Tage, Stunden und Minuten um>>=
cat("Umrechnung von Sekunden in Tage, Stunden usw.")
print("Geben Sie die Sekunden ein!")
h<-c(scan(,0,n=1),0)[1]; ta<-floor(h/86400); h<-h%%86400;
st<-floor(h/3600); h<-h%%3600; mi<-floor(h/60); h<-h%%60
print(paste(ta,"Tage",st,"Stunden",mi,"Minuten",h,"Sekunden"))
[190:]
<<Auswahl zu den Aufgaben des Kapitels \"uber multivariate Graphiken>>= auswahl.mgraphiken()
[191:]
<<begrenze Werte von {\tt xy}>>=
cat("Begrenzung extremer Werte von xy\n")
xy<-limit.values(xy)
[192:]
<<lege Datensatz von {\tt xy} auf {\tt x} ab>>=
cat("Speicherung einer Komponente auf x\n")
print("Der Datensatz besitzt die Komponenten")
print(getnames(xy))
print("Geben Sie die Nummer der Komponente an,")
print("die auf x abgelegt werden soll.")
n<-floor(c(scan(,0,n=1),0)[1])
if(1<=n&n<=length(xy)) x<-xy{\tt n}
[193:]
<<mache mit {\tt xy} Bootstrap-Experimente>>=
cat("Bootstrap-Experimente mit xy\n")
bootstrap.experiment(xy,type="?")
[194:]
<<entferne eine Komponenten aus {\tt xy}>>=
cat("Komponente von xy entfernen\n")
print(paste("xy besitzt",length(xy),"Komponenten"))
print("Welche Komponente soll entfernt werden?")
h<-c(scan(,0,n=1),0)[1]
xy{\tt h}<-NULL
[195:]
<<start>>=
<<initialisiere Auswahl zu den Aufgaben des Kapitels multivariate Graphiken>>
print("Ende der Initialisierung - Kapitel multivariate Graphiken")
[196:]
<<start>>=
print("Start der Initialisierung - Kapitel Modelle - 27.9.97")
[197:]
<<lege Zeitpunkte vom 03.02.97 auf {\tt x} ab>>=
cat("Zeitpunkte vom 03.02.97 auf x ablegen\n")
x<-zeitpunkte.03.02.97
Ein normaler Tag hat eine Länge von 86400 Sekunden.
[198:]
<<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>=
cat("Aktivitaet pro Minute aus Sekundendaten ermitteln\n")
x<-(x%%86400)/60
x<-pmin(1,as.vector(table(cut(x,0:1440))))
[199:]
<<zeige die ersten Werte von {\tt x} an>>=
cat("Anfang von x anzeigen\n")
print("Wie viele Werte von x sollen angezeigt werden (Default=100)?")
print(x[1:c(scan(,0,n=1),min(100,length(x)))[1})
[200:]
<<lege Parameter {\tt p,n,ZZ} f\"ur wiederholte Bernoulli-Experimente fest>>=
cat("Festlegung der Bedingungen fuer wiederholte Bernoulli-Experimente\n")
cat("Legen Sie die Erfolgswahrscheinlichkeit p fest (Default: 0.5): p=?\n")
p<-c(scan(,0,n=1),0.5)[1]
cat("Legen Sie die Anzahl n der Bernoulli-Experimente fest\n")
cat("(Default: 200): n=?\n")
n<-c(scan(,0,n=1),200)[1]
cat("Zufallsstart: Geben Sie eine ganze Zahl zwischen 0 und 1000 ein\n")
cat("(Default: 17): ZZ=?\n")
ZZ<-c(scan(,0,n=1),17)[1]
[201:]
<<starte Bernoulli-Experimente, Bedingungen: {\tt n, p, ZZ}, Ergebnis: {\tt x}>>=
cat("Realisation von wiederholten Bernoulli-Experimenten\n")
set.seed(ZZ)
x<-rbinom(n,1,p)
[202:]
<<plotte Durchschnitte f\"ur die ersten $k$ Elemente von {\tt x} gegen $k$>>=
cat("Plot der Durchschnitte der ersten k Elemente gegen k\n")
h<-cumsum(x)/(1:length(x))
plot(c(1,length(x)),c(max(1,max(h)),min(0,min(h))),
type="n",xlab="k",ylab="Durchschnitte")
lines(1:length(x), h)
[203:]
<<ziehe Stichprobe, zeichne Durchschnittskurven und ermittle Statistiken>>=
cat("Stichprobenziehung\n")
set.seed(ZZ)
x<-matrix(rbinom(n*(w+1),1,p),(w+1),n)
cat("(w+1)-facher Plot der Durchschnitte der ersten k Elemente gegen k\n")
plot(c(1,n),c(max(1,max(x)),0),type="n",xlab="k",ylab="Durchschnitte")
for(i in 1:(w+1)) lines(1:n, cumsum(x[i,])/(1:n))
cat("Berechnung der zusammenfassender Statistiken\n")
print(summary.stats(apply(x,1,sum)/n))
[204:]
<<lege Wiederholungsanzahl {\tt w} fest>>=
cat("Festlegung der Wiederholungsanzahl w\n")
cat("Legen Sie die Anzahl w der Wiederholungen der n Versuche fest\n")
cat("(Default: 20): w=?\n")
w<-c(scan(,0,n=1),20)[1]
[205:]
<<ermittle Anteil der Minuten mit Zugriffe, Ergebnis: {\tt p}>>=
cat("Ermittlung Anteil der Minuten mit Zugriffe\n")
p<-sum(x)/length(x)
cat(paste("Anteil der Minuten mit Zugriffsaktivitaet:",signif(p,3),"\n"))
[206:]
<<ziehe {\tt r} binomialverteilte Zufallszahlen mit {\tt n} und {\tt p}: {\tt x}>>=
cat("Stichprobe aus Binomial-Verteilung\n")
print("Wie gross soll der Parameter n sein (Default: n=1)?")
n<-c(scan(,0,n=1),1)[1]
print("Wie gross soll der Parameter p sein (Default: p=0.5)?")
p<-c(scan(,0,n=1),0.5)[1]
print("Wie viele Zufallszahlen wollen Sie (Default: r=100)?")
r<-c(scan(,0,n=1),100)[1]
print("Zufallsstartgeneratorstart (Default: ZZ=17)?")
ZZ<-c(scan(,0,n=1),17)[1]
set.seed(ZZ)
x<-rbinom(r,n,p)
[207:]
<<erstelle Jitterplot, Boxplot, Stabdiagramm und emp. Vtlsfkt zu {\tt x}>>=
par(mfrow=c(2,2))
<<erstelle Jitterplot zu {\tt x}>>
<<erstelle Boxplot zu {\tt x}>>
<<erstelle Stabdiagramm zu {\tt x}>>
<<erstelle F.dach von {\tt x}>>
par(mfrow=c(1,1))
[208:]
<<berechne und plotte Minuten mit Zugriffen der Stunden von {\tt x}>>=
<<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>
x<-apply(matrix(x,60,24),2,sum)
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>
[209:]
<<aktiviere {\tt binomial.calculator}>>=
cat("Binomial-Kalkulator\n")
binomial.calculator()
Da die geometrische Zufallszahlen mit Hilfe von runif berechnet werden, sollte der Zufallszahlengeneratorstart von 13 verschieden sein. Andernfalls erhält man einen monotonen Jitterplot, bei dem der Start auch auf 13 gesetzt wird.
[210:]
<<ziehe {\tt n} geometrisch verteilte Zufallszahlen mit {\tt p}: {\tt x}>>=
cat("Stichprobe aus geometrischer Verteilung\n")
print("Welches p wuenschen Sie (Default=0.5)? p=?")
p<-c(scan(,0,n=1),.5)[1]
print("Welche Wiederholungsanzahl n wuenschen Sie (Default=100)? n=?")
n<-c(scan(,0,n=1),100)[1]
print("Welchen Zufallsgeneratorstart ZZ wuenschen Sie (Default=17)? ZZ=?")
ZZ<-c(scan(,0,n=1),17)[1]
set.seed(ZZ)
x<-rgeom(n,p)
[211:]
<<plotte {\tt x} als horizontale St\"abe>>=
cat("Plot von x als Staebe\n")
h<-length(x)
plot(c(0,max(x)+1),c(0,h), type="n",xlab="x",ylab="Index")
segments(0,1:h,x,1:h)
[212:]
<<berechne aus {\tt x} Wartezeiten in Minuten: {\tt x}>>=
<<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>
<<ermittle aus {\tt x} Fehlversuche bis Erfolg {\tt ->x}>>
[213:]
<<ermittle aus {\tt x} Fehlversuche bis Erfolg {\tt ->x}>>=
x<-diff((1:length(x))[x==1])-1
[214:]
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>=
<<erstelle Jitterplot, Boxplot, Stabdiagramm und emp. Vtlsfkt zu {\tt x}>>
<<berechne zusammenfassende Statistiken von {\tt x}>>
[215:]
<<aktiviere {\tt geometric.calculator}>>=
cat("geometrischer Kalkulator\n")
geometric.calculator()
[216:]
<<bereite Ged\"achnisexperiment vor und f\"uhre es durch>>=
<<ziehe {\tt n} geometrisch verteilte Zufallszahlen mit {\tt p}: {\tt x}>>
<<erfrage {\tt x.0}>>
par(mfrow=2:1)
<<zeichne Erkennungsplot f\"ur die geometrische Verteilung>>
<<ermittle und verschiebe die Werte von {\tt x} gr\"o{\ss}er {\tt x.0}: {\tt x}>>
print("Plot und Daten nach Modifikation")
<<zeichne Erkennungsplot f\"ur die geometrische Verteilung>>
par(mfrow=c(1,1))
[217:]
<<erfrage {\tt x.0}>>=
print("Wie gross soll x.0 sein (Default: x.0=5)?")
x.0<-c(scan(,0,n=1),5)[1]
[218:]
<<zeichne Erkennungsplot f\"ur die geometrische Verteilung>>=
cat("Erkennungsplot fuer geometrische Verteilung\n")
print("Plot und Daten aufgrund der Stichprobe")
print(geom.p.est(x))
[219:]
<<ermittle und verschiebe die Werte von {\tt x} gr\"o{\ss}er {\tt x.0}: {\tt x}>>=
x_x[x>=x.0] - x.0
[220:]
<<ziehe Stichprobe aus einer Exponentialverteilung mit $\lambda$: {\tt x}>>=
cat("Stichprobenziehung -- Exponentialverteilung\n")
print("Welches lambda wuenschen Sie (Default=1)? lambda=?")
lambda<-c(scan(,0,n=1),1)[1]
print("Welchen Stichprobenumfang n wuenschen Sie (Default=100)? n=?")
n<-c(scan(,0,n=1),100)[1]
print("Welchen Zufallsgeneratorstart ZZ wuenschen Sie (Default=17)? ZZ=?")
ZZ<-c(scan(,0,n=1),17)[1]
set.seed(ZZ)
x<-rexp(n,lambda)
[221:]
<<plotte Stichprobe, berechne Statistiken zu {\tt x} --- kontinuierlich>>=
<<erstelle Jitterplot, Boxplot, Histogramm und emp. Vtlsfkt zu {\tt x}>>
<<berechne zusammenfassende Statistiken von {\tt x}>>
[222:]
<<erstelle Jitterplot, Boxplot, Histogramm und emp. Vtlsfkt zu {\tt x}>>=
par(mfrow=c(2,2))
<<erstelle Jitterplot zu {\tt x}>>
<<erstelle Boxplot zu {\tt x}>>
<<erstelle Histogramm zu {\tt x}>>
<<erstelle F.dach von {\tt x}>>
par(mfrow=c(1,1))
[223:]
<<aktiviere {\tt exponential.calculator}>>=
cat("Exponential-Kalkulator\n")
exponential.calculator()
[224:]
<<erstelle f\"ur {\tt x} Erkennungsplot zur Exponentialverteilung>>=
cat("Exponential-Erkennungsplot\n")
print(identify.exp(x))
[225:]
<<ermittele Belastung anhand zusammenh\"angender Zugriffszeitpunkte>>= interval.est.lambda(x)
[226:]
<<ziehe Stichprobe aus einer Poisson-Verteilung mit $\lambda$: {\tt x}>>=
cat("Stichprobenziehung -- Poisson-Verteilung\n")
print("Welches lambda wuenschen Sie (Default=1)? lambda=?")
lambda<-c(scan(,0,n=1),1)[1]
print("Welchen Stichprobenumfang n wuenschen Sie (Default=100)? n=?")
n<-c(scan(,0,n=1),100)[1]
print("Welchen Zufallsgeneratorstart ZZ wuenschen Sie (Default=17)? ZZ=?")
ZZ<-c(scan(,0,n=1),17)[1]
set.seed(ZZ)
x<-rpois(n,lambda)
[227:]
<<erstelle f\"ur {\tt x} Erkennungsplot zur Poisson-Verteilung>>=
cat("Poisson-Erkennungsplot\n")
print(identify.pois(x))
[228:]
<<aktiviere {\tt poisson.calculator}>>=
cat("Poisson-Kalkulator\n")
poisson.calculator()
[229:]
<<erstelle zu {\tt x} einen QQ-Plot zur Modellpr\"ufung>>=
cat("QQ-Plot\n")
qq.x.model(x)
[230:]
<<Auswahl zu den Aufgaben des Kapitels Modelle>>= auswahl.modelle()
[231:]
<<start>>=
<<initialisiere Auswahl zu den Aufgaben des Kapitels Modelle>>
print("Ende der Initialisierung - Kapitel Modelle")
[232:]
<<start>>=
print("Start der Initialisierung - Kapitel Normalverteilung - 2.10.97")
[233:]
<<aktiviere Experiment zur Approximation von {\em Binom(n,p)} durch NV>>=
cat("Demonstration der Approximation der Binomialverteilung durch\n")
cat("die Normalverteilung\n")
demo.Laplace()
[234:]
<<aktiviere Experiment zum zentralen Grenzwertsatz>>=
cat("Demonstration der Approximation von standardisierten\n")
cat("Stichprobenmitteln durch die Normalverteilung\n")
demo.zgws()
[235:]
<<aktiviere Normalverteilungskalkulator>>=
cat("Aktivierung des Normalverteilungskalkulators\n")
normal.calculator()
[236:]
<<start>>=
print("Ende der Initialisierung - Kapitel Normalverteilung")
[237:]
<<initialisiere Auswahl zu den Aufgaben des Kapitels Ma{\ss}zahlen>>=
auswahl.masszahlen<-function(){
eval(local=sys.parent(),expression=parse(text=
'repeat{
switch(Menu(
c(
"Abbruch/Ende",
"lege Daten auf x ab",
"zeige x an",
"zeige Rangwertreihe von x an",
"berechne Mittelwert",
"berechne Median",
"berechne Extrema",
"berechne Midrange",
"berechne getrimmtes Mittel",
"berechne Trimean",
"berechne Stichprobenvarianz",
"berechne Standardabweichung",
"berechne Inter-Quartilsabstand",
"berechne zusammenfassende Statistiken",
"transformiere mittels Box-Cox-Transformation"),
report=T),
{ break
},{ <<lege Daten auf {\tt x} ab>>
},{ <<zeige x an>>
},{ <<zeige Rangwertreihe von x an>>
},{ <<berechne Mittelwert von {\tt x}>>
},{ <<berechne Median von {\tt x}>>
},{ <<berechne Extrema von {\tt x}>>
},{ <<berechne Midrange von {\tt x}>>
},{ <<berechne getrimmtes Mittel von {\tt x}>>
},{ <<berechne Trimean von {\tt x}>>
},{ <<berechne Stichprobenvarianz von {\tt x}>>
},{ <<berechne Standardabweichung von {\tt x}>>
},{ <<berechne Inter-Quartilsabstand von {\tt x}>>
},{ <<berechne zusammenfassende Statistiken von {\tt x}>>
},{
<<transformiere {\tt x} mittels Box-Cox-Transformation, zeige Statistiken>>
}
)
}'))
}
[238:]
<<lege Daten auf {\tt x} ab>>=
switch(Menu(
c("Abbruch/Ende",
"Zeitdifferenzen vom 03.02.97",
"Zeitdifferenzen vom 17.02.97",
"Datenmengen vom 03.02.97",
"Datenmengen vom 17.02.97",
"Datenmengen/Zeitdifferenzen vom 03.02.97",
"Datenmengen/Zeitdifferenzen vom 17.02.97",
"Merkmal aus Studentenumfrage 1995",
"Merkmal aus Studentenumfrage 1996",
"Merkmal aus Studentenumfrage 1997"
)
),
"",
x<-dzeitpunkte.03.02.97,
x<-dzeitpunkte.17.02.97,
x<-mengen.03.02.97,
x<-mengen.17.02.97,
x<-mengen.03.02.97/dzeitpunkte.03.02.97,
x<-mengen.17.02.97/dzeitpunkte.17.02.97,
x<-select.spalte(frabo95),
x<-select.spalte(frabo96),
x<-select.spalte(frabo97)
)
[239:]
<<zeige x an>>=
cat("Daten x: \n")
print(x)
outin()
[240:]
<<zeige Rangwertreihe von x an>>=
cat("Rangwertreihe von x: \n")
print(sort(x))
outin()
[241:]
<<initialisiere Auswahl zu den Aufgaben des Kapitels Graphiken>>=
auswahl.graphiken<-function(){
eval(local=sys.parent(),expression=parse(text=
'repeat{
switch(Menu(
c("Abbruch/Ende",
"lege Daten auf {\tt x} ab",
"bilde Ausschnitt der Daten",
"erstelle graphische 5-Zahlen-Zusammenfassung",
"erstelle Boxplot",
"erstelle Jitterplot",
"erstelle Stabdiagramm",
"erstelle Haeufigkeitstabelle",
"erstelle Stem-and-Leaf-Plot",
"erstelle Histogramm",
"erstelle Histogramm mit manuellen Grenzen",
"erstelle Dichtespur",
"aktiviere interaktives Dichtespur-Sektion",
"erstelle F.dach",
"erstelle F.dach mit manuellen Grenzen",
"befrage F.dach graphisch",
"transformiere mittels Box-Cox-Transformation"),
report=T ),
{ break
},{ <<lege Daten f\"ur Kapitel Graphiken auf {\tt x} ab>>
},{ <<bilde Ausschnitt der Daten {\tt x}>>
},{ <<erstelle graphische 5-Zahlen-Zusammenfassung von {\tt x}>>
},{ <<erstelle Boxplot zu {\tt x}>>
},{ <<erstelle Jitterplot zu {\tt x}>>
},{ <<erstelle Stabdiagramm zu {\tt x}>>
},{ <<erstelle H\"aufigkeitstabelle zu {\tt x}>>
outin()
},{ <<erstelle Stem-and-Leaf-Plot zu {\tt x}>>
outin()
},{ <<erstelle Histogramm zu {\tt x}>>
},{ <<erstelle Histogramm von {\tt x} mit manueller Wahl der Grenzen>>
},{ <<erstelle Dichtespur zu {\tt x}>>
},{ <<aktiviere interaktives Dichtespur-Sektion zu {\tt x}>>
},{ <<erstelle F.dach von {\tt x}>>
},{
<<erstelle emp. Verteilungsfunktion mit manueller Wahl der Grenzen zu {\tt x}>>
},{ <<befrage F.dach zu {\tt x} graphisch>>
},{ <<erstelle Box-Cox-Transformation f\"ur {\tt x}>>
} )
}'))
}
[242:]
<<lege Daten f\"ur Kapitel Graphiken auf {\tt x} ab>>=
switch(Menu(
c("Abbruch/Ende",
"Zeitdifferenzen vom 03.02.97",
"Zeitdifferenzen vom 17.02.97",
"logarithmierte Datenmengen vom 03.02.97",
"logarithmierte Datenmengen vom 17.02.97",
"Datenmengen vom 03.02.97",
"Datenmengen vom 17.02.97",
"Datenmengen/Zeitdifferenzen vom 03.02.97",
"Datenmengen/Zeitdifferenzen vom 17.02.97",
"Merkmal aus Studentenumfrage 1995",
"Merkmal aus Studentenumfrage 1996",
"Merkmal aus Studentenumfrage 1997"
)
),
"",
x<-dzeitpunkte.03.02.97,
x<-dzeitpunkte.17.02.97,
x<-log(mengen.03.02.97),
x<-log(mengen.17.02.97),
x<-mengen.03.02.97,
x<-mengen.17.02.97,
x<-mengen.03.02.97/dzeitpunkte.03.02.97,
x<-mengen.17.02.97/dzeitpunkte.17.02.97,
x<-select.spalte(frabo95),
x<-select.spalte(frabo96),
x<-select.spalte(frabo97)
)
[243:]
<<initialisiere Auswahl zu den Aufgaben des Kapitels multivariate Graphiken>>=
a<-auswahl.mgraphiken<-function(){
eval(local=sys.parent(),expression=parse(text=
'repeat{
switch(Menu(
c(
"Abbruch/Ende",
"lege Datensaetze zur Bearbeitung auf xy ab",
"modifiziere Datensaetze xy",
"lege einen Datensatz von xy auf x ab",
"ermittle einige Ma{\ss}zahlen zu xy",
"erstelle Boxplot zu xy",
"erstelle Jitterplot zu xy",
"zeichne Histogramme zu xy",
"zeichne Dichtespuren zu xy",
"zeichne F.dach zu xy",
"zeichne zu xy F.dach und f.dach",
"erstelle Scatterplot zu den ersten beiden Elementen von xy",
"erstelle Scatterplot zu xy und zeichne konvexe Huellen",
"erstelle zu xy[1:2] einen QQ-Plot",
"erstelle Draftsmans Display zu xy",
"erstelle zum paarweisen Vergleich von xy QQ-Plots",
"mache mit xy Bootstrap-Experimente",
"Kontingenztabellenfunktion mit xy"
),
report=T ),
{ break
},{ <<lege Daten f\"ur Kapitel multivariate Graphiken auf {\tt xy} ab>>
},{ <<modifiziere Daten {\tt xy}>>
},{ <<lege Datensatz von {\tt xy} auf {\tt x} ab>>
},{ <<ermittle einige Ma{\ss}zahlen zu {\tt xy}>>
out.in()
},{ <<erstelle Boxplot zu {\tt xy}>>
},{ <<zeichne Jitterplot zu {\tt xy}>>
},{ <<zeichne Histogramme zu {\tt xy}>>
},{ <<zeichne Dichtespuren zu {\tt xy}>>
},{ <<zeichne {\tt F.dach} zu {\tt xy}>>
},{ <<zeichne zu {\tt xy} F.dach und f.dach>>
},{ <<erstelle Scatterplot zu den ersten beiden Elementen von {\tt xy}>>
},{ <<erstelle Scatterplot zu {\tt xy} und zeichne konvexe H\"ullen>>
},{ <<erstelle zu den ersten beiden Elementen von {\tt xy} einen QQ-Plot>>
},{ <<erstelle Draftsman's Display zu {\tt xy}>>
},{ <<erstelle zum paarweisen Vergleich der Datens\"atze von {\tt xy} QQ-Plots>>
},{ <<mache mit {\tt xy} Bootstrap-Experimente>>
},{ <<aktiviere Kontingenztabellenfunktion mit {\tt xy}>>
} )
}'))
}
[244:]
<<modifiziere Daten {\tt xy}>>=
switch(Menu(
c(
"Abbruch/Ende",
"Komponente entfernen",
"Ausschnitte der Komponenten bilden",
"Werte einer Komponente begrenzen",
"Box-Cox-Transformationen durchfuehren",
"xy in anz gleich umfangreiche Klassen teilen",
"xy[1] gemaess xy[2] in anz Klassen teilen")
),
{ " "
},{ <<entferne eine Komponenten aus {\tt xy}>>
},{ <<bilde Ausschnitte der Komponenten von {\tt xy}>>
},{ <<begrenze Werte von {\tt xy}>>
},{ <<transformiere Elemente von {\tt xy} mittels Box-Cox-Transformation>>
},{ <<ordne Daten von {\tt xy} in {\tt anz} gleich gro{\ss}e Klassen ein: {\tt xy}>>
},{ <<ordne {\tt xy[1] }gem\"a{\ss} {\tt xy[2] }in {\tt anz} Klassen ein: {\tt xy}>>
}
)
[245:]
<<lege Daten f\"ur Kapitel multivariate Graphiken auf {\tt xy} ab>>=
cat("Sollen die Daten von xy geloescht werden? (j/n)\n")
r<-c(scan(,"",n=1),"n")[1]
r<-substring(r,1,1)
if(exists("xy")){ if(r=="j" | r=="J") xy<-NULL } else xy <- NULL
repeat{
cat("Welche Datensaetze sollen an xy angefuegt werden?\n")
switch(Menu(
c("Abbruch/Ende",
"Zeitdifferenzen vom 03.02.97",
"Zeitdifferenzen vom 17.02.97",
"Datenmengen vom 03.02.97",
"Datenmengen vom 17.02.97",
"Zeiten vom 03.02.97",
"Zeiten vom 17.02.97",
"Regen-Getreideertraege",
"Auto1",
"Auto2",
"Name einer Splus-Variablen",
"eigene Daten, selbst einzugeben",
"Merkmal aus Studentenumfrage 1995",
"Merkmal aus Studentenumfrage 1996",
"Merkmal aus Studentenumfrage 1997"
)
),
break,
xy<-c(xy,dz.03.02=list(dzeitpunkte.03.02.97)),
xy<-c(xy,dz.17.02=list(dzeitpunkte.17.02.97)),
xy<-c(xy,m.03.02=list(mengen.03.02.97)),
xy<-c(xy,m.17.02=list(mengen.17.02.97)),
xy<-c(xy,z.03.02=list(zeitpunkte.03.02.97)),
xy<-c(xy,z.17.02=list(zeitpunkte.17.02.97)),
xy<-c(xy,list(corn.rain,corn.yield)),
xy<-c(xy,list(car.time,car.miles,car.gals)),
xy<-c(xy,list(auto.stats[,1],
auto.stats[,2],
auto.stats[,8],
auto.stats[,9],
auto.stats[,10])),
{cat("Bitte S-Plus-Namen eingeben\n")
xy<-c(xy,list(eval(parse(text=scan(,"",n=1)))))},
{cat("Bitte Werte einzeln eingeben\n")
xy<-c(xy,list(scan(,0))) },
xy<-select.and.split(frabo95),
xy<-select.and.split(frabo96),
xy<-select.and.split(frabo97)
)
}
[246:]
<<ermittle einige Ma{\ss}zahlen zu {\tt xy}>>=
switch(Menu(
c(
"Abbruch/Ende",
"zusammenfassende Statistiken",
"Anzahlen der einzelnen Datensaetze",
"Korrelationskoeffizienten")
),
{ break
},{ <<berechne zusammenfassende Statistiken zu {\tt xy}>>
},{ <<errechne Anzahlen der Stichproben von {\tt xy}>>
},{
<<berechne Korrelationskoeffizienten der ersten beiden Elementen von {\tt xy}>>
}
)
[247:]
<<aktiviere Kontingenztabellenfunktion mit {\tt xy}>>=
cat("Bearbeitung von Kontingenztabellen\n")
cat("Handelt es sich bei den Daten xy bereits um eine\n")
cat("Kontingenztabelle? (j=ja)\n")
kt.work(xy,is.xy.kt=("j"==readline()))
[248:]
<<initialisiere Auswahl zu den Aufgaben des Kapitels Modelle>>=
a<-auswahl.modelle<-function(){
eval(local=sys.parent(),expression=parse(text=
'repeat{
switch(Menu(
c( "Abbruch",
"lege Datensaetze zur Bearbeitung auf x ab",
"erzeuge Stichprobe x",
"modifiziere Datensaetze x",
"zeige x an, berechne Statistiken, stelle x dar",
"aktiviere Verteilungskalkulator",
"erstelle Verteilungs-Erkennungsplots",
"erstelle QQ-Plots zur Modellueberpruefung",
"erstelle Durchschnittskurven",
"ermittle Belastung im Zeitablauf"
),
report=T
),
{ break
},{ <<lege Datensatz auf {\tt x} ab>>
},{ <<lege Stichprobe auf {\tt x} ab>>
},{ <<modifiziere Daten {\tt x}>>
},{ <<stelle {\tt x} dar, zeige {\tt x} an, berechne Statistiken>>
},{ <<aktiviere Kalkulator>>
},{ <<erstelle Verteilungs-Erkennungsplot zu {\tt x}>>
},{ <<erstelle zu {\tt x} einen QQ-Plot zur Modellpr\"ufung>>
},{ <<plotte Durchschnitte f\"ur die ersten $k$ Elemente von {\tt x} gegen $k$>>
},{ <<ermittele Belastung anhand zusammenh\"angender Zugriffszeitpunkte>>
}
)
}'))
}
[249:]
<<lege Datensatz auf {\tt x} ab>>=
cat("Datensatz auswaehlen!\n")
switch(Menu(c(
"keine neue Belegung von x",
"Zeitdifferenzen vom 03.02.97",
"Zeitdifferenzen vom 17.02.97",
"Datenmengen vom 03.02.97",
"Datenmengen vom 17.02.97",
"Zeiten vom 03.02.97",
"Zeiten vom 17.02.97",
"Name einer Splus-Variablen",
"eigene Daten, selbst einzugeben")
),
x<-x,
x<-c(dz.03.02=dzeitpunkte.03.02.97),
x<-c(dz.17.02=dzeitpunkte.17.02.97),
x<-c(m.03.02=mengen.03.02.97),
x<-c(m.17.02=mengen.17.02.97),
x<-c(z.03.02=zeitpunkte.03.02.97),
x<-c(z.17.02=zeitpunkte.17.02.97),
{cat("Bitte S-Plus-Namen eingeben\n")
x<-c(eval(parse(text=scan(,"",n=1))))},
{cat("Bitte Werte einzeln eingeben\n")
x<-c(scan(,0))}
)
[250:]
<<lege Stichprobe auf {\tt x} ab>>=
switch(Menu( c( "keine neue Belegung von x",
"Binomial-Verteilung",
"geometrische Verteilung",
"Exponentialverteilung",
"Poisson-Verteilung" )
),{
x<-x
},{
<<ziehe {\tt r} binomialverteilte Zufallszahlen mit {\tt n} und {\tt p}: {\tt x}>>
},{ <<ziehe {\tt n} geometrisch verteilte Zufallszahlen mit {\tt p}: {\tt x}>>
},{ <<ziehe Stichprobe aus einer Exponentialverteilung mit $\lambda$: {\tt x}>>
},{ <<ziehe Stichprobe aus einer Poisson-Verteilung mit $\lambda$: {\tt x}>>
}
)
[251:]
<<modifiziere Daten {\tt x}>>=
switch(Menu(c("Abbruch: keine Modifikation von x",
"Ausschnitt aus x bilden",
"Differenzen von x auf x ablegen",
"Box-Cox-Transformationen durchfuehren",
"Minuten mit Zugriff bei Sekundendaten ermitteln",
"Fehlversuche bis Erfolg ermitteln",
"Wartezeiten x jenseits x.0 auf x ablegen" )
),{ x<-x
},{ <<bilde Ausschnitt der Daten {\tt x}>>
},{ if(all(x==sort(x))) x<-diff(x) else print("x fuer diff ungeeignet!")
},{
<<transformiere {\tt x} mittels Box-Cox-Transformation, zeige Statistiken>>
},{ <<ermittle aus Sekundendaten {\tt x} Minuten mit Aktivit\"at {\tt ->x}>>
},{ <<ermittle aus {\tt x} Fehlversuche bis Erfolg {\tt ->x}>>
},{ <<ermittle und verschiebe die Werte von {\tt x} gr\"o{\ss}er {\tt x.0}: {\tt x}>>
}
)
[252:]
<<stelle {\tt x} dar, zeige {\tt x} an, berechne Statistiken>>=
switch(Menu(c("Abbruch: keine Darstellung",
"Daten anzeigen",
"Statistiken berechnen",
"horizontale Staebe zeichnen",
"Darstellung von Beobachtungen, diskret",
"Darstellung von Beobachtungen, kontinuierlich" )
),{ x<-x
},{ <<zeige die ersten Werte von {\tt x} an>>
outin()
},{ <<berechne zusammenfassende Statistiken von {\tt x}>>
outin()
},{ <<plotte {\tt x} als horizontale St\"abe>>
},{ <<plotte Stichprobe, berechne Statistiken zu {\tt x} --- diskret>>
},{ <<plotte Stichprobe, berechne Statistiken zu {\tt x} --- kontinuierlich>>
}
)
[253:]
<<aktiviere Kalkulator>>=
switch(Menu(c("Abbruch: keinen Kalkulator aktivieren",
"Binomial-Verteilung",
"geometrische Verteilung",
"Exponentialverteilung",
"Poisson-Verteilung",
"Normal-Verteilung"
)
),{ x<-x
},{ <<aktiviere {\tt binomial.calculator}>>
},{ <<aktiviere {\tt geometric.calculator}>>
},{ <<aktiviere {\tt exponential.calculator}>>
},{ <<aktiviere {\tt poisson.calculator}>>
},{ <<aktiviere Normalverteilungskalkulator>>
}
)
[254:]
<<erstelle Verteilungs-Erkennungsplot zu {\tt x}>>=
switch(Menu(c("Abbruch: keinen Erkennungsplot zeichnen",
"geometrische Verteilung",
"Exponentialverteilung",
"Poisson-Verteilung" )
),{ x<-x
},{ <<zeichne Erkennungsplot f\"ur die geometrische Verteilung>>
},{ <<erstelle f\"ur {\tt x} Erkennungsplot zur Exponentialverteilung>>
},{ <<erstelle f\"ur {\tt x} Erkennungsplot zur Poisson-Verteilung>>
}
)
[255:]
<<start>>=
menu.jump<-look.act.points.up()
cat("------------------------------\n")
cat(" Abk.: lange Bezeichnung:\n")
cat("------------------------------\n")
activate.jump(menu.jump)
In diesem File werden allgemein notwendige Funktionen definiert. Ihre Splus-Versionen gehören in das Verzeichnis _Revbook . Es reicht, den File revobj.sch zu sourcen, der durch make obj erstellt wird. Jedoch werden nicht mehr benötigte Objekte des Verzeichnisses _Revbook nicht gelöscht.
[256:]
<<*>>=
print("Funktionen zum Revbook definieren")
attach("_Revbook",pos=1)
<<lese Zeitpunkte vom 03.02.1997 ein>>
<<lese Mengen vom 03.02.1997 ein>>
<<lese Zeitpunkte vom 17.02.1997 ein>>
<<lese Mengen vom 17.02.1997 ein>>
<<lese Daten zu den Aufgaben ein>>
<<lese alte Frageb\"ogen ein>>
<<lese neuen Fragebogen ein>>
<<lese Daten zum Skript ein>>
<<initialisiere einige Funktionen>>
synchronize()
detach("_Revbook")
attach("_Revbook")
print("Definition erfolgreich beendet - 02.6.97")
[257:]
<<lese Zeitpunkte vom 03.02.1997 ein>>=
zeitpunkte.03.02.97<-
c(173877, 178739, 203188, 203742, 203906, 205573, 205640, 209310, 209949,
210299, 210382, 210906, 213142, 213545, 213785, 213791, 213922, 213924,
213925, 213969, 214320, 214935, 214949, 214961, 214969, 215075, 215387,
216570, 217267, 218288, 219059, 219105, 219258, 219287, 219959, 220475,
220591, 220876, 220949, 220964, 221084, 221098, 221588, 222376, 222976,
223093, 225865, 226062, 226068, 226079, 226081, 226082, 226101, 226122,
226625, 227999, 228132, 228469, 228789, 230543, 230662, 230706, 231139,
231857, 232015, 232061, 232773, 232831, 232970, 233010, 233175, 233519,
234897, 235485, 235940, 236810, 239219, 240240, 240787, 240797, 240798,
240806, 240846, 240913, 241079, 242224, 243002, 243262, 244777, 245317,
246598, 248563, 248770, 250683, 253013, 253187, 253760, 255462, 255511,
255618, 255908, 256270, 257651)
dzeitpunkte.03.02.97<-c(zeitpunkte.03.02.97[1]%%(3600*24),
diff(zeitpunkte.03.02.97))
[258:]
<<lese Mengen vom 03.02.1997 ein>>=
mengen.03.02.97<-
c(14101,105563, 1866, 11505, 216, 19391, 35340, 10746, 205246, 8192,
124667, 25467, 23819, 49226, 2450, 5520, 1646, 2471, 12301, 3431,
1646, 15560, 9287, 5105, 7070, 32116, 1363, 3190, 1548, 12851,
1395, 1001, 16418, 3431, 20106, 35024, 5113, 10395,1589837, 57965,
200133, 98082, 57314, 5113, 1007, 16418, 45354, 18606, 3705, 711,
16418, 1275, 708, 18868, 28354, 92723, 14101, 19533, 25741, 20445,
12671,150325, 4107, 20867, 1434,305118, 23719, 13756, 14101, 345,
25300, 6515, 3406,109591, 14640,197070, 216, 1434, 15747, 1434,
12301, 12451, 15251, 8130, 8687, 19391, 800, 2587, 23719, 345,
836, 4107,1594950, 15871, 10746,140075, 1650, 129, 15688, 561,
122754, 216, 14640)
[259:]
<<lese Zeitpunkte vom 17.02.1997 ein>>=
zeitpunkte.17.02.97<-
c(1382822, 1384215, 1384346, 1384788, 1387047, 1388561, 1388822, 1394377,
1395438, 1403951, 1406572, 1407042, 1412097, 1414932, 1415151, 1415161,
1416757, 1416849, 1418675, 1419331, 1419391, 1421413, 1422235, 1422257,
1422303, 1422368, 1422608, 1422906, 1423487, 1423547, 1424076, 1424318,
1425637, 1425819, 1427253, 1427281, 1427302, 1427307, 1427326, 1427682,
1427765, 1428085, 1428687, 1429426, 1430373, 1430374, 1430375, 1430443,
1430530, 1430958, 1430977, 1430992, 1430995, 1431731, 1432460, 1432784,
1434197, 1434355, 1434378, 1434676, 1435392, 1435413, 1436708, 1439140,
1440101, 1440637, 1441413, 1441456, 1442088, 1442378, 1445136, 1447472,
1448909, 1449247, 1449544, 1452266, 1454031, 1454319, 1454503, 1456332,
1459823, 1459830, 1460204, 1461119, 1461847, 1461906, 1466870)
dzeitpunkte.17.02.97<-c(zeitpunkte.17.02.97[1]%%(3600*24),
diff(zeitpunkte.17.02.97))
[260:]
<<lese Mengen vom 17.02.1997 ein>>= mengen.17.02.97<- c(20760, 2034, 65218, 7526, 6944, 3481, 14115, 1448, 9985, 14115, 1448, 14115, 30273, 1448, 1448, 13012, 18688, 7572, 1551, 18688, 34890, 9723, 2285, 7283, 1448, 1969, 6739,129898, 38348, 14115, 14115, 52438, 38517, 1448, 29969, 10749, 3287, 324, 29140, 8346, 14115, 32836, 14115, 16418, 4024, 445, 10533, 6021, 41378, 1448, 2910, 4051, 29140, 19473, 8346, 345, 27785, 8564, 4425,478920, 30533, 16418, 29083, 14115, 868, 27852, 19473, 12322, 4273,207117, 1448, 12515, 1001, 5519, 87888, 16721, 33964, 22307, 9078, 78540, 14115, 4262, 11289, 18688, 1448, 870, 36422)
[261:]
<<lese Daten zu den Aufgaben ein>>=
# Kuckuckseier
a13<-list(
.1*c(220,239,209,238,250,240,217,238,228,231,231,235,230,230),
.1*c(218,230,233,224,224,230,230,230,239,223,220,226,220,221,211,230),
.1*c(198,221,215,209,220,210,223,210,203,209,220,200,208,212,210))
# SO4 1976
a10<-c( 4.8,7.4,3.7,2.7,3.8,8.4,1.6,2.5,7.6,1.6,1.5,1.4,5.8,4.0,5.1,5.1,1.5,
2.8,3.0,0.7,2.1,1.9, 1.6,5.5,1.6,5.8,1.4,1.6,2.2 )
# SO4 1976, 1977, 1978
a11<-list(a10,
c( 6.50,7.60,4.20,2.70,3.70,9.10,2.60,2.70,9.10,2.40,1.30,1.60,6.20,
3.90,5.70,5.80,1.50,1.70,1.90,1.80,1.90,1.90,1.50,5.90,1.60,6.90,
1.00,1.40,2.30),
c( 4.6,6.8,3.3,2.3,3.6,8.8,1.8,2.8,9.6,2.6,1.9,1.8,5.9,4.9,5.4,5.0,
1.4,1.9,1.5,1.5,1.3,1.5,1.7,5.7,1.4,5.9,0.6,1.0,2.2))
# Datensatz zu den norwegischen Seen
norwegen<-
list("1976" = structure(.Data = c(432,497,458,472,453,496,531,542,487,
587,627,667,538,560,493,597,623,615,482,542,531,599,488,
485,597,605,643,629,564,480,740,370,270,380,840,160,250,
760,160,150,140,580,400,510,510,150,280,300,70,210,190,
160,550,160,580,140,160,220,29000,29000,16000,18000,17000,
38000,5000,32000,13000,9000,1000,2000,5000,3000,7000,6000,
5000,10000,10000,4000,2000,1000,14000,9000,6000,5000,3000,
4000,4000,52,203,66,59,51,222,53,69,222,78,115,247,210,
186,145,219,156,200,44,32,69,69,36,170,83,291,144,173,
118),.Dim = c(29,4)),"1977" = structure(.Data = c(423,474,455,481,
470,535,514,515,476,595,628,644,532,610,494,602,634,623,
477,482,577,610,499,465,582,597,637,679,570,650,760,420,
270,370,910,260,270,910,240,130,160,620,390,570,580,150,
170,190,180,190,190,150,590,160,690,100,140,230,57000,
41000,39000,17000,12000,59000,10000,13000,13000,12000,2000,
3000,12000,5000,11000,13000,6000,3000,15000,36000,9000,4000,
13000,14000,19000,10000,8000,4000,4000,62,195,52,50,46,288,
66,62,228,104,97,114,220,224,156,228,153,96,36,55,57,76,
22,165,91,279,111,239,93),.Dim = c(29,4)),"1978" = structure(
.Data = c(440,498,457,483,464,554,491,523,487,559,617,628,
533,557,491,571,620,607,509,534,560,599,486,477,590,578,
640,648,577,460,680,330,230,360,880,180,280,960,260,190,
180,590,490,540,500,140,190,150,150,130,150,170,570,140,
590,60,100,220,29500,18000,20000,6000,17000,35000,6000,13000,
12500,18500,1500,1000,4500,16500,8000,5000,2000,1500,10000,
6000,2000,1000,16500,15000,6500,7000,2000,8000,2500,55,195,
44,43,49,267,47,66,230,105,114,118,194,225,144,206,186,
204,41,58,66,80,33,165,96,264,70,147,116),.Dim = c(29,4)),
"1981" = structure(.Data = c(449,521,469,490,454,575,543,519,
490,602,625,667,521,598,493,567,629,568,545,554,555,613,
492,484,617,575,598,672,529,360,560,290,210,380,870,150,
290,760,200,170,180,540,430,430,420,160,180,170,150,160,
170,190,480,180,580,200,200,210,22000,12000,11000,7000,
20000,37000,5000,16000,12000,6000,1000,1000,5000,6000,7000,
5000,4000,20000,10000,5000,1000,1000,13000,16000,4000,5000,
1000,3000,1000,47,164,51,39,45,252,67,66,187,78,104,234,
179,218,126,185,154,268,32,48,64,66,25,130,89,124,116,
267,79),.Dim = c(29,4)))
norwegen<-lapply(norwegen,"*",0.01)
# Stahlhaerte in Rockwell-Einheiten
a15<-c(58,49,58,57,50,60,64,65,64,59,65,65,45,54,52,59,65,57,63,54,
65,60,61,47,60,52,63,61,54,63,62,56,56,65,56,64,65,55,59,65,
64,49,65,50,65,61,64,61,59,63,58,57,65,60,55,64,65,59,62,65,
64,54,56,58,40,85,53,61,56,65,58,58,55,52,65,60,65,63,64,63,
60,61,61,65,56,62,65,54,64,63,57,64,62,58,60,52,53,62,56,65)
a17<-c(4,1,18,3,4)
a18<-c(11,5,6,9,3,8)
# 50 Ausspielungen des Lottospiels 6 aus 49
a20<-t(matrix(
c(45,33,31,11,34, 5,,25,48,17,38, 2, 3,,13,47,46,35,26,33,,23,15, 9, 5,38,20,,
17,41,31,33,38, 1,,37,48,11,35,26,30,,26,22, 7,32,10,36,, 3,49,31,18,47,27,,
44,48,32, 6,43,25,,13,25,39,11,22, 7,,28, 5, 3,17,13,29,,10,11,46,19,16,45,,
30,38,34,17, 6,42,,44,25,33,10,18,21,, 2,18,11, 1,33, 9,,19,26,41,24,23,21,,
49,45,22,19,36,33,,45,24,43,29,13, 4,,12,36,23,39,15,48,,33,16,39,34, 3,23,,
8,13,26, 3,15,42,,15,10,40,16,48,14,,10,20,33,18,19,42,,43,11,18,26,39,45,,
33,10, 6,29,23,16,, 9,15,35,34,47,11,,44, 9,34,26,24,47,,48,39,34,38,28,29,,
28,49,15,39,41,24,,14, 7,11,12,36,15,,13, 4,45,37, 8,49,,17,15, 7,22,49,14,,
32,33, 3,24,26,28,,37,15,26, 1,32,21,,42, 9,34,30,40,13,,46, 6,14,36, 1,27,,
45,26,37,36,40,49,,48,38,13,30,44,41,, 7,34,24,43,21,48,,46, 4,31, 6, 1,29,,
25,30,36,18, 7,11,,47,39,48,11,35,38,,36,33,40, 7,43,13,, 7,48,23, 4,18, 5,,
22,12,17,39, 3,14,,43,21, 4, 1,47, 5,,22, 2,13,43,15,16,,16,46, 5,10, 2, 4,,
23,12,26,44,18, 6,,21, 9,29,44,20,17) ,6,50))
# verkaufte Stueckzahlen im letzten Monat
a21<-c(10,8,14,22,7,10,11,14,15,9,20,12,19,11,16,10,17,8,24,15,11,22,11,14,19)
# Haeufigkeit der Zahlen beim Lotto 6 aus 49
a22<-c(223,227,225,207,213,224,211,203,229,213,214,216,175,216,213,215,228,211,
233,218,248,226,219,195,220,229,226,195,210,214,231,249,234,198,215,224,
219,249,223,221,216,228,216,212,218,228,210,238,242)
names(a22)<-as.character(1:49)
# Warten auf das erste Tor bei Fussballspielen
a23<-c(40,65,11,43,34,41,3,1,43,9,21,4,12,41,9,46,14,30,41,7,31,43,25,20,16)
# Betriebe und Flaeche
a24<-matrix(c(488196,385680,335489,301493,164578, 26051, 7502,
528.4,1281.2,2428.2,4243.3,4839.1,1719.6,2978.3),7,2)
# Todesjahr und Alter
a27<-list(1800+c(27,84,95,108,114,118,124,128,136,141,164,165,177),
c(13,83,34,1,11,16,68,13,77,74,87,65,83))
# Steuerkriminalitaet
a28<-matrix(c(2,26,7,,13,11,6,,9,15,5,,9,9,3),3,4)
# PS und SH
a31<-list(c(40,45,47,45,45,60,55,48,60,50,75,60,53,75,75,50,55,60,
50,55,53,72,60,64,75,64,75,60,88,68,75,105,75,102,120),
c(41,52,56,67,72,69,73,73,65,78,65,72,78,73,70,70,81,82,
82,73,87,91,94,92,86,86,88,88,88,94,113,96,110,109,130))
# Personen pro Zeitspanne
a34<-c(65,137,140,85,48,18,7)
# Kinobesuche
a36<-list(0:6,
c(6,8,8,11,14,11,2),
c(5,7,12,12,12,7,5))
# radioaktiver Zerfall
a39<-list(0:14,
c(57,203,383,525,532,408,273,139,45,27,10,4,0,1,1))
# Kriege
a41<-list(0:4,c(223,142,48,15,4))
# Verpackungsmaschinen - Tueten
a43<-matrix(c(5,15,30,40,10,,36,60,56,32,16),5,2)
# Wahrscheinlichkeitsfunktion 2-Dim.
a89<-0.01*matrix(c(2,6,7,7,,5,6,6,9,,10,8,6,5,,12,7,2,2),4,4)
[262:]
<<lese alte Frageb\"ogen ein>>=
"frabo95"<-
structure(.Data = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,
36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,
54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,
72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,
90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,
106,107,108,109,110,111,112,113,114,115,116,117,118,119,
120,121,122,123,124,125,126,127,128,129,130,131,132,133,
134,135,136,137,138,139,140,141,142,143,144,145,146,147,
148,149,150,151,152,153,154,155,156,157,158,159,160,161,
162,163,164,165,166,167,168,169,170,171,172,173,174,175,
176,177,178,179,180,181,182,183,184,185,186,187,188,189,
190,191,192,193,194,195,196,197,198,199,200,201,202,203,
204,205,206,207,208,209,210,211,212,213,214,215,216,217,
218,219,220,221,222,223,224,225,226,227,228,229,230,231,
232,233,234,235,236,237,238,239,240,241,242,243,244,245,
246,247,248,249,250,251,1,2,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,
1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,
1,1,1,1,1,2,1,1,1,1,3,1,1,1,1,2,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,2,1,1,1,1,1,3,1,1,1,1,1,1,1,1,2,
1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,
2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,
2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,0,
0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,
1,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,-1,0,0,0,0,0,0,
1,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,
1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,
0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,
0,0,0,0,0,0,0,0,20,21,21,21,22,21,21,21,27,21,22,21,
23,20,22,21,23,21,22,22,22,20,20,20,20,20,22,19,19,23,
24,22,22,23,21,22,23,19,23,22,20,23,23,22,20,20,22,24,
23,22,24,19,24,22,20,21,22,21,22,20,21,20,19,19,24,19,
22,24,19,19,20,21,24,24,19,19,21,21,19,21,19,22,26,-1,
24,19,19,20,23,22,19,22,24,20,20,21,19,22,21,20,21,22,
20,20,19,20,20,19,20,20,19,20,23,22,18,22,22,24,20,19,
20,19,21,20,21,19,22,20,22,21,22,19,22,20,23,20,22,22,
20,22,21,20,23,20,19,21,20,19,23,25,21,23,19,22,23,21,
20,20,23,23,22,22,23,22,21,19,22,21,21,21,21,20,21,20,
20,20,23,23,20,21,21,20,23,22,21,20,20,22,30,20,21,21,
22,26,21,26,27,23,21,24,21,19,19,22,21,21,22,24,21,23,
22,21,22,21,27,25,21,22,20,19,25,21,22,20,19,21,20,23,
23,21,19,21,23,21,22,18,20,20,21,23,22,20,23,21,20,28,
22,24,28,27,20,165,176,191,181,175,169,191,163,189,170,
185,164,175,186,187,185,198,174,186,180,192,185,181,189,
182,182,175,172,165,184,184,180,180,164,175,176,154,175,
167,165,190,169,180,172,182,180,182,186,188,190,172,170,
183,185,191,186,190,165,164,163,183,178,170,181,168,179,
168,183,160,165,185,176,198,193,165,160,168,175,-1,174,
175,162,180,184,194,176,189,185,193,192,181,169,178,154,
165,178,178,182,182,189,194,162,175,180,184,180,163,179,
185,190,170,170,183,183,172,180,183,180,180,180,185,190,
175,192,169,184,191,187,182,195,178,178,187,195,179,181,
198,187,177,176,175,184,184,176,194,170,165,179,192,188,
170,172,180,170,183,184,-1,180,179,180,184,182,193,181,
172,167,193,183,186,167,172,193,195,173,179,162,195,178,
178,177,182,203,178,180,177,185,180,178,180,187,197,188,
184,184,188,186,189,-1,185,187,187,176,174,163,176,187,
187,162,168,196,188,184,175,184,174,185,183,196,168,174,
163,173,170,182,183,176,168,170,185,177,192,171,180,191,
170,182,179,165,174,165,175,174,185,186,195,184,168,190,
194,166,190,60,68,75,62,70,56,81,54,84,59,85,47,59,73,
80,80,71,60,84,65,85,73,72,95,67,76,70,52,50,82,74,75,
82,62,62,76,46,58,55,63,78,47,65,60,65,63,90,65,85,68,
70,53,77,78,73,85,90,60,55,52,70,72,54,67,63,80,55,83,
48,53,80,70,90,83,54,58,60,65,-1,65,55,48,82,72,92,58,
88,75,80,88,84,60,72,-1,55,70,79,73,75,84,89,50,55,62,
80,80,60,78,78,76,63,62,79,85,60,80,77,78,81,72,79,80,
67,78,57,100,97,86,68,85,75,64,70,88,72,65,96,70,76,71,
66,82,87,81,79,55,60,60,95,98,67,64,78,63,85,84,-1,90,
73,70,85,83,92,82,70,52,81,76,105,58,58,80,80,67,71,55,
89,78,89,67,80,97,64,68,73,72,70,69,100,112,70,78,75,
88,80,80,80,-1,103,78,84,64,72,75,61,73,75,57,60,68,78,
77,87,82,72,90,86,105,45,75,-1,72,60,60,56,60,63,65,78,
75,90,56,75,80,66,68,76,53,64,47,70,57,80,71,88,80,69,
80,84,64,80,1,0,1,1,2,1,1,2,2,1,0,1,1,1,1,1,7,1,0,
2,2,1,1,6,3,0,1,1,3,2,1,2,1,2,2,1,6,2,1,1,0,1,1,
0,1,1,0,0,2,1,0,1,1,2,1,0,1,3,2,1,3,5,1,3,1,3,1,
1,1,1,0,3,0,0,2,1,1,1,0,0,1,1,1,2,3,0,1,1,3,0,0,
2,3,5,2,0,2,1,0,1,2,0,1,4,3,3,1,3,1,0,0,1,0,1,2,
1,1,8,0,1,0,4,1,0,-1,1,1,1,2,1,1,2,1,3,4,3,1,1,1,
2,1,1,1,0,1,1,1,2,1,1,4,3,1,1,1,1,2,1,2,2,0,1,1,
1,2,2,1,1,2,2,2,0,1,2,0,0,2,0,0,1,0,0,2,1,3,1,0,
0,0,0,1,0,2,0,0,1,1,1,3,1,2,1,1,1,3,1,1,1,4,0,1,
1,1,4,1,1,0,1,2,0,0,1,2,3,1,2,2,1,1,1,1,1,3,3,4,
1,2,3,4,2,0,1,0,0,1,0,1,1,1,4,1,1,1,1,1,0,1,0,1,
1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,
0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,
0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,
0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,
0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,
0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,1,
1,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,
0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,
0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,
1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,
0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,
0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,0,0,
0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,
0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,
0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,
1,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,
0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,
0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,
0,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,
1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,
0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,
0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,
1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,
0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,
0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,0,1,1,
0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,
0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,0,1,
0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,1,0,
0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,
0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,1,1,
1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,
1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,
1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,
0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,0,1,
1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,
0,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,1,1,1,1,
0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,0,0,0,1,1,
1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,
1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,
1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,
1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,
0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,
1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,
0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,
0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
1,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,
1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,
0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,
0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,
1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,
0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,
1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,0,
1,1,0,1,0,1,0,0,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,
1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,
0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,-1,4,3,
4,4,2.3999999999999999,3,-1,3,3,-1,2,3,3,3,5,2,4,3,3,4,
3,3,3,3,1,3,3,3,4,4,1,2,4,4,4,2,3,3,5,4,2,3,3,3,
2,3,2,2,2,2,2,3,4,2,1,3,4,2,2,3,1,3,2,4,1,3,3,5,
4,3,3,3,4,5,4,2,3,2,3,2,4,3,4,3,2,4,5,4,3,2,3,1,
-1
,2,2,3,3,3,3,-1,2,4,4,3,3,2,2,2,2,2,3,3,3,2,1,3,
4,1,4,1,3,3,1,2,3,-1,-1,3,4,3,2,4,3,-1,1,2,3,2,4,
4,3,2,3,3,4,1,3,4,3,4,4,3,2,4,3,3,3,3,4,3,3,-1,3,
5,3,2,-1,2,-1,1,3,4,3,4,2,2,4,1,1,2,5,4,2,5,3,2,
4,3,3,3,3,3,2,4,3,1,-1,3,4,3,1,3,3,4,1,2,4,3,3,2,
3,3,3,3,4,4,2,2,4,3,5,3,2,1,1,3,-1,3,2,5,2,3,3,5,
2,-1,4,3,2,2,2,-1,3,3,-1,2,4,3,-1,3,1,1,1,4,2,1,
-1,7,3,1,1,-1,7,2,4,1,7,1,1,1,1,4,4,8,1,4,4,8,2,
8,1,1,1,4,8,8,3,1,1,1,4,4,1,1,3,6,1,1,1,4,4,4,1,
1,1,4,2,2,1,-1,1,1,1,1,3,7,1,8,7,7,1,1,-1,1,7,1,
6,7,1,4,1,1,8,4,2,3,2,6,6,1,1,1,1,-1,2,4,-1,1,8,
3,4,8,2,2,2,-1,6,2,8,1,1,4,7,7,8,1,1,1,1,1,2,2,8,
1,1,8,8,8,1,1,1,7,2,3,4,3,1,8,1,1,4,4,1,1,4,8,4,
1,8,1,-1,7,4,1,4,8,7,1,4,4,6,7,4,4,4,8,8,4,3,4,4,
7,7,-1,2,-1,8,3,3,8,2,1,8,4,3,8,8,1,2,1,1,1,1,1,
1,1,4,7,1,1,8,6,8,8,1,8,1,4,6,7,7,1,1,1,-1,7,1,1,
8,8,4,1,8,3,1,4,7,-1,1,2,8,8,4,4,2,1,2,2,8,8,2,2,
1,1,1,1,4,1,4,8,1),.Dim = c(251,16),.Dimnames = list(
character(0),c("1:lfd.Nr","2:Fach","3:Geschlecht","4:Alter",
"5:Groesse","6:Gewicht","7:Geschwister","8:Rauchen","9:bei Eltern",
"10:Auto->Uni","11:Bus->Uni","12:Fahrrad->Uni","13:Fuss->Uni",
"14:Mathe.LKurs","15:Abi.Note","16:Partei")))
"frabo96"<-
structure(.Data = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,
36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,
54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,
72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,
90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,
106,107,108,109,110,111,112,113,114,115,116,117,118,119,
120,121,122,123,124,125,126,127,128,129,130,131,132,133,
134,135,136,137,138,139,140,141,142,143,144,145,146,147,
148,149,150,151,152,153,154,155,156,157,158,159,160,161,
162,163,164,165,166,167,168,169,170,171,172,173,174,175,
176,177,178,179,180,181,182,183,184,185,186,187,188,189,
190,191,192,193,194,195,196,197,198,199,200,201,202,203,
204,205,206,207,208,209,210,211,212,213,214,215,216,217,
218,219,220,221,222,223,224,225,226,227,228,229,230,231,
232,233,234,235,236,237,238,239,240,241,242,243,244,245,
246,247,248,249,250,251,252,253,254,255,256,257,258,259,
260,261,262,263,264,265,1,1,1,1,1,1,4,4,2,1,1,1,4,4,
4,4,1,1,1,1,1,2,1,1,1,1,1,4,1,1,1,1,1,1,-1,1,1,2,
1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,
1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,2,2,1,2,1,
1,1,1,1,1,1,1,1,1,1,2,1,1,1,-1,1,1,1,1,1,1,2,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,
1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,2,
1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,
1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,
4,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,-1,0,1,0,0,1,1,0,
1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,-1,0,1,
1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,1,0,1,
1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,
0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,
0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1,
0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,
0,0,0,1,0,0,0,0,0,0,1,0,23,21,22,19,20,21,21,22,20,
20,22,21,20,20,19,26,21,20,25,26,22,19,21,20,20,19,23,
20,21,22,20,21,18,21,20,24,24,19,23,24,20,20,20,21,19,
20,23,20,20,21,20,20,24,19,21,20,28,24,20,20,23,21,20,
21,19,21,21,20,23,20,22,21,23,19,20,23,21,21,21,20,21,
23,20,22,21,28,21,22,23,22,22,20,22,21,19,19,19,20,20,
21,24,19,22,20,23,20,21,22,23,20,23,20,18,21,21,24,23,
21,21,20,20,24,19,23,22,21,20,24,21,19,21,20,23,20,20,
20,22,20,20,20,20,21,20,21,21,20,20,22,23,19,20,20,19,
23,27,21,21,24,27,20,21,21,20,19,19,19,21,19,22,19,20,
24,21,20,23,21,21,27,20,18,19,20,24,20,29,26,25,22,24,
26,30,20,20,23,21,20,22,22,21,25,22,20,21,22,20,19,19,
22,23,20,19,19,20,20,19,22,20,27,27,20,24,21,20,21,20,
24,22,23,23,20,20,21,21,21,20,22,19,19,19,23,20,23,21,
23,21,20,20,19,21,24,20,20,20,20,21,20,20,20,21,19,22,
21,20,20,22,171,173,176,170,168,175,198,170,177,198,170,
173,201,168,205,176,184,183,184,180,190,180,172,182,176,
168,176,180,184,190,188,177,172,160,186,184,168,168,183,
180,166,180,171,170,175,175,180,180,191,176,165,184,186,
180,164,180,182,178,183,178,178,188,170,179,180,182,165,
182,197,193,181,178,180,183,175,179,182,188,183,173,175,
176,182,178,171,173,190,180,178,180,187,170,186,181,165,
190,174,177,180,192,175,169,187,165,193,181,180,182,163,
169,183,182,170,175,184,159,178,176,180,190,175,180,170,
173,185,183,187,186,168,170,175,181,180,182,180,175,186,
170,185,168,185,191,192,160,182,185,161,185,182,170,170,
180,160,173,164,170,187,190,180,192,187,186,168,167,163,
175,194,164,170,177,190,185,176,175,167,179,195,180,180,
166,174,180,190,160,186,184,182,185,180,180,181,182,172,
166,185,178,183,183,180,177,191,196,187,183,196,170,164,
196,167,192,178,176,169,182,196,170,180,169,184,182,185,
183,177,185,179,175,176,180,183,188,188,175,172,180,170,
185,172,165,183,175,185,160,188,186,171,178,182,185,188,
194,180,165,161,180,185,188,178,176,178,175,192,171,190,
171,169,60,66,68,70,60,69,84,55,63,85,59,63,93,62,130,
69,72,78,74,70,92,55,60,76,55,59,63,65,67,82,75,74,65,
55,80,78,68,62,75,80,57,70,59,65,-1,-1,70,70,155,74,54,
83,83,90,68,78,73,70,75,74,73,83,85,70,71,90,60,75,107,
96,65,71,73,75,73,62,75,88,92,58,60,73,78,78,62,68,86,
71,80,65,72,50,73,77,53,81,62,55,75,100,60,51,86,55,81,
63,67,79,50,57,76,70,60,69,95,52,79,65,78,75,72,75,55,
55,79,79,75,72,57,65,64,73,80,85,78,60,80,67,66,67,75,
84,130,52,80,80,49,76,82,60,52,67,54,63,54,55,91,93,76,
83,78,74,64,58,51,55,80,58,55,63,82,75,64,56,75,71,81,
74,56,55,65,72,87,53,72,80,61,75,67,70,73,91,75,56,76,
62,88,87,75,75,85,95,75,80,76,70,52,95,48,90,80,69,68,
60,88,75,72,62,76,79,75,77,85,77,69,70,65,78,73,86,74,
60,77,65,65,80,62,54,63,65,69,60,86,80,58,60,81,62,82,
82,74,53,57,77,75,77,63,80,61,75,78,65,83,60,70,41,41,
41,40,38,41,46,49,41,46,39,39,48,39,50,43,44,42,43,43,
45,40,40,43,42,39,42,42,43,44,43,42,42,38,43,45,39,39,
43,41,39,41,39,42,-1,-1,42,42,49,43,39,45,44,45,39,43,
44,42,45,42,42,44,41,42,44,45,41,-1,48,46,42,42,43,45,
43,43,43,46,43,40,41,43,44,44,42,41,44,42,42,43,43,38,
43,44,37,45,39,38,43,46,41,38,43,39,46,40,39,44,37,39,
43,43,38,43,44,37,44,42,43,45,42,44,42,37,43,44,45,42,
38,41,41,44,44,40,44,42,43,42,44,40,43,44,46,37,44,45,
38,45,44,40,38,42,40,41,37,39,46,46,43,46,43,44,41,38,
37,39,43,39,39,43,45,-1,43,38,38,42,45,43,40,38,38,43,
45,38,42,43,42,43,42,-1,-1,44,42,39,46,43,45,45,43,43,
45,49,45,45,46,42,36,45,36,45,42,42,42,42,45,42,42,40,
44,41,43,45,45,45,43,43,42,43,42,44,46,42,42,41,39,42,
40,39,42,41,45,37,43,45,40,43,45,44,46,45,43,38,37,43,
43,42,39,43,43,43,43,41,44,-1,39,1,1,1,1,1,4,1,2,1,
1,4,0,3,2,1,1,6,1,2,1,0,0,1,1,0,0,2,1,2,1,0,0,2,
3,0,1,1,1,0,1,0,1,1,1,1,2,2,1,1,1,3,4,3,1,2,2,3,
0,1,1,2,2,0,2,3,7,3,1,1,1,2,3,1,1,1,3,0,1,1,0,2,
0,3,1,1,1,0,1,1,4,1,3,1,3,1,1,5,3,3,2,1,1,2,1,2,
1,1,3,2,2,-1,0,0,1,1,1,1,1,0,1,4,2,2,0,1,0,1,3,1,
1,1,3,0,1,1,1,1,1,3,2,2,0,2,3,1,1,1,1,0,1,1,1,3,
0,0,3,4,1,1,2,0,0,5,3,1,2,2,1,0,3,1,1,2,1,0,1,1,
1,1,2,2,2,1,3,1,0,1,1,0,1,4,0,1,0,1,1,1,4,1,4,2,
1,1,1,1,2,1,1,0,1,1,5,2,0,2,5,2,1,3,1,1,4,4,1,0,
3,1,1,1,1,1,1,1,3,0,1,2,3,0,1,0,1,1,3,0,0,3,2,0,
1,1,4,4,2,0,1,3,3,2,0,1,2,2,0,1,2,2,2,1,1,1,1,1,
1,2,5,1,1,1,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,1,1,
1,2,1,3,1,2,1,1,1,2,1,1,-1,-1,3,2,1,1,3,1,3,2,2,
3,1,1,1,1,3,2,1,3,1,8,3,1,3,2,3,3,2,1,2,1,1,1,2,
1,2,1,1,1,2,1,1,1,2,5,2,4,1,3,1,1,6,4,3,2,2,2,1,
1,3,1,1,1,3,3,-1,1,1,2,1,2,1,2,1,1,4,2,3,1,1,1,2,
3,2,2,1,2,1,1,1,2,1,1,1,1,1,1,2,4,1,2,1,2,2,2,2,
2,1,1,1,2,4,2,1,1,1,1,5,4,2,3,1,2,1,2,2,1,1,1,1,
2,1,1,1,1,3,1,1,1,2,1,1,2,1,1,1,1,1,1,2,2,1,5,2,
1,2,1,1,1,1,1,2,1,1,1,1,3,3,1,3,5,3,1,3,1,2,5,4,
2,1,3,1,2,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,1,1,1,1,
3,1,2,2,3,4,1,1,2,2,4,1,1,2,1,2,1,2,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,
1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,
1,0,1,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,
0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,
0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,1,
1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,
1,1,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,
0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,
1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,
1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,
1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,
0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,0,0,1,
0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,
0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,
1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,
1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,
1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,
0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,
1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,0,1,1,
1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,
0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,
0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,0,0,2,1,3,2,
2,2,2,1,2,2,2,4,1,1,2,2,1,1,2,2,1,1,2,1,1,3,1,3,
1,1,1,2,4,1,1,2,2,1,1,1,2,1,3,1,4,4,2,2,1,1,2,2,
1,1,2,1,1,1,1,3,5,2,1,2,1,2,4,1,1,1,3,3,3,2,2,4,
1,2,1,2,2,1,1,1,1,2,1,4,1,1,2,4,1,1,1,2,2,3,1,2,
1,1,2,2,1,1,1,4,1,4,2,1,2,2,2,4,4,2,1,1,2,1,1,1,
2,2,1,1,1,2,2,2,2,1,2,2,2,2,1,1,1,3,3,1,2,1,2,1,
3,1,1,1,1,1,1,2,2,2,1,1,1,2,1,4,2,2,2,2,1,2,3,2,
2,1,1,1,1,2,1,2,1,2,1,1,1,1,2,4,1,4,2,1,2,1,1,1,
2,2,2,2,1,1,1,1,1,2,4,1,1,1,2,1,2,2,1,1,1,1,1,4,
1,2,1,3,1,1,4,1,1,2,1,1,1,2,2,1,2,2,1,1,2,2,1,1,
1,1,1,2,2,2,1,1,1,1,1,1,4,2,1,1,1,2,1,1,1,1,1,1,
0,1,0,0,1,1,1,0,1,0,0,0,-1,0,1,0,0,1,0,1,1,1,0,0,
0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,
0,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,0,
0,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,
1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,
1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,
1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,
0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,
1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,
0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,
1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,100,
25,100,42,40,5,100,0,40,40,0,40,60,15,45,999,30,35,60,
-1
,150,90,15,120,80,20,0,10,78,38,93,100,38,0,5,35,35,
20,0,700,3,20,20,0,8,0,0,10,60,50,20,30,45,10,6,200,
-1
,2,50,90,60,60,700,20,70,86,42,120,80,50,40,55,300,170,
0,0,50,40,200,50,0,60,270,4,40,120,120,150,70,15,80,0,
10,0,30,20,30,3,300,50,10,15,8,10,60,15,30,50,20,15,0,
40,110,10,150,100,50,70,60,50,123,50,40,40,50,200,60,
100,20,40,40,34,40,200,25,30,25,3,90,70,10,130,130,8,
-1,20,10,130,50,30,100,140,55,60,50,150,160,40,50,50,70,
30,40,3,30,20,50,40,80,30,20,143,200,35,20,40,50,40,50,
32,40,50,270,0,30,100,30,25,25,200,200,150,50,25,80,65,
30,150,80,300,50,200,60,30,150,100,10,8,20,100,60,150,
30,200,40,0,93,0,60,40,65,12,13,70,50,250,220,45,500,
80,150,30,130,160,100,80,30,30,20,150,75,70,100,30,120,
450,30,20,50,100,50,0,20,170,150,25,50,15,112,45,350,0,
40,60,40,6.8499999999999996,8.5999999999999996,10,
2.3399999999999999,3.1499999999999999,7.8300000000000001,
7.4299999999999997,0,22,4.4000000000000004,3.2400000000000002,
8.5600000000000005,9.0600000000000005,20,6.2699999999999996,
8.2300000000000004,9.0999999999999996,5.9500000000000002,10,10,2,
21.300000000000001,13.41,22.710000000000001,9.0800000000000001,
7.8300000000000001,2.0499999999999998,4,3.2200000000000002,3.23,
6.2999999999999998,14.720000000000001,5.8700000000000001,21,1.05,
9.5,6,-1,-1,8.4000000000000004,9.0399999999999991,2,-1,
0.050000000000000003,-1,-1,2,21.16,25.66,20,2,
5.7000000000000002,4.5,8.8000000000000007,7.2599999999999998,
0.10000000000000001,9.75,9.2200000000000006,52,7.2999999999999998,
-1
,20,8.9100000000000001,9.7300000000000004,4.8200000000000003,
8.6199999999999992,3,6.0999999999999996,10.609999999999999,13.42,
1.5700000000000001,4.2800000000000002,7.0599999999999996,20,
6.4000000000000004,5,4.2999999999999998,7.3499999999999996,7,10,2,
10,9,4.5,5.5999999999999996,5.4100000000000001,4.7599999999999998,
3.5,12.5,3.4300000000000002,7.1399999999999997,6,
6.0800000000000001,3,2.9500000000000002,20,1.6000000000000001,-1,
2.8999999999999999,7.5,7.71,7,6.5,4.2999999999999998,
6.0199999999999996,8.9000000000000004,12,10.09,4.0499999999999998,
5,-1,7.1200000000000001,7.5999999999999996,9.6500000000000004,7,
0.46000000000000002,8.5800000000000001,21.539999999999999,8.75,9,
3.8300000000000001,7.0800000000000001,8.3499999999999996,12.73,
11.43,6.3499999999999996,4.7999999999999998,6.96,-1,
8.1799999999999997,4.6500000000000004,15,18,2,3.7999999999999998,
7,1,4,7.0599999999999996,7,7.96,4.3799999999999999,
7.4800000000000004,5,8.2200000000000006,5.2000000000000002,10,2.5,
7,9.1999999999999993,13,0.45000000000000001,0,5,10,15.74,19.43,
12,7,20,10,20,1,7.6200000000000001,9,12,0.5,
5.5499999999999998,4.4699999999999998,14,12.5,9.5999999999999996,
13,5,6.5,22.32,17,3.3700000000000001,20,0.59999999999999998,15,
11.199999999999999,8.5500000000000007,5.3499999999999996,16.75,
7.7400000000000002,6.2000000000000002,2.7599999999999998,
3.3999999999999999,10,3.1000000000000001,0.90000000000000002,
0.94999999999999996,5,5.4000000000000004,4.7400000000000002,3.5,
3.25,8.3499999999999996,14.800000000000001,8,14,6,
4.2000000000000002,2.5,13.449999999999999,4.5,5,5,
12.640000000000001,5.0999999999999996,10.5,6,4.9000000000000004,4,
0.10000000000000001,1.8,0,10.300000000000001,6,8.7200000000000006,
7.7000000000000002,15,7,9,11.99,0.33000000000000002,19,7,13.73,
7,25,7,4.5,6.7400000000000002,16.829999999999998,7,
4.6799999999999997,4.6900000000000004,5,13,2.6200000000000001,0.01,
15,11.960000000000001,2,20,6,3.1299999999999999,12,9,9,
10.300000000000001,9.4000000000000004,7.5,5,3,27,20,5,
7.3300000000000001,15,6.4199999999999999,5.3799999999999999,
5.2999999999999998,2,1,2,2,3,1,2,1,3,2,2,2,1,1,2,1,2,
2,3,1,1,3,1,1,2,4,1,3,2,2,2,2,2,2,3,3,3,3,2,1,5,
3,2,2,2,2,3,2,2,1,3,2,3,1,2,2,5,4,1,2,2,1,2,2,2,
2,2,1,2,2,1,3,2,3,2,5,2,4,1,2,2,1,1,2,2,4,2,3,2,
2,1,1,2,3,2,2,2,4,5,1,1,3,3,2,3,3,3,1,2,3,3,1,2,
1,2,5,3,2,3,1,2,1,1,2,2,2,1,1,4,3,2,3,2,2,3,2,2,
1,1,1,3,2,2,2,2,1,3,2,2,3,2,2,3,2,3,1,3,2,3,3,2,
5,2,2,2,2,2,4,3,3,1,2,1,3,3,5,1,1,3,2,1,1,1,3,3,
1,3,1,3,2,3,2,3,2,2,3,2,1,1,2,1,2,1,1,1,1,2,2,1,
3,2,2,3,2,3,1,3,1,2,2,2,1,2,1,4,4,2,2,5,2,5,1,2,
4,3,2,2,3,1,1,2,3,3,2,2,2,3,4,2,2,2,1,1,2,1,5,2,
1,2,2,1,1,1,4,2,1,0,1,0,0,1,1,0,1,0,0,0,1,1,0,-1,
0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,0,
1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,1,
0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,
0,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,
0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,
1,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,
0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,
1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,
0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,
0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,
0,1,1,0,1,0,0,0,1,2,2,4,1.3,3,-1,1,4,
3.2999999999999998,3,3,3.2999999999999998,2,2,1,-1,3,2.5,5,
-1,5,4,3,4,3,4,5,1,1,4,4.2999999999999998,
3.2999999999999998,2,4,-1,3,4,3.2999999999999998,5,5,1.3,3,1,
2,1,-1,-1,3,4,4,1.7,3,3,1,4,4,3,5,2,2,3,2,
3.2999999999999998,2,3,2.2999999999999998,4,5,2,3,1,3,3,6,3,
-1,-1,4,1,2.7000000000000002,2,4,-1,2,3,-1,3,3,3,4,1,
2.7000000000000002,3,3,3,2,3,1.7,4,4,2,1.3,
2.2000000000000002,1,4,3,1.7,3,4,3,3,4.2999999999999998,3,3,
4,3,3,4,3,4.7000000000000002,4,-1,4,3,2,5,2,-1,
3.2999999999999998,2,3.7000000000000002,2.7000000000000002,-1,4,3,
1,1.7,4,4,3,1.3,4,2,6,2.2999999999999998,3,4,3,-1,
3.7000000000000002,3,4,3,3,-1,3,4,2,3,3,2.7000000000000002,
2.2999999999999998,2,3,3,-1,3,1.3,2.7000000000000002,
2.2999999999999998,1.3,2.2999999999999998,2.2999999999999998,1.7,3,
2,5,4,-1,-1,3,1,-1,1,1,2,1,3,-1,1.5,-1,2,
3.7000000000000002,3,3.2999999999999998,4,2,-1,3,4,3,4,-1,2,
2,3,3,-1,3,3,4,3.7000000000000002,6,1,2,4.7000000000000002,
2.2999999999999998,-1,-1,6,4,1.3,5,2.7000000000000002,1.3,
3.2999999999999998,4,-1,4,-1,3,4,3,3,1.7,5,3,2,
3.7000000000000002,3.2999999999999998,1.7,2,3,3,1,3,
4.2999999999999998,4,2.2999999999999998,3,4,2.2999999999999998,3,
2.7000000000000002,2.7000000000000002,1.3,2.7000000000000002,
3.7000000000000002,4,3,5,3,3,5,3,2.1000000000000001,
2.2000000000000002,2.8999999999999999,2.7000000000000002,
2.6000000000000001,2.8999999999999999,1.3,3.3999999999999999,2,3,
3.2999999999999998,2,1.8999999999999999,2.7000000000000002,
2.2999999999999998,-1,2.7999999999999998,2.5,3.1000000000000001,
3.2999999999999998,3,2,2.8999999999999999,3,2.6000000000000001,
2.2000000000000002,3.6000000000000001,1.3,2.6000000000000001,
3.2999999999999998,3.2000000000000002,2.5,2.3999999999999999,
3.3999999999999999,3.3999999999999999,2,2.7000000000000002,
2.1000000000000001,3.5,2.5,1.5,2.8999999999999999,1.5,3,-1,-1,
-1
,2.6000000000000001,3,3.7999999999999998,2.7000000000000002,
2.2000000000000002,3,1.5,3,2.5,3,3.1000000000000001,
2.7999999999999998,2.6000000000000001,3.2000000000000002,
2.2000000000000002,3.2999999999999998,1.3,2.8999999999999999,
3.6000000000000001,3.3999999999999999,3.6000000000000001,3,
2.7000000000000002,1.2,2.5,3,3,3.1000000000000001,-1,3.5,
2.2000000000000002,3,3.2999999999999998,-1,3.2000000000000002,3,
2.6000000000000001,2.5,3.2000000000000002,3.3999999999999999,
2.2999999999999998,3.1000000000000001,2.8999999999999999,1.3,
2.7999999999999998,2.7999999999999998,2.7000000000000002,
2.7000000000000002,1.8999999999999999,2.6000000000000001,
1.6000000000000001,3.5,2.8999999999999999,3,1.8,2.3999999999999999,
1.8,2,2.8999999999999999,2.2000000000000002,2.6000000000000001,
2.8999999999999999,2.8999999999999999,3.2000000000000002,
3.7000000000000002,2.1000000000000001,3,3.3999999999999999,
3.7000000000000002,3.5,3.6000000000000001,2.2999999999999998,
2.7999999999999998,3,3.5,3.3999999999999999,3.2000000000000002,
2.2999999999999998,3.2999999999999998,3.2999999999999998,3,
2.6000000000000001,2.5,2.7999999999999998,2.7000000000000002,
2.7999999999999998,3.2000000000000002,3,1.3,2.6000000000000001,
3.3999999999999999,2.5,3.7000000000000002,1.7,3.2999999999999998,
3.3999999999999999,2.8999999999999999,2.5,2.7999999999999998,
2.1000000000000001,2.5,2.2999999999999998,2.7000000000000002,
3.1000000000000001,3.2999999999999998,2.1000000000000001,
2.8999999999999999,1.6000000000000001,3,3.5,2.3999999999999999,2.5,
2.8999999999999999,2.7000000000000002,1.8,1.7,2.7999999999999998,3,
2.2000000000000002,3.1000000000000001,1.6000000000000001,
3.2999999999999998,2.1000000000000001,1.8999999999999999,
2.6000000000000001,2.7000000000000002,3.2999999999999998,
2.7000000000000002,2.2999999999999998,3.2000000000000002,4,
2.8999999999999999,2.7000000000000002,2.7999999999999998,1.7,
3.3999999999999999,1.3,2,2.2999999999999998,1.6000000000000001,3,
2.7999999999999998,1.2,3.6000000000000001,2,3.2000000000000002,
2.7000000000000002,2.7000000000000002,2.2999999999999998,3,
2.2000000000000002,2.7000000000000002,3.1000000000000001,
2.8999999999999999,3.2999999999999998,2.2000000000000002,2,
2.2999999999999998,2.2000000000000002,3.2999999999999998,
2.1000000000000001,3,3,3,3.2999999999999998,3.2999999999999998,
1.8999999999999999,2.7999999999999998,3.2999999999999998,
3.3999999999999999,2.5,3.2000000000000002,2.7999999999999998,
2.7000000000000002,3,3.5,3.2000000000000002,2.2999999999999998,3,
3.6000000000000001,3.3999999999999999,2.8999999999999999,
2.6000000000000001,3.5,3.5,3.2000000000000002,3.6000000000000001,2,
3.6000000000000001,2.7999999999999998,1.8999999999999999,
2.1000000000000001,3.1000000000000001,2.2000000000000002,2,
3.3999999999999999,3.1000000000000001,2.7999999999999998,
2.6000000000000001,3.2000000000000002,2.7999999999999998,2.5,
2.7000000000000002,2.2999999999999998,3.2999999999999998,3,
3.2999999999999998,2.7999999999999998,3.2999999999999998,
2.7000000000000002,3.2000000000000002,2.7999999999999998,
3.2999999999999998,2.6000000000000001,2.8999999999999999,
3.2999999999999998,3.2999999999999998,3.2999999999999998,1,0,0,0,
0,1,1,0,1,0,0,1,1,1,1,-1,1,1,1,1,1,1,0,1,1,0,0,1,
1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,0,0,
1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,
0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,
0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,0,1,
1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,
0,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,
1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,
1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,
1,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,
0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,-1,1,0,0,1,1,
1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,-1,1,1,0,0,
0,-1,-1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,
1,0,0,1,0,0,0,1,1,1,1,1,1,0,-1,1,0,0,0,0,1,0,0,0,
0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,
1,0,1,1,0,0,-1,-1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,-1,
0,-1,0,1,1,0,0,0,0,0,0,0,1,-1,0,-1,1,1,0,1,0,0,0,
1,0,1,-1,1,-1,-1,1,1,0,-1,0,0,1,1,0,0,1,0,0,0,0,0,
-1,0,0,-1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,
0,1,1,-1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,
0,0,1,1,-1,0,1,1,0,-1,1,0,0,-1,1,0,0,0,0,1,0,1,0,
1,1,0,0,1,2,5,3,-1,1,3,1,1,1,2,3,2,3,2,1,-1,1,1,
1,1,-1,2,2,2,4,1,5,3,2,3,2,2,2,2,2,1,1,1,1,3,3,2,
4,2,1,-1,2,2,3,1,2,-1,-1,2,1,3,1,1,1,5,1,2,2,2,3,
2,3,1,2,3,4,2,2,2,3,1,4,2,3,-1,1,2,2,3,2,1,1,-1,
1,1,2,1,3,1,1,2,1,2,2,3,2,1,2,1,2,4,3,5,1,4,1,2,
1,1,2,1,2,2,1,1,2,1,2,3,3,1,1,-1,-1,2,2,2,3,2,1,
2,1,1,3,2,2,1,2,-1,2,2,2,3,2,1,3,1,2,3,1,1,2,-1,
2,-1,4,2,2,3,1,1,3,2,5,2,3,1,-1,-1,2,3,1,-1,2,2,2,
2,1,4,3,3,1,2,2,2,-1,1,1,-1,2,2,1,3,2,3,3,1,1,1,
2,2,2,2,2,2,3,1,1,1,3,1,-1,1,1,2,2,2,1,1,2,3,3,1,
2,1,1,2,3,2,3,1,3,2,3,1,2,-1,2,1,3,1,-1,3,2,1,-1,
2,1,2,3,5,1,1,3,2,1,1,4,1,1,4,3,4,8,1,8,1,6,-1,8,
1,8,7,2,4,1,4,1,8,1,8,1,2,2,6,1,4,8,3,8,1,7,8,7,
7,8,8,1,1,8,8,3,2,8,8,8,1,2,2,7,7,7,2,8,1,8,4,8,
8,4,8,8,8,2,1,6,2,1,4,8,8,7,1,1,-1,1,2,1,-1,7,7,
4,1,3,2,3,1,2,4,3,8,1,7,7,7,2,3,1,2,7,1,2,7,1,1,
4,3,4,1,4,1,8,3,3,2,8,4,1,7,4,8,8,4,4,1,4,2,8,8,
1,1,8,2,7,3,8,8,1,8,3,4,4,2,2,1,8,1,8,1,7,7,2,1,
4,1,7,7,1,1,4,4,7,-1,1,2,1,8,2,8,8,1,8,8,8,2,1,4,
1,8,8,3,1,8,1,1,4,1,1,1,3,1,8,-1,3,3,4,2,8,3,1,1,
8,8,1,1,1,1,1,2,1,8,2,2,2,2,2,8,4,7,3,2,3,1,1,7,
2,7,4,1,1,8,8,3,3,1,2,2,4,2,2,8,3,1,2,1,2,3,4,7,
8,4,4,8,4,4,2,7,7,4,1,7,7,4,4),.Dim = c(265,23),
.Dimnames = list(c("1","2","3","4","5","6","7","8","9","10",
"11","12","13","14","15","16","17","18","19","20","21","22",
"23","24","25","26","27","28","29","30","31","32","33","34",
"35","36","37","38","39","40","41","42","43","44","45","46",
"47","48","49","50","51","52","53","54","55","56","57","58",
"59","60","61","62","63","64","65","66","67","68","69","70",
"71","72","73","74","75","76","77","78","79","80","81","82",
"83","84","85","86","87","88","89","90","91","92","93","94",
"95","96","97","98","99","100","101","102","103","104","105",
"106","107","108","109","110","111","112","113","114","115",
"116","117","118","119","120","121","122","123","124","125",
"126","127","128","129","130","131","132","133","134","135",
"136","137","138","139","140","141","142","143","144","145",
"146","147","148","149","150","151","152","153","154","155",
"156","157","158","159","160","161","162","163","164","165",
"166","167","168","169","170","171","172","173","174","175",
"176","177","178","179","180","181","182","183","184","185",
"186","187","188","189","190","191","192","193","194","195",
"196","197","198","199","200","201","202","203","204","205",
"206","207","208","209","210","211","212","213","214","215",
"216","217","218","219","220","221","222","223","224","225",
"226","227","228","229","230","231","232","233","234","235",
"236","237","238","239","240","241","242","243","244","245",
"246","247","248","249","250","251","252","253","254","255",
"256","257","258","259","260","261","262","263","264","265"),
c("1:lfd.Nr","2:Fach","3:Geschlecht","4:Alter","5:Groesse",
"6:Gewicht","7:Schuhgroesse","8:Geschwister","9:?te Kind",
"10:Rauchen","11:bei Eltern","12:Art->Uni","13:Autobesitz","14:#CD",
"15:Bargeld","16:Coca-Cola","17:Mathe.LKurs","18:Abi.Mathe.Note",
"19:Abi.Note","20:Bi gewuenscht","21:Film","22:Film-Urteil",
"23:Partei")),class = "matrix")
Fragebogenumfrage 1997:
Universität Bielefeld WS 1997/98
Fakultät für Wirtschaftswissenschaften
P. Wolf
Fragebogen zur Untersuchung von Merkmalen der Statistik-Hörer
(Hinweis: Ihre Angaben werden vertraulich behandelt.)
1. Allgemeine Merkmale
Geschlecht? 1 = weiblich, 2 = männlich
![]()
Körpergröße in cm?
![]()
Gewicht in kg?
![]()
Alter in Jahren?
![]()
Haarfarbe? 1 = schwarz, 2 = braun, 3 = blond, 4 = rot, 5 = Sonstiges
![]()
Geschätze Länge Ihres längsten Haupthaares in cm?
![]()
Schuhgröße?
![]()
Anzahl Ihrer Brüder?
![]()
Anzahl Ihrer Schwestern?
![]()
Ihre Glückszahl?
![]()
Rauchen Sie? 1 = ja, 2 = nein
![]()
Wie viele km haben Sie in Ihrem letzten Urlaub zurückgelegt? (in hundert km)
![]()
Wie viele Stunden haben Sie auf der WiWi-Fete verbracht?
![]()
2. Wohnungs- und Ausstattungsmerkmale
Wohnen Sie bei Ihren Eltern? 1 = ja, 2 = nein
![]()
Haben Sie in Ihrer Wohnung einen PC zur Verfügung? 1 = ja, 2 = nein
![]()
Wie viele m2 Wohnfläche haben Sie zu Ihrer Verfügung?
![]()
Wie viele Minuten benötigten Sie heute für den Weg zur Uni?
![]()
Wie viele Musik-CDs besitzen Sie?
![]()
Wie viele Bücher besitzen Sie?
![]()
Besitzen Sie ein Auto? 1 = ja, 2 = nein
![]()
Welche der Zeitung lesen Sie am liebsten? 1 = FAZ, 2 = Focus, 3 = Frankfurter Rundschau, 4 = Handelsblatt, 5 = Neue Westfälische, 5 = Spiegel, 6 = Stadtblatt, 7 = Süddeutsche Zeitung, 8 = TAZ, 9 = Die Welt, 10 = Westfalen Blatt, 11 = Die Zeit
![]()
3. Schul- und studiumsbezogene Merkmale
Studiengang? 1 = BWL, 2 = VWL, 3 = WIMA, 4 = Sonstiges
![]()
Durchschnittsnote Ihres Schulabschlußzeugnisses?
![]()
Letzte Mathematiknote?
![]()
Wie sind Sie heute hergekommen? 1 = zu Fuß, 2 = mit Fahrrad, 3 = mit Bus, 4 = mit Auto, 5 = Sonstiges
![]()
4. Erwartungen/Wünsche
Haben Sie sich Bielefeld als Studienort gewünscht? 1 = ja, 2 = nein
![]()
Wie viele DM glauben Sie pro Monat als Student zu benötigen?
![]()
Wie viele Stunden werden Sie wohl inclusive Vorlesungen pro Woche studieren müssen?
![]()
Wie viele Stunden werden Sie wohl pro Woche Geld verdienen (arbeiten) müssen?
![]()
Wie viele Stunden werden Sie wohl pro Woche TV schauen?
![]()
Wie hoch wird wohl Ihr Anfangsjahresgehalt nach dem Studium sein? (in tausend DM)
![]()
Wie viele Semester werden Sie wohl studieren müssen?
![]()
Wie viele Monate ist der jetzige Dekan der WiWi-Fakultät schätzungsweise alt?
![]()
Welche Partei würden Sie wählen, wenn am nächsten Sonntag Wahl wäre? 1 = CDU/CSU, 2 = FDP, 3 = GRÜNE, 4 = PDS, 5 = SPD, 6 = sonstige, 7 = gar keine, 8 = ungültig, 9 = weiß nicht
![]()
[263:]
<<lese neuen Fragebogen ein>>=
frabo97<-
structure(.Data = c(2,2,1,2,1,1,2,2,2,1,2,2,2,1,1,2,1,1,2,2,
1,2,2,2,1,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,
1,1,2,1,1,1,1,1,1,2,2,2,1,1,2,1,2,2,2,2,2,1,1,2,
2,2,1,2,2,2,2,2,1,2,2,1,1,1,2,1,1,1,2,1,1,2,2,2,
2,1,2,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,1,1,2,1,
2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,1,1,
2,2,2,2,2,2,1,2,2,2,1,2,1,2,2,2,2,1,1,1,2,2,1,1,
1,1,2,2,2,2,2,1,2,2,2,2,2,1,1,2,1,1,1,2,2,1,1,2,
2,2,2,2,2,2,2,188,185,176,182,135,170,172,175,183,167,
173,174,175,160,167,180,170,170,186,175,173,180,179,187,
165,181,186,165,179,161,180,182,183,173,182,187,180,180,
176,181,180,185,183,180,165,164,178,170,165,172,171,167,
175,185,207,193,165,165,185,172,183,185,188,180,186,180,
168,176,180,176,180,168,191,194,185,172,165,182,170,173,
163,169,181,161,164,178,178,160,165,186,187,182,178,160,
181,174,195,182,191,170,184,190,184,163,175,188,185,180,
175,175,178,186,159,165,170,162,175,190,188,184,180,170,
170,154,170,180,180,174,171,181,180,163,178,160,175,180,
184,0,169,170,168,182,180,176,177,175,170,183,195,190,182,
190,163,187,188,183,178,160,175,169,184,178,172,175,164,
175,182,180,184,185,185,170,193,176,197,183,182,171,168,
183,167,170,178,175,174,170,168,188,188,180,183,171,180,
175,183,68,75,63,85,47,63,70,85,98,50,71,67,63,56,56,
75,53,52,76,70,59,100,56,86,46,79,83,50,70,48,100,69,
65.5,60,70,80,72,70,68,73,73,83,70,78,57,66,72,57,54,
61,60,56,57,75,118,80,54,50,72,70,77,72,90,73,75,75,52,
70,85,67,70,52,94,79,87,75,60,67,69,69,62,53,75,53,56,
53,60,60,58,82,98,70,74,57,74,65,90,78,73,0,83,80,77,
49,65,83,80,70,65,75,65,74,55,53,76,49,80,75,65,78,63,
60,65,74,62,57,66,68,80,72,76,49,76,55,73,78,75,0,57,
63,60,72,78,67,71,70,65,78,73,85,68,79,45,95,83,65,65,
53,58,70,70,70,58,68,50,67,65,68,85,85,85,70,78,75,110,
94,70,60,56,76,57,60,70,80,65,64,53,55,90,58,72,69,67,
60,90,20,22,26,21,21,21,29,22,21,22,22,22,23,19,25,31,
20,19,20,20,19,32,29,20,19,21,21,19,22,21,24,21,20,19,
19,20,22,20,20,20,21,22,23,25,22,19,20,23,20,19,20,19,
20,19,21,21,20,19,20,22,25,24,24,21,22,22,22,22,21,20,
20,22,20,27,26,22,35,21,25,20,21,20,22,20,19,26,20,22,
19,21,22,23,23,30,21,22,22,22,29,20,21,22,20,20,20,21,
21,20,22,21,22,21,19,20,23,23,24,20,20,24,20,19,22,23,
20,20,20,19,20,23,26,19,21,26,28,23,20,20,21,19,20,22,
20,21,21,21,19,22,20,20,21,20,21,27,20,20,21,20,20,20,
21,22,21,19,21,21,20,21,21,30,21,20,22,24,21,24,21,22,
20,26,23,19,19,20,20,21,21,21,21,21,21,21,20,22,19,2,
3,3,3,2,2,1,1,1,2,2,5,2,2,3,3,2,2,3,2,3,3,3,4,3,
3,3,1,3,2,2,3,2,3,3,2,2,2,2,3,2,3,2,2,2,3,1,3,2,
2,2,3,2,5,3,2,2,3,3,5,3,1,3,3,3,3,4,3,1,2,2,1,2,
2,3,3,3,3,2,3,3,3,3,2,3,3,2,3,3,4,3,2,2,2,2,2,3,
2,5,3,3,2,5,2,5,2,3,2,2,3,3,2,2,2,1,3,2,3,2,2,2,
2,3,3,1,1,1,2,3,3,2,2,2,3,1,2,3,3,3,2,2,3,3,3,3,
2,3,2,5,3,2,3,2,2,2,2,2,3,2,4,3,3,2,2,2,2,2,5,2,
2,3,5,2,2,2,3,2,2,3,3,2,3,2,1,1,3,2,3,1,2,2,1,3,
2,2,2,5,80,5,50,50,10,7,15,40,25,2,3,20,30,3,35,40,
6,25,40,43,6,8,50,0.20000000000000001,2,15,30,20,8,4,3,
25,25,15,4,5,2,7,5,10,5,13,50,40,8,30,50,20,70,15,50,
1,0.69999999999999996,5,65,12,25,40,4,8,5,2,10,10,40,8,8,
20,40,8,5,3,1,5,25,5,12,25,20,20,7,60,60,20,2,22,30,
8,15,10,6,50,1,20,5,0.59999999999999998,5,25,8,0.5,2,30,
4,10,1,4,5,4,12,10,40,6,10,40,5,8,5,7,8,20,7,5,5,7,
4,7,10,6,4,40,4,30,4,4,6,3,20,35,5,4,1.3999999999999999,
5,3,10,20,7,3.5,10,10,8,25,10,5,7,15,64,25,50,3,
0.59999999999999998,20,20,15,30,40,15,10,8,15,10,7,5,12,8,
0.29999999999999999,4,20,5,20,22,40,5,5,10,30,10,3,8,10,
7,12,19,10,42,43,40,41,38,39,42,42,45,37,42,42,42,38,
39,45,38,37,43,42,41,43,42,47,38,44,45,40,39,38,43,44,
43,40,41,44,43,45,43,44,43,43,43,42,39,39,43,39,37,40,
40,38,39,43,49,45,39,38,44,39,43,43,44,43,46,43,39,42,
43,43,40,41,45,46,45,40,39,44,42,40,38,37,45,39,38,39,
38,39,38,45,46,42,43,36,42,40,47,42,42,39,46,45,44.5,
37,42,43,43,46,42,42,43,44,38,38,41,37,44,46,44,43,43,
41,41,44,42,42,42,42.5,42,42,45,38,43,37,42,43,45,42,
38,39,40,43,46,41,45,44,42,44,47,43,42,45,39,46,45,42,
42,37,40,40,43,42,40,42,38,42,45,42,44,44,46,40,44,43,
48,45,43,40,38,43,37,39,40,43,41,40,39,43,45,40,41,41,
42,42,43,0,0,2,0,0,0,1,0,0,1,1,1,2,0,0,2,1,0,0,0,
1,0,1,2,0,1,1,2,0,1,0,3,1,2,0,0,1,0,1,0,1,3,1,1,
1,0,2,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,
1,1,0,2,0,1,0,1,1,0,1,1,1,1,2,0,1,0,0,0,0,0,0,0,
0,0,0,2,0,1,1,1,1,1,1,0,0,3,1,0,1,0,2,0,1,1,2,1,
2,1,0,1,1,2,0,0,1,6,1,0,1,1,1,1,1,1,2,0,1,0,1,1,
0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,
0,2,1,3,0,1,0,1,1,0,0,0,0,1,1,1,3,0,0,1,0,1,0,1,
3,0,2,1,0,0,1,1,1,1,1,2,5,2,3,0,1,0,0,0,0,1,1,0,
0,0,2,1,0,0,0,0,0,0,1,0,1,0,0,0,3,2,0,0,1,1,0,2,
1,1,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,
0,1,0,1,0,1,0,1,0,3,0,1,2,1,1,1,0,0,3,1,1,1,1,1,
2,0,1,0,0,2,3,1,1,1,0,0,0,1,0,1,0,1,0,1,0,2,1,5,
1,2,0,0,0,0,0,2,0,1,1,1,1,0,1,0,2,0,0,0,0,1,0,0,
1,0,1,1,0,1,0,0,3,2,0,1,0,0,1,1,0,0,1,1,0,0,0,0,
1,1,0,1,1,0,0,1,0,0,0,0,0,1,1,2,2,0,0,1,1,0,1,2,
2,1,0,1,1,0,3,0,1,0,17,7,3,4,0,28,8,23,9,7,8,5,1,
3,7,13,16,5,24,7,7,2,12,7,7,0,3,25,3,12,0,5,5,7,0,
5,0,25,0,7,66,6,7,17,5,13,23,492,6,14,7,21,13,6,9,7,
2,2,0,0,17,47,21,0,5,13,6,0,6,11,8,6,7,
3.1699999999999999,90,28,7,7,99,14,5,18,9,9,8,13,20,5,3,
56,15,69,71,10,8,7,22,5,0,0,15,2604,6,28,0,8,9,13,0,
24,7,13,2,777,0,0,13,15,7,16,5,318,3,0,2,31,3,7,0,4,
4,7,1,7,11,0,16,3,7,13,0,13,666,13,1,1,0,13,23,9,7,
2,7,7,0,9,16,22,1,16,7,21,13,7,17,0,0,
3.1739999999999999,7,0,21,25,7,8,0,32,24,0,22,7,22,7,29,
8,0,0,15,2,13,0,20,17,8,17,13,2,2,2,1,2,1,1,2,2,2,
1,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,1,2,
2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,2,2,2,2,1,2,2,2,2,
2,2,1,1,2,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,2,1,2,2,
1,2,2,2,2,1,1,2,1,1,1,1,2,1,2,1,1,1,1,1,2,1,1,1,
2,1,2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2,2,2,2,1,1,2,
2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,
2,2,2,2,2,1,2,2,2,2,2,2,2,1,2,1,2,1,2,1,1,2,2,2,
1,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,500,600,105,400,
0,0,600,6800,5,24,4000,30,200,70,603,2000,500,100,450,80,
480,170,1500,10,2300,600,200,600,30,0,2000,3000,2000,4000,
0,80,10,3,10,5,10,2500,15,0.10000000000000001,0,1600,2000,
600,800,4050,2000,12,7,2500,1700,31,420,1600,1600,0,1200,
30,200,65,3000,25,3500,6,90,100,35,400,0,3,50,20,200,20,
10,50,800,200,18,4000,4000,10,1400,2200,120,20000,500,30,
28,60,100,800,25,38,4000,0,50,2200,24,2.6000000000000001,
1500,280,20,250,0,100,80,40,2500,30,3000,7000,300,36,20,
18,1000,800,0,0.14999999999999999,800,23,2000,80,180,25,0,
4500,18,10,30,15,0,30,0,1900,500,20,300,5,800,2000,100,
2,210,20,2000,2000,3000,2500,30,80,350,5000,700,25,100,9,
1200,1000,12,1000,2500,3500,6,45,2000,30,0,3200,900,200,
50,6000,5000,3000,30,25,50,2000,3000,15,8500,800,30,150,0,
60,13,30,20,3,3,7,4,0,1,3,3,0,4.5,3,3,3,2,1,1,5,5,
5,3,3,0,0,4,4,4,5,3,0,6,0,3,2,2,0,4,5,5,5,5,0,5,
5,3,3,4,5,3,0,0,4,5,5,4,4,3,5,1,4,3,3,5,3,4,3,3,
0,0,2,0,0,1,0,0,0,0,0,6,4,4,3,3,2,3,3,4,3,0,3,5,
4,6,4,0,0,3,3,3,4,2,0,4,5.5,5,4,5,4,5,2,0,0,0,4,
1,0,0,0,0,4,4,0,5,5,4,0,3,4,3,4,2,0,4,1,0,0,0,6,
6,6,0,4,3,3,3,0,0,5,0,2,0,7,4,4,0,3,0,0,6,4,5,3,
0,0,2.5,0,0,2,0,2,0,5,7,0,5,8,5,5,5,5,0,0,0,0,3,
4,0,3,4,0,0,4,0,5,4,0,1,1,1,1,2,1,1,1,2,2,1,1,1,
1,2,2,2,1,1,1,1,2,2,1,1,2,2,2,1,2,2,1,1,1,2,2,2,
1,2,2,2,2,1,2,1,1,2,2,2,1,1,2,2,1,2,2,1,2,2,2,1,
1,1,1,1,1,2,1,1,1,1,1,2,2,2,1,2,1,1,2,2,1,1,2,2,
2,1,2,1,1,1,2,1,2,2,2,2,2,2,1,1,2,2,2,1,1,2,1,2,
1,2,1,2,1,2,2,1,1,1,2,1,1,2,1,2,2,1,2,2,1,0,1,2,
1,1,1,1,1,2,1,2,1,2,1,1,2,2,1,2,2,2,1,2,1,1,1,2,
1,1,2,2,1,2,1,1,2,1,2,2,2,1,2,1,1,1,1,2,1,2,2,2,
1,1,2,2,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,
1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,
2,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,2,2,1,1,1,2,2,
1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,2,1,1,2,1,2,2,2,2,
1,2,1,1,1,2,1,1,2,1,1,2,2,2,2,2,2,1,1,1,2,1,1,1,
2,1,2,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1,
1,1,1,1,2,2,1,1,2,2,1,1,2,1,1,2,1,1,1,2,2,1,1,1,
1,1,2,2,2,1,1,1,1,2,1,2,1,1,1,1,1,2,1,1,2,2,1,1,
1,1,1,1,2,2,1,1,2,1,1,2,1,2,1,1,1,39,12,78,26,25,
15,100,15,50,38,60,25,15,17,20,22,26,20,12,0,40,70,66,
20,58,26,21,40,40,48,70,40,110,35,60,15,20,35,36,48,40,
12,9,65,12,18,25,55,20,100,25,25,25,30,18,18,20,30,50,
54,120,50,25,60,20,20,43,20,30,8,30,20,23,100,50,20,60,
30,35,20,63,25,25,20,20,27,100,20,20,50,15,19,18,120,
22,35,52,21,80,25,10,45,21.390000000000001,24,30,30,23,30,
25,50,18,17,19,26,50,60,40,40,40,48,20,20,35,12,35,20,
15,21,25,78,80,15,30,50,65,50,0,30,0,30,25,7,22,95,
120,20,20,30,23,20,32,24,40,60,24,20,64,40,15,40,30,60,
68,30,60,21,30,29,34,60,45,15,14,35,14,35,22,15,28,54,
25,30,30,25,54,32,94,70,25,20,25,90,20,90,40,60,35,30,
40,30,25,25,15,50,50,20,18,60,95,25,10,15,30,13,25,30,
25,20,90,7,20,30,30,45,10,30,15,20,20,5,5,20,8,25,10,
120,25,40,40,20,30,5,15,25,25,30,20,15,39,3,7,10,17,
15,20,50,50,45,45,20,10,25,30,30,56,30,20,8,40,20,90,
20,10,25,15,35,45,5,10,10,5,30,40,25,22,100,35,20,20,
30,50,15,30,5,20,90,10,35,10,50,10,10,60,20,45,5,35,
10,55,10,60,30,30,20,15,20,3,15,40,20,45,20,35,40,10,
45,75,20,20,50,90,20,40,25,30,25,50,25,40,35,20,15,60,
34,15,5,30,15,95,50,60,95,60,20,20,30,60,90,100,90,40,
45,10,18,10,20,40,26,4,45,30,6,50,10,90,45,40,45,10,
10,120,30,45,20,30,20,18.5,25,2,20,100,40,86,54,80,3,
300,12,50,80,40,20,30,40,40,50,30,30,20,180,25,190,30,
32,50,300,160,40,80,50,350,20,25,10,30,50,40,150,40,50,
15,3,30,70,5,20,50,100,20,10,120,35,15,233,450,220,20,
30,35,15,20,200,250,10,90,15,160,40,30,500,15,15,91,300,
50,150,25,50,50,30,30,130,160,0,6,15,40,40,20,120,50,
100,68,100,20,100,25,50,40,30,60,100,152,40,25,150,40,
20,0,40,30,25,0,35,0,40,0,150,50,200,50,120,80,300,10,
20,200,10,30,70,60,15,20,150,90,40,40,0,50,10,60,40,
180,100,63,0,50,30,20,35,30,50,10,100,30,100,55,25,4,
40,30,150,20,20,25,50,280,8,20,100,100,30,0,60,81,50,
20,20,20,10,100,30,10,12,30,60,30,20,20,0,1,1,100,100,
60,80,180,200,300,0,30,150,80,300,150,20,10,60,30,40,30,
150,150,400,0,200,0,800,20,100,100,50,5,400,200,40,150,
30,30,0,100,30,80,25,100,30,12,80,10,30,100,21,100,100,
30,500,40,50,63,70,30,70,50,40,45,15,350,220,50,300,25,
120,100,60,60,40,40,0,300,50,500,200,100,25,20,200,300,
50,30,0,40,50,180,25,200,20,20,120,3000,20,400,50,50,30,
50,100,152,130,328,100,50,30,120,20,40,50,30,20,40,0,
100,80,50,20,100,20,200,30,150,10,100,50,100,20,10,1500,
40,100,50,250,60,10,0,0,70,80,60,120,150,300,0,300,20,
100,20,60,100,30,60,80,75,600,200,20,300,200,50,30,100,
60,20,50,50,70,50,400,120,100,200,2,50,50,200,50,30,50,
100,50,6,25,20,100,15,5,30,0,100,50,100,80,1,2,1,1,2,
1,2,1,1,2,1,1,1,1,2,1,2,1,2,2,2,1,2,1,1,1,2,2,2,
2,1,1,2,2,2,1,1,1,1,1,2,2,2,1,2,1,2,1,2,2,2,2,1,
1,2,1,2,1,2,1,1,1,1,2,1,2,2,2,2,2,2,1,1,1,1,2,1,
1,1,1,1,1,1,2,1,1,1,2,2,1,2,1,1,1,2,1,2,2,2,2,1,
1,2,2,2,1,2,2,2,1,2,1,2,1,2,1,1,2,1,1,1,1,1,1,2,
2,1,2,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,1,2,1,1,2,
1,1,1,2,2,2,1,1,2,2,1,2,1,1,2,2,2,2,2,1,1,1,2,1,
1,1,1,2,1,2,2,2,2,1,1,1,1,1,1,2,1,1,2,1,1,1,5,5,
2,1,0,5,5,5,2,2,2,10,10,5,1,5,1,2,5,2,5,5,6,5,5,
5,5,5,5,5,2,5,5,5,2,5,5,2,2,1,5,2,10,2,2,2,2,5,2,
5,5,2,1,5,2,5,11,5,5,2,5,11,5,2,10,2,11,9,5,5,5,5,
2,5,11,2,11,2,2,9,5,2,2,2,5,11,4,2,2,9,11,5,7,2,5,
5,4,4,5,5,3,2,5,5,5,3,2,9,9,1,2,2,5,5,5,2,2,5,5,
5,5,5,2,4,10,1,5,2,3,5,0,9,3,5,5,10,5,7,2,5,1,5,
2,10,5,5,5,2,2,5,4,5,5,2,10,10,6,2,5,1,11,1,2,9,2,
1,6,4,7,6,1,5,5,5,5,5,5,5,4,2,8,1,2,2,2,2,10,5,9,
2,1,5,5,1,5,1,1,1,1,1,1,2,1,1,1,1,1,1,2,3,2,1,1,
1,2,1,1,4,1,1,1,1,1,2,1,1,2,2,2,1,1,1,1,2,1,1,1,
1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,
1,2,2,1,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,2,1,1,1,2,
1,1,1,2,1,1,1,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,
1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,
1,2,1,1,2,2,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,1,1,1,
1,1,1,1,1,1,1,1,2,1.8,2.7000000000000002,2,
3.4000000000000004,0,3,3.2000000000000002,3,2,1,
3.3000000000000003,2.8000000000000003,2,3,2,3,1.7000000000000002,
3,2,3.1000000000000001,1,3,1.6000000000000001,3.1000000000000001,
2.8000000000000003,3.9000000000000004,3,2.6000000000000001,1.5,
2.6000000000000001,3,3,3,2.3000000000000003,2.7000000000000002,
3.2000000000000002,3,3,3.3000000000000003,2.7000000000000002,
2.7000000000000002,2.3000000000000003,2.2000000000000002,
3.3000000000000003,2.4000000000000004,2.7000000000000002,3,3,3,2,
2,2,2.1000000000000001,2.9000000000000004,2.6000000000000001,
2.6000000000000001,2,1.9000000000000001,2.6000000000000001,
2.8000000000000003,2,1,2,2.8000000000000003,3,3,1.8,3,3,2,2,
2.5,3,1.4000000000000001,1.6000000000000001,3,2.8000000000000003,
2.9000000000000004,2.3000000000000003,2.9000000000000004,2,2,3.5,
2.7999999999999998,3.2000000000000002,2,3,2.2999999999999998,
2.8999999999999999,1.7,3.5,3,2.7000000000000002,3,
3.3999999999999999,1,1,1,3,3.3999999999999999,3,2,
3.2999999999999998,2.6000000000000001,2.8999999999999999,
2.7000000000000002,2.8999999999999999,3,2,3,3,3,
2.7999999999999998,1.8999999999999999,3.2000000000000002,3,
2.7999999999999998,2.8999999999999999,3,3,3,2.7000000000000002,3,
2,3,2.8999999999999999,2.1000000000000001,3,3.2000000000000002,2,
3,2,1.8999999999999999,3.3999999999999999,3,3,2.7000000000000002,
0,3.7000000000000002,2.8999999999999999,2.6000000000000001,2,
3.2000000000000002,3,2.7999999999999998,3.1000000000000001,2,3,3,
1.8999999999999999,2,2.1000000000000001,2.7999999999999998,3,
2.1000000000000001,2.3999999999999999,3,2.1000000000000001,1.3,3,
1.8,1.3999999999999999,2,2.5,1,2.8999999999999999,1.8,
3.2999999999999998,2.2999999999999998,2,1,2.8999999999999999,
2.7999999999999998,3,3.2000000000000002,2,2,2.5,2.5,
2.8999999999999999,2,1.8,2,3.1000000000000001,3.3999999999999999,
3.1000000000000001,3,2,3,3.5,2,2.6000000000000001,2,0,
3.3999999999999999,3,3,4,5,3,3,3,2,1,2,3,2,2,4,3,3,2,
4,2,2,1,4,2,2,2,2,3,3,1,3,2,2,3,3,2,3,3,3,5,3,4,
9,2,3,2,4,6,3,4,3,2,1,1,3,3,3,2,2,12,2,1,2,2,5,3,
4,2,1,3,3,3,3,3,1,1,3,4,2,2,11,4,2,3,3,3,2,4,1,2,
2,3,3,4,3,3,1,2,3,0,3,4,4,4,1,3,4,4,3,3,2,4,2,2,
1.7,4,4,3,4,3,3,3,2,5,2,3,2,1,3,4,3,4,1,2,1,2,2,
2,0,4,2,3,2,3,3,2,3,2,3,4,1,4,1.7,2,4,3,3,2,2,1,
2,1.7,1,3,3.1000000000000001,1,3,1,2,2,2,1,3,2,4,4,3,1,
4,1.7,3,3,2,2,2,4,4,2,2,4,4,2,2,3,0,3,3,4,1,4,4,
3,4,4,4,4,4,4,4,4,3,4,4,4,2,3,4,4,3,4,4,4,3,3,3,
3,4,4,5,4,4,2,4,4,4,3,5,3,4,4,3,3,1,4,3,4,3,4,4,
4,1,4,1,4,4,4,0,4,4,4,4,4,3,3,3,3,3,4,4,4,4,3,4,
4,5,1,4,4,4,3,3,1,4,3,3,4,5,3,3,4,2,4,3,3,3,3,4,
4,3,4,3,1,1,4,3,4,1,4,1,4,3,5,3,4,4,1,4,4,1,4,3,
3,4,3,3,4,4,5,4,4,3,3,3,3,3,3,3,3,1,3,3,3,4,4,3,
4,2,4,3,5,3,3,5,4,4,4,3,5,3,5,5,3,3,3,4,5,4,1,4,
4,4,4,3,4,4,5,5,4,4,4,4,5,4,4,4,4,4,4,4,1,4,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,
1,2,1,1,1,1,1,1,1,2,2,1,2,1,2,2,1,1,1,2,2,1,2,1,
1,2,2,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,2,1,
1,1,1,1,1,1,1,2,1,2,2,1,1,1,2,2,2,2,2,1,2,1,2,2,
1,1,1,2,2,1,1,2,2,1,1,2,2,1,2,2,2,1,1,2,1,1,1,1,
2,1,2,1,1,2,2,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,
2,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,2,1,1,2,1,
1,2,2,1,1,2,1,1,2,1,1,1,1,2,1,2,1,1,2,2,1,1,1,1,
1,650,350,800,390,1000,1000,500,400,400,1000,500,900,1000,
560,900,1000,800,400,300,700,500,0,2000,300,700,1200,400,
700,500,700,2000,1000,500,400,500,1100,1000,900,1500,1000,
800,700,400,1000,800,400,1000,1000,500,100,200,1100,1100,
600,600,1000,100,1000,850,800,1500,1200,500,300,1000,1000,
1700,100,500,100,500,500,1200,1000,2000,1000,2000,700,1500,
800,800,300,300,1000,1000,600,700,860,400,400,1000,1500,
500,2000,1000,600,1000,1000,1200,1000,1000,25,1000,1100,400,
800,1000,500,1000,1500,1000,400,1000,250,2000,1500,1000,300,
600,850,500,300,900,1000,1300,900,500,900,1000,600,600,
1000,700,1000,1000,400,400,1200,1000,500,700,300,800,500,
100,900,1500,800,900,1500,650,650,500,600,300,200,0,200,
300,1000,1000,400,700,500,500,1000,1500,1100,1400,1400,500,
800,500,1000,800,800,1000,800,800,1500,700,250,200,1600,
1000,500,200,500,2000,1000,600,1500,600,1300,500,32,38,32,
30,30,20,25,20,40,30,50,30,30,20,30,35,30,30,40,20,30,
50,25,30,30,25,30,20,40,17,35,28,30,30,0,33,35,35,35,
35,30,37,37,28,35,40,45,35,12,12,40,35,40,25,30,35,25,
22,30,35,20,40,35,30,30,40,40,30,28,30,15,28,25,20,30,
35,30,20,25,25,25,25,25,40,35,55,35,10,40,45,26,40,30,
30,20,40,39,39,0,25,25,50,40,5,20,50,40,35,12,40,50,
35,30,30,30,40,30,20,25,40,25,30,15,35,20,50,30,30,40,
30,56,50,30,25,40,25,35,25,0,35,50,0,40,30,30,40,0,25,
50,30,30,35,30,50,25,40,15,30,25,35,40,50,0,22,50,40,
50,25,40,30,40,32,30,50,30,40,30,30,28,25,30,25,25,30,
40,30,45,0,30,0,42,40,37,8,35,0,3,8,3,20,20,2,7,0,
20,8,15,0,0,0,10,10,12,8,6,6,14,20,3,10,0,6,10,8,10,
2,15,8,7,0,0,5,8,15,8,8,0,5,10,0,0,11,15,4,7,10,0,
0,5,0,0,30,6,0,10,15,4,0,0,3.5,10,0,0,0,10,7,12,0,
15,30,12.5,30,4,25,10,25,0,0,10,15,8,10,6,20,20,10,20,
20,0,0,10,9,8,0,5,16,0,12,8,0,10,0,2,16,0,10,0,10,
8,30,0,0,20,12,12,10,18,0,8,4,0,12,8,0,0,1,4,0,3,
16,3,0,0,0,14,0,0,6,0,0,3,0,0,0,10,10,0,8,4,2,0,0,
11,0,10,0,3,0,0,0,10,0,10,0,21,15,8,0,0,25,10,10,
3.5,4,20,10,4,6,15,16,0,20,20,0,0,10,12,0,10,4,4,2,
6,12,0,16,5,10,6,5,10,10,7,10,4,2,10,10,6,3,1,0,10,
15,5,10,20,14,5,20,10,8,20,3,0,10,0,4,5,5,5,4,3,15,
5,5,12,14,4,4,6,10,5,4,10,15,6,3,3,8,10,8,10,1,0,5,
0,10,30,0,10,20,20,6,5,3,3,15,15,5,3,1,15,5,10,2,3,
2,10,20,2,3,2,10,0,14,8,8,5,7.5,10,50,32,28,10,4,10,
2,7,6,7,10,10,8,30,10,20,8,15,10,14,2,12,10,12,5,6,
2,15,10,1,6,10,10,16,7,7,0,0,5,5,20,10,10,10,12,1.5,
2,10,10,5,10,7,10,10,9,10,1,10,2,3,10,5,5,10,0,0,40,
4,3,5,10,8,20,0,5,10,10,10,15,5,3,4,20,20,6,2,20,20,
10,7,10,4,10,10,3599,60,60,2000,4000,4000,4000,4000,60,0,
5000,0,3500,0,0,3000,3000,3000,2,3,3000,0,6,4,2500,2500,
3,60,0,0,4,3000,2000,70,0,4.5,4,3,300,4,25,60,40,60,0,
20,8000,36,36,0,1500,30,100,60,55,25,1500,2500,80,3800,4,
38,80,20,3500,4,4300,2500,60,0,0,4000,8000,8,70,0,70,
1000,60,5,3000,50,50000,4000,0,70,40,5000,20,60000,30,60,
3,30,5000,4,70,75,5000,4,2500,80,60000,60,0,2.5,4,60,0,
2000,4,4,5,30,10000,6000,5000,0,50,60000,50,0,0,80,5000,
50,5000,5000,60,70,12,4000,4,5,5,4,5000,0,0,4000,4000,5,
1.5,3000,3500,5000,70,1,4,5000,60,6100,3000,3000,4,4000,0,
0,5000,3000,5000,70000,3000,5000,4000,50000,127000,72000,
4500,70,60,60,80,3500,0,75,72,70000,65,3500,20,3000,3000,
3.5,4000,0,60000,60000,30,25,70,800,4,2000,3500,10,10,10,
11,14,14,10,10,13,12,13,10,10,10,10,10,9,10,10,10,11,
0,8,9,11,10,10,10,9,12,9,8,10,8,8,10,10,10,10,11,9,
11,9,11,9,9,10,12,10,10,10,9,8,9,10,12,10,10,11,11,
10,9,10,8,8,10,9,12,12,9,5,10,9,9,9,12,10,10,10,12,
8,8,10,13,11,10,10,10,10,8,10,10,12,12,12,8,8,8,10,
10,9,8,10,10,12,10,10,9,9,10,10,10,10,10,10,10,10,12,
12,10,11,10,10,10,8,8,10,9,10,10,8,10,10,10,12,11,10,
8,13,9,11,9,9,10,15,10,8,10,10,10,9,10,10,8,12,11,0,
10,9,11,9,12,10,10,10,10,16,10,9,12,9,11,9,20,9,9,9,
8,9,11,12,10,9,8,14,10,9,10,12,12,10,8,8,4,9,620,45,
45,0,0,99,45,720,720,0,0,0,175,0,0,500,480,480,480,700,
60,0,600,480,35,600,600,720,600,50,12,600,50,600,0,480,
480,0,500,500,40,20,500,600,0,600,738,607,500,605,660,
615,600,612,600,625,600,660,500,4085,622,650,600,430,24,
500,64,660,600,480,60,600,0,700,1200,0,720,20,550,500,
500,56,52,744,550,200,400,55,0,660,63,600,500,600,600,
540,660,660,0,0,150,650,720,720,999,550,650,600,0,90,50,
630,60,600,0,600,50,48,480,630,500,636,630,48,50,0,50,
45,600,480,100,600,600,480,550,480,650,0,0,0,50,44,720,
500,600,800,0,50,500,600,540,50,600,600,36,10,45,0,600,
300,60,60,0,1,1,540,700,610,620,666,60,45,674,648,0,600,
600,480,587,650,3679,580,540,600,0,600,0,0,360,0,0,600,
480,0,720,9,3,7,5,0,5,1,4,1,3,6,0,5,9,9,5,5,1,3,7,
9,9,3,5,5,5,2,7,3,0,5,5,1,6,9,9,7,2,5,9,7,9,1,7,
1,3,1,5,8,9,1,1,2,1,1,1,1,9,3,7,6,6,9,2,3,1,4,7,
2,3,7,5,8,8,4,1,3,9,7,1,1,7,1,7,7,6,1,2,3,2,3,1,
8,7,5,3,2,1,5,1,3,2,9,9,5,1,1,3,0,1,5,5,9,5,0,1,
7,5,1,9,1,9,2,7,7,8,5,3,1,1,6,9,1,7,3,9,5,0,9,9,
9,5,1,1,1,5,9,1,5,7,9,2,5,3,9,1,6,5,5,3,2,7,1,8,
1,1,0,2,2,3,1,7,1,8,9,5,3,3,9,5,9,5,5,5,9,5,5,2,
5,7,1,5,1,0,3),.Dim = c(195,34),.Dimnames = list(character(0),
c("1:Geschlecht","2:Groesse","3:Gewicht","4:Alter","5:Haarfarbe",
"6:Haarlaenge","7:Schuhgroesse","8:Brueder","9:Schwestern",
"10:Glueckszahl","11:Rauchen","12:Urlaubs-km","13:Feten-Stunden",
"14:Eltern-Wohnung","15:PC-Zugriff","16:Wohnflaeche",
"17:Weg-Minuten","18:CDs","19:Buecher","20:Auto","21:Zeitung",
"22:Studiengang","23:Abi-Note","24:Mathe-Note","25:Verkehrsmittel",
"26:Wunschort","27:Ausgaben","28:Studierzeit","29:Verdienzeit",
"30:TV-Zeit","31:Anfangsgehalt","32:Studiendauer","33:Dekansalter",
"34:Partei")))
[264:]
<<lese Daten zum Skript ein>>=
s165<-0.01*c(
172,51,66,414,292,14,97,157,10,441,9,467,168,193,27,311,179,87,154,11,
282,771,133,351,1313,323,428,432,133,129,468,97,213,441,539,452,48,22,115,103,
390,142,26,76,199,386,87,120,432,311,364,107,360,12,411,55,16,313,46,186,
423,157,106,460,817,259,215,38,4,162,258,51,805,201,598,178,97,34,63,44,
126,10,39,542,77,27,214,119,202,174,,105,315,23,459,228,238,347,170,174,84)
s166<-c(40,37,41,40,43,37,38,40,42,43,39,40,39,40,42,38,
41,41,39,38,42,40,41,39,37,40,41,40,39,40,41,42)
[265:]
<<initialisiere einige Funktionen>>=
init.revbook<-function(){
options(digits=5)
assign("Menu",Menu,frame=1)
}
[266:]
<<initialisiere einige Funktionen>>=
open.revbook<-function(){
# h<-unix("if [ -f revbookreport.rev ] ; then \n echo 'hallo' \n fi ")
# if(length(h)>0){
# cat("Es existiert bereits eine Reportdatei.\n")
# cat("Soll diese geloescht werden ? (j=Datei loeschen)\n")
# if("j"==readline()) unix("rm revbookreport.rev",,F)
# }
h<-find("open.revbook")
h<-substring(h,1,nchar(h)-5)
if(exists("win.graph")){
revive(paste(h,"revbook",sep="") ,editor="edit" )
} else {
revive(paste(h,"revbook",sep="") ,editor="vuepad" )
}
}
open.lotto<-function(){
# h<-unix("if [ -f revbookreport.rev ] ; then \n echo 'hallo' \n fi ")
# if(length(h)>0){
# cat("Es existiert bereits eine Reportdatei.\n")
# cat("Soll diese geloescht werden ? (j=Datei loeschen)\n")
# if("j"==readline()) unix("rm revbookreport.rev",,F)
# }
h<-find("open.revbook")
h<-substring(h,1,nchar(h)-5)
if(exists("win.graph")){
revive7(paste(h,"lotto",sep="") ,editor="edit" )
} else {
revive7(paste(h,"lotto",sep="") ,editor="vuepad" )
}
}
[267:]
<<initialisiere einige Funktionen>>=
show.revbook<-function(){
cat("Funktion zur Anzeige des revbook mit ghostview\n")
cat(" Bitte haben Sie ein wenig Geduld!\n")
h<-find("open.revbook")
h<-substring(h,1,nchar(h)-5)
gv<-unix("which ghostview")
h<-paste(gv," ",h,"revbook.ps&",sep="")
unix(h,,F)
print("ghostview wird mit q beendet!")
invisible()
}
show.lotto<-function(){
cat("Funktion zur Anzeige des Lotto-Papiers mit ghostview\n")
cat(" Bitte haben Sie ein wenig Geduld!\n")
h<-find("open.revbook")
h<-substring(h,1,nchar(h)-5)
gv<-unix("which ghostview")
h<-paste(gv," ",h,"lotto.ps&",sep="")
unix(h,,F)
print("ghostview wird mit q beendet!")
invisible()
}
[268:]
<<initialisiere einige Funktionen>>=
Menu<-function(auswahl, mess = "items:",la,title="",report=F ){
l.cat<-
function(..., file = "", sep = " ", fill = F, labels = NULL, append = F)
.Internal(cat(..., file, sep, fill, labels, append), "S_cat", T, 0)
if(missing(la)) la<- letters[1:length(auswahl)]
# ----- VORLAEUFIG ------
report<-F
# ---- wegen der Sicherheit ---------
if(report){
auswahl<-c(auswahl,"Reportbearbeitung/Plot kopieren")
la<-c(la,"R")
}
mess <- c(mess, paste("\n", la, auswahl), "\nSelection: ")
if(exists("sinkname.r")) sink()
if(0<nchar(title)) l.cat(title,"\n")
l.cat(mess)
if(exists("sinkname.r")) sink("sinkname.r")
# h<-unix("read h; echo \"$h\"")
h<-readline()
res <- match(substring(paste(h, " "), 1, 1), la)
if(is.na(res))res<-0
if(report && res==length(la)){
assign("cmds",c(">revbook.report()","."),frame=w.frame.r)
res<-1
}
return(res)
}
In dieser Sektion wird eine Funktion definiert, die die eingelesene
sch
-Datei auf Aktivierungspunktdefinitionen hin untersucht.
Die Aktivierungspunkte
müssen mit ihren Merkmalen nach festen Regeln in der
rev
-Quelldatei
abgelegt sein. Ihre allgemeines Aussehen kann beschrieben werden durch:
Eine Aktivierungspunktdefinition muß jeweils als erste Zeile eines Modules ganz links in der Quelldatei stehen.
Ausgegeben wird eine Matrix mit vier Spalten: In der ersten Spalte stehen die Variablennamen, in der zweiten die Texte, in der dritten der Sortierindex und in der vierten die zugehörigen Sektionsnummern.
Mit dieser Basisinformation lassen sich ein Menu, das Texte für bestimmte Sprungstellen zeigt, sowie ein Sprungmechanismus zu der ausgewählten Sektion konstruieren (siehe dazu: activate.jump ). Zusätzlich werden die gefundenen Sektionsnummern im frame==1
abgelegt, wenn zwischen Suchwort und Trennzeichen Namen gefunden werden. Da manche Texte im Quelltext hinten ungeeignet aufhören, kann über die Variable end.skip die Anzahl der Zeichen angegeben werden, die hinten von den übergebenen Menupunkten abgeschnitten werden sollen.
[269:]
<<initialisiere einige Funktionen>>=
look.act.points.up<-function(key='cat("Revbook',trenn=":",end.skip=3){
<<look.act.points.up: ermittle Zeilen mit Aktivierungspunktdefinitionen>>
<<look.act.points.up: ermittle Sektionsnummern>>
<<look.act.points.up: ermittle Sortierindex, Text und Namen>>
<<look.act.points.up: erstelle Ausgabe>>
}
Es werden die Zeilen mit Aktivierungspunktdefinitionen auf
act.def
ohne Suchschlüssel und dem Rest abgelegt. zeilen hält die Orte der Definitionen fest.
[270:]
<<look.act.points.up: ermittle Zeilen mit Aktivierungspunktdefinitionen>>=
sch.r <-get("sch.r",frame=sys.parent())
act.def<-sch.r[zeilen<-(1:length(sch.r))[substring(sch.r,1,nchar(key))==key}
act.def<-substring(act.def,nchar(key)+2,nchar(act.def)-end.skip)
section.no
merkt sich die Sektionsnummern.
[271:]
<<look.act.points.up: ermittle Sektionsnummern>>=
section.no<-substring(sch.r[zeilen-1],2,4)
section.no<-ifelse( substring(section.no,3,3)==":",
substring(section.no,1,2), section.no )
section.no<-ifelse( substring(section.no,2,2)==":",
substring(section.no,1,1), section.no )
[272:]
<<look.act.points.up: ermittle Sortierindex, Text und Namen>>=
act.text <-act.def
act.names<-act.index<-rep(" ",length(act.def))
for(i in 1:length(act.def)){
h<-(1:nchar(act.def[i]))
h<-h[substring(act.def[i],h,h)==trenn]
if(length(h)==2){
act.index[i]<-substring(act.def[i],1,h[1]-1)
act.text[i] <-substring(act.def[i],h[2]+1)
act.names[i]<-substring(act.def[i],h[1]+1,h[2]-1)
h<-1:nchar(act.names[i])
h<-substring(act.names[i],h,h)
h<-paste(h[h!=" "],collapse="")
if(nchar(h)>0) assign(h,section.no[i],frame=1)
}
}
h<-max(nchar(act.names))
act.names<-paste(act.names,
substring(" ",0,h-nchar(act.names)),sep="")
Zuerst die Variablennamen, dann die Texte,
die Sortierindizes und zum Schluß die zugehörigen Sektionsnummern.
[273:]
<<look.act.points.up: erstelle Ausgabe>>= h<-cbind(act.names,act.text,act.index,section.no) return(h)Die Funktion activate.jump bietet dem Aufrufer ein Menu an, mit dem er an vordefinierte Aktivierungspunkte springen kann. Als Input ist der Output von look.act.points.up vorgesehen. Die Matrix name.text.index.no enthält also als Spalten act.names,act.text,act.index,section.no . Hier ein Beispiel:
<start-modul>=
a<-look.act.points.up()
...
<aufruf-module>=
cat("Revbook:0.0:MENU:allgemeines Menu\n")
activate.jump(a)
[274:]
<<initialisiere einige Funktionen>>=
activate.jump<-function(name.text.index.no){
key.text<-paste(name.text.index.no[,1],name.text.index.no[,2],sep=" ")
h<-name.text.index.no[,3]
ord<-order(substring(h,2))
section.no<-name.text.index.no[,4]
h<-paste(rep(" ",nchar(name.text.index.no[1,1])),collapse="")
wahl<-Menu(c(paste(h,"Abbruch",sep=" "),key.text[ord]))-1
if(wahl>0){
cmds<-paste("s",section.no[ord][wahl])
assign("cmds",cmds,frame=sys.parent())
}
}
[275:]
<<initialisiere einige Funktionen>>=
outin<-function(Text="leer",endtext="BITTE RETURN"){
if(!missing(Text)){cat(Text);cat("\n")}
cat(endtext)
cat("\n")
h<-readline()
h
}
Die Grundstruktur der Funktion sieht so aus:
[276:]
<<initialisiere einige Funktionen>>=
boxplotexp<-function(){
<<zeige Boxplot verschiedener Datens\"atze>>
<<wiederhole Kerngedanken zum Boxplot>>
<<gebe Hinweise zu den einzelnen Datens\"atzen>>
<<suche Datensatz aus>>
<<zeige Boxplot zu den gew\"ahlten Daten>>
repeat{
<<zeige Men\"u mit M\"oglichkeiten und erfrage Wunsch>>
<<handle Wunsch ab>>
}
}
Zunächst müssen einige Daten her.
[277:]
<<zeige Boxplot verschiedener Datens\"atze>>=
x1<-10:30
x2<-rep(10:30,4)
set.seed(15)
x3<-rnorm(100,20,10)
x4<-20+.5*x3
set.seed(15)
x5<-rexp(100,1/20)
x<-list("1"=x1,"2"=x2,"3"=x3,"4"=x4,"5"=x5)
boxplot(x)
Mit den Kerngedanken sollte der Benutzer eine kurze Einfuehrung in das Thema
Boxplot erhalten. Wichtig sind in diesem Zusammenhang die inhaltliche
Beantwortung von Fragen wie: was beschreibt der Boxplot? wodurch wird dies
beschrieben?
Lediglich beim 5. Boxplot schien eine weitergehende Erklaerung sinnvoll.
[278:]
<<wiederhole Kerngedanken zum Boxplot>>=
cat("Der Boxplot\n")
cat("-----------\n")
cat("Der Boxplot gibt dem Betrachter einen Eindruck von der Lage,\n")
cat("der Variabilitaet, der Symmetrie und den Randbereichen eines\n")
cat("Datensatzes. In dem jetzt sichtbaren Fenster sind die 5 Boxplots\n")
cat("von 5 verschiedenen Datensaetzen dargestellt. Im\n")
cat("mittleren Bereich ist deutlich eine Box mit einer horizontalen Linie\n")
cat("zu erkennen. Diese Linie markiert den Median. Die \n")
cat("auesseren Linien der Box stellen jeweils das untere resp. das obere\n")
cat("Quartil dar. Der vom unteren bis zum oberen Quartil reichende Kasten\n")
cat("symbolisiert die zentralen 50% der Daten.\n")
cat("Die aus optischen Gruenden durch Querstriche begrenzten Linien oben\n")
cat("und unten repraesentieren nochmals jeweils 25% der Daten; ihre Enden\n")
cat("markieren die Extrempunkte des Datensatzes, min(x) und max(x).\n")
Mit Hilfe des ersten Boxplots sollten die Kerngedanken (s.o.) mit Leben
gefuellt
werden. Hier werden zum ersten Mal konkrete Zahlen verwendet und den
einzelnen Begriffen zugewiesen.
Bei den nachfolgenden Boxplots kommt es mehr auf die Beschreibung von
Besonderheiten denn auf die staendige Wiederholung der Grundgedanken an. Daher:
Formulierung eines Fazits.
[279:]
<<gebe Hinweise zu den einzelnen Datens\"atzen>>=
repeat{
cat("Zu welchem Datensatz der 5 angebotenen wollen Sie weitere Hinweise?\n")
cat("Empfehlung: Zur ersten Orientierung bietet es sich an, \n")
cat("zuerst alle nacheinander anzuschauen.\n")
wunsch<-c(scan(,0,n=1),0)[1]
if(wunsch==0)break
if(wunsch==1){
cat("Zum Datensatz 1:\n")
cat("Der erste Datensatz besteht aus den Zahlen\n")
cat("10,11,...,30. Er ist symmetrisch, die Extrema sind 10 und 30, also\n")
cat("ist der Median gerade 20. Dies kann unmittelbar am Plot abgelesen\n")
cat("werden. Die Box wird durch 15 und 25 begrenzt, diese Punkte grenzen\n")
cat("das untere Viertel bzw. das obere Viertel vom Rest ab. In diesem \n")
cat("Fall ist 15 das untere Quartil, 25 das obere. Auch diese \n")
cat("Informationen sind einfach aus dem Boxplot abzulesen\n")
cat("{siehe Graphik}.\n")
}
if(wunsch==2){
cat("Zum Datensatz 2: \n")
cat("Dieser Datensatz ist aus der viermaligen\n")
cat("Wiederholung der Zahlen von 10 bis 30 (4xDatensatz 1) entstanden.\n")
cat("Also hat auch er den Median 20. Da die anderen Statistiken\n")
cat("ebenfalls mit dem ersten Datensatz uebereinstimmen, ergibt sich\n")
cat("dasselbe Erscheinungsbild.\n")
cat("Hinweis: vergleiche die Datensaetze!\n")
cat("Ein Datensatz, den man durch Vervielf\"altigung eines\n")
cat("bereits vorhandenen Datensatzes erhaelt, hat weiterhin das gleiche\n")
cat("Erscheinungsbild.\n")
cat("Merke\n")
cat("Der Stichprobenumfang hat keinen Einfluss auf den Boxplot.\n")
}
if(wunsch==3){
cat("Zum Datensatz 3:\n")
cat("Dieser Datensatz vom Umfang 100 ist eine Stichprobe aus\n")
cat("einer symmetrischen Grundgesamtheit mit Mittel 20 und Streuung 10.\n")
cat("Es ergibt sich ein symmetrischer Boxplot. Die Extrema (-5.18,46.98)\n")
cat("sind weiter vom Zentrum entfernt als bei Datensatz 1. Die Box ist\n")
cat("etwas laenger, jedoch deckt sie nur ca. ein Drittel des \n")
cat("Datenbereiches ab.\n")
cat("Allgemein kann man also sagen, dass die Boxlaenge nichts darueber \n")
cat("aussagt, wieviel die Box vom Datenbereich abdeckt. \n")
cat("Man sagt zwar, dass die Box 50% der Daten enthaelt,\n")
cat("aber das heisst nicht, dass die Box auch 50% des Datenbereichs\n")
cat("abdeckt. Man sieht, dass die Daten selbst einen grossen Einfluss\n")
cat("auf das Erscheinungsbild haben, denn die Extrema sind dafuer\n")
cat("verantwortlich, dass die Box bloss ein Drittel des Datenbereichs\n")
cat("abdeckt.\n")
}
if(wunsch==4){
cat("Zum Datensatz 4: Dieser Datensatz ist durch eine Stauchung (:2) und\n")
cat("Verschiebung (+20) aus dem dritten Datensatz entstanden. Deshalb\n")
cat("liegt der Median um 20 hoeher und die Spannweite wie\n")
cat("auch die Boxgroesse haben sich halbiert.\n")
cat("Merke:\n")
cat("Addition einer Zahl z bewirkt eine Verschiebung des Boxplot\n")
cat("nach oben (bei positiven Zahlen z) bzw.\n")
cat("nach unten (bei negativen Zahlen z).\n")
cat("Merke:\n")
cat("Multiplikation mit einer Zahl z>1 bewirkt \n")
cat("eine Streckung des Boxplots.\n")
cat("Analog bewirkt die Division mit einer Zahl z\n")
cat("eine Stauchung des Boxplots.\n")
}
if(wunsch==5){
cat("Zum Datensatz 5: Dieser Datensatz ist aus einer asymmetrischen \n")
cat("Grundgesamtheit mit dem Mittel 20 gezogen worden. Der wesentliche\n")
cat("Teil der Daten liegt im Bereich zwischen 0 und 30. Nur ca. 25%\n")
cat("sind im Bereich (25,100) verteilt.\n")
cat("Die Box erstreckt sich von 3.92 (unteres Quartil) bis 26.19\n")
cat("(oberes Quartil), d.h., dass 50% der Daten zwischen\n")
cat("3.92 und 26.19 liegen. Die Extrema sind 0.28 und 97.74.\n")
cat("Wie man sieht gibt es auf der einen Seite viele Daten, die\n")
cat("sehr dicht zusammenliegen, auf der anderen Seite gibt es aber auch \n")
cat("sog. Ausreisser. Das sind Daten, die weiter entfernt\n")
cat("vom Zentrum liegen. Die Ausreisser bewirken,\n")
cat("dass der Datenbereich links und rechts von der Box, der jeweils\n")
cat("25% der Daten enthaelt, unterschiedlich lang ist. Anhand der\n")
cat("Lage der Querstriche kann man erkennen, ob und in welchem Bereich\n")
cat("es Ausreisser gibt.\n")
}
} # end of repeat
[280:]
<<suche Datensatz aus>>=
cat("Sie koennen jetzt einen Datensatz zur genaueren Analyse aussuchen.\n")
cat("Welchen Datensatz der 5 angebotenen waehlen Sie?\n")
wunsch<-c(scan(,0,n=1),0)[1]
if(wunsch==0) break
switch(wunsch,x<-x1,x<-x2,x<-x3,x<-x4,x<-x5)
x.all<-list("ODS"=x)
[281:]
<<zeige Men\"u mit M\"oglichkeiten und erfrage Wunsch>>=
cat("Sie koennen nun mit dem Datensatz operieren.\n")
cat("Was wollen Sie\n")
angebot<-c(
"ENDE",
"Datensatz anzeigen",
"Zusammenfassende Statistiken berechnen",
"Ausgangs-Datensatz um Konstante verschieben",
"Ausgangs-Datensatz um Faktor strecken",
"Ausgangs-Datensatz logarithmieren",
"vorherigen Datensatz um Konstante verschieben",
"vorherigen Datensatz um Faktor strecken",
"vorherigen Datensatz logarithmieren",
"Datensatz um weitere Daten ergaenzen",
"Daten aus Datensatz entfernen",
"neuen Datensatz eingeben",
"Datensatz aus den 5 angebotenen aussuchen"
)
wunsch<-menu(angebot)
[282:]
<<handle Wunsch ab>>=
switch(wunsch,
{
break
},{
print(x.all)
cat("Bitte return!\n")
readline()
},{
print(lapply(x.all,summary))
},{
cat("Um wieviel soll der Datensatz verschoben werden?\n")
wunsch<-c(scan(,0,n=1),0)[1]
h<-x+wunsch
x.all<-c(x.all,list(h))
new.name<-paste("ODS +",wunsch)
<<erweitere Namensliste>>
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Um wieviel soll der Datensatz gestreckt werden?\n")
wunsch<-c(scan(,0,n=1),0)[1]
h<-x*wunsch
x.all<-c(x.all,list(h))
new.name<-paste("ODS *",wunsch)
<<erweitere Namensliste>>
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Datensatz wird logarithmiert!\n")
if(min(x)>0){
h<-log(x)
new.name<-"log(ODS)"
} else {
h<-x
new.name<-"ODS"
cat("Datensatz konnte nicht logarithmiert werden!\n")
}
x.all<-c(x.all,list(h))
<<erweitere Namensliste>>
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Um wieviel soll der vorherige Datensatz verschoben werden?\n")
wunsch<-c(scan(,0,n=1),0)[1]
h<-x.all{\tt length(x.all)}+wunsch
x.all<-c(x.all,list(h))
new.name<-paste("neuer DS +",wunsch)
<<erweitere Namensliste>>
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Um wieviel soll der vorherige Datensatz gestreckt werden?\n")
wunsch<-c(scan(,0,n=1),0)[1]
h<-x.all{\tt length(x.all)}*wunsch
x.all<-c(x.all,list(h))
new.name<-paste("neuer DS *",wunsch)
<<erweitere Namensliste>>
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("vorheriger Datensatz wird logarithmiert!\n")
h<-x.all{\tt length(x.all)}
if(min(h)>0){
h<-log(h)
new.name<-"log(neuer DS)"
}else {
h<-h
new.name<-"neuer DS"
cat("vorheriger Datensatz konnte nicht logarithmiert werden!\n")
}
x.all<-c(x.all,list(h))
<<erweitere Namensliste>>
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Geben Sie weitere Daten ein!\n")
cat("Eine leere Eingabe beendet !\n")
h<-c(x,scan(,0))
x.all<-c(x.all,list(h))
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Hier ist der Datensatz!\n")
print(rbind(Index=1:length(x),Daten=x))
cat("Geben Sie die Indizes der zu entfernenden Beobachtungen ein!\n")
cat("Eine leere Eingabe beendet !\n")
h<-x[-scan(,0)]
x.all<-c(x.all,list(h))
<<zeige alle Boxplots zu den gew\"ahlten Daten>>
},{
cat("Geben Sie die neuen Daten ein!\n")
cat("Eine leere Eingabe beendet !\n")
wunsch<-scan(,0)
if(length(wunsch)>0) x<-wunsch
x.all<-list(x)
<<zeige Boxplot zu den gew\"ahlten Daten>>
},{
<<suche Datensatz aus>>
<<zeige Boxplot zu den gew\"ahlten Daten>>
}
)
[283:]
<<erweitere Namensliste>>= names(x.all)<-c(names(x.all)[-length(x.all)],new.name)
[284:]
<<zeige Boxplot zu den gew\"ahlten Daten>>= boxplot(x) stats<-boxplot(x,plot=F) par(usr=c(0,6,par()$usr[3:4])) text(1,max(x),"Maximum") text(1,stats$stats[2],"oberes Quartil") text(1,stats$stats[3],"Median") text(1,stats$stats[4],"unteres Quartil") text(1,min(x),"Minimum") text(5,min(x),as.character(min(x))) text(5,stats$stats[4],as.character(stats$stats[4])) text(5,stats$stats[3],as.character(stats$stats[3])) text(5,stats$stats[2],as.character(stats$stats[2])) text(5,max(x),as.character(max(x)))
[285:]
<<zeige alle Boxplots zu den gew\"ahlten Daten>>= boxplot(x.all) #par(mfrow=c(1,length(x.all))) #for(x in x.all) boxplot(x) #par(mfrow=c(1,1))
[286:]
<<erweitere Namensliste>>= names(x.all)<-c(names(x.all)[-length(x.all)],new.name)
[287:]
<<zeige Boxplot zu den gew\"ahlten Daten>>= boxplot(x) stats<-boxplot(x,plot=F) par(usr=c(0,6,par()$usr[3:4])) text(1,max(x),"Maximum") text(1,stats$stats[2],"oberes Quartil") text(1,stats$stats[3],"Median") text(1,stats$stats[4],"unteres Quartil") text(1,min(x),"Minimum") text(5,min(x),as.character(min(x))) text(5,stats$stats[4],as.character(stats$stats[4])) text(5,stats$stats[3],as.character(stats$stats[3])) text(5,stats$stats[2],as.character(stats$stats[2])) text(5,max(x),as.character(max(x)))
[288:]
<<zeige alle Boxplots zu den gew\"ahlten Daten>>= boxplot(x.all) #par(mfrow=c(1,length(x.all))) #for(x in x.all) boxplot(x) #par(mfrow=c(1,1))
[289:]
<<initialisiere einige Funktionen>>=
jitterplot<-function(x,xlim){
x<-unlist(x)
set.seed(13)
zz<-runif(length(x))
if(missing(xlim)) xlim<-range(pretty(x))
plot(x,zz,ylab="",xlim=xlim)
}
[290:]
<<initialisiere einige Funktionen>>=
stabdiagramm<-function(x,xlim){
if(missing(xlim)) xlim<-range(pretty(x))
counts<-table(x)
werte<-as.numeric(names(counts))
plot(c(min(werte),max(werte)),c(0,max(counts)),xlim=xlim,
type="n",xlab="x",ylab=paste("*1/",length(x),sep=""))
segments(werte,0,werte,counts)
}
[291:]
<<initialisiere einige Funktionen>>=
balkendiagramm<-function(x,breaks){
breaks<-sort(breaks)
if(max(x)>breaks[length(breaks)]) breaks<-c(breaks,max(x))
if(min(x)<=breaks[1])
breaks<-c(min(x)-0.001*(max(x)-min(x)),breaks)
counts<-table(cut(x,breaks))
namen<-names(counts)
for(i in 1:length(namen)){
h1<-nchar(namen[i])
h2<-(1:h1)[substring(namen[i],1:h1,1:h1)=="t"]
namen[i]<-paste(substring(namen[i],1,h2-1),"..",
substring(namen[i],h2+4,h1),collapse="")
}
oldpar<-par(mar=c(5.1,12.1,4.1,2.1))
barplot(counts,names=namen,horiz=T,xlab=paste("*1/",length(x),sep=""))
par(oldpar)
}
[292:]
<<initialisiere einige Funktionen>>=
stem.and.leaf<-function(x){
stem(x)
if(exists("r.flag.r")&exists("out.file")){
if(get("r.flag.r",frame=w.frame.r)&&
get("out.file",frame=w.frame.r)!=F)print(stem(x))
}
invisible()
}
[293:]
<<initialisiere einige Funktionen>>=
dichtespur.interaktiv<-function(x){
par(mfrow=c(3,1))
w<-(quantile(x,.65)-quantile(x,.35))
bjdpl<-function(x,rel.width=0.001){
set.seed(13); z<-1+runif(length(x))
par(mfg=c(1,1,3,1)); xlim<-c(min(x),max(x))
plot(x,z,ylim=c(0,2),xlab="",ylab="",xlim=xlim)
bxpl.data<-boxplot(x,plot=F)
if(length(bxpl.data$out)>0)
segments(bxpl.data$out,0.2,bxpl.data$out,0.8)
lines(c(bxpl.data$stats[3], bxpl.data$stats[4], bxpl.data$stats[4],
bxpl.data$stats[2], bxpl.data$stats[2], bxpl.data$stats[3],
bxpl.data$stats[3]), c(.2,.2,.8,.8,.2,.2,.8))
segments(bxpl.data$stats[1],.2,bxpl.data$stats[1],.8)
segments(bxpl.data$stats[5],.2,bxpl.data$stats[5],.8)
segments(bxpl.data$stats[1],.5,bxpl.data$stats[2],.5)
segments(bxpl.data$stats[5],.5,bxpl.data$stats[4],.5)
h<-density(x,width=rel.width*(max(x)-min(x)),n=100,window="g")
par(mfg=c(2,1,3,1)); plot(h,type="l",xlab="",ylab="",xlim=xlim)
par(mfg=c(3,1,3,1))
}
frame()
cat("Ende: EXIT in Graphik anklicken!\n")
grin(par.matrix=rbind(lambda=c(-1,3,1,Inf),
rel.width =c(0,1,.02,Inf)),
expressions=c("xx<-if(lambda!=0)(x^lambda-1)/lambda else log(x)",
"bjdpl(xx,rel.width)"),
center=cbind(.5,c(.2,.5,.8)),
size= matrix(c(0.8,0.2),3,2,T),
pic.del=T)
par(mfrow=c(1,1))
}
[294:]
<<definiere lokale Funktion {\tt F.dach.local} von {\tt F.dach}>>=
F.dach.local<-function(x,breaks,xlim,...){
if(is.null(breaks)){
if(missing(xlim)) xlim<-range(x)
x<-sort(x)
n<-length(x)
F.x<-(1:n)/n
plot(0:1,0:1,type="n",xlim=xlim,xlab="x",ylab="F.dach")
segments(c(x[-n],x[1],x[n]), c(F.x[-n],0:1),
c(x[-1],par()$usr[1:2]), c(F.x[-n],0:1),...)
points(unique(x),cumsum(table(x))/length(x),pch=4)
} else {
breaks<-sort(breaks)
if(max(x)>breaks[length(breaks)]) breaks<-c(breaks,max(x))
if(min(x)<=breaks[1])
breaks<-c(min(x)-0.001*(max(x)-min(x)),breaks)
counts<-table(cut(x,breaks))
F.x<-cumsum(counts)/length(x)
if(missing(xlim)) xlim<-range(breaks)
plot(c(min(x),max(x)),0:1,type="n",xlim=xlim,xlab="x",ylab="F.dach")
lines(breaks,c(0,F.x),...)
}
}
[295:]
<<initialisiere einige Funktionen>>=
F.dach<-function(xy,breaks,xlim,...){
<<definiere lokale Funktion {\tt F.dach.local} von {\tt F.dach}>>
if(is.matrix(xy)) xy<-split(xy,col(xy))
if(!is.recursive(xy)) xy<-list(xy)
if(missing(breaks)) breaks<-NULL
if(missing(xlim)) xlim<-range(pretty(unlist(xy)))
i<- 0
oldpar<-par()$lty
for(el in xy){
F.dach.local(el, breaks=breaks, xlim=xlim, lty=i<-i+1, ...)
par(new=T)
}
par(lty=oldpar); par(new=F)
if(i>1){
namen<-names(xy)
if(is.null(namen)) namen<-as.character(1:length(xy))
legend(.3*xlim[1]+.7*xlim[2],.7,namen,lty=1:i)
}
}
F.dach.look.up
funktioniert nur für Treppenfunktionen.
[296:]
<<initialisiere einige Funktionen>>=
F.dach.look.up<-function(x){
print("bitte zweimal Punkt im F.dach-Plot anklicken!")
h<-function(x){
xy<-unlist(locator(n=1))
p1<-xy[2]; x1<-xy[1]
p <-sum(x<=x1)/length(x)
if(p>=p1){ p1<-p } else {
x1<-sort(x)[max(1,ceiling(p1*length(x)))]
p1<-sum(x<=x1)/length(x)
}
lines(c(par()$usr[1],x1,x1),c(p1,p1,par()$usr[3]))
return(c(x1,p1))
}
xy<-rbind(h(x),h(x))
dimnames(xy)<-NULL
if(xy[1,1]>xy[2,1]) xy<-xy[2:1,]
result<-c("x1" = xy[1,1],
"F.dach(x1)" = xy[1,2],
"1-F.dach(x1)" =1-xy[1,2],
"x2" = xy[2,1],
"F.dach(x2)" = xy[2,2],
"1-F.dach(x2)" =1-xy[2,2],
"F.dach(x2)-F.dach(x1)"=xy[2,2]-xy[1,2])
print(result)
invisible()
}
[297:]
<<initialisiere einige Funktionen>>=
scatter<-function(xy,xlim,ylim,hull=0,...){
if(is.matrix(xy)) xy<-split(xy,col(xy))
if(!is.recursive(xy)) xy<-list(xy)
if(missing(xlim)) xlim<-range(pretty(unlist(xy[1])))
if(missing(ylim)) ylim<-range(pretty(unlist(xy[2])))
namen<-names(xy)[1:2]
if(is.null(namen)) namen<-c("x","y")
plot(xy{\tt 1},xy{\tt 2},xlim=xlim,ylim=ylim,xlab=namen[1],ylab=namen[2],...)
if(hull>0){
HULL<-function(xy,hull){
h<-chull(xy{\tt 1},xy{\tt 2},peel=T)
h<-split(h$hull,rep(seq(h$count),h$count))
old<-par()$lty
for(i in 1:min(hull,length(h))){
j<-h{\tt i}
if(length(j)>2) polygon(xy{\tt 1}[j],xy{\tt 2}[j],density=0,lty=i)
}
par(lty=old)
}
HULL(xy[1:2],hull)
}
}
[298:]
<<initialisiere einige Funktionen>>=
dichtespur<-function(xy,xlim,width,...){
if(is.matrix(xy)) xy<-split(xy,col(xy))
if(!is.recursive(xy)) xy<-list(xy)
if(missing(xlim)) xlim<-range(pretty(unlist(xy)))
if(missing(width)){
print(paste("der Bereich der x-Achse beginnt bei:",xlim[1]))
print(paste("und endet bei:",xlim[2]))
print("geben Sie die Fensterweite an:")
width<-c(scan(,0,n=1),0.1*(xlim[2]-xlim[1]))[1]
}
h<-NULL; ymax<-0
for(el in xy){
hh<-density(el,width=width,n=100,window="g")
.l<-hh$x>=xlim[1] & hh$x<=xlim[2]
hh$x<-hh$x[.l];hh$y<-hh$y[.l]
h <-c(h,list(hh))
ymax<-max(ymax,hh$y)
}
plot(0:1,0:1,type="n",xlim=xlim,ylim=c(0,ymax),xlab="x",ylab="f.dach")
oldpar<-par()$lty; i<- 0
for(el in h){ lines(el$x,el$y,lty=i<-i+1) }
par(lty=oldpar)
if(i>1){
namen<-names(xy)
if(is.null(namen)) namen<-as.character(1:length(xy))
legend(.3*xlim[1]+.7*xlim[2],.7*ymax,namen,lty=1:i)
}
}
[299:]
<<initialisiere einige Funktionen>>=
histogramm<-function(xy,xlim,breaks,nclass ){
if(missing(xlim)) xlim<-range(pretty(c(min(unlist(xy)),max(unlist(xy)))))
if(missing(breaks)){
if(missing(nclass)) nclass <- log(length(unlist(xy)), base = 2) + 1
nclass<-ceiling(nclass)
breaks<-xlim[1]+(0:nclass)/nclass*(xlim[2]-xlim[1])
}
if(is.list(xy)){
OLDPAR<-par()
par(mfrow=c(length(xy),1))
for(i in 1:length(xy))
hist(xy{\tt i}, breaks=breaks, xlim=xlim, probability=T,
xlab=getnames(xy)[i],ylab="f.dach")
par(OLDPAR)
} else hist(xy,xlim=xlim,breaks=breaks,probability=T,xlab="x",ylab="f.dach")
}
[300:]
<<initialisiere einige Funktionen>>=
qqpairsplot<-function(xy){
OLDPAR<-par()
par(mfrow=rep(length(xy),2))
for(i in 1:length(xy))
for(j in 1:length(xy)){
qqplot(xy{\tt i},xy{\tt j}, xlab=getnames(xy)[i], ylab=getnames(xy)[j])
abline(0,1)
}
par(OLDPAR)
}
[301:]
<<initialisiere einige Funktionen>>=
summary.stats<-function(xy,xlim,...){
l.summary<-function(x){
options(digits=7)
h<-c(summary(x),"Std.Dev."=var(x)^0.5,n=length(x))
options(digits=5)
return(h)
}
namen<-getnames(xy)
if(is.matrix(xy)){
xy<-split(xy,col(xy))
names(xy)<-namen
}
if(!is.recursive(xy)) return(l.summary(xy)) else return(lapply(xy,l.summary))
}
[302:]
<<initialisiere einige Funktionen>>=
box.cox.transformation<-function(xy,lambda){
if(is.list(xy)) n<-length(xy) else n<-1
if(is.matrix(xy)) n<-dim(xy)[2]
if(missing(lambda)){
if(n>1){
print("Mit welchen lambdas sollen die Werte der Komponenten")
print(getnames(xy))
print("transformiert werden?")
print(paste("bitte",n,"lambdas eingeben"))
} else {
print("Mit welchem lambda sollen die Werte von")
print(getnames(xy))
print("transformiert werden?")
}
lam<-c(scan(,0,n=n),rep(1,n))[1:n]
}
if(is.null(lam))lam<-1
if(length(lam)<n) lam<-as.vector(matrix(lam,n,1))
if(is.list(xy))
for(i in 1:n)
xy{\tt i}<-if(lam[i]==0){log(xy{\tt i})}else{(xy{\tt i}^lam[i]-1)/lam[i]}
if(is.matrix(xy))
for(i in 1:n)
xy{\tt ,i}<-if(lam[i]==0){log(xy{\tt ,i})}else{(xy{\tt ,i}^lam[i]-1)/lam[i]}
if(!(is.matrix(xy)|is.list(xy)))
xy<-if(lam==0){log(xy)}else{(xy^lam-1)/lam}
return(xy)
}
[303:]
<<initialisiere einige Funktionen>>=
remove.extreme.values<-function(xy){
xy.is.list<-is.list(xy)
xy.is.matrix<-is.matrix(xy)
if(xy.is.matrix){xy.dim<-dim(xy); xy.names<-names(xy)}
bak<-xy
if(xy.is.list){
for(i in 1:length(xy)){
print(paste("Komponente: ",getnames(xy)[i]))
print(paste("Die Werte der",i,"-ten Komponente liegen in"))
print(range(xy{\tt i}))
print("Bis zu welcher Untergrenze sollen Werte von der")
print(paste(i,"-ten Komponente entfernt werden?"))
ug<-c(scan(,0,n=1),min(xy{\tt i}))[1]
print("Ab welcher Obergrenze sollen Werte von der")
print(paste(i,"-ten Komponente entfernt werden?"))
og<-c(scan(,0,n=1),max(xy{\tt i}))[1]
h<-xy{\tt i}[ug<=xy{\tt i}&xy{\tt i}<=og]
if(length(h)==0){
cat("ERROR: Sie haetten alle Werte entfernt! Uebergangen!\n")
next
} else xy{\tt i}<-h
}
} else {
print(paste("Die Werte liegen in"))
print(range(xy))
print("Bis zu welcher Untergrenze sollen Werte")
print("entfernt werden?")
ug<-c(scan(,0,n=1),min(xy))[1]
print("Ab welcher Obergrenze sollen Werte")
print("entfernt werden?")
og<-c(scan(,0,n=1),max(xy))[1]
if(xy.is.matrix){
h<-xy[apply(xy<=ug,1,"|")&apply(xy<=og,1,"|"),]
} else {
h<-xy[ug<=xy&xy<=og]
}
if(length(h)==0){
cat("ERROR: Sie haetten alle Werte entfernt! Abbruch\n")
return(xy)
} else xy<-h
}
xy
}
[304:]
<<initialisiere einige Funktionen>>=
limit.values<-function(xy){
xy.is.matrix<-is.matrix(xy)
if(xy.is.matrix){xy.dim<-dim(xy); xy.names<-names(xy)}
xy.is.list<-is.list(xy)
if(xy.is.list){
for(i in 1:length(xy)){
print(paste("Komponente: ",getnames(xy)[i]))
print(paste("Die Werte der",i,"-ten Komponente liegen in"))
print(range(xy{\tt i}))
print("Bis zu welcher Untergrenze sollen KLEINE Werte von der")
print(paste(i,"-ten Komponente angehoben werden?"))
ug<-c(scan(,0,n=1),min(xy{\tt i}))[1]
print("Bis zu welcher Obergrenze sollen GROSSE Werte gesenkt werden?")
og<-c(scan(,0,n=1),max(xy{\tt i}))[1]
xy{\tt i}<-pmin(og,pmax(ug,xy{\tt i}))
}
} else {
print(paste("Die Werte liegen in"))
print(range(xy))
print("Bis zu welcher Untergrenze sollen KLEINE Werte von der")
print("angehoben werden?")
ug<-c(scan(,0,n=1),min(xy))[1]
print("Bis zu welcher Obergrenze sollen GROSSE Werte gesenkt werden?")
og<-c(scan(,0,n=1),max(xy))[1]
xy<-pmin(og,pmax(ug,xy))
if(xy.is.matrix){dim(xy)<-xy.dim; names(xy)<-xy.names}
}
xy
}
[305:]
<<initialisiere einige Funktionen>>=
split.in.eq.classes<-function(xy,anz=4){
if(missing(anz)){
print("Auf wie viele gleich grosse Klassen sollen")
print("die Daten verteilt werden?")
anz<-c(scan(,0,n=1),4)[1]
}
xy<-unlist(xy)
xy<-matrix(xy[1:(floor(length(xy)/anz)*anz)],ncol=anz)
xy<-split(xy,col(xy))
}
[306:]
<<initialisiere einige Funktionen>>=
split.x.by.y<-function(x,y,anz=4){
if(missing(anz)){
print("Wie viele Klassen sollen aus der zweiten")
print("Variablen gebildet werden,")
print("um danach die erste zu klassifizieren?")
anz<-c(scan(,0,n=1),4)[1]
}
h<-quantile(range(y),(1:(anz-1))/anz )
hh<-rep(1,length(y))
for(i in h) hh<-hh+(y>i)
if(length(x)<length(hh)) hh<-hh[1:length(x )]
if(length(x)>length(hh)) x <-x [1:length(hh)]
xy<-split(x,hh)
xy
}
[307:]
<<initialisiere einige Funktionen>>=
bootstrap.experiment<-function(xy,n,ZZ,type){
if(missing(n)){
print("Wie gross soll n sein? n=")
n <-c(scan(,0,n=1),3)[1]
}
if(missing(ZZ)){
print("Zufallsgeneratorstart? ZZ=")
set.seed(ZZ<-c(scan(,0,n=1),13)[1])
}
if(is.matrix(xy)) xy<-split(xy,col(xy))
if(!is.list(xy)) xy<-list(xy)
n.ds<-length(xy)
stichproben<-NULL
for(i in 1:n.ds){
stichproben<-c(stichproben,list(xy{\tt i}))
for(j in 1:n){
stichproben<-c(stichproben,list(sample(xy{\tt i},replace=T)))
}
}
if(missing(type)){
h<-matrix(as.character(rbind(1:n.ds,matrix(letters[1:n],n,n.ds))),n+1,n.ds)
boxplot(stichproben, names=h)
} else {
h<-c("median","mean","3. Quartil","1. Quartil", "s","var",
"Interquartils-Abstand")
if(type=="?"){
print("Welche Statistik interessiert Sie?")
wahl<-Menu(h)
} else {
wahl<-(1:7)[h==type]
}
fkt<-switch(wahl, median, mean, function(x)quantile(x,0.75),
function(x)quantile(x,0.25), function(x)var(x)^0.5,
var, function(x)quantile(x,0.75)-quantile(x,0.25) )
result<-unlist(lapply(stichproben, fkt ))
result<-matrix(result,n+1,n.ds)[-1,]
boxplot(split(result,col(result)), names=as.character(1:n.ds))
}
stichproben
}
[308:]
<<initialisiere einige Funktionen>>=
kt.work<-function(xy,is.xy.kt=F){
<<initialisiere {\tt kt.work}>>
repeat{
<<Auswahl von {\tt kt.work}>>
<<Umsetzung der Wahl von {\tt kt.work}>>
outin()
}
}
[309:]
<<initialisiere {\tt kt.work}>>=
if(missing(xy)) xy<-cbind(c(1,1,1,1,1,1,2,2,2,2,3,3,3,1,2,1,3,2,1),
c(1,2,1,2,2,1,2,1,1,1,1,2,2,2,1,2,1,2,2))
if(!is.xy.kt){
<<erstelle aus Datenmatrix {\tt xy} Kontingenztabelle {\tt kt.rel}, {\tt kt.work}>>
}
kt.abs<-cbind(xy,sum=apply(xy,1,sum))
kt.abs<-rbind(kt.abs,sum=apply(kt.abs,2,sum))
kt.rel<-kt.abs/kt.abs[length(kt.abs)]
<<erstelle aus {\tt kt.rel} Kontingenztabelle bei Unabh\"angigkeit, {\tt kt.work}>>
<<berechne chi-square und kontingenz, {\tt kt.work}>>
[310:]
<<Auswahl von {\tt kt.work}>>=
cat("Auswahl:")
wahl<-menu(c("Abbruch/Ende",
"Tabelle mit Anzahlen ausgeben",
"Tabelle mit relative Haeufigkeiten ausgeben",
"Tabelle (absolut) bei Unabhaengigkeit ausgeben",
"Tabelle (relativ) bei Unabhaengigkeit ausgeben",
"Kontingenzkoeffizienten berechnen",
"Zeilenverteilung ausgeben",
"Spaltenverteilung ausgeben"))
[311:]
<<Umsetzung der Wahl von {\tt kt.work}>>=
if(wahl==0)break
switch(wahl,
break,
{print("Tabelle mit absoluten Haeufigkeiten"); print(kt.abs)},
{print("Tabelle mit relativen Haeufigkeiten"); print(kt.rel)},
{print("Tabelle abs. Haeufigkeiten bei Unabhaengigkeit")
print(kt.ind.abs)},
{print("Tabelle rel. Haeufigkeiten bei Unabhaengigkeit")
print(kt.ind.rel)},
{print("Kontingenzkoeffizient")
print(kontingenz.koef)
print("Chisquare-Wert")
print(chiq)},
{
<<berechne Zeilenverteilung, {\tt kt.work}>>
},
{
<<berechne Spaltenverteilung, {\tt kt.work}>>
}
)
[312:]
<<erstelle aus Datenmatrix {\tt xy} Kontingenztabelle {\tt kt.rel}, {\tt kt.work}>>=
if(is.list(xy)){
xy<-table(xy{\tt 1},xy{\tt 2})
}else{
if(is.matrix(xy)){
xy<-table(xy[,1],xy[,2])
} else { print("ERROR: Input ist keine Datenmatrix");break}
}
[313:]
<<erstelle aus {\tt kt.rel} Kontingenztabelle bei Unabh\"angigkeit, {\tt kt.work}>>=
kt.ind.rel<-outer(kt.rel[,ncol(kt.rel)],kt.rel[nrow(kt.rel),])
kt.ind.abs<-kt.ind.rel*kt.abs[length(kt.abs)]
[314:]
<<berechne chi-square und kontingenz, {\tt kt.work}>>=
h<-kt.ind.abs[-nrow(kt.rel),-ncol(kt.rel)]
chiq<-sum((kt.abs[-nrow(kt.rel),-ncol(kt.rel)]-h)^2/h)
kontingenz.koef<-(chiq/(kt.abs[length(kt.abs)]-chiq))^0.5
[315:]
<<berechne Zeilenverteilung, {\tt kt.work}>>=
print("Welche Zeile?")
i<-scan(,0,n=1)
cat("absolute Haeufigkeiten\n")
print(kt.abs[i,])
cat("relative Haeufigkeiten\n")
print(kt.rel[i,]/kt.rel[i,ncol(kt.rel)])
[316:]
<<berechne Spaltenverteilung, {\tt kt.work}>>=
print("Welche Spalte?")
j<-scan(,0,n=1)
cat("absolute Haeufigkeiten\n")
print(kt.abs[,j])
cat("relative Haeufigkeiten\n")
print(kt.rel[,j]/kt.rel[nrow(kt.rel),j])
[317:]
<<initialisiere einige Funktionen>>=
getnames<-function(xy){
if(is.list(xy)){
if(is.null(names(xy))){
return(as.character(1:length(xy)))
} else return(names(xy))
}
if(is.matrix(xy)){
if(is.null(dimnames(xy){\tt 2})){
return(as.character(1:dim(xy)[2]))
} else {
return(dimnames(xy){\tt 2})
}
}
return("x")
}
[318:]
<<initialisiere einige Funktionen>>=
binomial.calculator<-function(x.F,n,p){
<<checke Eingabe von {\tt binomial.calculator}>>
<<erstelle erste Ausgabe von {\tt binomial.calculator}>>
repeat{
<<erfrage Wunsch, von {\tt binomial.calculator}>>
<<setze Wunsch um, von {\tt binomial.calculator}>>
}
}
[319:]
<<checke Eingabe von {\tt binomial.calculator}>>=
print("binomial.calculator start")
if(missing(n)){
print("Bitte n eingeben! (Default: n=1) n=?")
n<-c(scan(,0,n=1),1)[1]
}
if(missing(p)){
print("Bitte p eingeben! (Default: p=0.5) p=?")
p<-c(scan(,0,n=1),.5)[1]
}
[320:]
<<erstelle erste Ausgabe von {\tt binomial.calculator}>>=
if(missing(x.F)){
a<-1
<<berechne Statistiken von {\tt binomial.calculator}>>
} else {
is.F.x<-T
if(any(x.F>1)) is.F.x<-F
if(all(floor(x.F)==x.F)) is.F.x <-F
if(!is.F.x){
x<-x.F
print("Werte der Wahrscheinlichkeitsfunktion:")
print(cbind(x=x,"f(x)"=dbinom(x,n,p)))
print("Werte der Verteilungsfunktion:")
print(cbind(x=x,"F(x)"=pbinom(x,n,p)))
}
if(is.F.x){
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qbinom(F.x,n,p)))
}
}
[321:]
<<berechne Statistiken von {\tt binomial.calculator}>>=
if(a==1){ print( c("E(X)"=n*p, "Var(X)"=n*p*(1-p), sigma=(n*p*(1-p))^0.5,
"E(X)-2sigma"=n*p-2*(n*p*(1-p))^0.5,
"E(X)-sigma"=n*p- (n*p*(1-p))^0.5,
"E(X)+sigma"=n*p+ (n*p*(1-p))^0.5,
"E(X)+2sigma"=n*p+2*(n*p*(1-p))^0.5) )
} else { print( c("E(aX)"=n*p*a, "Var(aX)"=n*p*(1-p)*a^2,
sigma=(n*p*(1-p))^0.5*a,
"E(aX)-2sigma"=n*p*a-2*(n*p*(1-p))^0.5*a,
"E(aX)-sigma"=n*p*a- (n*p*(1-p))^0.5*a,
"E(aX)+sigma"=n*p*a+ (n*p*(1-p))^0.5*a,
"E(aX)+2sigma"=n*p*a+2*(n*p*(1-p))^0.5*a) )
}
[322:]
<<erfrage Wunsch, von {\tt binomial.calculator}>>=
print("Auswahl von binomial.calculator")
auswahl<-c("Ende","n eingeben","p eingeben",
"f(x) und F(x) berechnen","Quantile berechnen",
"Statistiken von aX berechnen","Plot erstellen")
wahl<-Menu(auswahl)
[323:]
<<setze Wunsch um, von {\tt binomial.calculator}>>=
switch(wahl,
break,
{
print("Bitte n eingeben! (Default: n=1) n=?")
n<-c(scan(,0,n=1),1)[1]
},
{
print("Bitte p eingeben! (Default: p=0.5) p=?")
p<-c(scan(,0,n=1),.5)[1]
},
{
print("Bitte x eingeben! x=?")
x<-scan(,0,n=n+1); if(0==length(x)) x<-0:n
print("Werte der Wahrscheinlichkeits- und der Verteilungsfunktion:")
print(cbind(x=x,"f(x)"=dbinom(x,n,p),"F(x)"=pbinom(x,n,p)))
},
{
print("Bitte Wahrscheinlichkeiten eingeben! F(x)=?")
F.x<-scan(,0,n=n+1)
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qbinom(F.x,n,p)))
},
{
print("Um welchen Faktor a soll die Zufallsvariable gestreckt werden?")
print("(Default: 1)")
a<-c(scan(,0,n=1),1)[1]
<<berechne Statistiken von {\tt binomial.calculator}>>
},
{
x<-0:n ; F.x<-dbinom(x,n,p)
h<-F.x>.0001 ; x<-x[h] ; F.x<-F.x[h]
plot(x,F.x,type="n",xlab="x",ylab="f(x)")
segments(x,0,x,F.x)
}
)
Mit dieser Funktion kann der Bediener einige Operationen rund um die geometrische Verteilung durchführen.
[324:]
<<initialisiere einige Funktionen>>=
geometric.calculator<-function(x.F,p){
<<checke Eingabe von {\tt geometric.calculator}>>
<<erstelle erste Ausgabe von {\tt geometric.calculator}>>
repeat{
<<erfrage Wunsch, von {\tt geometric.calculator}>>
<<setze Wunsch um, von {\tt geometric.calculator}>>
}
}
[325:]
<<checke Eingabe von {\tt geometric.calculator}>>=
print("geometric.calculator start")
if(missing(p)){
print("Bitte p eingeben! (Default: p=0.5) p=?")
p<-c(scan(,0,n=1),.5)[1]
}
[326:]
<<erstelle erste Ausgabe von {\tt geometric.calculator}>>=
if(missing(x.F)){
<<berechne Statistiken von {\tt geometric.calculator}>>
} else {
is.F.x<-T
if(any(x.F>1)) is.F.x<-F
if(all(floor(x.F)==x.F)) is.F.x <-F
if(!is.F.x){
x<-x.F
print("Werte der Wahrscheinlichkeitsfunktion:")
print(cbind(x=x,"f(x)"=dgeom(x,p)))
print("Werte der Verteilungsfunktion:")
print(cbind(x=x,"F(x)"=pgeom(x,p)))
}
if(is.F.x){
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qgeom(F.x,p)))
}
}
[327:]
<<berechne Statistiken von {\tt geometric.calculator}>>=
q<-1-p
print( c("E(X)"=q/p, "Var(X)"=q/(p*p), sigma=q^0.5/p,
"E(X)-2sigma"=q/p-2*q^0.5/p,
"E(X)-sigma"=q/p- q^0.5/p,
"E(X)+sigma"=q/p+ q^0.5/p,
"E(X)+2sigma"=q/p+2*q^0.5/p) )
[328:]
<<erfrage Wunsch, von {\tt geometric.calculator}>>=
print("Auswahl von geometric.calculator")
auswahl<-c("Ende","p eingeben",
"f(x) und F(x) berechnen","Quantile berechnen",
"Statistiken berechnen","Plot erstellen")
wahl<-Menu(auswahl)
[329:]
<<setze Wunsch um, von {\tt geometric.calculator}>>=
switch(wahl,
break,
{
print("Bitte p eingeben! (Default: p=0.5) p=?")
p<-c(scan(,0,n=1),.5)[1]
},
{
print("Bitte x eingeben! x=?")
n<-(1-p)/p+5*(1-p)^0.5/p
x<-scan(,0,n=n+1); if(0==length(x)) x<-0:n
print("Werte der Wahrscheinlichkeits- und der Verteilungsfunktion:")
print(cbind(x=x,"f(x)"=dgeom(x,p),"F(x)"=pgeom(x,p)))
},
{
print("Bitte Wahrscheinlichkeiten eingeben! F(x)=?")
n<-(1-p)/p+3.5*(1-p)^0.5/p
F.x<-scan(,0,n=n+1)
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qgeom(F.x,p)))
},
{
<<berechne Statistiken von {\tt geometric.calculator}>>
},
{
n<-(1-p)/p+5*(1-p)^0.5/p
x<-0:n ; F.x<-dgeom(x,p)
h<-F.x>.0001 ; x<-x[h] ; F.x<-F.x[h]
plot(x,F.x,type="n",xlab="x",ylab="f(x)")
segments(x,0,x,F.x)
}
)
Mit dieser Funktion kann der Bediener einige Operationen
rund um die Exponentialverteilung durchführen.
[330:]
<<initialisiere einige Funktionen>>=
exponential.calculator<-function(x.F,lambda){
<<checke Eingabe von {\tt exponential.calculator}>>
<<erstelle erste Ausgabe von {\tt exponential.calculator}>>
repeat{
<<erfrage Wunsch, von {\tt exponential.calculator}>>
<<setze Wunsch um, von {\tt exponential.calculator}>>
}
}
[331:]
<<checke Eingabe von {\tt exponential.calculator}>>=
print("exponential.calculator start")
if(missing(lambda)){
print("Bitte lambda eingeben! (Default: lambda=1) lambda=?")
lambda<-c(scan(,0,n=1),1)[1]
}
[332:]
<<erstelle erste Ausgabe von {\tt exponential.calculator}>>=
if(missing(x.F)){
<<berechne Statistiken von {\tt exponential.calculator}>>
} else {
is.F.x<-T
if(any(x.F>1)) is.F.x<-F
if(all(floor(x.F)==x.F)) is.F.x <-F
if(!is.F.x){
x<-x.F
print("Werte der Dichtefunktion:")
print(cbind(x=x,"f(x)"=dexp(x,lambda)))
print("Werte der Verteilungsfunktion:")
print(cbind(x=x,"F(x)"=pexp(x,lambda)))
}
if(is.F.x){
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qexp(F.x,lambda)))
}
}
[333:]
<<berechne Statistiken von {\tt exponential.calculator}>>=
print( c("E(X)"=1/lambda,
"Var(X)"=1/(lambda*lambda), sigma=1/lambda,
"E(X)-2sigma"=1/lambda-2*1/lambda,
"E(X)-sigma"=1/lambda- 1/lambda,
"E(X)+sigma"=1/lambda+ 1/lambda,
"E(X)+2sigma"=1/lambda+2*1/lambda) )
[334:]
<<erfrage Wunsch, von {\tt exponential.calculator}>>=
print("Auswahl von exponential.calculator")
auswahl<-c("Ende","lambda eingeben",
"f(x) und F(x) berechnen","Quantile berechnen",
"Statistiken berechnen","Plot erstellen")
wahl<-Menu(auswahl)
[335:]
<<setze Wunsch um, von {\tt exponential.calculator}>>=
switch(wahl,
break,
{
print("Bitte lambda eingeben! (Default: lambda=1) lambda=?")
lambda<-c(scan(,0,n=1),1)[1]
},
{
print("Bitte x eingeben! x=?")
x<-scan(,0); if(0==length(x)) x<-(0:20)/20*(3/lambda)
print("Werte der Dichtefunktion und der Verteilungsfunktion:")
print(cbind(x=x,"f(x)"=dexp(x,lambda),"F(x)"=pexp(x,lambda)))
},
{
print("Bitte Wahrscheinlichkeiten eingeben! F(x)=?")
F.x<-scan(,0)
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qexp(F.x,lambda)))
},
{
<<berechne Statistiken von {\tt exponential.calculator}>>
},
{
x<-(1:200)/lambda/50 ; F.x<-dexp(x,lambda)
h<-F.x>.0001 ; x<-x[h] ; F.x<-F.x[h]
plot(x,F.x,type="l",xlab="x",ylab="f(x)")
}
)
Mit dieser Funktion kann der Bediener einige Operationen
rund um die Poissonverteilung durchführen.
[336:]
<<initialisiere einige Funktionen>>=
poisson.calculator<-function(x.F,lambda){
<<checke Eingabe von {\tt poisson.calculator}>>
<<erstelle erste Ausgabe von {\tt poisson.calculator}>>
repeat{
<<erfrage Wunsch, von {\tt poisson.calculator}>>
<<setze Wunsch um, von {\tt poisson.calculator}>>
}
}
[337:]
<<checke Eingabe von {\tt poisson.calculator}>>=
print("poisson.calculator start")
if(missing(lambda)){
print("Bitte lambda eingeben! (Default: lambda=1) lambda=?")
lambda<-c(scan(,0,n=1),1)[1]
}
[338:]
<<erstelle erste Ausgabe von {\tt poisson.calculator}>>=
if(missing(x.F)){
<<berechne Statistiken von {\tt poisson.calculator}>>
} else {
is.F.x<-T
if(any(x.F>1)) is.F.x<-F
if(all(floor(x.F)==x.F)) is.F.x <-F
if(!is.F.x){
x<-x.F
print("Werte der Dichtefunktion:")
print(cbind(x=x,"f(x)"=dpois(x,lambda)))
print("Werte der Verteilungsfunktion:")
print(cbind(x=x,"F(x)"=ppois(x,lambda)))
}
if(is.F.x){
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qpois(F.x,lambda)))
}
}
[339:]
<<berechne Statistiken von {\tt poisson.calculator}>>=
print( c("E(X)"=lambda,
"Var(X)"=lambda, sigma=lambda^0.5,
"E(X)-2sigma"=lambda-2*lambda^0.5,
"E(X)-sigma"=lambda- lambda^0.5,
"E(X)+sigma"=lambda+ lambda^0.5,
"E(X)+2sigma"=lambda+2*lambda^0.5) )
[340:]
<<erfrage Wunsch, von {\tt poisson.calculator}>>=
print("Auswahl von poisson.calculator")
auswahl<-c("Ende","lambda eingeben",
"f(x) und F(x) berechnen","Quantile berechnen",
"Statistiken berechnen","Plot erstellen")
wahl<-Menu(auswahl)
[341:]
<<setze Wunsch um, von {\tt poisson.calculator}>>=
switch(wahl,
break,
{
print("Bitte lambda eingeben! (Default: lambda=1) lambda=?")
lambda<-c(scan(,0,n=1),1)[1]
},
{
print("Bitte x eingeben! x=?")
x<-scan(,0); if(0==length(x)) x<-qpois(.01,lambda):qpois(.99,lambda)
print("Werte der Wahrscheinlichkeits- und der Verteilungsfunktion:")
print(cbind(x=x,"f(x)"=dpois(x,lambda),"F(x)"=ppois(x,lambda)))
},
{
print("Bitte Wahrscheinlichkeiten eingeben! F(x)=?")
F.x<-scan(,0)
print("Quantile:")
print(cbind("eingegeben:F(x)"=F.x,x=qpois(F.x,lambda)))
},
{
<<berechne Statistiken von {\tt poisson.calculator}>>
},
{
x<-qpois(.01,lambda):qpois(.99,lambda); F.x<-dpois(x,lambda)
h<-F.x>.00001 ; x<-x[h] ; F.x<-F.x[h]
plot(x,F.x,type="n",xlab="x",ylab="f(x)")
segments(x,F.x,x,0)
}
)
Mit dieser Funktion kann der Bediener einige Operationen
rund um die Normalverteilung durchführen und graphisch verfolgen.
[342:]
<<initialisiere einige Funktionen>>=
normal.calculator<-function(x.F,mu,sigma){
<<checke Eingabe von {\tt normal.calculator}>>
<<erstelle erste Ausgabe von {\tt normal.calculator}>>
repeat{
<<erfrage Wunsch, von {\tt normal.calculator}>>
<<setze Wunsch um, von {\tt normal.calculator}>>
}
}
[343:]
<<checke Eingabe von {\tt normal.calculator}>>=
print("normal.calculator start")
if(missing(mu)){
<<setze Mittel; {\tt normal.calculator}>>
}
if(missing(sigma)){
<<setze Variabilit\"at fest; {\tt normal.calculator}>>
}
if(missing(x.F)) x.F<-mu+(-3:3)*sigma
[344:]
<<setze Mittel; {\tt normal.calculator}>>=
print("Bitte Mittel eingeben! (Default: mu=0) mu=?")
mu<-c(scan(,0,n=1),0)[1]
[345:]
<<setze Variabilit\"at fest; {\tt normal.calculator}>>=
print("sigma ist festzulegen!")
print("Wenn Sie")
print(" Standardabweichung eingeben wollen, bitte 0 eingeben,")
print(" Varianz eingeben wollen, bitte 1 eingeben!")
print(" (Default -- leere Eingabe: 0)")
h<-c(scan(,0,n=1),0)[1]
if(h!=1){
print("Bitte STANDARDABWEICHUNG festlegen! (Default: 1) sigma=?")
sigma<-abs(c(scan(,0,n=1),1)[1])
} else {
print("Bitte VARIANZ festlegen! (Default: 1) sigma^2=?")
sigma<-abs(c(scan(,0,n=1),1)[1])^0.5
}
[346:]
<<erstelle erste Ausgabe von {\tt normal.calculator}>>=
if(missing(x.F)){
<<berechne Statistiken von {\tt normal.calculator}>>
<<zeige Plots: {\tt normal.calculator}>>
} else {
is.F.x<-T
if(any(x.F>1)) is.F.x<-F
if(all(floor(x.F)==x.F)) is.F.x <-F
if(!is.F.x){
x<-x.F
print("Werte der Dichtefunktion und der Verteilungsfunktion:")
print(cbind(x=x,"f(x)"=dnorm(x,mu,sigma),"F(x)"=pnorm(x,mu,sigma)))
}
if(is.F.x){
print("Quantile:")
print(cbind("F(x)"=x.F,x=qnorm(x.F,mu,sigma)))
}
}
[347:]
<<berechne Statistiken von {\tt normal.calculator}>>=
print( c("E(X)"=mu, "Var(X)"=sigma^2, sigma=sigma,
"E(X)-2sigma"=mu-2*sigma,
"E(X)-sigma"=mu- sigma,
"E(X)+sigma"=mu+ sigma,
"E(X)+2sigma"=mu+2*sigma) )
[348:]
<<erfrage Wunsch, von {\tt normal.calculator}>>=
print("Auswahl von normal.calculator")
auswahl<-c("Ende","Mittel festsetzen","Variabilitaet festlegen",
"f(x), F(x), (1-F(x)) berechnen","Quantile berechnen",
"X verschieben", "X skalieren")
wahl<-Menu(auswahl)
[349:]
<<setze Wunsch um, von {\tt normal.calculator}>>=
switch(wahl,
break,
{
<<setze Mittel; {\tt normal.calculator}>>
<<berechne Statistiken von {\tt normal.calculator}>>
<<zeige Plots: {\tt normal.calculator}>>
},
{
<<setze Variabilit\"at fest; {\tt normal.calculator}>>
<<berechne Statistiken von {\tt normal.calculator}>>
<<zeige Plots: {\tt normal.calculator}>>
},
{
print("Bitte x eingeben! x=?")
x.F<-scan(,0)
if(0==length(x.F)) x.F<-mu+(-3:3)*sigma
<<berechne Statistiken von {\tt normal.calculator}>>
<<zeige Plots: {\tt normal.calculator}>>
print("Dichte- und Verteilungsfunktion:")
print(cbind(x =x.F,
"f(x)" =dnorm(x.F,mu,sigma),
"F(x)" =pnorm(x.F,mu,sigma),
"1-F(x)" =1-pnorm(x.F,mu,sigma)))
},
{
print("Bitte Wahrscheinlichkeiten eingeben! F(x)=?")
Fx<-scan(,0); if(length(Fx)==0) Fx<-c(.05,.1,.25,.5,.75,.9,.95)
<<berechne Statistiken von {\tt normal.calculator}>>
print("Quantile:")
x.F<-qnorm(Fx,mu,sigma)
print(cbind("F(x)"=Fx,x=x.F))
<<zeige Plots: {\tt normal.calculator}>>
},
{
print("Die Zufallsvariable wird um b verschoben.")
print("Bitte b eingeben (Default: b==0) b=?")
b<-c(scan(,0,n=1),0)[1]
mu<-mu+b
<<berechne Statistiken von {\tt normal.calculator}>>
<<zeige Plots: {\tt normal.calculator}>>
},
{
print("Die Zufallsvariable wird um a gestreckt.")
print("Bitte a eingeben (Default: a==1) a=?")
a<-c(scan(,0,n=1),1)[1]
if(a==0){ print("ERROR: a==0") } else {
mu<-a*mu
sigma<-abs(a)*sigma
<<berechne Statistiken von {\tt normal.calculator}>>
<<zeige Plots: {\tt normal.calculator}>>
}
}
)
[350:]
<<zeige Plots: {\tt normal.calculator}>>=
x<-x.F
xmin<-min(-3.5,qnorm(.01,mu,sigma),x)
xmax<-max(3.5,qnorm(.99,mu,sigma),x)
z0<-(x-mu)/sigma
p.z0<-pnorm(z0)
xx<-seq(from=mu-3*sigma,to=mu+3*sigma,length=150)
xx<-xx[xmin<=xx&xx<=xmax]
Fxx<-pnorm(xx,mu,sigma)
fxx<-dnorm(xx,mu,sigma)
zz<-seq(from=-3,to=3,length=150)
Fzz<-pnorm(zz)
fzz<-dnorm(zz)
fmax<-max(fxx,fzz)
par(mfrow=c(3,2))
# PLOT 1,1
plot(1,xlab="",ylab="",ylim=c(0,1), xlim=c(xmin,xmax), type="n")
lines(xx,Fxx)
segments(par()$usr[1],0,xx[1],0)
segments(par()$usr[2],1,xx[length(xx)],1)
abline(v=x)
title("F(x)")
# PLOT 1,2
plot(1,xlab="",ylab="",ylim=c(0,fmax), xlim=c(xmin,xmax), type="n")
lines(xx,fxx)
segments(par()$usr[1],0,xx[1],0)
segments(par()$usr[2],0,xx[length(xx)],0)
abline(v=x)
title("f(x)")
# PLOT 2,1
plot(1,type="n",xlim=c(xmin,xmax),ylim=c(xmin,xmax),xlab="",ylab="")
abline(0,1,lty=2)
abline(mu,sigma,lty=4)
legend(xmin,xmax,legend=c("f(x)=x","x=sigma*z+mu"),lty=c(2,4))
h<-xmin<=z0 & z0<=xmax
segments(x,xmax,x,x)
segments(x,x,pmin(xmax,pmax(z0,xmin)),x)
if(any(h))segments(z0[h],xmin,z0[h],x[h])
title("Transformation")
# PLOT 2,2
plot(1,type="n",xlim=c(xmin,xmax),ylim=c(xmin,xmax),xlab="",ylab="")
abline(0,1,lty=2)
abline(mu,sigma,lty=4)
legend(xmin,xmax,legend=c("f(x)=x","x=sigma*z+mu"),lty=c(2,4))
segments(x,xmax,x,x)
segments(x,x,pmin(xmax,pmax(z0,xmin)),x)
if(any(h))segments(z0[h],xmin,z0[h],x[h])
title("Transformation")
# PLOT 3,1
plot(1,xlab="",ylab="",ylim=c(0,1), xlim=c(xmin,xmax), type="n")
lines(zz,Fzz)
segments(par()$usr[1],0,zz[1],0)
segments(par()$usr[2],1,zz[length(zz)],1)
if(any(h))segments(z0[h],1,z0[h],p.z0[h])
if(any(h))segments(z0[h],p.z0[h],xmin,p.z0[h])
title("Verteilungsfunktion von N(0,1)")
# PLOT 3,2
plot(1,xlab="",ylab="",ylim=c(0,fmax), xlim=c(xmin,xmax), type="n")
lines(zz,fzz)
segments(par()$usr[1],0,zz[1],0)
segments(par()$usr[2],0,zz[length(zz)],0)
if(any(h))abline(v=z0[h])
title("Dichte von N(0,1)")
par(mfrow=c(1,1))
[351:]
<<initialisiere einige Funktionen>>=
demo.Laplace<-function(n=10,p=0.5){
<<initialisiere {\tt demo.Laplace}>>
repeat{
<<ermittle {\tt n} und {\tt p}, {\tt demo.Laplace}>>
<<erstelle ersten Plot, {\tt demo.Laplace}>>
<<erstelle zweiten Plot, {\tt demo.Laplace}>>
<<stelle Ende fest, {\tt demo.Laplace}>>
}
<<schliesse {\tt demo.Laplace}>>
}
Der graphische Device wird zweigeteilt
[352:]
<<initialisiere {\tt demo.Laplace}>>=
par(mfrow=c(1,2))
[353:]
<<ermittle {\tt n} und {\tt p}, {\tt demo.Laplace}>>=
cat("Geben Sie n ein! n=?\n")
n<-max(1,floor(c(scan(,0,n=1),n)[1]))
cat("Geben Sie p ein! p=?\n")
p<-c(scan(,0,n=1),p)[1]
p<-max(.0001,min(.9999,p))
[354:]
<<stelle Ende fest, {\tt demo.Laplace}>>=
cat("Wollen Sie die Funktion beenden? (j=ja)\n")
wahl<-c(scan(,"",n=1),"n")[1]
if(wahl=="j") break
Stichworte zum ersten Plot:
NV-Parameter bestimmen, geeigneten Bereich für
x
finden,
WS von
x
ermitteln, zu kleine Werte wieder entfernen,
xnorm
:
x
-Werte für die NV finden, Dichtewerte bestimmen, Plot erstellen.
[355:]
<<erstelle ersten Plot, {\tt demo.Laplace}>>=
sigma<-((mu<-n*p)*(1-p))^0.5
x<-0:n; if(n>19)x<-x[x>mu-5*sigma&x<mu+5*sigma]
y<-dbinom(x,n,p)
if(n>19){
x<-x[y>0.0001]
y<-y[y>0.0001]
}
xnorm<-seq(from=mu-5*sigma,to=mu+5*sigma,length=250)
xnorm<-xnorm[xnorm>=min(x)&xnorm<=max(x)]
ynorm<-dnorm(xnorm,mu,sigma)
ymax<-max(y,ynorm)
plot(x,y,ylab="f(x)",ylim=c(0,ymax))
segments(x,0,x,y)
lines(xnorm,ynorm)
title(paste("WS-Funktion/NV-Dichte\nn=",n,", p=",p))
Stichworte zum zweiten Plot:
zu
x
korrespondierende Approximationswerte ermitteln,
Fehler berechnen (
d
),
kumulierte Fehler (
cd
),
Plot erstellen.
[356:]
<<erstelle zweiten Plot, {\tt demo.Laplace}>>=
d <-y- (pnorm(x,mu,sigma)-pnorm(x-1,mu,sigma))
cd<-pbinom(x,n,p)-pnorm(x,mu,sigma)
plot(x,cd,ylab="error",ylim=c(min(0,d,cd),max(0,d,cd)))
segments(x,0,x,d)
abline(h=0)
title("Fehler:f()-Approximation\n(Punkte:Fehler,kumuliert)")
Der graphische Device wird wieder in den Urzustand versetzt.
[357:]
<<schliesse {\tt demo.Laplace}>>=
par(mfrow=c(1,1))
Die Funktion
demo.zgws
demonstiert den Zentralen Grenzwertsatz.
Die Funktion demo.zgws besteht im Kern aus drei Schritten:
Relevante Inputgrößen: Die Verteilung, aus denen die einzelnen Xi gezogen werden, wird über das erste Argument ( model ) spezifiziert. Das Argument bestimmt den Namensbestandteil der entsprechenden Splus-Funktion. Über das letzte Argument ... lassen sich weitere Argumente der Funktion zur Realisation der Zufallsvariablen mitgeben. n gibt den Umfang jeder der Stichproben an (Default: 10). Dann ist die Anzahl der Stichproben, aus denen Mittel berechnet werden, ( runs ) festzulegen (Deault: 100).
[358:]
<<initialisiere einige Funktionen>>=
demo.zgws<-function(model="norm",n=10,runs=100,...){
<<body of {\tt demo.zgws}>>
}
[359:]
<<body of {\tt demo.zgws}>>=
<<Initialisierung von {\tt demo.zgws}>>
repeat{
<<ziehe Stichproben {\tt demo.zgws}>>
<<berechne Mittel {\tt demo.zgws}>>
<<erstelle Plots {\tt demo.zgws}>>
<<erfrage W\"unsche {\tt demo.zgws}>>
}
<<Ende-Behandlung von {\tt demo.zgws}>>
[360:]
<<Initialisierung von {\tt demo.zgws}>>=
ynorm<-pnorm(xnorm<-(-80:80)/20)
<<erfrage W\"unsche {\tt demo.zgws}>>
par(mfrow=1:2)
[361:]
<<Ende-Behandlung von {\tt demo.zgws}>>=
par(mfrow=c(1,1))
[362:]
<<ziehe Stichproben {\tt demo.zgws}>>=
x<-eval(parse(text=realisiere.stpr))
x<-matrix(x,n,runs)
[363:]
<<berechne Mittel {\tt demo.zgws}>>=
xsum<-apply(x,2,sum)
xsum<-xsum-mean(xsum)
xsum<-xsum/sqrt(var(xsum))
[364:]
<<erstelle Plots {\tt demo.zgws}>>=
plot(c(-4,4),c(0,1),type="n",xlab="transformierte Mittel",ylab="F.dach, Phi")
points(sort(xsum),(1:length(xsum))/length(xsum))
lines(xnorm,ynorm)
text(-3,0.9,legend)
text(-3,0.8,paste("n =",n))
title("empirische Verteilung\ntransformierte Mittel")
pfade<-apply(x,2,cumsum)/matrix(1:n,n,runs)
yminmax<-range(pfade[,1:min(15,runs)])
plot(1,xlim=c(1,n),ylim=yminmax,xlab="x",ylab="Mittel bis x")
title("Entwicklung der Mittel")
for(i in 1:min(15,runs)) lines(1:n,pfade[,i])
[365:]
<<erfrage W\"unsche {\tt demo.zgws}>>=
cat("Modell / Aus welcher Verteilung sollen\n")
cat("Stichproben gezogen werden (Default: Normalverteilung)?\n")
wahl<-Menu(c(
"Abbruch/Ende",
"Normalverteilung",
"Exponentialverteilung",
"Gleichverteilung",
"Cauchy-Verteilung",
"Binomialverteilung",
"Poisson-Verteilung"))
if(wahl==0) break
switch(wahl,
break,
{
cat("Bitte Mittel der Normalverteilung eingeben (Default: 0)!\n")
mue<-c(scan(,0,n=1),0)[1]
cat("Bitte Standardabweichung eingeben (Default: 1)!\n")
sigma<-c(scan(,0,n=1),1)[1]
if(sigma<=0){cat("ERROR: sigma nicht positiv!\n"); sigma<-1}
realisiere.stpr<-"rnorm(n*runs,mue,sigma)"
legend<-paste("NV(",mue,",",sigma,")",sep="")
},{
cat("Bitte LAMBDA der Exponentialverteilung eingeben (Default: 1)!\n")
lambda<-c(scan(,0,n=1),1)[1]
if(lambda<=0){cat("ERROR: lambda nicht positiv!\n"); lambda<-1}
realisiere.stpr<-"rexp(n*runs,lambda)"
legend<-paste("Exp(",lambda,")",sep="")
},{
cat("Bitte Untergrenze der Gleichverteilung eingeben (Default: 0)!\n")
ug<-c(scan(,0,n=1),0)[1]
cat("Bitte Obergrenze eingeben (Default: 1)!\n")
og<-c(scan(,0,n=1),1)[1]
if(og<=ug){cat("ERROR: Grenzen falsch!\n"); og<-1+ug<-0}
realisiere.stpr<-"runif(n*runs,ug,og)"
legend<-paste("U(",ug,",",og,")",sep="")
},{
cat("Bitte Zentrum der Cauchy-Verteilung eingeben (Default: 0)!\n")
mue<-c(scan(,0,n=1),0)[1]
cat("Bitte Skalenparameter eingeben (Default: 1)!\n")
sigma<-c(scan(,0,n=1),1)[1]
if(sigma<=0){cat("ERROR: Skalenparameter nicht positiv!\n"); sigma<-1}
realisiere.stpr<-"rcauchy(n*runs,mue,sigma)"
legend<-paste("Cauchy(",mue,",",sigma,")",sep="")
},{
cat("Bitte n der Binomialverteilung eingeben (Default: 1)!\n")
nbin<-floor(c(scan(,0,n=1),1)[1])
cat("Bitte p eingeben (Default: 0.5)!\n")
p<-c(scan(,0,n=1),0.5)[1]
if(nbin<=0){cat("ERROR: n nicht positiv!\n"); nbin<-1}
if(p<=0|p>=1){cat("ERROR: p falsch!\n"); p<-0.5}
realisiere.stpr<-"rbinom(n*runs,nbin,p)"
legend<-paste("Binom(",nbin,",",p,")",sep="")
},{
cat("Bitte LAMBDA der Poisson-Verteilung eingeben (Default: 1)!\n")
lambda<-c(scan(,0,n=1),1)[1]
if(lambda<=0){cat("ERROR: lambda nicht positiv!\n"); lambda<-1}
realisiere.stpr<-"rpois(n*runs,lambda)"
legend<-paste("Poisson(",lambda,")",sep="")
}
) # end of switch
cat("Bitte Umfang der einzelnen Stichproben eingeben! (Default: 5)\n")
n<-max(1,min(floor(c(scan(n=1),5)[1]),100000))
cat("Bitte Umfang der Wiederholungen eingeben! (Default: 100)\n")
runs<-max(1,min(floor(c(scan(n=1),100)[1]),10000))
cat("Bitte Start des Zufallszahlengenerators eingeben! (Default: 13)\n")
set.seed(max(1,min(floor(c(scan(n=1),13)[1]),999)))
In diesem Abschnitt wird die Funktion qq.x.model definiert, die zu einem Datensatz einen QQ-Plot bezüglich einer der folgenden Verteilung erstellt:
| Nr. | Verteilung | model | parameter |
| 1 | Normalverteilung | norm |
parameter ==
|
| 2 | Exponentialverteilung | exp |
parameter ==
|
| 3 | Poisson-Verteilung | pois |
parameter ==
|
| 4 | geometrische Verteilung | geom | parameter == p |
| 5 | Lognormalverteilung | lnorm |
parameter ==
E |
[366:]
<<initialisiere einige Funktionen>>=
qq.x.model<-function(x,model,parameter){
<<bereite Input von {\tt qq.x.model} auf>>
<<bestimme $y$-Werte f\"ur QQ-Plot, {\tt qq.x.model}>>
<<zeichne QQ-Plot, {\tt qq.x.model}>>
}
[367:]
<<bereite Input von {\tt qq.x.model} auf>>=
mods<-c("norm","exp","pois","geom","lnorm")
if(missing(model)){
cat("Welches Modell?\n")
wahl<-Menu(c("Normalverteilung",
"Exponentialverteilung",
"Poisson-Verteilung",
"geometrische Verteilung",
"Lognormalverteilung"))
model<-mods[wahl]
}
model<-model[1]
if(is.character(model[1])) model<-(1:length(mods))[mods==model]
if(0==length(model) || 1<length(model) || !any((1:length(mods))==model)){
print("ERROR: Modell nicht im Angebot!"); break
}
if(missing(parameter)){
parameter<-switch(model,
c(mean(x),var(x)^0.5), # norm
1/mean(x),# exp
mean(x), # Poisson
length(x)/(sum(x)+length(x)), # geom
c(mean(log(x)),var(log(x))^0.5) # lnorm
)
}
[368:]
<<bestimme $y$-Werte f\"ur QQ-Plot, {\tt qq.x.model}>>=
p<-((1:length(x))-0.5)/length(x)
y<-switch(model,
qnorm(p,parameter[1],parameter[2]), # norm
qexp(p,parameter), # exp
qpois(p,parameter), # Poisson
qgeom(p,parameter), # geom
qlnorm(p,parameter[1],parameter[2]) # lnorm
)
[369:]
<<zeichne QQ-Plot, {\tt qq.x.model}>>=
x<-sort(x)
if(model!=5){
plot(x,y,xlab="Daten",ylab=mods[model])
}else{
plot(x,y,log="xy",xlab="Daten",ylab=mods[model])
}
abline(0,1)
title("QQ-Plot")
Um alle Punkte für den Plot zu verwenden, wird
F.dach
um 1/(2n) nach
unten gezogen. Für die Schätzung der Geraden werden nur die 80 % kleinsten
Beobachtungen verwendet. Geschätzt wird mit
l1fit
ohne Achsenabschnitt.
[370:]
<<initialisiere einige Funktionen>>=
identify.exp<-function(x,cut.off=4/5){
n<-length(x)
x<- sort(x)
y<- -log(1-((1:n)-.5)/n)
plot(x,y,xlab="x",ylab="-log(1-F.dach(x))")
h<-floor(n*cut.off)
r<-c(l1fit(x[1:h],y[1:h],F)$coef)
abline(r)
names(r)<-"lambda.dach"
r
}
[371:]
<<initialisiere einige Funktionen>>=
identify.pois<-function(x){
y<-table(x); h<- y>1
y<-y[h]/length(x)
x<-as.numeric(names(y))
y<-log(y)+log(gamma(x+1))
plot(x,y,xlab="x",ylab="")
r<-c(l1fit(x,y)$coef)
abline(r)
r<- c(-r[1],exp(r[2]))
names(r)<-c("lambda.dach1","lambda.dach2")
r
}
Eine Funktion zur Schätzung von
p
bei geom. Verteilung.
[372:]
<<initialisiere einige Funktionen>>=
geom.p.est<-function(x){
n<-length(x)
yy_table(x); xx_as.numeric(names(yy))
yy_as.vector(yy); names(yy)_NULL
plot(xx,log(yy/n),xlab="Wartezeit",ylab="log(n.i/n)")
h_floor((length(yy))/2)
abline(r_l1fit(xx[1:h],log(yy[1:h]/n))$coef)
r_abs((0:1)-exp(r))
names(r)_c("p aus Achsenabschnitt","p aus Steigung")
return(r)
}
Eine Funktion zur Schätzung der Belastungsrate im Zeitablauf. Dazu werden
verschiedene in Anzahlen gemessenen Fensterbreiten erfragt und graphisch
umgesetzt.
[373:]
<<initialisiere einige Funktionen>>=
interval.est.lambda<-function(x){
cat("Belastungsrate im Zeitablauf\n")
print("Geben Sie die Anzahl der Ereignisse an, die zusammen betrachtet")
print("werden sollen! Es duerfen auch mehrere (maximal 9)")
print("Anzahlen eingegeben werden. (Default: 5 10 20) Anzahlen=?")
anz.set<-scan(,0,n=9); if(length(anz.set)==0) anz.set<-c(5,10,20)
par(mfrow=matrix(c(1,1, 1,2, 1,3, 2,2, 2,3, 2,3, 3,3, 3,3, 3,3),2,9)
[,length(anz.set)])
for(anz in anz.set){
if(all(x==sort(x))) h<-x else h<-cumsum(x)
hx<-.5*(h[(1+anz):length(h)]+h[1:(length(h)-anz)])
hy<-anz/(h[(1+anz):length(h)]-h[1:(length(h)-anz)])
plot(hx,hy,type="l",xlab="time",ylab="Belastung")
title(paste("anz =",anz))
}
par(mfrow=c(1,1))
}
[374:]
<<initialisiere einige Funktionen>>=
revbook.report<-function(){
repeat{
<<Fkt: {\tt revbook.report} erfrage Wunsch>>
<<Fkt: {\tt revbook.report} handele M\"oglichkeiten ab>>
}
invisible()
}
[375:]
<<Fkt: {\tt revbook.report} erfrage Wunsch>>=
auswahl<-c(
"Abbruch/Ende",
"leere Report",
"fuege Text-Zeile an den Report an",
"fuege Text-Zeile ein",
"kopiere Plot in den Report",
"entferne Zeilen aus Report",
"zeige Roh-Report an",
"verarbeite Report",
"drucke Report"
)
wahl<-Menu(auswahl,report=F)
[376:]
<<Fkt: {\tt revbook.report} handele M\"oglichkeiten ab>>=
switch(wahl,
{ break
},{ <<Fkt: {\tt revbook.report} leere Report>>
},{ <<Fkt: {\tt revbook.report} Zeile anh\"angen>>
},{ <<Fkt: {\tt revbook.report} Zeile einf\"ugen>>
},{ <<Fkt: {\tt revbook.report} Plot einf\"ugen>>
},{ <<Fkt: {\tt revbook.report} Zeilen l\"oschen>>
},{ <<Fkt: {\tt revbook.report} Report zeigen>>
},{ <<Fkt: {\tt revbook.report} Report verarbeiten>>
},{ <<Fkt: {\tt revbook.report} Report ausdrucken>>
}
)
[377:]
<<Fkt: {\tt revbook.report} leere Report>>=
cat(" Revbook-Report leeren\n")
cat("Sind Sie sicher, dass der alte Report \n")
cat("geloescht werden soll? Fall ja j eingeben!\n")
h<-paste(readline(),"n",sep="")
if("j"==substring(h,1,1)){
unix("echo @ > revbookreport.rev",,F)
cat(" Revbook-Report wurde geloescht\n")
}else{
cat(" Revbook-Report wurde NICHT geloescht\n")
}
[378:]
<<Fkt: {\tt revbook.report} Zeile anh\"angen>>=
cat(" Revbook-Report um Textzeile verlaengern\n")
cat("Geben Sie die Text-Zeile ein:\n")
h<-readline()
if(nchar(h)>0){
write(h,".tmp")
unix(paste("cat .tmp >","> revbookreport.rev",sep=""))
} else {
unix(paste("echo @ >","> revbookreport.rev",sep=""))
}
[379:]
<<Fkt: {\tt revbook.report} Zeile einf\"ugen>>=
cat("Textzeile in Revbook-Report einfuegen\n")
cat("Geben Sie die Nummer der Zeile ein, hinter\n")
cat("der die neue Zeile eingefuegt werden soll!\n")
h<-readline()
h<-substring(h,1:nchar(h),1:nchar(h))
no<-h[grep(c("0","1","2","3","4","5","6","7","8","9",),h)]
if(length(no)>0){
no<-paste(no,collapse="")
cat("Geben Sie die Text-Zeile ein:\n")
h<-readline()
if(nchar(h)>0){
unix(paste("head -n",no,"revbookreport.rev > .tmphead"))
write(h,".tmp")
eval(parse(text=paste("no<-1+as.numeric(no)")))
unix(paste("tail -n +",no," revbookreport.rev>.tmptail",sep=""))
unix("cat .tmphead .tmp .tmptail > revbookreport.rev")
}
} else {
cat("Es wurde keine Nummer eingegeben!\n")
}
[380:]
<<Fkt: {\tt revbook.report} Plot einf\"ugen>>=
cat("Plot in Report kopieren\n")
cat("Geben Sie die Nummer der Zeile ein, hinter\n")
cat("der der Plot eingefuegt werden soll!\n")
h<-readline()
h<-substring(h,1:nchar(h),1:nchar(h))
no<-h[grep(c("0","1","2","3","4","5","6","7","8","9",),h)]
if(length(no)==0) no<-"9999"
no<-paste(no,collapse="")
cat("Geben Sie einen Namen f\"ur das Bild ein!\n")
h<-paste(readline(),".ps",sep="")
if(nchar(h)>3){
dev.copy(postscript,file=h,horizontal=F, height=4,width=4)
if(names(dev.cur())=="postscript") dev.off()
h<-paste("{\\psfig{figure=",h,",height=5cm,width=5cm}}\n\n",sep="")
h<-paste("\n\n\\centerline",h,sep="")
write(h,".tmp")
if(no!="9999"){
unix(paste("head -n",no,"revbookreport.rev > .tmphead"))
eval(parse(text=paste("no<-1+as.numeric(no)")))
unix(paste("tail -n +",no," revbookreport.rev>.tmptail",sep=""))
unix("cat .tmphead .tmp .tmptail > revbookreport.rev")
} else {
unix("cat .tmp >> revbookreport.rev")
}
} else {
cat("Ohne Namen keine Kopie!\n")
}
[381:]
<<Fkt: {\tt revbook.report} Zeilen l\"oschen>>=
cat("Zeilen aus Report entfernen\n")
cat("Geben Sie die Nummer der ersten und die der\n")
cat("letzten Zeile ein, die geloescht werden soll!\n")
h<-readline()
if(nchar(h)>0){
h<-substring(h,1:nchar(h),1:nchar(h))
no<-h[grep(c(" ","0","1","2","3","4","5","6","7","8","9",),h)]
no[no==" "]<-","
no<-paste(no,collapse="")
no<-eval(parse(text=paste("c(",no,",-1,-2)")))[1:2]
if(no[1]>0){
if(no[2]<0) no[2]<-no[1]
unix(paste("head -n",no[1]-1,"revbookreport.rev > .tmphead"))
unix(paste("tail -n +",no[2]+1," revbookreport.rev>.tmptail",sep=""))
unix("cat .tmphead .tmptail > revbookreport.rev")
cat(paste("Report von Zeile",no[1],"bis",no[2],"geloescht\n"))
}
}
[382:]
<<Fkt: {\tt revbook.report} Report zeigen>>=
cat(" Revbook-Report zeigen\n")
unix("pr -n:3 revbookreport.rev|more",,F)
[383:]
<<Fkt: {\tt revbook.report} Report verarbeiten>>=
cat("verarbeite Report\n")
unix( "cat report.head > h.rev",,F)
unix(paste("cat revbookreport.rev >","> h.rev",sep=""),,F)
unix(paste("cat report.tail >","> h.rev",sep=""),,F)
unix(paste("noweave -index -delay -filter /opt/revweb/lib/umlaute",
"h.rev > h.tex"),,F)
unix("echo q | latex h",,F)
unix("dvips h",,F)
cat("Anzeige des Reports mit dem Programm ghostview\n")
cat("ENDE von ghostview: Taste Q \n")
unix("ghostview h.ps",,F)
[384:]
<<Fkt: {\tt revbook.report} Report ausdrucken>>=
cat("dps h.ps\n")
[385:]
<<initialisiere einige Funktionen>>=
select.spalte<-function(dm=rubber){
<<initialisiere {\tt select.spalte}>>
<<selektiere Spalten; {\tt select.spalte}>>
<<selektiere Teilmenge aus den gew\"ahlten Spalten; {\tt select.spalte}>>
<<erstelle Ausgabe f\"ur {\tt select.spalte}>>
}
[386:]
<<initialisiere {\tt select.spalte}>>=
cat("\n\n")
cat("+-----------------------------------------------------------+\n")
cat("|Programm zur Selektion eines Merkmals aus einer Datenmatrix|\n")
cat("+-----------------------------------------------------------+\n\n")
cat(" Mit diesem Programm koennen Sie aus der Datenmatrix\n")
cat(" eine Merkmalsspalte auswaehlen.\n")
cat(" Danach koennen Sie mittels eines zweiten Merkmals\n")
cat(" die ausgewaehlte Spalte verkuerzen.\n")
cat(" BITTE RETURN druecken \n\n")
readline()
if(is.list(dm)) dm<-dm{\tt 1}
if(!is.matrix(dm)) dm<-cbind(dm)
if(is.null(dimnames(dm))) dimnames(dm)<-list(NULL,1:ncol(dm))
if(0==length(dimnames(dm){\tt 2})) dimnames(dm){\tt 2}<-1:ncol(dm)
nspalten<-ncol(dm)
dm.out<-NULL
dm.h
hält als Vektor die ausgewählte Spalte.
[387:]
<<selektiere Spalten; {\tt select.spalte}>>=
cat(paste(" Die Datenmatrix hat",nspalten,"Spalten.\n"))
cat(" Hier ist die Liste der Spaltennamen mit den Spaltennummern:\n\n")
print(rbind(dimnames(dm){\tt 2}))
cat("\n")
cat(" Welche Spalte wollen Sie auswaehlen?\n")
cat(" Geben Sie die Nummer der von Ihnen gewuenschten Spalte an!\n")
wahl<-c(scan(,0,n=1),1)[1]
wahl<-floor(wahl)
wahl<-wahl[wahl<=nspalten & wahl>0]
if(0==length(wahl)){
print("ERROR: Falsche Eingabe - ABBRUCH")
break
}
dm.h<-dm[,wahl]
[388:]
<<selektiere Teilmenge aus den gew\"ahlten Spalten; {\tt select.spalte}>>=
cat("\n")
cat("Auswahl von Teilelementen der gerade gewaehlten Spalte\n")
cat("------------------------------------------------------\n")
cat(" Nun koennen Elemente der gewaehlte Spalte durch Festlegung\n")
cat(" einer Bedingungen ausgewaehlt/ausgeschlossen werden.\n")
cat("\n")
cat(" Hier ist die Liste der Spaltennamen mit den Spaltennummern.\n\n")
print(rbind(dimnames(dm){\tt 2}))
cat("\n")
cat(" Welche Spalte wird fuer die Bedingung benoetigt?\n")
cat(" Eine leere Eingabe fuehrt zu keiner (weiteren) Reduktion.\n")
wahl<-scan(,0,n=1)
if(length(wahl)>0){
wahl<-floor(wahl)
wahl<-wahl[wahl<=nspalten & wahl>0]
key<-dm[,wahl]
cat("\n Hier ist ein Ausdruck der Spalte fuer die Bedingung:\n")
print(key)
cat(" Welchen Typ von Bedingung wuenschen Sie?\n")
relation<-Menu(c("Bedingungs-Spalte < Zahl", "Bedingungs-Spalte = Zahl",
"Bedingungs-Spalte > Zahl"))
cat(" Die Vergleichszahl soll sein:\n")
zahl<-scan(,0,n=1)
cat("\n")
switch(relation, log.vec<-key < zahl,
log.vec<-key ==zahl,
log.vec<-key > zahl)
dm.h<-dm.h[log.vec]
}
[389:]
<<erstelle Ausgabe f\"ur {\tt select.spalte}>>=
dm.out<-dm.h
return(dm.out)
Erforderlich ist es, aus einer Datenmatrix eine Spalte nach einer anderen zu splitten.
[390:]
<<initialisiere einige Funktionen>>=
select.and.split<-function(dm=rubber){
<<initialisiere {\tt select.and.split}>>
<<selektiere Spalten {\tt select.and.split}>>
<<suche die Spalte zum Splitten aus {\tt select.and.split}>>
<<erstelle Ausgabe f\"ur {\tt select.and.split}>>
}
[391:]
<<initialisiere {\tt select.and.split}>>=
cat("\n\n")
cat("+--------------------------------------------------------------+\n")
cat("|Programm zur Auswahl von Merkmalsspalten aus einer Datenmatrix|\n")
cat("+--------------------------------------------------------------+\n\n")
cat(" Mit diesem Programm koennen Sie aus der Datenmatrix eine Spalte\n")
cat(" auswaehlen und dann mittels eines anderen Merkmals aufsplitten,\n")
cat(" oder sie k\"onnen mehrere verschiedene Spalten auswaehlen.\n")
cat(" BITTE RETURN druecken \n\n")
readline()
if(is.list(dm)) dm<-dm{\tt 1}
if(!is.matrix(dm)) dm<-cbind(dm)
if(is.null(dimnames(dm))) dimnames(dm)<-list(NULL,1:ncol(dm))
if(0==length(dimnames(dm){\tt 2})) dimnames(dm){\tt 2}<-1:ncol(dm)
nspalten<-ncol(dm)
[392:]
<<selektiere Spalten {\tt select.and.split}>>=
cat(paste(" Die Datenmatrix hat",nspalten,"Spalten.\n"))
cat(" Hier ist die Liste der Spaltennamen mit den Spaltennummern:\n\n")
print(rbind(dimnames(dm){\tt 2}))
cat("\n")
cat(" Welche Spalte(n) wollen Sie auswaehlen?\n")
cat(" Geben Sie die Nummer(n) der von Ihnen gewuenschten Spalte an!\n")
wahl<-scan(,0)
wahl<-floor(wahl)
wahl<-wahl[wahl<=nspalten & wahl>0]
if(0==length(wahl)){
print("ERROR: Falsche Eingabe - ABBRUCH")
break
}
dm.h<-dm[,wahl]
if(is.matrix(dm.h)) {
if(is.null(dimnames(dm.h){\tt 2})){
namen<-paste("vorher",wahl)
} else {
namen<-dimnames(dm.h){\tt 2}
}
dm.h<-split(dm.h,col(dm.h))
names(dm.h)<-namen
}
[393:]
<<suche die Spalte zum Splitten aus {\tt select.and.split}>>=
if(length(wahl)==1){
cat("\n")
cat(" Nun koennen Elemente der gewaehlte Spalte gemaess den\n")
cat(" Merkmalsauspraegungen einer anderen Spalte gesplittet werden.\n")
cat("\n")
cat(" Hier ist die Liste der Spaltennamen mit den Spaltennummern.\n\n")
print(rbind(dimnames(dm){\tt 2}))
cat("\n")
cat(" Welche Spalte soll zum Splitten ausgewaehlt werden?\n")
cat(" Eine leere Eingabe fuehrt nicht zu einer Zerlegung.\n")
wahl<-scan(,0,n=1)
if(length(wahl)>0){
wahl<-floor(wahl)
wahl<-wahl[wahl<=nspalten & wahl>0]
if(wahl<=nspalten & wahl>0) {
dm.h<-split(dm.h,dm[,wahl])
names(dm.h)<-names(table(dm[,wahl]))
}
}
}
[394:]
<<erstelle Ausgabe f\"ur {\tt select.and.split}>>=
return(dm.h)
# Makefile fuer REVBOOK 8.4.97 , 28.4.97 , 9.5.97
# all
all: t w x
# vorher make wall, make tall
win:
echo "START dos"
cp revtmp.rev dos/revbook.rev
u2d dos/revbook.rev
cp revtmp.sch dos/revbook.sch
u2d dos/revbook.sch
cp revobj.sch dos/revobj.sch
cp revtmp.dvi dos/revbook.dvi
cp lotto.sch dos/lotto.sch
u2d dos/lotto.sch
cp lotto.rev dos/lotto.rev
u2d dos/lotto.rev
cp lotto.dvi dos/lotto.dvi
echo "attach(\"_Revbook\",pos=1)" > dos/install.sch
cat dos/revivegrin.sch >> dos/install.sch
echo "detach(1)" >> dos/install.sch
cat revobj.sch >> dos/install.sch
u2d dos/install.sch
echo "mcopy install.sch a:"
echo "mcopy lotto.* a:"
echo "mcopy revbook.* a:"
echo "mcopy read.me a:"
# Definiere Revbook-Funktionen in .Revbook neu.
obj:
notangle -filter /opt/revweb/lib/twebnumbering\
source/revbook.obj.rev \
| gawk '{gsub(/^[ ]+#/,"#");print $0}' > revobj.sch
echo "source(\"revobj.sch\")" > .in
Splus BATCH .in .out
read h; echo "$h"
cp _Revbook/* /opt/splus/library/revbook/.Data
tmodel: revtmp.sch
echo ' start tangling:'
cat source/revbook.head.rev\
source/revbook.model.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.graphiken.a.rev\
source/revbook.multi.a.rev\
source/revbook.model.a.rev\
source/revbook.model.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
tnv: revtmp.sch
echo ' start tangling:'
cat source/revbook.head.rev\
source/revbook.nv.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.graphiken.a.rev\
source/revbook.multi.a.rev\
source/revbook.model.a.rev\
source/revbook.nv.a.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
tmass: revtmp.sch
echo ' start tangling:'
cat source/revbook.head.rev\
source/revbook.masszahlen.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.masszahlen.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
tgraph: revtmp.sch
echo ' start tangling:'
cat source/revbook.head.rev\
source/revbook.graphiken.rev\
source/revbook.anhang.rev\
source/revbook.graphiken.a.rev\
source/revbook.graphiken.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
tmulti: revtmp.sch
echo ' start tangling:'
cat source/revbook.head.rev\
source/revbook.multi.rev\
source/revbook.anhang.rev\
source/revbook.multi.a.rev\
source/revbook.multi.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
tall: revtmp.sch
echo ' start tangling:'
cat source/revbook.head.rev\
source/revbook.vorweg.rev\
source/revbook.problem.rev\
source/revbook.masszahlen.rev\
source/revbook.graphiken.rev\
source/revbook.multi.rev\
source/revbook.model.rev\
source/revbook.nv.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.graphiken.a.rev\
source/revbook.multi.a.rev\
source/revbook.model.a.rev\
source/revbook.masszahlen.m.rev\
source/revbook.graphiken.m.rev\
source/revbook.multi.m.rev\
source/revbook.model.m.rev\
source/revbook.nv.a.rev\
source/revbook.anhangend.rev\
source/revbook.obj.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
cp revtmp.sch /opt/splus/library/revbook/revbook.sch
wmass: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.masszahlen.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.masszahlen.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
wgraph: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.graphiken.rev\
source/revbook.anhang.rev\
source/revbook.graphiken.a.rev\
source/revbook.graphiken.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
wmulti: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.multi.rev\
source/revbook.anhang.rev\
source/revbook.multi.a.rev\
source/revbook.multi.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
wmodel: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.model.rev\
source/revbook.anhang.rev\
source/revbook.model.a.rev\
source/revbook.model.m.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
wnv: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.nv.rev\
source/revbook.anhang.rev\
source/revbook.nv.a.rev\
source/revbook.anhangend.rev\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
wall: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.vorweg.rev\
source/revbook.problem.rev\
source/revbook.masszahlen.rev\
source/revbook.graphiken.rev\
source/revbook.multi.rev\
source/revbook.model.rev\
source/revbook.nv.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.graphiken.a.rev\
source/revbook.multi.a.rev\
source/revbook.model.a.rev\
source/revbook.nv.a.rev\
source/revbook.masszahlen.m.rev\
source/revbook.graphiken.m.rev\
source/revbook.multi.m.rev\
source/revbook.model.m.rev\
source/revbook.anhangend.rev\
source/revbook.obj.rev\
source/revbook.make.start\
Makefile\
source/revbook.make.end\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
revtmp.dvi: w
latex revtmp
wpro: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.vorweg.rev\
source/revbook.problem.rev\
source/revbook.masszahlen.rev\
source/revbook.graphiken.rev\
source/revbook.multi.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.graphiken.a.rev\
source/revbook.multi.a.rev\
source/revbook.anhangend.rev\
source/revbook.obj.rev\
source/revbook.tail.rev\
> revtmp.rev
noweave -index -delay -filter /opt/revweb/lib/umlaute \
revtmp.rev > revtmp.tex
[ -f revtmp.tex ] && echo ' revtmp.tex generated'
latex revtmp; latex revtmp
# x: revtmp.dvi
tpro: revtmp.tex
echo ' start weaving:'
cat source/revbook.head.rev\
source/revbook.vorweg.rev\
source/revbook.problem.rev\
source/revbook.masszahlen.rev\
source/revbook.graphiken.rev\
source/revbook.multi.rev\
source/revbook.anhang.rev\
source/revbook.masszahlen.a.rev\
source/revbook.graphiken.a.rev\
source/revbook.multi.a.rev\
source/revbook.anhangend.rev\
source/revbook.obj.rev\
source/revbook.tail.rev\
> revtmp.rev
notangle -Rstart revtmp.rev|gawk 'BEGIN{print "#0:"}\
{print$0}\
END{print"#:0"}'> revtmp.sch
notangle -filter /opt/revweb/lib/twebnumbering revtmp.rev| \
gawk '{gsub(/^[ ]+#/,"#");print $0}' >>revtmp.sch
[ -f revtmp.sch ] && echo ' revtmp.sch generated'
clean:
rm revtmp.log
This document was generated using the LaTeX2HTML translator Version 97.1 (release) (July 13th, 1997)
Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
The command line arguments were:
latex2html -split 1 -toc_depth 5 revtmp.
The translation was initiated by Peter Wolf on 2/3/1999