2016-04-29 86 views
1

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

我要模拟它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) 
+0

你的算法是确定的('EPS <旁 - RT(..)'),所以进一步的简化是可能的。 – jogo

回答

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))) 
+0

感谢Jogo回答!我试过你的代码,我得到的矩阵有100行,500列,但是我正在寻找其他方法,即500行和100列?谢谢 – Amanda

+0

't(X)'用于转置 – jogo

+0

再次感谢Jogo给予您的帮助!请问关于矩阵的进一步问题吗?我现在有500 * 100的矩阵,我想做以下代码:#r将矩阵的每一行 W0 = 100 E = 20 constant = exp(cumsum(r)) exp.cum = cumsum(1 /常数) w = const *(W0 - exp.cum) - E w – Amanda