Time-Series

時間序列模型可以應用於合成數據嗎

  • October 6, 2020

我想知道時間序列是否必須包含真實(測量)數據,或者它是否也包含合成數據(例如來自模擬)。將時間序列模型(如 MA 或 ARIMA)應用於合成數據是否有意義?

如果你介意回答我的問題,我會很高興。

將時間序列技術應用於模擬數據非常普遍,而且確實很有啟發性。

例如:選擇一個具有良好參數的合理順序的 ARIMA 模型,對其進行模擬並將某種自動 ARIMA 擬合器應用於模擬序列(如forecast::auto.arima()在 R 中)。原始模型多久恢復一次?答案:出乎意料地很少。像這樣的模擬,你知道基本事實,可以教會你很多謙遜。

再說一遍,老實說,如果一篇論文將其新方法應用於模擬數據,而不是實時序列,我往往會失去興趣。以支持您的寵物理論的方式調整模擬非常容易。有了真實數據,就沒有那麼多了。(是的,我們可以選擇數據集並過擬合保留數據。)

所以:將方法應用於模擬數據應該是每個時間序列分析師工具箱的一部分。在其他工具中。


讓我們看一個小例子。我們將模擬 $ n=200 $ 來自 ARIMA(1,1,1) 過程的數據點,其 AR(1) 係數為 $ \phi_1=0.5 $ , an MA(1) coefficient of $ \theta_1=-0.3 $ 和默認的噪音 $ \epsilon\sim N(0,1) $ . 然後我們應用auto.arima()到模擬序列並詢問是否auto.arima()至少得到了順序(1,1,1) 正確。我們將整個過程執行 1,000 次:

require(forecast)
n_sims <- 1e3
n_obs <- 200
model_true <- list(ar=0.5,ma=-0.3,order=c(1,1,1))

correct <- rep(FALSE,n_sims)
pb <- winProgressBar(max=n_sims)
for ( ii in 1:n_sims ) {
   setWinProgressBar(pb,ii,paste(ii,"of",n_sims))
   set.seed(ii) # for reproducibility
   sim <- arima.sim(model=model_true,n=n_obs)
   model <- auto.arima(sim)
   correct[ii] <- isTRUE(all.equal(model$arma,c(1,1,0,0,1,1,0)))   
   # this corresponds to ARIMA(1,1,1), see ?arima
}
close(pb)
summary(correct)

事實證明,僅在 105 個案例中,我們甚至得到了正確的順序。我認為這教會了我們一些關於識別正確 ARIMA 順序的固有困難。

當然,如果我們增加參數值,減少噪聲或增加序列的長度,我們會更經常是對的。

下一步不會像我在這裡所做的那樣憑空提取參數值。相反,我們可以為我們心目中的應用程序採用“典型”的時間序列。對其擬合一個 ARIMA 模型,然後使用擬合的階數、參數和殘差作為該模擬的輸入,即將擬合的 ARIMA 模型視為真實的數據生成過程。您仍然會驚訝於這樣的(“現實的”!)DGP 會被auto.arima(). (這是 ARIMA 模型擬合的黃金標準,我趕緊說。)當然,您可以使用指數平滑和/或其他時間序列方法進行類似的練習。

這就是模擬序列在時間序列分析中佔有一席之地的原因。

引用自:https://stats.stackexchange.com/questions/490685

comments powered by Disqus