R與時間序列


一、案例來源與某書籍,數據集樣式,采用動態線性回歸的方式擬合時間序列模型:

 

 

 

查找gfr與自變量pe、ww2、pill的關系,R代碼如下:

rm(list = ls())
setwd("D:\\download\\系數\\金融時間序列分析")

library(foreign);library(dynlm);library(car);library(lmtest)
fertil3 <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/fertil3.dta")

tsdata <- ts(fertil3,start = 1913) # create time series start at 1913

# 建立動態回歸(dynlm函數),包含滯后項(maybe x or y,this is x: L()),此時包含1階和2階滯后
res <- dynlm(gfr~pe+L(pe) + L(pe,2) + ww2 + pill, data = tsdata) # create Linear regression of model with lags
coeftest(res)

# F test  H0 : all pe coefficients are=0
linearHypothesis(res, matchCoefs(res,"pe"))

pe取2階滯后,pe coefficients are=0,對因變量的影響pe相關性均不強,再進行F檢驗得到如下效果。

 

 

 

二、去趨勢項(針對非平穩性時間序列數據,如存在偽回歸問題)

解決方式:

  • 自變量中加人趨勢項(trend函數),將數據集從時間維度上做一個趨勢,減輕趨勢性對回歸的影響

數據集:

 

 

 

 

library(foreign);library(dynlm); library(stargazer)
hseinv <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/hseinv.dta")

tsdata <- ts(hseinv, start = 1947)

res1 <- dynlm(log(invpc) ~ log(price), data =  tsdata) 
res2 <- dynlm(log(invpc) ~ log(price) + trend(tsdata), data = tsdata)

stargazer(res1,res2,type = "text")

 檢驗結果如下:

 

 

 結果看出趨勢項對回歸的影響是顯著的,有趨勢項時,自變量不顯著,不含趨勢項時,自變量是顯著的。說明存在偽回歸問題,存在趨勢項同時影響X和Y,但X和Y之間不存在相關性。

 

三、去季節性影響(season())

library(foreign); library(dynlm); library(lmtest)
barium <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/barium.dta") 

tsdata <- ts(barium, start= c(1978,2), frequency = 12) # 月度數據,monthly time series begining in Feb. 1978

res <- dynlm(log(chnimp) ~ log(chempi) +log(gas) + log(rtwex) + befile6 + affile6 + afdec6 + season(tsdata), data = tsdata)

coeftest(res)

 

 

 

季度數據進行平均(哪些季度影響顯著):

 

四、非平穩性序列--隨機游走(游走結果不確定) X

1.形式(其中誤差項服從獨立同分布,xt-1前系數等於1):

 

 

 

 隨機游走模型(d=1,p=q=0),ARIMA(p,d,q)為ARIMA(0,1,0)即為隨機游走模型。

set.seed(1234)
plot(c(0,50),c(0,0),type = 'l', lwd=2, ylim = c(-18,18)) # initial graph

# loop over draws
for (r in 1:5) {
  e <- rnorm(50)
  y <- ts(cumsum(e))  # random walk as cumulative sum of shocks 
  lines(y, col = gray(.6))  # add line to graph 
}

  

 圖形形式如下:

 

 

2. 帶趨勢的隨機游走(在隨機游走的基礎上帶上趨勢a,如a=2):

set.seed(2224)
plot(c(0,50),c(0,100),type = 'l', lwd=2) # initial graph

# loop over draws
for (r in 1:5) {
  e <- rnorm(50)
  y <- ts(cumsum(2+e))  # random walk as cumulative sum of shocks 
  lines(y, col = gray(.6))  # add line to graph 
}

 

 

 隨機游走非平穩序列需Xt前系數=1,相反平穩序列需系數小於1

3.差分方式處理隨機游走(yt-yt-1,yt-1-yt-2,...................),作用是使時間序列中單位根或隨機游走變平穩

set.seed(22224)
plot(c(0,50),c(2,2),type = 'l', lwd=2,ylim = c(-1,5)) # initial graph

# loop over draws
for (r in 1:20) {
  e <- rnorm(50)
  y <- ts(cumsum(2+e))  # random walk as cumulative sum of shocks 
  Dy <- diff(y)      # first difference 
  lines(Dy, col = grey(.6))  # add line to graph 
}

  

 

五、序列相關

1.序列相關並不影響估計的無偏性和一致性,而僅影響標准誤差項,序列相關指其誤差項和誤差的滯后項之間有一定聯系(顯著相關), 序列相關的存在可使得回歸結果受到誤差項的序列相關性影響(影響回歸系數的顯著性)。

library(foreign);library(dynlm); library(lmtest)
phillips <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/phillips.dta")

tsdata <- ts(phillips , start=1948)
reg.s <- dynlm(inf ~ unem, data = tsdata, end = 1996) # 通貨膨脹率和失業率之間的關系
summary(reg.s)

  

 

 

 結果顯示通貨膨脹率和失業率之間不顯著。是否是序列相關造成的?下一步提取出殘差項。(誤差之間存在序列相關性,由於無法獲取誤差項,固以殘差替代)

檢測模型殘差和其殘差滯后項之間是否存在相關性:

