这个 R 脚本生成时间序列的集合。该系列源自函数 f(t) = alpha * f(t-0) + epsilon,其中 epsilon 是来自正态分布的随机数。
最终结果是从不同的 alpha 值生成的集合列表。
它如何被矢量化?使用基本函数会很棒,但也欢迎需要额外包的解决方案。
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)