簡體   English   中英

如何使用auto.arima函數專門檢查ARIMA中AR或MA的順序值,用於使用R的時間序列數據

[英]How to specifically check value of order of AR or MA in ARIMA using auto.arima function for time series data using R

我如何檢查什么的順序qMA(q)pAR(p)p獨自在ARIMA(p,d,q)或q在ARIMA(p,d,q) 如果我像這樣用arima.sim模擬時間序列數據。

sim <- arima.sim(n=100, list(order = c(1, 0, 1), ar=0.7, ma=-0.3), sd=sqrt(1))

mis <- auto.arima(sim)

我想要一個像p<-function(mis,...)q<-function(mis,...)d<-function(mis,...)這樣的d<-function(mis,...)它會為 p 打印 1 或 1 for q 和 0 表示 d

如何分別保存p,q,d的值,以便我可以調用每個值以供重用?

我不確定是否有可能始終恢復模擬的order= ,因為auto.arima的結果可能會有所不同。 但是auto.arima結果存儲在mis$arma

set.seed(42)
sim <- arima.sim(list(order=c(1, 0, 1), ar=0.7, ma=-0.3), sd=sqrt(1), n=100)
mis <- auto.arima(sim)
mis
# Series: sim 
# ARIMA(1,0,0) with zero mean 
# 
# Coefficients:
#   ar1
# 0.4188
# s.e.  0.0903
# 
# sigma^2 estimated as 0.9638:  log likelihood=-139.65
# AIC=283.29   AICc=283.41   BIC=288.5
fun <- function(x) setNames(x$arma[c(1, 6, 2)], c("p", "d", "q"))
fun(mis)
# p d q 
# 1 0 0

該函數可以擴展為在order=元素之間switch

fun2 <- function(x, v) {
  if (!v %in% c("p", "d", "q"))
  stop('v has to be in c("p", "d", "q")')
  r <- x$arma
  setNames(switch(v, p=r[1], d=r[6], q=r[2]), v)
}
fun2(mis, "p")
# p 
# 1 

您還可以使用:

fun2(mis, "d")
fun2(mis, "q")

你看,函數的結果至少與auto.arima的輸出auto.arima 您可以使用其他set.seed檢查以改變結果。

c(1, 6, 2)順序的解釋可以從?arima幫助頁面的“值”部分導出,該部分指示解密mis$arma如下:

setNames(mis$arma,
         c("AR", "MA", "seas.AR", "seas.MA", 
           "period", "n.seas.dif", "seas.dif"))
# AR         MA    seas.AR    seas.MA     period n.seas.dif   seas.dif 
# 1          0          0          0          1          0          0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM