天天看點

《量化金融R語言進階教程》一1.1 多元時間序列分析

本節書摘來異步社群《量化金融r語言進階教程》一書中的第1章,第1.1節,作者: 【匈牙利】edina berlinger(艾迪娜•伯林格) , 等 譯者: 高蓉 責編: 胡俊英,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

金融資産價格的運動、技術分析和量化交易的基本問題常常被納入單變量架構下進行模組化。我們能否預測證券價格未來是上升還是下降?這隻特定的證券處于向上還是向下的趨勢中?我們該買還是該賣?這些問題都需要慎重考慮。此外,投資者常常面對着更複雜的局面,不能僅僅把市場看成不相關的工具與決策問題組成的集合。

如果單獨觀察這些工具,可以發現正如市場有效假說所示,它們既非自相關又非均值可預測。但是,工具之間的相關性又顯而易見。這個特性很可能為交易行為所利用,或者出于投機目的,或者出于對沖目的。以上探讨證明了多變量時間序列技術在數量金融中的應用。在本章中,我們會讨論兩個在金融中應用廣泛的著名計量經濟學概念——協整和向量自回歸模型。

現在,我們考慮一個時間序列向量{{y}_{t}},它由元素y_{t}^{left( 1 right)},y_{t}^{left( 2 right)},cdots,y_{t}^{left( n right)}構成,每個元素獨立地表示一個時間序列,如不同金融産品價格的變動。我們從協整資料序列的正式定義開始。

如果ntimes 1的時間序列中的每個序列都是d階單整(特别在大多數的應用中,這些序列是1階單整,這意味着序列是非平穩的機關根過程或者随機遊走過程)。同時,存在一個線性組合{beta }'{{y}_{t}}是d-1階單整(特别是當階數為0時,序列是一個平穩過程)。那麼,我們稱時間序列向量{{y}_{t}}為協整的。

直覺地來看,這個定義意味着經濟中存在某些潛藏力量。這種力量使n個時間序列看似是互相獨立的随機遊走過程,但在長期中趨于一緻。協整時間序列的一個簡單例子是下文這個取自hamilton(1994)的配對向量。我們通過這個例子研究協整,同時熟悉r中一些基本模拟技術:

《量化金融R語言進階教程》一1.1 多元時間序列分析

标準統計檢驗可以嚴格地展示{{y}_{t}}中的機關根。r的tseries包或者urca包都可以實施機關根檢驗,本文使用後者。下文的r代碼模拟了兩個長度為1000的序列:

下載下傳示例代碼

上列代碼的輸出結果如圖1-1所示。

《量化金融R語言進階教程》一1.1 多元時間序列分析

從圖形上看,這兩個序列看似都是随機遊走過程,可以通過urca包實施adf檢驗來檢驗平穩性。此外,r中還有很多其他檢驗方法。原假設的内容是過程中存在一個機關根(輸出已經省略)。如果檢驗統計量小于臨界值,我們就拒絕原假設:

對于這兩個模拟序列,檢驗統計量大于一般顯著性水準(1%、5%和10%)的臨界值。是以,我們不能拒絕原假設,并且我們認為這兩個序列各自都是機關根過程。

現在,對這兩個序列取下文中的線性組合并繪出殘差序列:

《量化金融R語言進階教程》一1.1 多元時間序列分析

上文代碼的輸出結果如圖1-2所示。

《量化金融R語言進階教程》一1.1 多元時間序列分析

{{z}_{t}} 顯而易見是個白噪聲過程。但是拒絕機關根還是需要adf檢驗的結果判定:

在實際應用中,顯然我們并不知道gamma 的值。我們需要基于原始資料,通過一個序列對另一個序列進行線性回歸來估計這個值。這個檢驗協整的方法稱為engle-granger方法,實施這個方法需要下文兩個步驟。

(1){{y}_{t}}對{{x}_{t}}進行線性回歸(簡單的最小二乘估計)。

(2)檢驗殘差以确定機關根的存在。

小提示 我們在這裡應該注意n個序列的情形,其中獨立協整向量的可能個數落在02時,協整關系可能不唯一。我們會在本章後面簡要讨論r>1的情況。

簡單線性回歸可以通過lm函數拟合。殘差可以從結果對象獲得,如下文例子所示。adf檢驗先按正常方式實施,再在所有顯著性水準上确認是否拒絕原假設。此外,我們在本章後面讨論一些需要注意的事項:

現在,我們考慮如何将這個理論轉化為成功的交易政策。此時,我們需要援引統計套利(statistical arbitrage)或者配對交易(pair trading)的概念。這個概念,在它最早期最簡單的形式中,精準地探索這種協整關系。這些方法的主要目的是基于兩個時間序列之間的價差來建立交易政策。如果序列是協整的,那麼我們可以預期它們的平穩線性組合将會回複到0。是以,我們隻要賣出高估證券買入低估證券,然後坐等價差回複,就能賺錢。

