R語言時變向量自迴歸(TV-VAR)模型分析時間序列和可視化

在心理學研究中,我的主體的模型正變得愈來愈流行。緣由之一是很難從人之間的數據推斷出我的過程。另外一個緣由是,因爲移動設備無處不在,從我的得到的時間序列變得愈來愈多。所謂的我的模型建模的主要目標是挖掘潛在的內部心理現象變化。考慮到這一目標,許多研究人員已經着手分析我的時間序列中的多變量依賴關係。對於這種依賴關係,最簡單和最流行的模型是一階向量自迴歸(VAR)模型,其中當前時間點的每一個變量都是由前一個時間點的全部變量(包括其自己)預測的(線性函數)。express

標準VAR模型的一個關鍵假設是其參數不隨時間變化。然而,人們每每對這種隨時間的變化感興趣。例如,人們可能對參數的變化與其餘變量的關係感興趣,例如一我的的環境變化。多是一份新的工做,季節,或全球大流行病的影響。在探索性設計中,人們能夠研究某些干預措施(如藥物治療或治療)對症狀之間的相互做用有哪些影響。bootstrap

在這篇博文中,我很是簡要地介紹瞭如何用核平滑法估計時變VAR模型。這種方法是基於參數能夠隨時間平滑變化的假設,這意味着參數不能從一個值 "跳 "到另外一個值。而後,我重點介紹如何估計和分析這種類型的時變VAR模型。函數

經過核平滑估計時變模型

核平滑法的核心思想以下。咱們在整個時間序列的持續時間內選擇間隔相等的時間點,而後在每一個時間點估計 "局部 "模型。全部的局部模型加在一塊兒就構成了時變模型。對於 "局部 "模型,咱們的意思是,這些模型主要是基於接近研究時間點的時間點。這是經過在參數估計過程當中對觀測值進行相應的加權來實現的。這個想法在下圖中對一個數據集進行了說明。測試

這裏咱們只說明在t=3時對局部模型的估計。咱們在左邊的面板上看到這個時間序列的10個時間點。紅色的一列w\_t\_e=3表示咱們在t=3時估計局部模型可能使用的一組權重:接近t=3的時間點的數據獲得最高的權重,而更遠的時間點獲得愈來愈小的權重。定義這些權重的函數顯示在右圖中。左圖中的藍色柱子和右邊相應的藍色函數表示另外一種可能的加權。使用這種加權,咱們結合了更少的時間上接近的觀測值。這使咱們可以在參數中檢測到更多的 "時間可變性",由於咱們對更少的時間點進行了平滑處理。然而,另外一方面,咱們使用的數據較少,這使得咱們的估計值不太可靠。所以,選擇一個加權函數,在對 "時變性 "的敏感性和穩定的估計之間取得良好的平衡是很重要的。在這裏介紹的方法中,咱們使用了一個高斯加權函數(也稱爲核),它是由其標準差(或帶寬)定義的。咱們將在下面討論如何選擇一個好的帶寬參數。spa

加載和檢查數據

爲了說明估計時變VAR模型,我使用了12個情緒相關變量的ESM時間序列,這些變量天天最多測量10次,連續測量238天。這些問題是 "我感到放鬆"、"我感到沮喪"、"我感到煩躁"、"我感到滿意"、"我感到孤獨"、"我感到焦慮"、"我感到熱情"、"我感到懷疑"、"我感到高興"、"我感到內疚"、"我感到猶豫不決"、"我感到堅強"。每一個問題都用7分的李克特量表回答,範圍從 "不 "到 "很是"。設計

咱們看到數據集有1476個觀察樣本:code

## \[1\] 1476   12
head(data)

time_data包含每一個測量的時間信息。咱們將利用測量發生的日期、測量提示和時間戳(time)。對象

選擇最佳帶寬

選擇好的帶寬參數的方法之一是在訓練數據集上用不一樣的候選帶寬參數擬合時變模型,並在測試數據集上評估它們的預測偏差。此外,數據驅動的帶寬選擇可能須要至關長的時間來運行。所以,在本文中,咱們只是將帶寬固定爲已經選擇的最佳值。ci

bandwidth <- .26

估計時變var模型

咱們如今能夠指定時間變化的VAR模型的估計。咱們提供數據做爲輸入,並經過type和level參數指定變量的類型以及它們有多少個類別。在咱們的例子中,全部的變量都是連續的,所以咱們設置type = rep("g")表示連續高斯。咱們選擇用lambdaSel = "CV "的交叉驗證法來選擇正則化參數,而且咱們指定VAR模型應該包括一個滯後期=1的單滯後期。參數bee和day提供了每一個測量的日期和某一天的通知數量。此外,咱們還提供了全部測量的時間戳,時間點=time,來講明缺失的測量。然而,請注意,咱們仍然假設滯後期大小爲1。時間戳只是用來確保加權確實給那些最接近當前估計點的時間點最高的權重。rem

