【原创】R语言股票时间序列分析报告代码
有问题到淘宝找“大数据部落”就可以了
library(quantmod)
# library(neuralnet)
library(quantmod)
library(plyr)
library(TTR)
library(ggplot2)
library(scales)
library(tseries)
data=read.csv("600119.csv")
a=data$收盘价
a=diff(a)/a[-length(a)]
a[a=="NaN"]=0
a[a=="Inf"]=0
##浏览数据
data[,2]=data$日期
data[,4]=c(0, a)
##绘制时间序列图
## 收集历史资料,加以整理,编成时间序列,并根据时间序列绘成统计图。时间序列分析通常是把各种可能发生作用的因素进行分类,传统的分类方法是按各种因素的特点或影响效果分为四大类:(1)长期趋势;(2)季节变动;(3)循环变动;(4)不规则变动。
data=data[nrow(data):1,]
plot(data[,2],data[,4])
##技术指标
lines( data[,2], DEMA(data[,4]) ,col="green")
lines( data[,2], SMA(data[,4]) ,col="red")
legend("bottomright",col=c("green","red"),legend =c("DEMA","SMA"),lty= 1,pch=1)
有问题到淘宝找“大数据部落”就可以了
## 从时间序列图形来看,序列有明显趋势,所以该序列一定不是平稳序列。因为原序列为非平稳序列,所以选择一阶差分继续分析
birthstimeseries=data[,4]
birthstimeseries <-ts(birthstimeseries, frequency=300, start=c(1998,1 5))
birthstimeseries=na.omit(birthstimeseries)
## 2)Decompose the time series data into trend, seasonality and error components. (10 points)
## 开始分解季节性时间序列。
## 一个季节性时间序列中会包含三部分,趋势部分、季节性部分和无规则部分。分解时间序列就是要把时间序列分解成这三部分,然后进行估计。
## 对于可以使用相加模型进行描述的时间序列中的趋势部分和季节性部分,我们可以使用 R中的“decompose()” 函数来估计。这个函数可以估计出时间序列中趋势的、季节性的和不规则的部分,而此时间序列须是可以用相加模型描述的。
## “decompose()” 这个函数返回的结果是一个列表对象,里面包含了估计出的季节性部分,趋势部分和不规则部分,他们分别对应的列表对象元素名为“seasonal” 、“trend” 、和“random” 。
有问题到淘宝找“大数据部落”就可以了
birthcomponents <-decompose(birthstimeseries)
plot(birthcomponents)
## 要剔除某个趋势时(我们就去掉季节因素),我们可以运用减法去掉该因素,下图就是去掉季节性因素后的修正序列。
birthstimeseriesseasonallyadjusted<-birthstimeseries-birthcomponents$s easonal
plot(birthstimeseriesseasonallyadjusted)
有问题到淘宝找“大数据部落”就可以了
acf(birthstimeseriesseasonallyadjusted)
有问题到淘宝找“大数据部落”就可以了
##看图中的横轴lag表示滞后阶数,纵轴表示对应各阶的相关系数,0阶滞后表示对自己的自相关系数,所以一般对应的相关系数值为1,再看图中上下的蓝色虚线内为95%置信区间,若lag>0对应的相关系数均在该区间内则表示该变量自相性问题不严重
pacf(birthstimeseriesseasonallyadjusted)
有问题到淘宝找“大数据部落”就可以了
##看图中的横轴lag表示滞后阶数,纵轴表示对应各阶的相关系数,0阶滞后表示对自
己的自相关系数,所以一般对应的相关系数值为1,再看图中上下的蓝色虚线内为95%置信区间,若lag>0对应的相关系数均在该区间内则表示该变量自相性问题不严重
datad=diff(birthstimeseriesseasonallyadjusted)
## 3)Use Holt’s exponential smoothing to make short-term forecasts. ## 指数平滑法(Exponential Smoothing,ES)是布朗(Robert G..Brown)所提出,
布朗认为时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续到未来,所以将较大的权数放在最近的资料。 ## 指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数
## 一次指数平滑法
## 平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是
有问题到淘宝找“大数据部落”就可以了
仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。
## 也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。
## 简单指数平滑法。简单指数平滑适用于可用相加模型描述,并且处于恒定水平和没有季节变动的时间序列地短期预测。
## 简单指数平滑法提供了一种方法估计当前时间点上的水平。为了更加准确的估计当前时间的水平,我们使用alpha参数来控制平滑,alpha的取值在0-1之间。当alpha越接近0,临近预测的观测值在预测中的权重就越小。
plot(datad)
## 从该图中可以看出整个曲线处于大致不变的水平,且随机变动在整个时间序列范围内也可以认为是大致不变的,所以该序列可以大致被描述为一个相加模型,因此我们可以使用简单指数平滑法进行预测。我们采用R中的HoltWinters()函数,为了能够使用Holt Winters中的指数平滑,我们需要进行参数设置:beta=FALSE和gamma=FALSE,预测结果如下图:
有问题到淘宝找“大数据部落”就可以了
## 此外我们可以画出预测值和实际值,看看预测效果:
hm=HoltWinters(datad,beta=F,gamma = F)
hm
## Holt-Winters exponential smoothing without trend and without seasona l component.
##
## Call:
## HoltWinters(x = datad, beta = F, gamma = F)
##
## Smoothing parameters:
## alpha: 0.0009575354
## beta : FALSE
## gamma: FALSE
##
## Coefficients:
## [,1]
## a -0.0001333355
cat("HoltWinters()告诉我们alpha参数的估计值约为",hm$alpha,",非常接近0,说明该序列比较平稳,默认情况下HoltWInters仅会给出原始时间序列所覆盖时期内的预测,预测值存在房子名为为fitted的变量中,我们可以通过rainseriesforecasts $fitted来获取这些值。"
)
## HoltWinters()告诉我们alpha参数的估计值约为 0.0009575354 ,非常接近0,说明该序列比较平稳,默认情况下HoltWInters仅会给出原始时间序列所覆盖时期内的预测,预测值存在房子名为为fitted的变量中,我们可以通过rainseriesforecasts $fitted来获取这些值。
plot(hm)
有问题到淘宝找“大数据部落”就可以了
## 从之前的alpha和上图,可见我们预测的过于平滑,R提供了样本预测误差平方和(SSE)来衡量预测效果。可以通过rainseriesforecasts$SSE来获取该值。
hm$SSE
## [1] 91.00893
## 4)Fit the data with appropriate ARIMA Models.
z=datad
## 然后我们绘制自相关图和偏自相关图对序列进行进一步的检测
acf(z)
有问题到淘宝找“大数据部落”就可以了
## 从上面的图中我们可以发现自相关系数在滞后一期之后,很快录入到置信区间之内,因此可以认为该序列平稳
pacf(z)