%%%%% Esempio di traiettoria (realizzazione) di % un white noise a tempo discreto w <- rnorm(100,0,1) ts.plot(w) acf(w) % l'autocorrelazione è circa nulla. w.2 <- 2*w+50 ts.plot(w.2) acf(w.2) % questa è stata la verifica che acf calcola l'autocorrelazione % (e non E[X_tX_s]). %%% Immaginiamo una sorta di limite continuo: w <- rnorm(1000,0,1) ts.plot(w) %%%%% %%%%% Ecco la random walk: rw <- matrix(nrow=100) rw[1] <- 0 for (t in 1:99) { rw[t+1] <- rw[t]+rnorm(1,0,1) } ts.plot(rw) %% Ecco appross. il moto Browniano: rw <- matrix(nrow=1000) rw[1] <- 0 for (t in 1:999) { rw[t+1] <- rw[t]+rnorm(1,0,1) } ts.plot(rw) % La sua derivata è un white noise: ts.plot(diff(rw,1)) %%%%% Il moto Browniano al tempo t=1000 è una v.a. gaussiana: B.1000 <- matrix(nrow=177) rw <- matrix(nrow=1000) for (k in 1:177) { rw[1] <- 0 for (t in 1:999) { rw[t+1] <- rw[t]+rnorm(1,0,1) } B.1000[k]<-rw[1000] } hist(B.1000,20) qqnorm(B.1000) %% queste sono le due visioni di un processo stocastico. %% Ecco il moto Browniano nel piano: rw.1 <- matrix(nrow=1000) rw.2 <- matrix(nrow=1000) rw.1[1] <- 0 rw.2[1] <- 0 for (t in 1:999) { rw.1[t+1] <- rw.1[t]+rnorm(1,0,1) rw.2[t+1] <- rw.2[t]+rnorm(1,0,1) } plot(c(-50,50),c(-50,50)) lines(rw.1,rw.2) %%%%% Il moto Browniano non è stazionario. Ecco un processo % stazionario costruito a partire dal Browniano: OU <- matrix(nrow=1000) % ["OU" sta per Ornstein-Uhlenbeck] lambda <- 0.5 OU[1] <- 0 for (t in 1:999) { OU[t+1] <- (1-lambda)*OU[t] +rnorm(1,0,1) } ts.plot(OU) acf(OU) % non è un white noise: ha una breve correlazione. Possiamo % allungare il tempo di correlazione: lambda <- 0.1 OU[1] <- 0 for (t in 1:999) { OU[t+1] <- (1-lambda)*OU[t] +rnorm(1,0,1) } ts.plot(OU) acf(OU) %%% Per esercizio, si può verificare che OU ad ogni tempo % t è gaussiano. % Estremizziamo la memoria lunga: OU <- matrix(nrow=10000) lambda <- 0.001 OU[1] <- 0 for (t in 1:9999) { OU[t+1] <- (1-lambda)*OU[t] +rnorm(1,0,1) } ts.plot(OU) % è quasi un moto Browniano, ma per lambda=0: OU.WB <- matrix(nrow=10000) lambda <- 0.000 OU.WB[1] <- 0 for (t in 1:9999) { OU.WB[t+1] <- (1-lambda)*OU.WB[t] +rnorm(1,0,1) } ts.plot(OU.WB) Dove si vedono traiettorie di queswto genere? Ad esempio in finanza: B <- read.table(file="bulgari.txt") ts.plot(B[,1]) OU <- matrix(nrow=1000) lambda <- 0.001 OU[1] <- 0 for (t in 1:999) { OU[t+1] <- (1-lambda)*OU[t] +rnorm(1,0,1) } ts.plot(OU)