>>>>>

Scheda 3 - Probabilità condizionata, legge di distribuzione binomiale

4. Distribuzione BINOMIALE (simmetrica) (studio sperimentale e teorico).

    Consideriamo una situazione abbastanza simile a quella delle successive alzate di un mazzo di carte ( quesito 5), e proviamo a risolvere anche questa usando le "caselle".

10

  Lanciamo una moneta equa 10 volte. Qual è la probabilità che testa venga più frequentemente di croce?

    La situazione appena considerata, cioè:

              N = "n° di teste uscite in 10 lanci di una moneta equa",
              Pr(N = i) = C(10, i) / 210 (i = 0, 1, …, 10),

è un caso particolare di legge di distribuzione binomiale. Se lanciassi n volte la moneta avrei:

              Pr(N = i) = C(n, i) / 2n (i = 0, 1, …, n)

Nota. Si tratta di una legge "simmetrica": Pr(N = i) = Pr(N = n i). Più avanti generalizzeremo questa legge in modo da rappresentare il caso in cui la moneta non sia equa.

    Per controllare il ragionamento che ho svolto simulo il fenomeno mediante FA_RND.BAS con il seguente sottoprogramma Prova:

INT(RND*2) ha distribuzione uniforme in {0,1} (al 50% viene 0, al 50% viene 1), per cui, interpretando 1 come "testa", U, alla conclusione del ciclo, rappresenta il numero delle volte che è uscito "testa".

        
U=0
FOR i=1 TO 10
U=U+INT(RND*2)
NEXT
           

    Analizzando con STAT il file generato così, con NumeroDati=5000, supponendo di averlo salvato col nome MONETESP.stf, ottengo un esito simile al seguente:

5000 dati   min,max: 0,10
media: 4.9644  mediana: 5
5% :2    25% :4    50% :5
95% :8   75% :6    percentili
------|-----|==|==|------|------
moda: [4.5,5.5) freq.rel.modale: 24.98%
sc.quad.med.= 1.5475348

    Dall'istogramma abbiamo che FreqRel(N=5)=25%, in buon accordo con la valutazione teorica di Pr(N=5) ottenuta risolvendo il quesito 10 (24.6%).

    Per confrontare controllo non solo l'evento N=5 mi propongo di costruire l'istogramma della legge di distribuzione. Procedo analogamente a quanto fatto per il lancio di due dadi ( scheda 2, §6). Devo costruire il file: 0 con freq. C(10,0), 1 con freq. C(10,1), …

    Per trovare i valori di C(n,k) in questo caso (in cui non devo trovare un solo valore di C(n,k)) non ci conviene calcolare: n·/k·(n-1)/(k-1)·…·(n-k+1)/1, ma ricorrere al "triangolo di Tartaglia (o Pascal)", cioè alla iterazione:

C(n,0) = 1, C(n,n)=1, C(n+1,k+1) = C(n,k) + C(n,k+1).

Nota. È noto che C(n,k) rappresenta il coefficiente di grado k dello sviluppo del binomio (x+1)n; questo è il motivo per cui questa legge di distribuzione viene chiamata binomiale. È facile verificare che le due formulazioni sono equivalenti. (vedi anche Gli Oggetti Matematici). Da qui puoi accedere a uno script per il calcolo di C(n,k).

         1

       1   1
    
     1   2   1

   1   3   3   1
    \ / \ / \ /
 1   4   6   4   1

