COSTRUZIONE SINTETICA DI DATI CON TREND E STAGIONALITA' P <- 18 N <- P*5 T <- 1:N + 20 ts.plot(T) S <- 10*sin((1:N)*(2*pi)/P) ts.plot(S) R <- 3*rnorm(N) X <- T+S+R ts.plot(X) --------------------------------------------- METODO SE X.ts <- ts(X,frequency=P) SE <- HoltWinters(X.ts, beta=FALSE, gamma=FALSE) plot(SE) SE (si noti che il valore di alpha è molto alto, totale innovazione) p <- predict(SE,18,prediction.interval=TRUE) plot(SE,p) plot(p) p ------------------------------------------------------- METODO SE CON ALPHA FORZATO SE.0.2 <- HoltWinters(X.ts, alpha= 0.2, beta=FALSE, gamma=FALSE) plot(SE.0.2) SE.0.1 <- HoltWinters(X.ts, alpha= 0.1, beta=FALSE, gamma=FALSE) plot(SE.0.1) SE.0 <- HoltWinters(X.ts, alpha= 0.0000000001, beta=FALSE, gamma=FALSE) plot(SE.0) p.0.1 <- predict(SE.0.1,12,prediction.interval=TRUE) plot(SE.0.1,p.0.1) Cattura il trend in ritardo. Prevede sempre in modo banale. ----------------------------------------------------- METODO SET SET <- HoltWinters(X.ts, gamma=FALSE) plot(SET) SET (questo è un esempio in cui SET insegue la periodicità) pt <- predict(SET,18,prediction.interval=TRUE) plot(SET,pt) plot(pt) pt ------------------------------------------------------ METODO SET CON ALPHA-BETA FORZATI SET.new <- HoltWinters(X.ts, alpha=0.1, beta=0.1, gamma=FALSE) plot(SET.new) SET.new.bis <- HoltWinters(X.ts, alpha=0.1, beta=0.01, gamma=FALSE) plot(SET.new.bis) p.new <- predict(SET.new,12,prediction.interval=TRUE) plot(SET.new,p.new) risultato ragionevole ------------------------------------------------------- METODO HW HW <- HoltWinters(X.ts) plot(HW) si noti, con plot(X.ts), che ci sono 5 periodi nella serie originale, ma solo 4 in plot(HW) HW p.HW <- predict(HW,36,prediction.interval=TRUE) plot(HW,p.HW) plot(p.HW) p.HW ------------------------------------------------------- VARIANTI 1. HW moltiplicativo (quello di default è additivo!) ?HoltWinters HW.mul <- HoltWinters(X.ts, seasonal = "multiplicative") plot(HW.mul) (amplifica le oscillazioni al crescere del valore medio) 2. periodo sbagliato X.ts.12 <- ts(X,frequency=12) HW.12 <- HoltWinters(X.ts.12) plot(HW.12) p.HW.12 <- predict(HW.12,24,prediction.interval=TRUE) plot(HW.12,p.HW.12) non ha funzionato. -------------------------------------------------------- DETRENDIZZAZIONE TRAMITE SET Nota: lo scopo può essere trovare P, quindi non lo useremo. P <- 18 N <- P*5 T <- 1:N + 20 S <- 10*sin((1:N)*(2*pi)/P) R <- 3*rnorm(N) X <- T+S+R ts.plot(X) X.ts <- ts(X,frequency=1) (qualsiasi frequenza produce lo stesso risultato) SET2 <- HoltWinters(X.ts, alpha=0.1, beta=0.1, gamma=FALSE) plot(SET2) T2=X.ts-SET2$fitted[,1] plot(T2) acf(T2) Questo metodo ha solo il difetto di non catturare subito il trend, quindi anche la serie detrendizzata è scadente all'inizio. -------------------------------------------------------- DETRENDIZZAZIONE TRAMITE SET CON INIZIALIZZAZIONE MANUALE P <- 18 N <- P*5 T <- 1:N + 20 S <- 10*sin((1:N)*(2*pi)/P) R <- 3*rnorm(N) X <- T+S+R ts.plot(X) X.ts <- ts(X,frequency=1) SET3 <- HoltWinters(X.ts, alpha=0.1, beta=0.1, gamma=FALSE, b.start = 1) plot(SET3) T3=X.ts-SET3$fitted[,1] plot(T3) acf(T3) Il valore b.start = 1 è il valore di partenza della variabile ausiliaria m(t), la pendenza. Qui lo abbiamo posto =1 perché lo sappiamo. Di fronte ad una serie storica ignota, si può cercare con una regressione lineare sui primi dati, o a occhio con n rapporto incrementale.