統計套利這個術語,通常用于多種複雜統計和計量經濟學技術,目的是在統計意義上探索資産定價的相對偏誤,而非在理論均衡模型中進行比較。

這種觀點背後的經濟原理是什麼?潛在的經濟力量決定了時間序列的線性組合形成協整關系。這種力量無法在統計模型中得到嚴格确認,但是有時會作為問題中變量之間的長期關系而存在。比如,我們可以預期相同行業中的相似公司會具有相似的增長,可以預期金融産品的即期價格和遠期價格通過無套利原則聯系在一起,還可以預期存在某種貿易往來的國家的外彙匯率會共同運動,或者可以預期短期利率和長期利率趨于接近。當交易員推測未來價格相關性的時候,變量偏離了統計上或者理論上的預期關聯開啟了各種各樣的量化交易政策。

協整概念會在随後的章節中更深入讨論。為此,我們首先需要介紹向量自回歸模型。

顯然,向量自回歸模型(var)可以看成自回歸模型(ar)從單變量向多變量的擴充。它們在應用計量經濟學中的普及可以追溯到sims(1980)的開創性論文。var模型是最重要的多變量時間序列模型,在計量經濟學和金融學中有廣泛應用。r包中的vars為r使用者提供了一個優秀的架構。如果需要這個包的詳細評論,可以參考pfaff(2013)。如果需要計量經濟學理論,可以參考hamilton(1994)、lütkepohl(2007)、tsay(2010)或者martin et al.(2013)。在本書中,我們僅對該主題提供一個簡潔又直覺的概述。

在var模型中,我們從考慮一個長度為n的時間序列向量{{y}_{t}}開始。var模型将每個變量的演進設定為所有其他變量滞後值的線性函數。換句話說,一個p階的var模型如下:

《量化金融R語言進階教程》一1.1 多元時間序列分析

這裡,對所有的i=1,2,cdots ,p ,{{a}_{i}}是一個ntimes n的系數矩陣,而{{u}_{t}}是一個協方差矩陣正定的向量白噪聲過程。向量白噪聲這個術語假設不存在自相關,但允許各成分之間同期相關。換句話說,{{u}_{t}}的協方差矩陣是非對角的。

矩陣記号清楚地解釋了var模型的一個特殊的特征:所有變量僅僅取決于該變量本身與其他變量的滞後值,這意味着模型沒有顯式地刻畫變量之間的同期相依性。該特征允許我們通過普通最小二乘方法逐個估計方程。這樣的模型稱為縮減型var模型,與之相對的是結構型var模型,我們随後介紹。

顯然,不存在同期影響的假設存在過度簡化的問題。而且,由此推出的脈沖—響應關系結果(某個特定變量發生沖擊引起的過程變動)也許會産生誤導性,也許沒有用。這些問題引發了我們介紹結構型var模型,這一類模型顯式地刻畫了變量間的同期影響:

《量化金融R語言進階教程》一1.1 多元時間序列分析

這裡,a_{i}^{*}=a{{a}_{i}} 而且b{{epsilon }_{t}}=a{{u}_{t}},是以,結構形式可以通過簡化形式乘上一個恰當的參數矩陣a得到,這個矩陣刻畫了變量之間同期的結構關系。

和往常一樣,我們的符号與vars包的技術文檔保持一緻,它與lütkepohl(2007)的符号類似。

svar模組化中既有趣又困難的地方是所謂的識别問題。svar模型是不可識别的,換句話說,如果沒有額外限制,矩陣a的參數無法被估計。

我們應該如何了解模型是不可識别的?它的基本含義是指存在着不同的(無限多個)參數矩陣,卻有相同的樣本分布。是以,基于樣本不能識别出參數的唯一值。
《量化金融R語言進階教程》一1.1 多元時間序列分析

在文獻中,還有多種識别svar結構的方法,包括短期或者長期參數的限制,或者脈沖響應的符号限制[例如,見fry-pagan(2011)]。其中很多方法在r中仍然沒有本地支援。這裡,我們隻介紹施加短期參數限制的一組标準技術,它們分别稱為a模型、b模型和ab模型,每種技術在vars包裡都有本地支援。

《量化金融R語言進階教程》一1.1 多元時間序列分析

脈沖響應分析常常是建立var模型的主要目标之一。脈沖響應函數本質上刻畫了一個變量對系統中任何其他變量被沖擊的反應(響應)。如果系統包含k個變量,那麼可以确定{{k}^{2}} 個脈沖響應函數。脈沖響應可以通過var過程的向量移動平均形式推導出數學方程,類似于單變量情形[細節參見lutkepohl(2007)]。

