7.7 Regressione non lineare

Nonostante la relazione di tipo lineare ipotizzata in questo capitolo risulti spesso adeguata, esistono molti casi in cui una forma funzionale non lineare risulta più adatta. Per mantenere la trattazione semplice in questo paragrafo si assumerà di avere un solo predittore \(x\).

Il modo più semplice di modellare una relazione non lineare è quello di trasformare la variabile da prevedere \(y\) e/o il predittore \(x\) preliminarmente alla stima del modello. Questa soluzione fornisce una forma funzionale non lineare, mantenendo il modello lineare nei parametri. La trasformazione più comunemente utilizzata è rappresentata dal logaritmo naturale (si veda il paragrafo 3.1).

Una forma funzionale di tipo log–log è specificata come \[ \log y=\beta_0+\beta_1 \log x +\varepsilon. \] In questo modello, il coefficiente angolare \(\beta_1\) può essere interpretato come un’elasticità: \(\beta_1\) rappresenta la percentuale media di variazione della variabile \(y\) risultante da un incremento dell’1% nella variabile \(x\). Esistono altre specificazioni di forme funzionali che risultano utili. La forma log-lineare è specificata trasformando solamente la variabile da prevedere e la forma lineare-log è ottenuta trasformando il predittore.

Ricordiamo che al fine di eseguire una trasformazione logaritmica di una variabile, tutti i valori osservati di quella variabile devono essere maggiori di zero. Nel caso in cui la variabile \(x\) contenga dei valori nulli, viene utilizzata la trasformazione \(\log(x+1)\); che consiste nell’aggiungere il valore uno alla variabile prima di calcolare il logaritmo. Questa trasformazione ha un effetto simile a quello prodotto dalla trasformazione logaritmica evitando il problema dovuto alla presenza dei valori nulli. Questa trasformazione ha anche l’ulteriore effetto positivo che gli zero nella scala originaria continuano ad essere zero anche nella scala trasformata.

Esistono tuttavia dei casi in cui la semplice trasformazione dei dati non è adeguata ed è richiesta invece una specificazione più generale. In questo caso il modello che si può utilizzare è \[ y=f(x) +\varepsilon \] dove \(f\) rappresenta la funzione non lineare. Nella regressione standard (lineare), si ha \(f(x)=\beta_{0} + \beta_{1} x\). Nella specificazione della regressione non lineare che segue, \(f\) è una funzione non lineare di \(x\) più flessibile, se confrontata con quella ottenuta dalla trasformazione logaritmica o dalle altre trasformazioni precedenti.

