In questo file o questo sono raccolti alcuni dati (peso, lunghezza, lunghezza esculsa coda, sesso, peso delle gonadi - vedi) relativi a 129 trote di allevamento di circa due anni raccolti da alcuni studenti universitari. Analizza statisticamente i dati, svolgendo opportuni commenti (analizza alcune variabili singolarmente, relativamente all'intero campione o a parti di esso, e studia la correlazione tra alcune di esse). Un file di testo, identico, che contiene i dati è presente qui: http://macosa.dima.unige.it/om/esr/pro/pesci.txt
Possibile svolgimento con R. In fondo lo svolgimento con degli script online.
### (1) ### pesci = "http://macosa.dima.unige.it/om/esr/pro/pesci.txt" readLines(pesci,n=10) ## Vedo come sono organizzati i dati # [1] "'dati di 129 trote di allevamento di circa due anni" # [2] "'raccolti da studenti di Biologia di Genova" # [3] "'a: peso in g" # [4] "'b:lunghezza in cm" # [5] "'c:lunghezza esclusa coda" # [6] "'d:sesso (0 non identificato, 1 F, 2 M)" # [7] "'e:peso delle gonadi in g" # [8] "195.2;27.0;24.0;0;0.036" # [9] "220.2;26.5;24.0;0;0.051" #[10] "164.3;24.5;21.5;0;0.051" ## Capisco che devo saltare 7 righe e che il separatore è ";" dati = read.delim(pesci,header=FALSE,skip=7,sep =";") str(dati) # Un rapida vista dei dati: #'data.frame': 129 obs. of 5 variables: # $ V1: num 195 220 164 210 188 ... # $ V2: num 27 26.5 24.5 27.5 25 26.5 25 26 25.5 26 ... # $ V3: num 24 24 21.5 23 22 23.5 22 23 22 23 ... # $ V4: int 0 0 0 0 0 0 1 1 1 1 ... # $ V5: num 0.036 0.051 0.051 0.053 0.06 0.069 0.055 0.115 0.12 0.126 ... ## V1 peso, V2 lungh, V3 lungh senza coda, V4 sesso, V5 peso gonadi summary(dati) # Un rapido esame di essi: # V1 V2 V3 V4 V5 # Min. : 111.9 Min.: 22.00 Min. :18.50 Min. :0.000 Min. :0.0100 # 1^Qu.: 176.6 1^Qu.: 25.50 1^Qu.: 22.00 1^Qu.: 1.000 1^Qu.: 0.1890 # Median:191.4 Median:26.00 Median:23.00 Median:1.000 Median:0.2280 # Mean :192.7 Mean :26.29 Mean :22.98 Mean :1.016 Mean :0.2342 # 3^Qu.: 208.5 3^Qu.: 27.00 3^Qu. :24.00 3^Qu. :1.000 3^Qu. :0.2800 # Max. :266.4 Max. : 30.00 Max. :26.50 Max. :2.000 Max. :0.5290 ### (2) ### ## Esaminiamo prima la variabile qualitativa (V4: sesso, uscite 0,1,2) che ha una ## media che ci fa supporre che i maschi siano molto pochi. ## Per l'istogr. prendo intervalli centrati in 0,1 e 2: estremi 0,1,2,3 meno 1/2 dev.new(); hist(dati$V4,seq(0,3,1)-1/2,probability=TRUE,col="grey",main="",cex.axis=0.9); BOX() ## Per le frequenze assolute e percentuali posso fare: hist(dati$V4,seq(0,3,1)-1/2,probability=TRUE,col="grey",main="",cex.axis=0.9)$counts # 6 115 8 hist(dati$V4,seq(0,3,1)-1/2,probability=TRUE,col="grey",main="",cex.axis=0.9)$density # 0.04651163 0.89147287 0.06201550 datiM <- subset(dati,dati$V4==2); datiF <- subset(dati,dati$V4==1) ## I maschi sono molto pochi. Vedo che l'unica differenza significativa è ## il dato riferito al peso delle gonadi (V5), che è inferiore. summary(datiM) # V1 V2 V3 V4 V5 # Min. :141.0 Min. :24.00 Min. :20.00 Min. :2 Min. :0.0100 # 1^Qu. :176.9 1^Qu.: 24.75 1^Qu. :21.38 1^Qu. :2 1^Qu.: 0.0245 # Median:187.2 Median:25.50 Median:22.00 Median:2 Median:0.0715 # Mean :188.4 Mean: 25.44 Mean :21.88 Mean :2 Mean :0.0670 # 3^Qu. :203.8 3^Qu.: 26.12 3^Qu. :22.50 3^Qu. :2 3^Qu. :0.1065 # Max. :235.2 Max. :27.00 Max. :23.50 Max. :2 Max. :0.1210 summary(datiF ) # V1 V2 V3 V4 V5 # Min. :111.9 Min. :22.00 Min. :18.50 Min. :1 Min. :0.0550 # 1^Qu. :176.3 1^Qu. :25.50 1^Qu. :22.00 1^Qu. :1 1^Qu. :0.2065 # Median:191.4 Median:26.50 Median:23.00 Median:1 Median:0.2390 # Mean :192.8 Mean :26.35 Mean :23.06 Mean :1 Mean :0.2552 # 3^Qu. :208.5 3^Qu. :27.00 3^Qu. :24.00 3^Qu. :1 3^Qu. :0.2845 # Max. :266.4 Max. :30.00 Max. :26.50 Max. :1 Max. :0.5290 ## Mi limito, dunque, a studiare la sottopopolazione delle femmine. ### (3) ### ## Peso delle femmine: istogramma e boxplot dev.new(); hist(datiF$V1,probability=TRUE,col="grey",main="",cex.axis=0.9); BOX() statistics(datiF$V1) # Min. 1st Qu. Median Mean 3rd Qu. Max. # 111.9 176.3 191.4 192.8 208.5 266.4 # The brown dots are 5^ and 95^ percentiles # The red dot is the mean ### (4) ### ## Lunghezza delle femmine: istogramma e boxplot dev.new(); hist(datiF$V2,probability=TRUE,col="grey",main="",cex.axis=0.9); BOX() statistics(datiF$V2) # Min. 1st Qu. Median Mean 3rd Qu. Max. # 22.00 25.50 26.50 26.35 27.00 30.00 # The brown dots are 5^ and 95^ percentiles # The red dot is the mean ### (5) ### ## Lunghezza senza coda delle femmine: istogramma e boxplot dev.new(); hist(datiF$V3,probability=TRUE,col="grey",main="",cex.axis=0.9); BOX() statistics(datiF$V3) # Min. 1st Qu. Median Mean 3rd Qu. Max. # 22.00 25.50 26.50 26.35 27.00 30.00 # The brown dots are 5^ and 95^ percentiles # The red dot is the mean ### (6) ### ## Peso delle gonadi delle femmine: istogramma e boxplot dev.new(); hist(datiF$V5,probability=TRUE,col="grey",main="",cex.axis=0.9); BOX() statistics(datiF$V5) # Min. 1st Qu. Median Mean 3rd Qu. Max. # 0.0550 0.2065 0.2390 0.2552 0.2845 0.5290 # The brown dots are 5^ and 95^ percentiles # The red dot is the mean ### (7) ### ## A questo punto studiamo le correlazione tra le diverse variabili, escluso ## il sesso. Metto in datiF1 i dati delle femmine (escluso il sesso) datiF1 = datiF[c(1,2,3,5)] cor(datiF1) # V1 V2 V3 V5 # V1 1.0000000 0.8171241 0.75413292 0.28376025 # V2 0.8171241 1.0000000 0.78219905 0.15297057 # V3 0.7541329 0.7821990 1.00000000 0.09205871 # V5 0.2837603 0.1529706 0.09205871 1.00000000 ## V1 peso, V2 lungh, V3 lungh senza coda, V5 peso gonadi ## V5 ha un basso coefficiente di correlazione con le altre variabili. ## Le altre sono abbastanza correlate tra di loro. ### (8) ### ## Studiamo la relazione tra le due lunghezze. C'è, mediamente, una relazione di ## diretta proporzionalità tra le due: la coda è lunga circa il 13% del pesce (sotto ## la retta di regressione vincolata a passare per l'origine; 100%-87% = 13%): x = datiF$V2; y = datiF$V3; range(x); range(y) # 22 30 18.5 26.5 BF=5; HF=3.5; Plane(0,31, 0,28); Punto(x,y, "brown") regression(x,y, 0,0) # 0.8748 * x F = function(x) 0.8748 * x; graph1(F, -1,31, "seagreen") ### (9) ### ## Studiamo la relazione tra lunghezza e peso x = datiF$V2; y = datiF$V1; range(x); range(y) # 22 30 111.9 266.4 Plane(0,31, 0,270); Punto(x,y, "brown") ## In questo caso il peso in funzione della lunghezza non ha (come era ovvio avesse ## nel caso precedente) un andamento di proporzionalità diretta; ma, trattandosi di ## dati relativi a pesci grosso modo coetanei (non di pesci di età variabile libera- ## mente), ha un andamento grosso modo lineare: i dati danno luogo a punti disposti ## attorno ad una retta non passante per l'origine: y = -232+16.1x regression1(x,y) # 16.12 * x + -231.9 G = function(x) 16.12 * x + -231.9; graph1(G, -1,31, "seagreen") ### (10) ### ## La variabile V5 (peso delle gonadi), in questo range di età, ha un coefficiente ## di correlazione positivo con il peso (V1) e con la lunghezza (V2), ma molto basso ## (0.284 e 0.153). I relativi diagrammi confermano queste valutazioni numeriche.
Per altri commenti: Correlazione tra variabili casuali neGli Oggetti Matematici.
Vediamo come elaborare i dati (vedi) utilizzando degli script online. Dando uno sguardo ai dati vediamo immediatamente che le trote sono quasi tutte femmine. Facciamo l'istogramma del dato "sesso" (0 non identificato, 1 F, 2 M) usando questo file (copio i dati del sesso - 0,0,...,2 - e li introduco).
Ottengo:
A questo punto dei dati raccolti esaminiamo solo quelli delle trote femmine. Facciamo subito i boxplot, usando questo script.
peso F
mean=192.843
min=111.9 1^ quartile=176 median=191.4 3^ quartile=208.5 max=266.4
41.5% 10% 11.1% 37.5%
← 5^ percentile=152 95^ percentile=230.5 →
lunghezza F
mean=26.352
min=22 1^ quartile=25.5 median=26.5 3^ quartile=27 max=30
43.8% 12.5% 6.3% 37.5%
← 5^ percentile=24.5 95^ percentile=29 →
senza coda F
mean=23.057
min=18.5 1^ quartile=22 median=23 3^ quartile=24 max=26.5
43.8% 12.5% 12.5% 31.3%
← 5^ percentile=21 95^ percentile=25.5 →
gonadi F
mean=0.255
min=0.055 1^ quartile=0.206 median=0.239 3^ quartile=0.285 max=0.529
31.9% 7% 9.7% 51.5%
← 5^ percentile=0.129 95^ percentile=0.432 →
Posso osservare, per inciso, che il peso delle gonadi dei maschi è significativamente più basso (0.010, 0.020, 0.026, 0.068, 0.075, 0.105, 0.111, 0.121 contro la media 0.255). Gli andamenti dei box-plot sono confermati da quelli degli istogrammi, realizzati con questo script.
È evidente, come già osservato, la correlazione (negativa) tra sesso (1 F, 2 M) e peso delle gonadi. Usiamo questo script:
Ci aspettiamo correlazioni maggiori tra lunghezza con e senza coda, tra lunghezza e peso. Esploriamo, poi, quello tra peso delle gonadi e sia lunghezza che peso. Ci limitiamo alle femmine.
Nel caso delle lunghezze con e senza coda forse sarebbe meglio imporre il passaggio per (0,0): ipotizzando una trota di lughezza 0, se le taglio la coda la lunghezza resta 0 (il coefficiente di correlazione ovviamente non cambia).
Se rappresentassimo i dati ci aspetteremmo nei primi due casi la loro distribuzione, abbastanza allineata, lungo le due rette di regressione. Negli ultimi due casi ci aspetteremmo un minore allineamento. Volendo possiamo rappresentare graficamente dati e rette di regressione con script di questo tipo.