2017-07-05 41 views
1

我使用r中的tbats()函數來創建預測模型。如何在r中的tbats()中手動設置p和q?

我想知道是否有人知道如何手動將ARMA(p,q)直接傳遞到tbats()函數中?

編輯:如果問題很模糊,我很抱歉。在包的文檔中,將打印以下參數說明:

「當爲錯誤選擇ARMA(p,q)模型時傳遞給auto.arima的附加參數(請注意,xreg將被忽略,如將關於季節性和差分,但參數控制p和q的值的任何參數將被使用。)」

它明確指出,手動地控制ARMA(p,q)可以與傳遞參數來進行直接進入tbats()函數。有誰知道如何做到這一點?

https://www.rdocumentation.org/packages/forecast/versions/7.3/topics/tbats

+0

這將是更容易幫助你,如果你提供的[重複的例子(https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)通過示例數據和代碼,您試圖清楚您要做什麼。 – MrFlick

回答

0

不久,你不能。

tbats是一種混合算法,因此您不應該試圖考慮使用它構建ARMA模型。 tbats函數通過布爾型參數use.arma.errors=TRUE/FALSE自動應用arma錯誤項,試圖更好地模擬殘差。

如果你想建立一個ARIMA模型,你可以使用預測包中的auto.arima。

實施例約auto.arima

auto.arima(USJudgeRatings[,1], ic='aicc', stepwise=FALSE, start.p=3, start.q=1, max.p=3, max.q=3) 

實施例約tbats

omega<-USJudgeRatings[,1];p<-10; q<-2; phi<-3; 
tbats(omega, p,q, phi,use.arma.errors=TRUE) 
BATS(0, {0,0}, 0.979, -) 

Call: tbats(y = omega, use.box.cox = p, use.trend = q, use.damped.trend = phi, 
    use.arma.errors = TRUE) 

Parameters 
    Lambda: 0 
    Alpha: -0.04239053 
    Beta: 0.04362955 
    Damping Parameter: 0.978616 

Seed States: 
     [,1] 
[1,] 1.917976 
[2,] 0.017468 

Sigma: 0.1206409 
AIC: 163.774 

在我的參數p,q和披立場use.box.cox,use.trend和use.damped.trend。

更多信息


  1. 有關於使用預測包here的不同模型的優秀示範。 Tbats的

  2. 定義如下:

[Tbats]時間序列分解模型由分解時間 串聯成趨勢,季節性,週期性的,不規則的部件。然後每個組件都被明確地估計和統計測量。然後將每個估計分量重新組合,以便估計最終模型並計算未來的預測。甲BATS模型 然後將包括附加的自迴歸移動平均 組分(P,Q),以更好地在模型 模型殘差給出的任何剩餘的圖案。Source

+1

我明白了。謝謝你的解釋。我想我很困惑 - 在文檔中它看起來像你可以手動控制函數的ARMA(p,q)元素:「當選擇一個ARMA(p,q)時傳遞給auto.arima的附加參數, (請注意,xreg將被忽略,所有與季節性和差異有關的參數**,但控制p和q值的參數將被使用**)。「 – TrevUsesR

0

tbats...參數將被傳遞給auto.arima,從文檔(?tbats

...: Additional arguments to be passed to ‘auto.arima’ when 
     choose an ARMA(p, q) model for the errors. (Note that 
     xreg will be ignored, as will any arguments concerning 
     seasonality and differencing, but arguments controlling 
     the values of p and q will be used.) 

望着文檔auto.arima我們看到有爭論用於設置pq的值。

auto.arima(y, d = NA, D = NA, max.p = 5, max.q = 5, max.P = 2, 
    max.Q = 2, max.order = 5, max.d = 2, max.D = 1, start.p = 2, 
    start.q = 2, start.P = 1, start.Q = 1, stationary = FALSE, 
    seasonal = TRUE, ic = c("aicc", "aic", "bic"), stepwise = TRUE, 
    trace = FALSE, approximation = (length(x) > 150 | frequency(x) > 12), 
    truncate = NULL, xreg = NULL, test = c("kpss", "adf", "pp"), 
    seasonal.test = c("ocsb", "ch"), allowdrift = TRUE, allowmean = TRUE, 
    lambda = NULL, biasadj = FALSE, parallel = FALSE, num.cores = 2, 
    x = y, ...) 

所以,你正在做的工作,增加了論據start.pstart.q,並tracetbats呼叫控制初始值,看到了搜索。

在這個例子中,最好的模型是ARIMA(0, 0, 0) with zero meanBATS(0, {0,0}, 0.979, -)告訴我們選擇了{p, q} = {0, 0}的值。

library(forecast) 

omega <- USJudgeRatings[,1] 

tbats(y    = omega, 
     use.box.cox  = TRUE, 
     use.trend  = TRUE, 
     use.damped.trend = TRUE, 
     use.arma.errors = TRUE, 
     start.p = 3, 
     start.q = 2, 
     trace = TRUE) 
# 
# ARIMA(3,0,2) with non-zero mean : Inf 
# ARIMA(0,0,0) with non-zero mean : -55.63664 
# ARIMA(1,0,0) with non-zero mean : -53.50348 
# ARIMA(0,0,1) with non-zero mean : -53.47905 
# ARIMA(0,0,0) with zero mean  : -57.75828 
# ARIMA(1,0,1) with non-zero mean : -51.19495 
# 
# Best model: ARIMA(0,0,0) with zero mean  
# 
# BATS(0, {0,0}, 0.979, -) 
# 
# Call: tbats(y = omega, use.box.cox = TRUE, use.trend = TRUE, use.damped.trend = TRUE, 
#  use.arma.errors = TRUE, start.p = 3, start.q = 2, trace = TRUE) 
# 
# Parameters 
# Lambda: 0 
# Alpha: -0.04239053 
# Beta: 0.04362955 
# Damping Parameter: 0.978616 
# 
# Seed States: 
#   [,1] 
# [1,] 1.917976 
# [2,] 0.017468 
# 
# Sigma: 0.1206409 
# AIC: 163.774 
+0

太棒了!非常感謝你。這正是我正在尋找的。我不包括'trace = T'的論點。我提出並檢查標記你。但是,我的帳戶是新的。 – TrevUsesR

相關問題