Stepwise regRession: Parte seconda

Riassunto delle puntate precedenti. Il mondo è tutto ciò che accade (Wittgenstein, il tizio strano Viennese). Tra le cose che accadono, alcune sembrano collegate tra loro. Molte di queste relazioni tra gli accadimenti ce le mettiamo noi (tutte, a dire il vero). Ma alcune di queste relazioni non sono mere proiezioni di un pensiero magico o superstizioso, attratto dalle coincidenze. Alcune di queste relazioni mostrano un marcata ricorrenza e coerenza.

La misurazione degli elementi che compartecipano di queste relazioni esita spesso in regolarità che si è tentati di estrapolare come “legge”.  A questo servono le regressioni: a consentire la verifica delle relazioni tra le misurazioni di elementi che appaiono, all’ispezione, collegati tra loro. Alla base di una regressione c’è un’ipotesi della relazione sottesa tra gli elementi in valutazione. Questa relazione può essere espressa in formule, o algoritmi (regole di calcolo), la cui adeguatezza (fit) è verificata dalla soluzione dell’equazione stessa in base ai dati ricavati dall’osservazione.

Quando si rilevano delle regolarità nelle associazioni tra variabili, solitamente si tratta di fenomeni che hanno base biologica, meccanica o “naturale”. Fatevi un giro nei dataframe disponibili in R per farvi un’idea.

Queste relazioni sono ricorrenti in dipendenza da dinamiche che sono intrinseche al sistema misurato.

È qui che nasce il concetto di causalità (dare un’occhiata quiqui, tanto per gradire). Insomma, quando un sistema è integrato, la variazione in una sua parte implica solitamente variazioni in parti alla prima collegate. I petali e i sepali in un fiore sono dipendenti dal “metabolismo”, una cosa magica che sostiene la vita dei fiori (e di ogni essere animato), l’insieme delle reazioni chimiche che si realizzano in un dato organismo, reazioni che implicano costrizioni e costi, che si traducono in variazioni concordi tra le componenti dell’organismo stesso. A conti fatti – e mi si passi il calembour – risulta vera e verificabile l’aforisma di Lavoisier: “Nulla si crea, nulla si distrugge, tutto si trasforma”.

La regressione stepwise, dunque. Si tratta di un sistema per semplificare una regressione multipla. La regressione stepwise è un metodo di selezione delle variabili indipendenti allo scopo di selezionare un set di predittori che abbiano la migliore relazione con la variabile dipendente.

Esistono vari metodi di selezione delle variabili.

Il metodo forward (in avanti) inizia con un modello ‘nullo’ nel quale nessuna variabile tra i predittori è selezionata; nel primo step viene aggiunta la variabile con l’associazione maggiormente significativa sul piano statistico. Ad ogni step successivo è aggiunta la variabile con la maggiore associazione statisticamente significativa tra quelle non ancora incluse nel modello, ed il processo prosegue sino a quando non vi è più variabile con associazione statisticamente significativa con la variabile dipendente.

Il metodo backward (all’indietro) inizia con un modello che comprende tutte le variabili e procede, step by step, ad eliminare le variabili partendo da quella con l’associazione con la variabile dipendente meno significativa sul piano statistico.

Il processo stepwise fa avanti e indietro tra i due processi, aggiungendo e rimuovendo le variabili che, nei vari aggiustamenti del modello (con aggiunta o re-inserimento di una variabile) guadagnano o perdono in termini di significatività.

L’uso del metodo non è senza conseguenze (vedere oltre), ma può consentire una esplorazione di relazioni che a una prima ispezione possono non essere evidenti.

Esempio, just for fun.

# carichiamo un dataset disponibile in R:

data(airquality)
attach(airquality)
dim(airquality)
head(airquality)

# Qual è la relazione tra un insieme di variabili
# climatiche e il livello di ozono nell’aria?
# Consideriamo un modello ‘additivo’, nel quale non
# si realizzano interazioni tra le variabili:

