La
regressione lineare (x variabile indipendente) viene trattata estesamente in
tutti i testi di statica, ai quali si rimanda per gli aspetti tecnici [1]. Tuttavia
esiste un aspetto relativo al calcolo della regressione lineare che
viene spesso sottovalutato, ed è il fatto che fornisce risultati che
dipendono da quale delle due variabili in esame sia assunta come variabile indipendente, che per definizione, per le esigenze imposte dal modello matematico impiegato, deve essere posta sull'asse delle ascisse (x). L'altra variabile, la variabile dipendente, viene posta sull'asse delle ordinate (y).
Si
considerino i seguenti dati (simulati):
Variabile
1
|
Variabile
2
|
9
|
9
|
10
|
10
|
11
|
11
|
9
|
10
|
10
|
9
|
10
|
11
|
11
|
10
|
Non
avendo alcuna ragione per assumere l'una o l'altra delle due
variabili come la variabile indipendente:
→ prima
calcoliamo l'equazione della retta di regressione x
variabile indipendente ponendo sull'asse delle ascisse (x) la
Variabile 1;
→ poi
ricalcoliamo l'equazione della retta di regressione x
variabile indipendente ponendo sull'asse delle ascisse (x) la
Variabile 2;
→ ricaviamo
da quest'ultima l'equazione della retta di regressione y
variabile indipendente;
→ infine
calcoliamo l'equazione della retta di regressione con un metodo che
non impiega nessuna delle due come variabile indipendente, ma calcola la media geometrica dei coefficienti angolari della regressione x variabile indipendente e della regressione y variabile indipendente (regressione media geometrica) [2, 3].
Copiate
la prima parte dello script [4], quindi incollatela nella
Console di R
e premete ↵
Invio:
#
MODELLI DI REGRESSIONE PARAMETRICA retta y = a + b·x con dati
simulati (1/4)
#
windows()
# apre una nuova finestra
par(mfrow=c(2,2))
# predispone la suddivisione della finestra in quattro quadranti, uno
per grafico
#
var_1
<- c(9,10,11,9,10,10,11) # variabile 1
var_2
<- c(9,10,11,10,9,11,10) # variabile 2
#
x
<- var_1 # variabile 1 in ascisse
y
<- var_2 # variabile 2 in ordinate
plot(x,
y, xlim = c(0,15), ylim = c(0,15), xlab="Variabile 1",
ylab="Variabile 2", main="Regressione x variabile
indipendente", cex.main = 0.9) # grafico dei dati
regpar
<- lm(y ~ x) # regressione
lineare standard
a_yx
<- regpar$coefficients[1] #
intercetta a
b_yx
<- regpar$coefficients[2]
# coefficiente angolare b
abline(a_yx,
b_yx, col="blue") # retta di regressione x
variabile indipendente
c(a_yx,
b_yx) #
mostra a e b
#
Il
risultato di questa prima parte dello script, nel quale l'equazione della retta di regressione x variabile indipendente è calcolata ponendo sull'asse delle ascisse (x) la Variabile 1, è il primo grafico in alto a
sinistra:
x
<- var_2 # variabile 2 in ascisse (2/4)
y
<- var_1 # variabile 1 in ordinate
plot(x,
y, xlim = c(0,15), ylim = c(0,15), xlab="Variabile 2",
ylab="Variabile 1", main="Variabili invertite",
cex.main = 0.9) # grafico dei dati
regpar_1
<- lm(y ~ x) # regressione
lineare standard
a_yx_1
<- regpar_1$coefficients[1] #
intercetta a
b_yx_1
<- regpar_1$coefficients[2]
# coefficiente angolare b
abline(a_yx_1,
b_yx_1, col="blue") # retta di regressione
con variabili scambiate
c(a_yx_1,
b_yx_1) # mostra a e b
#
Ora
la Variabile 2 è riportata in ascisse (e diventa quindi la variabile indipendente) e la Variabile 1
è riportata in ordinate (grafico in alto a destra).
L'equazione della retta di regressione è identica alla precedente (questo è atteso
visto che Variabile 1 e Variabile 2 comprendono
identici valori). Per confrontare questo grafico e questa retta di
regressione con quelli del primo grafico dobbiamo capovolgere il grafico orizzontalmente,
quindi ruotarlo a destra di 90°, riportando così la Variabile 2 in ordinate e riportando la Variabile
1 in ascisse, cosa che facciamo con questa terza parte dello
script. Copiatela e incollatela nella
Console di R
e premete
↵ Invio:
x
<- var_1 # variabile 1 in ascisse (3/4)
y
<- var_2 # variabile 2 in ordinate
a_xy
<- - a_yx_1 / b_yx_1
# intercetta a
b_xy
<- 1 / b_yx_1
# coefficiente angolare b
plot(x,
y, xlim = c(0,15), ylim = c(0,15), xlab="Variabile 1",
ylab="Variabile 2", main="Regressione y variabile
indipendente", cex.main = 0.9) # grafico dei dati
abline(a_xy,
b_xy, col="red") # retta di regressione y
variabile indipendente
c(a_xy,
b_xy) # mostra a e b
#
Abbiamo
così ottenuta la regressione y variabile indipendente,
illustrata nel grafico in basso a sinistra.
Infine calcoliamo l'equazione della retta di regressione espressa come
regressione media geometrica, copiate la quarta e ultima parte
dello script e incollatela nella
Console di R
e premete
↵ Invio:
x
<- var_1 # variabile 1 in ascisse (4/4)
y
<- var_2 # variabile 2 in ordinate
b_mg <- sqrt(b_yx*b_xy)
# coefficiente angolare b
a_mg <- mean(y) - (b_mg * (mean(x)))
# intercetta a
plot(x,
y, xlim = c(0,15), ylim = c(0,15), xlab="Variabile 1",
ylab="Variabile 2", main="Regressione media geometrica", cex.main = 0.9) # grafico dei dati
abline(a_mg,
b_mg, col="green") # retta di regressione
media geometrica
c(a_mg,
b_mg) # mostra a e b
#
Questa regressione (grafico in basso a destra) assume come coefficiente angolare la media geometrica dei coefficienti angolari della regressione x variabile indipendente e della regressione y variabile indipendente. E con la salomonica
conclusione che y = x fornisce
una soluzione intermedia, che appare più convincente rispetto all'una e all'altra regressione lineare, per il
fatto che la retta calcolata risulta essere allineata con l'asse maggiore
dell'elissoide che include i dati.
Nel
caso del set di dati galton [5] incluso nel pacchetto psychTools ci troviamo proprio in una situazione di questo genere.
Nell'analizzare mediante la regressione lineare le altezze dei
genitori e le altezze dei figli non vi sono ragioni per assumere le
prime come variabile indipendente. Ma non vi sono neppure ragioni per
assumere le altezze dei figli come variabile indipendente. Possiamo
allora effettuare un'analisi di questi dati provando a calcolare
anche per essi la regressione lineare nei tre modi possibili qui riportati:
→ regressione
x variabile indipendente;
→ regressione
y variabile indipendente;
→ regressione media geometrica.
Se non l'avete già fatto, prima di eseguire lo script dovete scaricare e installare il pacchetto aggiuntivo psychTools. Copiate
per intero lo script riportato qui sotto quindi incollatelo nella
Console di R
e premete ↵
Invio:
#
MODELLI DI REGRESSIONE PARAMETRICA retta y = a + b·x set di dati
galton
#
library(psychTools)
# carica il pacchetto psych incluso il set di dati galton
#
windows()
# apre una nuova finestra
par(mfrow=c(2,2))
# predispone la suddivisione della finestra in quattro quadranti, uno
per grafico
#
var_1
<- galton$parent # variabile 1
var_2
<- galton$child # variabile 2
#
x
<- var_1 # variabile 1 in ascisse
y
<- var_2 # variabile 2 in ordinate
plot(x,
y, xlim = c(50,80), ylim = c(50,80), xlab="Altezza dei padri",
ylab="Altezza dei figli", main="Regressione x
variabile indipendente", cex = 0.5, cex.main = 0.9) #
grafico dei dati
regpar
<- lm(y ~ x) # regressione lineare standard
a_yx
<- regpar$coefficients[1] # intercetta a
b_yx
<- regpar$coefficients[2] # coefficiente angolare b
abline(a_yx,
b_yx, col="blue") # retta di regressione x
variabile indipendente
c(a_yx,
b_yx) # visualizza a e b
#
x
<- var_2 # variabile 2 in ascisse
y
<- var_1 # variabile 1 in ordinate
plot(x,
y, xlim = c(50,80), ylim = c(50,80), xlab="Altezza dei figli",
ylab="Altezza dei padri", main="Variabili invertite",
cex = 0.5, cex.main = 0.9) # grafico dei dati
regpar_1
<- lm(y ~ x) # regressione lineare standard
a_yx_1
<- regpar_1$coefficients[1] # intercetta a
b_yx_1
<- regpar_1$coefficients[2] # coefficiente angolare b
abline(a_yx_1,
b_yx_1, col="blue") # retta di regressione
con variabili scambiate
c(a_yx_1,
b_yx_1) # visualizza a e b
#
x
<- var_1 # variabile 1 in ascisse
y
<- var_2 # variabile 2 in ordinate
a_xy
<- - a_yx_1 / b_yx_1 # intercetta a
b_xy
<- 1 / b_yx_1 # coefficiente angolare b
plot(x,
y, xlim = c(50,80), ylim = c(50,80), xlab="Altezza dei padri",
ylab="Altezza dei figli", main="Regressione y
variabile indipendente", cex = 0.5, cex.main = 0.9) #
grafico dei dati
abline(a_xy,
b_xy, col="red") # retta di regressione y
variabile indipendente
c(a_xy,
b_xy) # visualizza a e b
#
x
<- var_1 # variabile 1 in ascisse
y
<- var_2 # variabile 2 in ordinate
b_mg <- sqrt(b_yx * b_xy) # coefficiente angolare b
a_mg <- mean(y) - (b_mg * (mean(x))) # intercetta a
plot(x,
y, xlim = c(50,80), ylim = c(50,80), xlab="Altezza dei padri",
ylab="Altezza dei figli", main="Regressione media geometrica", cex = 0.5, cex.main = 0.9) # grafico
dei dati
abline(a_mg,
b_mg, col="green") # retta di regressione
media geometrica
c(a_mg,
b_mg) # visualizza a e b
#
Questo è il grafico risultante.
Come si vede chiaramente assumendo come variabile indipendente i padri o i figli i risultati cambiano. Il problema, generato a scopo didattico nei dati simulati analizzati con il primo script e riportati nella prima figura e che si presenta spontaneamente nei dati di Francis Galton riportati in quest'ultima figura [6], nasce dal fatto che l'equazione della retta di regressione è determinata dall'interazione di due fattori:
→ gli
assunti
alla base del modello di regressione lineare impiegato;
→ l'informazione
che il modello di regressione lineare può ricavare dai dati forniti.
Più i dati sono allineati su una retta:
→ più consistente è l'informazione in essi contenuta;
→ più r si avvicina a 1;
→ meno rilevante è l'influenza degli assunti alla base del modello di regressione sulle conclusioni.
Tanto che nel caso limite di dati perfettamente allineati su una retta, quando r = 1 e l'informazione contenuta nei dati è univoca, tutti i modelli di regressione forniscono lo stesso identico risultato, indipendentemente dagli assunti alla base del modello di regressione.
Tanto che nel caso limite di dati perfettamente allineati su una retta, quando r = 1 e l'informazione contenuta nei dati è univoca, tutti i modelli di regressione forniscono lo stesso identico risultato, indipendentemente dagli assunti alla base del modello di regressione.
Meno i dati sono allineati su una retta:
→ meno consistente è l'informazione in essi contenuta;
→ meno r è vicino a 1 (più r si avvicina a 0);
→ più rilevante è l'influenza degli assunti alla base del modello di regressione sulle conclusioni.
Nel caso limite di dati distribuiti in una palla rotonda, quando r = 0 e l'informazione contenuta nei dati è nulla (nessuno sa come far passare una retta da punti così distribuiti), i modelli di regressione manifestano il massimo di divergenza nei risultati, che a questo punto riflettono esclusivamente gli assunti alla base del modello di regressione.
I
dati di Galton presentano un coefficiente di correlazione r uguale a
0.4587624 e un coefficiente di
determinazione R2
= 0.21 che indica che solamente il 21% della variabilità osservata
viene spiegato dalla retta. Ci troviamo di fronte a un caso tipico di una situazione nella quale le conclusioni dipendono più dagli assunti alla base del modello impiegato per interpretare i dati che dalla oggettività fornita dai dati stessi. Non potendo assumere né le altezze dei
padri né le altezze dei figli come variabile indipendente, è opportuno accettare le conclusioni tratte dal calcolo della (retta di
regressione espressa come) regressione media geometrica, la cui caratteristica più convincente è di essere allineata con l'asse
maggiore dell'ellissoide che include i dati (Fig. 2 grafico in
basso a destra).
----------
[1] Vedere i riferimenti nel post: Regressione lineare semplice parametrica.
[2] Ling Leng et al. Ordinary least square regression, orthogonal regression, geometric mean regression and their applications in aerosol science. J. Phys. 2007;Conf. Ser. 78 012084. DOI: 10.1088/1742-6596/78/1/012084
[3] Shaoji Xu. A Property of Geometric Mean Regression. The American Statistician 2014;68(4);277-281. DOI: 10.1080/00031305.2014.962763
[4] Nei link che seguono trovate i dettagli:
→ sui simboli dei punti di R che è possibile impiegare nella funzione plot();
→ gli stili delle linee di R che è possibile impiegare nella funzione abline();
→ i colori di R che potete impiegare;
→ la possibilità di aggiungere la legenda a un grafico.
[5] Vedere il post Il set di dati galton.
[6] Il codice per riportare le tre rette su di un unico grafico è riportato nel post: Aggiungere la legenda a un grafico.
Nessun commento:
Posta un commento