readLines("http://macosa.dima.unige.it/R/visitleva.txt",n=11)
 [1] "# tabella (dati da visite arruolamento in Marina; 1997; primi contingenti)"
 [2] "#   (qualche dato relativo al torace e' poco attendibile: la statistica"   
 [3] "#    deve tener conto anche di questo)"
 [4] "# torace (troncato ai cm)"
 [5] "# peso (troncato ai kg)"
 [6] "# regione (numerata in ordine di latitudine del capoluogo: 0ao 1tr 2fr" 
 [7] "#    3lomb 4ven 5piem 6em-rom 7lig 8tosc 9mar 10um 11abr 12laz 13pugl" 
 [8] "#    14camp 15sard 16cal 17sic; le altre regioni non sono presenti)"
 [9] "# statura (troncata ai cm e diminuita di 100: 178 cm -> 78)"
[10] "torac; peso; regio; statu" 
[11] "91;62;15;73"
# Vedo che si sono righe di commento inzianti con # e 1 riga di intestazioni
# I dati sono separati da ";"
# Le righe inizianti con # il programma le salta automaticamente; se ci fossero
# in testa ad es. altre 7 righe da saltare metterei skip=7. C'è anche una riga
# (la 10) di intestazioni: metto  header=TRUE  in modo che chiami le variabili
# con i nomi  torac, peso, regio, statu;  altrimenti le chiamerebbe V1,...,V4
dati <- read.table("http://macosa.dima.unige.it/R/visitleva.txt",sep=";",header=TRUE)
str(dati)
'data.frame':   4170 obs. of  4 variables:
 $ torac: int  91 86 89 88 92 95 91 83 87 88 ...
 $ peso : int  62 64 64 68 70 77 65 62 55 60 ...
 $ regio: int  15 15 15 15 15 15 15 15 15 15 ...
 $ statu: int  73 70 74 79 66 69 66 79 75 65 ...
# Ho visto che i dati sono molti (non avrebbe avuto senso visiualizzarli con R; e' per
# questo che nel comando  readLines  ho messo n=11
# Potrei perņ visualizzarli tutti in una tabella esterna, col comando:
# data.entry(dati)
summary(dati)
    torac             peso            regio           statu     
 Min.   : 48.00   Min.   : 48.00   Min.   : 0.00   Min.   :47.00  
 1st Qu.: 86.00   1st Qu.: 63.00   1st Qu.: 7.00   1st Qu.:70.00  
 Median : 90.00   Median : 70.00   Median :12.00   Median :74.00  
 Mean   : 91.19   Mean   : 70.48   Mean   :10.18   Mean   :74.42  
 3rd Qu.: 95.00   3rd Qu.: 76.00   3rd Qu.:14.00   3rd Qu.:79.00  
 Max.   :179.00   Max.   :126.00   Max.   :17.00   Max.   :96.00
# Aggiungo 1/2 ai dati troncati agli interi, in modo da non dover poi
# aggiungere 1/2 alle medie
dati$torac <- dati$torac+1/2; dati$peso <- dati$peso+1/2; dati$statu <- dati$statu+1/2
summary(dati)
    torac             peso            regio           statu     
 Min.   : 48.50   Min.   : 48.50   Min.   : 0.00   Min.   :47.50  
 1st Qu.: 86.50   1st Qu.: 63.50   1st Qu.: 7.00   1st Qu.:70.50  
 Median : 90.50   Median : 70.50   Median :12.00   Median :74.50  
 Mean   : 91.69   Mean   : 70.98   Mean   :10.18   Mean   :74.92  
 3rd Qu.: 95.50   3rd Qu.: 76.50   3rd Qu.:14.00   3rd Qu.:79.50  
 Max.   :179.50   Max.   :126.50   Max.   :17.00   Max.   :96.50
# i coefficienti di correlazione lineare tra le diverse variabili
cor(dati)
          torac       peso       regio      statu
torac 1.0000000 0.69749442  0.01582720  0.2553230
peso  0.6974944 1.00000000  0.02331792  0.4581852
regio 0.0158272 0.02331792  1.00000000 -0.1523683
statu 0.2553230 0.45818521 -0.15236827  1.0000000
# Vediamo, ad es., la relazione tra torace e peso
plot(c(45,180),c(45,130),type="n",xlab="", ylab="")
abline(h=seq(50,130,10),v=seq(40,180,20),lty=3)
# Con densCols posso colorare diversamente le uscite in base alle frequenze
dcols <- densCols(dati$torac,dati$peso)
points(dati$torac,dati$peso,col=dcols,pch=".", cex=5)
# cex dimensiona i punti

# la retta di regressione ("y in funz. di x": rossa)
mod = lm(dati$peso ~ dati$torac); mod$coefficients; abline(mod,col="red")
(Intercept)     dati$torac 
 -15.300034    0.940987
lm(dati$torac ~ dati$peso)$coefficients
(Intercept)     dati$peso 
 54.9919381   0.5170087
# e quella di "x in funzione di y" (verdone)
#  x = a y + b  ->  ay = x-b  ->  y = (x-b)/a
g <- function(x) (x-54.9919381)/0.5170087
plot(g,45,180,add=TRUE,col="green4")
#
# Elaborazioni simili per la relazione tra "statura-100" e peso:

# Posso, invece che usare diverse intensità di uno stesso colore, usare
# colori diversi. Ecco come:
plot(c(45,180),c(45,130),type="n",xlab="", ylab="")
abline(h=seq(50,130,10),v=seq(40,180,20),lty=3,col="blue")
colori <- c("red","green","blue")
dcols <- densCols(dati$torac,dati$peso,colramp=colorRampPalette(colori))
points(dati$torac,dati$peso,col=dcols,pch=".", cex=4)

#
# Per l'istogramma di "peso" posso usare:
hist(dati$peso,right=FALSE)
# Per avere l'istogramma delle freq. relative posso usare:
hist(dati$peso,right=FALSE,freq=FALSE)

# Sulla scala vert. ho le freq. rel. divise per l'ampiezza dei rettangolini
# I dati sono:
length(dati$peso)
[1] 4170
# La sintesi delle informazioni statistiche:
summary(dati$peso)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  48.50   63.50   70.50   70.98   76.50  126.50
#
# Vediamo, infine, un altro strumento spesso usato per studiare le relazioni
# tra due diverse variabili aleatorie relative allo stesso fenomeno:
# i QQ-plot (quantili di una variabile contro i quantili dell'altra).
# Vediamolo nel caso del confronto tra torace e peso:
torace <- dati$torac; peso <- dati$peso
qqplot(peso, torace)
abline(h=axTicks(2),v=axTicks(1),lty=3,col="blue")
# sotto a sinistra la rappresentazione grafica

# sopra a destra è stata sovrapposto un tratteggio
qqplot(peso, torace,col="red")
abline(h=axTicks(2),v=axTicks(1),lty=3,col="blue")
i <- (0:1e4)/1e4; x <- quantile(peso,i); y <- quantile(torace,i)
lines(x,y,lty=3)
# È evidente la tendenza delle due variabili ad essere proporzionali,
# a parte pochi valori estremi.
# Come sappiamo, ciò non accade per peso e altezza:
stat <- dati$statu
qqplot(peso, stat)
abline(h=axTicks(2),v=axTicks(1),lty=3,col="blue")