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