martedì 7 luglio 2009

Regressione lineare

Si ricorre alla analisi della regressione quando dai dati campionari si vuole ricavare un modello statistico che predica i valori di una variabile (Y) detta dipendente a partire dai valori di un'altra variabile (X) detta indipendente.
La regressione lineare, che rappresenta la relazione più semplice e frequente tra due variabili quantitative, può essere positiva (all'aumento dei valori di una variabile corrisponde un aumento anche nell'altra) o negativa (all'aumento dell'una corrisponde una diminuzione dell'altra): tale relazione è indicata dal segno del coefficiente b.
Ricordo le formule per calcolare il coefficiente angolare e l'intercetta:



Per costruire la retta che descrive la distribuzione dei punti, ci si può riferire a diversi principi. Il più comune è il metodo dei minimi quadrati (least squares, o Model 1), ed è il metodo utilizzato dal software statistico R.

Supponiamo di voler ricavare una relazione lineare tra il peso (kg) e l'altezza (cm) di 10 individui.
Altezza: 175, 168, 170, 171, 169, 165, 165, 160, 180, 186
Peso: 80, 68, 72, 75, 70, 65, 62, 60, 85, 90


Il primo problema che si pone è quello di decidere quale sia la variabile dipendente Y e quale la variabile indipendente X. In generale, la variabile indipendente è quella non affetta da errore durante la misura (o affetta da errore casuale); mentre la variabile dipendente è quella affetta da errore, e di cui si vuole stimare una relazione. Nel nostro caso possiamo assumere che la variabile Peso sia la variabile indipendente (X), e la variabile Altezza quella dipendente (Y).
Quindi il nostro problema è quello di cercare una relazione lineare (in termini spiccioli, una formula) che ci permetta di calcolare l'altezza, essendo noto il peso di un individuo. La formula più semplice è quella di una generica retta del tipo Y = a + bX. In R si calcolano i due parametri procedendo in questo modo:

> altezza = c(175, 168, 170, 171, 169, 165, 165, 160, 180, 186)
> peso = c(80, 68, 72, 75, 70, 65, 62, 60, 85, 90)
>
> modello = lm(formula = altezza ~ peso, x=TRUE, y=TRUE)
> modello

Call:
lm(formula = altezza ~ peso, x = TRUE, y = TRUE)

Coefficients:
(Intercept)         peso
   115.2002       0.7662


Anzitutto, notiamo che per scrivere correttamente la funzione, è importante l'ordine delle variabili. In formula = altezza ~ peso, si è seguita la sintassi generale formula = Y ~ X, e questa sintassi è stata confermata esplicitando x=TRUE e y=TRUE.
L'output della funzione è rappresentato dai due parametri a e b: a=115.2002 (l'intercetta), b=0.7662 (il coefficiente angolare).




Il semplice calcolo della retta non è però sufficiente. Occorre valutare la significatività della retta, ossia se il coefficiente angolare b si discosta da zero in modo significativo. Il test può essere effettuato sia mediante il test F di Fisher, sia con il test t di Student.

Ricordiamo le ipotesi da verificare:



In R entrambi possono essere richiamati molto rapidamente. Ecco come:

> mod = lm(altezza ~ peso)
> summary(mod)

Call:
lm(formula = altezza ~ peso)

Residuals:
    Min      1Q Median      3Q     Max
-1.6622 -0.9683 -0.1622  0.5679  2.2979

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept) 115.20021    3.48450   33.06 7.64e-10 ***
peso          0.76616    0.04754   16.12 2.21e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.405 on 8 degrees of freedom
Multiple R-squared: 0.9701, Adjusted R-squared: 0.9664
F-statistic: 259.7 on 1 and 8 DF, p-value: 2.206e-07


Come possiamo vedere, l'output è molto ricco. Innanzitutto osserviamo che sono stati forniti i valori dell'intercetta e del coefficiente angolare anche in questo modo (io personalmente preferisco ricavarli col metodo visto prima, per rapidità di interpretazione). Viene inoltre il risultato "Multiple R-squared: 0.835": questo numero descrive la bontà del modello ($R^2$ è il coefficiente di determinazione), ossia quanto il modello trovato spiega i dati campionari. In questo caso il modello è adeguato a descrivere l'83.5% dei dati ricavati.
Il test t di Student relativo al coefficiente angolare ha in questo caso valore 16.12 (quello relativo alla variabile peso); il risultato della statistica F di Fisher è invece 259.7 (è lo stesso valore che si otterrebbe eseguendo una ANOVA sui dati, che possiamo guardare richiamandolo così: anova(mod)). In entrambi i casi questi valori sono ampiamente superiori ai valori tabulati (e difatti i relativi p-value sono di molto inferiori a 0.05), e pertanto viene rifiutata l'ipotesi nulla (b = 0): quindi la regressione è significativa (il valore del coefficiente angolare così calcolato è statisticamente differente da zero).

