Ho importato i dati dell’indagine Multiscopo sulle famiglie: aspetti della vita quotidiana per l’anno 2023 con i relativi metadati.
Oltre alle variabili indicate in Legenda AVQ.docx, e riportate di seguito:
num..ordine | Acronimovariabile | TipoVariabile | Denominazione.Variabile |
|---|---|---|---|
227 | TEATRO | Categorica | Frequenza con cui negli ultimi 12 mesi è andato a teatro? |
228 | CINE | Categorica | Frequenza con cui negli ultimi 12 mesi è andato a cinema? |
229 | MUSEO | Categorica | Frequenza con cui negli ultimi 12 mesi è andato a musei o mostre? |
230 | MUSIC | Categorica | Frequenza con cui negli ultimi 12 mesi è andato a concerti di musica classica? |
231 | ACMUS | Categorica | Frequenza con cui negli ultimi 12 mesi è andato ad altri concerti di musica? |
232 | SPSPO | Categorica | Frequenza con cui negli ultimi 12 mesi è andato a spettacoli sportivi? |
233 | DISCO | Categorica | Frequenza con cui negli ultimi 12 mesi è andato in discoteche, balere, night club o altri luoghi dove ballare? |
234 | MONUM | Categorica | Frequenza con cui negli ultimi 12 mesi è andato in siti archeologici, monumenti? |
238 | FREQIN12 | Categorica | Frequenza d'uso di Internet negli ultimi 12 mesi |
344 | NLIBRIM | Categorica | Numero di libri letti negli ultimi 12 mesi (considerare solo i libri letti per motivi non strettamente scolastici o professionali) |
345 | NLIBRI_CARM | Categorica | numero di libri cartacei letti |
346 | NLEBOOM | Categorica | Numero di e-book letti negli ultimi 12 mesi |
347 | NLAUDIOM | Categorica | Numero di audiolibri ascoltati negli ultimi 12 mesi |
207 | FREQSERIE | Categorica | frequenza serie tv |
209 | NUMBIBM | Categorica | quante volte si è recato in biblioteca negli ultimi 12 mesi? |
341 | LQUOT | Categorica | Legge quotidiani almeno una volta alla settimana? |
342 | QUONLINE | Categorica | Legge quotidiani online almeno una volta alla settimana? |
6 | ETAMi | Categorica | Eta in anni compiuti |
7 | SESSO | Categorica | Sesso - scheda generale |
11 | ISTRMi | Categorica | Titolo di studio |
21 | RIPMf | Categorica | Ripartizione geografica di residenza dell'intervistato |
708 | RISEC | Categorica | Con riferimento agli ultimi 12 mesi e tenendo presente le esigenze di tutti i componenti familiari, come sono state le risorse economiche complessive della famiglia? |
3 | NCOMP | - | n. dei componenti la famiglia attuale |
ho ritenuto opportuno scaricare anche se seguenti variabili:
num..ordine | Acronimovariabile | TipoVariabile | Denominazione.Variabile |
|---|---|---|---|
1 | PROFAM | - | progressivo famiglia |
2 | PROIND | - | numero d'ordine del componente |
237 | INTTEMPO | Categorica | Lei ha mai usato Internet? |
343 | LIBRI | Categorica | ha letto libri negli ultimi 12 mesi? |
208 | BIBLIO | Categorica | biblioteca negli ultimi 12 mesi |
12 | CONDMi | Categorica | Condizione professionale |
14 | POSIZMi | Categorica | posizione nella professione |
22 | COEFIN | - | Coefficiente di riporto all'universo |
PROFAM e PROIND possono essere usate per
creare un identificativo univoco dei rispondenti
INTTEMPO e LIBRI servono per controllare le
risposte alle domande sull’uso di internet (FREQIN12) e sul numero di
libri letti ()
BIBLIO per controllare NUMBIBM
CONDMi POSIZMi potrebbero essere usati per
ricostruire la condizione professionale
COEFIN serve per il riporto all’universo nelle
elaborazioni
Sulla base dei metadati ho ricostruito il dataset dfrid
in R.
tibble [41,750 × 31] (S3: tbl_df/tbl/data.frame)
$ PROFAM : int [1:41750] 1 1 ...
$ PROIND : int [1:41750] 1 2 ...
$ TEATRO : Factor w/ 5 levels "mai","1-3 volte",..: 1 1 ...
$ CINE : Factor w/ 5 levels "mai","1-3 volte",..: 1 1 ...
$ MUSEO : Factor w/ 5 levels "mai","1-3 volte",..: NA 1 ...
$ MUSIC : Factor w/ 5 levels "mai","1-3 volte",..: 1 1 ...
$ ACMUS : Factor w/ 5 levels "mai","1-3 volte",..: 1 2 ...
$ SPSPO : Factor w/ 5 levels "mai","1-3 volte",..: 1 2 ...
$ DISCO : Factor w/ 5 levels "mai","1-3 volte",..: 1 1 ...
$ MONUM : Factor w/ 5 levels "mai","1-3 volte",..: 1 1 ...
$ FREQIN12 : Factor w/ 5 levels "tutti i giorni",..: 1 2 ...
$ INTTEMPO : Factor w/ 4 levels "si, negli ultimi 3 mesi",..: 1 1 ...
$ LIBRI : Factor w/ 2 levels "no","si": 1 NA ...
$ NLIBRIM : Factor w/ 25 levels "01","02","03",..: NA NA ...
$ NLIBRI_CARM: Factor w/ 25 levels "01","02","03",..: NA NA ...
$ NLEBOOM : Factor w/ 26 levels "00","01","02",..: NA NA ...
$ NLAUDIOM : Factor w/ 5 levels "00","01","02",..: NA NA ...
$ FREQSERIE : Factor w/ 4 levels "Una o piu� volte a settimana",..: 1 1 ...
$ NUMBIBM : Factor w/ 25 levels "01","02","03",..: NA NA ...
$ BIBLIO : Factor w/ 2 levels "no","si": 1 1 ...
$ LQUOT : Factor w/ 5 levels "no","si, 1 o 2 giorni",..: 1 NA ...
$ QUONLINE : Factor w/ 5 levels "no","si, 1 o 2 giorni",..: 1 NA ...
$ ETAMi : Factor w/ 15 levels "da 0 a 2 anni",..: 12 12 ...
$ SESSO : Factor w/ 2 levels "maschio","femmina": 1 2 ...
$ ISTRMi : Factor w/ 5 levels "laurea e post-laurea",..: 2 3 ...
$ RIPMf : Factor w/ 6 levels "Nord-ovest","Nord-est",..: 4 4 ...
$ RISEC : Factor w/ 4 levels "ottime","adeguate",..: 2 2 ...
$ NCOMP : int [1:41750] 2 2 ...
$ CONDMi : Factor w/ 4 levels "occupato","in cerca di occupazione",..: 2 3 ...
$ POSIZMi : Factor w/ 5 levels "dirigente; autonomo come imprenditore; libero professionista",..: 2 NA ...
$ COEFIN : int [1:41750] 18584641 18584641 ...
Domanda: 18.1 Consideri gli ultimi 12 mesi, quante volte, indicativamente, è andato a: (PER LE PERSONE DI 3 ANNI E PIÙ)
Distribuzioni di frequenza nel dataset:
dfrid %>% filter(ETAMi %in% levels(ETAMi)[-1]) %>%
select(TEATRO,CINE,MUSEO,MUSIC,ACMUS,SPSPO,DISCO,MONUM) %>%
gather("variable","value",1:8,factor_key = T) %>%
group_by(variable,value) %>% count() %>%
spread(variable,n) %>%
mutate(value=factor(value,levels=levels(dfrid$TEATRO))) %>%
arrange(value) %>%
janitor::adorn_totals(where = "row") value TEATRO CINE MUSEO MUSIC ACMUS SPSPO DISCO MONUM
mai 32172 24132 27181 36093 31318 29952 32983 28411
1-3 volte 6723 12062 9794 3151 7289 6906 4304 8620
4-6 volte 784 2641 2125 440 953 1469 1246 1979
7-12 volte 235 892 652 133 221 651 660 656
più di 12 volte 210 479 318 222 254 1031 922 443
<NA> 882 800 936 967 971 997 891 897
Total 41006 41006 41006 41006 41006 41006 41006 41006
dfrid %>% filter(ETAMi %in% levels(ETAMi)[-1]) %>%
select(TEATRO,CINE,MUSEO,MUSIC,ACMUS,SPSPO,DISCO,MONUM) %>%
gather("variable","value",1:8,factor_key = T) %>%
group_by(variable,value) %>% summarise(n=n()) %>%
mutate(perc=n/sum(n)*100) %>% select(-n) %>%
spread(variable,perc) %>%
mutate(value=factor(value,levels=levels(dfrid$TEATRO))) %>%
arrange(value) %>%
janitor::adorn_totals(where = "row") %>%
mutate_at(2:ncol(.),~round(.,digits = 1)) value TEATRO CINE MUSEO MUSIC ACMUS SPSPO DISCO MONUM
mai 78.5 58.8 66.3 88.0 76.4 73.0 80.4 69.3
1-3 volte 16.4 29.4 23.9 7.7 17.8 16.8 10.5 21.0
4-6 volte 1.9 6.4 5.2 1.1 2.3 3.6 3.0 4.8
7-12 volte 0.6 2.2 1.6 0.3 0.5 1.6 1.6 1.6
più di 12 volte 0.5 1.2 0.8 0.5 0.6 2.5 2.2 1.1
<NA> 2.2 2.0 2.3 2.4 2.4 2.4 2.2 2.2
Total 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
dfrid %>% filter(ETAMi %in% levels(ETAMi)[-1]) %>%
select(id,TEATRO,CINE,MUSEO,MUSIC,ACMUS,SPSPO,DISCO,MONUM) %>%
mutate_at(2:ncol(.),~ifelse(is.na(.),1,0)) %>%
gather("variable","value",2:9,factor_key = T) %>%
group_by(id) %>% summarise(n.na=sum(value)) %>%
mutate(n.na=ifelse(n.na>1,1,n.na)) %>%
group_by(n.na) %>% summarise(n.id=n_distinct(id)) %>%
mutate(perc=n.id/sum(n.id)*100) %>%
janitor::adorn_totals(where = "row") n.na n.id perc
0 39512 96.356631
1 1494 3.643369
Total 41006 100.000000
C’è circa un 2% di risposte mancanti per ciascuna variabile, per un totale del 3.6% di casi interessati: come trattarle?
Possibile soluzione: assegnarli alla modalità con maggiore frequenza
(mai)
Una seconda questione riguarda il tipo di variabile: in realtà si tratta di variabili di tipo ordinale.
Avendo l’obiettivo di fare una cluster analysis in cui si usano variabili qualitative, ed essendo quindi necessario utilizzare la metrica di Gower per il calcolo delle distanze, bisogna ricordare che le variabili nominali (factor) e quelle ordinali (factor ordered) vengono trattate diversamente.
# trasformo gli NA in "mai" ed escludo dal dataset 0-2 anni
dfrid <- dfrid %>% filter(ETAMi %in% levels(ETAMi)[-1]) %>%
mutate(TEATRO = fct_na_value_to_level(TEATRO, level = "mai")) %>%
mutate(CINE = fct_na_value_to_level(CINE, level = "mai")) %>%
mutate(MUSEO = fct_na_value_to_level(MUSEO, level = "mai")) %>%
mutate(MUSIC = fct_na_value_to_level(MUSIC, level = "mai")) %>%
mutate(ACMUS = fct_na_value_to_level(ACMUS, level = "mai")) %>%
mutate(SPSPO = fct_na_value_to_level(SPSPO, level = "mai")) %>%
mutate(DISCO = fct_na_value_to_level(DISCO, level = "mai")) %>%
mutate(MONUM = fct_na_value_to_level(MONUM, level = "mai"))# trasformo in variabili ordinali
dfrid <- dfrid %>%
mutate_at(which(names(dfrid)=="TEATRO"):which(names(dfrid)=="MONUM"),~ordered(.))# A tibble: 13 × 3
# Groups: FREQIN12, INTTEMPO [13]
FREQIN12 INTTEMPO n
<fct> <fct> <int>
1 tutti i giorni si, negli ultimi 3 mesi 26608
2 tutti i giorni si, da più 3 mesi a 1 anno fa 23
3 qualche volta alla settimana si, negli ultimi 3 mesi 3827
4 qualche volta alla settimana si, da più 3 mesi a 1 anno fa 172
5 una volta alla settimana si, negli ultimi 3 mesi 482
6 una volta alla settimana si, da più 3 mesi a 1 anno fa 32
7 qualche volta al mese (meno di 4 volte) si, negli ultimi 3 mesi 489
8 qualche volta al mese (meno di 4 volte) si, da più 3 mesi a 1 anno fa 68
9 meno di una volta al mese si, negli ultimi 3 mesi 219
10 meno di una volta al mese si, da più 3 mesi a 1 anno fa 63
11 <NA> si, più di 1 anno fa 995
12 <NA> mai 7481
13 <NA> <NA> 547
In questo caso la maggior parte dei dati mancanti è rappresentato da
chi non usa internet
(INTTEMPO=si, più di 1 anno fa o
mai)
Si può aggiungere quindi la modalità non uso internet
alla variabile FREQIN12
levels(dfrid$FREQIN12) <- c(levels(dfrid$FREQIN12), "non uso internet")
dfrid$FREQIN12[is.na(dfrid$FREQIN12) & dfrid$INTTEMPO %in% c("si, più di 1 anno fa","mai")] <- "non uso internet"dfrid$FREQIN12
Frequency Percent Valid Percent
tutti i giorni 26631 64.9442 65.822
qualche volta alla settimana 3999 9.7522 9.884
una volta alla settimana 514 1.2535 1.270
qualche volta al mese (meno di 4 volte) 557 1.3583 1.377
meno di una volta al mese 282 0.6877 0.697
non uso internet 8476 20.6701 20.950
NA's 547 1.3340
Total 41006 100.0000 100.000
Rimangono 547 casi mananti (1.3%).
Le variabili NLIBRIM, NLIBRI_CARM,
NLEBOOM, NLAUDIOM sono categoriche, hanno
modalità diverse e sono state rivolte solo a chi ha risposto
LIBRI=si (Negli ultimi 12 mesi ha letto libri).
NLIBRIM | n.1 | NLIBRI_CARM | n.2 | NLEBOOM | n.3 | NLAUDIOM | n.4 |
|---|---|---|---|---|---|---|---|
01 | 1,718 | 01 | 1,728 | 00 | 11,946 | 00 | 15,288 |
02 | 2,904 | 02 | 2,830 | 01 | 1,132 | 01 | 290 |
03 | 2,388 | 03 | 2,185 | 02 | 839 | 02 | 143 |
04 | 1,536 | 04 | 1,399 | 03 | 520 | 03 | 77 |
05 | 1,564 | 05 | 1,359 | 04 | 252 | 4 e piu' | 269 |
06 | 1,010 | 06 | 847 | 05 | 324 | ||
07 | 374 | 07 | 306 | 06 | 158 | ||
08 | 504 | 08 | 458 | 07 | 75 | ||
09 | 138 | 09 | 112 | 08 | 81 | ||
10 | 1,328 | 10 | 1,054 | 09 | 61 | ||
11 | 74 | 11 | 56 | 10 | 218 | ||
12 | 501 | 12 | 368 | 11 | 22 | ||
13 | 51 | 13 | 33 | 12 | 79 | ||
14 | 42 | 14 | 24 | 13 | 11 | ||
15 | 393 | 15 | 307 | 14 | 8 | ||
16 | 36 | 16 | 25 | 15 | 67 | ||
17 | 14 | 17 | 11 | 16-20 | 111 | ||
18 | 39 | 18 | 40 | 21-25 | 27 | ||
19 | 8 | 19 | 9 | 26-30 | 37 | ||
20 | 514 | 20 | 364 | 31-40 | 43 | ||
21-25 | 180 | 21-25 | 124 | 41-50 | 27 | ||
26-30 | 269 | 26-30 | 187 | 51 e piu' | 29 | ||
31-40 | 182 | 31-40 | 130 | ||||
41-50 | 159 | 41-50 | 107 | ||||
51 e piu' | 141 | 51 e piu' | 77 | ||||
<NA> | 1,927 |
Probabilmente gli NA della variabile NLIBRI_CARM corrispondono a chi non ha letto libri cartacei.
levels(dfrid$NLIBRI_CARM) <- c(levels(dfrid$NLIBRI_CARM), "00")
dfrid$NLIBRI_CARM[is.na(dfrid$NLIBRI_CARM) & (dfrid$ETAMi %in% levels(dfrid$ETAMi)[3:15] & dfrid$LIBRI=="si")] <- "00"
dfrid$NLIBRI_CARM <- fct_relevel(dfrid$NLIBRI_CARM, "00")Rimane comunque il problema di come trattare queste variabili nelle analisi di cluster.
Intanto si tratta di variabili ordinali con molte modalità ed usarle tutte nella cluster potrebbe introdurre molto “rumore”.
Una prima soluzione può consistere nel trasformarle in numeriche (per
le modalità come 21-25 si assume il valore centrale: 23), verificando e
correggendo i valori numerici di NLIBRI_CARM,
NLEBOOM, NLAUDIOM in modo che ci sia coerenza
con NLIBRIM. Ad esempio supponiamo il caso:
NLIBRIM=21-25 con
NLIBRI_CARM=NLEBOOM=0 e
NLAUDIOM=4 e piu’, avremo che: nnNLIBRIM=23
(valore numerico di NLIBRIM),
nnNLIBRI_CARM=nnNLEBOOM=0 e
nnNLAUDIOM=23 (è 4 e piu’ e permette di essere coerenti con
nnNLIBRIM).
Nelle analisi, avendo l’obiettivo generale del consumo culturale, si
può usare il numero totale di libri letti, indipendentemente da quanti
per tipo di supporto, e aggiungere una variabile sul tipo di supporto
preferito, calcolato in base al peso che hanno i diversi supporti sul
numero totale di libri letti. In specifico si può calcolare una nuova
variabile tipo.libri riportando quale sia il supporto su
cui è stata letta la maggior parte dei libri. Se una persona legge 10
libri e 8 sono cartacei e 2 ebook, sarà
tipo.libri=cartacei, se ne avesse letti 5
cartacei e 5 ebook metto tipo.libri=misto.
Una alternativa, anzichè usare il numero di libri letti, può consistere nel considerare tipologie di lettori. Ad esempio ISTAT (Lettura di libri e fruizione delle biblioteche. Istituto Nazionale di Statistica, 2023) definisce quattro tipologie di lettori:
n.libri.letti | tipologia |
|---|---|
nessuno | Non lettori |
1-3 libri | Lettori deboli |
4-11 libri | Lettori medi |
12 o più libri | Lettori forti |
Non riporto tutti i comandi usati per ottenere il dataset corretto,
anche perché per alcuni casi la verifica di coerenza sul numero di libri
letti è stata fatta manualmente.
Riporto invece la summary delle variabili legate alla lettura:
LIBRI NLIBRIM NLIBRI_CARM NLEBOOM NLAUDIOM
no :23438 02 : 2904 02 : 2830 00 :11946 00 :15288
si :16067 03 : 2388 03 : 2185 01 : 1132 01 : 290
NA's: 638 01 : 1718 00 : 1927 02 : 839 02 : 143
05 : 1564 01 : 1728 03 : 520 03 : 77
04 : 1536 04 : 1399 05 : 324 4 e piu': 269
(Other): 5957 (Other): 5998 (Other): 1306 NA's :24076
NA's :24076 NA's :24076 NA's :24076
nnNLIBRIM nnNLIBRI_CARM nnNLEBOOM nnNLAUDIOM
Min. : 0.000 Min. : 0.000 Min. : 0.0000 Min. : 0.0000
1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.0000 1st Qu.: 0.0000
Median : 0.000 Median : 0.000 Median : 0.0000 Median : 0.0000
Mean : 2.912 Mean : 2.264 Mean : 0.5611 Mean : 0.0875
3rd Qu.: 3.000 3rd Qu.: 2.000 3rd Qu.: 0.0000 3rd Qu.: 0.0000
Max. :82.000 Max. :55.000 Max. :55.0000 Max. :50.0000
NA's :638 NA's :638 NA's :638 NA's :638
tipo.libri lettore.tipo
Non lettori:23438 Non lettori :23438
cartacei :12830 Lettori deboli: 7010
ebook : 2507 Lettori medi : 6528
audiolibri : 229 Lettori forti : 2529
misto : 501 NA's : 638
NA's : 638
dfrid$FREQSERIE[dfrid$ETAMi %in% levels(dfrid$ETAMi)[-1]]
Frequency Percent Valid Percent
Una o più volte a settimana 17487 42.645 43.66
Qualche volta al mese (meno di 4 volte) 8324 20.299 20.78
Qualche volta l'anno 4457 10.869 11.13
Mai 9783 23.857 24.43
NA's 955 2.329
Total 41006 100.000 100.00
All domanda quante volte si è recato in biblioteca negli ultimi
12 mesi? rispondono solo quelli che hanno risposto si alla domanda
Negli ultimi 12 mesi è stato in una biblioteca? per cui bisogna
aggiungere una modalità “00” a NUMBIBM corrispondente a chi
non ha usato la biblioteca.
dfrid=dfrid %>% droplevels(dfrid$NUMBIBM)
levels(dfrid$NUMBIBM) <- c(levels(dfrid$NUMBIBM),"00")
dfrid$NUMBIBM[is.na(dfrid$NUMBIBM) & (dfrid$ETAMi %in% levels(dfrid$ETAMi)[-1] & dfrid$BIBLIO=="no")] <- "00"
dfrid$NUMBIBM <- fct_relevel(dfrid$NUMBIBM, "00")
dfrid <- dfrid %>% mutate_at(which(names(dfrid)=="NUMBIBM"),~ordered(.))
descr::freq(dfrid$NUMBIBM,plot = F)dfrid$NUMBIBM
Frequency Percent Valid Percent Cum Percent
00 35299 86.08252 87.09566 87.10
01 541 1.31932 1.33485 88.43
02 797 1.94362 1.96649 90.40
03 633 1.54368 1.56184 91.96
04 455 1.10959 1.12265 93.08
05 505 1.23153 1.24602 94.33
06 330 0.80476 0.81423 95.14
07 74 0.18046 0.18259 95.32
08 118 0.28776 0.29115 95.62
09 28 0.06828 0.06909 95.68
10 610 1.48759 1.50510 97.19
11-15 368 0.89743 0.90799 98.10
16-20 258 0.62918 0.63658 98.73
21-25 65 0.15851 0.16038 98.89
26-30 143 0.34873 0.35283 99.25
31-40 72 0.17558 0.17765 99.43
41-50 109 0.26581 0.26894 99.69
51 e piu' 124 0.30239 0.30595 100.00
NA's 477 1.16324
Total 41006 100.00000 100.00000
Anche in questo caso potrebbe essere opportuno creare una variabile con classi del numero di visite in biblioteca
dfrid=dfrid %>% filter(ETAMi %in% levels(dfrid$ETAMi)[-1]) %>%
mutate(clNUMBIBM=ifelse(BIBLIO=="no",0,
ifelse(NUMBIBM %in% levels(dfrid$NUMBIBM)[1:3],1,
ifelse(NUMBIBM %in% levels(dfrid$NUMBIBM)[4:6],2,
ifelse(NUMBIBM %in% levels(dfrid$NUMBIBM)[7:10],3,
ifelse(NUMBIBM %in% levels(dfrid$NUMBIBM)[11:13],4,
ifelse(NUMBIBM %in% levels(dfrid$NUMBIBM)[14:17],5,NA))))))) %>%
mutate(clNUMBIBM=factor(clNUMBIBM,
levels = 0:5,
labels = c("mai","1-3 volte","4-6","7-10","11-25","più 25 volte")))
dfrid$clNUMBIBM <- ordered(dfrid$clNUMBIBM)
descr::freq(dfrid$clNUMBIBM,plot = F)dfrid$clNUMBIBM
Frequency Percent Valid Percent Cum Percent
mai 35299 86.0825 87.3630 87.36
1-3 volte 1338 3.2629 3.3115 90.67
4-6 1593 3.8848 3.9426 94.62
7-10 550 1.3413 1.3612 95.98
11-25 1236 3.0142 3.0590 99.04
più 25 volte 389 0.9486 0.9628 100.00
NA's 601 1.4656
Total 41006 100.0000 100.0000
dfrid$LQUOT[dfrid$ETAMi %in% levels(dfrid$ETAMi)[3:15]]
Frequency Percent Valid Percent
no 28827 71.811 72.603
si, 1 o 2 giorni 5895 14.685 14.847
si, 3 o 4 giorni 1477 3.679 3.720
si, 5 o 6 giorni 619 1.542 1.559
si, tutti i giorni 2887 7.192 7.271
NA's 438 1.091
Total 40143 100.000 100.000
dfrid$QUONLINE[dfrid$ETAMi %in% levels(dfrid$ETAMi)[3:15]]
Frequency Percent Valid Percent
no 27761 69.155 70.061
si, 1 o 2 giorni 5891 14.675 14.867
si, 3 o 4 giorni 1594 3.971 4.023
si, 5 o 6 giorni 669 1.667 1.688
si, tutti i giorni 3709 9.239 9.360
NA's 519 1.293
Total 40143 100.000 100.000
# dfrid2 contiene correzioni sul numero di libri letti
dfElab <- dfrid %>% select(id:RISEC,clNUMBIBM) %>%
left_join(dfrid2 %>% select(id,nnNLIBRIM:tipo.libri),by="id") %>%
mutate(nnNLIBRIM=ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & LIBRI=="no",0,nnNLIBRIM)) %>%
mutate(nnNLIBRI_CARM=ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & LIBRI=="no",0,nnNLIBRI_CARM)) %>%
mutate(nnNLEBOOM=ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & LIBRI=="no",0,nnNLEBOOM)) %>%
mutate(nnNLAUDIOM=ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & LIBRI=="no",0,nnNLAUDIOM)) %>%
mutate(lettore.tipo=ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & LIBRI=="no",0,
ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & nnNLIBRIM %in% 1:3,1,
ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & nnNLIBRIM %in% 4:11,2,
ifelse(ETAMi %in% levels(dfrid$ETAMi)[3:15] & nnNLIBRIM>11,3,NA))))) %>%
mutate(lettore.tipo=factor(lettore.tipo,levels = 0:3,labels = c("Non lettori","Lettori deboli","Lettori medi","Lettori forti")))
levels(dfElab$tipo.libri) <- c(levels(dfElab$tipo.libri),"Non lettori")
dfElab$tipo.libri[is.na(dfElab$tipo.libri) & (dfrid$ETAMi %in% levels(dfrid$ETAMi)[3:15] & dfElab$LIBRI=="no")] <- "Non lettori"
dfElab$tipo.libri <- fct_relevel(dfElab$tipo.libri, "Non lettori")
dfElab <- dfElab %>% mutate_at(which(names(dfElab)=="NLIBRIM"):which(names(dfElab)=="NLAUDIOM"),~ordered(.))
dfElab <- dfElab %>% mutate_at(which(names(dfElab)=="lettore.tipo"),~ordered(.))Per le analisi potrebbe essere opportuno considerare i rispondenti al di sopra di una certa età, che potrebbe essere 16 o 18 anni.
Il dataset finale, se consideriamo ad esempio i maggiorenni avrebbe la seguente struttura:
dfElab18 <- dfElab %>% filter(ETAMi %in% levels(dfElab$ETAMi)[7:15])
dfElab18 <- dfElab18 %>% droplevels(dfElab18$ETAMi)prog | variable | type | levels | missing |
|---|---|---|---|---|
1 | id | character | ||
2 | PROFAM | integer | ||
3 | PROIND | integer | ||
4 | NCOMP | integer | ||
5 | ETAMi | factor | da 18 a 19 anni; da 20 a 24 anni; da 25 a 34 anni; da 35 a 44 anni; da 45 a 54 anni; da 55 a 59 anni; da 60 a 64 anni; da 65 a 74 anni; 75 anni e piu' | 0 |
6 | SESSO | factor | maschio; femmina | 0 |
7 | ISTRMi | factor | laurea e post-laurea; diploma; licenza di scuola media; licenza di scuola elementare, nessun titolo di studio; non disponibile | 0 |
8 | CONDMi | factor | occupato; in cerca di occupazione; inattivo; non disponibile | 0 |
9 | POSIZMi | factor | dirigente; autonomo come imprenditore; libero professionista; direttivo, quadro; impiegato; capo operaio, operaio subalterno e assimilati; apprendista; lavorante a domicilio per conto d'impresa; lavoratore in proprio; socio cooperativa Produzione Beni e/o prestazioni di servizio; coadiuvante; collaborazione coordinata e continuativa (con o senza progetto); prestazione d'opera occasionale; non disponibile | 6,346 |
10 | RIPMf | factor | Nord-ovest; Nord-est; Centro; Sud; Isole; non disponibile | 0 |
11 | COEFIN | integer | ||
12 | FREQSERIE | factor | Una o più volte a settimana; Qualche volta al mese (meno di 4 volte); Qualche volta l'anno; Mai | 829 |
13 | BIBLIO | factor | no; si | 395 |
14 | NUMBIBM | ordered factor | 00; 01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11-15; 16-20; 21-25; 26-30; 31-40; 41-50; 51 e piu' | 395 |
15 | TEATRO | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
16 | CINE | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
17 | MUSEO | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
18 | MUSIC | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
19 | ACMUS | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
20 | SPSPO | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
21 | DISCO | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
22 | MONUM | ordered factor | mai; 1-3 volte; 4-6 volte; 7-12 volte; più di 12 volte | 0 |
23 | INTTEMPO | factor | si, negli ultimi 3 mesi; si, da più 3 mesi a 1 anno fa; si, più di 1 anno fa; mai | 482 |
24 | FREQIN12 | factor | tutti i giorni; qualche volta alla settimana; una volta alla settimana; qualche volta al mese (meno di 4 volte); meno di una volta al mese; non uso internet | 482 |
25 | LQUOT | ordered factor | no; si, 1 o 2 giorni; si, 3 o 4 giorni; si, 5 o 6 giorni; si, tutti i giorni | 324 |
26 | QUONLINE | ordered factor | no; si, 1 o 2 giorni; si, 3 o 4 giorni; si, 5 o 6 giorni; si, tutti i giorni | 403 |
27 | LIBRI | factor | no; si | 515 |
28 | NLIBRIM | ordered factor | 01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21-25; 26-30; 31-40; 41-50; 51 e piu' | 22,097 |
29 | NLIBRI_CARM | ordered factor | 00; 01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21-25; 26-30; 31-40; 41-50; 51 e piu' | 22,097 |
30 | NLEBOOM | ordered factor | 00; 01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11; 12; 13; 14; 15; 16-20; 21-25; 26-30; 31-40; 41-50; 51 e piu' | 22,097 |
31 | NLAUDIOM | ordered factor | 00; 01; 02; 03; 4 e piu' | 22,097 |
32 | RISEC | factor | ottime; adeguate; scarse; assolutamente insufficienti | 0 |
33 | clNUMBIBM | ordered factor | mai; 1-3 volte; 4-6; 7-10; 11-25; più 25 volte | 514 |
34 | nnNLIBRIM | numeric | 515 | |
35 | nnNLIBRI_CARM | numeric | 515 | |
36 | nnNLEBOOM | numeric | 515 | |
37 | nnNLAUDIOM | numeric | 515 | |
38 | tipo.libri | factor | Non lettori; cartacei; ebook; audiolibri; misto | 515 |
39 | lettore.tipo | ordered factor | Non lettori; Lettori deboli; Lettori medi; Lettori forti | 515 |
In questo dataset le variabili da NLIBRIM a
NLAUDIOM contengono come missing i casi di chi non legge
libri (LIBRI=no).
Se consideriamo come variabili base della cluster analysis:
FREQSERIE, clNUMBIBM, TEATRO,
CINE, MUSEO, MUSIC,
ACMUS, SPSPO, DISCO,
MONUM, FREQIN12, LQUOT,
QUONLINE, lettore.tipo,
tipo.libri
i casi con NA sono:
dfElab18 %>%
select(FREQSERIE,clNUMBIBM,TEATRO:MONUM,FREQIN12,LQUOT,QUONLINE,lettore.tipo,tipo.libri) %>%
mutate_all(~ifelse(is.na(.),1,0)) %>%
mutate(n.na=rowSums(.)) %>% group_by(n.na) %>% summarise(n=n()) %>% mutate(`%`=n/sum(n)*100)# A tibble: 8 × 3
n.na n `%`
<dbl> <int> <dbl>
1 0 34051 95.4
2 1 919 2.58
3 2 298 0.835
4 3 108 0.303
5 4 89 0.249
6 5 49 0.137
7 6 27 0.0757
8 7 140 0.392
Il 95.4% dei casi non presenta dati mancanti,
se analizziamo come il 4.6% di casi con informazioni mancanti incidono
sulle variabili base, osserviamo che gli NA sembrano distribuiti
uniformemente:
dftmp <-dfElab18 %>% left_join(
dfElab18 %>%
select(id,FREQSERIE,clNUMBIBM,TEATRO:MONUM,FREQIN12,LQUOT,QUONLINE,lettore.tipo,tipo.libri) %>%
mutate_at(2:ncol(.),~ifelse(is.na(.),1,0)) %>% column_to_rownames("id") %>%
mutate(n.na=rowSums(.)) %>%
rownames_to_column("id") %>%
mutate(pres.na=ifelse(n.na==0,0,1)) %>%
mutate(pres.na=factor(pres.na,levels = 0:1,labels = c("no.na","si.na"))) %>%
select(id,pres.na),by="id")Variable | V1 | no.na | si.na | % na |
|---|---|---|---|---|
FREQSERIE | Una o più volte a settimana | 14927 | 384 | 2.5 |
Qualche volta al mese (meno di 4 volte) | 7017 | 159 | 2.2 | |
Qualche volta l'anno | 3832 | 71 | 1.8 | |
Mai | 8275 | 187 | 2.2 | |
<NA> | 829 | |||
clNUMBIBM | mai | 30663 | 1024 | 3.2 |
1-3 volte | 818 | 31 | 3.7 | |
4-6 | 992 | 28 | 2.7 | |
7-10 | 382 | 8 | 2.1 | |
11-25 | 878 | 18 | 2.0 | |
più 25 volte | 318 | 7 | 2.2 | |
<NA> | 514 | |||
TEATRO | mai | 27907 | 1429 | 4.9 |
1-3 volte | 5089 | 162 | 3.1 | |
4-6 volte | 666 | 20 | 2.9 | |
7-12 volte | 210 | 7 | 3.2 | |
più di 12 volte | 179 | 12 | 6.3 | |
CINE | mai | 21757 | 1254 | 5.4 |
1-3 volte | 9090 | 274 | 2.9 | |
4-6 volte | 2034 | 57 | 2.7 | |
7-12 volte | 756 | 25 | 3.2 | |
più di 12 volte | 414 | 20 | 4.6 | |
MUSEO | mai | 23812 | 1341 | 5.3 |
1-3 volte | 7622 | 206 | 2.6 | |
4-6 volte | 1770 | 47 | 2.6 | |
7-12 volte | 585 | 12 | 2.0 | |
più di 12 volte | 262 | 24 | 8.4 | |
MUSIC | mai | 30658 | 1495 | 4.6 |
1-3 volte | 2713 | 98 | 3.5 | |
4-6 volte | 388 | 13 | 3.2 | |
7-12 volte | 119 | 6 | 4.8 | |
più di 12 volte | 173 | 18 | 9.4 | |
ACMUS | mai | 26545 | 1410 | 5.0 |
1-3 volte | 6262 | 158 | 2.5 | |
4-6 volte | 840 | 37 | 4.2 | |
7-12 volte | 200 | 5 | 2.4 | |
più di 12 volte | 204 | 20 | 8.9 | |
SPSPO | mai | 26242 | 1397 | 5.1 |
1-3 volte | 5340 | 160 | 2.9 | |
4-6 volte | 1136 | 36 | 3.1 | |
7-12 volte | 513 | 10 | 1.9 | |
più di 12 volte | 820 | 27 | 3.2 | |
DISCO | mai | 27954 | 1417 | 4.8 |
1-3 volte | 3702 | 114 | 3.0 | |
4-6 volte | 1058 | 33 | 3.0 | |
7-12 volte | 557 | 26 | 4.5 | |
più di 12 volte | 780 | 40 | 4.9 | |
MONUM | mai | 24525 | 1381 | 5.3 |
1-3 volte | 6925 | 162 | 2.3 | |
4-6 volte | 1671 | 40 | 2.3 | |
7-12 volte | 567 | 20 | 3.4 | |
più di 12 volte | 363 | 27 | 6.9 | |
FREQIN12 | tutti i giorni | 22724 | 606 | 2.6 |
qualche volta alla settimana | 2957 | 128 | 4.1 | |
una volta alla settimana | 374 | 10 | 2.6 | |
qualche volta al mese (meno di 4 volte) | 417 | 24 | 5.4 | |
meno di una volta al mese | 217 | 26 | 10.7 | |
non uso internet | 7362 | 354 | 4.6 | |
<NA> | 482 | |||
LQUOT | no | 23919 | 901 | 3.6 |
si, 1 o 2 giorni | 5487 | 193 | 3.4 | |
si, 3 o 4 giorni | 1379 | 50 | 3.5 | |
si, 5 o 6 giorni | 566 | 29 | 4.9 | |
si, tutti i giorni | 2700 | 133 | 4.7 | |
<NA> | 324 | |||
QUONLINE | no | 22872 | 924 | 3.9 |
si, 1 o 2 giorni | 5476 | 148 | 2.6 | |
si, 3 o 4 giorni | 1506 | 41 | 2.7 | |
si, 5 o 6 giorni | 627 | 21 | 3.2 | |
si, tutti i giorni | 3570 | 93 | 2.5 | |
<NA> | 403 | |||
lettore.tipo | Non lettori | 20853 | 729 | 3.4 |
Lettori deboli | 5760 | 172 | 2.9 | |
Lettori medi | 5354 | 127 | 2.3 | |
Lettori forti | 2084 | 87 | 4.0 | |
<NA> | 515 | |||
tipo.libri | Non lettori | 20853 | 729 | 3.4 |
cartacei | 10368 | 298 | 2.8 | |
ebook | 2229 | 65 | 2.8 | |
audiolibri | 196 | 8 | 3.9 | |
misto | 405 | 15 | 3.6 | |
<NA> | 515 |
Possiamo quindi selezionare i casi che non presentano dati mancanti senza introdurre distorsioni rilevanti.
Come variabili per la descrizione dei cluster avremo:
NCOMP, ETAMi, SESSO,
ISTRMi, RIPMf, RISEC
Oltre a queste si potrebbe considerare la condizione professionale,
ottenuta combinando CONDMi (Condizione professionale) e
POSIZMi (posizione nella professione).
dfElab18OK <- dfElab18OK %>%
mutate(condprof=ifelse(CONDMi=="occupato",
ifelse(POSIZMi=="non disponibile",
"occupato altro",as.character(POSIZMi)),
as.character(CONDMi))) %>%
mutate(condprof=factor(condprof,
levels=c(levels(dfElab18OK$POSIZMi)[1:4],"occupato altro",levels(dfElab18OK$CONDMi)[2:4])))
levels(dfElab18OK$condprof)[1] <- "dirigente, imprenditore, libero prof."
levels(dfElab18OK$condprof)[3] <- "operaio"
levels(dfElab18OK$condprof)[4] <- "altro autonomo"Variable | V1 | n | % |
|---|---|---|---|
NCOMP | 1 | 6015 | 17.7 |
2 | 10370 | 30.5 | |
3 | 8307 | 24.4 | |
4 | 6952 | 20.4 | |
5 | 1826 | 5.4 | |
6 | 436 | 1.3 | |
7 | 80 | 0.2 | |
8 | 49 | 0.1 | |
9 | 16 | 0.0 | |
ETAMi | da 18 a 19 anni | 799 | 2.3 |
da 20 a 24 anni | 1888 | 5.5 | |
da 25 a 34 anni | 3745 | 11.0 | |
da 35 a 44 anni | 4509 | 13.2 | |
da 45 a 54 anni | 6253 | 18.4 | |
da 55 a 59 anni | 3440 | 10.1 | |
da 60 a 64 anni | 2994 | 8.8 | |
da 65 a 74 anni | 5143 | 15.1 | |
75 anni e piu' | 5280 | 15.5 | |
SESSO | maschio | 16084 | 47.2 |
femmina | 17967 | 52.8 | |
ISTRMi | laurea e post-laurea | 6151 | 18.1 |
diploma | 13674 | 40.2 | |
licenza di scuola media | 9032 | 26.5 | |
licenza di scuola elementare, nessun titolo di studio | 4693 | 13.8 | |
non disponibile | 501 | 1.5 | |
RIPMf | Nord-ovest | 7826 | 23.0 |
Nord-est | 7052 | 20.7 | |
Centro | 6386 | 18.8 | |
Sud | 9373 | 27.5 | |
Isole | 3385 | 9.9 | |
non disponibile | 29 | 0.1 | |
RISEC | ottime | 579 | 1.7 |
adeguate | 22649 | 66.5 | |
scarse | 9758 | 28.7 | |
assolutamente insufficienti | 1065 | 3.1 | |
condprof | dirigente, imprenditore, libero prof. | 2065 | 6.1 |
direttivo, quadro; impiegato | 6296 | 18.5 | |
operaio | 5018 | 14.7 | |
altro autonomo | 1512 | 4.4 | |
occupato altro | 216 | 0.6 | |
in cerca di occupazione | 3108 | 9.1 | |
inattivo | 15336 | 45.0 | |
non disponibile | 500 | 1.5 |
Per alcune variabili (ISTRMi, RIPMf e
condprof) ci sono casi con non disponibile, ma
questi potranno poi essere trattati in fase analisi.
In questa fase, per semplificare e velocizzare le prove di analisi considero solo i giovani da 18 a 34 anni.
Una prima parte dovrebbe essere dedicata ad una breve descrizione della variabili in esame.
Una versione semplice potrebbe consistere calcolare distribuzioni di frequenza e grafici delle variabili base.
Il metodo corretto per fare queste elaborazioni consiste nel
considerare i Coefficiente di riporto all’universo
(COEFIN).
Sulla base delle indicazioni riportate nel file con il tracciato
record calcolo il peso dividendo
COEFIN/10000
Per usare i pesi in R uso la libreria srvyr e creo un
oggetto survey
Usando l’oggetto svy1834 posso effettuare le analisi, ad
esempio calcolare la distribuzione di frequenza della variabile
TEATRO
bind_rows(svy1834 %>% group_by(TEATRO) %>%
summarise(survey_total(vartype = NULL)) %>%
mutate(perc=coef/sum(coef)*100),
svy1834 %>% mutate(TEATRO="Total") %>% group_by(TEATRO) %>%
summarise(survey_total(vartype = NULL)) %>%
mutate(perc=coef/sum(coef)*100))# A tibble: 6 × 3
TEATRO coef perc
<chr> <dbl> <dbl>
1 mai 7792389. 79.7
2 1-3 volte 1691081. 17.3
3 4-6 volte 193378. 1.98
4 7-12 volte 49261. 0.504
5 più di 12 volte 49211. 0.503
6 Total 9775320. 100
Le differenze rispetto ai calcoli fatti non usando i coefficienti di riporto, almeno a livello molto aggregato, sembrano trascurabili
bind_rows(
dfElab1834OK %>% group_by(TEATRO) %>% summarise(n=n()) %>% mutate(perc=n/sum(n)*100),
dfElab1834OK %>% mutate(TEATRO="Total") %>% group_by(TEATRO) %>%
summarise(n=n()) %>% mutate(perc=n/sum(n)*100))# A tibble: 6 × 3
TEATRO n perc
<chr> <int> <dbl>
1 mai 5103 79.3
2 1-3 volte 1135 17.6
3 4-6 volte 128 1.99
4 7-12 volte 34 0.529
5 più di 12 volte 32 0.498
6 Total 6432 100
Il metodo formalmente corretto è comunque il primo.
In alternativa a srvyr si può usare la libreria
survey
TEATRO Freq
1 mai 7792388.91
2 1-3 volte 1691080.51
3 4-6 volte 193378.00
4 7-12 volte 49260.89
5 più di 12 volte 49211.50
Nelle funzioni comunemente usate per le procedure di clustering non è possibile utilizzare i coefficienti di riporto all’universo. Normalmente si procede al calcolo dei cluster usando il dataset non pesato, una volta creati i cluster, si usa svydesign per verificare se ci sia una relazione significativa tra i cluster e le variabili base.
In questo caso tutte le variabili base sono qualitative, dobbiamo quindi:
calcolare una matrice di distanze con la metrica di Gower
tra i possibili metodi di cluster utilizzabili con distanze di Gower (cluster gerarchica o PAM) dobbiamo scegliere quale fornisca gli indici di clustering migliori e rispetto a quale numero di gruppi
verificare se la relazione tra i cluster e le variabili base sia significativa usando i pesi
Utilizzo la funzione presentata a lezione
source("../2025_26/funzioni/utility.R")
out <- best.cluster.ext(dat = dfClust,
dst = dst,
mincl = 2,maxcl = 10,
gap = F,stability = F,
indices = c("SC","Cind","Dunn2","Gamma"))Una soluzione possibile è rappresentata dal metodo PAM con 8
cluster
i valori di silhouette e Pearson’s Gamma non sono molto alti ma, se
escludiamo la soluzione a 2 gruppi, la soluzione a 8 cluster sembra
essere la migliore.
# aggiungo la variabile cluster al dataset
dfClust <- dfClust %>% mutate(cluster=factor(ppClu$clustering),.before=1)
# associo ad ogni unità il peso di ponderazione
dfClust <- dfClust %>% rownames_to_column("id")
dfClust <- dfClust %>% left_join(dfElab1834OK %>% select(id,peso),by="id")
# creo l'oggetto survey
svyClu <- dfClust %>%
as_survey_design(ids = 1, weights = peso)Dimensione dei cluster
dfClust$cluster
Frequency Percent
1 791432 8.096
2 2384853 24.397
3 1392508 14.245
4 609815 6.238
5 1542603 15.781
6 1424626 14.574
7 919788 9.409
8 709694 7.260
Total 9775320 100.000
domanda 18
Di seguito sono riportate, per la domanda 18, tabelle per ciascuna variabile rispetto ai cluster (valori assoluti, percentuali di riga e di colonna) e test chi-quadro. Questi ultimi sono quasi sempre significativi (p<0.05) a causa del fatto che abbiamo molte osservazioni con pesi di ponderazione riferiti a milioni di unità.
options(width = 500)
varSP <- c("TEATRO", "CINE", "MUSEO", "MUSIC", "ACMUS", "SPSPO", "DISCO", "MONUM")
tbdfT <- data.frame()
for(i in 1:length(varSP)){
tmpsvy=svyClu %>% select(cluster,V1=varSP[i])
tab1 <- svytable(~V1+cluster,design = tmpsvy)
tb1n <- tab1 %>% addmargins() %>% round(digits = 0)
tb1r <- tab1 %>% addmargins(margin = 1) %>% prop.table(margin = 1) %>% addmargins(margin = 2)
tb1c <- tab1 %>% addmargins(margin = 2) %>% prop.table(margin = 2) %>% addmargins(margin = 1)
cat("\n\n",varSP[i],"\n\n")
print(tb1n)
print(tb1r %>% as.data.frame.matrix() %>% mutate_all(~round(.*100,digits = 1)))
print(tb1c %>% as.data.frame.matrix() %>% mutate_all(~round(.*100,digits = 1)))
print(svychisq(~V1+cluster,design = tmpsvy))
tbdf=tb1c %>% as.data.frame.matrix() %>% rownames_to_column("levels") %>%
filter(levels!="Sum") %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(levels=factor(levels,levels = levels(dfClust$TEATRO))) %>%
mutate(variable=varSP[i],.before=1)
tbdfT <- bind_rows(tbdfT,tbdf)
}
TEATRO
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 511762 2080848 1209888 546804 899516 1238669 854600 450302 7792389
1-3 volte 229452 289501 168314 52930 521478 160521 45730 223156 1691081
4-6 volte 29652 8406 12651 2566 86387 22743 11209 19764 193378
7-12 volte 5535 4373 0 3360 27385 2694 994 4918 49261
più di 12 volte 15031 1725 1656 4155 7837 0 7255 11554 49211
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 6.6 26.7 15.5 7.0 11.5 15.9 11.0 5.8 100
1-3 volte 13.6 17.1 10.0 3.1 30.8 9.5 2.7 13.2 100
4-6 volte 15.3 4.3 6.5 1.3 44.7 11.8 5.8 10.2 100
7-12 volte 11.2 8.9 0.0 6.8 55.6 5.5 2.0 10.0 100
più di 12 volte 30.5 3.5 3.4 8.4 15.9 0.0 14.7 23.5 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 64.7 87.3 86.9 89.7 58.3 86.9 92.9 63.5 79.7
1-3 volte 29.0 12.1 12.1 8.7 33.8 11.3 5.0 31.4 17.3
4-6 volte 3.7 0.4 0.9 0.4 5.6 1.6 1.2 2.8 2.0
7-12 volte 0.7 0.2 0.0 0.6 1.8 0.2 0.1 0.7 0.5
più di 12 volte 1.9 0.1 0.1 0.7 0.5 0.0 0.8 1.6 0.5
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 20.07, ndf = 26.807, ddf = 172395.708, p-value < 2.2e-16
CINE
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 136926 872665 562413 312563 286650 596126 600908 118161 3486411
1-3 volte 412078 1072556 636567 228155 676414 599584 249074 351597 4226026
4-6 volte 159324 295542 133694 46867 361626 159637 49845 161029 1367565
7-12 volte 56629 107187 43883 15836 151246 50525 6876 51203 483385
più di 12 volte 26475 36904 15951 6395 66666 18754 13085 27703 211933
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 3.9 25.0 16.1 9.0 8.2 17.1 17.2 3.4 100
1-3 volte 9.8 25.4 15.1 5.4 16.0 14.2 5.9 8.3 100
4-6 volte 11.7 21.6 9.8 3.4 26.4 11.7 3.6 11.8 100
7-12 volte 11.7 22.2 9.1 3.3 31.3 10.5 1.4 10.6 100
più di 12 volte 12.5 17.4 7.5 3.0 31.5 8.8 6.2 13.1 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 17.3 36.6 40.4 51.3 18.6 41.8 65.3 16.6 35.7
1-3 volte 52.1 45.0 45.7 37.4 43.8 42.1 27.1 49.5 43.2
4-6 volte 20.1 12.4 9.6 7.7 23.4 11.2 5.4 22.7 14.0
7-12 volte 7.2 4.5 3.2 2.6 9.8 3.5 0.7 7.2 4.9
più di 12 volte 3.3 1.5 1.1 1.0 4.3 1.3 1.4 3.9 2.2
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 19.707, ndf = 27.71, ddf = 178206.07, p-value < 2.2e-16
MUSEO
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 196726 1642059 979250 477266 216983 1107146 799458 207408 5626296
1-3 volte 375730 601094 337428 110738 811857 251763 94298 340234 2923142
4-6 volte 159708 101241 59762 11726 334772 53246 11104 112855 844415
7-12 volte 38778 29616 8895 6498 144416 6541 6175 40070 280987
più di 12 volte 20490 10843 7173 3587 34575 5930 8753 9128 100480
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 3.5 29.2 17.4 8.5 3.9 19.7 14.2 3.7 100
1-3 volte 12.9 20.6 11.5 3.8 27.8 8.6 3.2 11.6 100
4-6 volte 18.9 12.0 7.1 1.4 39.6 6.3 1.3 13.4 100
7-12 volte 13.8 10.5 3.2 2.3 51.4 2.3 2.2 14.3 100
più di 12 volte 20.4 10.8 7.1 3.6 34.4 5.9 8.7 9.1 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 24.9 68.9 70.3 78.3 14.1 77.7 86.9 29.2 57.6
1-3 volte 47.5 25.2 24.2 18.2 52.6 17.7 10.3 47.9 29.9
4-6 volte 20.2 4.2 4.3 1.9 21.7 3.7 1.2 15.9 8.6
7-12 volte 4.9 1.2 0.6 1.1 9.4 0.5 0.7 5.6 2.9
più di 12 volte 2.6 0.5 0.5 0.6 2.2 0.4 1.0 1.3 1.0
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 48.644, ndf = 27.41, ddf = 176271.64, p-value < 2.2e-16
MUSIC
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 594904 2155626 1271381 548541 1230162 1245160 846573 499428 8391776
1-3 volte 147865 187611 111290 50281 243088 151618 48859 159594 1100205
4-6 volte 33038 25947 4971 7406 45340 26387 9992 31598 184679
7-12 volte 6440 4161 4866 0 14462 0 2678 10837 43443
più di 12 volte 9186 11508 0 3587 9551 1461 11686 8237 55217
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 7.1 25.7 15.2 6.5 14.7 14.8 10.1 6.0 100
1-3 volte 13.4 17.1 10.1 4.6 22.1 13.8 4.4 14.5 100
4-6 volte 17.9 14.0 2.7 4.0 24.6 14.3 5.4 17.1 100
7-12 volte 14.8 9.6 11.2 0.0 33.3 0.0 6.2 24.9 100
più di 12 volte 16.6 20.8 0.0 6.5 17.3 2.6 21.2 14.9 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 75.2 90.4 91.3 90.0 79.7 87.4 92.0 70.4 85.8
1-3 volte 18.7 7.9 8.0 8.2 15.8 10.6 5.3 22.5 11.3
4-6 volte 4.2 1.1 0.4 1.2 2.9 1.9 1.1 4.5 1.9
7-12 volte 0.8 0.2 0.3 0.0 0.9 0.0 0.3 1.5 0.4
più di 12 volte 1.2 0.5 0.0 0.6 0.6 0.1 1.3 1.2 0.6
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 7.4383, ndf = 26.334, ddf = 169351.221, p-value < 2.2e-16
ACMUS
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 267222 1570241 1051222 440243 431589 1013647 756974 277791 5808929
1-3 volte 391522 691608 317638 146247 832361 364672 122462 346140 3212649
4-6 volte 87585 92233 18481 19739 203843 37115 24416 57383 540795
7-12 volte 28885 22349 4457 0 54574 7586 2887 21425 142163
più di 12 volte 16218 8423 711 3587 20236 1606 13049 6955 70784
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 4.6 27.0 18.1 7.6 7.4 17.4 13.0 4.8 100
1-3 volte 12.2 21.5 9.9 4.6 25.9 11.4 3.8 10.8 100
4-6 volte 16.2 17.1 3.4 3.6 37.7 6.9 4.5 10.6 100
7-12 volte 20.3 15.7 3.1 0.0 38.4 5.3 2.0 15.1 100
più di 12 volte 22.9 11.9 1.0 5.1 28.6 2.3 18.4 9.8 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 33.8 65.8 75.5 72.2 28.0 71.2 82.3 39.1 59.4
1-3 volte 49.5 29.0 22.8 24.0 54.0 25.6 13.3 48.8 32.9
4-6 volte 11.1 3.9 1.3 3.2 13.2 2.6 2.7 8.1 5.5
7-12 volte 3.6 0.9 0.3 0.0 3.5 0.5 0.3 3.0 1.5
più di 12 volte 2.0 0.4 0.1 0.6 1.3 0.1 1.4 1.0 0.7
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 28.91, ndf = 25.977, ddf = 167061.061, p-value < 2.2e-16
SPSPO
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 392094 1537963 1057473 411810 917850 952527 723479 352550 6345746
1-3 volte 250979 595158 250205 136144 414226 335727 134418 237236 2354094
4-6 volte 80454 126864 40193 26187 121841 60599 32568 66447 555153
7-12 volte 30044 50403 14243 15378 43076 42223 13760 34315 243443
più di 12 volte 37862 74465 30393 20296 45611 33550 15564 19145 276884
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 6.2 24.2 16.7 6.5 14.5 15.0 11.4 5.6 100
1-3 volte 10.7 25.3 10.6 5.8 17.6 14.3 5.7 10.1 100
4-6 volte 14.5 22.9 7.2 4.7 21.9 10.9 5.9 12.0 100
7-12 volte 12.3 20.7 5.9 6.3 17.7 17.3 5.7 14.1 100
più di 12 volte 13.7 26.9 11.0 7.3 16.5 12.1 5.6 6.9 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 49.5 64.5 75.9 67.5 59.5 66.9 78.7 49.7 64.9
1-3 volte 31.7 25.0 18.0 22.3 26.9 23.6 14.6 33.4 24.1
4-6 volte 10.2 5.3 2.9 4.3 7.9 4.3 3.5 9.4 5.7
7-12 volte 3.8 2.1 1.0 2.5 2.8 3.0 1.5 4.8 2.5
più di 12 volte 4.8 3.1 2.2 3.3 3.0 2.4 1.7 2.7 2.8
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 6.7061, ndf = 27.837, ddf = 179022.486, p-value < 2.2e-16
DISCO
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 307390 1246777 980476 364195 488990 784388 698842 229821 5100879
1-3 volte 252195 614813 242688 128419 517985 373785 134114 256829 2520827
4-6 volte 88489 228800 68842 56819 241761 107610 36005 113285 941610
7-12 volte 73534 126741 53351 27228 157086 80973 15305 45674 579892
più di 12 volte 69825 167722 47151 33156 136781 77870 35522 64085 632111
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 6.0 24.4 19.2 7.1 9.6 15.4 13.7 4.5 100
1-3 volte 10.0 24.4 9.6 5.1 20.5 14.8 5.3 10.2 100
4-6 volte 9.4 24.3 7.3 6.0 25.7 11.4 3.8 12.0 100
7-12 volte 12.7 21.9 9.2 4.7 27.1 14.0 2.6 7.9 100
più di 12 volte 11.0 26.5 7.5 5.2 21.6 12.3 5.6 10.1 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 38.8 52.3 70.4 59.7 31.7 55.1 76.0 32.4 52.2
1-3 volte 31.9 25.8 17.4 21.1 33.6 26.2 14.6 36.2 25.8
4-6 volte 11.2 9.6 4.9 9.3 15.7 7.6 3.9 16.0 9.6
7-12 volte 9.3 5.3 3.8 4.5 10.2 5.7 1.7 6.4 5.9
più di 12 volte 8.8 7.0 3.4 5.4 8.9 5.5 3.9 9.0 6.5
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 16.557, ndf = 27.919, ddf = 179548.463, p-value < 2.2e-16
MONUM
cluster
V1 1 2 3 4 5 6 7 8 Sum
mai 282147 1770046 1107471 498012 324579 1161992 804761 282213 6231222
1-3 volte 328077 464096 219669 94861 734847 213431 77923 299128 2432033
4-6 volte 115733 96596 39717 8347 320926 34010 16058 80647 712033
7-12 volte 40064 33770 17769 4565 119014 9263 10905 29837 265187
più di 12 volte 25411 20345 7882 4029 43237 5930 10140 17869 134845
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
mai 4.5 28.4 17.8 8.0 5.2 18.6 12.9 4.5 100
1-3 volte 13.5 19.1 9.0 3.9 30.2 8.8 3.2 12.3 100
4-6 volte 16.3 13.6 5.6 1.2 45.1 4.8 2.3 11.3 100
7-12 volte 15.1 12.7 6.7 1.7 44.9 3.5 4.1 11.3 100
più di 12 volte 18.8 15.1 5.8 3.0 32.1 4.4 7.5 13.3 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
mai 35.7 74.2 79.5 81.7 21.0 81.6 87.5 39.8 63.7
1-3 volte 41.5 19.5 15.8 15.6 47.6 15.0 8.5 42.1 24.9
4-6 volte 14.6 4.1 2.9 1.4 20.8 2.4 1.7 11.4 7.3
7-12 volte 5.1 1.4 1.3 0.7 7.7 0.7 1.2 4.2 2.7
più di 12 volte 3.2 0.9 0.6 0.7 2.8 0.4 1.1 2.5 1.4
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 42.474, ndf = 27.086, ddf = 174192.338, p-value < 2.2e-16
tbdfT %>%
mutate(variable=factor(variable,levels = varSP)) %>%
ggplot(aes(x=cluster,y=value,fill=levels))+
geom_col(color="gray90")+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 5,name = "YlOrRd"),"")+
facet_wrap(~variable,ncol=2) +
ylab(NULL)+theme_minimal()Lettura
tab1 <- svytable(~lettore.tipo+cluster,design = svyClu)
tb1n <- tab1 %>% addmargins() %>% round(digits = 0)
tb1r <- tab1 %>% addmargins(margin = 1) %>% prop.table(margin = 1) %>% addmargins(margin = 2)
tb1c <- tab1 %>% addmargins(margin = 2) %>% prop.table(margin = 2) %>% addmargins(margin = 1)
print(tb1n) cluster
lettore.tipo 1 2 3 4 5 6 7 8 Sum
Non lettori 0 2384853 0 559716 0 1345200 855046 0 5144815
Lettori deboli 224853 0 1045775 26780 359179 53456 33663 382471 2126178
Lettori medi 469016 0 274748 16093 917447 16896 28020 261413 1983632
Lettori forti 97563 0 71984 7227 265977 9074 3059 65810 520695
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
Non lettori 0.0 46.4 0.0 10.9 0.0 26.1 16.6 0.0 100
Lettori deboli 10.6 0.0 49.2 1.3 16.9 2.5 1.6 18.0 100
Lettori medi 23.6 0.0 13.9 0.8 46.3 0.9 1.4 13.2 100
Lettori forti 18.7 0.0 13.8 1.4 51.1 1.7 0.6 12.6 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
Non lettori 0.0 100 0.0 91.8 0.0 94.4 93.0 0.0 52.6
Lettori deboli 28.4 0 75.1 4.4 23.3 3.8 3.7 53.9 21.8
Lettori medi 59.3 0 19.7 2.6 59.5 1.2 3.0 36.8 20.3
Lettori forti 12.3 0 5.2 1.2 17.2 0.6 0.3 9.3 5.3
Sum 100.0 100 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 266.14, ndf = 20.219, ddf = 130028.897, p-value < 2.2e-16
tb1c %>% as.data.frame.matrix() %>% rownames_to_column("variable") %>%
filter(variable!="Sum") %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(variable=factor(variable,levels = levels(dfClust$lettore.tipo))) %>%
ggplot(aes(x=cluster,y=value,fill=variable))+
geom_col(color="gray90")+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 5,name = "YlOrRd"),"")+
ylab(NULL)+theme_minimal()+ggtitle("lettore.tipo")tab1 <- svytable(~tipo.libri+cluster,design = svyClu)
tb1n <- tab1 %>% addmargins() %>% round(digits = 0)
tb1r <- tab1 %>% addmargins(margin = 1) %>% prop.table(margin = 1) %>% addmargins(margin = 2)
tb1c <- tab1 %>% addmargins(margin = 2) %>% prop.table(margin = 2) %>% addmargins(margin = 1)
print(tb1n) cluster
tipo.libri 1 2 3 4 5 6 7 8 Sum
Non lettori 0 2384853 0 559716 0 1345200 855046 0 5144815
cartacei 665471 0 1234834 0 1471536 0 0 0 3371841
ebook 73341 0 103735 42886 0 62854 57134 681880 1021831
audiolibri 18032 0 13765 2836 26383 6006 2136 7638 76797
misto 34588 0 40174 4377 44685 10567 5471 20176 160037
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
Non lettori 0.0 46.4 0.0 10.9 0.0 26.1 16.6 0.0 100
cartacei 19.7 0.0 36.6 0.0 43.6 0.0 0.0 0.0 100
ebook 7.2 0.0 10.2 4.2 0.0 6.2 5.6 66.7 100
audiolibri 23.5 0.0 17.9 3.7 34.4 7.8 2.8 9.9 100
misto 21.6 0.0 25.1 2.7 27.9 6.6 3.4 12.6 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
Non lettori 0.0 100 0.0 91.8 0.0 94.4 93.0 0.0 52.6
cartacei 84.1 0 88.7 0.0 95.4 0.0 0.0 0.0 34.5
ebook 9.3 0 7.4 7.0 0.0 4.4 6.2 96.1 10.5
audiolibri 2.3 0 1.0 0.5 1.7 0.4 0.2 1.1 0.8
misto 4.4 0 2.9 0.7 2.9 0.7 0.6 2.8 1.6
Sum 100.0 100 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Design-based Wald test of association
data: NextMethod()
F = 677.38, ndf = 28, ddf = 6404, p-value < 2.2e-16
tb1c %>% as.data.frame.matrix() %>% rownames_to_column("variable") %>%
filter(variable!="Sum") %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(variable=factor(variable,levels = levels(dfClust$tipo.libri))) %>%
ggplot(aes(x=cluster,y=value,fill=variable))+
geom_col(color="gray90")+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 5,name = "YlOrRd"),"")+
ylab(NULL)+theme_minimal()+ggtitle("tipo.libri")Allo stesso modo possono essere rappresentate le altre variabili
Una volta descritti i cluster rispetto alle bvariabili base è necessario farne una profilazione rispetto alle variabili socio-demografiche.
Tecnicamente i comandi sono sostanzialmente gli stessi usati al punto precedente.
Si deve solo creare un oggetto survey con tutte le variabili necessarie.
dfClustP <- dfClust %>%
inner_join(dfElab1834OK %>% select(id,ETAMi,SESSO,ISTRMi,RIPMf,RISEC,condprof),
by="id") %>%
mutate(ETAMi=droplevels(ETAMi))
svyClu <- dfClustP %>%
as_survey_design(ids = 1, weights = peso)età
tab1 <- svytable(~ETAMi+cluster,design = svyClu)
tb1n <- tab1 %>% addmargins() %>% round(digits = 0)
tb1r <- tab1 %>% addmargins(margin = 1) %>% prop.table(margin = 1) %>% addmargins(margin = 2)
tb1c <- tab1 %>% addmargins(margin = 2) %>% prop.table(margin = 2) %>% addmargins(margin = 1)
print(tb1n) cluster
ETAMi 1 2 3 4 5 6 7 8 Sum
da 18 a 19 anni 93019 285598 170332 57490 206164 162701 70055 91073 1136433
da 20 a 24 anni 247780 625606 357980 163292 464444 378142 231676 261514 2730435
da 25 a 34 anni 450633 1473649 864195 389033 871995 883783 618056 357107 5908452
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
da 18 a 19 anni 8.2 25.1 15.0 5.1 18.1 14.3 6.2 8.0 100
da 20 a 24 anni 9.1 22.9 13.1 6.0 17.0 13.8 8.5 9.6 100
da 25 a 34 anni 7.6 24.9 14.6 6.6 14.8 15.0 10.5 6.0 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
da 18 a 19 anni 11.8 12.0 12.2 9.4 13.4 11.4 7.6 12.8 11.6
da 20 a 24 anni 31.3 26.2 25.7 26.8 30.1 26.5 25.2 36.8 27.9
da 25 a 34 anni 56.9 61.8 62.1 63.8 56.5 62.0 67.2 50.3 60.4
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 3.0834, ndf = 13.951, ddf = 89721.595, p-value = 8.277e-05
g1=tb1c %>% as.data.frame.matrix() %>% rownames_to_column("variable") %>%
filter(variable!="Sum") %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(variable=factor(variable,levels = levels(dfClustP$ETAMi))) %>%
ggplot(aes(x=cluster,y=value,fill=variable))+
geom_col(color="gray90")+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 5,name = "YlOrRd"),"",labels = function(x) str_wrap(x, width = 30))+
ylab(NULL)+theme_minimal()+ggtitle("cluster per ETAMi")+theme(legend.position = "bottom")
g2=tb1r %>% as.data.frame.matrix() %>% rownames_to_column("variable") %>%
select(-Sum) %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(variable=factor(variable,levels = c(levels(dfClustP$ETAMi),"Sum"))) %>%
ggplot(aes(x=variable,y=value,fill=cluster))+
geom_col(color="gray90")+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 8,name = "Set1"),"",labels = function(x) str_wrap(x, width = 30))+
ylab(NULL)+theme_minimal()+ggtitle("ETAMi per cluster")+theme(legend.position = "bottom")Per quanto il test chi-quadro risulti significativo, non si apprezzano differenze rilevanti tra i cluster rispetto all’età.
istruzione
tab1 <- svytable(~ISTRMi+cluster,design = svyClu)
tb1n <- tab1 %>% addmargins() %>% round(digits = 0)
tb1r <- tab1 %>% addmargins(margin = 1) %>% prop.table(margin = 1) %>% addmargins(margin = 2)
tb1c <- tab1 %>% addmargins(margin = 2) %>% prop.table(margin = 2) %>% addmargins(margin = 1)
print(tb1n) cluster
ISTRMi 1 2 3 4 5 6 7 8 Sum
laurea e post-laurea 285135 312304 387343 91901 653777 185328 131326 234993 2282108
diploma 395473 1467822 783975 327741 722336 807216 485538 368976 5359077
licenza di scuola media 103873 555172 200735 166130 152836 387688 262673 89070 1918176
licenza di scuola elementare, nessun titolo di studio 0 11876 7053 5647 0 9256 9039 1685 44556
non disponibile 6951 37679 13402 18396 13654 35139 31212 14970 171403
Sum 791432 2384853 1392508 609815 1542603 1424626 919788 709694 9775320
1 2 3 4 5 6 7 8 Sum
laurea e post-laurea 12.5 13.7 17.0 4.0 28.6 8.1 5.8 10.3 100
diploma 7.4 27.4 14.6 6.1 13.5 15.1 9.1 6.9 100
licenza di scuola media 5.4 28.9 10.5 8.7 8.0 20.2 13.7 4.6 100
licenza di scuola elementare, nessun titolo di studio 0.0 26.7 15.8 12.7 0.0 20.8 20.3 3.8 100
non disponibile 4.1 22.0 7.8 10.7 8.0 20.5 18.2 8.7 100
Sum 8.1 24.4 14.2 6.2 15.8 14.6 9.4 7.3 100
1 2 3 4 5 6 7 8 Sum
laurea e post-laurea 36.0 13.1 27.8 15.1 42.4 13.0 14.3 33.1 23.3
diploma 50.0 61.5 56.3 53.7 46.8 56.7 52.8 52.0 54.8
licenza di scuola media 13.1 23.3 14.4 27.2 9.9 27.2 28.6 12.6 19.6
licenza di scuola elementare, nessun titolo di studio 0.0 0.5 0.5 0.9 0.0 0.6 1.0 0.2 0.5
non disponibile 0.9 1.6 1.0 3.0 0.9 2.5 3.4 2.1 1.8
Sum 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
Pearson's X^2: Rao & Scott adjustment
data: NextMethod()
F = 15.396, ndf = 26.595, ddf = 171032.880, p-value < 2.2e-16
g1=tb1c %>% as.data.frame.matrix() %>% rownames_to_column("variable") %>%
filter(variable!="Sum") %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(variable=factor(variable,levels = levels(dfClustP$ISTRMi))) %>%
ggplot(aes(x=cluster,y=value,fill=variable))+
geom_col(color="gray90")+
geom_text(aes(label = ifelse(value<5,NA,format(round(value,1),nsmall=1))),
position = position_stack(vjust = 0.5),
size = 3)+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 5,name = "YlGn"),"",labels = function(x) str_wrap(x, width = 30))+
ylab("%")+theme_minimal()+ggtitle("cluster per ISTRMi")+
theme(legend.position = "bottom",
legend.text = element_text(size = 8),
legend.title = element_text(size = 9))+
guides(fill = guide_legend(nrow = 2))
g2=tb1r %>% as.data.frame.matrix() %>% rownames_to_column("variable") %>%
select(-Sum) %>%
gather("cluster","value",2:ncol(.),factor_key = T) %>%
mutate(value=value*100) %>%
mutate(variable=factor(variable,levels = c(levels(dfClustP$ISTRMi),"Sum"))) %>%
ggplot(aes(x=variable,y=value,fill=cluster))+
geom_col(color="gray90")+
geom_text(aes(label = ifelse(value<5,NA,format(round(value,1),nsmall=1))),
position = position_stack(vjust = 0.5),
size = 3)+
scale_fill_manual(values = RColorBrewer::brewer.pal(n = 8,name = "Set1"),"",labels = function(x) str_wrap(x, width = 30))+
ylab("%")+xlab(NULL)+theme_minimal()+ggtitle("ISTRMi per cluster")+
theme(legend.position = "bottom",
legend.text = element_text(size = 8),
legend.title = element_text(size = 9))+
scale_x_discrete(labels = function(x) str_wrap(x, width = 15))
g1 + g2