________________________________________________________________________________
Inhalt....: Einige Visualisierungsmöglichkeiten für statistische Daten
Kategorie.: Grundkurs
Mathematik: Stochastik, Statistik
MuPAD.....: 3.1.0
Datum.....: 2004-03-31
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: plot, plot::Bars2d, plot::Piechart3d, plot::Polygon2d,
Funktionen: plot::Boxplot, for, from, to, stats::empiricalQuantile,
Funktionen: ->, max, op, in
________________________________________________________________________________
Einige Visualisierungsmöglichkeiten für statische
Daten
Dieses Arbeitsblatt ist Bestandteil des MuPAD Grundkurses.
Wir betrachten nochmals die Bernoulli-Formel, die uns schon in einem der
vorherigen Abschnitte über die Binomialverteilung begegnet ist:
B:= (n, p, k) -> binomial(n,k) * p^k * (1-p)^(n-k)
![]()
Anhand dieser einfachen Verteilung wollen wir einige elementare Visualisierungs-
möglichkeiten statistischer Daten mit MuPAD vorstellen. Im folgenden wählen wir
die Parameter n = 20 und p = 1/6.
Die erste Möglichkeit, eine Wahrscheinlichkeitsverteilung darzustellen, besteht im
Zeichnen von Histogrammen:
plot( plot::Bars2d([ B(20, 1/6, k) $ k = 0..20 ] ) )

MuPAD läßt auch das Zeichnen dreidimensionaler Tortendiagramme zu. Auch
unsere spezielle Verteilung können wir auf diese Weise schnell und anschaulich
darstellen:
plot( plot::Piechart3d( [ B(20, 1/6, k) $ k = 0..20 ] ) )

Auch schlichtere und weniger bunte Visualisierungsmöglichkeiten sind verfügbar.
So lassen sich statistische Werte z.B. schlicht als Polygozug - d.h. im wesentlichen
aus Punkte, die durch Geraden verbungen sind - darstellen:
plot( plot::Polygon2d([[k, B(20, 1/6, k)] $ k = 0..20 ] ),
PointsVisible )

Unter der Adresse http://www.mupad.de/schule+studium/material/index.shtml
finden sich weitere Notebooks, die mit statistische und stochastistische Probleme
vorstellen und diskutieren. Zum Abschluß dieses Abschnittes gehen wir noch ein
kleines Problem aus Praxis mit MuPAD an, dessen Bearbeitung auch in Notebook-
Form unter der oben genannten Adresse zum Download bereitsteht:
Boxplots - Erstellung eines Mietspiegels

100 Studenten/innen der Universität Paderborn wurden befragt, in welchem
Stadtteil sie wohnen und wieviel Miete sie für ihr Zimmer bzw. ihre Wohnung
monatlich bezahlen. Die Umfrage ergab, dass die folgenden Stadtteile von
ihnen bewohnt werden:
Stadtteile:= [Dahl, Kaukenberg, Zentrum]
![]()
Die ermittelten Mietpreise in jedem der drei Orte fassen wir in einer Liste
zusammen:
Mieten[Dahl]:= [150, 115, 215, 100, 130, 335, 225, 180,
220, 380, 170, 115, 120, 430, 140, 370, 250, 150,
115, 215, 100, 180, 220, 380, 115, 120, 100, 160,
430, 170, 205, 100, 140, 350, 220, 150]:
Mieten[Kaukenberg]:= [125, 120, 125, 130, 135, 190, 170,
270, 170, 115, 170, 160, 130, 155, 110, 100, 140,
120, 135, 125, 155, 145, 180, 110, 90, 190, 135,
125, 155, 120, 115, 130, 120, 150]:
Mieten[Zentrum]:= [255, 100, 220, 150, 330, 270, 220,
275, 130, 115, 440, 175, 600, 550, 170, 250, 300,
190, 180, 330, 260, 500, 120, 230, 290, 170, 245,
225, 190, 250]:
Wir möchten nun die Mietkosten der einzelnen Stadtteile vergleichen und
folgende Fragestellungen beantworten:
(a) In welchem Stadtteil treten die höchsten bzw. niedrigsten Mieten auf?
(b) In welchem Bereich liegen 50% der Mietpreise in jedem Stadtteil
und wie groß ist dieser Bereich?
(c) Wie verhält sich der mittlere Mietpreis?
(d) Welche Mietangaben fallen aus der Reihe?
Zur Beantwortung dieser Fragen stellen wir die Verteilung der Mietpreise
für alle beteiligten Stadtteile in der oben definierten Reihenfolge (alphabetisch)
in Form von Boxplots dar:
plot( plot::Boxplot(Mieten[s] $ s in Stadtteile,
Colors = [RGB::Blue, RGB::Red, RGB::Green],
LineWidth = 0.6 * unit::mm)
):

