如何使用arima.sim和估计模型模拟AR(1)过程?

如何使用arima.sim和估计模型模拟AR(1)过程?,r,R,我想执行以下两个步骤: 基于给定的时间序列,我想校准AR(1)过程,即我想估计参数 基于估计的参数,我想模拟一个AR(1)过程 我的方法如下: 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 wi

我想执行以下两个步骤:

  • 基于给定的时间序列,我想校准AR(1)过程,即我想估计参数
  • 基于估计的参数,我想模拟一个AR(1)过程
  • 我的方法如下:

    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
    
    set.seed(123)
    #仅生成随机AR(1)时间序列;基于此,我想估计参数
    
    t_AR它不是世界上最清晰的界面,但
    模型
    参数是一个给出ARMA顺序的列表,而不是实际的
    arima
    模型

    arima.sim(model=as.list(coef(model_AR)), n=100)
    

    这将创建一个AR系数为.489的模拟序列,根据您的起始数据进行估计。请注意,截距被忽略。

    我认为您使用的方法不正确,因为您的系数估计值存在不确定性。 以适当的方式实现目标的最佳方法是在生成过程中加入不确定性,可能有参数化的方法可以做到这一点,但我认为bootstrap在这里很方便

    让我们先生成AR进程

    set.seed(123)
    ts_AR <- arima.sim(n = 10000, list(ar = 0.5))
    
    set.seed(123)
    
    这当然是一个有趣的补充点(so+1),但我并不特别关心。现在,我只想模拟一个过程,想知道为什么它没有像我在R中尝试的那样工作。@Christoph_J我知道我只是想分享我对这个问题的观点,但你肯定是对的,编程而不是统计!!!要创建绘图:
    hist(coefmat,col=“blue”)
    abline(v=mean(coefmat),col=“red”)
    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)