21 commenti:

  1. ciao, complimenti per il blog. Potresti dirmi cosa significano gli asterischi? E inoltre in questa frase:"In entrambi i casi questi valori sono apiamente superiori ai valori tabulati". Quali sono i valori tabulati con i quali devo confrontare il p-value???
    Grazie Mille.
    Maria

    RispondiElimina
  2. Ciao Maria,
    allora, gli asterischi indicano la significatività dei coefficienti: 3 asterischi indicano una significatività approssimabile al 100%; 2 asterisci al 99.9%, e così via. Sotto trovi la legenda, ogni volta che richiami la funzione.

    Per quanto riguarda i valori tabulati, li calcoli così:
    1) per il test t: qt(0.975, n-2) con n numero di osservazioni
    2) per il test F: qf(0.95, 1, 8) dove 1 e 8 sono i gradi di libertà che vengono riportati nell'output

    Se intendi confrontare il p-value, devi sempre fare riferimento al suo valore 0.05 (normalmente viene considerata la significatività del 95%). Ma i valori tabulati cui facevo riferimento, sono i valori t ed F delle relative tavole, da confrontare con i valori calcolati.
    (in altri post precedenti, ho fatto altri esempi, sicuramente spiegati meglio. Se hai altre domande, sono comunque a disposizione)

    RispondiElimina
  3. Complimenti per il blog, ti seguirò giorno per giorno.
    MB

    RispondiElimina
  4. Ciao una domanda.
    Ho svolto un esercizio seguendo i tuoi passi e ho trovato a e b; ora come faccio a trovare il valore di Y volendo fare una predizione?
    Grazie

    RispondiElimina
  5. Ciao,
    vorrei un tuo suggerimento per capire che metodo usare per la mia analisi. Ho misurato il valore di una variabile quantitativa X in dei soggetti in 2 tempi (t1 e t2). I prelievi rivelano che la variabile X al t2 è sempre ridotta rispetto al valore che aveva al tempo 1, in tutti i soggetti. Voglio sapere se questa diminuizione della variabile X al tempo 2 dipende o meno: a)dall'eta dei soggetti a cui faccio il primo prelievo o b)dal valore assoluto della variabile al tempo 1 c) da entrambi d) da nessuna delle due variabili. Grazie

    RispondiElimina
  6. come faccio a calcolare il coefficiente di pearson dopo aver calcolto la retta di regressione??e come si trasforma in scala semilogaritmica??grazie:)

    RispondiElimina
  7. Ciao! come faccio a sapere che il p-value dove t=1,85 e dF=40:
    P(T)>(t)=P(T)>1,85=2*P(T)>1,85=
    2*0,0359=0,0718=7,18%

    dove e come ha trovato che P(T)>1,85=0,0359???
    Perchè nelle tavole nei 40 gradi di libertà della t student non c'è l'1,85 ma si può intuire che è compreso tra 1,684 e 2,021...quindi tra 0,1 e 0,05 nel 2-tailed...come fa a sapere la probabilità esatta 0,0359?? se la calcola in Stata come si fa??
    grazie!!

    RispondiElimina
  8. complimenti.. =)
    domani ho un esame.. e tu hai risolto un mio grandissimo dubbio! Grazie..
    M.

    RispondiElimina
  9. Solo adesso ho scoperto questo bellissimo blog!:D
    Sapreste dirmi come si fa per calcolare un intervallo di confidenza per b?

    RispondiElimina
  10. Ma come può l'altezza dipendere dal peso? Non è il contrario, ossia il peso varia al variare dall'altezza..no? Quindi la variabile x è l'altezza e la y il peso.

    RispondiElimina
  11. grazie! post ben fatto

    RispondiElimina
  12. ciao...ho un problema su un concetto di statistica da chiedere...la correlazione è un esempio di analisi multivariata perchè studia l'interdipendenza lineare tra due variabili, quindi vedo come varia una al variare dell'altra. Ma la regressione lineare semplice, invece, è un'analisi di che tipo?univariata perchè vedo come al variare del regressore varia quella di risposta?e la regressione lineare multipla quindi è multivariata perchè ci sono più regressori?

    RispondiElimina
  13. Per l'ultimo commento: non ho molto altro da aggiungere perchè le risposte cui hai pensato per la tue domande sono assolutamente corrette =)

    RispondiElimina
  14. Ti rangrazio molto e ti faccio i complimenti per il blog! :)

    RispondiElimina
  15. ciao scusami..io dovrei fare una regressione lineare pesata..e un'altra vincolata..mi chiedevo:ma i pesi come faccio ad impostarli?o meglio che valore gli dò..?non dovrebbe farmelo R direttamente? poi per impostare nella seconda regressione che i pesi sommano a uno come faccio..?grazie mille..:D

    RispondiElimina
  16. grazie mille per qs blog, ha chiarito molti miei dubbi!GRAZIE!

    RispondiElimina
  17. Dovrei ricavare il t corrispondente ad una significatività del 95% (alfa=0,95), per confrontarlo con quello calcolato tramite la formula t(n-2)=(b-beta0)/Sb.
    Il problema é che le tabelle si fermano ad alfa=0,90. Come faccio?

    p.s. n=g.d.l, b e beta0 sono i conefficienti angolari delle rette in un test di parallelismo

    Grazie

    RispondiElimina
  18. Ciao! Qualcuno di voi potrebbe dirmi come trovare la significatività del test t a mano dalla statistica t nella regressione logistica per la significatività di un parametro nella retta di regressione?

    RispondiElimina
  19. ciao,
    complimenti per il blog. Credo che ci sia una imprecisione nella spiegazione dell'esercizio svolto con R
    Quando parli di R^2 "...Viene inoltre il risultato "Multiple R-squared: 0.835": questo numero descrive la bontà del modello ($R^2$ è il coefficiente di determinazione..",
    R^2 risulta NON 0.835 bensi 0.9701
    Mi sbaglio io o trattasi di svista ?
    un saluto
    td

    RispondiElimina
  20. Ciao.
    Anche io vorrei complimentarmi innanzitutto per il blog. Io avrei una domanda circa il calcolo di una regressione non lineare (logaritmica). In questo caso, quale sarebbe la sintassi da utilizzare? mod=nls(ln(y)~ln(x),x=TRUE,y=TRUE).
    Grazie mille in anticipo

    RispondiElimina
  21. Ciao,
    si possono effettuare i due test di Fisher e di Student anche con serie autocorrelate? La mia regressione è tra un vettore di dati idrologici e il vettore date che riporta i giorni in cui sono stati registrati i dati del primo vettore.
    Grazie,
    Fabio

    RispondiElimina