实施 bootstrap 方法对数据集进行重采样。假设对数价格遵循随机游走但使用 ARMA 模型

Implementing the bootstrap method for resampling the data set. Assuming that log prices follow random walk but using ARMA model

#install.packages("quantmod")
#install.packages("dataframes2xls")
#install.packages("bootstrap")
#install.packages("fArma")
library(bootstrap)
library(quantmod)
library(dataframes2xls)
library(fArma)

require(TTR)

getSymbols("SNE",src="yahoo",from = as.Date("2011-04-20"), to =as.Date("2015-04-22")) 

SNElog <- diff( log( Cl( SNE ) ) )
SNElog <- SNElog[-1,]

SNElogT <- as.ts( tail(SNElog, 1000))

SNElogTimeArma <- armaFit( formula=~arima(0,1,0), data=SNElogT )

SNE.Adjusted.boot.sum <- numeric(1000)
for(i in 1:1000)
{
  this.samp <- SNElog [ sample(1000,1000,replace=T, prob=??? )]
  SNE.Adjusted.boot.sum[i] <- sum(this.samp)
}

这是我的代码。

我的教授要求:实施 bootstrap 方法对数据集进行重采样,假设对数价格遵循使用 ARMA 模型的随机游走。

随机游走让我想起了 ARIMA(0,1,0),但我不知道如何将 bootstrap 与 ARMA 模型结合起来。

简单的说,bootstrap就是递归生成有放回的样本来拟合一个模型。然后汇总他们的表现。

下面是获取 bootstrap 系数的快速试验,假设 ARIMA(1, 0, 1)。由于没有明确说明,我不确定实际要求。

library(fArma)
set.seed(1237)
price <- diff(sample(log(100:120), 101, replace = TRUE))

# bootstrap
boot <- function(trial, formula, data) {
  mod <- armaFit(formula, sample(data, trial, replace = TRUE))
  c(mod@fit$coef)
}

coef <- do.call(rbind, lapply(rep(length(price), 2), boot, formula = ~ arima(1,0,1), data = price))
apply(coef, 2, mean)

        ar1         ma1   intercept 
-0.66724275  0.67331811 -0.00551791 

请注意,我只制作了 2 个随机样本 (rep(length(price), 2)),如果设置不同甚至相同设置,您的结果也会有所不同 - 回想一下 bootstrap 会生成随机样本。

bootstrap 的关键思想在于 armaFit(formula, sample(data, trial, replace = TRUE)),其中模型适合 bootstrap 个样本,而不是实际数据。

希望对您有所帮助。