對於時變模型,咱們須要指定兩個額外的參數。首先,用 seq(0, 1, length = 20)咱們指定咱們想在整個時間序列的持續時間內估計20個局部模型(被歸一化爲[0,1])。估計點的數量能夠任意選擇,但在某些時候,增長更多的估計點意味着增長了沒必要要的計算成本,由於後續的局部模型基本上是相同的。最後,咱們用帶寬參數指定帶寬。

# 完整數據集的估算模型
tvvar(data,
                    type = rep("g"),
                    lambdaSel = "CV",
                    lags = 1,
                    estpoints = seq(0, 1, length = 20), 
                    bandwidth = bandwidth,

咱們能夠輸出對象

# 檢查使用了多少數據
obj

其中提供了模型的摘要,也顯示了VAR設計矩陣中的行數(876)與數據集中的時間點數量(1476)。前者的數量較少,由於只有在給定的時間點也有滯後1年的時間點時,才能估計VAR(1)模型。

計算時變預測偏差

與標準VAR模型相似,咱們能夠計算預測偏差。從模型對象中提供新數據和變量能夠計算新樣本的預測偏差。

參數errorCon = c("R2", "RMSE")指定解釋方差的比例(R^2)和均方根偏差(RMSE)做爲預測偏差。最後一個參數Method指定了如何計算時間變化的預測偏差。選項Method = "closestModel "使用最接近的局部模型對一個時間點進行預測。這裏選擇的選項tvMethod = "weighted",提供了全部局部模型預測的加權平均值,使用以當前時間點的位置爲中心的加權函數進行加權。一般狀況下,這兩種方法獲得的結果很是類似。

pred_obj <- predict(object = obj, 
                    data = data, 
                    errorCon = c("R2", "RMSE"),
                    Method = "weighted")

主要的輸出是如下兩個對象。
tverrors是一個列表,包括每一個估計點局部模型的估計偏差;errors包含整個估計點的平均偏差。

將模型的部份內容可視化

在這裏,咱們選擇了兩種不一樣的可視化方式。首先,咱們來檢查估計點一、10和20的VAR交互參數。

for(tp in c(1,10,20))igraph(wadj\[, , 1,tp  \], 
                             layout = "circle",
                             paste0("估計點 = "))

咱們看到,VAR 模型中的一些參數隨時間變化很大。例如,"放鬆 "的自相關效應彷佛隨着時間的推移而減小,"強烈 "對 "滿意 "的正效應只出如今估計點20,"滿意 "對 "有罪 "的負效應也只出如今估計點20。

咱們能夠經過繪製這些單個參數與時間的函數來放大它們。

# 畫圖
title(xlab = "估計點", cex.lab = 1.2)
title(ylab = "參數估計", cex.lab = 1.2)

for(i in 1:nrow(display)) {
  lines(1:20, ests\[par_row\[1\], \], lty = i) 


legend<- c(expression("輕鬆"\["t-1"\]  %->%  "輕鬆"\["t"\]),
                   expression("強烈"\["t-1"\]  %->%  "滿意"\["t"\]),
                   expression("滿意"\["t-1"\]  %->%  "慚愧"\["t"\]))

咱們看到,在時間序列的開始階段,"放鬆 "對其自己的影響是比較強的,但隨後會向零降低,並在估計點13左右保持零。「強烈」對「滿意」對下一個時間點的交叉滯後效應在估計點9以前等於零,但隨後彷佛單調地增長。最後,"滿意 "對 "慚愧 "的交叉滯後效應也等於零,直到估計點13附近,而後單調地減小了。

估計的穩定性

與標準模型相似,可使用bootstrap採樣分佈來評估時變參數的穩定性。

是否有時間變化?

在某些狀況下,可能須要決定一個VAR模型的參數是否具備可靠的時變性。爲了作出這樣的決定,咱們可使用一個假設檢驗,其原假設是模型不具備時變性。下面是進行這種假設檢驗的一種方法。首先對數據進行標準的VAR模型的擬合,而後反覆模擬這個估計模型的數據。對於每一個模擬的時間序列數據集,咱們計算出時變模型的集合預測偏差。這些預測偏差的分佈可做爲原假設下預測偏差的抽樣分佈。如今咱們能夠計算時變VAR模型在經驗數據上的集合估計偏差,並將其做爲一個測試統計量。

總結

在本文中,我展現瞭如何用核平滑法估計一個時變VAR模型,該方法是基於全部參數是時間的平滑函數的假設。除了估計模型外,咱們還討論了選擇適當的帶寬參數,如何計算(時變的)預測偏差,以及如何將模型的不一樣方面可視化。最後,介紹瞭如何經過bootstrap法評估估計值的穩定性,以及如何進行假設檢驗,人們能夠用它來選擇標準的和時變的VAR模型。