ARIMA模型-R语言

来源:互联网 发布:java usb api 编辑:程序博客网 时间:2024/05/16 11:53

利用ARIMA模型进行时间序列预测,具体方式在这里不做详细介绍了,可到网上进行查询,资料甚多。从代码注释中可获取ARIMA模型拟合的方法步骤,在实际操作中预测效果良好,数据也不附带了,有时间有对应指标这类数据即可。

#加载相关R包install.packages("tseries")install.packages("xts")install.packages("forecast")library(tseries)library(xts)library(forecast)data<-read.csv("F://分类别//排名算法//数据结果及验证//forecast.csv",header=T,as.is=T)#读入数据works<-unique(data[,3])work<-data[grep(works[4],data[,3]),]#获取指定数据index<-xts(work[,8],as.Date(work[,11],))#将数据框转化为时间序列plot(index)#绘制时序图,查看趋势acf(index)#自相关图pacf(index)#偏自相关图#index_diff1<-diff(index,differences=1)#一阶差分#plot(index_diff1)#index.fit<-arima(index,order=c(1,3,0),,)#通过观察自相关图与偏自相关图的拖尾与结尾情况确定参数,拟合模型index.fit<-auto.arima(index,trace=T)#自动获取参数,并拟合模型index.fit#可查看模型拟合验证指标信息等forecast<-forecast(index.fit,h=10,level=c(99.5))#设置预测期数h与置信度水平forecast

单一作品可用上述方式进行ARIMA模型预测,对于大量作品的时序数据最好是采用auto.arima()方法处理。

####函数集中处理####getForecast<-function(data,name_col,value_col,time_col,p,q,x,num,data_out){  works<-unique(data[,name_col])  n=length(works)  result<-data.frame()  for(i in 1:n){        work<-data[grep(works[i],data[,name_col]),]    work_out<-data_out[grep(works[i],data_out[,name_col]),]      index<-xts(work[,value_col],as.Date(work[,time_col],))      #index.fit<-try(arima(index,order=c(p,q,x),,silent=TRUE)#拟合模型      index.fit<-try(auto.arima(index,trace=T),silent=TRUE)#自动获取参数,并拟合模型      if('try-error' %in% class(index.fit)){        next      }else{        forecast<-forecast(index.fit,h=num,level=c(99.5))        temp<-forecast$mean        m<-length(temp)        foreList<-array(,m)        for(j in 1:m){          foreList[j]=temp[j]        }        fore<-data.frame()        w1=nrow(work_out)        w=1        if(length(foreList)==nrow(work_out)){          fore<-data.frame(work_out,foreList)        }else{          temps<-foreList          if(w1==0){            next          }else{            foreList<-array(,w)            for(k in 1:w){              foreList[k]=temps[k]                        }            fore<-data.frame(work_out,foreList)           }        }                result<-rbind(result,fore)      }  }  return(result)}####函数调用 data<-read.csv("F://分类别//排名算法//数据结果及验证//forecast.csv",header=T,as.is=T)data_out<-read.csv("F://分类别//排名算法//数据结果及验证//fore.csv",header=T,as.is=T)result<-getForecast(data,3,10,11,,,,10,data_out)write.csv(result,"F://分类别//排名算法//数据结果及验证//forecast_Result_tj.csv")
0 0
原创粉丝点击