residuals.s <- resid(reg.s)  # 模型殘差
coeftest(dynlm(residuals.s ~ L(residuals.s))) # 殘差和殘差滯后項進行回歸

  

 

 

 結果發現存在顯著正相關,而失業率對因變量影響不顯著?考慮通過對通貨膨脹率進行差分觀察(d)其對失業率的影響,差分邏輯是觀察通貨膨脹率的變化對失業率帶來的影響。

reg.ea <- dynlm( d(inf) ~ unem , data =  tsdata, end = 1996)
residual.ea <- resid(reg.ea) 
coeftest(dynlm(residual.ea ~ L(residual.ea)))

  

 

 差分以后,再次觀察殘差項和其滯后項之間就不存在相關性了,證明對因變量差分后的模型誤差之間就不存在序列相關性了。檢查一下模型效果相關性就變顯著了。

 

 

 2.消除序列相關性影響

判斷誤差項之間序列相關其他方式:

library(foreign); library(dynlm) ; library(car) ; library(lmtest)
barium <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/barium.dta")

tsdata <- ts(barium, start = c(1978,2), frequency = 12)
reg <- dynlm(log(chnimp) ~ log(chempi) + log(gas) + log(rtwex) +befile6 +affile6 + afdec6 , data =  tsdata  )

residual <- resid(reg)

resreg <- dynlm( residual ~ L(residual) + L(residual,2) + L(residual,3) +log(chempi) + log(gas) + log(rtwex) +befile6 +affile6 + afdec6,
                 data =  tsdata
                 )

  結果檢驗:

 

 殘差一階滯后顯著,證明存在序列相關性(判斷方式為所有滯后項只要有一個顯著即顯著存在序列相關影響)。

 

或者對三個滯后項做F檢驗(lmtest包linearHypothesis方法)

 linearHypothesis(resreg, c("L(residual)"))

 

 

結果也說明一階滯后是顯著的。說明誤差項存在序列相關。

第三種是使用bgtest,原理是使用拉格朗日乘數的統計量來討論是否有序列相關性。檢驗回歸的R方,原因是回歸方程包含了誤差項,如果R2很大,則說明滯后項可以解釋殘差本身,反之不能解釋殘差。

(需要注意的是,bgtest檢測的是原模型本身,不需要去做殘差處理。其中參數 order=n 表示考慮n階以內的滯后項)

 

 

 結果說明原始模型中存在序列相關性。

3.異方差問題

 

 

 隨機誤差的方差項非常數,而是隨時間變化而變化。判斷殘差序列是否存在異方差,可以通過殘差的時序圖或殘差的平方時序圖來判斷

殘差平方圖:

 

 若殘差序列是方差齊性的,則 存在E(ξt) = σ,    ξt2 應該在某個常數值 σξ2 附近隨機波動,它不應該具有任何明顯趨勢,否則就認為殘差序列存在異方差性。

1)帕萊斯溫士頓估計(orcutt包)--- cochrane.orcutt() ---- 消除序列相關性

library(foreign) ; library(dynlm); library(car) ; library(orcutt)
barium <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/barium.dta")

tsdata <- ts(barium, start = c(1978,2) ,frequency = 12)

# OLS estimation
olsres <- dynlm(log(chnimp) ~ log(chempi) + log(gas) + log(rtwex) + befile6
                + affile6 + afdec6 ,data =  tsdata
                )

model <- cochrane.orcutt(olsres)
# 注意的是溫士頓估計model和summary(olsres)模型參數的顯著性是一樣的,但是相關系數不同
summary(olsres)

   

 2)coeftest( , vcov = hccm) 檢測異方差標准誤

library(foreign) ; library(car) ; library(lmtest) ;
gpa3 <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/gpa3.dta")

# OLS regression
reg <- lm(cumgpa ~ sat+hsperc+tothrs+female+black+white,data = gpa3,subset = (spring==1))
bptest(reg)

# results with usual SE
coeftest(reg)
# results with HAC SE 
coeftest(reg, vcov = hccm)

  

3)序列相關文件標准誤和普通標准誤coeftest () / coeftest( , VCOVHAC)

library(foreign) ; library(dynlm) ; library(lmtest) ; library(sandwich)
minwg <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/prminwge.dta")

tsdata <- ts(minwg  , start = 1950)

# OLS regression
reg <- dynlm(log(prepop) ~ log(mincov) + log(prgnp) + log(usgnp) + trend(tsdata),data = tsdata)

# results with usual SE
coeftest(reg)
# results with HAC SE 
coeftest(reg, vcovHAC)

  

 4)自回歸條件異方差( 誤差項的平方可以用誤差平方的滯后項來解釋)

運用在如股票波動存在聚集性(暴漲和暴跌),暴漲和暴跌之間不存在相關性,而暴漲和暴跌的平方之間存在相關性,殘差項平方平衡掉漲和跌符號帶來的影響。

library(foreign) ; library(dynlm) ; library(lmtest)
nyse <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/nyse.dta")
tsdata <- ts(nyse)

# Linear regression of model
reg <- dynlm(return ~ L(return) ,data = tsdata)

# squared residual
residual.sq <- resid(reg)^2 

ARCHreg <- dynlm(residual.sq ~ L(residual.sq))
coeftest(ARCHreg)

   

 

 檢驗結果發現平方項之間確實有強的相關性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM