Hi, Gabor, got it. Thanks a lot.
I have one more question about how the "predict" function works here,
especially for the lag(Y,-1) part.

In my model, I assume I know predictors x and z in the next two years, and
use them to predict Y. For each forecast step at time t, the lag(Y,-1) in
the model should be the estimated result from the last forecast step. For
example, the prediction of the Y in 2007 should be based on the estimated Y
for 2006, not the actual number already in my dataset. Before I report my
results, I want to make sure the "predict" function works in this way.
Thanks.

Harry



On Thu, Jul 23, 2009 at 10:28 AM, Gabor Grothendieck <
[email protected]> wrote:

> Please provide your code in a reproducible form (as requested previously).
>
> Here we fit with first 9 points and then add a point for prediction.  (Of
> course your model can only predict the current value of Y so you may
> have to rethink your model even aside from the implementation if you
> really want to predict future values of Y.)
>
> > library(dyn)
> > set.seed(123)
> > tt <- ts(cbind(Y = 1:10, x = rnorm(10), z = rnorm(10)))
> > L <- function(x, k = 1) lag(x, -k)
> > tt.zoo <- as.zoo(tt)
> > fit <- dyn$lm(Y ~ L(Y) + L(x, 0:2) + z, tt.zoo[-10, ])
> > predict(fit, tt.zoo)
>  1  2  3  4  5  6  7  8  9 10 11 12
> NA NA  3  4  5  6  7  8  9 10 NA NA
>
>
>
>
> On Thu, Jul 23, 2009 at 1:01 PM, Hongwei Dong<[email protected]> wrote:
> > Hi, Gabor and Other R users,
> >   I'm re-posting my script and the results I got.
> >
> >   here is the dynamic model I used to estimate in-sample model
> (1996-2006)
> > and it works:
> >
> >   fit<-dyn$lm(Y~lag(Y,-1)+z+x+lag(x,-1)+lag(x,-2)+lag(x,-3)+lag(x,-4))
> >   Then I used this model to do out sample forecast with the following
> > scripts, which do not work:
> >
> >  z<-ts(Z[41:52],start=2006,frequency=4)
> >  x<-ts(X[41:52],start=2006,frequency=4)
> > newdata<-data.frame(cbind(z,x))
> > newdata<-ts(newdata,start=2006,frequency=4)
> > pred<-predict(fit,newdata)
> > Here is the results I got from R:
> >              Qtr1     Qtr2     Qtr3     Qtr4
> > 2006       NA       NA       NA       NA
> > 2007 3083.362       NA       NA       NA
> > 2008       NA       NA       NA       NA
> > 2009       NA       NA       NA       NA
> >
> > I got only one prediction for the first quarter in 2007. Intuitively,
> there
> > might be two problems: the definition of the newdata and how to define Y
> in
> > newdata. But I just can't figure this out. It will greatly appreciated if
> > someone can give me some help. Thanks.
> > Harry
> >
> >
> > On Thu, Jul 23, 2009 at 5:15 AM, Gabor Grothendieck
> > <[email protected]> wrote:
> >>
> >> You have to use consistent classes.  You can't start out using
> >> ts class and then suddenly switch to zoo class as if you had been
> >> using zoo all along.   Either use ts everywhere or zoo everywhere.
> >>
> >> Also in the future please post reproducible examples as requested
> >> at the bottom of every message to r-help.  That means include
> >> a minimal amount of data so we can get exactly what you
> >> are getting.
> >>
> >> On Thu, Jul 23, 2009 at 4:48 AM, Hongwei Dong<[email protected]> wrote:
> >> > Thanks, Gabor. This is really helpful.
> >> > When the regressive part, lag(Y,-1), is not included, my sytax works
> >> > well.
> >> > However, when I include the lag(Y) in the model, the prediction part
> >> > does
> >> > not work. Here is my sytax for in-sample estimation and it works well:
> >> > fit<-dyn$lm(Y~lag(Y,-1)+x+lag(x,-1)+lag(x,-2)+lag(x,-3)+lag(x,-4)+z).
> >> > Then I use this model to do out of sample prediction:
> >> > x<-ts(X[41:52],start=2006,frequency=4)
> >> > z<-ts(Z[41:52],start=2006,frequency=4)
> >> > newdata<-data.frame(cbind(x,z))
> >> > newdata<-zooreg(newdata)
> >> > pred<-predict(fit,newdata)
> >> > With these, I got weird result, a prediction for each year from year 1
> >> > to
> >> > the first quarter of year 2007 (all "NA"). What I expect is a
> prediction
> >> > for
> >> > the 8 quarters from 2007 to 2008. Intuitively, I know there must be
> >> > something wrong with my newdata definition. But I can't figure it out.
> >> > I'll
> >> > appreciate it very much if you can give some suggestions to modify my
> >> > syntax. Thanks.
> >> >
> >> > Harry
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > On Wed, Jul 22, 2009 at 10:53 PM, Gabor Grothendieck
> >> > <[email protected]> wrote:
> >> >>
> >> >> Here is an example closer to yours.
> >> >>
> >> >> > library(dyn)
> >> >> > set.seed(123)
> >> >> > x <- zooreg(rnorm(10))
> >> >> > y <- zooreg(rnorm(10))
> >> >> > L <- function(x, k = 1) lag(x, k = -k)
> >> >> > mod <- dyn$lm(y ~ L(y) + L(x, 0:2))
> >> >> > mod
> >> >>
> >> >> Call:
> >> >> lm(formula = dyn(y ~ L(y) + L(x, 0:2)))
> >> >>
> >> >> Coefficients:
> >> >> (Intercept)         L(y)   L(x, 0:2)1   L(x, 0:2)2   L(x, 0:2)3
> >> >>    0.06355     -0.74540      0.63649      0.44957     -0.41360
> >> >>
> >> >> > newdata <- cbind(x = c(coredata(x), rnorm(1)), y = c(coredata(y),
> >> >> > rnorm(1)))
> >> >> > newdata <- zooreg(newdata)
> >> >> > predict(mod, newdata)
> >> >>         1          2          3          4          5          6
> >> >>  7
> >> >>        NA         NA  0.9157808  0.6056333 -0.5496422  1.5984615
> >> >> -0.2574875
> >> >>         8          9         10         11         12         13
> >> >> -1.6148859  0.3329285 -0.5284646 -0.1799693         NA         NA
> >> >>
> >> >>
> >> >> On Thu, Jul 23, 2009 at 1:04 AM, Gabor
> >> >> Grothendieck<[email protected]> wrote:
> >> >> > Use dyn.predict like this:
> >> >> >
> >> >> >> library(dyn)
> >> >> >> x <- y <- zoo(1:5)
> >> >> >> mod <- dyn$lm(y ~ lag(x, -1))
> >> >> >> predict(mod, list(x = zoo(6:10, 6:10)))
> >> >> >  7  8  9 10
> >> >> >  7  8  9 10
> >> >> >
> >> >> >
> >> >> > On Thu, Jul 23, 2009 at 12:54 AM, Hongwei Dong<[email protected]>
> >> >> > wrote:
> >> >> >> I have a dynamic time series model like this:
> >> >> >> dyn$lm( y ~ lag(y,-1) + x + lag(x,-1)+lag(x,-2) )
> >> >> >>
> >> >> >> I need to do an out of sample forecast with this model. Is there
> any
> >> >> >> way I
> >> >> >> can do this with R?
> >> >> >> It would be greatly appreciated if some one can give me an
> example.
> >> >> >> Thanks.
> >> >> >>
> >> >> >>
> >> >> >> Harry
> >> >> >>
> >> >> >>        [[alternative HTML version deleted]]
> >> >> >>
> >> >> >> ______________________________________________
> >> >> >> [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.
> >> >> >>
> >> >> >
> >> >
> >> >
> >
> >
>

        [[alternative HTML version deleted]]

______________________________________________
[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.

Reply via email to