Sei sulla pagina 1di 45

Facolt di Scienze della Comunicazione e dell'Economia - Universit di Modena e Reggio Emilia

Corso di laurea Dinamiche dei mercati e strategie d'impresa

Modelli statistici multivariati


- laboratorio informatico Funzioni per analisi multivariate: Analisi delle Componenti Principali Analisi delle Corrispondenze Alberi di classificazione Fabrizio Alboni

Analisi delle Componenti Principali

princomp(x, cor = FALSE, scores = TRUE,) x cor scores una matrice numerica o un data.frame rispetto a cui calcolare le componenti principali valore logico che indica se le componenti debbono essere calcolate sulla base della matrice di correlazione (=TRUE) o di covarianza (=FALSE) valore logico che indica se debbono essere calcolati i punteggi individuali per ogni componente

Output della funzione princomp: $sdev l'errore standard delle componenti principali (ossia, la radice quadrata degli autovalori della matrice di varianze e covarianze dei dati); $loadings la matrice dei pesi o dei coefficienti delle componenti principali (ossia, gli autovettori della matrice di varianze e covarianze dei dati); $scores se scores = T, la matrice dei punteggi; n.obs il numero delle osservazioni

Analisi delle Componenti Principali


Sono stati rilevati i dati sulle caratteristiche di 38 modelli di auto: modello nazione di fabbricazione consumo (litro/km) peso (in kg) rapporto di trasmissione al ponte potenza (in HP) cilindrata (in cm3) numero cilindri ripresa (sec./1 miglio da fermo)

Obiettivo: descrivere le caratteristiche dei 38 modelli di auto in forma sintetica, usando un numero ridotto di variabili. In altri termini, possibile sintetizzare le caratteristiche/variabili osservate costruendo delle variabili latenti, non osservate, ma che esprimono le caratteristiche fondamentali delle auto analizzate?
Lettura del file di testo senza intestazioni di colonna, aggiungo i nomi delle variabili con colnames
> > + > > cars <- read.table("cars.txt") colnames(cars) <- c("modello", "nazione", "consumo", "peso", "rapporto_trasmissione", "potenza","cilindrata","num_cilindri","ripresa") dcars <- cars[,3:9] Costruisco un data.frame dcars in cui inserisco solo le variabili rispetto rownames(dcars) <- cars[,1]

a cui calcolare le CP, e gli assegno come nomi di riga i nomi dei modelli
3

Analisi delle Componenti Principali Vi sono caratteristiche delle auto, tra quelle rilevate, che presentano correlazione tra di loro?
> round(cor(dcars),3) consumo peso rapporto_trasmissione potenza cilindrata num_cilindri ripresa consumo 1.000 -0.902 0.417 -0.871 -0.786 -0.805 -0.057 peso -0.902 1.000 -0.688 0.917 0.951 0.917 -0.033 rapporto_trasmissione 0.417 -0.688 1.000 -0.589 -0.798 -0.692 0.194 potenza -0.871 0.917 -0.589 1.000 0.872 0.864 -0.253 cilindrata -0.786 0.951 -0.798 0.872 1.000 0.940 -0.143 num_cilindri -0.805 0.917 -0.692 0.864 0.940 1.000 -0.129 ripresa -0.057 -0.033 0.194 -0.253 -0.143 -0.129 1.000 > pairs(dcars)

Alcuni gruppi di variabili mostrano coefficienti di correlazione elevati, possiamo quindi ritenere che lACP consenta di ottenere una sintesi significativa di tali variabili

Analisi delle Componenti Principali


pca.cars <- princomp(dcars,cor=T,scores=T) Calcolo delle componenti principali, sulle caratteristiche delle auto, rispetto alla matrice di correlazione, prevedendo il calcolo dei punteggi individuali.

>

Elementi contenuti nelloggetto creato da princomp:


> str(pca.cars) List of 7 $ sdev : Named num [1:7] 2.249 1.037... Errore standard delle componenti (autovalori) ..- attr(*, "names")= chr [1:7] "Comp.1" "Comp.2"... $ loadings: loadings [1:7, 1:7] 0.388 -0.435 0.335 ... Matrice delle componenti (autovalori) ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:7] "consumo" "peso ... .. ..$ : chr [1:7] "Comp.1" "Comp.2" ... $ center : Named num [1:7] 10.53 1.3 ... Centri delle variabili (medie) ..- attr(*, "names")= chr [1:7] "consumo" "peso ... $ scale : Named num [1:7] 2.748 0.317 0.511 ... Fattori di scaling applicati alle variabili (dev.Std.) ..- attr(*, "names")= chr [1:7] "consumo" "peso" ... $ n.obs : int 38 $ scores : num [1:38, 1:7] -4.05 -4.08 ... Punteggi fattoriali corrispondenti alle singole unit ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:38] "Buick_Estate_Wagon" "Ford_Country_Squire_Wagon" ... .. ..$ : chr [1:7] "Comp.1" "Comp.2" ... $ call : language princomp(x = dcars, cor = T, scores = T) - attr(*, "class")= chr "princomp"

Analisi delle Componenti Principali Valutazione del numero di componenti da utilizzare 1 2 3


1. 2. 3.
> pca.cars$sdev Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 2.2492558 1.0373019 0.7760564 0.3645942 0.2543382 0.2187321 0.1308784 > pca.cars$sdev^2/sum(pca.cars$sdev^2) Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 0.722735934 0.153713597 0.086037649 0.018989848 0.009241129 0.006834820 0.002447024 > cumsum(pca.cars$sdev^2/sum(pca.cars$sdev^2)) Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 0.7227359 0.8764495 0.9624872 0.9814770 0.9907182 0.9975530 1.0000000

Errore standard di ciascuna componente Peso relativo dellerrore associato a ciascuna componente Cumulata del peso relativo dellerrore delle componenti

Le prime due componenti spiegano l86.7% della variabilit, ed inoltre la terza presenta un valore inferiore allunit; Come sintesi delle 9 caratteristiche osservate possiamo quindi utilizzare le prime due componenti con una perdita di informazione che riteniamo trascurabile.

> screeplot(pca.cars,type="l",main="Screeplot pca.cars") 6

Analisi delle Componenti Principali

> pca.cars$loadings Loadings: consumo peso rapporto_trasmissione potenza cilindrata num_cilindri ripresa Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 0.388 0.279 0.432 -0.317 0.630 -0.200 -0.219 -0.435 -0.130 0.105 -0.463 -0.753 0.335 -0.217 -0.769 -0.378 0.139 -0.293 -0.418 -0.317 0.313 0.734 0.259 0.132 -0.434 0.169 -0.227 -0.621 0.587 -0.424 -0.772 0.451 -0.137 -0.924 0.300 0.208

I loadings (1) e le correlazioni tra le variabili e le componenti (2), consentono di fornire uninterpretazione delle componenti
Sulla prima componente, troviamo valori positivi del consumo (Km percorsi con 1 litro) e del rapporto di trasmissione mentre sono correlate negativamente variabili legate alla dimensione delle auto (peso, cilindrata, potenza, n.cilindri). Troveremo quindi a sinsitra, su questa componente le auto di maggior peso, potenza, cilindrata e consumi magggiori. La seconda componente invece caratterizzata positivamente dalla sportivit (ripresa).

SS loadings Proportion Var Cumulative Var

Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 1.000 1.000 1.000 1.000 1.000 1.000 1.000 0.143 0.143 0.143 0.143 0.143 0.143 0.143 0.143 0.286 0.429 0.571 0.714 0.857 1.000

> t(pca.cars$sdev*t(pca.cars$loadings)) Loadings: consumo peso rapporto_trasmissione potenza cilindrata num_cilindri ripresa Comp.1 0.873 -0.980 0.754 -0.940 -0.975 -0.954 0.155 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 0.289 0.336 -0.115 0.160 -0.134 -0.101 -0.225 -0.597 -0.138 -0.246 0.114 0.187 0.131 -0.136 -0.282 -0.959 0.232

Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 SS loadings 5.059 1.076 0.602 0.133 0.065 0.048 0.017 Proportion Var 0.723 0.154 0.086 0.019 0.009 0.007 0.002 Cumulative Var 0.723 0.876 0.962 0.981 0.991 0.998 1.000

Analisi delle Componenti Principali

> biplot(pca.cars,cex=0.7)

Il biplot consente infine di avere una rappresentazione grafica, in questo caso su un piano definito dalle due componenti selezionate, delle variabili (indicate in rosso) e delle unit (i modelli di auto).

Analisi delle Componenti Principali


>

