一、案例來源與某書籍,數據集樣式,采用動態線性回歸的方式擬合時間序列模型:
查找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) = σ2 , ξ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)
檢驗結果發現平方項之間確實有強的相關性。