model1 <- lm(Ozone ~ Temp + Wind + Solar.R)
summary(model1)

# Consideriamo ora un modello nel quale è ammessa una
# interazione tra le variabili (molto più plausibile):

model2 <- lm(Ozone ~ Temp * Wind * Solar.R)
summary(model2)

Nell’esempio qui sopra, il cui output può essere visualizzato eseguendo il codice nel terminale di R, vengono costruiti due modelli: uno additivo (model1), che non considera le interazioni fra i tre predittori Temp, Wind e Solar.R, e uno che considera queste interazioni (model2).

Come appare immediatamente evidente, nel modello2, in cui si tiene conto delle interazioni tra le variabili (modello più che plausibile), la significatività delle associazioni tra i predittori (le variabili indipendenti) e la variabile dipendente (nel nostro caso, livelli di ozono nell’aria) scompare. Verosimilmente, questo fenomeno è causato da problemi di multicollinearità che si presentano inserendo nel modello i termini d’interazione.

Inserendo le interazioni, la varianza spiegata dal modello aumenta: l’indice R-squared passa da 0.6059 a 0.6883; non si tratta di un grande incremento, ma è pur sempre un incremento (R² aumenta dell’8%). In questo secondo modello, nonostante in apparenza nessuna delle singole variabili indipendenti sembri avere alcuna relazione con la variabile dipendente, la statistica F complessiva resta significativa:

- nel modello 1 abbiamo: F(3,107) = 54.83,  p-value: < 2.2e-16
- nel modello 2 abbiamo: F(7,103) = 32.49,  p-value: < 2.2e-16

Ci fidiamo del risultato negativo? No.

Proviamo ad applicare un modello stepwise.

Come si fa? Si applica il comando step al modello.

# La funzione testa le interazioni ed elimina quelle
# che incrementano l'AIC:

model3 <- step(model2)
summary(model3)

# La varianza spiegata è rimasta più alta che nel modello
# semplicemente ‘additivo’ (R² =  0.6677)

Bella differenza, vero? Ora il modello restituisce alcune interazioni come significative, ma soprattutto tornano ad essere significative le relazioni già osservate nel più semplice modello additivo.

Che cosa è l’AIC? L?AIC è l’Akaike Information Criterion, un indice che consente di comparare due modelli e che consente di valutare variazioni nell‘adattamento di un modello per modifiche dello stesso (vedere qui per dettagli).

L‘AIC può essere interpretato solo in ottica comparativa: il modello migliore è sempre quello con l’AIC più basso. Quindi, quello a cui si deve badare non è il valore dell’AIC in sé, ma la differenza in AIC tra i modelli, che può essere valutata in questo modo (adattabile ad ogni successione di modelli):

# Create un vettore che comprenda tutti i valori AIC
# dei modelli (qui esempio con tre modelli):

x <- c(AIC(model1), AIC(model2), AIC(model3))

# Calcolate la differenza:

delta <- x - min(x)
delta

# Vedete da voi che il modello 3 è quello con differenza
# pari a 0, cioè, è il modello migliore.

# Potete anche derivare il ‘peso’ (weight) dell’AIC nei vari
# modelli, essendo il ‘peso’ relativo dell’AIC  di un modello
# rispetto agli altri una evidenza in suo favore:

# Calcolate la verosimiglianza (likelihood) dei modelli

L <- exp(-0.5 * delta)

# Akaike weights:

w <- L/sum(L)
w

# Si può anche utilizzare un altro indice, il Bayesian
# information criterion (BIC), che, a differenza dell'AIC,
# penalizza maggiormente modelli più complessi:

x_BIC <- c(BIC(model1), BIC(model2), BIC(model3))
delta_BIC <- x_BIC - min(x_BIC)
delta_BIC
L_BIC <- exp(-0.5 * delta_BIC)

# BIC weights:
w_BIC <- L/sum(L_BIC)
w_BIC

