R中的模拟,for循环

时间:2016-04-29 08:44:58

标签: r for-loop

我得到了一个如下所示的R代码​​,以找出最后一行中Y的值,每次运行它时,R将给出100个Y值,因为我将N = 100设置为模拟的开始。 ..

我将模拟它500次以找到500个Y系列。每个模拟包含100个Y值。因此,我希望获得类似500行模拟的矩阵,每行包含100个Y值。我想for循环会有所帮助,但我没弄明白该怎么做?有人可以帮忙吗?非常感谢!!!!!!

N = 100
# set up initial values
alpha1 = 8.439e-02
beta1 = 8.352e-01
mu = 7.483e-03 
omega = 1.343e-04
X_0 = -3.092031e-02
sigma_0 = 0.03573968
eps = rt (N,7.433e+00)

# loops
Xn= numeric (N)
sigma= numeric (N)
sigma[1] = sigma_0
Xn[1] = X_0
for (t in 2:N){
  sigma[t] = sqrt (omega + alpha1 * (Xn[t-1])^2 + beta1* (sigma[t-1])^2)
  Xn[t] = sigma[t] * eps[t]
}
Y = mu + Xn
head(Y)

1 个答案:

答案 0 :(得分:1)

将所有内容放入函数getY <- function(N) { ... }并使用replicate(500, getY(100))。所以你可以这样做:

getY <- function(N) {
  # set up initial values
  alpha1 <- 8.439e-02
  beta1  <- 8.352e-01
  mu     <- 7.483e-03 
  omega  <- 1.343e-04
  X_0    <- -3.092031e-02
  sigma_0 <- 0.03573968
  eps     <- rt(N, 7.433e+00)

  # loops
  Xn    <- numeric (N)
  sigma <- numeric (N)
  sigma[1] <- sigma_0
  Xn[1]    <- X_0
  for (t in 2:N) {
    sigma[t] <- sqrt (omega + alpha1 * (Xn[t-1])^2 + beta1* sigma[t-1])^2)
    Xn[t]    <- sigma[t] * eps[t]
  }
  Y <- mu + Xn
}

X <- replicate(500, getY(100))

如果需要,可以使用t()转置结果,即

X <- t(replicate(500, getY(100)))