Learn R Programming

dyn (version 0.2-9.6)

dyn: dynamic regression class

Description

dyn is used to construct objects of class "dyn"

Usage

dyn(x)

Arguments

x

an object, typically a "formula" object or an object produced by "lm", "glm" or other regression function.

Value

"dyn" returns its argument with the class name "dyn" prepended to its class vector. The "fitted", "residuals" and "predict" "dyn" methods return time series of the appropriate class. "model.frame" creates a model frame with an attribute of "series" that contains a data frame of the time series and factor variables as columns. "model.matrix" returns a model matrix of class "matrix".

Details

"dyn" enables regression functions that were not written to handle time series to handle them. Both the dependent and independent variables may be time series and they may have different time indexes (in which case they are automatically aligned). The time series may also have missing values including internal missing values.

"dyn" currently works with any regression function that makes use of "model.frame" and is written in the style of "lm". This includes "lm", "glm", "loess", "rlm" (from "MASS"), "lqs" (from "MASS"), "MCMCregress" (from "MCMCpack"), "randomForest" (from "randomForest"), "rq" (from "quantreg") and others. The time series objects can be one of the following classes: "ts", "irts", "its", "zoo" or "zooreg".

Typically "dyn" is used like this "dyn$lm(y ~ lag(y, -1))". That is, one prepends the usual "lm" or other regression function with "dyn$" and then uses time series including "lag" and "diff" operators in the formula. The returned object has a class vector beginning with "dyn" and includes all classes that it would have had without "dyn". "dyn" methods include "model.frame", "fitted", "residuals", "predict", "update", "anova" and "$" methods. These methods preprocess their arguments, call the real method which does the actual work and then post process the returned object. In the case of "fitted", "residuals" and "predict" they ensure that the result is a time series. In the case of anova the times of the objects are intersected so that they all have the same time indexes to ensure that a comparable input is provided to "anova".

See Also

See Also model.frame, predict, fitted, residuals, anova, update, lm, glm, loess

Examples

Run this code
# NOT RUN {
y <- ts(1:12, start = c(2000,2), freq = 4)^3
x <- ts(1:9, start = c(2000,3), freq = 4)^2

# can be used with numerous different regression functions
y.lm <- dyn$lm( window(y, start = c(2000,4)) ~ diff(x) )
y.lm <- dyn$lm( y ~ diff(x) )
y.glm <- dyn$glm( y ~ diff(x) )
y.loess <- dyn$loess( y ~ diff(x) )

y.lm <- dyn(lm(dyn(y ~ diff(x))))  # same
y.lm
summary(y.lm)
residuals(y.lm)
fitted(y.lm)
y2.lm <- update(y.lm, . ~ . + lag(x,-1))
y2.lm
anova(y.lm, y2.lm)

# examples of using data
dyn$lm(y ~ diff(x), list(y = y, x = x))
dyn$lm(y ~ diffx, list(y = y, diffx = diff(x)))

# invoke model.frame on formula as a dyn object
dyn$model.frame( y ~ diff(x) )

# superimpose a loess fit on Nile time series data
plot(Nile)
lines(fitted(dyn$loess(Nile ~ time(Nile))), col = "red")

# lag.zoo can take vector lags
set.seed(1)
yz <- zoo(rnorm(100)); xz <- zoo(rnorm(100))
yz.lm <- dyn$lm(yz ~ lag(xz, 0:-3))


###
# simulate series and then NA out 7:10 and predict them
###

library(dyn)
set.seed(123)
tz <- zoo(cbind(Y = 0, x = rnorm(10), z = rnorm(10)))

# simulate values
for(i in 2:10) {
 tz$Y[i] <- with(as.data.frame(tz), 
	2*Y[i-1] + 3*z[i] +4* x[i] + 5*x[i-1] + rnorm(1))
}

# keep copy of tz to compare later to simulated Y's
tz.orig <- tz

# NA out Y's that are to be predicted
tz[7:10, "Y"] <- NA

L <- function(x, k = 1) lag(x, -k)

# predict 1 ahead each iteration
for(i in 7:10) {
   # fit based on first i-1 values
   fit <- dyn$lm(Y ~ L(Y) + z + L(x, 0:1), tz, subset = seq_len(i-1))
   # get prediction for ith value
   tz[i, "Y"] <- tail(predict(fit, tz[1:i,]), 1)
}
cbind(pred = tz[7:10, "Y"], act = tz.orig[7:10, "Y"])


# }

Run the code above in your browser using DataLab