pca.cars$scores[,1:2]
Comp.1 -4.0516170 -4.0757397 -2.6616014 -3.9323160 2.5312061 0.9938035 1.5266299 2.0907490 0.6475970 -0.8869904 0.7715256 -1.0910416 -1.2449001 -0.2959353 -1.4500339 -1.8272225 -3.2804391 -3.3320469 -3.9313813 -3.3354754 1.0304297 -0.3802293 2.9558927 2.2236956 1.2780020 2.7089769 2.0931963 0.7140363 -0.3715999 -0.3766132 1.0689626 2.3255428 2.9556973 2.5270118 2.2844184 0.3105822 0.7532534 2.7339740 Comp.2 -0.347628960 0.177935962 -0.187322569 1.048477475 -0.970361864 0.575608475 0.104721016 0.413669183 -1.157409036 0.241955311 -0.886029634 -1.180648578 -0.670540145 -1.346792959 -2.522682776 -0.324787939 -0.478954630 0.828115148 0.892528946 -0.309268106 0.380271502 -1.162491456 -0.003829406 0.892457787 0.019201440 0.057947160 -0.771792155 -0.272795831 2.552426235 1.426376218 1.579657088 1.329034082 -2.497296565 0.683411263 0.509541997 -0.178708493 0.928675121 0.627329693

Buick_Estate_Wagon Ford_Country_Squire_Wagon Chevy_Malibu_Wagon Chrysler_LeBaron_Wagon Chevette Toyota_Corona Datsun_510 Dodge_Omni Audi_5000 Volvo_240_GL Saab_99_GLE Peugeot_694_SL Buick_Century_Special Mercury_Zephyr Dodge_Aspen AMC_Concord_D/L Chevy_Caprice_Classic Ford_LTD Mercury_Grand_Marquis Dodge_St_Regis Ford_Mustang_4 Ford_Mustang_Ghia Mazda_GLC Dodge_Colt AMC_Spirit VW_Scirocco Honda_Accord_LX Buick_Skylark Chevy_Citation Olds_Omega Pontiac_Phoenix Plymouth_Horizon Datsun_210 Fiat_Strada VW_Dasher Datsun_810 BMW_320i VW_Rabbit

Sulla base del biplot e degli scores possiamo valutare la posizione di ciascun modello rispetto alle due nuove variabili. Ad esempio Buick_Estate_Wagon e Ford_Country_Squire_Wagon sono auto, rispetto alla prima componente, di grande potenza e peso e con consumi elevati, mentre non si discostano dai valori medi di ripresa. Sulla prima componente, ma con consumi ridotti e alto rapporto di trasmissione troviamo la Fiat_Strada, la VW_Scirocco e la Datsun_210. Questultima si contraddistingue anche per la sua ripresa, assieme alla Dodge_Aspen, mentre, al contrario, la Chevy_Citation non sembra brillare per le prestazioni sportive.

Analisi delle Componenti Principali


> > > > > > > cars$comp1 <- pca.cars$scores[,1] cars$comp2 <- pca.cars$scores[,2] attach(cars) plot(comp1,comp2,pch="") abline(h=0) abline(v=0) text(comp1,comp2,labels=cars$nazione,cex=0.8,col=c(2:7)[nazione])

Salvando i punteggi fattoriali allinterno del data.frame cars, possiamo costruire un grafico in cui, ad esempio, riportare i modelli per paese di costruzione rispetto alle due componenti individuate. Osserviamo che le auto di maggior potenza e con consumi pi elevati (posizionate a sinistra sulla prima componente) sono principalmente statunitensi, mentre, sempre su tale componente, abbiamo una maggior concentrazione a destra di auto giapponesi ed europee.

10

Analisi delle Componenti Principali

Altre funzioni per il calcolo delle componenti principali


> pca.cars2 <- prcomp(dcars, scale.=T) > summary(pca.cars2) Importance of components: PC1 PC2 PC3 PC4 PC5 PC6 PC7 Standard deviation 2.2493 1.0373 0.77606 0.36459 0.25434 0.21873 0.13088 Proportion of Variance 0.7227 0.1537 0.08604 0.01899 0.00924 0.00683 0.00245 Cumulative Proportion 0.7227 0.8764 0.96249 0.98148 0.99072 0.99755 1.00000 > print(pca.cars2) Standard deviations: [1] 2.2492558 1.0373019 0.7760564 0.3645942 0.2543382 0.2187321 0.1308784 Rotation: consumo peso rapporto_trasmissione potenza cilindrata num_cilindri ripresa PC1 0.38807426 -0.43548789 0.33523220 -0.41801509 -0.43355644 -0.42415077 0.06896635 PC2 0.27907392 -0.12963916 -0.21672317 0.06099281 0.02167090 -0.01536370 -0.92407614 PC3 PC4 PC5 PC6 PC7 -0.43233567 0.31662918 -0.629822046 0.19950459 0.21879228 0.04151418 -0.10496641 0.001027585 0.46259675 0.75286506 0.76938076 0.37841326 -0.139013690 0.29327640 -0.01308552 0.31728006 -0.31288677 -0.733662829 -0.25939627 -0.13202619 -0.16934030 0.22667204 -0.034807022 0.62065904 -0.58742970 -0.01840072 0.77214626 0.037692375 -0.45054883 0.13746520 -0.29955688 -0.00657402 -0.207617286 -0.06850398 -0.06125079

> t(pca.cars2$sdev*t(pca.cars2$rotation)) PC1 PC2 consumo 0.8728783 0.28948390 peso -0.9795237 -0.13447495 rapporto_trasmissione 0.7540230 -0.22480735 potenza -0.9402229 0.06326795 cilindrata -0.9751793 0.02247927 num_cilindri -0.9540236 -0.01593679 ripresa 0.1551230 -0.95854591

PC3 PC4 PC5 PC6 PC7 -0.33551687 0.11544116 -0.1601877872 0.04363806 0.028635191 0.03221734 -0.03827015 0.0002613541 0.10118477 0.098533801 0.59708287 0.13796728 -0.0353564875 0.06414897 -0.001712613 0.24622722 -0.11407670 -0.1865984618 -0.05673830 -0.017279381 -0.13141762 0.08264331 -0.0088527543 0.13575806 -0.076881881 -0.01428000 0.28152005 0.0095866097 -0.09854950 0.017991230 -0.23247303 -0.00239685 -0.0528050008 -0.01498402 -0.008016408

11

Analisi delle Componenti Principali


> screeplot(pca.cars2,type="l") > biplot(pca.cars2,cex=0.7)

12

Analisi delle Componenti Principali


> library(FactoMineR) > pca.cars3 <- PCA(dcars)

13

Analisi delle Componenti Principali


> pca.cars3$eig eigenvalue percentage of variance cumulative percentage of variance comp 1 5.05915154 72.2735934 72.27359 comp 2 1.07599518 15.3713597 87.64495 comp 3 0.60226354 8.6037649 96.24872 comp 4 0.13292893 1.8989848 98.14770 comp 5 0.06468791 0.9241129 99.07182 comp 6 0.04784374 0.6834820 99.75530 comp 7 0.01712916 0.2447024 100.00000 > pca.cars3$var$coord Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 consumo -0.8728783 -0.28948390 -0.33551687 0.11544116 0.1601877872 peso 0.9795237 0.13447495 0.03221734 -0.03827015 -0.0002613541 rapporto_trasmissione -0.7540230 0.22480735 0.59708287 0.13796728 0.0353564875 potenza 0.9402229 -0.06326795 0.24622722 -0.11407670 0.1865984618 cilindrata 0.9751793 -0.02247927 -0.13141762 0.08264331 0.0088527543 num_cilindri 0.9540236 0.01593679 -0.01428000 0.28152005 -0.0095866097 ripresa -0.1551230 0.95854591 -0.23247303 -0.00239685 0.0528050008 > pca.cars3$ind$coord Dim.1 Buick_Estate_Wagon 4.0516170 Ford_Country_Squire_Wagon 4.0757397 Chevy_Malibu_Wagon 2.6616014 Chrysler_LeBaron_Wagon 3.9323160 Chevette -2.5312061 Toyota_Corona -0.9938035 Datsun_510 -1.5266299 Dodge_Omni -2.0907490 Audi_5000 -0.6475970 Volvo_240_GL 0.8869904 Saab_99_GLE -0.7715256 . . . . . . Dim.2 0.347628960 -0.177935962 0.187322569 -1.048477475 0.970361864 -0.575608475 -0.104721016 -0.413669183 1.157409036 -0.241955311 0.886029634 Dim.3 0.34335910 -0.33185895 -0.33542814 0.07903846 -0.03893371 -0.12160611 0.57721955 -0.13136687 1.41833325 1.69576228 1.34883902 Dim.4 0.19908623 -0.01078792 0.44358894 0.22692834 0.32357715 -0.56067628 -0.23773953 0.05563776 0.05268865 -0.13451225 -0.63279764 Dim.5 0.64262580 -0.06831571 -0.04084089 0.33024484 -0.04858035 -0.00557075 0.21603370 -0.12132677 -0.04930122 -0.18204892 0.37400112

