我想做以下两个步骤:
这是我的方法:
set.seed(123)
#Just generate random AR(1) time series; based on this, I want to estimate the parameters
ts_AR <- arima.sim(n=10000, list(ar=c(0.5)))
#1. Estimate parameters with arima()
model_AR <- arima(ts_AR, order=c(1,0,0))
#Looks actually good
model_AR
Series: ts_AR
ARIMA(1,0,0) with non-zero mean
Coefficients:
ar1 intercept
0.4891 -0.0044
s.e. 0.0087 0.0195
sigma^2 estimated as 0.9974: log likelihood=-14176.35
AIC=28358.69 AICc=28358.69 BIC=28380.32
#2. Simulate based on model
arima.sim(model=model_AR, n = 100)
Error in arima.sim(model = model_AR, n = 100) :
'ar' part of model is not stationary
我不是最大的时间序列专家,但我很确定持久性参数低于1的AR(1)过程应该会产生静态模型。但是,错误消息告诉我一些事情
不同。那么我在这里做些蠢事吗?如果是这样,为什么以及如何根据我的估计参数模拟AR(1)过程。或者你不能只将arima
的输出作为模型输入传递给arima.sim
吗?然而,然而,我不明白我是如何得到这样的错误信息...我希望像“模型输入这样的东西无法读取。它应该像......”
答案 0 :(得分:6)
这不是世界上最清晰的界面,但model
参数是一个给出ARMA顺序的列表,而不是实际的arima
模型。
arima.sim(model=as.list(coef(model_AR)), n=100)
这将根据您的起始数据创建一个AR系数.489的模拟系列。请注意,拦截将被忽略。
答案 1 :(得分:4)
我不认为您使用正确的方法,因为您的系数估计存在不确定性。 以正确的方式实现你想要的最好的方法是在生成过程中加入不确定性,可能有参数化方法,但我认为bootstrap在这里很方便。
让我们先生成AR流程
set.seed(123)
ts_AR <- arima.sim(n = 10000, list(ar = 0.5))
我们将定义将在boostrap中使用的两个辅助函数。第一个生成我们需要的统计数据(这里是AR过程的系数和实际时间序列),第二个函数实现我们的重采样方案(它将基于残差)
ar_fun <- function(ts) c(ar = coef(arima(ts, order = c(1, 0, 0),
include.mean = FALSE)), ts = ts)
ar_sim <- function(res, n.sim, ran.args) {
rg <- function(n, res) sample(res, n, replace = TRUE)
ts <- ran.args$ts
model <- ran.args$model
arima.sim(model = model, n = n.sim,
rand.gen = rg, res = c(res))
}
现在我们可以开始模拟了
ar_fit <- arima(ts_AR, order = c(1, 0, 0), include.mean = FALSE)
ts_res <- residuals(ar_fit)
ts_res <- ts_res - mean(ts_res)
ar_model <- list(ar = coef(ar_fit))
require(boot)
set.seed(1)
ar_boot <- tsboot(ts_res, ar_fun,
R = 99, sim = "model",
n.sim = 100, orig.t = FALSE,
ran.gen = ar_sim,
ran.args = list(ts = ts_AR, model = ar_model))
如果您想获得所有生成的系数和相关的时间序列
coefmat <- apply(ar_boot$t, 1, "[", 1)
seriesmat <- apply(ar_boot$t, 1, "[", -1)
您可以在tsboot
和Bootstrap Methods and Their Application第8章的帮助文件中获取更多详细信息。