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

查找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)

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