14

Analisi delle Corrispondenze

LAnalisi delle Corrispondenze Semplici consente di studiare la struttura di relazione che esiste fra due variabili qualitative misurate su scala nominale o su scala ordinale: lanalisi porta ad evidenziare eventuali dipendenze fra le due variabili in esame mediante opportune rappresentazioni grafiche della tabella di contingenza. Uno degli obiettivi dellACS quello di descrivere le relazioni fra due variabili qualitative, rappresentate in una tabella di contingenza, in uno spazio di dimensione ridotta, descrivendo simultaneamente le associazioni fra le categorie (modalit) delle due variabili.

Data la distribuzione congiunta di due caratteri di natura qualsiasi i quesiti sono: esiste dipendenza o indipendenza fra i due caratteri? se esiste dipendenza, come sono associate le modalit dei due caratteri? Per verificare lesistenza della dipendenza fra le due variabili si pu utilizzare lindice chi-quadro. In caso di dipendenza il modo in cui le modalit si associano pu essere studiato tramite lACS.

15

Analisi delle Corrispondenze

Consideriamo la tabella in cui sono riportate le modalit di acquisto per professione di 426 clienti di un supermercato.
> > > >

dati <- read.csv("tav0701.csv",header=T,sep=";") dd <- as.matrix(dati[,-1]) # trasformo il file importato in una matrice rownames(dd) <- dati[,1] addmargins(dd) # tabella con marginali (totali di riga e colonna)
lastminute giornaliero ricorrenze settimanale Sum 1 3 0 0 4 20 41 4 17 82 2 0 0 3 5 0 2 0 2 4 1 2 1 1 5 19 17 6 21 63 0 0 1 2 3 4 10 0 6 20 4 3 1 7 15 15 28 4 14 61 19 61 16 31 127 19 7 3 1 30 1 3 0 3 7 105 177 36 108 426

artigiano casalinga commerciante dirigente disoccupato impiegato imprenditore insegnante libprof operio pensionato studente altro Sum

Esiste una relazione tra la professione ed il modo con cui gli intervistati effettuano gli acquisti?

> chisq.test(dd)

# test chi-quadro per verificare se vi dipendenza

Pearson's Chi-squared test data: dd X-squared = 70.6546, df = 36, p-value = 0.0004911 Warning message: In chisq.test(dd) : L'approssimazione al Chi-quadrato potrebbe essere inesatta

Il test del chi-quadro porta ad escludere lindipendenza tra le due variabili.

16

Analisi delle Corrispondenze


# costruzione tabella con profili di riga > dd1 <- addmargins(dd,1) > round(addmargins(prop.table(dd1,1),2),4)
artigiano casalinga commerciante dirigente disoccupato impiegato imprenditore insegnante libprof operaio pensionato studente altro Sum lastminute giornaliero ricorrenze settimanale Sum 0.2500 0.7500 0.0000 0.0000 1 0.2439 0.5000 0.0488 0.2073 1 0.4000 0.0000 0.0000 0.6000 1 0.0000 0.5000 0.0000 0.5000 1 0.2000 0.4000 0.2000 0.2000 1 0.3016 0.2698 0.0952 0.3333 1 0.0000 0.0000 0.3333 0.6667 1 0.2000 0.5000 0.0000 0.3000 1 0.2667 0.2000 0.0667 0.4667 1 0.2459 0.4590 0.0656 0.2295 1 0.1496 0.4803 0.1260 0.2441 1 0.6333 0.2333 0.1000 0.0333 1 0.1429 0.4286 0.0000 0.4286 1 0.2465 0.4155 0.0845 0.2535 1

Una prima analisi dei profili (frequenze relative) di riga e di colonna pu consentire di individuare comportamenti specifici, ad esempio gli studenti, rispetto alle altre professioni, hanno una tendenza maggiore ad utilizzare il supermercato per effettuare acquisti last minute, mentre commercianti, imprenditori e dirigenti vi ricorrono per gli acquisti settimanali. Osservando i profili di colonna si registra, tra coloro che effettuano acquisti giornalieri, un peso maggiore rispetto alla media, delle casalinghe e dei pensionati.

# costruzione tabella con profili di colonna > dd2 <- addmargins(dd,2) > round(addmargins(prop.table(dd2,2),1),4)
artigiano casalinga commerciante dirigente disoccupato impiegato imprenditore insegnante libprof operaio pensionato studente altro Sum lastminute giornaliero ricorrenze settimanale Sum 0.0095 0.0169 0.0000 0.0000 0.0094 0.1905 0.2316 0.1111 0.1574 0.1925 0.0190 0.0000 0.0000 0.0278 0.0117 0.0000 0.0113 0.0000 0.0185 0.0094 0.0095 0.0113 0.0278 0.0093 0.0117 0.1810 0.0960 0.1667 0.1944 0.1479 0.0000 0.0000 0.0278 0.0185 0.0070 0.0381 0.0565 0.0000 0.0556 0.0469 0.0381 0.0169 0.0278 0.0648 0.0352 0.1429 0.1582 0.1111 0.1296 0.1432 0.1810 0.3446 0.4444 0.2870 0.2981 0.1810 0.0395 0.0833 0.0093 0.0704 0.0095 0.0169 0.0000 0.0278 0.0164 1.0000 1.0000 1.0000 1.0000 1.0000

17

Analisi delle Corrispondenze


> library(ca) > ca.ma <- ca(dd)
> summary(ca.ma) Principal inertias (eigenvalues): value % cum% 0.084030 50.7 50.7 0.054977 33.1 83.8 0.026848 16.2 100.0 -------- ----Total: 0.165856 100.0 dim 1 2 3 scree plot ************************* ************

Rows: name 1 | artg 2 | csln 3 | cmmr 4 | drgn 5 | dscc 6 | impg 7 | impr 8 | insg 9 | lbpr 10 | oper 11 | pnsn 12 | stdn 13 | altr Columns: name 1 | lstm 2 | grnl 3 | rcrr 4 | sttm

| | | | | | | | | | | | |

mass 9 192 12 9 12 148 7 47 35 143 298 70 16

qlt 927 710 842 780 15 999 735 217 942 698 667 987 526

inr 34 47 76 33 13 80 88 34 63 10 124 374 25

| | | | | | | | | | | | |

k=1 -15 13 -256 641 48 -117 528 150 -2 5 202 -928 302

cor ctr k=2 cor ctr 0 0 | -750 926 96 | 4 0 | -170 706 101 | 61 9 | 913 780 178 | 699 46 | 218 81 8 | 13 0 | -19 2 0 | 152 24 | 276 847 205 | 135 23 | 1114 600 159 | 189 13 | -58 28 3 | 0 0 | 528 942 179 | 3 0 | -88 696 20 | 593 145 | -72 75 28 | 977 721 | -95 10 12 | 367 18 | 199 159 12 |

Il primo elemento da analizzare nelloutput dellAC costituito dallinerzia spiegata. La tabella Principal inertias riporta gli autovalori di ciascuna componente, ma soprattutto la quota % di inerzia spiegata e la quota cumulata. Nellesempio si osserva che la prima componente spiega il 50.7% della variabilit e, congiuntamente alla seconda componente, arrivano a spiegare l83.8% dellinerzia. Nel considerare le prime due componenti si ha quindi una ridotta perdita di informazione. Definita la quota di informazione rappresentata dalle componenti occorre valutare il ruolo svolto dai singoli punti/profili nella determinazione delle componenti. Le colonne k=1 e k=2 riportano le coordinate standard dei punti rispettivamente sulla prima e sulla seconda componente. I punti con valori pi alti in termini assoluti sono quelli che maggiormente si discostano dal profilo medio. Nellesempio, i profili riga con i valori maggiori sulla prima componente sono costituiti da un lato dagli studenti e dallaltro dai dirigenti. I profili che presentano invece coordinate prossime allo 0 sono invece da ritenere sostanzialmente uguali al profilo medio.

mass qlt inr k=1 k=2 cor ctr

= = = = = = =

| | | |

mass 246 415 85 254

qlt 993 988 36 957

inr 376 213 151 259

| | | |

k=1 -501 161 38 211

cor 992 305 5 261

ctr 737 128 1 134

| | | |

k=2 cor ctr 20 2 2 | -241 683 440 | 97 31 14 | 343 696 544 |

massa qualit della rappresentazione bidimensionale (cor1+cor2) inerzia coordinate I componente coordinate II componente contributi relativi (quanto un punto ben rappresentato sul piano fattoriale) contributi assoluti (quanta parte ha avuto una data modalit nel determinare la direzione dellasse fattoriale)