Jetzt interpretieren wir die Grafik:
Ausreißer werden als Punkte markiert. Dies sind Daten, deren Werte so
hoch oder so niedrig sind, dass ihre Einbeziehung in die Datenanalyse
das Gesamtbild verfälschen würde. Daher werden Minimum bzw. Maximum
aus den übrigen Daten bestimmt und als unterste bzw. oberste Linie in der
Grafik dargestellt.
Die Boxen (als geschlossene Rechtecke gezeichnet), die wir sehen,
stellen den Abstand zwischen dem 0.25-Quantil und dem 0.75-Quantil
dar. Dies bedeutet, dass 25% der Daten unterhalb der Box und 75% des
Stichprobenumfangs unterhalb der oberen Begrenzungslinie des Kastens
liegen. Damit liegen also 50% der Daten innerhalb der Box. Die Linie in der
Box gibt den Median an, d.h. 50% des Datensatzes liegen unterhalb und
50% oberhalb dieser Medianlinie. Wenden wir uns nun den Fragen zu:
(a) Die zu beachtenden Maximalwerte lassen sich direkt mittels der obersten
Linie ablesen. Wir sehen, dass das Zentrum (rechts) mit knapp 450 € die
höchste Miete aufweist. Dahl (links) liegt mit 350 € auf Platz zwei und
Kaukenberg (Mitte) liegt mit unter 200 € auf dem dritten Platz.
Algorithmisch lässt sich dies aus der Stichprobe wie folgt bestimmen:
for s in Stadtteile do
Boxlaenge:= 1.5 *
(stats::empiricalQuantile(Mieten[s])(0.75) -
stats::empiricalQuantile(Mieten[s])(0.25)
):
Hilfe:= select(Mieten[s],
y-> stats::empiricalQuantile(Mieten[s])(0.75) < y
and
y < stats::empiricalQuantile(Mieten[s])(0.75) +
Boxlaenge):
Maximum:= max(op(Hilfe)):
print(Unquoted,"In " .s. " beträgt die höchste Miete "
.Maximum. " €."):
end_for:
Warning: protected variable Maximum overwritten
In Dahl beträgt die höchste Miete 350 €.
Warning: protected variable Maximum overwritten
In Kaukenberg beträgt die höchste Miete 190 €.
Warning: protected variable Maximum overwritten
In Zentrum beträgt die höchste Miete 440 €.
(b) Der Bereich, in dem 50% der Mietpreise liegen, wird durch die obere
und untere Grenze der Boxen dargestellt. Auch hier ist das Zentrum
(rechts) mit Mietpreisen zwischen ca. 170 € und 290 € der teuerste
Stadtteil, gefolgt von Dahl (links) mit ca. 120 € bis 220 € und Kaukenberg
(Mitte) von ca. 120 € bis 160 €.
Wir können diese Werte folgenderweise exakt mit MuPAD berechnen:
for s in Stadtteile do
print(Unquoted, "50% der Mieten in " .s. " liegen in "
.stats::empiricalQuantile(Mieten[s])(0.25). ".."
.stats::empiricalQuantile(Mieten[s])(0.75). " €.")
end_for:
50% der Mieten in Dahl liegen in 120..220 €.
50% der Mieten in Kaukenberg liegen in 120..155 €.
50% der Mieten in Zentrum liegen in 175..290 €.
Die Höhe der Box gibt die Spanne an, in der sich 50% der Mietpreise be-
finden. Eine große Box bedeutet, dass die Preise starken Schwankungen
ausgesetzt sind. Je geringer die Höhe der Box ist, desto stabiler ist das
Mietpreisniveau.
Für Kaukenberg ist die Box sehr schmal. Dort sind die Preise sowohl
niedrig als auch stabil. Im Zentrum dagegen klaffen die Mieten stark
auseinander. Die Höhe der Box stellt den Abstand zwischen dem 0.25-
und 0.75-Quantil dar und läßt sich exakt wie folgt berechnen:
for s in Stadtteile do
print(Unquoted, "Für " .s. " ist die Box "
.(stats::empiricalQuantile(Mieten[s])(0.75) -
stats::empiricalQuantile(Mieten[s])(0.25)).
" Einheiten groß."
)
end_for:
Für Dahl ist die Box 100 Einheiten groß.
Für Kaukenberg ist die Box 35 Einheiten groß.
Für Zentrum ist die Box 115 Einheiten groß.
(c) Am Median (der zentralen Linie) können wir den mittleren Mietpreis ab-
lesen. Für Kaukenberg ist der Wert des Medians sehr gering - d.h. 50 %
der Wohnung kosten weniger als 130 €. Wenn man dort eine höhere Miete
als 130 € zahlen muss, dann meist eine sehr viel höhere. Bei den anderen
beiden Stadtteilen ist der Median fast genau in der Mitte der Box.
Daher sind die mittleren 50% der Daten relativ gleich verteilt.
Den Median können wir folgenderweise aus der Stichprobe errechnen:
for s in Stadtteile do
print(Unquoted, "Der mittlere Miete in " .s. " beträgt "
.stats::median(Mieten[s]). " €."
)
end_for:
Der mittlere Miete in Dahl beträgt 170 €.
Der mittlere Miete in Kaukenberg beträgt 130 €.
Der mittlere Miete in Zentrum beträgt 230 €.
(d) Ausreißer in einem Datensatz werden oft als Messfehler interpretiert. Fakt
ist, dass diese einzelnen Daten nicht zu den anderen erhobenen Werten
passen. Nun kann man über mögliche Gründe dafür nur spekulieren.
Vielleicht wurden in unser Umfrage von den Studenten fälschlicherweise
WG-Gesamtpreise angegeben oder es gibt vereinzelt Studenten,
die sich so teure Wohnungen leisten können. Auch das Maximum der
Ausreißer können wir algorithmisch aus dem Datensatz bestimmen:
max(op(Mieten[s])) $ s in Stadtteile
![]()
Da Boxplots auf statistischen Analysen basieren, können die wesentlichen
Informationen direkt abgelesen und verglichen werden, ohne die einzelnen
statistischen Werte von Hand berechnen zu müssen. Dies ist meistens auch
recht aufwendig, wie wir gesehen haben.
________________________________________________________________________________
Übungen:
1. Finden Sie weitere Notebooks zum Thema "Boxplots" in der Sammlung von Arbeitsblättern
__auf dem Web-Portal www.schule.mupad.de/material. Experimentieren Sie mit den Notebooks.
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe
wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die
Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.
_______________________________________________________________________________