On 26/06/12 00:39, 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?

Thank you in advance.

You could use "filter()", as follows:

foo <- function (n) {
    w0 <- 1+5*runif(1,0,2)
    w  <- c(w0,runif(n-1,0,2))
    y  <- filter(w,filter=2,method="recursive")
mu <- sapply(0:(n-1),function(k){if(k==0) return(0);sum((1:k)*2^((k-1):0))*0.1})
    mu + y
}

(This of course just does univariate time series and ignores the subscript i.
To get multivariate time series, just use "foo()" to generate as many
components as you want; they are independent.)

Check:

set.seed(42)
x <- foo(10)
x
Time Series:
Start = 1
End = 10
Frequency = 1
 [1]   10.14806   22.27027   45.31282   92.58654  186.85657 375.25133
 [7]  752.57585 1506.12103 3014.35603 6031.02220

set.seed(42)
w0 <- 1+5*runif(1,0,1)
w   <- c(w0,runif(9,0,2)
0.1+2*x[1]+w[2]
[1] 22.27027                    # Bingo.
0.2+2*x[2]+w[3]
[1] 45.31282                    # Bingo.

etc.

Notice that the generated series explodes rather rapidly.

    cheers,

        Rolf Turner

______________________________________________
R-help@r-project.org 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.

Reply via email to