Esercizio 1 Il file elettr.txt contiene dei dati sui consumi in miliardi di kilowatt/ora (eleccons) e sul prodotto interno lordo in miliardi di dollari (gdp) su 30 paesi in un determinato anno. Il prodotto interno lordo è valutato in termini reali, per tener conto delle differenze nei livelli dei prezzi dei diversi paesi (nel file è riportata anche la popolazione dei singoli paesi, variabile che però non utilizzeremo). Vogliamo capire se esista una relazione lineare tra consumi elettrici e prodotto interno lordo. In particolare vogliamo capire se i consumi crescano al crescere del reddito. 1. Dire quale variabile debba essere usata come regressore e quale sia la variabile risposta. 2. Disegnare il diagramma di dispersione delle due variabili e sovrapporvi la retta stimata di regressione. 3. Individuare i due paesi con il più alto consumo elettrico, rimuoverli dall insieme dei dati, stimare il modello di regressione lineare semplice sul campione ridotto e ridisegnare il grafico richiesto nel punto precedente. Cambia qualcosa? 4. Dopo aver rimosso i due paesi con i consumi più alti, si può affermare che esista una relazione positiva tra le due variabili? 5. Sulla base dei risultati dei due punti precedenti, quale paese ha un livello di consumi particolarmente alto e quale un livello particolarmente basso rispetto all andamento complessivo della funzione di regressione? Soluzione. 1. Evidentemente, poiché il testo dell esercizio afferma esplicitamente che vogliamo capire se i consumi crescano al crescere del reddito, la variabile risposta deve essere il livello dei consumi di elettricità (eleccons) e la variabile esplicativa deve essere il prodotto interno lordo (gdp). 2. Cancelliamo tutte le variabili in memoria, chiudiamo tutte le finestre grafiche eventualmente aperte, importiamo i dati nel dataframe elettr di cui rendiamo direttamente accessibili le variabili con i seguenti comandi: > rm(list=ls()) > graphics.off() > elettr=read.table("elettr.txt",header=t) > attach(elettr) Stimiamo il modello di regressione con il comando > elettr00.lm=lm(eleccons~gdp) ELECCONS i = β 0 + β 1 GDP i + ε i, i = 1,..., 30 Visualizziamo una sintesi dei risultati del processo di stima con il comando > summary(elettr00.lm) Call: lm(formula = eleccons ~ gdp) Residuals: Min 1Q Median 3Q Max -465.63-49.50 11.10 35.82 430.16 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) -50.7847 30.5422-1.663 0.108 gdp 0.2815 0.0101 27.874 <2e-16 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 142.1 on 28 degrees of freedom Multiple R-Squared: 0.9652, Adjusted R-squared: 0.964 F-statistic: 776.9 on 1 and 28 DF, p-value: < 2.2e-16
resid(elettr00.lm) 400 200 0 200 400 0 5 10 15 20 25 30 Index Figura 1: Grafico dei residui del modello ELECCONS i = β 0 + β 1 GDP i + ε i Osserviamo che il valore del coefficiente di detreminazione lineare è elevato, R 2 = 0.9652, il che significa che il modello stimato riesce a spiegare il 96.52% della variabilità della variabile risposta. Il valore della stima dell intercetta rappresenta la stima del valore atteso dei consumi di elettricità in corrispondenza di un prodotto interno lordo nullo. Sul campione esaminato abbiamo che b 0 = 50.7847. Ovviamente, questa stima non appare affatto realistica. Se però consideriamo il sistema di ipotesi H 0 : β 0 = 0 H 1 : β 0, (1) B 0 osserviamo che il valore assunto dalla statistica test S B 0 sul campione osservato, s B 0 = 1.663 e che il livello di significatività osservato in corrispondenza di tale vaore è α oss = 0.108. Per qualsiasi livello di significatività minore di 0.108 (i livelli che si usano più comunemente sono 0.01 e 0.05) siamo indotti a ritenere che H 0 sia vera, e quindi che in realtà β 0 = 0. Prima di rimuovere l intercetta dal modello, però, vogliamo sincerarci che le assunzioni del modello di regressione lineare semplice siano rispettate. Disegnamo a questo scopo il grafico dei residui: > plot(resid(elettr00.lm)) che è rappresentato nella Figura 1 I residui oscillano in modo casuale intorno allo 0, quindi sembra che l assunzioni sull incorrelazione tra le variabili casuali campionarie sia rispettata. Cerchiamo di capire se il modello sia gaussiano e quindi se la distribuzione di probabilità della statistica test che abbiamo utilizzato sia effettivamente una t n 2 (su un campione di dimensione maggiore non avremmo bisogno di procedere in tale senso). Consideriamo quindi il grafico quantile-quantile dei residui standardizzati, con riferimento alla distribuzione normale (Figura 2: > qqnorm(resid(elettr00.lm)/142.1) > qqline(resid(elettr00.lm)/142.1) Pur non essendo il campione di numerosità elevata, e quindi essendo necessaria una notevole cautela nella lettura del grafico, sembra che il comportamentod dei residui standardizzati non sia dissimile da quello di una normale standardizzata, quindi possiamo ritenere che il modello sia effettivamente gaussiano. A questo punto procediamo alla stima di un nuovo modello, nel quale si pone β 0 = 0, ovvero: A tale scopo utilizziamo il comando: ELECCONS i = βgdp i + ε i, i = 1,..., 30. b 0
Normal Q Q Plot Sample Quantiles 3 2 1 0 1 2 3 2 1 0 1 2 Theoretical Quantiles Figura 2: Grafico quantile-quantile dei residui standardizzati > elettr01.lm=lm(eleccons~gdp-1) Vediamo ora una sintesi dei risultati: > summary(elettr01.lm) Call: lm(formula = eleccons ~ gdp - 1) Residuals: Min 1Q Median 3Q Max -483.84-75.32-36.64-13.92 392.97 Coefficients: Estimate Std. Error t value Pr(> t ) gdp 0.272658 0.008838 30.85 <2e-16 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 146.4 on 29 degrees of freedom Multiple R-Squared: 0.9704, Adjusted R-squared: 0.9694 F-statistic: 951.8 on 1 and 29 DF, p-value: < 2.2e-16 Il modello è molto simile al precedente, fatta eccezione per l assenza dell intercetta. Per disegnare il diagramma di dispersione delle due variabili (il regressore deve comparire in ascissa) diamo il seguente comando: > plot(gdp,eleccons) Per sovrapporvi il grafico della retta di regressione stimata, usiamo il comando: lines(sort(gdp),fitted(elettr01.lm)[order(gdp)]) Il risultato è rappresentato in Figura 3 3. Per individuare i due paesi con il più alto consumo elettrico, ordiniamo in senso crescente le osservazioni sui consumi:
eleccons 0 1000 2000 3000 0 2000 4000 6000 8000 10000 12000 gdp Figura 3: Diagramma di dispersione dei dati e retta di regressione stimata, con riferimento al modello: ELECCONS i = βgdp i + ε i > sort(gdp) [1] 46.27 59.93 76.20 85.46 132.10 251.80 299.90 303.10 [9] 321.20 337.90 385.20 451.30 527.40 545.80 551.60 551.60 [17] 899.00 983.30 1014.00 1066.00 1535.00 1580.00 1645.00 1816.00 [25] 1867.00 2446.00 3678.00 3867.00 8158.00 12370.00 Ovviamente, gli ultimi due valori nell output precedente sono i due consumi più alti tra quelli rilevati. Come possiamo risalire alle unità statistiche sulle quali quei valori sono stati rilevati? La funzione order() ci consente di stabilire quali siano le righe di gdp a cui corrispondono i valori ordinati ottenuti con il comando sort(gdp), quindi il comando > order(gdp) [1] 6 8 3 24 18 30 1 5 27 7 19 20 22 25 13 26 12 16 23 17 21 2 14 9 28 [26] 10 11 15 4 29 ci consente di stabilire che le unità statistiche su cui abbiamo misurato i consumi più alti, corrispondono alla ventinovesima e alla quarta riga di gdp, ovvero alla ventinovesima e alla quarta riga del dataframe elettr: > elettr[c(29, 4), ] country pop eleccons gdp 29 United States 295.7341 3656 12370 4 China 1306.3138 2170 8158 Si tratta degli Stati Uniti e della Cina. Prima di procedere, rendiamo nuovamente inaccessibili direttamente le variabili contenute in elettr con il comando > detach(elettr, 1) Questa operazione è opportuna al fine di evitare che le variabili in elettr si confondano con quelle del dataframe che ci apprestiamo a costruire (si osservi che non è sufficiente dare un istruzione del tipo > detach(elettr)). A questo punto dobbiamo escludere Stati Uniti e Cina dal campione, ovvero dobbiamo costruire un dataframe uguale a elettr con l esclusione della quarta e della ventinovesima riga. Costruiamo quindi il dataframe elettr1 con il comando
> elettr1 = elettr[-c(4, 29), ] e rendiamo direttamente accessibili le variabili contenute in elettr1 con il comando > attach(elettr1) Sul campione ridotto, ripetiamo l analisi svolta nel punto precedente. Stimiamo innanzitutto il modello mediante il comando > elettr10.lm = lm(eleccons ~ gdp) Visualizziamo quindi la sintesi dei dati: > summary(elettr10.lm) Call: lm(formula = eleccons ~ gdp) Residuals: Min 1Q Median 3Q Max -266.90-36.82-21.96 14.54 475.49 ELECCONS i = β 0 + β 1 GDP i + ε i, i = 1,..., 30 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 13.75699 31.23620 0.440 0.663 gdp 0.20994 0.02233 9.401 7.55e-10 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 118.4 on 26 degrees of freedom Multiple R-Squared: 0.7727, Adjusted R-squared: 0.7639 F-statistic: 88.38 on 1 and 26 DF, p-value: 7.554e-10 Si osservi che ora la stima dell intercetta è pari a circa 13.76. Ripetendo i passi percorsi nel punto precedente (omettiamo qui l analisi dei residui per ragioni di brevità, ma essa conduce a conclusioni del tutto simili a quelle che abbiamo già tratto nel punto precedente) ed impostando un sistema di ipotesi come quello (1), osserviamo che il livello di significatività osservato è pari a 0.663. Per qualsiasi livello di significatività inferiore a 0.663, possiamo quindi accettare l ipotesi nulla. Stimiamo quindi il modello con il comando > elettr11.lm = lm(eleccons ~ gdp - 1) e visualizziamo sinteticamente i risultati: > summary(elettr11.lm) Call: lm(formula = eleccons ~ gdp - 1) Residuals: Min 1Q Median 3Q Max -278.38-26.45-11.05 22.75 478.72 ELECCONS i = βgdp i + ε i, i = 1,..., 30 Coefficients: Estimate Std. Error t value Pr(> t ) gdp 0.21680 0.01576 13.76 1.02e-13 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
eleccons 0 200 400 600 800 0 1000 2000 3000 4000 gdp Figura 4: Diagramma di dispersione delle variabili e retta di regressione stimata sul campione ridotto basandosi sul modello ELCCONS i = βgdp i + ε i Residual standard error: 116.6 on 27 degrees of freedom Multiple R-Squared: 0.8752, Adjusted R-squared: 0.8705 F-statistic: 189.3 on 1 and 27 DF, p-value: 1.024e-13 Osserviamo ora che, in seguito all esclusione delle due unità statisticem il coefficiente di determinazione lineare è diminuito; anche la stima del coefficiente angolare della retta è mutata sensibilmente, passando da 0.272658 a 0.2168. Questa differenza, apparentemente piccola, è in realtà molto importante se pensiamo che le variabili in gioco sono misurate su scala molto grande (in miliardi). Rappresentiamo ora graficamente il diagramma di dispersione delle due variabili sul campione ridotto e vi sovrapponiamo la retta stimata di regressione (Figura 4) con i comandi: > plot(gdp,eleccons) > lines(sort(gdp),fitted(elettr11.lm)[order(gdp)]) I grafici delle Figure 3 e 4 non sono comparabili perché sono disegnati su scale diverse (i valori sulle ascisse e sulle ordinate sono molto diversi nei due grafici). Riportiamo tutto su un unico grafico in cui le ascisse sono comprese tra 0 e 4000 e le ordinate tra 0 e 1000. In questo grafico non compariranno le osservazioni riguardanti Stati Uniti e Cina perché i valori corrispondenti a questi paesi non sono compresi nei due intervalli appena definiti. Così facendo, però possiamo effettuare un confronto grafico più informativo delle differenze nei risultati inferenziali otenuti sui due campioni. I comandi che utilizziamo sono i seguenti: > plot(elettr$gdp,elettr$eleccons,xlim=c(0,4000),ylim=c(0,1000)) > lines(sort(elettr$gdp),fitted(elettr01.lm)[order(elettr$gdp)]) > lines(sort(gdp),fitted(elettr11.lm)[order(gdp)],col="red") Il grafico risultante è riportato nella Figura 5: la retta in nero è la retta di regressione stimata sul campione completo, quella in rosso è invece la retta di regressione stimata sul campione ridotto. Il forte divario tra i due risultati appare ora evidente. 4. Poiché abbiamo motivo di ritenere che il modello (stiamo considerando l ultimo modello stimato nel punto precedente) sia gaussiano e che tutte le assunzioni che stanno alla base del modello di regressione lineare semplice, possiamo impostare il seguente sistema di ipotesi, fissando un livello di significatività α = 0.01 (questo è un valore è fissato a titolo esemplificativo): H 0 : β 0 H 1 : β > 0
elettr$eleccons 0 200 400 600 800 1000 0 1000 2000 3000 4000 elettr$gdp Figura 5: Confronto tra i risultati ottenuti sul campione completo e sul campione ridotto Indicando con B lo stimatore di β, sappiamo che, se H 0 è vera, T = B S B t 29 (i gradi di libertà sono n 1 = 29 perché ora stimiamo solo un coefficiente di regressione, essendo β 0 posto uguale a 0). Il valore osservato della statistica test è t = b 0 s B = 0.2168 0.01576 = 13.75635. Questo valore deve essere confrontato con t n 1,1 α = t 29,0.99 che si determina con il seguente comando > qt(0.99, 29) [1] 2.462021 Essendo il valore della statistica test maggiore di questo quantile, rifiutiamo l ipotesi nulla al livello di significatività 0.01, ritenendo quindi che β > 0, ovvero che esista una relazione positiva tra le due variabili. 5. Per rispondere a questa domanda, consideriamo i residui ordinati in senso crescente: > sort(resid(elettr11.lm)) 10 11 27 13 19 1-278.377958-93.100159-58.659284-54.430435-53.360313-48.817305 16 4 9 28 23 17-37.205194-22.861055-19.884525-17.669388-15.584439-14.178833 18 7 24 3 5 6-11.970057-11.078621-11.027594-9.644902-5.707179 4.904423 22 12 25 2 8 21 11.368230 12.514986 20.714986 28.861345 39.597343 83.061464 26 15 14 20 83.464927 90.123886 107.947482 478.717193 Il più piccolo residuo negativo e il più alto residuo positivo si trovano rispettivamente sulla decima e sulla ventesima riga del vettore che si ottiene con il comando > resid(elettr11.lm) (si utilizzi la funzione order() per ottenere lo stesso risultato). Le unità statistiche sulle quali si sono misurati rispettivamente un livello di consumi particolarmente alto e un livello particolarmente basso rispetto all andamento complessivo della funzione di regressione si collocano rispettivamente sulla ventesima e sulla decima riga di elettr1. Quindi, con il comando > elettr1[c(20, 10), ]
country pop eleccons gdp 21 Russia 143.4203 811.5 1535 11 India 1080.2644 519.0 3678 giungiamo alla conclusione che i due paesi siano rispettivamente la Russia e l India.