拓端tecdat|R語言時(shí)變向量自回歸(TV-VAR)模型分析時(shí)間序列和可視化
原文鏈接:http://tecdat.cn/?p=22350?
原文出處:拓端數(shù)據(jù)部落公眾號
在心理學(xué)研究中,個(gè)人主體的模型正變得越來越流行。原因之一是很難從人之間的數(shù)據(jù)推斷出個(gè)人過程。另一個(gè)原因是,由于移動(dòng)設(shè)備無處不在,從個(gè)人獲得的時(shí)間序列變得越來越多。所謂的個(gè)人模型建模的主要目標(biāo)是挖掘潛在的內(nèi)部心理現(xiàn)象變化。考慮到這一目標(biāo),許多研究人員已經(jīng)著手分析個(gè)人時(shí)間序列中的多變量依賴關(guān)系。對于這種依賴關(guān)系,最簡單和最流行的模型是一階向量自回歸(VAR)模型,其中當(dāng)前時(shí)間點(diǎn)的每個(gè)變量都是由前一個(gè)時(shí)間點(diǎn)的所有變量(包括其本身)預(yù)測的(線性函數(shù))。
標(biāo)準(zhǔn)VAR模型的一個(gè)關(guān)鍵假設(shè)是其參數(shù)不隨時(shí)間變化。然而,人們往往對這種隨時(shí)間的變化感興趣。例如,人們可能對參數(shù)的變化與其他變量的關(guān)系感興趣,例如一個(gè)人的環(huán)境變化??赡苁且环菪碌墓ぷ?,季節(jié),或全球大流行病的影響。在探索性設(shè)計(jì)中,人們可以研究某些干預(yù)措施(如藥物治療或治療)對癥狀之間的相互作用有哪些影響。
在這篇博文中,我非常簡要地介紹了如何用核平滑法估計(jì)時(shí)變VAR模型。這種方法是基于參數(shù)可以隨時(shí)間平滑變化的假設(shè),這意味著參數(shù)不能從一個(gè)值 "跳 "到另一個(gè)值。然后,我重點(diǎn)介紹如何估計(jì)和分析這種類型的時(shí)變VAR模型。
通過核平滑估計(jì)時(shí)變模型
核平滑法的核心思想如下。我們在整個(gè)時(shí)間序列的持續(xù)時(shí)間內(nèi)選擇間隔相等的時(shí)間點(diǎn),然后在每個(gè)時(shí)間點(diǎn)估計(jì) "局部 "模型。所有的局部模型加在一起就構(gòu)成了時(shí)變模型。對于 "局部 "模型,我們的意思是,這些模型主要是基于接近研究時(shí)間點(diǎn)的時(shí)間點(diǎn)。這是通過在參數(shù)估計(jì)過程中對觀測值進(jìn)行相應(yīng)的加權(quán)來實(shí)現(xiàn)的。這個(gè)想法在下圖中對一個(gè)數(shù)據(jù)集進(jìn)行了說明。

這里我們只說明在t=3時(shí)對局部模型的估計(jì)。我們在左邊的面板上看到這個(gè)時(shí)間序列的10個(gè)時(shí)間點(diǎn)。紅色的一列w_t_e=3表示我們在t=3時(shí)估計(jì)局部模型可能使用的一組權(quán)重:接近t=3的時(shí)間點(diǎn)的數(shù)據(jù)得到最高的權(quán)重,而更遠(yuǎn)的時(shí)間點(diǎn)得到越來越小的權(quán)重。定義這些權(quán)重的函數(shù)顯示在右圖中。左圖中的藍(lán)色柱子和右邊相應(yīng)的藍(lán)色函數(shù)表示另一種可能的加權(quán)。使用這種加權(quán),我們結(jié)合了更少的時(shí)間上接近的觀測值。這使我們能夠在參數(shù)中檢測到更多的 "時(shí)間可變性",因?yàn)槲覀儗Ω俚臅r(shí)間點(diǎn)進(jìn)行了平滑處理。然而,另一方面,我們使用的數(shù)據(jù)較少,這使得我們的估計(jì)值不太可靠。因此,選擇一個(gè)加權(quán)函數(shù),在對 "時(shí)變性 "的敏感性和穩(wěn)定的估計(jì)之間取得良好的平衡是很重要的。在這里介紹的方法中,我們使用了一個(gè)高斯加權(quán)函數(shù)(也稱為核),它是由其標(biāo)準(zhǔn)差(或帶寬)定義的。我們將在下面討論如何選擇一個(gè)好的帶寬參數(shù)。
加載和檢查數(shù)據(jù)
為了說明估計(jì)時(shí)變VAR模型,我使用了12個(gè)情緒相關(guān)變量的ESM時(shí)間序列,這些變量每天最多測量10次,連續(xù)測量238天。這些問題是 "我感到放松"、"我感到沮喪"、"我感到煩躁"、"我感到滿意"、"我感到孤獨(dú)"、"我感到焦慮"、"我感到熱情"、"我感到懷疑"、"我感到高興"、"我感到內(nèi)疚"、"我感到猶豫不決"、"我感到堅(jiān)強(qiáng)"。每個(gè)問題都用7分的李克特量表回答,范圍從 "不 "到 "非常"。
我們看到數(shù)據(jù)集有1476個(gè)觀察樣本:
## [1] 1476 ? 12
head(data)

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

