On 11/12/14 20:09, Michael Selevan wrote:
This makes sense, thank you for the thorough response!
One follow up question though. Would your #2 option be the same as, say,
not using the rand.gen at all and providing the following parameters
instead?
y3 <- arima.sim(n=10, list(ar=0.8), innov=rnorm(10, sd=0.2))
No. This will call rand.gen=rnorm() to generate innov.start, so
start.innov will be generated with a standard deviation of 1 rather
than 0.2.
or even
y4 <- arima.sim(n=10, list(ar=0.8), innov=rnorm(10, sd=0.2),
innov.start=rnorm(10, sd=0.2))
Why didn't you try it? It gives an error, saying start.innov is too
short. It needs to be of length *28* according to the error message.
Note that "innov.start" should read "start.innov". My bad;
I got the argument name wrong (on the second attempt!) in my previous
posting.
y4 <- arima.sim(n=10, list(ar=0.8), innov=rnorm(10, sd=0.2),
start.innov=rnorm(28, sd=0.2))
should I think be the same as y2. ***You*** try it and see!
(Set a seed prior to each calculation; that's what seeds are for!)
cheers,
Rolf Turner
<SNIP>
On Wed, Dec 10, 2014 at 1:04 PM, Rolf Turner <r.tur...@auckland.ac.nz
<mailto:r.tur...@auckland.ac.nz>> wrote:
Please see below.
On 10/12/14 20:21, Michael Selevan wrote:
Hello,
I am attempting to plot an AR(1) model with a standard deviation
and I am a
little confused as how to do that. I have been looking through the
interwebs and some documentation and I see that there is
potentially a few
different ways to do this.
First, simply using the documentation I came up with the command
arima.sim(n=10, list(ar=0.8), innov=rnorm(10, sd=0.2))
which would give me the standard deviation I want. Or I believe
that to be
the case. However, after some more searching and googling, I saw
an example
where someone used this as a means of adding the AR error term
error.model=function(n){rnorm(__n, sd=0.2)}
y = arima.sim(n=10, list(ar=0.8), innov=rnorm(10, sd=0.2), rand.gen=
error.model)
Now, I am a little confused by this. Would having the error term
in the
innov parameter as well as the rand.gen be redundant? What would
be the
expected differences between the two? Should only 1 be used?
Just looking for some clarification. Been searching and havent
found too
many examples that explicitly state how to add the error term to
an AR(1)
model.
It's a little bit subtle, but in a way that's not too important.
There is, in addition to "innov" a starting innovations vector
"start.innov" that is needed. If either innov or start.innov is not
supplied their values get supplied by rand.gen(). So in your second
call to arima.sim() ***start.innov*** is being supplied by rand.gen()
(but ***innov*** will be taken to be equal to the argument supplied.
In your first call, where rand.gen() is not specified (and start.innov
is not specified), the supplied value of innov will be used and
start.innov will be produced by the *default* value of rand.gen()
which is rnorm(), you'll get rnorm(n.start,0,1).
Thus in your first call, the starting innovations will be done with
a different standard deviation than the other innovations. Which is
probably not what you want.
Hence the second call is correct --- but it *is* kind of redundant
and confusing to supply "innov" as well as rand.gen(). The code
would be
clearer if "innov" were dispensed with and it was just left to
rand.gen() to do the work.
The following is not important, but it might be mystifying: If you
leave out "innov" you will get a different result --- even if you
set a seed for the random number generators a priori. E.g.:
# 1.
set.seed(42)
innov <- rnorm(10,0,0.2)
error.model=function(n){rnorm(__n, sd=0.2)}
y1 <- arima.sim(n=10, list(ar=0.8), innov=innov,
rand.gen=error.model)
# 2.
set.seed(42)
error.model=function(n){rnorm(__n, sd=0.2)}
y2 <- arima.sim(n=10, list(ar=0.8),rand.gen=error.__model)
The vectors y1 and y2 are (surprisingly until you think carefully)
different.
This is because for y1, innov.start is generated *after* innov is
generated, whereas for y2 innov.start is generated *before* innov is
generated. The first entry of innov for y1 will be the same as the
first entry of innov.start for y2. So the sequence of innovations is
different.
Bottom line: I would recommend *not* using the "innov" argument and
just specifying rand.gen() to get the standard deviations that you want.
HTH
cheers,
Rolf Turner
--
Rolf Turner
Technical Editor ANZJS
--
J. Michael Selevan
--
Rolf Turner
Technical Editor ANZJS
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.