The McGraw-Hill Companies
Introduzione alla Probabilità - P.Baldi
GUIDA ALLA RISOLUZIONE DEGLI ESERCIZI DEL CAPITOLO 1
Prima parte: introduzione a scilab
Seconda parte: risoluzione degli esercizi (con commento)
1 Premessa
Questo documento è una introduzione alla risoluzione di esercizi numerici con l’uso di software
appropriato. Il software utilizzato è scilab. Si tratta di un programma non specializzato
per la statistica e che può essere usato per problemi numerici di vario tipo (equazioni differenziali, sistemi dinamici, geometria differenziale,. . . ). È gratuito e si scarica facilmente dal sito
http://www.scilab.org.
Per chi conosce già un po’ questo genere di software è utile sapere che scilab usa la stessa
filosofia di matlab, con cui ha in comune molti comandi.
Altri programmi sono adatti allo scopo. Oltre a matlab®, mathematica®, S+® e maple V®, che
però non sono gratuiti, segnaliamo in particolare il software R, che è gratuito ed è specializzato per
la statistica. Lo si può recuperare, ad esempio, al sito http://cran.r-project.org.
2 Introduzione a scilab
Cominciamo con gli elementi di base del linguaggio scilab. Poi, rapidamente, inizieremo
l’analisi statistica delle situazioni che sono l’oggetto degli esercizi del capitolo 1.
Per utilizzare al meglio questo documento:
1. Aprite una sessione scilab sul vostro PC.
2. Leggete questo documento, facendo un copia/incolla dei comandi scilab che trovate qui
sulla finestra dei comandi di scilab. Fate però attenzione: talvolta i caratteri ’ˆ quando sono
copiati sulla riga comandi di scilab vengono trasformati in altri che ci somigliano ma che
scilab non riconosce. Sostituiteli voi con quelli buoni usando la tastiera.
Ricordate che con scilab è facile richiamare i comandi precedenti con i tasti ↑ e ↓.
La regola generale è che per scilab tutti gli oggetti sono matrici. Cominciamo con le operazioni elementari.
Definire un vettore
-->vv=[.2 .9]
vv
=
.2
.9
vv è un vettore riga di coordinate .2 e .9. Da notare che le coordinate possono essere separate da
uno spazio (come qui sopra) oppure da una virgola.
Paolo Baldi
Introduzione al Calcolo delle Probabilità
con elementi di Statistica 2/ed
McGraw-Hill 2011
2
Esercizi del Capitolo 1
Definire una matrice. Le righe sono separate da ;
-->pp=[1/3 2/3;1/2 1/2]
pp
=
.3333333
.6666667
.5
.5
Moltiplicare un vettore per una matrice
-->pp*vv
!--error
10
inconsistent multiplication
Ooops le dimensioni non andavano bene: vv è un vettore riga e quindi pp ha un numero di
colonne che non è uguale al numero di righe di vv; per sistemare le cose si può fare il trasposto di
vv , che si fa con un apostrofo: vv’è il trasposto di vv; vv’ è dunque un vettore colonna ed ora
-->pp*vv’
ans
=
.6666667
.55
Avremmo anche potuto moltiplicare vv per pp da destra :
-->vv*pp
ans
=
.5166667
.5833333
Moltiplicare delle matrici (righe per colonne)
-->pp*pp
ans
=
Introduzione
.4444444
.5555556
.4166667
.5833333
3
Fare la potenza di una matrice
-->ppˆ10
ans
=
.4285714
.5714286
.4285714
.5714286
Le operazioni * e ˆ s’intendono sempre nel senso del prodotto righe per colonne. Se si scrive .*
oppure .ˆ (con un puntolino davanti), s’intende invece nel senso di termine a termine
-->pp.ˆ10
ans
=
.0000169
.0173415
.0009766
.0009766
Come estrarre una colonna da una matrice; la seconda ad esempio
-->pp(:,2)
ans
=
0.6666667
0.5
o la prima
-->pp(:,1)
ans
=
0.3333333
0.5
4
Esercizi del Capitolo 1
Alcuni modi speciali di definire una matrice oppure un vettore: con dei valori in progressione
-->1:10
ans
=
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
1.4
1.5
1.6
1.7
1.8
1.9
2.4
2.5
2.6
2.7
2.8
2.9
3.4
3.5
3.6
3.7
3.8
3.9
4.4
4.5
4.6
4.7
4.8
4.9
5.4
5.5
5.6
5.7
5.8
5.9
oppure lo stesso con degli incrementi diversi da 1
-->1:.1:10
ans
=
column
1.
1.1
1 to 10
1.2
1.3
column 11 to 20
2.
2.1
2.2
2.3
column 21 to 30
3.
3.1
3.2
3.3
column 31 to 40
4.
4.1
4.2
4.3
column 41 to 50
5.
5.1
5.2
5.3
column 51 to 60
[More (y or n ) ?] n
una matrice di tutti uni
-->ones(2,2)
ans
=
Introduzione
1.
1.
1.
1.
5
In maniera simile il comando zeros(2,2) produrrà una matrice 2 × 2 di tutti zeri.
Operazioni elementari sui vettori e le matrici : la somma delle coordinate :
-->xx=1:10;
-->sum(xx)
ans
=
55.
Riordinamento delle coordinate: con il comando gsort si possono riordinare le coordinate in
senso crescente o decrescente. Ad esempio mettiamo un po’ di disordine nel vettore xx
-->xx(3)=11
xx
=
1.
2.
11.
4.
5.
6.
7.
8.
9.
10.
10.
11.
Ora le coordinate di xx non sono più in ordine crescente.
-->zz=gsort(xx,’g’,’i’)
zz
=
1.
2.
4.
5.
6.
7.
8.
9.
Il comando gsort con le opzioni ’g’ e ’i’ produce un vettore avente le stesse coordinate, ma
ordinate in ordine crescente (’i’=increasing). Con le opzioni ’g’ e ’d’invece il riordinamento
avviene in ordine decrescente (’d’ =decreasing).
-->gsort(xx,’g’,’d’)
ans
11.
=
10.
9.
8.
7.
6.
5.
4.
2.
1.
Vediamo ora un po’ di grafica. Vedremo nel primo esercizio il comando per disegnare gli istogrammi.
6
Esercizi del Capitolo 1
I comandi che ora verranno illustrati sono molto utili, ma questa parte può essere tralasciata dal
lettore che voglia passare subito agli esercizi.
Il comando più semplice per fare un grafico è plot. L’idea è semplice, ma il controllo di tutte
le opzioni non è facile da ricordare. Vediamo di disegnare il grafico della funzione seno tra 0 e 2π.
Prima ci procuriamo dei numeri compresi tra 0 e 2π, regolarmente spaziati (diciamo spaziati di
un cinquantesimo) ed i valori della funzione seno in corrispondenza. La costante π (pi greco) in
scilab si chiama %pi.
-->xx=(0:.02:1)*2*%pi;
-->yy=sin(xx);
e poi diamo il comando grafico
-->plot(xx,yy)
Se volessimo aggiungere al grafico quello della funzione coseno, basterebbe calcolare i valori della
funzione coseno e ridare il comando plot:
-->yy2=cos(xx);
-->plot(xx,yy2)
Quindi ogni nuovo comando plotaggiunge un nuovo elemento al vecchio grafico. Forse però
avremmo voluto che la curva che aggiungiamo al grafico abbia un colore diverso, rosso ad esempio.
Facile:
-->plot(xx,yy2,"r")
"r" (tra virgolette " oppure tra apici ’) è l’abbreviazione di red, rosso in inglese. Altri colori
disponibili sono "g" (=green, verde), "y" (=yellow, giallo), "k" (=black, nero), "c" (=cyan,
ciano, una specie di azzurro), "m" (=magenta, una specie di viola), "w" (=white, bianco, cioè non
disegna niente; più utile di quanto sembri. . . ). Tantissimi altri colori sono disponibili, ma in maniera
più complicata.
Se invece avessimo voluto disegnare un grafico ex novo, avremmo prima dovuto cancellare il
vecchio. Il comando è
-->clf()
Uno sguardo ai grafici di poco fa avrebbe mostrato che le unità di misura lungo le ordinate e le
ascisse erano diverse. scilab sceglie le coordinate in modo da sfruttare al meglio lo schermo.
Questo è sgradevole talvolta; ad esempio volendo disegnare un cerchio, basta chiedere il grafico
dei punti di coordinate sin(xx*2*%pi) e cos(xx*2*%pi), che abbiamo memorizzato nelle
variabili yy e yy2. Ma se diamo il comando
Esercizio 1.1
7
-->plot(yy,yy2)
il risultato non è proprio quello che si vorrebbe. Per imporre la stessa unità di misura ci sono
due modi. Una è attraverso il menu della finestra grafica. Dopo aver disegnato il grafico, bisogna
cliccare su ‘‘edit’’ e poi axes properties->aspect e cliccare sulla finestrella ‘‘isoview’’. In alternativa
si può , dalla riga comandi, dare il comando
-->a=gca();a.isoview="on"
(Attenzione: se fate un copia/incolla da questa pagina alla riga comandi di scilab, talvolta i
caratteri ’ (apice) e " (virgolette) vengono trasformati in altri che ci somigliano, ma che sono in
realtà diversi e scilab protesterà. Basta correggerli con la tastiera sulla riga comandi).
Come default plot disegna i punti collegandoli con un segmento. Talvolta si vorrebbe semplicemente
disegnare dei punti staccati tra di loro. Ad esempio segnati con un pallino:
-->clf();plot(yy+1,yy2,".")
o un cerchietto vuoto
-->clf();plot(yy+1,yy2,"o")
Altri simboli sono disponibili e poi si possono fare più grandi o più piccoli e poi e poi. . . Le opzioni
grafiche sono molte ma per ora limitiamoci qui.
3 Svolgimento degli esercizi
Esercizio 1.1 (La percentuale di grasso nel latte) Sfruttiamo questo esercizio, abbastanza banale,
per fare pratica sull’uso di scilab nei problemi di statistica descrittiva. Vogliamo studiare dei
dati. Per prima cosa occorre ‘‘importarli’’.
Per tutti gli esercizi occorre iniziare copiando i dati dal file relativo, che si trova al solito sito:
http://www.ateneonline.it/pbaldi/supplementi/dati1.htm.
I dati vanno poi copiati in un editor ascii (blocco note di windows, ad esempio, oppure pfe101
che potete scaricare da http://www.simtel.net/pub/pd/11996.html e che è molto
gradevole) e salvati in un file. Attenzione a copiare solo i numeri e non anche, ad esempio, i nomi
delle variabili che ci sono nel file.
Per essere precisi, dunque, per questo esercizio occorrerà copiare i numeri che si trovano incolonnati
sul file dati da 4.32, che è il primo ‘‘annerendo’’ fino all’ultimo che è 4.58. Poi clic destro del mouse
e copia. Aprite blocco note (ad esempio), clic destro del mouse e ‘‘incolla’’. Infine aprite il menu
‘‘file’’ di notepad e selezionate ‘‘salva con nome’’. Suggerirei di salvare tutti questi file di dati in una
directory chiamata c:\dati0, usando lo stesso nome che figura in queste note. Per questo esercizio i dati si troveranno dunque, dopo che ce li avrete messi, nel file c:\dati0\vacche.txt.
A questo punto il comando per importare i dati è
-->vv=read(’c:\dati0\vacche.txt’,-1,1);
8
Esercizi del Capitolo 1
Nel comando read il primo argomento è il nome del file che contiene i dati (e va indicato tra
apici o anche tra virgolette), gli altri due sono le dimensioni della matrice in cui li si vuole mettere.
Qui l’ultimo 1 indica una colonna (quindi vogliamo un vettore colonna), mentre il –1 vuol dire che
si vogliono leggere tutte quante le righe fino alla fine del file. Quando si mette un ; alla fine del
comando, il risultato del comando non compare sullo schermo. Se non avessimo messo ; sullo
schermo sarebbero apparsi i valori del vettore vv.
Quanti dati conteneva il file (cioè qual è la dimensione del vettore vv)?
--> length(vv)
ans
=
120.
Vediamo un po’ questi numeri
--> vv
=
4.32
3.96
3.74
4.1
4.33
4.23
4.28
4.15
4.49
4.67
4.24
4.48
4.42
4.
4.16
4.67
4.03
4.29
4.05
4.11
4.29
3.89
4.2
[More (y or n ) ?]
Esercizio 1.1
9
Vediamo come si calcolano le quantità statistiche che ci interessano. Per la media
-->mean(vv)
ans
=
4.1660833
Non c’è un comando per la varianza, ma solo per la deviazione standard (che è la radice quadrata
della varianza)
-->st_deviation(vv)
ans
=
.3023807
Quindi occorre fare il quadrato
-->st_deviation(vv)ˆ2
ans
=
.0914341
La varianza si può anche calcolare direttamente con il comando sum, che, come abbiamo visto produce la somma delle coordinate di un vettore (o di una matrice). Il vettore (vv-mean(vv)).ˆ2
contiene i valori dei quadrati degli scarti tra i valori osservati e la loro media. La varianza è dunque
data da
-->sum((vv-mean(vv)).ˆ2)/length(vv)
ans
=
.0906722
Come si vede c’è una piccola differenza. In effetti quasi tutti i software statistici calcolano la
varianza di un campione dividendo per n − 1 invece che per n. Infatti
->sum((vv-mean(vv)).ˆ2)/(length(vv)-1)
ans
=
10
Esercizi del Capitolo 1
.0914341
Il motivo di questa diversa normalizzazione apparirà chiaro nel capitolo 5 del libro. Per calcolare
la varianza si può anche usare il comando mean:
-->mean((vv-mean(vv))ˆ2)
ans
=
.0906722
Per la mediana è previsto un comando apposito :
-->median(vv)
ans
=
4.145
La mediana è qui molto vicina alla media, il che fa pensare a un campione simmetrico, come si
vedrà meglio tra poco. Per calcolare il range occorre semplicemente fare la differenza tra il più
grande dei valori ed il più piccolo :
-->max(vv)-min(vv)
ans
=
1.53
Non esiste invece un comando apposito per il calcolo dei quartili. Ricordiamo però che, per
definizione il primo quartile è quel valore delle osservazioni che lascia un quarto delle osservazioni
alla sua sinistra. Basta quindi riordinare i valori osservati e poi prendere il trentesimo (le osservazioni
sono 120). Ricordiamo infatti che il quantile di ordine α è quello che si trova al posto α(n + 1)esimo partendo dal valore più piccolo (n è la cardinalità del campione). Se il numero α(n + 1) non
è intero, se ne prende la parte intera, cioè il più grande intero subito più piccolo. In questo caso
α = 41 = 0.25, α(n + 1) = 30.25. In maniera analoga il terzo quartile sarà il novantesimo: infatti,
con α = 43 = 0.75, α(n + 1) = 90.75. Dunque
-->zz=gsort(vv,’g’,’i’);
-->zz(30)
ans
=
Esercizio 1.1
11
3.96
-->zz(90)
ans
=
4.34
L’ampiezza dell’intervallo interquartile vale dunque
-->zz(90)-zz(30)
ans
=
.38
Per calcolare skewness e kurtosi usiamo il metodo usato per il calcolo della varianza. Calcoliamo
i momenti centrati di ordine 2, 3 e 4
-->m2=mean((vv-mean(vv)).ˆ2)
m2
=
.0906722
-->m3=mean((vv-mean(vv)).ˆ3)
m3
=
.0100474
-->m4=mean((vv-mean(vv)).ˆ4)
m4
=
.0246947
Da cui si derivano facilmente skewness e kurtosi
-->skew=m3/m2ˆ1.5
skew
=
.3679963
12
Esercizi del Capitolo 1
-->kurt=m4/m2ˆ2-3
kurt
=
.0036937
Il campione è quindi abbastanza simmetrico (skewness vicina a 0) e molto vicino a una popolazione normale (kurtosi vicina a 0). Anche se non richiesto dall’enunciato, possiamo disegnare
l’istogramma. Il comando è histplot con due argomenti: prima il numero di classi e poi il
nome della variabile. La regola di Sturges suggerisce un numero di classi pari a
-->1+log(length(vv))/log(2)
ans
=
7.9068906
Io preferisco un numero di classi più grande. . .
-->histplot(12,vv)
3.5
4
4.5
5
Figura 1 Istogramma delle percentuali di grasso. Questo istogramma, come gli altri che seguiranno, potrebbe
essere un po’ diverso da quello prodotto effettivamente dal comando scilab. Si nota una certa asimmetria
(coda lunga verso destra) in accordo con il valore leggermente positivo della skewness.
Questo campione possiede un numero pari di osservazioni e in questo caso non tutti sono d’accordo
su cosa scegliere come valore della mediana. La 60-esima osservazione in ordine crescente? Oppure
la 61-esima? O a mezza strada tra le due? La scelta tra queste possibilità può variare da un testo
Esercizio 1.2
13
all’altro o da un software all’altro. Vediamo qual è la scelta di scilab: la 60-esima e 61-esima
osservazione sono
-->zz(60)
ans
=
4.14
-->zz(61)
ans
=
4.15
Mentre abbiamo visto che il valore attribuito alla mediana da scilab è 4.145. Dunque, nel caso
di un numero pari di osservazioni, scilab fa la media tra i due valori. In generale una delle prime
questioni che appaiono quando si lavora con un software è capire che cosa esso fa veramente.
Esercizio 1.2 (Le conchiglie) Importiamo i dati e poi calcoliamo media, mediana e varianza:
-->xx=read(’c:\dati0\conchiglie.txt’,-1,1);
-->mean(xx)
ans
=
4.8436364
-->median(xx)
ans
=
4.4
-->s2=mean((xx-mean(xx))ˆ2)
s2
=
3.3423686
Il range è la differenza tra il valore più grande e il più piccolo:
14
Esercizi del Capitolo 1
-->max(xx)-min(xx)
ans
=
7.63
Più delicato il calcolo dei quartili, che però abbiamo già visto nell’Esercizio 1.1: intanto riordiniamo
le osservazioni in ordine crescente
-->zz=gsort(xx,’g’,’i’);
e poi vediamo quante sono
-->length(xx)
ans
=
33.
Per α =
1
4
eα=
3
4
i valori di α(n + 1) sono
-->34/4
ans
=
8.5
-->34*3/4
ans
=
25.5
Si tratta di valori che non sono interi: il primo quartile è la ottava osservazione, a partire dalla più
piccola, mentre il terzo quartile è la venticinquesima:
-->interq= zz(25)-zz(8)
ans
=
1.67
Tracciamo l’istogramma
Esercizio 1.2
15
-->clf();histplot(8,xx)
1
2
3
4
5
6
7
8
9
Figura 2 Istogramma delle lunghezze delle conchiglie.
Appare una bimodalità, forse i nostri dati sono formati da due popolazioni diverse. Come suggerisce il resto dell’esercizio, vediamo se eliminando le ultime 8 misurazioni la situazione cambia.
Procuriamoci i nuovi dati eliminando gli ultimi 8 valori (cioè conservando i primi 25)
-->xx0=xx(1:25);
Verifica
-->length(xx0)
ans
=
25.
-->mean(xx0)
ans
=
3.92
-->median(xx0)
ans
=
3.98
-->s2=mean((xx0-mean(xx0))ˆ2)
16
Esercizi del Capitolo 1
s2
=
.709776
Osserviamo che la mediana ha subito un cambiamento molto inferiore a quello della media. Occupiamoci del range e dell’intervallo interquartile:
-->max(xx0)-min(xx0)
ans
=
4.01
-->26/4
ans
=
6.5
-->26*3/4
ans
=
19.5
Il primo quartile è dunque la sesta osservazione in ordine crescente, mentre il terzo quartile è la
diciannovesima.
-->zz0=gsort(xx0,’g’,’i’);
-->interq0=zz0(19)-zz0(6)
ans
=
1.13
Quindi, eliminando i dati spuri, il range è passato da 7.63 a 4.01, mentre l’ampiezza dell’intervallo
interquartile da 1.67 a 1.13. Sappiamo del resto già che l’ampiezza dell’intervallo interquartile
costituisce un indice di dispersione molto più insensibile agli errori di campionamento che non il
range. Quest’ultimo, in realtà, ha come unico pregio (da tenere da conto) di essere molto facile da
calcolare. Vediamo ora l’istogramma
-->clf();histplot(7,xx0)
Esercizio 1.3
1
2
3
4
17
5
Figura 3 Istogramma delle lunghezze delle conchiglie dopo la separazione delle classi.
La bimodalita ora è sparita, anche se rimane una osservazione molto più piccola delle altre, che
meriterebbe un controllo.
Esercizio 1.3 Intanto carichiamo i dati delle misurazioni di Cavendish.
-->cv=read(’c:\dati0\cavendish.txt’,-1,1);
Calcolare media e mediana è immediato
-->mean(cv)
ans =
5.4541379
-->median(cv)
ans =
5.47
Controlliamo il terzo valore
-->cv(7)
ans
=
5.88
Cambiamolo in 4.88
Paolo Baldi
Introduzione al Calcolo delle Probabilità
con elementi di Statistica 2/ed
McGraw-Hill 2011
18
Esercizi del Capitolo 1
-->cv(7)=4.88
cv =
5.5
5.57
5.42
5.61
5.53
5.47
4.88
5.62
5.63
4.07
5.29
5.34
5.26
5.44
5.46
5.55
5.34
5.3
5.36
5.79
5.75
5.29
[More (y or n ) ?]
Una delle misurazioni è sensibilmente più piccola delle altre. Forse in quel caso sono stati commessi
errori, o comunque le condizioni sperimentali erano anomale. Per questo motivo forse è meglio
usare la mediana come stima del valore di centralità di questi dati. Come riprova calcoliamo media
e varianza con il valore cambiato
-->mean(cv)
ans
=
5.4196552
-->median(cv)
ans
=
5.46
Esercizio 1.4
19
La media ha subito un cambiamento molto superiore a quello della varianza.
c) Calcolo della skewness:
-->m3=mean((cv-mean(cv)).ˆ3);m2=mean((cv-mean(cv)).ˆ2);sk=m3/m2ˆ
(3/2)
sk
=
- 2.2068142
che è un valore molto negativo. Ed ora l’istogramma
-->clf();histplot(10,cv)
4
4.2
4.4
4.6
4.8
5
5.2
5.4
5.6
5.8
6
Figura 4 Istogramma delle misurazioni di Cavendish.
Il valore della skewness è piuttosto negativo, indice di un’asimmetria delle osservazioni con una
coda più accentuata verso sinistra. L’istogramma però mette in evidenza soprattutto la presenza di
una singola osservazione molto più piccola delle altre.
Esercizio 1.4 Cominciamo, al solito, importando i dati.
-->xx=read(’c:\dati0\ozono.txt’,-1,2);
La matrice xx contiene due colonne. Nella prima ci sono le misurazioni della concentrazione di
ozono, nella seconda quelle dell’irraggiamento. Sarebbe opportuno separare le due variabili. Come
nell’Esercizio 1.2,
-->oz=xx(:,1);
-->irr=xx(:,2);
20
Esercizi del Capitolo 1
Ora il vettore oz contiene le misurazioni dell’ozono. Calcoliamo la media ed il coefficiente di
skewness
-->mean(oz)
ans =
42.099099
-->s2=mean((oz-mean(oz))ˆ2)
s2 =
1097.3145
-->s3=mean((oz-mean(oz))ˆ3)
s3 =
45367.761
-->sk_oz=s3/s2ˆ1.5
ans =
1.2481037
I valori indicano una certa asimmetria del campione. La mediana vale
-->median(oz)
ans =
31.
Si tratta di un valore sensibilmente più piccolo della media, come spesso capita con i campioni
asimmetrici. Cancelliamo il grafico precedente e disegnamo l’istogramma
-->clf();histplot(12,oz)
che riconferma la asimmetria del campione, già messa in evidenza dal valore della skewness.
Calcoliamo le stessa quantità per i valori dell’irraggiamento solare:
-->mean(irr)
ans
=
184.8018
Esercizio 1.4
0
15
30
45
60
75
90
105
120
135
150
165
21
180
Figura 5 Istogramma delle misurazioni dell’ozono. È evidente l’asimmetria, come evidenziato anche dal
valore della skewness
-->median(irr)
ans
=
207.
-->s2=mean((irr-mean(irr))ˆ2)
s2
=
8233.8886
-->s3= mean ((irr-mean(irr))ˆ3)
s3
=
-363298.91
Quindi la skewness vale
-->s3/s2ˆ1.5
ans
=
-.4862466
I valori indicano un campione molto più simmetrico. Vediamo l’istogramma
22
Esercizi del Capitolo 1
-->clf();histplot(12,irr)
L’istogramma presenta due mode. Forse nel periodo di tempo considerato vi sono stati due andamenti climatici distinti (un periodo di bel tempo ed uno di brutto tempo).
c) Calcoliamo ora la covarianza delle due variabili, il coefficiente di correlazione e il coefficiente
angolare della retta di regressione dell’ozono rispetto all’irraggiamento. Ricordiamo che in questo
momento abbiamo conservato nella variabile s2 la varianza dell’irraggiamento.
-->kk=sum((oz-mean(oz)).*(irr-mean(irr)))/length(oz)
kk
=
1047.0647
-->s2_oz=sum((oz-mean(oz))ˆ2)/length(oz)
s2_oz
=
1097.3145
-->coeffcorr=kk/sqrt(s2)/sqrt(s2_oz)
ans
=
.3483417
-->kk/s2
ans
=
.1271653
Entrambi i valori sono positivi. In presenza di un aumento del valore dell’irraggiamento c’è quindi
da aspettarsi un aumento della concentrazione di ozono. Vediamo se il plot dell’ozono contro
l’irraggiamento conferma questo fatto
plot(irr,oz,".")
d) Per studiare la correlazione tra i valori dell’ozono con quelli del giorno prima, si può fare così:
creiamo due nuove variabili, la prima, oz1, contenente le misurazioni dei giorni da 1 a 110, la
seconda, oz2, quelle dei giorni da 2 a 111. Dunque oz1 contiene i valori misurati il giorno
prima rispetto a oz2. Calcoliamo poi il coefficiente di correlazione tra oz1 e oz2. Come fare
a costruirci queste due nuove variabili? Ricordando i metodi di manipolazione dei vettori visti
Esercizio 1.4
23
•
•
•
•
•
•
••
•
•
• •
• • • • ••
•
0
50
•
•
•
•
•
•
• •
•
•
•
•
•
•
•
•
• •
•
100
•
•
150
•
200
•
•
•
•
•
•
•••
•
•
•
•
•
•
•
••
•
• •
• • •
•
•
•
•
••
•
•
••
•
• •
•
•
• •
•••
•
• •
•
•
•
••
•• • •
•
•
•
•
•
•
•
•
•
•
250
300
•
350
Figura 6 Scatterplot dell’ozono rispetto all’irraggiamento. È evidente che al crescere dell’irraggiamento il
valore dell’ozono tende ad aumentare, almeno fino ad un certo livello.
nell’introduzione, prima creiamo una nuova variabile uguale a oz e poi ne eliminiamo la 111esima coordinata. In questo modo abbiamo ottenuto oz1. In modo simile si procede per ottenere
oz2, dopo di che i conti sono immediati
-->oz1=oz;
-->oz1(111)=[]
-->oz2=oz;
-->oz2(1)=[];
-->var1=mean((oz1-mean(oz1)).ˆ2)
var1
=
1102.81
-->var2= mean((oz2-mean(oz2)).ˆ2)
var2
=
1107.279
-->cov12= mean ((oz1-mean(oz1)).*(oz2-mean(oz2)))
cov12
=
24
Esercizi del Capitolo 1
491.36727
-->corr12=cov12/sqrt(var1)/sqrt(var2)
corr12
=
.4446593
Il coefficiente di correlazione, qui uguale a 0.44 indica l’evidenza di una dipendenza tra i valori di
un giorno e quelli del giorno successivo (come era del resto da aspettarsi). Per completare l’analisi
della dipendenza delle osservazioni da quelle del giorno precedente, possiamo calcolare la retta di
regressione di oz2 rispetto a oz1 e disegnarla. Calcoliamo i coefficienti
-->aa=cov12/var1
aa
=
.4455593
-->bb=mean(oz2)-aa*mean(oz1)
bb
=
23.261932
Poi vediamo come si dispongono i punti sul piano
-->clf();plot(oz1,oz2,".")
Per aggiungere al grafico la retta di regressione, calcoliamo prima i valori minimi e massimi assunti
dalla variabile in ascisse (cioè oz1)
-->xmin=min(oz1);xmax=max(oz1);
poi i coefficienti della retta di regressione
-->aa=cov12/var1
aa
=
.4455593
-->bb=mean(oz2)-aa*mean(oz1)
Esercizio 1.4
bb
25
=
23.261932
Per aggiungere la retta al grafico, basta richiedere il plot dando i valori di xmin e xmax e quelli
della retta in corrispondenza di questi due punti:
-->plot([xmin,xmax],[bb+aa*xmin,bb+aa*xmax])
Poiché non abbiamo specificato lo stile, nel grafico i due punti vengono congiunti con un segmento.
•
150
•
•
•
•
•
•
100
• •
•
....
........
........
........
.
.
.
.
.
.
.
.....
•
•
• ..................
•
..
•
•
........
.
•
.
.
.
•
.
.
.
•
.
........
•
•
........
•
........
........
.
.
.
••
.
.
.
•
.
•...........
•
•
• .............
...
........
•
........
.
•
.
.
.
.
•
.
.
• •
...
.
•
.
.
.
.
.
.
•
•• • ..........
•
...
.
.
.
.
•
.
.
.
•
••.............. • • •
•
••
•• ...••.............•..
•
.
.
.
.
•
•
.
.
.
•
.
.......
•
50
0
• ••• • •
•
•
•• • •• • • •
•
•
•••• ••• • •
•
• • •• •
• • ••
•
•
0
50
•
• •
•
•
•
100
150
Figura 7 Scatterplot dell’ozono rispetto al valore del giorno precedente, con indicazione della retta di regressione.
Giunti a questo punto, forse il lettore comincia a provare una certa noia di fronte alla prospettiva
di dover riscrivere ancora molte volte gli stessi comandi per calcolare le solite quantità di media,
varianza, etc. In effetti, quando si tratta di ripetere una sequenza di comandi è possibile scriverli
in un file, usare il file per definire una nuova funzione e usare la nuova funzione. In concreto le
operazioni da seguire sono: aprire un editore ascii (per scrivere funzioni conviene usare l’editor di
scilab, che si può invocare cliccando sul simboletto in alto a sinistra della pagina di scilab,
subito sotto il menu ‘‘file’’), scrivere in un file, che chiameremo stb.sci (stb=statistiche di
base), le righe seguenti (provate a farlo con un copia/incolla)
Il significato dei comandi è abbastanza evidente: a parte l’intestazione, che indica che stiamo
definendo una nuova funzione, le righe dalla 2 alla 9 calcolano media, mediana, varianza, skewness
e kurtosi ed assegnano questi valori a delle variabili (m1, q2,. . . ). Le righe dalla 10 alla 14
calcolano il primo ed il terzo quartile (floor è il nome della funzione parte intera). Le ultime
26
Esercizi del Capitolo 1
La funzione stb
function stb(xx)
nn=length(xx);
m1=mean(xx);
q2=median(xx);
s2=mean((xx-mean(xx)).ˆ2);
s3=mean((xx-mean(xx)).ˆ3);
s4=mean((xx-mean(xx)).ˆ4);
sk=s3/s2ˆ1.5;
ku=s4/s2ˆ2;
n1=floor((nn+1)/4);
n3=floor((nn+1)*3/4);
zz=gsort(xx,’g’,’i’);
q1=zz(n1);
q3=zz(n3);
disp(m1,"media:");
disp(q2,"mediana:");
disp(s2,"varianza:");
disp(sk,"skewness:");
disp(ku,"kurtosi:");
disp(q1,"primo quartile:");
disp(q3,"terzo quartile:");
disp(q3-q1,"ampiezza dell’intervallo interquartile:");
disp(zz(nn)-zz(1),"range:");
endfunction
righe provvedono a fare apparire allo schermo i valori calcolati. Per utilizzare questo file di comandi
occorre caricarlo. Si fa così: salvatelo con il nome stb.sci, diciamo nella directory c:\dati0.
Poi nel menu dello editor di scilab Execute->file with no echo. A questo punto avete in scilab
la nuova funzione stb. Se xx e il nome di un vettore in cui avete messo dei dati, dando il comando
stb(xx) vengono calcolate e inviate allo schermo tutte le quantità su cui abbiamo lavorato finora.
Per l’ozono occorrerà dunque scrivere
-->stb(oz)
media:
42.099099
mediana:
31.
varianza:
Esercizio 1.5
27
1097.3145
skewness:
1.2481037
kurtosi:
4.2044082
primo quartile:
18.
terzo quartile:
63.
ampiezza dell’intervallo interquartile:
45.
range:
167.
Negli esercizi che seguono ci si potrà servire della nuova funzione stb , il che semplificherà le
operazioni considerevolmente.
Sareste capaci di scrivere un file di comandi che, date due variabili x e y, faccia le cose seguenti:
1. faccia il plot di y rispetto a x;
2. calcoli i coefficienti della retta di regressione;
3. aggiunga al plot il grafico della retta di regressione?
Esercizio 1.5 (Cancro e vendita di sigarette) Naturalmente ci aspettiamo un valore della covarianza
positivo (ed una retta di regressione con un coefficiente angolare positivo). Intanto importiamo i
dati, ricordando che ora ci sono due colonne.
-->canc=read(’c:\dati0\cancer.txt’,-1,2);
Separiamo ora le due variabili, che si trovano nelle due colonne della matrice canc
-->sig=canc(:,1);mm=canc(:,2);
28
Esercizi del Capitolo 1
è facile ora calcolare covarianza e coefficiente di correlazione. Naturalmente ci aspettiamo che
entrambi siano quantità positive
-->c2=mean((sig-mean(sig)).*(mm-mean(mm)))
c2
=
16.060464
-->rho=c2/sqrt(mean((sig-mean(sig)).ˆ2)*mean((mm-mean(mm)).ˆ2))
rho
=
.6974025
(attenzione a non dare il nome cov alla covarianza tra i due caratteri: cov è già il nome di un
comando scilab). Calcoliamo coefficiente angolare e intercetta della retta di regressione
-->a=c2/mean((sig-mean(sig))ˆ2)
a
=
0.5290779
-->b=mean(mm)-a*mean(sig)
b
=
6.4716862
Vediamo ora il grafico delle due variabili
-->clf();plot(sig,mm,".")
Al grafico si può aggiungere la retta di regressione:
-->tt=[12,43];plot(tt,a*tt+b,"r");
(14 e 43 sono i due valori estremi di sig, "r" produce la retta in rosso.) Si vede che c’è uno
stato, e forse due, che hanno valori che si discostano dagli altri. Il grafico però non dice subito di
che stato si tratta. Qual è quello stato, quello che compare più a destra di tutti e nel quale il numero
di decessi è così inferiore rispetto al dato indicato dalla retta di regressione?
Il valore anomalo può essere determinato osservando che si tratta dello stato che presenta il maggior
numero di sigarette vendute per persona. Certo sarebbe stato comodo se si fosse potuto fare il
Esercizio 1.6
25
20
15
...
.......
.......
....... •
.
.
.
.
.
.
..
.......
.......
•
.......
.......
.
.
.
•
.
.
•
.
.
.......
•
.......
.......
•
.......
.
.
.
.
.
.
•..
.......
.......
.......
• •
.......
.
.
.
.
.
.
.
.......
•
•
.......•
.......
.......
.
.
.
•
•
.
.
.
•
...
.......
• ........•............ •
.
.
.
•
.
.
.
.
.......
••
.......•
.......
•.•................... •
..
.......
.......
.......
.
.
.
.
.
.
.
•
• ...............
•
• ....................
•
• •
......
.......
......•
•
•.....................
•
......
.
.
.
.
.
.
•
.......
.......
• •
.......
29
•
•
•
•
•
20
30
40
Figura 8 Scatterplot del numero di decessi (in ordinate) contro il numero di sigarette negli USA.
grafico indicando ogni valore con la sigla dello stato, invece che con un pallino. Ciò si può fare
in scilab, anche se questa operazione richiede delle manipolazioni più complesse. Il comando
da usare è xstring: xstring(x,y,str) disegna la stringa (cioè la parola) str nel punto
di coordinate (x,y). Quindi: cominciamo con recuperare le sigle degli stati (vedi in coda ai dati
dell’Esercizio 1.5) e mettiamoli in un file chiamato states.txt. Per leggere un vettore non
numerico si può sempre usare il comando read, ma occorre specificare il formato. Il comando è:
-->vv=read("states.txt",-1,1,’(a)’)
dove ’(a)’ indica dei dati in formato ascii. Ora il "vettore" vv ha come coordinate le sigle degli
stati. Disegnamo ‘‘in bianco’’ ora la porzione di piano su cui si trovano i valori delle osservazioni
-->clf();plot([min(sig),max(sig)],[min(mm),max(mm)], "w")
e poi, una dopo l’altra, poniamo le sigle degli stati nel posto delle coordinate date dalle due variabili
corrispondenti
-->for ii=1:length(sig), xstring(sig(ii),mm(ii),vv(ii));end;
(Lasciamo per ora in sospeso il significato del comando for...end, anche se chi ha un po’
d’esperienza in programmazione se lo può immaginare). Appare chiaro ora che lo stato anomalo
(molte sigarette vendute a fronte di relativamente pochi decessi) è il Nevada. Probabilmente perché
la presenza di molti casinò (Las Vegas. . . ) significa molte sigarette vendute a individui che non
risiedono nello stato. Spiegazioni simili si possono immaginare per gli altri discostamenti rispetto
alla retta di regressione.
Esercizio 1.6 (I salari degli amministratori delegati) Importiamo i dati
30
Esercizi del Capitolo 1
DC
MD
LA
25
NY
MT
OK
SC
AL
MS
15
UT
DE
NE
CT
IN
AZ
KY
KS
IO NB
TE
AR
WY
WV
ID
AK
FL RI
IL
MI
MA CA
OH
VT MO ME
WI TX
WA
20
NJ
NM
SD MN
ND
PE
20
30
40
Figura 9 Gli stati virtuosi e gli stati viziosi. . .
-->dat1=read(’c:\dati0\salary.txt’,-1,2);
Per comodità estraiamo dai dati le due variabili.
-->sal=dat1(:,2);et=dat1(:,1);
Sappiamo già come calcolare media e skewness
-->mean(sal)
ans =
404.16949
-->mean((sal-mean(sal))ˆ3)/(mean((sal-mean(sal))ˆ2)).ˆ1.5
ans =
.9156062
-->clf();histplot(10,sal)
L’istogramma conferma la asimmetria del campione (che presenta una coda più estesa verso destra),
già indicata dal valore positivo della skewness. La mediana vale
-->median(sal)
ans =
350.
Esercizio 1.6
0
•
400
200
600
800
1000
31
1200
Figura 10 L’istogramma dei salari. Il pallino indica il valore della media.
La mediana risulta più piccola della media, un fatto abbastanza ricorrente in presenza di questo
tipo di asimmetria. In questa situzione (campione asimmetrico) è più opportuno considerare come
indice di centralità la mediana. Naturalmente ci aspettiamo un valore positivo per la covarianza tra
salari ed età, e quindi una retta di regressione con un coefficiente angolare positivo. Intanto diamo
un’occhiata al grafico del salario contro l’età:
-->clf();plot(et,sal,".");
che conferma questa previsione.
•
•
•
•
•
•
•
•
•
•
• •
• •
•
•
•
• ............................
...................................................
...................................................
..............•
...........................•
.•
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
•
•
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
•
.
.
.
.
.
.
.
.
•........................................•....................•....
••
••
••
• •
•
•
••
•
•
••
•
•• •
•
•
• •
•
•
•
•
•
•
•
40
60
80
Figura 11 Salario contro età: c’è una dipendenza, ma anche grossi scostamenti rispetto alla retta di regressione.
Calcoliamo quindi la covarianza, il coefficiente di correlazione.
-->cov2=mean((et-mean(et)).*(sal-mean(sal)))
cov2 =
32
Esercizi del Capitolo 1
248.31485
-->varsal=mean((sal-mean(sal))ˆ.2)
varsal =
2.3360216 +
.9626654i
-->varsal=mean((sal-mean(sal)).ˆ2)
varsal =
47810.717
-->varet=mean((et-mean(et)).ˆ2)
varet =
79.265154
-->rho=cov2/sqrt(varet)/sqrt(varsal)
rho =
.1275554
Tutto sommato il coefficiente di correlazione è abbastanza piccolo. Calcoliamo i coefficienti della
retta di regressione
-->a=cov2/varet
a =
3.1327114
-->b=mean(sal)-a*mean(et)
b =
242.70211
Esercizio 1.7 (Il fiume Fraser) Importazione dei dati:
-->ff=read(’c:\dati0\fraser.txt’,-1,1);
Media e varianza si calcolano immediatamente
-->mean(ff)
Esercizio 1.7
ans
=
846.3038
-->s2=mean((ff-mean(ff))ˆ2)
s2
=
63365.249
Per calcolare skewness e kurtosi, procuriamoci prima i momenti centrati di ordine 3 e 4:
-->s3=mean((ff-mean(ff))ˆ3);s4= mean ((ff-mean(ff))ˆ4);
-->sk=s3/s2ˆ1.5
sk
=
1.2805113
-->ku=s4/s2ˆ2-3
ku
=
2.0518979
Questi valori si sarebbero anche potuti ottenere con il nuovo comando stb:
-->stb(ff)
media:
846.3038
mediana:
808.
varianza:
63365.249
skewness:
Paolo Baldi
Introduzione al Calcolo delle Probabilità
con elementi di Statistica 2/ed
McGraw-Hill 2011
33
34
Esercizi del Capitolo 1
1.2805113
kurtosi:
5.0518979
primo quartile:
660.
terzo quartile:
957.
intervallo interquartile:
297.
range:
1348.
Si vede comunque che il campione è asimmetrico (valore di skewness sensibilmente più grande di
0). Ciò si vede anche dall’istogramma
-->histplot(12,ff)
dove appare una lunga coda a destra.
•
400
600
800
1000
1200
1400
Figura 12 La portata del fiume Fraser. Il pallino indica il valore della media.
1600
1800
Esercizio 1.7
35
Il valore elevato della kurtosi indica che questa coda è ‘‘spessa’’. Detto per inciso questa è una
caratteristica tipica di questo tipo di dati di origine idrologica. Per vedere se il flusso è andato
aumentando nel tempo, si può considerare una nuova variabile ‘‘tempo’’, formata dai numeri
13,14, . . . ,91, indicanti gli anni, per poi studiare la dipendenza dei valori osservati da questa nuova
variabile. Definiamo la nuova variabile
-->tt=(13:91)’ ;
Il comando 13:91 produce un vettore riga e quindi tt è ora un vettore colonna, come ff. Calcoliamo covarianza e coefficiente di correlazione di tt e ff. Occorre prima calcolare la varianza di
tt
-->vart=mean((tt-mean(tt))ˆ2)
st
=
520.
poi la covarianza di tt e ff,
-->covtf=mean((ff-mean(ff)).*(tt-mean(tt)))
stf
=
2816.3291
e quindi il coefficiente di correlazione
-->rho=covtf/sqrt(s2)/sqrt(vart)
ans
=
.4906323
che è sensibilmente diverso da 0 e positivo. Ci sarebbe quindi una certa evidenza in favore del fatto
che il flusso medio del mese di marzo è andato aumentando nel tempo. Per approfondire questo
punto, possiamo fare un grafico della variabile ff rispetto a tt.
-->clf();plot(tt,ff,".")
Si osserva una certa tendenza crescente. Per vedere meglio possiamo calcolare la retta di regressione:
il coefficiente angolare è
-->a=covtf/vart
36
Esercizi del Capitolo 1
•
•
•
•
•
•
•
•
•
•
•
••
.........
......................
......................
......................•
.
.
.
.
•
.
.
.
.
.
.
.
.
.
•
.
.
•
.
.
.
.
•
.
.
•
•
•...................................................•
• • •
•
•
• •
......................
•
•
......................
•
.
•
.
.
.
.
.
.
.
.
.
.
.
.
.
.
•
.
.
.
.
.
.
• •
•
••
............
• •
......................
••
......................
....•
•
......................
•
•
.....•
•
........•
.
•
.
.
.
.
.
.
.
.
•
.
.
.
.
.
.
.
.
•
.
.
.
.
• ••
..
•• •• • ••
......................
•
•
••
•
•
••
• •
20
•
•• •
•
•
30
40
50
60
70
80
90
Figura 13 Aumento della portata massima del fiume Fraser nel tempo.
a
=
5.4160175
mentre l’intercetta vale
->b=mean(ff)-aa*mean(tt)
b
=
564.67089
Possiamo anche sovrapporre la retta di regressione sul grafico, come già si è visto per l’esercizio
sul consumo di sigarette: definiamo prima un vettore con i valori minimi e massimi di tt e poi
tracciamo la retta:
-->tt2=[13,91];plot(tt,a*tt2+b,"r")
Naturalmente tutto ciò ha un valore esplorativo, come quasi tutti i risultati di statistica descrittiva.
Occorrerebbe ora vedere se questa tendenza a crescere indicata dai grafici è significativa.
Esercizio 1.8 (La variazione del prezzo di una azione) Dire che in un determinato giorno un prezzo
z
. Ad esempio dire che c’è
è aumentato del z% significa che il prezzo e stato moltiplicato per 1 + 100
stato un aumento del 10% significa dire che il prezzo è stato moltiplicato per 1.1. Si tratta dunque
di prendere i dati relativi agli aumenti giornalieri, dividerli per 100, aggiungere 1 ad ognuno di essi
e moltiplicare tra loro tutti i 48 numeri così ottenuti. In scilab il comando prod, applicato ad un
vettore, produce come risultato il prodotto delle coordinate. Dunque: prima di tutto importiamo i
dati
Esercizio 1.8
37
-->bb=read(’c:\dati0\borsa.txt’,-1,1);
e poi, come abbiamo detto,
-->prod(1+bb/100)
ans
=
1.127079
Dunque, nel periodo indicato il prezzo originario è risultato moltiplicato per 1.127, che corrisponde
ad un aumento del 12.7%. Per calcolare l’aumento medio, p, bisogna ricordare che 1 + p deve
bb
essere la media geometrica dei numeri che si trovano nel vettore 1 + 100
. Dunque 1 + p deve essere
uguale a
-->prod(1+bb/100)ˆ(1/48)
ans
=
1.0024954
e p vale
-->prod(1+bb/100)ˆ(1/48)-1
ans
=
.0024954
L’aumento medio è dunque dello 0.25%. In particolare non è uguale alla media dei valori degli
aumenti giornalieri, che in questo caso è uguale a
-->mean(bb)
ans
=
.2608333
Potremmo ora completare l’esercizio e cercare di visualizzare l’andamento dell’azione nel periodo
considerato. Dando all’azione un valore uguale a 1 al tempo 0, il suo valore risulterà uguale a
p1
p1
p2
1 + 100
al tempo 1, a (1 + 1 + 100
)(1 + 1 + 100
) al tempo 2 e così via. Cominciamo a mettere in
p
un vettore i valori 1 + 100
-->pp=1+bb/100;
38
Esercizi del Capitolo 1
Il comando cumprod (cumulative product), applicato a un vettore xx, produce un vettore che
ha come prima coordinata la prima coordinata di xx, come seconda il prodotto delle prime due
coordinate di xx, . . . , come n-esima il prodotto delle n coordinate di xx. Dunque, se
-->yy=cumprod(pp);
Il vettore yy possiede come n-esima coordinata l’incremento del valore dell’azione nei primi n
giorni. Basta ora fare il grafico di questi valori rispetto al tempo:
-->clf();plot(1:length(yy),yy)
1.15
1.1
1.05
....
... ....
...........
... ................ .........
.
...............
.
.
.
...
.
.
...
..
...
.
... ........
.
.
.
........
.
.
.
.
...
....
...
.....
..... ................
.
.
.
.
.
...
......
...
... ..... .......
.
.
....
...
....................
...
......
.....
...
... .......... ..... .... .....
...
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
... ... ...
....
... ...
.
......................
...
......
.....
......... ........
... .....
...
.....
..... ......... ..........
...
...... .......
......
....
0
10
20
30
40
50
Figura 14 L’evoluzione del prezzo dell’azione.
Esercizio 1.9 (I bebé cinesi) Importiamo i dati
-->xx=read(’c:\dati0\bebecinesi.txt’,-1,2);
xx è ora una matrice con i centri delle classi nella prima colonna e gli effettivi nella seconda.
Mettiamo questi valori in due vettori distinti.
-->classi=xx(:,1);
-->eff=xx(:,2);
In questo esercizio occorre fare attenzione perché, come nell’Esercizio 1.2, i dati sono raggruppati
in classi. Il numero di osservazioni è dunque dato dalla somma dei valori del vettore eff
-->sum(eff)
ans
=
9465.
Esercizio 1.9
39
Per calcolare media e varianza (approssimate, perché i valori sono stati arrotondati al centro delle
classi rispettive) useremo le formule per i dati raggruppati, cioè le (1.3) e (1.5). Procuriamoci
intando le proporzioni delle singole classi
-->pp=eff/sum(eff)
pp
=
.0002113
.0006339
.0041204
.0406762
.0938193
.1826730
.2366614
.2120444
.1302694
.0677232
.0212361
.0078183
.0014791
.0005283
.0001057
dopo di che media e varianza valgono
-->mm=sum(pp.*classi)
mm
=
109.89958
-->ss=sum(pp.*(classi-mm)ˆ2)
s2
=
184.78149
Per ottenere media e varianza in grammi occorre moltiplicare la vecchia media per 28.349 e la
vecchia varianza per il quadrato di 28.349.
-->mm2=mm*28.349
mm2
=
40
Esercizi del Capitolo 1
3115.5431
-->ss2=ss*28.349ˆ2
ss2
=
.148502.56
La mediana, con i dati in questa forma si calcola in maniera diversa. Si tratterà della modalità che
contiene l’osservazione centrale, cioè la numero 4733. Con il comando
-->cumsum(eff)
ans
=
2.
8.
47.
432.
1320.
3049.
5289.
7296.
8529.
9170.
9371.
9445.
9459.
9464.
9465.
si vede che la 4733-esima osservazione (in ordine crescente) si trova nella 7ima classe, cioè quella
che ha come valore centrale
-->classi(7)
ans
=
107.5
Per i quartili si procede allo stesso modo:
-->9466/4
Esercizio 1.9
ans
41
=
2366.5
-->9466*3/4
ans
=
7099.5
Il primo quartile è il valore della 2366-esima osservazione, il terzo il valore dalla 7099-esima. Uno
sguardo più sopra indica che la prima si trova nella sesta classe, mentre la seconda nella nona. I
quartili e l’ampiezza dell’intervallo interquartile dunque valgono
-->q1=classi(6)
ans
=
99.5
-->q3=classi(9)
ans
=
123.5
-->interq=classi(9)-classi(6)
interq
=
24.
Ripetendo i ragionamenti che hanno portato alla formula (1.5) (che dà il momento centrato del
secondo ordine con i dati raggruppati) si trova che i momenti centrati di ordine 3 e 4 sono
-->m3=sum(pp.*(classi-mm)ˆ3)
m3
=
475.55176
-->m4=sum(pp.*(classi-mm)ˆ4)
42
Esercizi del Capitolo 1
m4
=
105452.71
e dunque skewness e kurtosi valgono
-->sk=m3/ssˆ1.5
sk
=
.1893259
-->ku=m4/ssˆ2-3
ku
=
.0884517
Si tratta dunque di un campione abbastanza simmetrico e normale.
Esercizio 1.10 (Le stazioni meteorologiche) Importiamo i dati
-->xx=read(’c:\dati0\meteo.txt’,-1,3);
xx è ora composto da tre colonne. Mettiamo questi valori in tre vettori distinti.
y=xx(:,1);x1=xx(:,2);x2=xx(:,3);
Calcolo delle covarianze
-->mean((y-mean(y)).*(x1-mean(x1)))
ans
=
173.11
-->mean((y-mean(y)).*(x2-mean(x2)))
ans
=
176.46778
e dei coefficienti di correlazione
Esercizio 1.10
-->mean((y-mean(y)).*(x1-mean(x1)))/sqrt(mean((y-mean(y)).ˆ2)*
mean((x1-mean(x1)).ˆ2))
ans
=
0.8971011
-->mean((y-mean(y)).*(x2-mean(x2)))/sqrt(mean((y-mean(y)).ˆ2)*
mean((x2-mean(x2)).ˆ2))
ans
=
0.9160091
La stazione due sembra (un po’) più affidabile.
43