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.