多元时间序列分析

  • 平稳多元序列建模
  • 虚假回归
  • 单位根检验
  • DF检验
  • ADF检验
  • 协整
  • 单整与协整
  • 协整检验
  • 误差修正检验


平稳多元序列建模

虚假回归

单位根检验

DF检验

  • DF统计量
  • 等价表达
  • 三种类型
  • 无漂移项自回归过程
  • 带漂移项自回归过程
  • 带趋势回归过程

ADF检验

  • 原理
  • 三种类型
  • 无常数均值、无趋势的p阶自回归过程
  • 有常数均值、无趋势的p阶自回归过程
  • 既有常数均值又有线性趋势的p阶自回归过程

协整

单整与协整

  • 单整
  • 概念
  • 性质
  • 协整

协整检验

  • 假设条件
  • 检验步骤
  • 建立响应序列与输入序列之间的回归模型
  • 对回归残差序列进行平稳性检验

误差修正检验

多元时间序列 python 多元时间序列分析步骤_时序图

#6.1
#读入数据,并绘制输出序列时序图
a=read.table("E:/data/file24.csv",sep=",",header = T)
y=ts(a$output)
plot(y)

#考察输出序列自相关图和偏自相关图
acf(y)
pacf(y)

#对输出序列拟合模型AR(4)
y.fit=arima(y,order=c(4,0,0))
y.fit

#残差白噪声检验
for(i in 1:2) print(Box.test(y.fit$residual,lag=6*i))

x=ts(a$input)
ccf(y,x)   #协相关图

#arimax(y,order=,xreg=,xtransf=,transfer=)
#y:要进行模型拟合的序列名
#order:指定y序列拟合模型阶数。order=c(p,d,q)
#p:自回归阶数
#d:差分阶数
#q:移动平均阶数
#xreg:输入变量名(不需要做转移函数变换)
#xtransf:输入变量名(需要做转移函数变换)
#transfer:指定转移函数的模型阶数

library("TSA")   #TSA包用不了
y.fit=arimax(y,order=c(p,0,q),xreg=x)

y.fit=arimax(y,order=c(p,0,q),xreg=data.frame(x1,x2))

y.fit=arimax(y,order=c(p,0,q),xtransf=x,transfer=list(c(m,n)))

y.fit=arimax(y,order=c(p,0,q),xtransf=data.frame(x1,x2),transfer=list(c(m1,n1),c(m2,n2)))

y.fit=arimax(y,order=c(p,0,q),xreg=x1,xtransf=x2,transfer=list(c(m,n)))

library(TSA)
y.fit2=arimax(y,order=c(4,0,0),xtransf=x,transfer=list(c(2,1)))
y.fit2

#6.2
#拟合带漂移项的差分平稳序列,并绘制时序图和线性拟合效果图
e=rnorm(1000)
x=filter(0.1+e,filter=1,method = "recursive")
plot(x)
t=c(1:1000)
abline(lm(x~t),col=2)
lm(x~t)

#差分运算和线性拟合后残差序列比较
r1=diff(x)
x.fit=lm(x~t)
r2=ts(x.fit$residual)
c1=min(r1,r2)
c2=max(r1,r2)
plot(r1,ylim=c(c1,c2))
lines(r2,col=2)

#拟合趋势平稳序列,并绘制时序图
t=c(1:1000)
e=rnorm(1000,0,10)
x=0.1*t+e
x=ts(x)
plot(x)

#考察差分后残差序列的波动程度
plot(diff(x))
abline(h=c(1.98*sd(diff(x)),-1.98*sd(diff(x))),col=2)

#考察线性拟合后残差序列的波动程度
x.fit=lm(x~t)
r=ts(x.fit$residual)
plot(r)
abline(h=c(1.98*sd(r),-1.98*sd(r)),col=2)

#adfTest(x,lags=,type=)
#x:进行单位根检验的序列名
#lags:延迟阶数
#(1)lags=1,默认设置,这时进行DF检验
#(2)lags=n,n>1,这时进行ADF检验
#type:检验类型
#(1)type="nc",无常数均值,无趋势类型
#(2)type="c",有常数均值,无趋势类型
#(3)type="ct",有常数均值,又有趋势类型

#6.4
#读入数据,并绘制两序列时序图
b=read.table("E:/data/file25.csv",sep=",",header=T)
x=ts(b$lnx,start=1978)
y=ts(b$lny,start=1978)
c1=min(x,y)
c2=max(x,y)
plot(x,ylim=c(c1,c2))
lines(y,lty=2,col=2)

#对人均纯收入对数序列进行DF检验
library(fBasics)
library(fUnitRoots)
adfTest(x,lag=1,type="nc")

adfTest(x,lag=1,type="c")

adfTest(x,lag=1,type="ct")

#对人均生活消费支出对数序列进行DF检验
adfTest(y,lag=1,type="nc")
adfTest(y,lag=1,type="c")
adfTest(y,lag=1,type="ct")

#6.4续
#差分运算
dx=diff(x)
dy=diff(y)

#人均收入对数差分后序列ADF检验
for(i in 1:3) print(adfTest(dx,lag=i,type="nc"))

for(i in 1:3) print(adfTest(dx,lag=i,type="c"))

#人均支出对数差分后序列ADF检验
for(i in 1:3) print(adfTest(dy,lag=i,type="nc"))

for(i in 1:3) print(adfTest(dy,lag=i,type="c"))

#6.4续
#第一步:构造回归模型
y.fit=lm(y~x)
summary(y.fit)

#第二步:残差序列单位根检验
r=ts(y.fit$residual)
for(i in 1:3) print(adfTest(r,lag=i,type="nc"))

#6.4续
ECM=y.fit$residual[1:24]
dify.fit=lm(diff(y)~0+diff(x)+ECM)
summary(dify.fit)