MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

Inhalt....: Animation der Binomialverteilung, Approximation durch die Gaußfunktion

Mathematik: Statistik, Stochastik

MuPAD.....: 3.1.1

Datum.....: 2005-11-12

Autoren...: Christian Koch <christian@koch-bensheim.de>

Funktionen: binomial, Bars2d, VisibleFromTo, binomialPF, map

________________________________________________________________________________

 

Animation der Binomialverteilung

 

Die Binomialverteilung wird in allen Bundesländern als "Prototyp" im Rahmen des

Stochastikunterrichts intensiv behandelt. In diesem Arbeitsblatt soll die mehr oder

weniger gute Approximation durch die Gaußfunktion visualisiert werden. Dabei wird

auch deutlich, wie sich die Binomialverteilung bei wachsendem Stichprobenumfang

n auf den Erwartungswert zusammenzieht.

 

 

Zum "Aufwärmen" verwenden wir erst einmal die von MuPAD zu Verfügung gestellte Funktion

zum Berechnen der Binomialkoeffizienten, um die Veränderung der Binomialverteilung

mit dem Stichprobenumfang n oder der Einzelwahrscheinlichkeit p zu visualisieren.

 

B:=(n,p,k)->binomial(n,k)*p^k*(1-p)^(n-k);

plot(plot::Bars2d([B(10,0.5,k)$k=0..10])):

math

MuPAD graphics

Der naheliegende Ansatz, daraus eine Animation zu machen, scheitert leider:

 

plot(plot::Bars2d([B(n,0.5,k)$k=0..n],n=10..20)):

Error: unbound identifier(s) 'k' found [plot::Bars2d::new]

 

Vermutlich hat MuPAD dabei Probleme mit der Weitergabe des Animationsparamenters.

 

Man kann natürlich alle Verteilungen übereinander zeichnen.

Wenn man dabei noch die Farben verändert, ensteht sogar ein hübsches Bildchen:

 

plot(plot::Bars2d([B(n,0.5,k)$k=0..n],Color=[n/20,0,1-n/20])$n=5..20):

 

Das ist aber nicht das, was wir wollen.

Daher erzeugen wir die Histogramme zuächst als Grafikobjekte in einem Feld und machen sie

dann nur für bestimmte Zeiten sichtbar. Um die Grenzen der Animation leichter verändern zu

können, werden dafür Variablen definiert.

 

n_u:=  2:

n_o:= 50:

p_histo:= plot::Bars2d([B(n,0.5,k) $ k=0..n], Color=[n/n_o,0,1-n/n_o]) $ n=n_u..n_o:

((p_histo[k])::VisibleFromTo:= (k-1)..k) $ k = 1..(n_o-n_u+1):

plot(p_histo):

 

Jetzt variierien wir p und lassen n fest:

 

schritte:=20:

n := 20:

p_histo_p:= plot::Bars2d([B(n,s/schritte,k)$k=0..n],Color = [s/schritte,0,1-s/schritte])$s=1..schritte-1:

((p_histo_p[k])::VisibleFromTo:= (k-1)..k) $ k = 1..schritte-1:

plot(p_histo_p):

 

Die Gaußfunktion soll für n*p*q< 9 die Binomialverteilung gut annähern:

 

gauss:= (mu, sigma, x)-> 1/(sqrt(2*PI)*sigma)*exp(-1/2*((x-mu)/sigma)^2);

p_gauss_p:=plot::Function2d(gauss(n*s/schritte, sqrt(n*s/schritte*(1-s/schritte)),k),k=-2..n+2,

            LineColor = [0, 1, 0], LineWidth=0.7)$s=1..schritte-1:

((p_gauss_p[k])::VisibleFromTo:= (k-1)..k) $ k = 1..schritte-1:

plot(p_histo_p, p_gauss_p, Axes=Origin):

 

Schauen wir uns die Animation bei verändertem n noch ebenfalls mit dieser Nächerung an:

 

n_u:= 2:

n_o:=50:

p  := 0.4:

p_histo:=plot::Bars2d([B(n,p,k)$k=0..n],Color = [n/n_o,0,1-n/n_o])$n=n_u..n_o:

((p_histo[k])::VisibleFromTo:= (k-1)..k) $ k = 1..(n_o-n_u+1):

 

p_gauss:=plot::Function2d(gauss(n*p, sqrt(n*p*(1-p)),k),k=-2..n+2,

            LineColor = [0, 1, 0], LineWidth=0.7)$n=n_u..n_o:

((p_gauss[k])::VisibleFromTo:= (k-1)..k) $ k = 1..(n_o-n_u+1):

plot(p_histo, p_gauss, ViewingBoxXRange=-2..37):

 

Es sieht so aus, als ob die Verteilung bei wachsendem n niedriger und breiter würde.

Das liegt zum einen daran, dass bei kleinerem n sich die Wahrscheinlichkeiten auf weniger

