# Analizziamo i seguenti dati:
readLines("http://macosa.dima.unige.it/om/prg/r/battit2.txt",n=11)
[1] "# battiti prima di eventuale corsa di 1 min"
[2] "# battiti dopo"
[3] "# fatta corsa (1 si`;0 no; a seconda di esito di lancio moneta)"
[4] "# fumatore (1 si`;0 no)"
[5] "# sesso (1 M; 2 F)"
[6] "# altezza"
[7] "# peso"
[8] "# attivita` fisica (0 nulla;1 poca;2 media; 3 molta)"
[9] " BatPrima BatDopo Corsa Fumo Sesso Alt Peso Fis"
[10] "01 64 88 1 0 1 168 64 2"
[11] "02 58 70 1 0 1 183 66 2"
# È una tabella, proviamo ad esaminarne due righe, dopo i commenti
# (salto le 8 righe di commenti)
read.table("http://macosa.dima.unige.it/om/prg/r/battit2.txt",skip=8, nrows=2)
BatPrima BatDopo Corsa Fumo Sesso Alt Peso Fis
01 64 88 1 0 1 168 64 2
02 58 70 1 0 1 183 66 2
# OK. Leggo "tutta" la tabella e la metto, ad es., nella variabile dati
# Poiché le righe da saltare iniziano con # (simbolo che in R indica un commento)
# potrei battere read.table("http://macosa.dima.unige.it/om/prg/r/battit2.txt")
# senza skip=8 poichè le righe verrebbero saltate automaticamente.
dati <- read.table("http://macosa.dima.unige.it/om/prg/r/battit2.txt",skip=8)
# I dati sono separati da uno spazio quindi non devo specificare l'elemento
# di separazione; farei lo stesso se i dati fossero separati da ","; se fossero
# separati da ";" dovrei aggiungere sep=";"
# Per esaminarli posso visualizzarbe la 'struttura' con str
str(dati)
'data.frame': 92 obs. of 8 variables:
$ BatPrima: int 64 58 62 66 64 74 84 68 62 76 ...
$ BatDopo : int 88 70 76 78 80 84 84 72 75 118 ...
$ Corsa : int 1 1 1 1 1 1 1 1 1 1 ...
$ Fumo : int 0 0 1 1 0 0 0 0 0 0 ...
$ Sesso : int 1 1 1 1 1 1 1 1 1 1 ...
$ Alt : int 168 183 186 184 176 184 184 188 184 181 ...
$ Peso : int 64 66 73 86 70 75 68 86 88 63 ...
$ Fis : int 2 2 3 1 2 1 3 2 2 2 ...
# Per un'idea rapida del file posso usare (come già fatto nel caso univariato) "summary"
summary(dati)
BatPrima BatDopo Corsa Fumo
Min. : 48.00 Min. : 50 Min. :0.0000 Min. :0.0000
1st Qu.: 64.00 1st Qu.: 68 1st Qu.:0.0000 1st Qu.:0.0000
Median : 71.00 Median : 76 Median :0.0000 Median :0.0000
Mean : 72.87 Mean : 80 Mean :0.3804 Mean :0.3043
3rd Qu.: 80.00 3rd Qu.: 85 3rd Qu.:1.0000 3rd Qu.:1.0000
Max. :100.00 Max. :140 Max. :1.0000 Max. :1.0000
Sesso Alt Peso Fis
Min. :1.00 Min. :154.0 Min. :43.00 Min. :0.000
1st Qu.:1.00 1st Qu.:167.8 1st Qu.:57.00 1st Qu.:2.000
Median :1.00 Median :175.0 Median :66.00 Median :2.000
Mean :1.38 Mean :174.4 Mean :65.84 Mean :2.109
3rd Qu.:2.00 3rd Qu.:183.0 3rd Qu.:70.25 3rd Qu.:2.000
Max. :2.00 Max. :190.0 Max. :97.00 Max. :3.000
# Posso esaminare le singole variabili. Vediamo come:
altezze <- dati$Alt
summary(altezze)
Min. 1st Qu. Median Mean 3rd Qu. Max.
154.0 167.8 175.0 174.4 183.0 190.0
int <- seq(150,200,5); hist(altezze,right=FALSE, int)
# Ottengo l'istogramma delle frequenze seguente
# Ma ho due sottopopolazioni diverse per altezza:
datiF <- subset(dati,dati$Sesso==2); datiM <- subset(dati,dati$Sesso==1)
nrow(datiF); nrow(datiM)
[1] 35
[1] 57
# Potrei esaminare i dati con:
# str(datiF); str(datiM)
# summary(datiF); summary(datiM)
# Per confrontare graficamente i dati può essere comodo averli su una stessa
# scala (per abbreviare, memorizzo alcuni dati con nuove variabili):
M <- datiM$Alt; F <- datiF$Alt
dev.new()
hist(F,int,right=FALSE,angle=45,density=14,xlab="",main="",probability=TRUE,ylim=c(0,0.06),col="red")
hist(M,int,right=FALSE,add=TRUE,angle=135,density=7,xlab="",main="",probability=TRUE,col="blue")