18

Analisi delle Corrispondenze


> plot(ca.ma)

Altro elemento da valutare il contributo (ctr) fornito da ciascun punto allinerzia della dimensione. La prima dimensione, rispetto ai profili di riga, caratterizzata da un alto contributo da parte degli studenti e, anche se in misura minore, dei pensionati. La seconda dimensione invece contraddistinta da forti contributi da parte di impiegati, lib.prof. e commercianti. Rispetto alle colonne la prima componente si segnala per il contributo degli acquisti allultimo minuto, mentre la seconda per gli acquisti pianificati, giornalieri e settimanali (anche se i segni delle coordinate sono diversi). Ulteriore aspetto da analizzare sono i contributi relativi (cor) . Esprimono quanto un punto ben rappresentato su ogni asse. Rispetto alla prima dimensione osserviamo che artigiani e casalinghe hanno contributi relativi quasi nulli, mentre risultano ben rappresentati sul secondo asse. La somma dei contributi relativi, relativamente alle dimensioni considerate (in questo caso 2) esprime la qualit (qlt) della rappresentazione di un punto/profilo nello spazio fattoriale considerato (nellesempio il piano). Tra i profili di riga registriamo un valore molto ridotto di questo parametro per i disoccupati, mentre per le colonne vi sono difficolt nella rappresentazione sul piano degli acquisti nei casi di ricorrenze.

Lanalisi del biplot consente di valutare in primo luogo le distanze dei punti riga (colonna) tra di loro (studenti e dirigenti si trovano contrapposti rispetto alla prima componente, oppure, tra le colonne, acquisti giornalieri e settimanali). Inoltre si possono trarre indicazioni dalla vicinanza tra punti riga e colonna. Gli acquisti last minute sono vicini agli studenti, questa prossimit indica che allincrocio tra questi due caratteri, nella tabella di contingenza, si ha una frequenza relativa non modesta. 19

Analisi delle Corrispondenze

Altre funzioni per il calcolo dellanalisi delle corrispondenze


> library(MASS) > ca.ma2 <- corresp(dd,nf=2) > print(ca.ma2)
First canonical correlation(s): 0.2898800 0.2344719 Row scores: [,1] artigiano -0.053020418 casalinga 0.045487942 commerciante -0.882121162 dirigente 2.211194600 disoccupato 0.165507820 impiegato -0.403052549 imprenditore 1.820669992 insegnante 0.517473311 libprof -0.007554647 operaio 0.018173622 pensionato 0.697051634 studente -3.200783940 altro 1.043411796 Column scores: [,1] [,2] lastminute -1.7286371 0.08622993 giornaliero 0.5557196 -1.02877168 ricorrenze 0.1308423 0.41168088 settimanale 0.7262426 1.46498086 [,2] -3.19876808 -0.72314252 3.89590578 0.93019495 -0.08073606 1.17683797 4.75059397 -0.24585288 2.25333358 -0.37445168 -0.30611268 -0.40701528 0.84984743

> biplot(ca.ma2)

20

Analisi delle Corrispondenze

> library(FactoMineR) > ca.ma3 <- CA(dd,ncp = 2) > ca.ma3$eig


dim dim dim dim 1 2 3 4 eigenvalue percentage of variance cumulative percentage of variance 8.403041e-02 5.066475e+01 50.66475 5.497708e-02 3.314752e+01 83.81228 2.684827e-02 1.618772e+01 100.00000 2.221830e-33 1.339616e-30 100.00000

> ca.ma3$col
$coord Dim 1 Dim 2 lastminute 0.50109731 0.02021850 giornaliero -0.16109200 -0.24121807 ricorrenze -0.03792857 0.09652760 settimanale -0.21052320 0.34349687 $contrib Dim 1 Dim 2 lastminute 73.6524740 0.1832719 giornaliero 12.8314315 43.9745768 ricorrenze 0.1446736 1.4322350 settimanale 13.3714210 54.4099163 $cos2 Dim 1 lastminute 0.991860750 giornaliero 0.304586477 ricorrenze 0.004850182 settimanale 0.261348748 $inertia lastminute giornaliero 0.06239835 0.03539982 Dim 2 0.001614746 0.682939660 0.031414358 0.695770607

profili di colonna coordinate

contributo assoluto

contributo relativo

ricorrenze settimanale 0.02506500 0.04299259

21

Analisi delle Corrispondenze


> ca.ma3$row
$coord Dim 1 artigiano 0.015369559 casalinga -0.013186045 commerciante 0.255709282 dirigente -0.640981089 disoccupato -0.047977407 impiegato 0.116836873 imprenditore -0.527775816 insegnante -0.150005163 libprof 0.002189941 operaio -0.005268170 pensionato -0.202061327 studente 0.927843247 altro -0.302464211 $contrib Dim 1 artigiano 2.639591e-03 casalinga 3.982876e-02 commerciante 9.133072e-01 dirigente 4.590969e+00 disoccupato 3.215122e-02 impiegato 2.402450e+00 imprenditore 2.334394e+00 insegnante 1.257177e+00 libprof 2.009602e-04 operaio 4.729369e-03 pensionato 1.448518e+01 studente 7.214801e+01 altro 1.788957e+00 Dim 2 9.6076218 10.0658869 17.8146501 0.8124532 0.0076506 20.4816195 15.8930585 0.2837730 17.8785641 2.0077600 2.7935521 1.1666298 1.1867804 Dim 2 -0.75002128 -0.16955661 0.91348049 0.21810459 -0.01893034 0.27593545 1.11388087 -0.05764560 0.52834344 -0.08779840 -0.07177483 -0.09543365 0.19926535

profili di riga

$cos2 artigiano casalinga commerciante dirigente disoccupato impiegato imprenditore insegnante libprof operaio pensionato studente altro Dim 1 3.889186e-04 4.267905e-03 6.115856e-02 6.989666e-01 1.289675e-02 1.518982e-01 1.347005e-01 1.891194e-01 1.618117e-05 2.505558e-03 5.926272e-01 9.770475e-01 3.668920e-01 Dim 2 0.926153803 0.705691905 0.780481858 0.080927398 0.002007813 0.847242502 0.599995089 0.027929039 0.941841436 0.695918180 0.074775525 0.010336406 0.159240622

$inertia artigiano casalinga commerciante 0.005703145 0.007841851 0.012548625 impiegato imprenditore insegnante 0.013290405 0.014562685 0.005585945 pensionato studente altro 0.020538984 0.062050487 0.004097304

dirigente 0.005519305 libprof 0.010436058

disoccupato 0.002094854 operaio 0.001586117

22

Analisi delle Corrispondenze

> plot(ca.ma3)

23

Analisi delle Corrispondenze Multiple


LAnalisi delle Corrispondenze Multiple (o ACM) una generalizzazione dellAC allo studio simultaneo di pi caratteri. Applicabile nei campi pi disparati, lACM particolarmente utile per fare luce sulle relazioni esistenti fra variabili. Lidea di base di misurare la distanza fra i diversi stati che una variabile pu assumere e di renderla evidente attraverso la rappresentazione grafica dei punti-modalit su di uno spazio fattoriale a pi dimensioni, descrivendo tuttavia solo le dimensioni pi importanti, sufficienti a definire un quadro sintetico della dispersione complessiva con la minima perdita di informazione.
Fa parte, come lACP, delle tecniche fattoriali e, come lACP, ha lo scopo di sintetizzare le relazioni che intercorrono fra numerose variabili sottoposte ad analisi simultanea, allo scopo di riprodurne il patrimonio informativo in un numero pi ridotto di variabili sintetiche = fattori. Come nel caso dellACP, il presupposto che le variabili trattate siano associate tra loro e che in virt di ci possano esprimere (almeno in parte) uno stesso tipo di informazione.

Il comando R per il calcolo dellACM :


mjca(obj, nd = 2, lambda = "adjusted", supcol = NA, ps = "")
= data frame contenente le unit per riga e fattori per colonna nd = numero di dimensioni da includere nelloutput supcol = indice delle variabili supplementari ps = separatore utilizzato per combinare nomi delle variabili e delle modalit obj lambda: metodo di calcolo delle corrispondenze multiple: = indicator sulla matrice Z (tabella in codifica disgiuntiva completa) = Burt sulla matrice di Burt = adjusted con un rescaling delle coordinate della soluzione per un migliore adattamento alle coppie di tabelle al di fuori della diagonale principale della matrice di Burt

24

Analisi delle Corrispondenze Multiple In unindagine sono stati rilevate le abitudini sul consumo di alcolici da parte della popolazione tra i 18 e 40 anni. > dati <- read.table("giovaniBere.txt",header=T)
> str(dati)

