R語言自學日記(18)-結構式向量自我迴歸模型

Edward Tung
R 語言自學系列
7 min readAug 25, 2018

Structural Autoregreesive Model and Iterations

“Charts with statistics on the screen of a laptop on a glossy surface” by Carlos Muza on Unsplash

結構式向量自我迴歸模型 (SVAR Model)

**先來一些比較討人厭的線性代數

跟一般的VAR模型一樣,我們會寫成SVAR(p)來表示落後期數,一個SVAR模型的估計式長得如下:

我們可以用落後運算元的方式改寫上面式子,就可以推論到:

整段推導下來我們可以發現SVAR實際上可以寫成VAR的形式,唯一的差別在於我們沒有辦法在SVAR中以OLS估計出係數,這是因為我們沒有辦法確定{D0,D1, … ,B}的內生變數,因此,我們會需要一些估計方法。

認定條件(Identification Condition)

SVAR模型比起VAR模型多出了一些參數項目,這個數量是:

其中p是落後期數,k是變數數量,這個數量就是我們的限制條件。如果我們要找出每一個D,實際上只要知道D0就可以透過迭代的方式去找到每一期的D,此時我們的未知參數可以透過誤差的共變異數矩陣去推得:

稍微有點繞圈圈,但實際上就是透過誤差共變異數矩陣去推得內生變數的情況,我們上面提到在這個估計式裡面總共需要(3k-1)k/2個限制,我們一步一步在透過假設來接近這個限制量:

令B為對角矩陣,也就是對角線以外的元素我們都限制為0,這樣就得到了k(k-1)個限制,令D0矩陣的主對角線全為0,這樣我們就得到了k個限制。而剩下的參數我們要透過加入短期遞迴來達成,在這裡,我們進一步去限制D0為一個下三角矩陣,經過推導我們就會發現整個 (I-D_0 )^(-1) B的矩陣也會是下三角矩陣且主對角線上的元素會等於B矩陣的主對角線元素,這可以很簡單地透過線性代數去證明,這邊就不再贅述。

最後一步,我們可以將共變異數矩陣做Choleski分解:

也就是說,只要我們有共變異數矩陣,我們就可以透過分解去得到(I-D_0 )^(-1) B矩陣,並且根據B跟D矩陣的性質去進一步認定出來。我們通常稱這個過程就做遞迴,而模型叫做遞迴式VAR(或也可以說半結構式SVAR),最後要注意的是,這整個模型是基於短期遞迴限制下的估計,是我們主觀要求SVAR模型中的D矩陣需要等於下三角矩陣。

衝擊反應函數 (Impulse Response Function)

在一個非遞迴式VAR的結構模型,也就是不加入短期遞迴限制的SVAR之下,我們僅限制D0矩陣,使得如果出現外生衝擊,這個衝擊對於另外一變數沒有短期影響。而反之我們也可以做長期限制,也就是對於每一個D矩陣都進行限制,使得衝擊對另一變數不會有長期影響。

而對於影響,我們當然使用衝擊反應函數去關注這件事,事實上我們在SVAR的體系下做預測時,實際上也就是從縮減VAR的公式中去乘上B, D矩陣,因此我們更關心的是多少比例的預測誤差波動可以被外生衝擊所解釋,也就是說我們想衡量這個B, D矩陣因應外生衝擊所帶給整體結構的變化程度。

當然以上說了這麼多,換到程序方面就簡單了,我們通過SVAR函數來建立模型,一樣我們用上一章提到的三個變數,這裡稍微有點不一樣的是,我們通過剛才VAR模型估計出來的結果作為SVAR的輸入變數,此外,SVAR要求提供Amatrix或是Bmatrix至少其中一個,這樣的做法稱之為AB型SVAR。

概念就跟我們剛才提及的非常相似,我們必須提供A矩陣,也就是(I-D0)矩陣,以及B矩陣,也就是上面提到的結構衝擊矩陣B,因此我們先要透過Cholesky分解去得到AB矩陣,代碼如下:

我們僅僅將B矩陣的參數設定成NA,這是函數設計時的要求,如果有興趣的朋友可以參考以下這篇,但這邊可以記住這個設定就好:

接下來,我們透過irf()函數去得到答案,報表如下:

我們可以從上圖去觀察到每一個變數針對不同衝擊反應的變化。

過度認定 (Over-identified)

有一個情況是我們的未知參數數目 < 已知參數數目,我們會稱作過度認定。在總體經濟的模型上,有許多參數是不可知的,我們通常會對這些參數的數目去做模型調整,我們知道,當未知參數數目>已知參數數目,模型是沒辦法估計的,可以參照上面提到的線性代數對照,我們如果再將D矩陣的限制放得更多,會變得更難以估計正確參數。

過度認定檢定能夠提供我們在限制模型條件是否為正確的認可機制:

其中的lu跟lr分別是未受限與受限的對數概似函數,如果LR的值很大,我們會傾向於拒絕掉模型為正確限制的虛無假設。

總結

實質上,VAR模型的最大貢獻在於概括了經濟學家一直以來對於總體經濟模型太多不可測得變數導致的估計不準確,雖然模型本身並沒有指導經濟學家如何去選擇適當的變數,但是模型本身可以確保不同變數之間的結合能夠有相對應的估計結果,使得經濟學家可以更專注於如何去選擇正確的變數。

舉例來說,我們可以認為(但實際上不能確定)貨幣存量變動某種程度上受到貨幣政策變動影響,但隨即而來會有三個問題:

  1. 怎麼衡量貨幣政策變動
  2. 該變動對於貨幣存量影響程度多大
  3. 我應該用哪一種模型去預估? (在還沒有VAR的情況下)

而VAR/SVAR的誕生恰巧解決了三個問題,第三個問題不用多說,第一個與第二個問題我們可以用後測結果去得到,也就是透過VAR模型估計的結果、係數與衝擊反應函數等去推得這些資訊。

延伸閱讀:共整合分析

我們不會在這邊談到共整合分析,因為這篇日記的主體還是以R語言為主而不是統計方法,而實際上要了解這些統計理論,我認為還是必須有足夠的基本功,包括機率論或是數理統計等學科。

共整合分析在理論上的意涵指的是我們可以把一組非定態序列或是差分後定態序列透過整合成為定態序列(零階整合序列),換句話說,這兩個序列具有相同的隨機趨勢。在總體經濟上的一些現象,比如我們找出貨幣需求函數的時候,常觀察到其中幾個變數出現共整合關係,為了更謹慎找出這種關係,我們通常會再進行共整合分析。

--

--

Edward Tung
R 語言自學系列

Columbia Student || 2 yrs of data scientist and 1 yr of business consultant experience