var案例實作

作為一個說明性的案例,我們使用以下部分建立三元var模型。

股票收益率:本書中指定為從2004年1月1日到2014年3月3日微軟的價格指數(注,原文如此)。

股票指數:它指定為從2004年1月1日到2014年3月1日的s&p500指數。

從2004年1月1日到2014年3月3日的美國國債利率。

我們的首要目的是通過額外變量預測股票市場指數,并識别脈沖響應。在這裡,我們假設在給定的股票、股票市場整體和債券市場之間存在一種隐性長期關系。選擇這個例子主要為了展示r程式設計環境中多種資料操作的可能性,以及通過一個很簡單的案例說明詳盡内容,而不是為了它的經濟含義。

我們使用vars和quantmod包。如果你還沒有這兩個包,别忘了安裝并加載它們:

quantmod包提供了大量工具,可以直接從線上資源下載下傳金融資料,在本書中我們會頻繁地需要。我們使用getsymbols()函數:

預設狀态下,雅虎财經(yahoofinance)用作股票和指數價格序列的資料源(參數設定為src='yahoo',在本例中被省略了)。慣例是下載下傳開盤價、最高價、最低價、收盤價、成交量及調整價格。下載下傳的資料存儲在一個xts資料類裡,預設根據股票代碼自動命名(msft和snp)。通過調用泛型plot函數可以畫出收盤價,但quantmod包的chartseries函數提供了更好的圖形示例。

使用以下縮寫可以通路下載下傳資料的各個部分:

比如,使用這些縮寫,日收盤價的收益率可以按以下方式繪制出來:

chartseries(clcl(msft)) #利用代碼縮寫的畫圖例子

上述指令輸出如圖1-3所示。

《量化金融R語言進階教程》一1.1 多元時間序列分析

利率下載下傳自聯儲經濟資料(federal reserve economic data,fred)資料源。接口的目前版本不允許對日期取子集。但是,下載下傳的資料存儲在一個xts資料類中,我們可以直接對需要的時期取子集。

下載下傳的價格(假設是非平穩時間序列)需要先轉化為平穩序列才能分析。換句話說,我們處理的是根據調整序列計算出的對數收益率:

在轉向var模型拟合之前,我們最後需要一個資料清洗的步驟才能繼續。通過目測資料,我們可以看到在t-bill收益率序列中存在着缺失資料,而且資料集的長度各不相同(在某些日期,有利率報價,但沒有股票價格)。為了解決這些資料品質問題,我們選擇現在最易行的一種解決方案:合并資料集(通過省略那些沒有全部3個資料的點),并删掉所有的na資料。前者通過内連接配接參數執行(細節參見merge函數的幫助文檔)。

datadaily <- na.omit(merge(snp.ret,msft.ret,dtb3.sub), join='inner')

在這裡需要注意,var模組化通常對低頻資料進行。有一種簡單的方法,可以把資料轉成為月度或者季度的頻率,使用以下函數可以傳回給定時期内的開盤價、最高價、最低價和收盤價:

簡單的縮減var模型可以使用vars包的var()函數拟合資料。下列代碼中的參數化允許在方程中有最大4階的滞後,并且通過使用最優(最低)的赤池資訊量值(akaike information criterion)選擇模型:

對于更多已有模型的選擇,可以考慮使用varselect(),它提供了多種資訊準則(輸出省略):

結果對象是一個varest類的對象。通過summary()方法或者show()方法可以獲得參數估計和其他更多統計結果(換句話說,隻需輸入變量):

還有其他方法值得一提。varest包的自定義繪圖方法可以對所有變量——包括它的拟合值、殘差、殘差的自相關和偏自相關函數——分别生成圖像。你需要敲擊Enter鍵獲得新變量的圖像。vars包還提供了大量自定義設定,請查閱這個包的文檔。

通過簡單地調用predict函數并加上想要的置信區間,可以得到使用估計的var模型進行的預測。

脈沖響應由irf()函數首先生成數值結果,然後可以通過plot()方法繪出圖形。接着我們可以再得到每個變量的不同圖像,包括各個脈沖響應函數以及相應自助置信區間,如下列指令所示:

現在,考慮使用之前講過的a模型參數限制拟合結構var模型。識别svar模型需要frac{k(k-1)}{2} 個限制,在我們的例子裡,限制個數是3。

細節可以參見lütkepohl(2007)。本來額外需要frac{k(k+1)}{2} 個限制,但對角元素标準化為1,因而我們所需額外限制數如上。

svar模型的分析始于一個已估計的縮減型var模型(var1)。再用一個恰當的結構限制矩陣修正它。

為了簡化,我們使用下列限制。