Ricca messe di informazioni sul tema qui. Dal sito, curato da Dolph Schluter, ho tratto il metodo rapido per calcolare l’AIC e il BIC.

Si diceva dei limiti di questa procedura. Il critico più agguerrito dell’uso della procedura stepwise è Frank Harrell, un Big Kahuna della statistica delle regressioni (non avete visto il film? Male! Monologo finale).

Le obbiezioni di Harrell sono da prendere con beneficio di inventario, ma non andrebbero trascurate:

1. R² values are biased high.
2. The F and χ² test statistics do not have the claimed distribution.
3. The standard errors of the parameter estimates are too small.
4. Consequently, the confidence intervals around the parameter estimates are too narrow.
5. p-values are too low, due to multiple comparisons, and are difficult to correct.
6. Parameter estimates are biased high in absolute value.
7. Collinearity problems are exacerbated.

Tuttavia, i benefici della stepwise regression sono indubitabili. Come nell’esempio riportato sopra, consente di identificare relazioni oscurate dall’inserimento di tutte le variabili nel modello.

Va ricordato che una regressione è un algoritmo che consente di stimare una variabile dipendente a partire da un insieme di predittori. Talvolta la stima di tale variabile può essere complicata e richiedere molte risorse; più risorse sono richieste maggiore sarà il tempo impiegato dall‘algoritmo. Inoltre, è necessario conoscere in anticipo la relazione matematica che lega i predittori alla variabile dipendente.

L’esito di una regressione sono dei parametri in base ai quali ‘correggere’ i punteggi dei predittori per ottenere una approssimazione della variabile dipendente, approssimazione che è tanto più precisa quanto migliore il modello (vedere post precedenti sulla valutazione della adeguatezza dei modelli – qui e qui).

Esempio. Poniamo che voi vogliate stimare il valore di una sostanza tossica liberata da una fabbrica. Quando i livelli di quella sostanza tossica sono elevati, c’è rischio di contaminazione. È costoso dosare la sostanza, e inoltre vi serve sapere in anticipo se la concentrazione nell’aria sta salendo verso il livello di guardia. Sapete che alcuni indici sono legati al rischio di innalzamento delle concentrazioni della sostanza tossica: temperatura, pressione nelle tubature, grado di umidità dell’aria. Queste variabili sono state stimate per un periodo di otto mesi, e una regressione stepwise le ha estratte come predittori efficienti della concentrazione della sostanza tossica.

I coefficienti di questi predittori sono:
- Temperatura: βT = 2.45
- Pressione: βP = 11.11
- Umidità: βU = –3.53
Mentre il valore dell‘intercetta è: α = –13.81.

Il modello di stima dei livelli di concentrazione della sostanza tossica è:

Sostanza_tossica = α + βT * Temperatura + βP * Pressione + βU * Umidità

Con un sistema di sensori ottenete, ogni dieci minuti, i valori di Temperatura, Pressione e Umidità.

In base ai coefficienti calcolati dal vostro modello, potete calcolare i valori presunti della sostanza tossica in base ai predittori semplicemente applicando la vostra formula:

Sostanza_tossica = – 13.81 + (2.45 x [valore misurato di Temperatura]) + (11.11 x [valore misurato di Pressione]) + (–3.53 x [valore stimato di Umidità])

Quando il valore predetto raggiunge una soglia di rischio, a quel punto effettuate la misurazione dei livelli della sostanza tossica. Poiché lo fate solo quando si raggiunge una soglia di rischio, risparmiate dei bei soldini…

Pensate a quello che si può fare con un buon modello matematico di predizione (che significa, buone analisi ma anche buoni dati), un pacchetto di sensori, e un processore Arduino

Alternative alla stepwise regression? Nessuna facile da capire. Ne parleremo in un prossimo post.

Intanto, per cominciare, date un’occhiata qui.

That’s all, folks!

Antonello Preti

Stay Tuned for our next episode!

Print Friendly

Lascia un Commento