Il data frame in cui sono archiviate le informazioni dati con le seguenti caratteristiche:

'data.frame': 2001 obs. of 9 variables: $ ETA : int 26 27 31 20 18 32 22 31 36 24 ... $ CLETA: Factor w/ 4 levels "(25,30]","(30,35]",..: 1 1 2 4 4 2 4 2 3 4 ... $ SEX : Factor w/ 2 levels "Femmina","Maschio": 2 2 1 1 2 2 1 1 1 2 ... $ ZON : Factor w/ 4 levels "Centro","Nord-Occidentale",..: 4 4 1 4 1 1 1 3 3 2 ... $ CON : Factor w/ 4 levels "Casalinga","Disoccupato",..: 4 4 4 4 4 3 4 3 1 3 ... $ B : Factor w/ 4 levels "1+BiccGio","NoConsumo",..: 4 3 2 3 4 3 3 2 2 2 ... $ V : Factor w/ 4 levels "1+BiccGio","NoConsumo",..: 4 2 1 3 3 3 2 3 2 2 ... $ A : Factor w/ 4 levels "1+BiccSett","eccezionalmente",..: 3 3 3 3 2 3 4 3 3 3 ... $ Beve : Factor w/ 2 levels "Beve","NoBeve": 2 1 1 1 1 1 1 1 2 2 ...

> head(dati)
1 2 3 4 5 6 ETA 26 27 31 20 18 32 CLETA (25,30] (25,30] (30,35] [18,25] [18,25] (30,35] SEX ZON CON B V A Beve Maschio Sud-Isole Studente stagionalmente stagionalmente NoConsumo NoBeve Maschio Sud-Isole Studente raramente NoConsumo NoConsumo Beve Femmina Centro Studente NoConsumo 1+BiccGio NoConsumo Beve Femmina Sud-Isole Studente raramente raramente NoConsumo Beve Maschio Centro Studente stagionalmente raramente eccezionalmente Beve Maschio Centro Occupato raramente raramente NoConsumo Beve

consumo di Birra: B
B_1+BiccGio B_raramente B_stagionalmente B_NoConsumo V_1+BiccGio V_raramente V_stagionalmente V_NoConsumo A_1+BiccSett A_raramente A_eccezionalmente A_NoConsumo 1 bicchiere o pi al giorno pi raramente solo stagionalmente non ne consuma 1 bicchiere o pi al giorno pi raramente solo stagionalmente non ne consuma 1 bicchiere o pi alla settimana pi raramente solo eccezionalmente non ne consuma

Sesso: SEX Maschio Femmina Classe di et: CLETA [18,25] (25,30] (30,35] (35,40]

Area geografica: ZON Nord-Occidentale Nord-Orientale Centro Sud-Isole Condizione lavorativa: CON Occupato Disoccupato Casalinga Studente

consumo di Vino: V

consumo di Aperitivi alcolici: A

Abitudine al bere: Beve NoBeve non beve o beve solo eccezionalmente o stagionalmente Beve beve anche solo qualche volta almeno uno degli alcolici

25

Analisi delle Corrispondenze Multiple


Dal data frame dati si estraggono le variabili rispetto a cui effettuare lACM, e con il comando mjca si calcolano le Corrispondenze Multiple. Con nd=2 viene specificato il numero di dimensioni da includere nelloutput, mentre lambda specifica il tipo di scaling.
> dd <- dati[c("B","V","A")] > tt <- mjca(dd, nd = 2, lambda = "adjusted",ps="_") > summary(tt) Principal inertias (eigenvalues): value % cum% 0.269839 81.6 81.6 0.037393 11.3 92.9 0.016788 5.1 98.0 -------- ----Total: 0.330767 dim 1 2 3 scree plot ************************* **

Utilizzando una analisi delle corrispondenze multiple per studiare le relazioni tra le tre variabili relative al consumo di alcolici si osserva in primo luogo che le prime due componenti spiegano oltre il 90% dellinerzia, che ci porta a ritenere minima la perdita di informazione nel rappresentare le relazioni tra le diverse modalit su un piano. Per quanto riguarda la caratterizzazione degli assi osserviamo che il primo contraddistinto da coordinate positive dei profili relativi al non consumo (in particolare il non consumo di birra presenta anche il maggior contributo assoluto); a questi si contrappongono con valori negativi i profili riguardanti il consumo di alcolici. In relazione al secondo asse si evidenzia invece il ruolo svolto dalle modalit relative ai maggiori consumi (oltre 1 bicchiere) sia in termini di coordinate che di contributi (assoluti e relative)

Columns: 1 2 3 4 5 6 7 8 9 10 11 12 name mass | B_1+BiccGio | 24 | B_raramente | 134 | B_stagionalmente | 49 | B_NoConsumo | 126 | V_1+BiccGio | 52 | V_raramente | 105 | V_stagionalmente | 23 | V_NoConsumo | 153 | A_1+BiccSett | 25 | A_raramente | 48 | A_eccezionalmente | 82 | A_NoConsumo | 178 qlt 620 617 107 644 654 621 213 649 656 662 686 693 inr 70 105 28 167 60 102 31 153 67 64 45 107 | | | | | | | | | | | | k=1 -649 -479 -38 647 -496 -530 -240 567 -743 -661 -366 455 cor ctr k=2 cor ctr 295 20 | -682 326 59 | 589 59 | 105 28 8 | 5 0 | 169 102 7 | 641 102 | -45 3 1 | 428 25 | -360 226 35 | 582 57 | 137 39 10 | 87 3 | 289 126 10 | 648 95 | -16 0 0 | 421 27 | -556 236 41 | 662 41 | 8 0 0 | 495 21 | 227 191 22 | 690 71 | -27 2 1 |

26

Analisi delle Corrispondenze Multiple


> plot(tt,what=c("none","all"),mass = c(F, TRUE),labels=c(0,2),cex=0.7)

Graficamente si evidenziano tre aree, a destra sul primo asse il non consumo, mentre a sinistra, tra i consumatori vi una zona dei consumatori saltuari, collocata positivamente sulla seconda componente, mentre gli abituali si posizionano in basso a sinistra. Altro elemento che si evince il comportamento similare nel consumo dei tre tipi di alcolici: a destra troviamo gli astemi che non bevono nessun tipo di alcolico, mentre in basso a sinistra ci sono gli alcolizzati che invece bevono pi frequentemente tutti e tre i tipi di alcolici.

27

Analisi delle Corrispondenze Multiple inoltre possibile verificare come le variabili socio-demografiche si collochino rispetto alle variabili sul consumo. A questo riguardo possono essere inserite, nellanalisi delle corrispondenze multiple, come variabili supplementari, cio variabili che non contribuiscono alla costruzione delle componenti, ma semplicemente vengono descritte rispetto alle componenti create rispetto alle variabili sul consumo di alcolici.
> dd <- dati[c("B","V","A","CLETA")] > tt <- mjca(dd, nd = 2, lambda = "adjusted",ps="_", supcol = 4)

In questo caso, dal data.frame dati, oltre alle variabili riguardanti il consumo di alcolici (B, V, A) viene estratta la classe di et. Nel comando mjca viene specificato con lopzione supcol che la variabile supplementare la quarta (la classe di et).

28

Analisi delle Corrispondenze Multiple

> summary(tt) Principal inertias (eigenvalues): value % cum% 0.269839 81.6 81.6 0.037393 11.3 92.9 0.016788 5.1 98.0 -------- ----Total: 0.330767 dim 1 2 3 scree plot ************************* **

Columns: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 name mass | B_1+BiccGio | 24 | B_raramente | 134 | B_stagionalmente | 49 | B_NoConsumo | 126 | V_1+BiccGio | 52 | V_raramente | 105 | V_stagionalmente | 23 | V_NoConsumo | 153 | A_1+BiccSett | 25 | A_raramente | 48 | A_eccezionalmente | 82 | A_NoConsumo | 178 | (*)CLETA.[18,25] | <NA> | (*)CLETA.(25,30] | <NA> | (*)CLETA.(30,35] | <NA> | (*)CLETA.(35,40] | <NA> qlt 620 617 107 644 654 621 213 649 656 662 686 693 2 8 3 4 inr 36 54 14 86 31 52 16 79 35 33 23 55 <NA> <NA> <NA> <NA> | | | | | | | | | | | | | | | | k=1 -649 -479 -38 647 -496 -530 -240 567 -743 -661 -366 455 14 -29 -12 16 cor 295 589 5 641 428 582 87 648 421 662 495 690 0 1 0 1 ctr 20 59 0 102 25 57 3 95 27 41 21 71 <NA> <NA> <NA> <NA> k=2 cor ctr | -682 326 59 | | 105 28 8 | | 169 102 7 | | -45 3 1 | | -360 226 35 | | 137 39 10 | | 289 126 10 | | -16 0 0 | | -556 236 41 | | 8 0 0 | | 227 191 22 | | -27 2 1 | | 22 1 <NA> | | 64 7 <NA> | | -35 3 <NA> | | -39 3 <NA> |

