時間序列模型可以應用於合成數據嗎
我想知道時間序列是否必須包含真實(測量)數據,或者它是否也包含合成數據(例如來自模擬)。將時間序列模型(如 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 模型擬合的黃金標準,我趕緊說。)當然,您可以使用指數平滑和/或其他時間序列方法進行類似的練習。這就是模擬序列在時間序列分析中佔有一席之地的原因。