【原创】R语言股票时间序列分析报告代码
- 格式:docx
- 大小:105.52 KB
- 文档页数:31
咨询QQ:3025393450有问题百度搜索“”就可以了欢迎登陆官网:/datablogR语言k-Shape时间序列聚类方法对股票价格时间序列聚类数据分析报告来源:大数据部落| 有问题百度一下“”就可以了这次,我们将使用k-Shape时间序列聚类方法检查与我们有业务关系的公司的股票收益率的时间序列。
企业对企业交易和股票价格在本研究中,我们将研究具有交易关系的公司的价格变化率的时间序列的相似性,而不是网络结构的分析。
由于特定客户的销售额与供应商公司的销售额之比较大,当客户公司的股票价格发生变化时,对供应商公司股票价格的反应被认为更大。
k-Shapek-Shape [Paparrizos和Gravano,2015]是一种关注时间序列形状的时间序列聚类方法。
在我们进入k-Shape之前,让我们谈谈时间序列的不变性和常用时间序列之间的距离。
时间序列距离测度欧几里德距离(ED)和动态时间扭曲(DTW)通常用作距离测量值,用于时间序列之间的比较。
咨询QQ:3025393450有问题百度搜索“”就可以了欢迎登陆官网:/datablog两个时间序列x =(x1,...,xm)和y =(y1,...,ym)的ED,其中m是系列的长度如下。
DTW是ED的扩展,允许局部和非线性对齐。
k-Shape提出称为基于形状的距离(SBD)的距离。
k-Shape算法k-Shape聚类侧重于缩放和移位的不变性。
k-Shape有两个主要特征:基于形状的距离(SBD)和时间序列形状提取。
SBD互相关是在信号处理领域中经常使用的度量。
使用FFT(+α)代替DFT来提高计算效率。
归一化互相关(系数归一化)NCCc是互相关系列除以单个系列自相关的几何平均值。
检测NCCc最大的位置ω。
咨询QQ:3025393450有问题百度搜索“”就可以了欢迎登陆官网:/datablogSBD取0到2之间的值,两个时间序列越接近0就越相似。
形状提取通过SBD找到时间序列聚类的质心向量有关详细的表示法,请参阅文章。
时间序列分析R语言代码时间序列分析是统计学中的一个重要分支,主要用于研究随时间变化的数据。
它可以帮助我们了解数据的趋势、周期性和季节性等特征,从而为预测和决策提供依据。
R语言是一种功能强大的统计分析工具,提供了丰富的时间序列分析函数和包,以下是一个简单的时间序列分析R语言代码示例。
首先,我们需要加载需要用到的包,如`ggplot2`和`forecast`。
```Rlibrary(ggplot2)library(forecast)```接下来,我们可以导入时间序列数据,并将其转换为时间序列对象。
假设我们有一个名为`data.csv`的数据文件,其中包含每个月份的销售额数据。
```Rdata <- read.csv("data.csv")ts_data <- ts(data$Sales, start = c(2000, 1), frequency = 12) ```通过绘制时间序列图,我们可以直观地观察数据的趋势和季节性。
```Rggplot(data, aes(x = Month, y = Sales)) +geom_line( +xlab("Month") +ylab("Sales") +theme_minimal``````R```接下来,我们可以通过绘制分解后的趋势、季节性和随机成分图来进一步研究数据的特征。
```Rtheme_minimal```我们还可以使用自回归移动平均模型(ARIMA)对时间序列数据进行建模和预测。
首先,我们需要估计ARIMA模型的参数。
```Rarima_model <- auto.arima(ts_data)```通过`auto.arima(`函数,R会自动选择最佳的ARIMA模型。
然后,我们可以使用这个模型来进行预测。
假设我们希望对未来12个月的销售额进行预测。
```Rforecast_data <- forecast(arima_model, h = 12)```最后,我们可以绘制预测结果和置信区间的图表。
#例2.1 绘制1964——1999年中国年纱产量序列时序图(数据见附录1.2)Data1.2=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.2.csv",header=T)#如果有标题,用T;没有标题用Fplot(Data1.2,type='o')#例2.1续tdat1.2=Data1.2[,2]a1.2=acf(tdat1.2)#例2.2绘制1962年1月至1975年12月平均每头奶牛产奶量序列时序图(数据见附录1.3)Data1.3=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.3.csv",header=F)tdat1.3=as.vector(t(as.matrix(Data1.3)))[1:168 ]#矩阵转置转向量plot(tdat1.3,type='l')#例2.2续acf(tdat1.3) #把字去掉pacf(tdat1.3)#例2.3绘制1949——1998年北京市每年最高气温序列时序图Data1.4=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.4.csv",header=T)plot(Data1.4,type='o')##不会定义坐标轴#例2.3续tdat1.4=Data1.4[,2]a1.4=acf(tdat1.4)#例2.3续Box.test(tdat1.4,type="Ljung-Box",lag=6) Box.test(tdat1.4,type="Ljung-Box",lag=12)#例2.4随机产生1000个服从标准正态分布的白噪声序列观察值,并绘制时序图Data2.4=rnorm(1000,0,1)Data2.4plot(Data2.4,type='l')#例2.4续a2.4=acf(Data2.4)#例2.4续Box.test(Data2.4,type="Ljung-Box",lag=6) Box.test(Data2.4,type="Ljung-Box",lag=12) #例2.5对1950——1998年北京市城乡居民定期储蓄所占比例序列的平稳性与纯随机性进行检验Data1.5=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.5.csv",header=T)plot(Data1.5,type='o',xlim=c(1950,2010),ylim=c (60,100))tdat1.5=Data1.5[,2]a1.5=acf(tdat1.5)#白噪声检验Box.test(tdat1.5,type="Ljung-Box",lag=6) Box.test(tdat1.5,type="Ljung-Box",lag=12)#例2.5续选择合适的ARMA模型拟合序列acf(tdat1.5)pacf(tdat1.5)#根据自相关系数图和偏自相关系数图可以判断为AR (1)模型#例2.5续 P81 口径的求法在文档上#P83arima(tdat1.5,order=c(1,0,0),method="ML")#极大似然估计ar1=arima(tdat1.5,order=c(1,0,0),method="ML") summary(ar1)ev=ar1$residualsacf(ev)pacf(ev)#参数的显著性检验t1=0.6914/0.0989p1=pt(t1,df=48,lower.tail=F)*2#ar1的显著性检验t2=81.5509/ 1.7453p2=pt(t2,df=48,lower.tail=F)*2#残差白噪声检验Box.test(ev,type="Ljung-Box",lag=6,fitdf=1) Box.test(ev,type="Ljung-Box",lag=12,fitdf=1) #例2.5续P94预测及置信区间predict(arima(tdat1.5,order=c(1,0,0)),n.ahead= 5)tdat1.5.fore=predict(arima(tdat1.5,order=c(1,0 ,0)),n.ahead=5)U=tdat1.5.fore$pred+1.96*tdat1.5.fore$seL=tdat1.5.fore$pred-1.96*tdat1.5.fore$seplot(c(tdat1.5,tdat1.5.fore$pred),type="l",col =1:2)lines(U,col="blue",lty="dashed")lines(L,col="blue",lty="dashed")#例3.1.1 例3.5 例3.5续#方法一plot.ts(arima.sim(n=100,list(ar=0.8))) #方法二x0=runif(1)x=rep(0,1500)x[1]=0.8*x0+rnorm(1)for(i in 2:length(x)){x[i]=0.8*x[i-1]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)##拟合图没有画出来#例3.1.2x0=runif(1)x=rep(0,1500)x[1]=-1.1*x0+rnorm(1)for(i in 2:length(x)){x[i]=-1.1*x[i-1]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)#例3.1.3方法一plot.ts(arima.sim(n=100,list(ar=c(1,-0.5)))) #方法二x0=runif(1)x1=runif(1)x=rep(0,1500)x[1]=x1x[2]=x1-0.5*x0+rnorm(1)for(i in 3:length(x)){x[i]=x[i-1]-0.5*x[i-2]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)#例3.1.4x0=runif(1)x1=runif(1)x=rep(0,1500)x[1]=x1 x[2]=x1+0.5*x0+rnorm(1)for(i in 3:length(x)){x[i]=x[i-1]+0.5*x[i-2]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)又一个式子x0=runif(1)x1=runif(1)x=rep(0,1500)x[1]=x1x[2]=-x1-0.5*x0+rnorm(1)for(i in 3:length(x)){x[i]=-x[i-1]-0.5*x[i-2]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)#均值和方差smu=mean(x)svar=var(x)#例3.2求平稳AR(1)模型的方差例3.3mu=0mvar=1/(1-0.8^2) #书上51页#总体均值方差cat("population mean and var are",c(mu,mvar),"\n")#样本均值方差cat("sample mean and var are",c(mu,mvar),"\n")#例题3.4svar=(1+0.5)/((1-0.5)*(1-1-0.5)*(1+1-0.5))#例题3.6 MA模型自相关系数图截尾和偏自相关系数图拖尾#3.6.1法一:x=arima.sim(n=1000,list(ma=-2))plot.ts(x,type='l')acf(x)pacf(x)法二x=rep(0:1000)for(i in 1:1000){x[i]=rnorm[i]-2*rnorm[i-1]}plot(x,type='l')acf(x)pacf(x)#3.6.2法一:x=arima.sim(n=1000,list(ma=-0.5))plot.ts(x,type='l')acf(x)pacf(x)法二x=rep(0:1000)for(i in 1:1000){x[i]=rnorm[i]-0.5*rnorm[i-1]}plot(x,type='l')acf(x)pacf(x)##错误于rnorm[i] : 类别为'closure'的对象不可以取子集#3.6.3法一:x=arima.sim(n=1000,list(ma=c(-4/5,16/25))) plot.ts(x,type='l')acf(x)pacf(x)法二:x=rep(0:1000)for(i in 1:1000){x[i]=rnorm[i]-4/5*rnorm[i-1]+16/25*rnorm[i-2] }plot(x,type='l')acf(x)pacf(x)##错误于x[i] = rnorm[i] - 4/5 * rnorm[i - 1] + 16/25 * rnorm[i - 2] :##更换参数长度为零#例3.6续根据书上64页来判断#例 3.7拟合ARMA(1,1)模型,x(t)-0.5x(t-1)=u(t)-0.8*(u-1),并直观观察该模型自相关系数和偏自相关系数的拖尾性。
r语言时间序列预测代码一、引言R语言是一种广泛使用的统计软件,在做时间序列预测中有着非常重要的作用。
本文将介绍其在时间序列预测中的基本原理和应用例子,并提供R语言时间序列预测代码。
二、R语言时间序列预测原理时间序列预测就是根据历史数据预测未来数据发展的趋势。
它有三种主要的类型:趋势分析、季节性分析和平稳性分析。
趋势分析就是预测从过去到将来的趋势变化。
季节性分析就是预测一些带有明显季节性变动的变量,例如气温变化,季节性分析可以用来减少预测中的不确定性并预测出可能出现的短期变化。
平稳性分析就是预测在某一时间点之后,变量会围绕某一水平进行摆动的变化,这就是ARIMA模型。
R语言有三种常用的时间序列预测模型:ARIMA模型、自回归模型和移动平均模型。
三、R语言时间序列预测示例下面的示例使用R语言的ARIMA模型来预测一个出行指数的变化: # 导入模块library(forecast)# 读取数据data <- read.csv('travel_index.csv')# 将数据转换成时间序列data_ts <- ts(data, frequency =12,start=c(2015,1),end=c(2020,10))# 训练模型arima_model <- auto.arima(data_ts)# 预测forecast <- forecast(arima_model, h = 24)# 结果可视化plot(forecast)四、结论本文介绍了R语言在时间序列预测中的基本原理和应用,并提供了一个实例的R语言时间序列预测代码。
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"]=0a[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语言常用上机命令分功能整理——时间序列分析为主第一讲应用实例•R的基本界面是一个交互式命令窗口,命令提示符是一个大于号,命令的结果马上显示在命令下面。
•S命令主要有两种形式:表达式或赋值运算(用’<-’或者’=’表示)。
在命令提示符后键入一个表达式表示计算此表达式并显示结果。
赋值运算把赋值号右边的值计算出来赋给左边的变量。
•可以用向上光标键来找回以前运行的命令再次运行或修改后再运行。
•S是区分大小写的,所以x和X是不同的名字。
我们用一些例子来看R软件的特点。
假设我们已经进入了R的交互式窗口。
如果没有打开的图形窗口,在R中,用:> x11() 可以打开一个作图窗口。
然后,输入以下语句:x1 = 0:100x2 = x1*2*pi/100y = sin(x2)plot(x2,y,type="l")这些语句可以绘制正弦曲线图。
其中,“=”是赋值运算符。
0:100表示一个从0到100 的等差数列向量。
第二个语句可以看出,我们可以对向量直接进行四则运算,计算得到的x2 是向量x1的所有元素乘以常数2*pi/100的结果。
从第三个语句可看到函数可以以向量为输入,并可以输出一个向量,结果向量y的每一个分量是自变量x2的每一个分量的正弦函数值。
plot(x2,y, type="l",main="画图练习",sub="好好练", xlab="x轴",ylab='y轴')有关作图命令plot的详细介绍可以在R中输入help(plot)数学函数abs,sqrt:绝对值,平方根 log, log10, log2 , exp:对数与指数函数 sin,cos,tan,asin,acos,atan,atan2:三角函数 sinh,cosh,tanh,asinh,acosh,atanh:双曲函数简单统计量sum, mean, var, sd, min, max, range, median, IQR(四分位间距)等为统计量,sort,order,rank与排序有关,其它还有ave,fivenum,mad,quantile,stem等。
4基于数据挖掘预测模型的股票交易系统根据上市保险公司的业务分析和财务分析来看,对投资者来投资中国平安的价值最高,由于实验运行时间较长,数据挖掘分析的方法相同,与选择哪家上市保险公司历史交易数据无关。
本文选择了中国人寿历史交易数据进行了数据挖掘与分析。
4.1数据来源本文所用数据为中国人寿(601628)历史交易数据,数据来源于雅虎财经网站(网址:https:// )。
获取方法为如下R 代码:library(tseries)CLI_Web_1 <- as.xts(get.hist.quote("601628.ss",start="2007-01-09",quote=c("Open", "High", "Low", "Close","V olume","AdjClose")))head(CLI_Web_1)并将所下载数据转换为R 中的时间序列对象(xts 对象),本实验的数据开始时间为2007年1月9日,结束时间为2016年6月4日。
4.2建模过程4.2.1数据处理用R 函数colnames 将下载数据整理成如下统一格式:Open High Low Close V olume Adjusted2007-01-09 37.00 40.20 37.00 38.93 319018900 34.162007-01-10 39.80 40.30 38.72 39.46 68610200 34.632007-01-11 38.80 39.60 37.01 38.29 43902500 33.602007-01-12 37.79 39.74 37.50 39.50 42177400 34.662007-01-15 39.82 43.45 38.95 43.45 56131900 38.132007-01-16 45.28 46.88 44.06 45.05 44567700 39.534.2.2 定义数据挖掘任务本模型所要解决的数据挖掘任务为预测任务。
使用R语言进行时间序列(arima,指数平滑)分析读时间序列数据您要分析时间序列数据的第一件事就是将其读入R,并绘制时间序列。
您可以使用scan()函数将数据读入R,该函数假定连续时间点的数据位于包含一列的简单文本文件中。
数据集如下所示:••••••••••••••••Age of Death of Successive Kings of England#starting with William the Conqueror#Source: McNeill, "Interactive Data Analysis"604367505642506568436534...仅显示了文件的前几行。
前三行包含对数据的一些注释,当我们将数据读入R时我们想要忽略它。
我们可以通过使用scan()函数的“skip”参数来使用它,它指定了多少行。
要忽略的文件顶部。
要将文件读入R,忽略前三行,我们键入:•••> kings[1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59 48[26] 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56在这种情况下,英国42位连续国王的死亡年龄已被读入变量“国王”。
一旦将时间序列数据读入R,下一步就是将数据存储在R中的时间序列对象中,这样就可以使用R的许多函数来分析时间序列数据。
要将数据存储在时间序列对象中,我们使用R中的ts()函数。
例如,要将数据存储在变量'kings'中作为R中的时间序列对象,我们键入:••••••Time Series:Start = 1End = 42Frequency = 1[1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59 48[26] 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56有时,您所拥有的时间序列数据集可能是以不到一年的固定间隔收集的,例如,每月或每季度。
有问题到淘宝找“大数据部落”就可以了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"]=0a[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 easonalplot(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.0001333355cat("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)有问题到淘宝找“大数据部落”就可以了## 从偏相关系数的置信区间来看,由于相关系数都在置信区间之内,因此可以认为该序列平稳## Predictive model: ARIMA models predict## 然后检测序列的平稳性和独立性,这里我们使用的是Box-Ljung testBox.test(z,lag=10,type="Ljung")#### Box-Ljung test#### data: z## X-squared = 1128.9, df = 10, p-value < 2.2e-16## 由于p值大于0.05,因此我们接受原假设认为该数列独立,即原数列为白噪声序列 ## 然后我们对序列进行单位根检测,如果序列不存在单位根,那么该数列是平稳序列adf.test(z )## Warning in adf.test(z): p-value smaller than printed p-value#### Augmented Dickey-Fuller Test有问题到淘宝找“大数据部落”就可以了#### data: z## Dickey-Fuller = -28.804, Lag order = 16, p-value = 0.01## alternative hypothesis: stationary## 由于p值大于0.05,因此我们接受原假设认为该数列平稳## 从上面的自相关图和偏相关图,我们可以看到该模型为arima( 1,0,0 )library("forecast")## Warning: package 'forecast' was built under R version 3.3.3x<-arima(z,c(1,0,0))## 因此建立模型之后对该序列进行预测r1 <-predict(x,n.ahead=12)plot(forecast(x,h=12))## 在预测之后,我们可以得到该序列的预测置信区间,深蓝色的区域是95%的置信区间,而且蓝色的区域代表90%的置信区间。