Linerzia spiegata rimane la medesima, cos come i parametri relativi alle variabili sul consumo d alcolici, essendo lanalisi effettuata sulle medesime variabili del modello precedente, vengono invece aggiunte le coordinate ed i contributi relativi riguardo alla variabile et. Si pu osservare che le modalit di questultima variabile sono per tutte prossime allorigine e con contributi relativi molto bassi; non sembra quindi vi sia una relazione significativa tra le modalit di consumo di alcolici e let.

> plot(tt,what=c("none","all"),mass = c(F, TRUE),labels=c(0,2),cex=0.5)

29

Analisi delle Corrispondenze Multiple

Il grafico mostra come tutte le classi di et siano vicine al centro, non evidenziando quindi nessuna vicinanza con comportamenti specifici nelle modalit di consumo degli alcolici.

30

Analisi delle Corrispondenze Multiple

> > > >

dd <- dati[c("B","V","A","SEX")] tt <- mjca(dd, lambda = "adjusted",ps="_", supcol = 4) plot(tt,what=c("none","all"),mass = c(F, TRUE),labels=c(0,2),cex=0.5) summary(tt)

Principal inertias (eigenvalues): value % cum% 0.269839 81.6 81.6 0.037393 11.3 92.9 0.016788 5.1 98.0 -------- ----Total: 0.330767 dim 1 2 3 scree plot ************************* **

Columns: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 name mass | B_1+BiccGio | 24 | B_raramente | 134 | B_stagionalmente | 49 | B_NoConsumo | 126 | V_1+BiccGio | 52 | V_raramente | 105 | V_stagionalmente | 23 | V_NoConsumo | 153 | A_1+BiccSett | 25 | A_raramente | 48 | A_eccezionalmente | 82 | A_NoConsumo | 178 | (*)SEX.Maschio | <NA> | (*)SEX.Femmina | <NA> qlt inr 620 47 | 617 70 | 107 18 | 644 111 | 654 40 | 621 68 | 213 21 | 649 102 | 656 45 | 662 43 | 686 30 | 693 71 | 421 <NA> | 313 <NA> | k=1 -649 -479 -38 647 -496 -530 -240 567 -743 -661 -366 455 -276 291 cor ctr k=2 cor ctr 295 20 | -682 326 59 | 589 59 | 105 28 8 | 5 0 | 169 102 7 | 641 102 | -45 3 1 | 428 25 | -360 226 35 | 582 57 | 137 39 10 | 87 3 | 289 126 10 | 648 95 | -16 0 0 | 421 27 | -556 236 41 | 662 41 | 8 0 0 | 495 21 | 227 191 22 | 690 71 | -27 2 1 | 377 <NA> | -94 44 <NA> | 281 <NA> | 99 33 <NA> |

Si osserva invece una maggiore relazione tra il sesso e le modalit di consumo di alcolici. I contributi relativi, soprattutto con riferimento alla prima componente sono soddisfacenti, e si nota come le coordinate dei maschi presentino valori negativi, contrapponendosi a quelli delle donne. Le donne sembrano quindi pi vicine alla zona del non consumo, a differenza degli uomini che si posizionano a sinistra sul primo asse.

31

Analisi delle Corrispondenze Multiple

Graficamente risulta pi chiara questa distanza tra i due generi con riferimento al consumo di alcolici. Da sottolineare in particolare la vicinanza tra femmine e zona degli astemi, mentre i maschi si collocano lontano da tale zona.

Analisi simili possono poi essere effettuate per le altre variabili. Si potrebbe anche verificare la posizione di tutte le variabili socio-demografice per mezzo di ununica analisi con il comando:
dd <- dati[,c("B","V","A","CLETA","CON","ZON","SEX")] tt <- mjca(dd, nd = 2, lambda = "adjusted",ps="_", supcol = c(4,5,6,7))

ma il grafico potrebbe risultare di difficile lettura a causa dellelevato numero di punti rappresentati.
32

Alberi di classificazione Gli alberi di classificazione rientrano tra le tecniche statistiche di classificazione supervisionata, cio quelle in cui si richiede a priori la conoscenza dei dati. Data quindi una variabile Y di tipo nominale o ordinale che esprime la categoria di appartenenza di una unit ed un set di variabili esplicative (X1,,Xp) rilevate sulle medesime unit, lobiettivo consiste nel definire un insieme di regole che, sfruttando la relazione tra classe di appartenenza e variabili esplicative, consentano di assegnare a queste classi nuove unit per le quali sono note solo le variabili esplicative.
Partendo dallinsieme di unit osservate per cui sono note Y e X1,,Xp si utilizza un insieme di record, detto training set, per determinare linsieme di regole che consentono di assegnare una unit ad una classe di Y. Per validare il modello ottenuto si ricorre sempre un sottoinsieme delle unit osservate, il test set, per le quali viene considerata ignota la classe di appartenenza allo scopo di valutare come si comporta il classificatore, cio se predice in la classe corretta (essendo in realt nota la modalit di Y). Si utilizza quindi il training set per apprendere il modello dei dati ed il test set per validarlo.
Le finalit principali di un albero di classificazione possono quindi essere: 1. Individuazione delle determinanti della variabile dipendente: lanalisi individua le variabili esplicative che meglio spiegano la variabile dipendente. La segmentazione permette, cio di individuare le variabili esplicative rilevanti allinterno di sottoinsiemi di unit via via pi chiaramente definiti. Produzione di regole di previsione o di classificazione: sulla base del campione osservato si crea una regola di previsione del valore della variabile dipendente di un nuovo soggetto per il quale si siano osservate le variabili esplicative.
33

2.

Alberi di classificazione In R la funzione per la costruzione di un albero di classificazione rpart, e richiede lomonima libreria.
Riprendendo lesempio precedente sul comportamento dei giovani nel consumo di alcolici, ed utilizziamo come dipendente la variabile Beve (0=NoBeve se non consuma alcolici di nessun tipo o li consuma solo saltuariamente, 1=Beve se beve almeno uno dei tipi di alcolici considerati con una frequenza maggiore) e verifichiamo se, in base alle variabili socio-demografiche rilevate, possibile classificare i giovani in bevitori o non bevitori.
> library(rpart) > fit <- rpart(Beve~SEX+CLETA+CON+ZON, method="class",xval=20, minsplit=50 ,cp=0.001)

Il primo argomento una formula (Beve~SEX+CLETA+CON+ZON) che segue con la consueta sintassi in cui a sinistra della ~ c la variabile che rappresenta le classi e a destra ci sono le variabili esplicative. L'argomento method specifica il metodo da usare, classificazione nel nostro caso. Va tenuto presente che la funzione rpart serve anche per stimare alberi di regressione, quindi opportuno specificare il metodo, se non viene fatto viene assunto class se la variabile dipendente un fattore, anova se la dipendente continua. L'argomento xval specifica quante validazioni incrociate vengono fatte per la stima dell'errore. Gli argomenti minsplit e cp sono legati alla profondit massima dell'albero da crescere, in particolare minsplit il numero minimo di osservazioni che devono essere presenti in un nodo per considerarne la suddivisione, e cp, parametro di complessit, la minima diminuzione dell'errore che deve produrre una suddivisione per essere presa in considerazione. Si pu anche scegliere il numero minimo di osservazioni in un nodo terminale con l'argomento minbucket.
34

Alberi di classificazione

Per rappresentare graficamente lalbero di classificazione si utilizzano i comandi:


> plot(fit, compress=TRUE, uniform=T, branch=0.8) > text(fit,pretty=0,all=TRUE,use.n=TRUE, fancy=T, col="blue",cex=0.8)

il comando plot disegna l'albero senza testo, compress=TRUE consente di avere una forma pi compatta del grafico, con uniform=TRUE la spaziatura verticale tra i nodi costante, in caso contrario i nodi vengono distanziati in maniera proporzionale allerrore di adattamento; branch determina linclinazione dei rami, se uguale ad 1 i rami sono verticali il comando text aggiunge le condizioni usate in corrispondenza a ciascuna ramificazione e le classi prevalenti per i nodi terminali. Inoltre, se use.n=TRUE vengono stampate le frequenze assolute delle classi nei nodi terminali; se all=TRUE le classi prevalenti e le frequenze delle classi vengono riportate per ogni nodo e non solo per i nodi terminali; pretty=0 consente di riportare per esteso le modalit di split, se non indicato vengono utilizzate le lettere come abbreviazione dei livelli del fattore di suddivisione; fancy=TRUE marca i nodi con delle ellissi e le foglie con dei rettangoli e riporta sui rami i rispettivi criteri di split.

