# Esaminiamo una tabella di dati classificati con didascalie
# per righe e colonne. Supponiamo, prima, che siano caricati da rete:
readLines("http://macosa.dima.unige.it/om/prg/stf/settsess.txt", n=14)
[1] "Occupati in Italia nel 1991 per settore e sesso"
[2] "(frequenze in decine di migliaia)."
[3] "E' la tabella di contingenza:"
[4] " B"
[5] " 117 66"
[6] " A 526 166"
[7] " 768 518"
[8] "A (righe): settore (1:primario, 2:secondario, 3:altro)"
[9] "B (colonne): sesso (1:maschile, 2:femminile)"
[10] "Carica con read.table(...,skip=10)"
[11] "primario secondario altro"
[12] "M 117 526 768"
[13] "F 66 166 518"
[14] ""
dati <- read.table("http://macosa.dima.unige.it/om/prg/stf/settsess.txt", skip=10); dati
primario secondario altro
M 117 526 768
F 66 166 518
#
# Ovviamente i dati, in questo caso, potrei introdurli direttamente:
nomi <- list(c("M","F"),c("primario","secondario","altro"))
u <- c(117,66,526,166,768,518); r <- 2; c <- 3
dati <- array(u,dim=c(r,c),dimnames=nomi); dati
# con lo stesso risultato:
primario secondario altro
M 117 526 768
F 66 166 518
#
# Come estrarre colonne
dati[,2]
M F
526 166
# Come avere una distribuzione percentuale
prop.table(dati)
primario secondario altro
M 0.05414160 0.24340583 0.3553910
F 0.03054142 0.07681629 0.2397038
# Verifica che la somma faccia 1:
sum(prop.table(dati))
[1] 1
# la somma delle colonne e delle righe
colSums(dati)
primario secondario altro
183 692 1286
rowSums(dati)
M F
1411 750
# la matrice trasposta (righe e colonne scambiate)
t(dati)
M F
primario 117 66
secondario 526 166
altro 768 518
colSums(t(dati))
M F
1411 750
# gli istogrammi (percentuali) di sesso e settore affiancati
# (usando par, mfrow, mar)
c <- t(dati)
c1 <- c[1,]; c2 <- c[2,]; c3 <- c[3,]
par(mfrow=c(1,3), mar=c(3,3,2,1))
lim <- c(0,0.8)
barplot(c1/sum(c1),ylim=lim); barplot(c2/sum(c2),ylim=lim); barplot(c3/sum(c3),ylim=lim)
c1 <- c[,1]; c2 <- c[,2]
par(mfrow=c(1,2), mar=c(6,3,2,1))
lim <- c(0,0.7)
barplot(c1/sum(c1),ylim=lim,las=2); barplot(c2/sum(c2),ylim=lim,las=2)
# C'è anche la possibilità di avere una rappresentazione alternativa
# della coppia di variabili:
dat <- c(117,66, 526,166, 768,518)
nomi <- list(c("M","F"),c("I","II","III"))
dati <- matrix(dat, nrow = 2, ncol = 3,dimnames=nomi)
par(mfrow=c(1,2))
mosaicplot(dati)
mosaicplot(t(dati))
vedi qui per ottenere un istogramma bidimensionale della distribuzione