選擇最佳帶寬
選擇好的帶寬參數(shù)的方法之一是在訓(xùn)練數(shù)據(jù)集上用不同的候選帶寬參數(shù)擬合時(shí)變模型,并在測試數(shù)據(jù)集上評估它們的預(yù)測誤差。此外,數(shù)據(jù)驅(qū)動(dòng)的帶寬選擇可能需要相當(dāng)長的時(shí)間來運(yùn)行。因此,在本文中,我們只是將帶寬固定為已經(jīng)選擇的最佳值。
bandwidth <- .26
估計(jì)時(shí)變var模型
我們現(xiàn)在可以指定時(shí)間變化的VAR模型的估計(jì)。我們提供數(shù)據(jù)作為輸入,并通過type和level參數(shù)指定變量的類型以及它們有多少個(gè)類別。在我們的例子中,所有的變量都是連續(xù)的,因此我們設(shè)置type = rep("g")表示連續(xù)高斯。我們選擇用lambdaSel = "CV "的交叉驗(yàn)證法來選擇正則化參數(shù),并且我們指定VAR模型應(yīng)該包括一個(gè)滯后期=1的單滯后期。參數(shù)bee和day提供了每個(gè)測量的日期和某一天的通知數(shù)量。此外,我們還提供了所有測量的時(shí)間戳,時(shí)間點(diǎn)=time,來說明缺失的測量。然而,請注意,我們?nèi)匀患僭O(shè)滯后期大小為1。時(shí)間戳只是用來確保加權(quán)確實(shí)給那些最接近當(dāng)前估計(jì)點(diǎn)的時(shí)間點(diǎn)最高的權(quán)重。
對于時(shí)變模型,我們需要指定兩個(gè)額外的參數(shù)。首先,用?seq(0, 1, length = 20)我們指定我們想在整個(gè)時(shí)間序列的持續(xù)時(shí)間內(nèi)估計(jì)20個(gè)局部模型(被歸一化為[0,1])。估計(jì)點(diǎn)的數(shù)量可以任意選擇,但在某些時(shí)候,增加更多的估計(jì)點(diǎn)意味著增加了不必要的計(jì)算成本,因?yàn)楹罄m(xù)的局部模型基本上是相同的。最后,我們用帶寬參數(shù)指定帶寬。
# 完整數(shù)據(jù)集的估算模型
tvvar(data,
type = rep("g"),
lambdaSel = "CV",
lags = 1,
estpoints = seq(0, 1, length = 20),
bandwidth = bandwidth,
我們可以輸出對象
# 檢查使用了多少數(shù)據(jù)
obj

其中提供了模型的摘要,也顯示了VAR設(shè)計(jì)矩陣中的行數(shù)(876)與數(shù)據(jù)集中的時(shí)間點(diǎn)數(shù)量(1476)。前者的數(shù)量較少,因?yàn)橹挥性诮o定的時(shí)間點(diǎn)也有滯后1年的時(shí)間點(diǎn)時(shí),才能估計(jì)VAR(1)模型。
計(jì)算時(shí)變預(yù)測誤差
與標(biāo)準(zhǔn)VAR模型類似,我們可以計(jì)算預(yù)測誤差。從模型對象中提供新數(shù)據(jù)和變量可以計(jì)算新樣本的預(yù)測誤差。
參數(shù)errorCon = c("R2", "RMSE")指定解釋方差的比例(R^2)和均方根誤差(RMSE)作為預(yù)測誤差。最后一個(gè)參數(shù)Method指定了如何計(jì)算時(shí)間變化的預(yù)測誤差。選項(xiàng)Method = "closestModel "使用最接近的局部模型對一個(gè)時(shí)間點(diǎn)進(jìn)行預(yù)測。這里選擇的選項(xiàng)tvMethod = "weighted",提供了所有局部模型預(yù)測的加權(quán)平均值,使用以當(dāng)前時(shí)間點(diǎn)的位置為中心的加權(quán)函數(shù)進(jìn)行加權(quán)。通常情況下,這兩種方法得到的結(jié)果非常相似。
pred_obj <- predict(object = obj,
data = data,
errorCon = c("R2", "RMSE"),
Method = "weighted")
主要的輸出是以下兩個(gè)對象。
tverrors是一個(gè)列表,包括每個(gè)估計(jì)點(diǎn)局部模型的估計(jì)誤差;errors包含整個(gè)估計(jì)點(diǎn)的平均誤差。