35

Alberi di classificazione

36

Alberi di classificazione

Il metodo print produce una descrizione testuale dell'albero, in cui per ogni nodo riportata la condizione per la suddivisione, il numero di osservazioni, la perdita, la classe prevalente e le probabilit a posteriori.
> print(fit) n= 2001 node), split, n, loss, yval, (yprob) * denotes terminal node

Nel nodo radice ci sono 775 giovani che non bevono (su 2001) con una percentuale di bevitori del 61.3%.

Il secondo nodo, definito dai maschi, costituito da 1) root 2001 775 Beve (0.6126937 0.3873063) 1026 unit, con una 2) SEX=Maschio 1026 244 Beve (0.7621832 0.2378168) * 3) SEX=Femmina 975 444 NoBeve (0.4553846 0.5446154) percentuale di bevitori del 6) ZON=Centro,Nord-Occidentale,Nord-Orientale 567 271 Beve (0.5220459 0.4779541) 76% (244 non bevono); 12) CON=Occupato,Studente 440 202 Beve (0.5409091 0.4590909) questo nodo rappresenta 24) ZON=Nord-Orientale 146 61 Beve (0.5821918 0.4178082) una foglia dellalbero ed 48) CLETA=(30,35],[18,25] 77 26 Beve (0.6623377 0.3376623) * indicato con *. 49) CLETA=(25,30],(35,40] 69 34 NoBeve (0.4927536 0.5072464) 98) CLETA=(25,30] 31 15 Beve (0.5161290 0.4838710) * Pertanto la prima regola 99) CLETA=(35,40] 38 18 NoBeve (0.4736842 0.5263158) * di classificazione 25) ZON=Centro,Nord-Occidentale 294 141 Beve (0.5204082 0.4795918) identifica i maschi nella 50) CLETA=(25,30],(30,35],(35,40] 213 97 Beve (0.5446009 0.4553991) * classe dei bevitori. 51) CLETA=[18,25] 81 37 NoBeve (0.4567901 0.5432099) *
13) CON=Casalinga,Disoccupato 127 58 NoBeve (0.4566929 0.5433071) 26) CLETA=(25,30],(35,40] 69 33 Beve (0.5217391 0.4782609) 52) CON=Disoccupato 29 12 Beve (0.5862069 0.4137931) * 53) CON=Casalinga 40 19 NoBeve (0.4750000 0.5250000) * 27) CLETA=(30,35],[18,25] 58 22 NoBeve (0.3793103 0.6206897) * 7) ZON=Sud-Isole 408 148 NoBeve (0.3627451 0.6372549) *

Se consideriamo invece il ramo di destra, la cui condizione SEX=Femmina, vi troviamo 975 unit, in cui la maggioranza non beve (54.5%), questo nodo ulteriormente suddiviso in base alla zona.

Prendendo ancora il ramo di destra ZON=Sud-Isole (nodo 7) abbiamo 408 unit delle quali solo 148 bevono, quindi con una prevalenza di non bevitrici (63.7%); abbiamo un gruppo non ulteriormente suddivisibile che costituisce un nodo terminale (foglia). 37

Alberi di classificazione
> summary(fit)
Call: rpart(formula = Beve ~ SEX + CLETA + CON + ZON, method = "class", xval = 20, minsplit = 50, cp = 0.001) n= 2001 CP nsplit rel error xerror xstd 0.112258065 0 1.0000000 1.0000000 0.02811712 0.032258065 1 0.8877419 0.8877419 0.02741583 0.014193548 2 0.8554839 0.8554839 0.02716812 0.004516129 3 0.8412903 0.8774194 0.02733887 0.003870968 5 0.8322581 0.8838710 0.02738722 0.002580645 6 0.8283871 0.8735484 0.02730946 0.001290323 7 0.8258065 0.8709677 0.02728968 0.001000000 9 0.8232258 0.8941935 0.02746283

1 2 3 4 5 6 7 8

Node number 1: 2001 observations, complexity param=0.1122581 predicted class=Beve expected loss=0.3873063 class counts: 1226 775 probabilities: 0.613 0.387 left son=2 (1026 obs) right son=3 (975 obs) Primary splits: SEX splits as RL, improve=94.111280, (0 missing) CON splits as RRLR, improve=21.551660, (0 missing) ZON splits as LLLR, improve=12.147350, (0 missing) CLETA splits as RLLR, improve= 1.536986, (0 missing) Surrogate splits: CON splits as RLLL, agree=0.596, adj=0.171, (0 split) CLETA splits as LLRL, agree=0.529, adj=0.034, (0 split) Node number 2: 1026 observations predicted class=Beve expected loss=0.2378168 class counts: 782 244 probabilities: 0.762 0.238 Node number 3: 975 observations, complexity param=0.03225806 predicted class=NoBeve expected loss=0.4553846 class counts: 444 531 probabilities: 0.455 0.545 left son=6 (567 obs) right son=7 (408 obs) Primary splits: ZON splits as LLLR, improve=12.0421600, (0 missing) CON splits as RRLL, improve= 5.8285320, (0 missing) CLETA splits as RRLR, improve= 0.6072109, (0 missing) Surrogate splits: CON splits as RRLL, agree=0.652, adj=0.169, (0 split)

Informazioni maggiori sulla costruzione dellalbero si ottengono con il comando summary, che fornisce indicazioni sullerrore di classificazione per mezzo della tavola che riporta per ogni split il livello di complessit CP e lerrore, riporta inoltre per ogni nodo, il numero di unit, il criterio di suddivisione e le probabilit di appartenere ad una classe, le possibili variabili di suddivisione con i rispettivi livelli di miglioramento (nel primo nodo la variabile SEX, rispetto a cui stata effettuata la suddivisione, porta ad un miglioramento pari a 94, la seconda variabile in termini di importanza rispetto a cui si sarebbe potuta suddividere la popolazione CON, ma questa avrebbe condotto ad un miglioramento della classificazione molto inferiore).

. . . . .

38

Alberi di classificazione
Informazioni sui nodi possono essere desunte anche per mezzo del comando:
> fit$frame
1 2 3 6 12 24 48 49 98 99 25 50 51 13 26 52 53 27 7 var n wt dev yval complexity ncompete nsurrogate SEX 2001 2001 775 1 0.112258065 3 2 <leaf> 1026 1026 244 1 0.000000000 0 0 ZON 975 975 444 2 0.032258065 2 1 CON 567 567 271 1 0.014193548 2 0 ZON 440 440 202 1 0.004516129 2 0 CLETA 146 146 61 1 0.001290323 1 1 <leaf> 77 77 26 1 0.000000000 0 0 CLETA 69 69 34 2 0.001290323 0 0 <leaf> 31 31 15 1 0.001000000 0 0 <leaf> 38 38 18 2 0.001000000 0 0 CLETA 294 294 141 1 0.004516129 2 1 <leaf> 213 213 97 1 0.000000000 0 0 <leaf> 81 81 37 2 0.000000000 0 0 CLETA 127 127 58 2 0.003870968 2 0 CON 69 69 33 1 0.002580645 2 1 <leaf> 29 29 12 1 0.001000000 0 0 <leaf> 40 40 19 2 0.001000000 0 0 <leaf> 58 58 22 2 0.000000000 0 0 <leaf> 408 408 148 2 0.000000000 0 0 yval2.1 yval2.2 1.0000000 1226.0000000 1.0000000 782.0000000 2.0000000 444.0000000 1.0000000 296.0000000 1.0000000 238.0000000 1.0000000 85.0000000 1.0000000 51.0000000 2.0000000 34.0000000 1.0000000 16.0000000 2.0000000 18.0000000 1.0000000 153.0000000 1.0000000 116.0000000 2.0000000 37.0000000 2.0000000 58.0000000 1.0000000 36.0000000 1.0000000 17.0000000 2.0000000 19.0000000 2.0000000 22.0000000 2.0000000 148.0000000 yval2.3 775.0000000 244.0000000 531.0000000 271.0000000 202.0000000 61.0000000 26.0000000 35.0000000 15.0000000 20.0000000 141.0000000 97.0000000 44.0000000 69.0000000 33.0000000 12.0000000 21.0000000 36.0000000 260.0000000 yval2.4 0.6126937 0.7621832 0.4553846 0.5220459 0.5409091 0.5821918 0.6623377 0.4927536 0.5161290 0.4736842 0.5204082 0.5446009 0.4567901 0.4566929 0.5217391 0.5862069 0.4750000 0.3793103 0.3627451 yval2.5 0.3873063 0.2378168 0.5446154 0.4779541 0.4590909 0.4178082 0.3376623 0.5072464 0.4838710 0.5263158 0.4795918 0.4553991 0.5432099 0.5433071 0.4782609 0.4137931 0.5250000 0.6206897 0.6372549

