Spencer,
You may want to peruse the list archive for posts that match 'ts' and are
written by Brian Ripley -- these issues have come up before.
The ts class is designed for arima and friends (like Kalman filtering), and
very useful in that context, but possibly not so much anywhere else. lag()
only shifts the _reference dates_ attached to the object. So in a data.frame
context (as for lm()) .... nothing happens.
Personally, I use its as my main container for daily or weekly data. There is
also zoo, which I have meant to examine more closely for a while now.
Here is the example redone using zoo:
R> # here it is redone using zoo objects
R>
R> # following 3 lines are from the original post
R> set.seed(1)
R> x <- rep(c(rep(0, 4), 9), len=9)
R> y <- (rep(c(rep(0, 5), 9), len=9)+rnorm(9)) # y[t] = x[t-1]+e
R>
R> library(zoo)
R>
R> yz <- zoo(y); xz <- zoo(x)
R> lm(I(yz ~ xz))
Call:
lm(formula = I(yz ~ xz))
Coefficients:
(Intercept) xz
1.2872 -0.1064
R> lm(I(yz ~ lag(xz, -1)))
Call:
lm(formula = I(yz ~ lag(xz, -1)))
Coefficients:
(Intercept) lag(xz, -1)
0.4392 0.8600
R>
R> z <- merge(yz, xz)
R> arima(coredata(z[,1]), order = c(1,1,1), xreg = coredata(z[,2]))
Call:
arima(x = coredata(z[, 1]), order = c(1, 1, 1), xreg = coredata(z[, 2]))
Coefficients:
ar1 ma1 coredata(z[, 2])
0.3906 -1.0000 -0.3803
s.e. 0.4890 0.4119 0.3753
sigma^2 estimated as 7.565: log likelihood = -20.2, aic = 48.4
R> zz <- merge(yz, lag(xz, -1))
R> arima(coredata(zz[,1]), order = c(1,1,1), xreg = coredata(zz[,2]))
Call:
arima(x = coredata(zz[, 1]), order = c(1, 1, 1), xreg = coredata(zz[, 2]))
Coefficients:
ar1 ma1 coredata(zz[, 2])
-0.2991 -0.8252 0.8537
s.e. 0.4516 1.0009 0.0838
sigma^2 estimated as 0.444: log likelihood = -7.9, aic = 23.8