13.3 Previsioni vincolate a stare entro certi limiti

Non di rado si vuole che le previsioni assumano valori positivi, oppure si richiede che stiano all’interno di un range \([a,b]\) ben definito. Entrambe queste situazioni si possono trattare in modo relativamente semplice utilizzando delle trasformazioni opportune.

Previsioni positive

Per imporre un vincolo di positività , si può semplicemente considerare una trasformazione logaritmica. Per esempio, si consideri l’andamento del prezzo reale annuo di una dozzina di uova (1900-1993; in centesimi), mostrato in Figure 13.4. A causa della trasformazione logaritmica, le distribuzioni predittive sono vincolate ad assumere valori positivi e quindi diventano sempre più asimmetriche man mano che la media diminuisce.

egg_prices <- prices %>% filter(!is.na(eggs))
egg_prices %>%
  model(ETS(log(eggs) ~ trend("A"))) %>%
  forecast(h = 50) %>%
  autoplot(egg_prices) +
  labs(title = "Prezzo annuale delle uova",
       y = "$US (in centesimi, al netto dell'inflazione) ")
Previsioni del prezzo di una dozzina di uova, vincolate ad essere positive attraverso una trasformazione di Box-Cox.

Figura 13.4: Previsioni del prezzo di una dozzina di uova, vincolate ad essere positive attraverso una trasformazione di Box-Cox.

Previsioni vincolate a stare in un intervallo

Per capire come trattare il caso in cui i dati siano vincolati a stare in un certo intervallo, si immagini che i prezzi delle uova siano vincolati ad essere compresi tra \(a=50\) e \(b=400\). In questo caso possiamo trasformare i dati utilizzando una trasformazione logit che mappa l’intervallo \((a,b)\) sull’intero asse reale: \[ y = \log\left(\frac{x-a}{b-x}\right), \] dove \(x\) è espresso sulal scala originaria e \(y\) è il dato trasformato. La trasformazione inversa è data da \[ x = \frac{(b-a)e^y}{1+e^y} + a. \] Questa trasformazione non è già inserita nelle funzioni e quindi è necessario scrivere delle funzioni specifiche per applicarla.

scaled_logit <- function(x, lower = 0, upper = 1) {
  log((x - lower) / (upper - x))
}
inv_scaled_logit <- function(x, lower = 0, upper = 1) {
  (upper - lower) * exp(x) / (1 + exp(x)) + lower
}
my_scaled_logit <- new_transformation(
                    scaled_logit, inv_scaled_logit)
egg_prices %>%
  model(
    ETS(my_scaled_logit(eggs, lower = 50, upper = 400)
          ~ trend("A"))
  ) %>%
  forecast(h = 50) %>%
  autoplot(egg_prices) +
  labs(title = "Prezzo annuale delle uova",
       y = "$USA (in centesimi al netto dell'inflazione) ")
Previsioni del prezzo di una dozzina di uova vincolate a stare tra 50 and 400 centesimi USA.

Figura 13.5: Previsioni del prezzo di una dozzina di uova vincolate a stare tra 50 and 400 centesimi USA.

La correzione della distorsione qui viene applicata automaticamente e gli intervali di previsione prodotti da queste trasformazioni hanno lo stesso livello di copertura di quello su scala trasformata perché i quantili sono preservati da trasformazioni monotonicamente crescenti.

Gli intervalli di previsione si trovano sotto il valore 50 a causa della trasformata. La conseguenza di questo vincolo artificiale (e irrealistico) è che le distribuzioni predittive diventano estremamente asimmetriche.