numero del nodo var = variabile di split n = numero di casi wt = il peso degli eventi nel nodo dev = il numero di eventi in minoranza nel nodo yval = la classe complexity = la complessit ncompete = il numero di competitori nsurrogate = il numero di surrogati yval2.1 = la classe yval2.2 e yval2.3 = il numero di casi per classe yval2.4 e yval2.5 = la probabilit delle classi

39

Alberi di classificazione
Una sintesi del ruolo delle diverse variabili in ogni suddivisione invece desumibile con:
> fit$splits
SEX CON ZON CLETA CON CLETA ZON CON CLETA CON CON ZON CLETA ZON CLETA CON CLETA CON CON CLETA CLETA ZON CON CON CLETA ZON CON CON ZON CLETA ZON count ncat improve index adj 2001 2 94.111281777 1 0.00000000 2001 4 21.551664214 2 0.00000000 2001 4 12.147346878 3 0.00000000 2001 4 1.536986322 4 0.00000000 0 4 0.596201899 5 0.17128205 0 4 0.529235382 6 0.03384615 975 4 12.042156943 7 0.00000000 975 4 5.828532005 8 0.00000000 975 4 0.607210932 9 0.00000000 0 4 0.652307692 10 0.16911765 567 4 1.397958841 11 0.00000000 567 4 1.032569899 12 0.00000000 567 4 0.131595402 13 0.00000000 440 4 0.744773426 14 0.00000000 440 4 0.358021557 15 0.00000000 440 4 0.099541375 16 0.00000000 146 4 2.093085196 17 0.00000000 146 4 0.007166946 18 0.00000000 0 4 0.657534247 19 0.27536232 69 4 0.061514234 20 0.00000000 294 4 0.904989017 21 0.00000000 294 4 0.220001587 22 0.00000000 294 4 0.200472411 23 0.00000000 0 4 0.867346939 24 0.51851852 127 4 1.278494611 25 0.00000000 127 4 0.188457212 26 0.00000000 127 4 0.145061328 27 0.00000000 69 4 0.415817091 28 0.00000000 69 4 0.389030975 29 0.00000000 69 4 0.214269788 30 0.00000000 0 4 0.608695652 31 0.06896552

Nel primo nodo SEX la variabile esplicativa adottata, ed quella che fornisce il maggior grado di miglioramento rispetto allimpurit iniziale, seguono come variabili competitrici nella possibilit di suddividere il nodo radice, in ordine di importanza, CON (condizione professionale), ZON (zona geografica) e CLETA (classe di et). CON e CLETA sono invece possibili variabili surrogato che potrebbero essere utilizzate al posto di SEX nel caso vi fossero unit con dato mancante rispetto a questultima variabile.

40

Alberi di classificazione
Le stime dell'errore di classificazione per i diversi alberi sono visualizzate graficamente e testualmente con i comandi:
> plotcp(fit) > printcp(fit)
Classification tree: rpart(formula = Beve ~ SEX + CLETA + CON + ZON, method = "class", xval = 20, minsplit = 50, cp = 0.001) Variables actually used in tree construction: [1] CLETA CON SEX ZON Root node error: 775/2001 = 0.38731 n= 2001 CP nsplit rel error 0.1122581 0 1.00000 0.0322581 1 0.88774 0.0141935 2 0.85548 0.0045161 3 0.84129 0.0038710 5 0.83226 0.0025806 6 0.82839 0.0012903 7 0.82581 0.0010000 9 0.82323 xerror 1.00000 0.88774 0.85548 0.87742 0.88387 0.87355 0.87097 0.89419 xstd 0.028117 0.027416 0.027168 0.027339 0.027387 0.027309 0.027290 0.027463

1 2 3 4 5 6 7 8

> fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"] [1] 0.01419355

41

Alberi di classificazione
Il dato dellerrore relativo consente di identificare il livello di complessit rispetto a cui potare lalbero per ottenere una rappresentazione pi semplificata senza perdite di informazione. Dalla tavola precedente si osserva che il livello minimo di errore relativo si ha in corrispondenza ad un livello di cp pari a 0.01419.
> fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"] [1] 0.01419355

Con i comando prune quindi possibile ridurre la dimensione dellalbero ottenuto in precedenza
> fit.prune <- prune(fit,cp=0.021) > print(fit.prune) n= 2001 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 2001 775 Beve (0.6126937 0.3873063) 2) SEX=Maschio 1026 244 Beve (0.7621832 0.2378168) * 3) SEX=Femmina 975 444 NoBeve (0.4553846 0.5446154) 6) ZON=Centro,Nord-Occidentale,Nord-Orientale 567 271 Beve (0.5220459 0.4779541) 12) CON=Occupato,Studente 440 202 Beve (0.5409091 0.4590909) * 13) CON=Casalinga,Disoccupato 127 58 NoBeve (0.4566929 0.5433071) * 7) ZON=Sud-Isole 408 148 NoBeve (0.3627451 0.6372549) * > plot(fit.prune, compress=TRUE,uniform=T, branch=0.8) > text(fit.prune,pretty=0,all=TRUE,use.n=TRUE, fancy=T, col="blue",cex=0.8) 42

Alberi di classificazione

Come si pu immediatamente notare lalbero che si ottiene notevolmente semplificato; la suddivisione delle femmine avviene per zona, per cui le femmine del sud-isole sono classificate come non bevitrici, mentre quelle delle atre aree vengono suddivise solamente in base alla condizione per cui le studentesse e quelle occupate rientrano nel gruppo di chi fa uso di alcolici, mentre le casalinghe e le disoccupate sono classificate come non bevitrici.

43

Alberi di classificazione
Sulla base del nuovo albero si ottiene una previsione con il comando:
> fit.prune.pred <- predict(fit.prune) > head(fit.prune.pred) Beve NoBeve [1,] 0.7621832 0.2378168 [2,] 0.7621832 0.2378168 [3,] 0.5409091 0.4590909 [4,] 0.3627451 0.6372549 [5,] 0.7621832 0.2378168 [6,] 0.7621832 0.2378168

che assegna ad ogni unit la probabilit di appartenenza alle varie classi, si ottiene invece la previsione della classe con
> dati$classe.Pred <> head(dati) ETA CLETA SEX 1 26 (25,30] Maschio 2 27 (25,30] Maschio 3 31 (30,35] Femmina 4 20 [18,25] Femmina 5 18 [18,25] Maschio 6 32 (30,35] Maschio predict(fit.prune,type="class") ZON Sud-Isole Sud-Isole Centro Sud-Isole Centro Centro CON B V A Beve classe.Pred Studente stagionalmente stagionalmente NoConsumo NoBeve Beve Studente raramente NoConsumo NoConsumo Beve Beve Studente NoConsumo 1+BiccGio NoConsumo Beve Beve Studente raramente raramente NoConsumo Beve NoBeve Studente stagionalmente raramente eccezionalmente Beve Beve Occupato raramente raramente NoConsumo Beve Beve

predict(fit.prune,type="class")

quindi possibile aggiungere una variabile (classe.Pred) a data frame dati in cui indicata la classe di appartenenza prevista in base al sistema di regole definite in base allalbero di classificazione

44

Alberi di classificazione
> attach(dati) > addmargins(table(Beve,classe.Pred)) classe.Pred Beve Beve NoBeve Sum Beve 1020 206 1226 NoBeve 446 329 775 Sum 1466 535 2001 > tpred <- table(Beve,classe.Pred) > sum(diag(tpred))/sum(tpred) [1] 0.6741629

Dalla tabella in cui sono poste a confronto la casse di appartenenza delle unit (Beve) e la classe prevista (classe.Pred) si pu osservare che su 1226 giovani che bevono, il sistema di regole costruite in base allalbero di classificazione definito utilizzando le variabili sociodemografiche, ne classifica come bevitori 1020. Tuttavia tra i 775 non bevitori, ne vengono classificati correttamente 329.

In complesso sono classificati correttamente (1020+329)=1349 giovani su 2001, pari al 67.4%.

Utilizzando lalbero di classificazione come strumento per descrivere il fenomeno del bere, ed in particolare per capire quale sia linfluenza delle variabili socio-demografiche su tale fenomeno, si pu concludere che queste variabili non sembrano essere in grado di dare una descrizione piena delluso di alcolici da parte dei giovani. Datra parte anche lanalisi delle corrispondenze sulle medesime variabili non aveva fornito indicazioni significative.

45

Potrebbero piacerti anche