自從Sims(1980)發表開創性的論文以來,向量自迴歸模型已經成爲宏觀經濟研究中的關鍵工具。這篇文章介紹了VAR分析的基本概念,並指導了簡單模型的估算過程。python
VAR表明_向量自迴歸_。爲了理解這意味着什麼,讓咱們首先來看一個簡單的單變量(即僅一個因變量或內生變量)自迴歸(AR)模型,其形式爲yt=a1yt−1+et。dom
在估算此類模型以前,應始終檢查所分析的時間序列是否穩定,即它們的均值和方差隨時間變化是恆定的,而且不顯示任何趨勢行爲。 函數
有一系列統計檢驗,例如Dickey-Fuller,KPSS或Phillips-Perron檢驗,以檢驗序列是否穩定。另外一種很是常見的作法是繪製序列並檢查其是否圍繞恆定的平均值(即水平線)移動。若是是這種狀況,它極可能是穩定的。工具
像AR(p)模型同樣,僅憑其自身的滯後對宏觀經濟變量進行迴歸多是一種限制性很大的方法。一般,更合適的假設是還有其餘因素。經過包含因變量的滯後值以及其餘(即,外生)變量的同期和滯後值的模型來實現這種想法。一樣,這些外生變量應該是穩定的。對於內生變量yt和外生變量xt例如_自迴歸分佈滯後_或ADL,模型能夠寫成性能
yt=a1yt−1+b0xt+b1xt−1+et.spa
這種ADL模型的預測性能可能會比簡單的AR模型更好。可是,若是外生變量也依賴於內生變量的滯後值怎麼辦?這意味着xt也是內生的,還有進一步的空間能夠改善咱們的預測。code
所以,如上所述,VAR模型能夠重寫爲一系列單獨的ADL模型。實際上,能夠經過分別估計每一個方程來估計VAR模型。orm
標準VAR模型的協方差矩陣是_對稱的_,即,對角線右上角的元素(「上三角」)將對角線左下角的元素(「下三角」)鏡像。這反映了這樣一種想法,即內生變量之間的關係僅反映相關性,而且不容許作出因果關係的陳述,由於在每一個方向上的影響都是相同的。 blog
在所謂的_結構化_ VAR(SVAR)模型的背景下分析了同時因果關係,或更確切地說,是變量之間的結構關係,該模型對協方差矩陣施加了限制 。 ip
在本文中,我考慮VAR(2)過程。
此示例的人工樣本是在R中生成的
set.seed(123) # 因爲可複製性的考慮,重置隨機數發生器 # 生成樣本 t <- 200 # 時間序列觀察數 k <- 2 # 內生變量數 p <- 2 # 滯後階數 # 生成係數矩陣 A.1 <- matrix(c(-.3, .6, -.4, .5), k) # 滯後係數矩陣1 A.2 <- matrix(c(-.1, -.2, .1, .05), k) # 滯後係數2 A <- cbind(A.1, A.2) # 係數矩陣 # 生成序列 series <- matrix(0, k, t + 2*p) # 帶有0的原始序列 for (i in (p + 1):(t + 2*p)){ # 生成e ~ N(0,0.5)的序列 series[, i] <- A.1%*%series[, i-1] + A.2%*%series[, i-2] + rnorm(k, 0, .5) } series <- ts(t(series[, -(1:p)])) # 轉換爲時間序列格式 names <- c("V1", "V2") # 重命名變量 plot.ts(series) # 繪製序列
簡單VAR模型的參數和協方差矩陣的估計很簡單。
爲了估計VAR模型,加載並指定數據(y
)和 模型。
VAR分析中的一箇中心問題是找到滯後的階數,以產生最佳結果。模型比較一般基於信息標準,例如AIC,BIC或HQ。一般,因爲是小樣本預測,AIC優於其餘標準。可是,BIC和HQ在大型樣本中效果很好 。
能夠計算標準信息標準以找到最佳模型。在此示例中,咱們使用AIC:
經過查看,summary
咱們能夠看到AIC建議使用2的階數。
summary(var.aic)
## VAR Estimation Results: ## ========================= ## Endogenous variables: Series.1, Series.2 ## Deterministic variables: none ## Sample size: 200 ## Log Likelihood: -266.065 ## Roots of the characteristic polynomial: ## 0.6611 0.6611 0.4473 0.03778 ## Call: ## VAR(y = series, type = "none", lag.max = 5, ic = "AIC") ## ## ## Estimation results for equation Series.1: ## ========================================= ## Series.1 = Series.1.l1 + Series.2.l1 + Series.1.l2 + Series.2.l2 ## ## Estimate Std. Error t value Pr(>|t|) ## Series.1.l1 -0.19750 0.06894 -2.865 0.00463 ** ## Series.2.l1 -0.32015 0.06601 -4.850 2.51e-06 *** ## Series.1.l2 -0.23210 0.07586 -3.060 0.00252 ** ## Series.2.l2 0.04687 0.06478 0.724 0.47018 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## ## Residual standard error: 0.4638 on 196 degrees of freedom ## Multiple R-Squared: 0.2791, Adjusted R-squared: 0.2644 ## F-statistic: 18.97 on 4 and 196 DF, p-value: 3.351e-13 ## ## ## Estimation results for equation Series.2: ## ========================================= ## Series.2 = Series.1.l1 + Series.2.l1 + Series.1.l2 + Series.2.l2 ## ## Estimate Std. Error t value Pr(>|t|) ## Series.1.l1 0.67381 0.07314 9.213 < 2e-16 *** ## Series.2.l1 0.34136 0.07004 4.874 2.25e-06 *** ## Series.1.l2 -0.18430 0.08048 -2.290 0.0231 * ## Series.2.l2 0.06903 0.06873 1.004 0.3164 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## ## Residual standard error: 0.4921 on 196 degrees of freedom ## Multiple R-Squared: 0.3574, Adjusted R-squared: 0.3443 ## F-statistic: 27.26 on 4 and 196 DF, p-value: < 2.2e-16 ## ## ## ## Covariance matrix of residuals: ## Series.1 Series.2 ## Series.1 0.21417 -0.03116 ## Series.2 -0.03116 0.24154 ## ## Correlation matrix of residuals: ## Series.1 Series.2 ## Series.1 1.000 -0.137 ## Series.2 -0.137 1.000` 仔細觀察結果,咱們能夠將真實值 與模型的參數估計值進行比較:
`
A ## [,1] [,2] [,3] [,4] ## [1,] -0.3 -0.4 -0.1 0.10 ## [2,] 0.6 0.5 -0.2 0.05 # Extract coefficients, standard errors etc. from the object # produced by the VAR function est_coefs <- coef(var.aic) # 僅提取兩個因變量的係數,並將它們組合爲一個矩陣 # 輸出四捨五入的估計值 round(est_coefs, 2) ## Series.1.l1 Series.2.l1 Series.1.l2 Series.2.l2 ## [1,] -0.20 -0.32 -0.23 0.05 ## [2,] 0.67 0.34 -0.18 0.07
全部估計值都有正確的符號,而且相對接近其真實值。
一旦咱們肯定了最終的VAR模型,就必須解釋其估計的參數值。因爲VAR模型中的全部變量都相互依賴,所以單個參數值僅提供 有限信息。爲了更好地瞭解模型的動態行爲,使用了脈衝響應(IR)。能夠繪製響應變量的軌跡,產生在許多宏觀論文中均可以找到的那些波浪曲線。
在下面的示例中,咱們想知道受到衝擊後序列2的行爲。指定了咱們想要脈衝響應的模型和變量後,咱們將時間範圍設置n.ahead
爲20。該圖給出了序列2的響應。
# 計算脈衝響應 # 繪製脈衝響應 plot(ir.1)
請注意,_正交_選項很重要,由於它說明了變量之間的關係。在咱們的示例中,咱們已經知道不存在這樣的關係,由於真正的方差-協方差矩陣(或簡稱協方差矩陣)在非對角元素中是對角爲零的對角線。可是,因爲具備200個觀測值的有限時間序列數據限制了參數估計的精度,所以協方差矩陣的非對角元素具備正值,這意味着 非零同時效應。爲了在IR中排除這種狀況,咱們設置了ortho = FALSE
。結果是,脈衝響應在週期0中從零開始。 也能夠嘗試另外一種方法並進行設置ortho = TRUE
,那麼繪圖從零開始。
要了解這一點,還能夠計算並繪製_累積_脈衝響應函數,以瞭解 整體長期影響:
# 計算脈衝響應 # 繪圖 plot(ir.2)
咱們看到,儘管序列2對序列1中的 反應在某些時期是負面的,但整體效果倒是顯着正面。
最受歡迎的看法
1.在python中使用lstm和pytorch進行時間序列預測
2.python中利用長短時間記憶模型lstm進行時間序列預測分析