s&p指數的沖擊對微軟股票不存在同期影響。

s&p指數的沖擊對利率不存在同期影響。

國債利率的沖擊對微軟股票不存在同期影響。

這些限制通過在矩陣a中設定相應的0,施加到svar模型中,矩陣a如下:

《量化金融R語言進階教程》一1.1 多元時間序列分析

當在r中設定矩陣a為svar的估計參數,需要估計的參數的位因果設為na值。這可以通過下列配置設定完成:

最後,我們可以拟合svar模型,并且繪出脈沖響應函數(輸出省略):

最後,我們綜合已學内容,并且讨論協整var和誤差修正模型(vector error correction models,vecm)的概念。

我們從一個協整變量系統(例如,在交易情形下,這表示一組可能由相同基本面驅動的相似股票)開始。前面讨論過的标準var模型必須在變量平穩時才能估計。我們知道,移除機關根模型的傳統方法是對序列取一階差分。但是,在協整序列情形下,這會導緻過度差分,并且損失了變量水準長期共同運動表達的資訊。最終,我們的目的是建立一個平穩變量的模型,它也包含初始協整非平穩變量之間的長期聯系,即建立一個協整var模型。向量誤差修正模型(vecm)捕捉了這種思想,它包括變量差分的p-1階var模型和一個從已知的(估計的)協整關系推導出的誤差修正項。從直覺上,使用股票市場案例,vecm模型建立了股票收益率之間的短期關系,同時通過對價格長期共同變動的偏離加以修正。

一個兩變量的vecm可以正式寫成下面公式,并作為一個數值例子進行讨論。設{{y}_{t}} 是一個由兩個非平穩機關根序列y_{t}^{(1)}、y_{t}^{(2)} 組成的向量,這兩個序列協整,協整向量為beta =(1,beta )。是以,一個恰當的vecm模型可以如下面的公式所示:

《量化金融R語言進階教程》一1.1 多元時間序列分析

這裡,delta {{y}_{t}}={{y}_{t}}-{{y}_{t-1}} 且其中第一項通常稱為誤差修正項。

實踐中有兩種方法可以檢驗協整關系,并建立誤差修正模型。在兩變量情形下,engle-granger方法很有指導性,我們的數值案例基本沿襲了這種思想。在多變量情形下,其中可能的協整關系個數最大為(n-1),這時需要采用johansen過程進行協整檢驗。盡管後者的理論架構遠超本書範圍,我們仍然會簡要介紹實用工具,并且為你更深的研究提供參考書。

為了講授一些運用于vecm模組化的基本r功能,我們使用一個标準案例。它包括3個月和6個月的國債二級市場利率,正如之前所讨論的,可以從fred資料庫下載下傳。我們先任意選擇某個時期,如從1984年~2014年,再考慮檢驗這段時間内的資料。adf檢驗(augmented dickey fuller tests)表明不能拒絕機關根原假設。

我們通過運作一個簡單的線性回歸,可以一緻地估計兩個序列之間的協整關系。為了簡化代碼,我們定義變量{{x}_{1}}、{{x}_{2}}表示兩個序列,y表示相應的向量序列。代碼片段中的其他變量名慣例是明顯的:

如果回歸殘差(變量r)恰好是變量的某個線性組合構成的平穩序列,那麼這兩個序列确實協整。你可以使用常見的adf方法進行檢驗,但在這個情形下,傳統的臨界值不合适,應該使用修正值[例如,參見phillips and ouliaris(1990)]。

是以對于協整的存在性,更合适的方法是使用指定檢驗,如phillips-ouliaris檢驗,它在tseries和urca包中都可以運用。下面采用最基本的tseries包,示範如下:

原假設表示兩個序列不協整,是以p值小表示拒絕原假設并且協整關系存在。

當協整關系個數可能大于1時,适合使用johansen過程。它的實施可以在urca包中找到:

對r=0(不存在協整關系)的檢驗統計量大于臨界值,這表明拒絕原假設。然而,當rleqslant 1時,不能拒絕原假設。是以,我們認為存在協整關系。協整向量根據檢驗結果下方的标準化特征向量的第一列給出。

最後一步是得出這個系統的vecm表達式,換句話說,先計算協整方程,再求出差分變量的滞後和誤差修正項,再對它們運作ols回歸。所選擇的适合的函數裡使用了我們之前建立的ca.jo對象類。下面代碼裡的參數r=1表示了協整的秩:

正如我們所預計的,誤差修正項的系數是負的。從長期均衡水準上的短期的偏離會把變量推向零均衡偏離。

可以很容易地在二進制情形下進行檢查。johansen過程會得到一個和采用了engle-grange過程進而一步步運用ecm相同的結果。這種觀點在上傳的r代碼檔案中有所示意。

繼續閱讀