Corso di Metodi Quantitativi per l’Analisi Economica Prof.ssa Silvia Figini– [email protected] Ricevimento studenti: Mercoledì ore 14-16 e su appuntamento Argomenti del corso Processo di esplorazione e modellazione di grandi masse di dati per scoprire regolarità o relazioni non note a priori allo scopo di ottenere risultati chiari e utili. Fasi del processo: a. Definizione degli obiettivi dell’analisi b. Organizzazione dei dati c. Analisi esplorativa dei dati d. Costruzione modelli statistici e. Valutazione dei modelli f. Interpretazione dei risultati Tipologie di variabili VARIABILI QUALITATIVE • NOMINALI: categorie distinte senza ordinamento • ORDINALI: categorie distinte con ordinamento implicito o esplicito VARIABILI QUANTITATIVE • DISCRETE: numero finito di valori • CONTINUE: infinità numerabile di valori La matrice dei dati ID 1 X1 X2 … … Xj … … … Xp x11 x1j x1p xi1 xij xip xn1 xnj xnp 2 … … i … … n Ogni riga rappresenta le caratteristiche relative ad ogni i-esima unità statistica (i=1,…,n). X1,…,Xp sono chiamate variabili indipendenti o covariate. Misure di posizione (i) MEDIA ARITMETICA La MODA è la modalità della variabile a cui è associata la massima frequenza. La MEDIANA in una sequenza ordinata di dati è quel valore che ripartisce la distribuzione in due parti uguali. Misure di posizione (ii) MODA MEDIA ARITMETICA (Y) = µ(Y) = 1.103464 MEDIANA (Y) = 1.108847 Comandi utili: hist, mean, median Misure di posizione (R) > summary(y) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.904 2.241 2.414 2.419 2.568 2.984 Consideriamo una variabile quantitativa “y” e calcoliamo: MINIMO, Q1, MEDIANA (Q2), MEDIA, Q3 E MASSIMO. Plot(y) Misure di posizione: boxplot boxplot(y,ylab="valori") Il box plot è una rappresentazione grafica dei valori ottenuti in precedenza. E’ utile per stabilire se la variabile che si analizza è simmetrica. Inoltre, è uno strumento grafico utile per identificare la presenza di osservazioni anomale. Misure di posizione: valori anomali Range Interquartile: Q3 – Q1 = 980 – 850 = 130 (130 x 1.5) = 195 Q1 – 195 = 655 980 + 195= 1175 Valori >1175 e valori < 655 sono da considerarsi outliers. summary(speed) Min. 1st Qu. Median Mean 3rd Qu. Max. 650 850 940 909 980 1070 Misure di variabilità (dati quantitativi) VARIANZA SCARTO QUADRATICO MEDIO COEFFICIENTE DI VARIAZIONE Misure di variabilità più semplici sono ad esempio il RANGE (Massimominimo) e la DIFFERENZA INTERQUARTILE (Q3-Q1). Misure di variabilità: range Rappresentiamo graficamente il seguente vettore di dati: y<-c(13,7,5,12,9,15,6,11,9,7,12) plot(y,ylim=c(0,20)) Calcoliamo il range: range(y) Risultato: 5 15 Misure di variabilità: varianza > y-mean(y) 3.3636364 -2.6363636 -4.6363636 2.3636364 -0.6363636 5.3636364 -3.6363636 1.3636364 -0.6363636 -2.6363636 2.3636364 > (y-mean(y))^2 11.3140496 6.9504132 21.4958678 5.5867769 0.4049587 28.7685950 13.2231405 1.8595041 0.4049587 6.9504132 5.5867769 > sum((y-mean(y))^2) 102.5455 > variance<-sum((y-mean(y))^2)/(length(y)-1) > variance 10.25455 Comando equivalente: var Misure di variabilità: Standard Error della media > sqrt(var(gardenA)/10) 0.4147661 > sqrt(var(gardenB)/10) 0.3651484 > sqrt(var(gardenC)/10) 1.192570 Lo standard error è per costruzione un numero sempre positivo. E’ pari a zero quando la varianza è nulla. Ad esempio, se considerate z<-c(1,1,1,1,1,1,1,1,1,1), quanto varrà SE(z)? Misure di eterogeneità (per variabili qualitative) Per variabili qualitative, si utilizza la distribuzione di frequenza. Casi estremi: 1) eterogeneità nulla (massima concentrazione) se tutte le unità presentano la medesima modalità del fenomeno in oggetto, ovvero se pi=1 per un certo i ; pi=0 per ogni altro i. 2) eterogeneità massima (minima concentrazione) quando le unità sono ripartite uniformemente tra le k modalità del carattere , ovvero se: pi=1/k per i=1,…,k. Un indice statistico atto a misurare l’eterogeneità è: • Indice di Gini Misure di concentrazione Per caratteri trasferibili quantitativi. Casi estremi: 1) Concentrazione massima se il carattere quantitativo è interamente posseduto da un’unità, ovvero se xn = nM(X) per un certo i ; xi=0 per ogni altro i. 2) Concentrazione minima quando il carattere è uniformemente ripartito fra le unità, ovvero xi = M(X) per i=1,…,k. Un indice statistico atto a misurare la concentrazione è l’ indice di concentrazione di Gini Misure di asimmetria: Skewness Una distribuzione Normale standard, ha un valore di skewness pari a 0. Valori negativi evidenziano asimmetria a sx. Valori positivi evidenziano asimmetria a dx. Al fine di verificare che il valore ottenuto è significativamente diverso da zero, si costruisce un test dividendo la skewness ottenuta per il relativo standard error. Skewness: esempio > skew<-function(x){ + m3<-sum((x-mean(x))^3)/length(x) + s3<-sqrt(var(x))^3 + m3/s3 } > skew(values) [1] 1.318905 Per valutare se la skewness è statisticamente diversa da zero, usiamo un t-test dividendo il valore osservato di skewness per il suo standard error, pari a sqrt(6/n). > skew(values)/sqrt(6/length(values)) [1] 2.949161 Misure di curtosi: Kurtosis Il termine “3” è incluso perchè in una distribuzione Normale la kurtosis è pari a 3. Per valutare se la kurtosi è statisticamente diversa da zero, usiamo un t-test dividendo il valore osservato di skewness per il suo standard error, pari a sqrt(24/n). Kurtosis: esempio > data<-read.table(file.choose(), header=T) > attach(data) > kurtosis<-function(x) { + m4<-sum((x-mean(x))^4)/length(x) + s4<-var(x)^2 + m4/s4 - 3 } > kurtosis(values) [1] 1.297751 > kurtosis(values)/sqrt(24/length(values)) [1] 1.450930 Con i dati in esame, troviamo che la kurtosis non è significativamente diversa dalla distribuzione Normale standard. Analisi grafica normalità ANALISI ESPLORATIVA (cap 3) • Analisi di un campione: intervalli di confidenza, bootstrap, t-test, test di wilcoxon • Confronto fra campioni • Confronto medie, varianze, distribuzioni • Verifica indipendenza • Verifica correlazione Analisi di un campione: intervalli di confidenza Dimensione del campione (n) è inferiore a 30. Nel caso analizzato, n=10. Non è possibile usare la distribuzione normale, quindi si usa la t-Student. AGGIUNGERE MEDIA CAMPIONARIA +/- NELLE FORMULE IC = x ± t − value × SE σ2 IC95% = x ± t(α = 0.025,d . f .= n−1) × n Consideriamo ad esempio la variabile garden A. Al fine di costruire un IC al 95%: >mean(gardenA) € 2.803283 >qt(0.975,9)*sqrt(var(gardenA)/10) 0.9382662 Quindi l’intervallo di confidenza considerando 1-α=95% diventa: 2.803283±0.9382662. Bootstrap • Il Bootstrap è una metodologia che serve per ricostruire la variabilità campionaria presente nei dati. • Ciò mediante una procedura di simulazione che estrae ripetutamente, con reimmissione, k campioni dai dati di partenza. • In corrispondenza di ogni campione si calcola il valore campionario di una statistica di interesse. • Al termine si avranno k valori della statistica che potranno essere usati per calcolare sia misure di posizione (medie) che di variabilità (varianze, dalle quali ottenere, ad esempio, intervalli di confidenza). Analisi di un campione: intervalli bootstrap Itervallo di confidenza calcolato con il bootstrap …: IC t-student ___: IC Normale Analisi di un campione: T-test t= yA σ 2A nA Il denominatore del t-test, è lo standard error associato alla media campionaria € L’ipotesi nulla è che i il campione abbia media nota, di solito pari a zero. Viene utilizzata una distribuzione t-Student con un numero di gradi di libertà pari al numero totale delle osservazioni – numero parametri da stimare (ovvero 1) Analisi di un campione: test di Wilcoxon Vogliamo testare H0:µ=990 vs H1:µ≠990 Si usa il test di Wilcoxon quando i dati non sono distribuiti secondo una normale, per verificare se la distribuzione è simmetrica attorno ad un valore medio noto (spesso pari a zero). E’ un test statistico di tipo non parametrico. wilcox.test(speed,mu=990) Wilcoxon signed rank test with continuity correction data: speed V = 22.5, p-value = 0.00213 alternative hypothesis: true location is not equal to 990 Si accetta l’ipotesi alternativa, perché p=0.00213 e tale valore è minore del livello α=0.05 scelto. Verificare ipotesi con bootstrap > max(a) [1] 982 Nei 10000 campioni derivati, il valore massimo ottenuto è pari a 982, quindi la probabilità che la media sia uguale a 990 è chiaramente nulla, p<0.0001. Confronto tra due campioni • Confronto fra due medie con assunzione di normalità (Student t test) • Confronto fra due medie non parametrico, senza assunzione di normalità (Wilcoxon test) • Confronto fra due varianze (Fisher F test) • Confronto fra distribuzioni (Kolmogorov Smirnov test) • Verifica indipendenza (test del chi quadro) • Verifica correlazione (Pearson correlation test) Confronto tra due medie • T-test (Student): campioni indipendenti, varianze costanti e normalità • Wilcoxon test: solo campioni indipendenti T-test Il denominatore del t-test, è lo standard error associato alla differenza tra le medie. I due standard error vengono sommati perchè dal punto di vista teorico, se A e B sono tra di loro indipendenti: L’ipotesi nulla è che i due campioni hanno medie uguali. Viene utilizzata una distribuzione t-Student con un numero di gradi di libertà pari al numero totale delle osservazioni – numero parametri da stimare (2 nel caso di due popolazioni) Una prima idea sulla uguaglianza o differenza tra le medie, è desumibile anche per confronto grafico dei due box-plot. T-test: esempio > s2A<-var(gardenA) > s2B<-var(gardenB) > (mean(gardenA)-mean(gardenB))/ sqrt(s2A/10+s2B/10) [1] -3.872983 > qt(0.975,18) [1] 2.100922 > 2*pt(-3.872983,18) [1] 0.001114540 1. Calcoliamo la varianza di gardenA e di gardenB 2. Calcoliamo la statistica test che restituisce il valore -3.872983 3. Ignoriamo il segno “-” e ragioniamo in valore assoluto 4. Calcoliamo il valore critico, considerando α=0.05 che risulta essere 2.100922. 5. Siccome il valore della statistica test (3.87) è maggiore del valore critico (2.10) rifiutiamo l’ipotesi nulla. 6. La probabilità che la differenza tra le medie sia uguale a zero è pari a 0.001114540. T-test: abbreviato > t.test(gardenA,gardenB) Welch Two Sample t-test data: gardenA and gardenB t = -3.873, df = 18, p-value = 0.001115 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -3.0849115 -0.9150885 sample estimates: mean of x mean of y 3 5 Wilcoxon Test Il test di Wilcoxon viene usato quando non è garantita la normalità dei dati. > ozone<-c(gardenA,gardenB) > ozone [1] 3 4 4 3 2 3 1 3 5 2 5 5 6 7 4 4 3 5 6 5 > label<-c(rep("A",10),rep("B",10)) > label [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" > combined.ranks<-rank(ozone) > combined.ranks [1] 6.0 10.5 10.5 6.0 2.5 6.0 1.0 6.0 15.0 2.5 15.0 15.0 18.5 20.0 10.5 10.5 6.0 15.0 18.5 15.0 > tapply(combined.ranks,label,sum) A B 66 144 Si confronta il più piccolo dei due valori con il valore riportato sulle tavole (es. n=10 e α=0.05, il valore sulle tavole è pari a 78) Se il valore ottenuto dal test è minore al valore delle tavole, rifiutiamo l’ipotesi nulla, cioè che la differenza tra le medie è nulla. Wilcoxon Test: abbreviato > wilcox.test(gardenA,gardenB) Wilcoxon rank sum test with continuity correction data: gardenA and gardenB W = 11, p-value = 0.002988 alternative hypothesis: true location shift is not equal to 0 Warning message: In wilcox.test.default(gardenA, gardenB) : impossibile calcolare p-value esatto in presenza di ties N.B. il messaggio di “warning” è fondamentale ed evidenzia che non è possibile calcolare il p-value esatto perché sono presenti nelle misurazioni dati ripetuti. Questo fatto rende il test non parametrico più conservativo rispetto a quello proposto in precedenza (t-test). Confronto tra varianze: test F > data<-read.table(file.choose(),header=T) > attach(data) > fix(data) > names(data) [1] "gardenB" "gardenC" N=10 osservazioni Varianza gardenC > varianza gardenB > var(gardenB) [1] 1.333333 > var(gardenC) [1] 14.22222 > F.ratio<-var(gardenC)/var(gardenB) > F.ratio [1] 10.66667 > valore.critico<-qf(0.975,9,9) > valore.critico [1] 4.025994 > 2*(1-pf(F.ratio,9,9)) [1] 0.001624199 Costruiamo allora il test F considerando il rapporto tra le due varianze, seguendo l’ipotesi (C>B) e calcoliamo il valore critico considerando α=0.05 e gradi di libertà pari a N-1=10-1=9. Siccome il valore del test F (10.66667) è superiore rispetto al valore critico (4.025994) , rifiutiamo l’ipotesi di uguaglianza tra le varianze e accettiamo che le varianze sono statisticamente diverse. Per maggiore precisione calcoliamo il p-value associato al test F (0.001624199). Quindi, la probabilità che le varianze siano uguali è minore di 0.001624199. N.B. Le medie di gardenC e di gardenB sono uguali, questo è opportuno. Test F: abbreviato > var.test(gardenB,gardenC) F test to compare two variances data: gardenB and gardenC F = 0.0938, num df = 9, denom df = 9, p-value = 0.001624 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0.02328617 0.37743695 sample estimates: ratio of variances 0.09375 Confronto fra distribuzioni: Kolmogorov Smirnov Test Il test di kolmogorov Smirnov lavora sulla funzione di ripartizione. > table(location) location A B 50 70 > A<-size[location=="A"] > B<-size[location=="B"] > > ks.test(A,B) Two-sample Kolmogorov-Smirnov test data: A and B D = 0.2629, p-value = 0.02911 alternative hypothesis: two-sided Le due distribuzioni sono statisticamente differenti. MA SONO DIVERSE RISPETTO ALLA MEDIA O ALLA VARIANZA? Vedi esercizio pagina successiva Esercizio Welch Two Sample t-test data: A and B t = -1.6073, df = 117.996, p-value = 0.1107 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -2.494476 0.259348 sample estimates: mean of x mean of y 24.11748 25.23504 Il test t ci dice che le medie sono statisticamente uguali. > var.test(A,B) F test to compare two variances data: A and B F = 0.5014, num df = 49, denom df = 69, p-value = 0.01192 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0.3006728 0.8559914 sample estimates: ratio of variances 0.5014108 Il test F ci dice che le varianze sono statisticamente diverse. Test di indipendenza (variabili qualitative) Il test del chi-quadro considera le frequenze osservate (O) e le frequenze attese (E). Le frequenze attese vengono determinate sulla base della situazione di indipendenza tra le variabili. Per capire se le variabili sono statisticamente indipendenti, si confronta il valore della statistica con il valore critico. Il numero di gradi di libertà viene calcolato: (J-1) x (H-1) > count<-matrix(c(38,14,11,51),nrow=2) > count [,1] [,2] [1,] 38 11 Tabella di contingenza [2,] 14 51 > chisq.test(count) Pearson's Chi-squared test with Yates' continuity correction data: count X-squared = 33.112, df = 1, p-value = 8.7e-09 > chisq.test(count,correct=F) Pearson's Chi-squared test data: count X-squared = 35.3338, df = 1, p-value = 2.778e-09 Correlazione (variabili quantitative) > var(x) [1] 199.9837 > var(y) [1] 977.0153 > var(x,y) [1] 414.9603 > > var(x,y)/sqrt(var(x)*var(y)) [1] 0.9387684 Equivalentemente: > cor(x,y) [1] 0.9387684 Matrice di correlazione > pollute<-read.table(file.choose(),header=TRUE) > attach(pollute) > names(pollute) [1] "Pollution" "Temp" "Industry" "Population" "Wind" "Rain" "Wet.days" > cor(pollute) Pollution Temp Industry Population Wind Rain Wet.days Pollution 1.00000000 -0.43360020 0.64516550 0.49377958 0.09509921 0.05428389 0.36956363 Temp -0.43360020 1.00000000 -0.18788200 -0.06267813 -0.35112340 0.38628047 -0.43024212 Industry 0.64516550 -0.18788200 1.00000000 0.95545769 0.23650590 -0.03121727 0.13073780 Population 0.49377958 -0.06267813 0.95545769 1.00000000 0.21177156 -0.02606884 0.04208319 Wind 0.09509921 -0.35112340 0.23650590 0.21177156 1.00000000 -0.01246601 0.16694974 Rain 0.05428389 0.38628047 -0.03121727 -0.02606884 -0.01246601 1.00000000 0.49605834 Wet.days 0.36956363 -0.43024212 0.13073780 0.04208319 0.16694974 0.49605834 1.00000000 > > cor(Pollution,Wet.days) [1] 0.3695636 Test di correlazione > cor(Summer, Winter) [1] 0.8820102 > cor.test(Summer, Winter) Pearson's product-moment correlation data: Summer and Winter t = 4.9521, df = 7, p-value = 0.001652 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: 0.5259984 0.9750087 sample estimates: cor 0.8820102 La correlazione tra le due variabili è altamente significativa, infatti, il pvalue è pari a 0.001652. Regressione lineare • La regressione lineare è un metodo utilizzato per problemi previsivi caratterizzati da una variabile target (dipendente) quantitativa. • Il modello di regressione semplice spiega la variabile dipendente (Y) in funzione di una sola variabile indipendente (X) . • Il modello di regressione multipla spiega la Y in funzione di un insieme di variabili indipendenti (esplicative). Regressione lineare semplice • Y è la viariabile dipendente (o risposta) • X variabile indipendente (esplicativa) • Il modello statistico più semplice consiste nello spiegare Y in funzione di X attraverso la considerazione di una relazione lineare tra le variabili statistiche X e Y esprimibile per ogni coppia di osservazioni (xi , yi) dalla seguente funzione di regressione: y i = a + bx i + εi (i=1,2,…,n) Ipotesi del modello lineare • Omoschedasticità • Errori con distribuzione normale • Relazione lineare tra Y e X • Addittività y i = a + bx i + εi “a” è l’intercetta della funzione di regressione “b” è il coefficiente di regressione εi è il termine di errore € yi Y ei εi = y i − yˆ i € xi Stima di “a” e “b” Cov(XY ) b= = V (X) M(XY ) − M(Y )M(X) = V (X) a = M(X) − bM(Y ) € “a” e “b” sono ottenuti attraverso il metodo di stima di massimaverosimiglianza. € Rispettano criteri di efficienza (Teorema di Gauss-Markov). Bontà del modello SST = SSR + SSE E’ fondamentale per valutare la bontà del modello la scomposizione della varianza e un indice opportuno, R2. L’indice assume valori tra 0 (retta costante) e 1 (perfetto adattamento della retta ai dati. Regressione lineare multipla • La regressione lineare multipla è definita dalla seguente relazione, per (i=1,2,…,n): y i = a + b1 x i1 + b2 x i2 + ....+ bk x ik + εi € Regressione lineare semplice Call: lm(formula = growth ~ tannin) Coefficients: (Intercept) tannin 11.756 -1.217 Calcoliamo seguendo le formule “a” e “b” > SSX=sum(tannin^2)-sum(tannin)^2/length(tannin) > SSX [1] 60 > SSY=sum(growth^2)-sum(growth)^2/length(growth) > SSY [1] 108.8889 > SSXY=sum(tannin*growth)-sum(tannin)*sum(growth)/ length(tannin) > SSXY [1] -73 a=11.756, b=-1.217 fitted<-predict(lm(growth~tannin)) > fitted 1 2 3 4 5 6 7 8 9 11.755556 10.538889 9.322222 8.105556 6.888889 5.672222 4.455556 3.238889 2.022222 Regressione lineare semplice I coefficienti “a” e “b” sono statisticamente significativi? > model<-lm(growth~tannin) > > summary(model) Call: lm(formula = growth ~ tannin) Residuals: Min 1Q Median 3Q Max -2.4556 -0.8889 -0.2389 0.9778 2.8944 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 11.7556 1.0408 11.295 9.54e-06 *** tannin -1.2167 0.2186 -5.565 0.000846 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.693 on 7 degrees of freedom Multiple R-squared: 0.8157, Adjusted R-squared: 0.7893 F-statistic: 30.97 on 1 and 7 DF, p-value: 0.000846 Analisi della varianza del modello > summary.aov(model) Df Sum Sq Mean Sq F value Pr(>F) tannin 1 88.817 88.817 30.974 0.000846 *** Residuals 7 20.072 2.867 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > Analisi dei residui (1) Analisi dei residui (2) Regressione lineare multipla: scatter plot Dati: ozone.data pairs(ozone.pollution) Regressione lineare multipla: smoothed scatter plot Dati: ozone.data pairs(ozone.pollution,panel= panel.smooth) Regressione (risultati) lineare Call: lm(formula = ozone ~ rad + temp + wind) Residuals: Min 1Q Median 3Q Max -40.485 -14.210 -3.556 10.124 95.600 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -64.23208 23.04204 -2.788 0.00628 ** rad 0.05980 0.02318 2.580 0.01124 * temp 1.65121 0.25341 6.516 2.43e-09 *** wind -3.33760 0.65384 -5.105 1.45e-06 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 21.17 on 107 degrees of freedom Multiple R-squared: 0.6062, Adjusted R-squared: 0.5952 F-statistic: 54.91 on 3 and 107 DF, p-value: < 2.2e-16 multipla: Analisi dei residui (1) Analisi dei residui (2) Modelli lineari generalizzati (GLM) • Sono una classe di modelli predittivi parametrici basati su particolari distribuzioni di probabilità appartenenti alla famiglia esponenziale. • Un modello lineare generalizzato mette in relazione una funzione del valore atteso della variabile risposta, assunta aleatoria, con le variabili esplicative, attraverso un’equazione avente forma lineare. • E' specificato da tre componenti: una componente aleatoria che identifica la variabile risposta Y e assume una distribuzione di probabilità per essa; una componente sistematica che specifica quali sono le variabili esplicative usate come predittori nel modello; infine una funzione legame che descrive la relazione funzionale tra la componente sistematica ed il valore atteso della componente aleatoria. Componenti GLM • Per un campione di ampiezza n, la componente aleatoria di un modello lineare generalizzato è costituita da un insieme di variabili casuali Y1,…,Yn, assunte indipendenti, ciascuna con una distribuzione estratta da una famiglia esponenziale. • La componente sistematica di un modello lineare generalizzato specifica quali sono e quale è il ruolo delle variabili esplicative nel modello. Modelli GLM • Regressione lineare multipla (done!) • Regressione per dati di conteggio • Regressione per dati su proporzioni (special case: Regressione Logistica) Modelli GLM per dati di conteggio La distribuzione di Poisson è solitamente utilizzata per modellare la probabilità di osservare numeri interi, corrispondenti a conteggi, in un periodo di tempo prefissato (ad esempio, il numero di clienti che entrano in un supermercato in un'ora; oppure il numero di telefonate ricevute da un call center in una giornata). La distribuzione di Poisson è una distribuzione discreta (associa una probabilità non nulla a tutti i numeri interi positivi, oltre allo zero), ed è parametrizzata da un parametro che rappresenta il valore atteso (media) dei conteggi. La distribuzione di Poisson appartiene alla famiglia esponenziale. Regressione per dati di conteggio • La regressione per dati di conteggio si utilizza per modellare il numero di eventi che succedono in un tempo stabilito. • I modelli di regressione utili per dati di conteggio sono GLM con link=poisson • I termini di errore sono distribuiti secondo una poisson • Il link è il logaritmo Esempio di regressione con dati di conteggio • Variabile target: Numero di persone con tumore in un anno in una determinata clinica • Variabile esplicativa: distanza in Km dalla centrale nucleare • Esiste una relazione tra la distanza e l’incidenza della malattia? Analisi esplorativa plot(Distance, Cancer) Sembrerebbe sussistere una relazione tra il numero di tumori in un anno in una clinica e la distanza in Km dalla centrale. Ma la relazione è significativa? Regressione per dati di conteggio > model1<-glm(Cancers~Distance,poisson) > summary(model1) Call: glm(formula = Cancers ~ Distance, family = poisson) Deviance Residuals: Min 1Q Median 3Q Max -1.5504 -1.3491 -1.1553 0.3877 3.1304 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 0.186865 0.188728 0.990 0.3221 Distance -0.006138 0.003667 -1.674 0.0941 . --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Il trend non significativo. sembra essere Inoltre, siccome Residual deviance > Residual Degree of Freedom si evidenza il fenomeno di OVERDISPERSION (varianza non spiegata della variabile risposta). (Dispersion parameter for poisson family taken to be 1) Null deviance: 149.48 on 93 degrees of freedom Residual deviance: 146.64 on 92 degrees of freedom Number of Fisher Scoring iterations: 5 Si “compensa” l’overdispersion ristimando il modello usando per gli errori una distribuzione quasipoisson. Regressione per dati di conteggio (overdispersion) > model2<-glm(Cancers~Distance,quasipoisson) > summary(model2) Call: glm(formula = Cancers ~ Distance, family = quasipoisson) Deviance Residuals: Min 1Q Median 3Q Max -1.5504 -1.3491 -1.1553 0.3877 3.1304 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.186865 0.235364 0.794 0.429 Distance -0.006138 0.004573 -1.342 0.183 (Dispersion parameter for quasipoisson family taken to be 1.555271) Null deviance: 149.48 on 93 degrees of freedom Residual deviance: 146.64 on 92 degrees of freedom Number of Fisher Scoring iterations: 5 Il p-value relativo alla variabile “distance” è migliorato, ma resta sempre non sigificativo. Pertanto, non esiste una relazione significativa tra la veriabile target e la variabile esplicativa. Dati di conteggio: Poisson • Si vuole studiare il numero di fallimenti in 80 città in un determinato orizzonte temporale. • Siamo difronte ad un processo di Poisson. • La distribuzione di Poisson è una distribuzione di probabilità discreta e nel caso in esame, la probabilità di osservare un numero di fallimenti pari ad “x” è: λx e− λ λ P(X = x) = = P(X = x −1) x! x! Nella distribuzione di Poisson, la media è uguale alla varianza, pari a λ. € Dati di conteggio: esempio (1) > case.book<read.table(file.choose(),header=T) > attach(case.book) > names(case.book) [1] "cases" 1. Per prima cosa dobbiamo contare il numero di città con zero fallimenti, un fallimento, 2 fallimenti ecc. (comando “table”). > frequenze<-table(cases) > frequenze cases 0 1 2 3 4 5 6 7 8 9 10 34 14 10 7 4 5 2 1 1 1 1 Ci sono 34 paesi che non hanno fallimenti, 14 paesi con 1 fallimento e un paese con 10 fallimenti. > mean(cases) [1] 1.775 Dati di conteggio: esempio (2) Usando la distribuzione Poisson con media pari a 1.775 , valutiamo la distribuzione dei valori osservati (sx) e dei valori previsti (dx). Ci chiediamo se i dati che stiamo analizzando sono veramente distribuiti secondo una Poisson. Basta calcolare rapporto: il Varianza/media =1 Perché? Ditelo voi!!! seguente Dati di conteggio: esempio (2) > frequencies<-table(cases) > par(mfrow=c(1,2)) > > barplot(frequencies,ylab="Frequency",xlab="Cases",col="red") > barplot(dpois(0:10,1.775)*80,names=as.character(0:10),ylab="Frequency", + xlab="Cases",col="red") > > var(cases)/mean(cases) [1] 2.99483 Siccome il rapporto tra la varianza e la media è diverso da 1, la distribuzione idonea a modellare i dati non è di tipo Poisson. Una regola empirica dice che se il rapporto tra la varianza e la media è maggiore di 1, allora una distribuzione alternativa è la Binomiale Negativa. Dati di conteggio: Binomiale Negativa • La distribuzione binomiale negativa è una distribuzione discreta utile a descrivere dati in cui la varianza è maggiore della media. • La binomiale negativa ha due parametri, la media e un parametro di “clumping”. • La distribuzione di probabilità è: x ⎛ ⎞ ⎛ µ ⎞ Γ(k + x) µ P(X = x) = ⎜1+ ⎟ ⎜ ⎟ ⎝ k ⎠ x!Γ(k) ⎝ µ + k ⎠ −k dove µ è la media, k il parametro di “clumping” (k>0) e Γ la funzione Gamma. “k” si stima sulla base della media e varianza del campione di dati a disposizione. € 2 k≈ µ s2 − µ Dati di conteggio: Binomiale Negativa > negbin<-function(x,u,k) (1+u/k)^(-k)*(u/(u+k))^x* + gamma(k+x)/(factorial(x)*gamma(k)) > > xf<-numeric(11) > for (i in 0:10) xf[i+1]<-negbin(i,0.8,0.2) > barplot(xf) > exp<-dnbinom(0:10,1,mu=1.775)*80 > > both<-numeric(22) > both[1:22 %% 2 != 0]<-frequencies > both[1:22 %% 2 == 0]<-exp > labels<-character(22) > labels[1:22 %% 2 == 0]<-as.character(0:10) > barplot(both,col=rep(c("white","grey"),11),names=labels, + ylab="Frequency",xlab="Cases") > legend(16,30,c("Observed","Expected"), fill=c("white","grey")) I dati possono essere modellati usando la binomiale negativa se la distribuzione osservata è uguale a quella attesa. Usiamo il test di adattamento del chi-quadro. Dati di conteggio: Binomiale Negativa > cs<-factor(0:10) > levels(cs)[6:11]<-"5+" > levels(cs) [1] "0" "1" "2" "3" "4" "5+" > > ef<-as.vector(tapply(exp,cs,sum)) > of<as.vector(tapply(frequencies,cs,sum)) > > sum((of-ef)^2/ef) [1] 3.594145 > 1-pchisq(3.594145,3) [1] 0.3087555 Concludiamo che la binomiale negativa è opportuna a modellare i dati di questo esempio. Infatti, la distribuzione osservata non è statisticamente diversa da quella attesa. Dati per proporzioni • La distribuzione statistica utile per modellare dati per proporzioni è la binomiale. ⎛ ⎞ x n! n−x P(X = x) = ⎜ ⎟ϑ (1− ϑ ) , x = 0,1,...,n ⎝ x!(n − x)!⎠ La media è pari a nϑ e la varianza è nϑ(1-ϑ). Notiamo che la varianza in una binomiale è sempre minore della media. € Il modello statistico utile per modellare dati per proporzioni, caratterizzati da una variabile target Y binaria è la regressione logistica. La distribuzione binomiale • La distribuzione binomiale è utilizzata per modellare la probabilità di osservare un numero qualunque di "successi" (o esiti favorevoli) in un insieme di n prove dicotomiche (binarie) ripetute, casuali ed indipendenti (ad esempio, quanti clienti, fra gli n di un certo supermercato, acquistano un certo prodotto, oppure quanti prestiti, fra gli n assegnati da un certo istituto di credito, vanno a buon fine). • La distribuzione binomiale è una distribuzione discreta (associa una probabilità non nulla a tutti i numeri interi positivi, oltre allo zero, fino ad n, che rappresenta il numero di prove effettuate) ed è parametrizzata, oltre che dal numero di prove n, solitamente noto, dal parametro che rappresenta la probabilità di ottenere un successo in ciascuna prova. Regressione Logistica • Il modello di regressione logistica è utilizzato per prevedere i valori di una variabile dipendente dicotomica, sulla base delle variabili esplicative disponibili, che possono essere su qualunque scala (ad esempio, quantitative o qualitative). • Nell’analisi della regressione logistica la previsione di Y è un valore compreso fra 0 e 1. • Applicazioni della regressione logistica sono riscontrabili in problemi di credit scoring e in qualunque problema previsivo caratterizzato da una variabile target binaria. • In termini generali, viene seguito il metodo della massima verosimiglianza, massimizzando la verosimiglianza, ovvero derivando la log-verosimiglianza rispetto a ciascun coefficiente nel vettore e ponendo i risultati uguali a zero. Diversamente da quanto accade nel modello lineare normale, il risultante sistema di equazioni è non lineare nei parametri e non possiede una soluzione in forma esplicita. Pertanto, per ottenere le stime di massima verosimiglianza di occorre utilizzare metodi numerici iterativi, come ad esempio il metodo di Newton-Raphson o lo scoring di Fisher ( si veda, ad esempio, Agresti, 1990). Regressione Logistica (1) • E’ un modello di regressione appartenente alla classe dei modelli GLM. Il legame è il “logit”. I termini di errore sono distribuiti secondo una distribuzione Binomiale. Regressione Logistica (2) a + b1 x i 1 + b 2 x i 2 +....+ b k x ik e πi = a + b1 x i 1 + b 2 x i 2 +....+ b k x ik 1+ e Il modello di regressione logistica restituisce per ogni unità statistica, la probabilità che questa ha di sperimentare l’ evento di interesse. Viene utilizzata per problemi caratterizzati da variabile target binaria. Esempi applicativi: studio del churn, rischio credito, propensione all’uso di servizi. Regressione Logistica (3) Se β>0, π(x) aumenta all’aumentare di x. Se β<0, π(x) aumenta al diminuire di x. Dati per proporzioni: esempio (1) Una trasformazione logaritmica sui dati potrebbe migliorare la stima del modello. attach(numbers) par(mfrow=c(1,2)) p<-males/(males+females) plot(density,p,ylab="Proportion male") plot(log(density),p,ylab="Proportion male") Dati per proporzioni: esempio (2) Call: glm(formula = y ~ density, family = binomial) Deviance Residuals: Min 1Q Median 3Q Max -3.4619 -1.2760 -0.9911 0.5742 1.8795 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 0.0807368 0.1550376 0.521 0.603 density 0.0035101 0.0005116 6.862 6.81e-12 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 71.159 on 7 degrees of freedom Residual deviance: 22.091 on 6 degrees of freedom AIC: 54.618 Number of Fisher Scoring iterations: 4 > y<-cbind(males,females) > model<-glm(y~density,binomial) > summary(model) Dati per proporzioni: esempio (3) Call: glm(formula = y ~ log(density), family = binomial) Deviance Residuals: Min 1Q Median 3Q Max -1.9697 -0.3411 0.1499 0.4019 1.0372 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -2.65927 0.48758 -5.454 4.92e-08 *** log(density) 0.69410 0.09056 7.665 1.80e-14 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 71.1593 on 7 degrees of freedom Residual deviance: 5.6739 on 6 degrees of freedom AIC: 38.201 Number of Fisher Scoring iterations: 4 Trasformando la variabile attraverso la funzione logaritmo notiamo che I risultati cambiano!! In particolare si riduce la variabilità dei dati e il modello è maggiormente significativo. Potrei usare la stessa trasformazione in presenza di dati negativi? Regressione Gamma • E’ un modello di regressione appartenente alla classe dei modelli GLM. • Gli errori sono distribuiti secondo una Gamma • Il link è il reciproco Regressione Gamma: Esempio (1) • La variabile target è l’età di morte di topi di laboratorio (in mesi) • La variabile esplicativa è il livello di trattamento subito dal topo (high, low). Regressione Gamma: Esempio (2) > tapply(death,treatment,mean) control high low 3.46 6.88 4.70 > > tapply(death,treatment,var) control high low 0.4167347 2.4751020 0.8265306 Notiamo che la varianza non è costante. Questa è la motivazione per cui modelli che assumono varianza costante (OMOSCHEDASTICITA’) e normalità dei termini di errore, come il modello lineare, non sono opportuni. Regressione Gamma: Esempio (3) > model<-glm(death~treatment,Gamma) > summary(model) Call: glm(formula = death ~ treatment, family = Gamma) Deviance Residuals: Min 1Q Median 3Q Max -0.4177 -0.1393 -0.1338 0.1486 0.4266 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.289017 0.008327 34.708 < 2e-16 *** treatmenthigh -0.143669 0.009321 -15.414 < 2e-16 *** treatmentlow -0.076251 0.010340 -7.374 1.11e-11 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for Gamma family taken to be 0.04150576) Null deviance: 17.7190 on 149 degrees of freedom Residual deviance: 5.8337 on 147 degrees of freedom Number of Fisher Scoring iterations: 4 Vediamo cosa succede utilizzando un modello di regressione lineare. Le ipotesi di base del modello di regressione lineare sono violate. Regressione lineare: non appropriata!! (1) Regressione lineare: non appropriata!! (2) Analisi della sopravvivenza • L’analisi della sopravvivenza comprende una serie di tecniche descrittive e predittive utili per spiegare una funzione di rischio detta hazard. • Tipiche applicazioni sono in ambito medico dove si vuole studiare la proababilità di sopravvivenza di una corte di soggetti a determinati istanti di tempo. • I dati che vengono usati per la stima della probabilità di sopravvivenza sono: Indicatore di censura/evento, variabile di durata (tempo) e variabili esplicative. Analisi della sopravvivenza (1) > sheep<-read.table(file.choose(),header=T) > attach(sheep) The following object(s) are masked from mortality : death > names(sheep) [1] "death" "status" "weight" "group" > La libreria di R che serve per l’analisi della sopravvivenza è la “survival”. > library(survival) Analisi della sopravvivenza (3) > names(sheep) [1] "death" "status" "weight" "group" > plot(survfit(Surv(death,statu s)~group),lty=c(1,3,5), + xlab="Age at death (months)") > Il modello predittivo è il modello di Cox, disponibile in R con la funzione “coxph”. Alberi di regressione • Sono modelli supervisionati non parametrici utili per prevedere una variabile Y di tipo quantitativo in funzione di “k” variabili esplicative. • In un problema previsivo caratterizzato da Y quantitativa, al fine di selezionare il migliore modello è utile confrontare ad esempio metodi parametrici basati sulla regressione lineare con metodi non parametrici basati su alberi di classificazione. Alberi di regressione (2) • Gli alberi possono essere definiti attraverso una procedura ricorsiva, con la quale un insieme di n unità statistiche vengono progressivamente divise in gruppi, secondo una regola divisiva in cui a ogni passo viene massimizzata la omogeneità o la purezza della variabile risposta in ogni gruppo ottenuto. • Per ogni osservazione data della variabile risposta, yi, l’albero produce un valore stimato che è uguale alla media della variabile target valutata nel gruppo che contiene l’osservazione “i”. Alberi di regressione: esempio 1 Alberi di regressione: esempio 1 > summary(model) Regression tree: tree(formula = ozone ~ ., data = dati) Number of terminal nodes: 8 Residual mean deviance: 347.4 = 35790 / 103 Distribution of residuals: Min. 1st Qu. Median Mean 3rd Qu. Max. -4.500e+01 -8.842e+00 -2.969e+00 1.914e-16 7.516e+00 1.070e+02 Alberi di regressione: esempio 2 Alberi di regressione: esempio 2 Alberi di regressione: esempio 2 > summary(model) Regression tree: tree(formula = Pollution ~ ., data = pollute) Variables actually used in tree construction: [1] "Industry" "Population" "Wet.days" "Temp" "Wind" Number of terminal nodes: 6 Residual mean deviance: 253.6 = 8877 / 35 Distribution of residuals: Min. 1st Qu. Median Mean 3rd Qu. Max. -3.200e+01 -7.000e+00 -2.000e+00 -3.463e-16 5.000e+00 5.057e+01 Alberi di classificazione • Sono modelli supervisionati non parametrici utili per prevedere una variabile Y di tipo qualitativo (binario) in funzione di “k” variabili esplicative. • In un problema previsivo caratterizzato da Y binaria, al fine di selezionare il migliore modello è utile confrontare ad esempio metodi parametrici basati sulla regressione logistica con metodi non parametrici basati su alberi di classificazione. Misure di purezza • Misclassification • Gini • Entropia Alberi di classificazione: R > ir.tr <- tree(Species ~., iris) > ir.tr node), split, n, deviance, yval, (yprob) * denotes terminal node 1) root 150 329.600 setosa ( 0.33333 0.33333 0.33333 ) 2) Petal.Length < 2.45 50 0.000 setosa ( 1.00000 0.00000 0.00000 ) * 3) Petal.Length > 2.45 100 138.600 versicolor ( 0.00000 0.50000 0.50000 ) 6) Petal.Width < 1.75 54 33.320 versicolor ( 0.00000 0.90741 0.09259 ) 12) Petal.Length < 4.95 48 9.721 versicolor ( 0.00000 0.97917 0.02083 ) 24) Sepal.Length < 5.15 5 5.004 versicolor ( 0.00000 0.80000 0.20000 ) * 25) Sepal.Length > 5.15 43 0.000 versicolor ( 0.00000 1.00000 0.00000 ) * 13) Petal.Length > 4.95 6 7.638 virginica ( 0.00000 0.33333 0.66667 ) * 7) Petal.Width > 1.75 46 9.635 virginica ( 0.00000 0.02174 0.97826 ) 14) Petal.Length < 4.95 6 5.407 virginica ( 0.00000 0.16667 0.83333 ) * 15) Petal.Length > 4.95 40 0.000 virginica ( 0.00000 0.00000 1.00000 ) * > summary(ir.tr) Classification tree: tree(formula = Species ~ ., data = iris) Variables actually used in tree construction: [1] "Petal.Length" "Petal.Width" "Sepal.Length" Number of terminal nodes: 6 Residual mean deviance: 0.1253 = 18.05 / 144 Misclassification error rate: 0.02667 = 4 / 150 Alberi di classificazione: R plot(prune.tree(ir.tr)) Alberi di classificazione: R plot(ir.tr) text(ir.tr) Misure di performance • Matrice di confusione • Curva ROC Matrice di confusione O/P 0 1 0 a c a+c 1 b d b+d a+b c+d Le frequenze “a” e “d” sono le corrette classificazioni. (a+d)/N = tasso corretta classificazione Le frequenze “c” e “b” sono le errate classificazioni. (c+b)/N=tasso errata classificazione Interessanti misure sono: sensitività, specificità, FP, FN (si veda Giudici, 2003 pag. 240 e seguenti) Matrice di confusione: indici • SENSITIVITA’: a/a+b • SPECIFICITA’: d/c+d • FALSI POSITIVI: c/c+d=1-specificità • FALSI NEGATIVI: b/a+b=1-sensitività Matrice di confusione: R > data(iris) > ir.tr <- tree(Species ~., iris) > confusion(predict(irisfit, iris), iris$Species) true object setosa versicolor virginica setosa 50 0 0 versicolor 0 48 1 virginica 0 2 49 attr(,"error") [1] 0.02 Pacchetto richiesto: mda, class library(mda) Curva ROC • La curva Roc è uno strumento di valutazione del modello che si basa sul confronto tra la proporzione di non eventi previsti come eventi (ascisse) e la proporzione di eventi previsti come tali (ordinate) • La curva ROC può anche essere usata per selezionare i punti di cut-off e trade-off sensitività e specificità. Curva ROC: R > library(ROCR) > data(ROCR.simple) > pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels) > perf <- performance(pred,"tpr","fpr") > plot(perf) Precision e Recall: R perf1 <- performance(pred, "prec", "rec") > plot(perf1) Curva Roc: R > perf1 <- performance(pred, "sens", "spec") > plot(perf1) Confronto tra modelli: R data(ROCR.hiv) attach(ROCR.hiv) pred.svm <- prediction(hiv.svm$predictions, hiv.svm$labels) perf.svm <- performance(pred.svm, 'tpr', 'fpr') pred.nn <- prediction(hiv.nn$predictions, hiv.svm$labels) perf.nn <- performance(pred.nn, 'tpr', 'fpr') plot(perf.svm, lty=3, col="red",main="Reg Log and Class Tree for prediction of HIV-1 coreceptor usage") plot(perf.nn, lty=3, col="blue",add=TRUE) plot(perf.svm, avg="vertical", lwd=3, col="red", spread.estimate="stderror",plotCI.lwd=2,add=T RUE) plot(perf.nn, avg="vertical", lwd=3, col="blue", spread.estimate="stderror",plotCI.lwd=2,add=T RUE) legend(0.6,0.6,c('REGLOG','CART'),col=c('red',' blue'),lwd=3)
© Copyright 2024 Paperzz