library(timeDate)
library(fUnitRoots)
library(xlsx)
library(rJava)
library(xlsxjars)
library(forecast)
library(zoo)
##建立样本空间
dfile1="D:/programsdata/2013CSI.xlsx" #2013年CSI数据
dset1=read.xlsx(dfile1,1)
dim(dset1)
#[1] 238 7
head(dset1)
tail(dset1)
dfile2="D:/programsdata/2014CSI.xlsx" #2014年CSI数据
dset2=read.xlsx(dfile2,1)
dim(dset2)
#[1] 245 7
head(dset2)
tail(dset2)
dfile3="D:/programsdata/2015CSI.xlsx" #2015年CSI数据
dset3=read.xlsx(dfile3,1)
dim(dset3)
#[1] 244 7
head(dset3)
tail(dset3)
dv1=dset1[4,drop=F]
dv2=dset2[4,drop=F]
dv3=dset3[4,drop=F]
colnames(dv1)=c("close") #注意不是rownames(),简单的地方不思考容易出错
colnames(dv2)=c("close") #colnames()不能用dset1[,4]作为参数
colnames(dv3)=c("close")
dset=rbind(dv1,dv2,dv3)
##CSI数据序列的平稳性和自相关性
adfTest(dset[,1]) #adfTset()不能以数据框为参数
##Title:
## Augmented Dickey-Fuller Test
##Test Results:
## PARAMETER:
## Lag Order: 1
## STATISTIC:
## Dickey-Fuller: 0.3182
## P VALUE: #有单位根
## 0.7178
dts=ts(dset,frequency=244,start=c(2013,1,9)) #建立CSI2013~2015数据时间序列
plot(dts) #plot图判断时间序列的单位根,平稳性
#plot图有时间趋势
diffdset=diff(dset[,1]) #一次差分序列。diff()不能以数据框为参数
head(diffdset)
[1] 11.576 -10.655 0.796 4.443 -47.339 94.495
length(diffdset)
[1] 726
diffdts=ts(diffdset,frequency=243,start=c(2013,1,7))
plot(diffdts)
#一次差分序列的plot图是平稳时间序列,则可不必再求二次差分序列。
#从图上可知2015年波动性较大,
#则建立模型,将导致2015数据的不确定差较大。
data1=diffdts[1:718] #模型数据时间序列data1,
data2=diffdts[719:726] #预测数据时间序列data2,8个样本
y=data1
acf(y,lag=100) #平稳时间序列自相关性,时间间隔100
#自相关图有明显的拖尾性,最终达到收敛。
#因此,截尾的阶不易确定。
#应在lag.time=20的范围内更清晰确定阶。
pacf(y,lag=100) #平稳时间序列偏自相关性
#不具有明显的截尾性
#判断偏自相关性的阶,方法一:根据值的突然变动
#1.最大的值突然变到比较小
#2.异常值突然到两条界限内,而且连续在界限内
#方法二:用ar()函数确定p的阶,可印证偏自相关图判定的正确性
#ARIMA模型定阶 ,时间间隔20
acf(y,lag=20) #q=2,4,8
不具有明显的截尾性,q=2,4,8
pacf(y,lag=20) #p=2,4,11
p=2,4。若认为lag.time=11有截尾性,则p=11。
m=ar(y,method=’mle’) #q=11
m$order
#[1] 11
##建立ARIMA模型
m1=arima(y,order=c(2,1,2)) #建立arima模型 p=(2,4,11),q=(2,4,8)
m1
##Call:
##arima(x = y, order = c(2, 1, 2))
##Coefficients:
## ar1 ar2 ma1 ma2
## 0.1101 -0.1630 -0.9742 -0.0257
## s.e. 0.1336 0.0399 0.1348 0.1322
##sigma^2 estimated as 3946: log likelihood = -3989.18, aic = 7988.36
Box.test(m1$residuals,lag=12,type=’Ljung’)
##Box-Ljung test
##data: m1$residuals
##X-squared = 51.446, df = 12, p-value = 7.771e-07 #拒绝无相关性的假设
#因此arima(2,1,2)模型拟合不充分,不可作为CSI数据的参数估计模型。
pv=1-pchisq(51.446,8)
pv #模型调整的判断
##[1] 2.152848e-08 #p值减少,可进行模型调整
m2=arima(y,order=c(2,1,2),fixed=c(NA,NA,NA,0)) #将接近0的参数置为0
m2
##Call:
##arima(x = y, order = c(2, 1, 2), fixed = c(NA, NA, NA, 0)) #没有横截踞
##Coefficients:
## ar1 ar2 ma1 ma2
## 0.1350 -0.1657 -1.0000 0
## s.e. 0.0369 0.0369 0.0376 0
Box.test(m2$residuals,lag=12,type='Ljung')
## Box-Ljung test
##data: m2$residuals
##X-squared = 51.635, df = 12, p-value = 7.195e-07 #拒绝没有相关性的假设
#调整的arima(2,1,2)模型拟合不充分,有模型信息没有提取。
m3=arima(y,order=c(4,1,11)) #提高模型阶数
m3
##Call:
##arima(x = y, order = c(4, 1, 11))
##Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4
## -0.9138 -1.7860 -0.8697 -0.9086 0.0619 0.8079 -0.8501 -0.0261
##s.e. 0.0387 0.0336 0.0353 0.0270 0.0545 0.0463 0.0524 0.0679
## ma5 ma6 ma7 ma8 ma9 ma10 ma11
## -0.8535 -0.0615 0.0652 0.0026 -0.0063 -0.0989 -0.0409
##s.e. 0.0644 0.0669 0.0646 0.0581 0.0505 0.0488 0.0442
##sigma^2 estimated as 3546: log likelihood = -3952.54, aic = 7937.09
Box.test(m3$residuals,lag=20,type='Ljung')
## Box-Ljung test
##data: m3$residuals
##X-squared = 14.135, df = 20, p-value = 0.8236 #没有明显的自相关性
pv=1-pchisq(14.135,6) #模型可调整
pv
##[1] 0.02816396
m4=arima(y,order=c(4,1,11),fixed=c(NA,NA,NA,NA,0,NA,NA,0,NA,0,0,0,0,0,0))
m4
##Call:
##arima(x = y, order = c(4, 1, 11), fixed = c(NA, NA, NA, NA, 0, NA, NA, 0, NA,
0, 0, 0, 0, 0, 0))
##Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4 ma5
## -0.9391 -1.8037 -0.8948 -0.8963 0 0.7605 -0.9170 0 -0.8604
##s.e. 0.0209 0.0280 0.0274 0.0245 0 0.0335 0.0212 0 0.0336
## ma6 ma7 ma8 ma9 ma10 ma11
## 0 0 0 0 0 0
##s.e. 0 0 0 0 0 0
##sigma^2 estimated as 3596: log likelihood = -3958.99, aic = 7933.97
Box.test(m4$residuals,lag=20,type='Ljung')
## Box-Ljung test
##data: m4$residuals
##X-squared = 25.748, df = 20, p-value = 0.1743 #没有明显的自相关性
##模型诊断
tsdiag(m4)
#m4模型的不确定差在2015年仍有模型有效信息,不确定差有少量异常值,LB检验的p值没有通过。m4模型的数据拟合优度有可提高的空间。
m5=arima(y,order=c(8,1,11))
##Warning messages:
##1: In log(s2) : 产生了NaNs
##2: In arima(y, order = c(8, 1, 11)) : 可能遇到了收斂问题:optim信息code=1
m5
##Call:
##arima(x = y, order = c(8, 1, 11))
##Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8
## -0.9313 -0.7688 0.2210 0.1188 0.1511 -0.7685 -0.8126 -0.8491
##s.e. 0.0377 0.0489 0.0523 0.0592 0.0573 0.0508 0.0460 0.0300
## ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8
## 0.0875 -0.2444 -1.0612 0.1097 0.1048 0.8558 0.0316 0.0744
##s.e. 0.0589 0.0569 0.0701 0.0734 0.0904 0.0740 0.0761 0.0783
## ma9 ma10 ma11
## -0.8179 -0.0586 -0.0803
##s.e. 0.0521 0.0489 0.0462
##sigma^2 estimated as 3433: log likelihood = -3944.77, aic = 7929.53
m6=arima(y,order=c(8,1,11),fixed=c(NA,NA,NA,NA,NA,NA,NA,NA,0,NA,NA,NA,NA,NA,0,0,NA,0,0))
m6
##Call:
##arima(x = y, order = c(8, 1, 11), fixed = c(NA, NA, NA, NA, NA, NA, NA, NA,
## 0, NA, NA, NA, NA, NA, 0, 0, NA, 0, 0))
##Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8
## -0.902 -0.7271 0.2437 0.1441 0.1826 -0.7555 -0.8141 -0.8510
##s.e. 0.024 0.0330 0.0358 0.0333 0.0288 0.0267 0.0282 0.0245
## ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8 ma9 ma10
## 0 -0.3163 -1.0274 0.1851 0.1431 0.8646 0 0 -0.8527 0
##s.e. 0 0.0153 0.0238 0.0272 0.0270 0.0235 0 0 0.0258 0
## ma11
## 0
##s.e. 0
##sigma^2 estimated as 3457: log likelihood = -3948.05, aic = 7926.09
Box.test(m4$residuals,lag=26,type='Ljung')
## Box-Ljung test
##data: m4$residuals
##X-squared = 22.414, df = 26, p-value = 0.6659
tsdiag(m6)
#arima(8,1,11)调整模型有效。
#不确定差没有自相关性
#LB检验的p值在有效范围内
#m4模型的不确定差在2015年仍有模型有效信息,不确定差有少量异常值,LB检验的p值没有通过。m4模型的数据拟合优度有可提高的空间。
m5=arima(y,order=c(8,1,11))
##Warning messages:
##1: In log(s2) : 产生了NaNs
##2: In arima(y, order = c(8, 1, 11)) : 可能遇到了收斂问题:optim信息code=1
m5
##Call:
##arima(x = y, order = c(8, 1, 11))
##Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8
## -0.9313 -0.7688 0.2210 0.1188 0.1511 -0.7685 -0.8126 -0.8491
##s.e. 0.0377 0.0489 0.0523 0.0592 0.0573 0.0508 0.0460 0.0300
## ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8
## 0.0875 -0.2444 -1.0612 0.1097 0.1048 0.8558 0.0316 0.0744
##s.e. 0.0589 0.0569 0.0701 0.0734 0.0904 0.0740 0.0761 0.0783
## ma9 ma10 ma11
## -0.8179 -0.0586 -0.0803
##s.e. 0.0521 0.0489 0.0462
##sigma^2 estimated as 3433: log likelihood = -3944.77, aic = 7929.53
m6=arima(y,order=c(8,1,11),fixed=c(NA,NA,NA,NA,NA,NA,NA,NA,0,NA,NA,NA,NA,NA,0,0,NA,0,0))
m6
##Call:
##arima(x = y, order = c(8, 1, 11), fixed = c(NA, NA, NA, NA, NA, NA, NA, NA,
## 0, NA, NA, NA, NA, NA, 0, 0, NA, 0, 0))
##Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8
## -0.902 -0.7271 0.2437 0.1441 0.1826 -0.7555 -0.8141 -0.8510
##s.e. 0.024 0.0330 0.0358 0.0333 0.0288 0.0267 0.0282 0.0245
## ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8 ma9 ma10
## 0 -0.3163 -1.0274 0.1851 0.1431 0.8646 0 0 -0.8527 0
##s.e. 0 0.0153 0.0238 0.0272 0.0270 0.0235 0 0 0.0258 0
## ma11
## 0
##s.e. 0
##sigma^2 estimated as 3457: log likelihood = -3948.05, aic = 7926.09
Box.test(m4$residuals,lag=26,type='Ljung')
## Box-Ljung test
##data: m4$residuals
##X-squared = 22.414, df = 26, p-value = 0.6659
tsdiag(m6)
#arima(8,1,11)调整模型有效。
#不确定差没有自相关性
#LB检验的p值在有效范围内
选择arima(8,1,11)调整模型