CSI300 ARIMA模型走勢分析源程序



library(timeDate)

library(fUnitRoots)

library(xlsx)

library(rJava)

library(xlsxjars)

library(forecast)

library(zoo)

 

##建立樣本空間

dfile1="D:/programsdata/2013CSI.xlsx"        #2013CSI數據

dset1=read.xlsx(dfile1,1) 

dim(dset1)

#[1] 238   7

head(dset1)

tail(dset1)

dfile2="D:/programsdata/2014CSI.xlsx"        #2014CSI數據

dset2=read.xlsx(dfile2,1)

dim(dset2)

#[1] 245   7

head(dset2)

tail(dset2)

dfile3="D:/programsdata/2015CSI.xlsx"        #2015CSI數據

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]     #預測數據時間序列data28個樣本

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)調整模型


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章