9.5 Implementación en R
con el paquete boot
La función tsboot()
del paquete boot
implementa distintos métodos
de remuestreo para series de tiempo.
library(boot)
# ?tsboot
9.5.1 Rnews 1
Canty, A. J. (2002). Resampling methods in R: the boot package. Rnews: The Newsletter of the R Project, 2 (3), pp. 2-7.
"
tsboot()
can do either of these methods by specifyingsim="fixed"
orsim="geom"
respectively. A simple call to tsboot includes the time series, a function for thestatistic
(the first argument of this function being the time series itself), the number of bootstrap replicates, the simulation type and the (mean) block length’’.
# Datos
data(lynx)
# ?lynx
# Boot
library(boot)
<- function(tsb) {
lynx.fun <- ar(tsb, order.max = 25)
fit c(fit$order, mean(tsb))
}# tsboot
set.seed(1)
tsboot(log(lynx), lynx.fun, R = 199, sim = "geom", l = 20)
##
## STATIONARY BOOTSTRAP FOR TIME SERIES
##
## Average Block Length of 20
##
## Call:
## tsboot(tseries = log(lynx), statistic = lynx.fun, R = 199, l = 20,
## sim = "geom")
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 11.000000 -6.46733668 2.4675036
## t2* 6.685933 -0.01494926 0.1163515
9.5.2 Rnews 2
Canty, A. J. (2002). Resampling methods in R: the boot package. Rnews: The Newsletter of the R Project, 2 (3), pp. 2-7.
"An alternative to the block bootstrap is to use model based resampling. In this case a model is fitted to the time series so that the errors are i.i.d. The observed residuals are sampled as an i.i.d. series and then a bootstrap time series is reconstructed. In constructing the bootstrap time series from the residuals, it is recommended to generate a long time series and then discard the initial burn-in stage. Since the length of burn-in required is problem specific,
tsboot
does not actually do the resampling. Instead the user should give a function which will return the bootstrap time series. This function should take three arguments, the time series as supplied totsboot
, a valuen.sim
which is the length of the time series required and the third argument containing any other information needed by the random generation function such as coefficient estimates. When the random generation function is called it will be passed the argumentsdata
,n.sim
andran.args
passed totsboot
or their defaults.One problem with the model-based bootstrap is that it is critically dependent on the correct model being fitted to the data. Davison and Hinkley (1997) suggest post-blackening as a compromise between the block bootstrap and the model-based bootstrap. In this method a simple model is fitted and the residuals are found. These residuals are passed as the dataset to
tsboot
and are resampled using the block (or stationary) bootstrap. To create the bootstrap time series the resampled residuals should be put back through the fitted model filter. The functionran.gen
can be used to do this’’.
# Datos
<- log(lynx)
lynx1 # Modelo
<- ar(lynx1)
lynx.ar # Residuos
<- with(lynx.ar, resid[!is.na(resid)])
lynx.res <- lynx.res - mean(lynx.res)
lynx.res # Boot
library(boot)
<- c(lynx.ar$order, 0, 0)
lynx.ord <- list(order = lynx.ord, ar = lynx.ar$ar)
lynx.mod <- list(mean = mean(lynx1), model = lynx.mod)
lynx.args <- function(res, n.sim, ran.args) {
lynx.black <- ran.args$mean
m <- ran.args$model
ts.mod + filter(res, ts.mod$ar, method = "recursive")
m
}# tsboot
set.seed(1)
tsboot(lynx.res, lynx.fun, R = 199, l = 20,
sim = "fixed", n.sim = 114,
ran.gen = lynx.black, ran.args = lynx.args)
##
## POST-BLACKENED BLOCK BOOTSTRAP FOR TIME SERIES
##
## Fixed Block Length of 20
##
## Call:
## tsboot(tseries = lynx.res, statistic = lynx.fun, R = 199, l = 20,
## sim = "fixed", n.sim = 114, ran.gen = lynx.black, ran.args = lynx.args)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 0.0000e+00 9.819095 3.46664295
## t2* 6.1989e-18 6.683323 0.09551445