Possiamo quindi ricorrere al programma FaMonete.bas seguente, che ci fornisce le uscite riportate sotto a destra, che possiamo poi copiare (usando il mouse dopo avere aperto il menu che si apre cliccando sull'angolo alto a sinistra della finestra del QBasic, in modo analogo a come si fa per incollarvi i programmi, e aver scelto Segna invece di Incolla) dalla finestra di Output del QBasic e incollare nella finestra-dati di Stat. Nella castella STF puoi comunque trovare il file MONETEO.stf contenente già questi dati.
    Abbiamo costruito il programma in modo che generi "dati già classificati" in intervalli, così che sia tracciato automaticamente l'istogramma. Trattandosi di intervalli di ampiezza 1, densità di frequenza e frequenza coincidono, per cui potremo confrontare facilmente l'istogramma che otterremo con il precedente istogramma sperimentale.

nm = 10  'numero di monete lanciate    
DIM C(nm,nm)
GOSUB Cbin
FOR i=0 TO nm
PRINT i-1/2; ","; C(nm,i)
NEXT
PRINT nm+1/2; ",END"
END

Cbin:
C(0,0)=1
FOR n=1 TO nm
C(n,0)=1 : C(n,n)=1
FOR k=1 TO n-1
C(n,k)=C(n-1,k-1)+C(n-1,k)
NEXT
NEXT
RETURN
-.5 , 1
 .5 , 10
 1.5 , 45
 2.5 , 120
 3.5 , 210
 4.5 , 252
 5.5 , 210
 6.5 , 120
 7.5 , 45
 8.5 , 10
 9.5 , 1
 10.5 ,END

Note. Il programma usa la variabile indiciata C(n,k). Per l'uso delle variabili indiciate vedi Gli Oggetti Matematici.
Una semplice alternativa a FaMonete.bas è l'uso di Poligon:  con C(x,y) = cbin si assegna a C(x,y) il termine !(x)/(!(x-y)*!(y)) che equivale al coefficiente binomiale (la cosa viene ripresa nella parte finale di questo paragrafo), poi si esegue for #I=0 to 10 : #C = C(10,#I); stamp = #I#C che accumula per la stampa le coppie #i,#c, che poi si possono ottenere sulla finestra uscite mediante il comando ".  Col comando "clip sono invece copiate nella memoria di Windows; se poi in Stat, posizionatomi nella finestra-dati, aziono Ctrl+C (eventualmente dopo aver azionato Ctrl+A per selezionare ed eliminare il vecchio contenuto) la sequenza delle coppie viene automaticamente copiata in Stat.

11

  Genera i file MONETESP e MONETEO (questo lo puoi trovare già memorizzato) e, poi, analizzali con STAT. Confronta gli esiti ottenuti con quanto riportato sopra e qui sotto.

    Analizzando con STAT il file MONETEO.STF otteniamo la seguente rappresentazione della legge di distribuzione (per la scelta di "[a,b)" e di "n.classi" vedi ques. 9 della scheda 2):

1024 dati in 11 intervalli  min,max: 0,10
media: 5  mediana: 5
5% :2    25% :4    50% :5
95% :8   75% :6    percentili
-------|------|==|==|------|-------
moda: [4.5,5.5) freq.rel.modale: 24.6094%
sc.quad.med.= 1.5811388

    L'istogramma "sperimentale", ottenuto con 5000 prove, ha forma quasi uguale a quello "teorico" ora ottenuto. STAT consente anche di sovrapporre i due istogrammi e confrontarli. Prova a farlo (un clic su [P] richiama la figura precedente, un doppio clic unisce la precedente all'attuale): dovresti ottenere un esito analogo a quello riprodotto a lato.

    Come Pr(N=5) (freq. rel. della moda) ho ottenuto lo stesso valore ottenuto in precedenza con il calcolo combinatorio.

    Vediamo come effettuare il calcolo di Pr(N>5) con Poligon. Questo programma ha predefinita la funzione fattoriale, indicata con il simbolo funzionale ! (in Poligon occorre scrivere !(t) per il fattoriale di un termine generico, ma si può scrivere ad es. 4! e, in generale, n! se n è un numero intero). Come posso calcolare C(n,k) usando il fattoriale?
    Basta osservare che n·(n–1)·(n–2)·…·(nk+1) = n!/(n–k)! e che, quindi, C(n,k) = n!/((n–k)! k!).
    Quindi come Pr(N=x) in Poligon posso definire P(x) = !(10)/(!(10-x)*!(x))/2^10. Per ottenere Pr(N>5) posso eseguire il comando (1-P(5)/2= ottenendo:  (1-P(5))/2 = 0.376953125 =193/512.
Potevo anche calcolare P(6)+…P(10) con [6,10] P SUM  ottenendo lo stesso risultato.

Nota. Poligon calcola il fattoriale di x facendo la moltiplicazione degli interi positivi minori o uguali a x se x≤50; per x maggiori usa un metodo approssimato ("di Stirling"), che fornisce un risultato che approssima x! con circa 5 cifre significative. Di conseguenza anche il coefficiente binomiale per n>50 viene calcolato in modo approssimato. Ecco qualche calcolo:
50!/49!=50  51!/50!=50.99993305917678  52!/51!=52.00000257835871
Si vede che nel calcolo da 51! in su intervengono delle approssimazioni (52!/51! è ottenuto con maggiore precisione di 51!/50! in quanto 51! e 52! sono approssimati con uno stesso errore "sistematico".

    Se nel programma con cui abbiamo costruito MONETEO sostituiamo nm=10 con nm=50 (consideriamo, cioè, quante volte esce "testa" lanciando 50 volte una moneta) e facciamo scrivere i dati in un file (come nel programma Fa_Rnd.bas) e analizziamo il file con STAT, o se, più semplicemente, generiamo e memorizziamo i dati con POLIGON, mediante i comandi (vedi la Nota prima del ques. 11):
c(x,y)=cbin
FOR #i=0 TO 50 : #c = C(50,#i); #x = VAL(#i-1/2); STAMP = #x#c
"CLIP

e poi li incolliamo con Ctr+C nella finestra-input di STAT, dalla analisi otteniamo:

media: 25  mediana = 25
moda: [24.5,25.5) FreqRel: 11.2275%
massima densita' di freq.:
     11.2275% in [24.5,25.5)
5% :19.14969814   25% :22.6047939
50% :25
95% :30.85030186  75% :27.3952061
sc.quad.med.= 3.5355337

Nota, Se nel programma Monete.bas sostituissi mn=10 con nm=50 senza altre modifiche, non riuscirei a vedere tutte le uscite. Agendo sulle prorietà delle finestra (cliccando in alto a sinistra sulla finestra del QBasic) posso far aumentare la dimensione della finestra fino ad una altezza di 50 righe, comunque non sufficienti. Potrei allora sostituire la riga all'interno del FOR i - NEXT con
PRINT i - 1 / 2; ","; C(nm, i);
IF i = 25 THEN INPUT "", x ELSE PRINT

in modo da arrestare la stampa a metà, copiare e incollare una prima parte delle uscite, premere Enter per rispondere alla (fittizia) istruzione di input e, quindi, ottenere la seconda parte delle uscite.

<<<     Paragrafo precedente Paragrafo successivo     >>>