This R script generates ensembles of time series. The series are derived from function f(t) = alpha * f(t-0) + epsilon, where epsilon is a random number from a normal distribution.
The final result is a list of ensembles generated from different values of alpha.
How can it be vectorized? Using base functions would be great, but solutions that require additional packages are welcome too.
steps <- 1000 # number of times each "pseudo random walk" is iterated
N <- 5 # number of walks in each ensemble
mu <- 0 # normal distribution mean
mysd <- 1 # normal distribution standard deviation
alphas <- c(0, 0.5, 0.7, 1, 1.5, 2) # set of different alphas to generate ensembles with
# Pseudo random walk generator
generate.rw <- function(steps, alpha, my, mysd) {
epsilons <- rnorm(n = steps, mean = mu, sd = mysd)
rw <- vector(,steps)
rw[1] <- epsilons[1]
for (i in 2:steps) rw[i] <- alpha * rw[i-1] + epsilons[i]
return(rw)
}
# Ensemble generator
ensemble <- function(N, steps, alpha, mu, mysd) {
result <- matrix(,N,steps)
for (i in 1:N) result[i,] <- generate.rw(steps, alpha, my, mysd)
return(result)
}
# Get a list of ensembles with different values of alpha
ensembles <- lapply(alphas, ensemble, steps = steps, N = N, mu = mu, mysd = mysd)