On Mon, Jun 25, 2012 at 05:39:45AM -0700, Kathie wrote:
> Dear R users,
>
> I'd like to compute X like below.
>
> X_{i,t} = 0.1*t + 2*X_{i,t-1} + W_{i,t}
>
> where W_{i,t} are from Uniform(0,2) and X_{i,0} = 1+5*W_{i,0}
>
> Of course, I can do this with "for" statement, but I don't think it's good
> idea because "i" and "t" are too big.
>
> So, my question is that
>
> Is there any better idea to avoid "for" statement for this problem?
Hi.
The recurrence does not use index i. So, it is possible to vectorize
over i. Try the following.
m <- 10 # bound on i
n <- 6 # bound on tt
W <- matrix(runif(m*n, max=2), nrow=m, ncol=n)
X <- matrix(nrow=m, ncol=n)
X[, 1] <- 1 + 5*W[, 1]
for (tt in seq.int(from=2, length=n-1)) {
X[, tt] <- 0.1*(tt-1) + 2*X[, tt-1] + W[, tt]
}
The code uses tt instead of t to avoid confusion with the transpose function.
If n is always at least 2, then seq.int(from=2, length=n-1) may be
replaced by 2:n.
Hope this helps.
Petr Savicky.
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.