Una delle specificazioni più semplici è rendere la \(f\) lineare a tratti. In questo caso si introducono dei punti in corrispondenza dei quali l’inclinazione di \(f\) può cambiare. Questi punti sono chiamati nodi. Questo può essere ottenuto fissando \(x_{1,t}=x\) e introducendo la variabile \(x_{2,t}\) in modo che
\[\begin{align*} x_{2,t} = (x-c)_+ &= \left\{ \begin{array}{ll} 0 & \text{if } x < c\\ x-c & \text{if } x \ge c. \end{array}\right. \end{align*}\] La notazione \((x-c)_+\) restituisce \(x-c\) se questo è positivo e 0 altrimenti. Si forza così l’inclinazione a cambiare esattamente nel punto \(c\). Ulteriori punti di flessione possono essere introdotti nella relazione aggiungendo altre variabili aventi la forma riportata sopra.

Le relazioni lineari a tratti costruite in questo modo rappresentano casi speciali di regressioni spline. In generale, una regressione lineare spline è ottenuta utilizzando \[ x_{1}= x \quad x_{2} = (x-c_{1})_+ \quad\dots\quad x_{k} = (x-c_{k-1})_+ \] dove \(c_{1},\dots,c_{k-1}\) sono i nodi (ovvero i punti nei quali la retta flette). La scelta del numero dei nodi (\(k-1\)) e dei punti dove questi nodi vengono posizionati può essere difficile e spesso arbitrario. Algoritmi per la selezione automatica dei nodi sono disponibili ma non sono ampiamente utilizzati.

Previsione con un trend non lineare

Nel paragrafo 7.4 è stata introdotta la stima di un trend lineare con dati in serie storica imponendo \(x=t\). Il modo più semplice di stimare un trend non lineare è imponendo un trend quadratico o di ordine superiore ottenuto specificando \[ x_{1,t} =t,\quad x_{2,t}=t^2,\quad \dots. \] Tuttavia, non è consigliato utilizzare trend quadratici o di ordine superiore in previsione. Quando questi sono estrapolati, le previsioni risultanti sono spesso non realistiche.

Un approccio migliore è quello di usare la specificazione lineare a tratti introdotta in precedenza e stimare un trend lineare a tratti che è in grado di cambiare inclinazione in corrispondenza di determinati punti. Si può pensare a questo meccanismo come ad un trend non lineare costruito utilizzando dei pezzi lineari. Se il trend cambia inclinazione in corrispondenza del tempo \(\tau\), allora può essere specificato semplicemente sostituendo sopra \(x=t\) e \(c=\tau\) in modo tale da includere i predittori, \[\begin{align*} x_{1,t} & = t \\ x_{2,t} &= (t-\tau)_+ = \left\{ \begin{array}{ll} 0 & \text{if } t < \tau\\ t-\tau & \text{if } t \ge \tau \end{array}\right. \end{align*}\] nel modello. Se i coefficienti associati a \(x_{1,t}\) e \(x_{2,t}\) sono indicati con \(\beta_1\) e \(\beta_2\) allora \(\beta_1\) fornisce l’inclinazione del trend prima del tempo \(\tau\), mentre l’inclinazione della retta dopo il tempo \(\tau\) sarà data da \(\beta_1+\beta_2\). Punti di flessione addizionali del trend possono essere inclusi nella relazione aggiungendo semplicemente ulteriori variabili aventi la forma \((t-\tau)_+\) dove \(\tau\) rappresenta il “nodo” o punto nel tempo in corrispondenza del quale la retta cambia inclinazione.

Esempio: tempi dei vincitori della maratona di Boston

Si è interessati a stimare modelli per il trend sui dati dei vincitori della maratona di Boston per gli atleti maschi. Innanzitutto sono stati estratti i dati degli atleti maschi e convertito successivamente i tempi dei vincitori in formato numerico. Si osservi che la maratona è stata allungata nel 1924 (da 24.5 miglia a 26.2 miglia), e questo introduce un balzo in avanti nelle durate dei tempi migliori. È quindi possibile utilizzare solo i dati dal 1924 in avanti.

boston_men <- boston_marathon %>%
  filter(Year >= 1924) %>%
  filter(Event == "Men's open division") %>%
  mutate(Minutes = as.numeric(Time)/60)

Il pannello in alto di figura 7.20 mostra i tempi dei vincitori dal 1924. La serie storica mosta un trend decrescente dovuto al fatto che i tempi dei vincitori sono migliorati nel corso degli anni. Il pannello in basso dello stesso grafico mostra invece i residui della stima di un trend lineare sui dati. Il grafico mostra un ovvio trend non lineare che non è stato adeguatamente catturato dal trend lineare stimato.

L'adattamento di un trend lineare ai tempi di vittoria della maratona di Boston è inappropriato

Figura 7.20: L’adattamento di un trend lineare ai tempi di vittoria della maratona di Boston è inappropriato

La stima di un trend esponenziale (che è equivalente a una regressione log-lineare) sui dati può essere ottenuta trasformando la variabile \(y\) in modo tale che il modello stimato sia \[ \log y_t=\beta_0+\beta_1 t +\varepsilon_t. \] Il modello con trend esponenziale stimato e le relative previsioni sono mostrate in figura 7.21. Nonostante il trend esponenziale a prima vista non sembri adattarsi ai dati meglio della specificazione lineare, esso consente di ottenere una proiezione migliore in quanto i dati dei tempi dei vincitori manifestano una tendenza a decrescere nel futuro con un tasso di decadenza che non risulta essere lineare e costante.

Il grafico dei tempi rivela tre diversi periodi. Fino a circa il 1950 si osserva un alto livello di volatilità sui tempi, con tempi che manifestano una lieve tendenza a decrescere. Dopo il 1950 si osserva invece una chiara tendenza dei tempi a decrescere nel tempo, tendenza seguita da una relativa stabilità nel periodo successivo agli anni ’80. Questo sembra suggerire un’inversione del trend che diventa crescente nel corso degli ultimi anni del campione. Al fine di tener conto di questi cambiamenti si specificano gli anni 1950 e 1980 come nodi. A questo punto è utile avvertire il lettore che esiste un certo margine di soggettività nell’identificazione dei nodi che può condurre al problema dell’overfitting (sovra-adattamento), che può influire negativamente sulle capacità previsive del modello. L’identificazione dei nodi deve quindi essere condotta con prudenza.

fit_trends <- boston_men %>%
  model(
    linear = TSLM(Minutes ~ trend()),
    exponential = TSLM(log(Minutes) ~ trend()),
    piecewise = TSLM(Minutes ~ trend(knots = c(1950, 1980)))
  )
fc_trends <- fit_trends %>% forecast(h = 10)

boston_men %>%
  autoplot(Minutes) +
  geom_line(data = fitted(fit_trends),
            aes(y = .fitted, colour = .model)) +
  autolayer(fc_trends, alpha = 0.5, level = 95) +
  labs(y = "Minuti", x = "Anno",
       title = "Tempi di vittoria della maratona di Boston")
Proiezione delle previsioni dei trend lineare, esponenziale e lineare a tratti per i tempi di vittoria della maratona di Boston.

Figura 7.21: Proiezione delle previsioni dei trend lineare, esponenziale e lineare a tratti per i tempi di vittoria della maratona di Boston.

La figura 7.21 mostra le rette stimate e previste dall’imposizione di trend lineari, esponenziali e lineari a tratti. Le previsioni migliori sembrano provenire dal modello con trend lineare a tratti.