2016-02-21 27 views
5

sto simulando una procedura random walk unidimensionale e simmetrica:Come ripetere 1000 volte questa simulazione di camminata casuale in R?

y[t] = y[t-1] + epsilon[t] 

in cui il rumore bianco viene indicato con epsilon[t] ~ N(0,1) nel periodo di tempo t. Non c'è alcuna deriva in questa procedura.

Inoltre, RW è simmetrico, perché Pr(y[i] = +1) = Pr(y[i] = -1) = 0.5.

Ecco il mio codice in R:

set.seed(1) 
t=1000 
epsilon=sample(c(-1,1), t, replace = 1) 

y<-c() 
y[1]<-0 
for (i in 2:t) { 
    y[i]<-y[i-1]+epsilon[i] 
} 
par(mfrow=c(1,2)) 
plot(1:t, y, type="l", main="Random walk") 
outcomes <- sapply(1:1000, function(i) cumsum(y[i])) 
hist(outcomes) 

Vorrei simulare serie 1000 diverse y[i,t] (i=1,...,1000; t=1,...,1000). (Dopo di che, controllerò le probabilità di tornare alle origini (y[1]=0) a t=3, t=5 e t=10.)

Quale funzione mi avrebbe permesso di fare questo tipo di ripetizione con y[t] Random Walk serie temporali?

+1

Sono d'accordo con @Tim - ma penso che sia una buona domanda da chiedere sullo stack overflow. Possiamo trasferire la domanda lì? –

risposta

6

Da y[t] = y[0] + sum epsilon[i], dove il sum è tratta dalla i=1 a i=t, la sequenza y[t] può calcolare contemporaneamente, utilizzando per esempio cumsum funzione R. Ripetendo la serie T = 10³ volte è quindi semplice:

N=T=1e3 
y=t(apply(matrix(sample(c(-1,1),N*T,rep=TRUE),ncol=T),1,cumsum)) 

poiché ciascuna fila di y è poi una serie random walk simulato.