Fächer verteilen und daher diese Fächer dann "voller" sind. Zum anderen liegt es daran,

dass in dieser Darstellung die Obergrenze nicht automatisch dem Stichprobenumfang n

gemäß angepasst wird.

 

Man muss also die Graphen so strecken, dass sie alle auf der gleiche Breite gezeichnet

werden. Das entspricht einer Streckung in Richtung der ersten Achse. Damit die Fläche

gleich bleibt, muss man dann in Richtung der zweiten Achse mit demselben Faktor stauchen.

 

Leider stößt man an dieser Stelle bei MuPAD an zwei Grenzen:

Der Abstand der Balkenmittelpunkte bei Bars2D ist immer 1.

Animationen werden immer zunächst komplett berechnet und dann gezeichnet, 

so dass der gezeichnete Ausschnitt in der Animation gleich bleibt.

 

Daher basteln wir uns zunächst einen einfachen Ersatz für Bars2d mit

unten offenen Rechtecken (Stufen) und verwenden dann das Listplot-Objekt:

 

stufe:= (x,y)->[[x-0.5,0],[x-0.5,y],[x+0.5,y],[x+0.5,0]]:

 

Damit erzeugen wir uns die Punkte zum Zeichnen einer Verteilung und verwenden

dabei auch die von MuPAD mitgebrachte Verteilungsfunktion binomialPF

 

bin_original := (n, p)->op(stufe(k,stats::binomialPF(n,p)(k)))$k=0..n:

n_u:=2: n_o:=20: p := 0.4:

plotfeld_original := plot::Listplot([bin_original(n,p)],Axes=Origin,LineWidth=0.6, PointsVisible=FALSE,

LineColor= [n/n_o,0,1-n/n_o])$n=n_u..n_o:

((plotfeld_original[k])::VisibleFromTo:= (k-1)..k) $ k = 1..(n_o-n_u+1):

plot(plotfeld_original):

 

Diese Objekte können wir jetzt leichter manipulieren und definieren uns dafür

Operatoren zum Verschieben und Streckstauchen:

 

verschiebung:= (vek, x0)->[vek[1]+x0,vek[2]];

streckstauchung:= (vek, faktor)->[vek[1]*faktor,vek[2]/faktor];

n_u:=2: n_o:=20: p := 0.4:

 

Jetzt verschieben und streckstauchen wir die Histogramme so, dass sie alle denselben

vertikalen Bereich von 0 bis 100 haben:

 

bin_verschoben:= (n, p)->map(bin_original(n,p), verschiebung,0.5);

bin_normiert:=   (n, p)->map(bin_verschoben(n,p), streckstauchung, 100/(n+1));

  

Jetzt verschieben und streckstauchen wir die Histogramme so, dass sie alle denselben

vertikalen Bereich von 0 bis 100 haben:

 

p:=0.5: n_u:=2: n_o:=100:

plotfeld_normiert := plot::Listplot([bin_normiert(n,p)],LineWidth=0.6, PointsVisible=FALSE,

LineColor= [n/n_o,0,1-n/n_o])$n=n_u..n_o:

((plotfeld_normiert[k])::VisibleFromTo:= (k-1)..k) $ k = 1..(n_o-n_u+1):

 

plot(plotfeld_normiert,YAxisVisible=FALSE, Axes=Origin):

 

Mit diesem Werkzeug sollte man jetzt etwas spielen, p verändern,

die "Konzentration" auf den Erwartungswert erkunden.

Der Zusammenhang zum Gesetz der großen Zahl sowie die Wurzel(n)-Regel

können thematisiert werden.

 

________________________________________________________________________________

 

Aufgaben:

 

1.  Untersuchen Sie systematisch die Abweichungen zwischen der Binomialfunktion und der Gaußfunktion.

     Welcher Fehler wird bei der Faustregelgrenze n*p*q = 9 maximal produziert?

2.  Falls n*p*q kleiner als 9 ist, sollte man vielleicht eher die Poissonverteilung als Näherung für die

     Binomialverteilung nehmen:

image

     Binomialverteilung nehmen. Untersuchen Sie diese Approximation. Ist n*p*q = 9 eine sinnvolle obere

     Grenze für die Anwendbarkeit dieser Näherungsfunktion?

 

3.  Verschieben Sie die Binomialverteilung so, dass der Erwartungswert im Ursprung liegt

     Streckstauchen Sie dann so, dass die Standardabweichung 1 ist und schauen Sie sich die

     'Verteilungen als Animation (in Abhängigkeit von n oder p) an.

 

_______________________________________________________________________________

 

Anmerkungen:

 

1.  Natürlich kann man das Arbeitsblatt auch nur zur Demonstration einsetzen, ohne die Befehle im Einzelnen

     anzusprechen.

 

2.  Weitere Anregungen finden Sie im Web unter schule.mupad.de/material

_______________________________________________________________________________

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.