R語言時變向量自回歸(TV-VAR)模型分析時間序列和可視化|附代碼數據

2023-04-07     tecdat拓端

原標題:R語言時變向量自回歸(TV-VAR)模型分析時間序列和可視化|附代碼數據

全文連結:http://tecdat.cn/?p=22350

最近我們被客戶要求撰寫關於時變向量自回歸(TV-VAR)模型的研究報告,包括一些圖形和統計輸出。

在心理學研究中,個人主體的模型正變得越來越流行。原因之一是很難從人之間的數據推斷出個人過程

另一個原因是,由於移動設備無處不在,從個人獲得的時間序列變得越來越多。所謂的個人模型建模的主要目標是挖掘潛在的內部心理現象變化。考慮到這一目標,許多研究人員已經著手分析個人時間序列中的多變量依賴關係。對於這種依賴關係,最簡單和最流行的模型是一階向量自回歸(VAR)模型,其中當前時間點的每個變量都是由前一個時間點的所有變量(包括其本身)預測的(線性函數)。

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

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

通過核平滑估計時變模型

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

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

點擊標題查閱往期內容

R語言估計時變VAR模型時間序列的實證研究分析案例

左右滑動查看更多

01

02

03

04

加載和檢查數據

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

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

## [1] 1476 12

head(data)

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

選擇最佳帶寬

選擇好的帶寬參數的方法之一是在訓練數據集上用不同的候選帶寬參數擬合時變模型,並在測試數據集上評估它們的預測誤差。此外,數據驅動的帶寬選擇可能需要相當長的時間來運行。因此,在本文中,我們只是將帶寬固定為已經選擇的最佳值。

bandwidth <- .26

估計時變var模型

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

對於時變模型,我們需要指定兩個額外的參數。首先,用 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包含整個估計點的平均誤差。

將模型的部分內容可視化

在這裡,我們選擇了兩種不同的可視化方式。首先,我們來檢查估計點1、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模型。

點擊文末 「閱讀原文」

獲取全文完整代碼數據資料。

本文選自《R語言時變向量自回歸(TV-VAR)模型分析時間序列和可視化》。

點擊標題查閱往期內容

R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列

Eviews用向量自回歸模型VAR實證分析公路交通通車裡程與經濟發展GDP協整關係時間序列數據和脈衝響應可視化

R語言實現向量自回歸VAR模型

R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型

向量自回歸(VAR)模型分析消費者價格指數 (CPI) 和失業率時間序列

Matlab創建向量自回歸(VAR)模型分析消費者價格指數 (CPI) 和失業率時間序列

Stata廣義矩量法GMM面板向量自回歸 VAR模型選擇、估計、Granger因果檢驗分析投資、收入和消費數據R語言時變向量自回歸(TV-VAR)模型分析時間序列和可視化

R語言用向量自回歸(VAR)進行經濟數據脈衝響應研究分析

R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列

R語言VAR模型的不同類型的脈衝響應分析

R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型

R語言時變參數VAR隨機模型

R語言估計時變VAR模型時間序列的實證研究分析案例

R語言向量自回歸模型(VAR)及其實現

R語言實現向量自回歸VAR模型

R語言估計時變VAR模型時間序列的實證研究分析案例

Python和R用EWMA,ARIMA模型預測時間序列

R語言用LASSO,adaptive LASSO預測通貨膨脹時間序列

Python中的ARIMA模型、SARIMA模型和SARIMAX模型對時間序列預測

R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列

【視頻】Python和R語言使用指數加權平均(EWMA),ARIMA自回歸移動平均模型預測時間序列

文章來源: https://twgreatdaily.com/zh-mo/83fc9b5ae5d0b7b9d62f33190eb0ca0f.html