將模型的部分內(nèi)容可視化
在這里,我們選擇了兩種不同的可視化方式。首先,我們來檢查估計(jì)點(diǎn)1、10和20的VAR交互參數(shù)。
for(tp in c(1,10,20))igraph(wadj[, , 1,tp ?],
layout = "circle",
paste0("估計(jì)點(diǎn) = "))



我們看到,VAR 模型中的一些參數(shù)隨時(shí)間變化很大。例如,"放松 "的自相關(guān)效應(yīng)似乎隨著時(shí)間的推移而減少,"強(qiáng)烈 "對 "滿意 "的正效應(yīng)只出現(xiàn)在估計(jì)點(diǎn)20,"滿意 "對 "有罪 "的負(fù)效應(yīng)也只出現(xiàn)在估計(jì)點(diǎn)20。
我們可以通過繪制這些單個(gè)參數(shù)與時(shí)間的函數(shù)來放大它們。
# 畫圖
title(xlab = "估計(jì)點(diǎn)", cex.lab = 1.2)
title(ylab = "參數(shù)估計(jì)", 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("強(qiáng)烈"["t-1"] ?%->% ?"滿意"["t"]),
expression("滿意"["t-1"] ?%->% ?"慚愧"["t"]))

我們看到,在時(shí)間序列的開始階段,"放松 "對其本身的影響是比較強(qiáng)的,但隨后會向零下降,并在估計(jì)點(diǎn)13左右保持零?!皬?qiáng)烈”對“滿意”對下一個(gè)時(shí)間點(diǎn)的交叉滯后效應(yīng)在估計(jì)點(diǎn)9之前等于零,但隨后似乎單調(diào)地增加。最后,"滿意 "對 "慚愧?"的交叉滯后效應(yīng)也等于零,直到估計(jì)點(diǎn)13附近,然后單調(diào)地減少了。
估計(jì)的穩(wěn)定性
與標(biāo)準(zhǔn)模型類似,可以使用bootstrap采樣分布來評估時(shí)變參數(shù)的穩(wěn)定性。
是否有時(shí)間變化?
在某些情況下,可能需要決定一個(gè)VAR模型的參數(shù)是否具有可靠的時(shí)變性。為了做出這樣的決定,我們可以使用一個(gè)假設(shè)檢驗(yàn),其原假設(shè)是模型不具有時(shí)變性。下面是進(jìn)行這種假設(shè)檢驗(yàn)的一種方法。首先對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)的VAR模型的擬合,然后反復(fù)模擬這個(gè)估計(jì)模型的數(shù)據(jù)。對于每個(gè)模擬的時(shí)間序列數(shù)據(jù)集,我們計(jì)算出時(shí)變模型的集合預(yù)測誤差。這些預(yù)測誤差的分布可作為原假設(shè)下預(yù)測誤差的抽樣分布。現(xiàn)在我們可以計(jì)算時(shí)變VAR模型在經(jīng)驗(yàn)數(shù)據(jù)上的集合估計(jì)誤差,并將其作為一個(gè)測試統(tǒng)計(jì)量。
總結(jié)
在本文中,我展示了如何用核平滑法估計(jì)一個(gè)時(shí)變VAR模型,該方法是基于所有參數(shù)是時(shí)間的平滑函數(shù)的假設(shè)。除了估計(jì)模型外,我們還討論了選擇適當(dāng)?shù)膸拝?shù),如何計(jì)算(時(shí)變的)預(yù)測誤差,以及如何將模型的不同方面可視化。最后,介紹了如何通過bootstrap法評估估計(jì)值的穩(wěn)定性,以及如何進(jìn)行假設(shè)檢驗(yàn),人們可以用它來選擇標(biāo)準(zhǔn)的和時(shí)變的VAR模型。

最受歡迎的見解
1.在python中使用lstm和pytorch進(jìn)行時(shí)間序列預(yù)測
2.python中利用長短期記憶模型lstm進(jìn)行時(shí)間序列預(yù)測分析
3.使用r語言進(jìn)行時(shí)間序列(arima,指數(shù)平滑)分析
4.r語言多元copula-garch-模型時(shí)間序列預(yù)測
5.r語言copulas和金融時(shí)間序列案例
6.使用r語言隨機(jī)波動(dòng)模型sv處理時(shí)間序列中的隨機(jī)波動(dòng)
7.r語言時(shí)間序列tar閾值自回歸模型
8.r語言k-shape時(shí)間序列聚類方法對股票價(jià)格時(shí)間序列聚類
9.python3用arima模型進(jìn)行時(shí)間序列預(yù)測