600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > R语言简单指数平滑(自编函数)

R语言简单指数平滑(自编函数)

时间:2021-02-11 20:25:04

相关推荐

R语言简单指数平滑(自编函数)

系列文章目录

R语言利用贝叶斯分类法(klaR程序包),训练数据集,预测数据的分类

R语言载入arules程序包的Epub数据集,使用Apriori算法,进行关联规则分析

R语言进行系统聚类分析并作图(数据来源国家统计局)

R语言和RStudio安装,载入TXT、CSV和XLSX(利用RODBC)文件

文章目录

系列文章目录前言一、以AirPassengers数据集用ses()函数做简单指数平滑预测二、编写自己的函数实现简单指数平滑1.引入库三、修改函数,以返回平方误差之和四、用optim()函数找到a和s的最佳值五、将myses2()和myses3()结合起来,同时找A和S0的最佳值并返回下一期的预测值总结

前言

这其实是课程作业,要求如图:

一、以AirPassengers数据集用ses()函数做简单指数平滑预测

代码如下:

install.packages("forecast")library(forecast)model<-ses(AirPassengers)forecast(model,h=1)autoplot(model)+autolayer(fitted(model))

执行结果如图:

用summary方法能查看原ses()方法的参数,可知默认的alpha值为0.9999,默认的S0值为111.9892。

summary(model)

二、编写自己的函数实现简单指数平滑

1.引入库

代码如下:

myses1 <- function(y,a,s) {l=rep(1,145);l[1]=a*y[1]+(1-a)*s;for(t in 2:144 ){l[t]=a*y[t]+(1-a)*l[t-1];}y[145]=l[144];return(y[145]);}y<-matrix(AirPassengers,nrow = 1,ncol = 144)model1<-myses(y,0.9999,111.9892)forecast(model1,h=1)

执行结果如图:

如图所示,确实给出了和ses()一样的执行结果,即431.9958.

summary(model1)

三、修改函数,以返回平方误差之和

myses2 <- function(y,a,s) {l=rep(1,145);l[1]=a*y[1]+(1-a)*s;VAR_sum=(y[1]-s)*(y[1]-s);for(t in 2:144 ){l[t]=a*y[t]+(1-a)*l[t-1];sum=sum+(y[t]-l[t])*(y[t]-l[t]);}return(sum);}y<-matrix(AirPassengers,nrow = 1,ncol = 144)sum<-myses2(y,0.9999,111.9892)sum

四、用optim()函数找到a和s的最佳值

myses3 <- function(z) {a=z[1]s=z[2]l=rep(1,145);var_y=matrix(AirPassengers,nrow = 1,ncol = 144)l[1]=a*y[1]+(1-a)*s;VAR_sum=(y[1]-s)*(y[1]-s);for(t in 2:144 ){l[t]=a*y[t]+(1-a)*l[t-1];sum=sum+(y[t]-l[t])*(y[t]-l[t]);}return(sum);}optim(c(0.9999,111.9892),fn=myses3,lower =c(0,0),upper = c(1,Inf),method = "L-BFGS-B")

五、将myses2()和myses3()结合起来,同时找A和S0的最佳值并返回下一期的预测值

myses4<-function(){myses3 <- function(z) {a=z[1]s=z[2]l=rep(1,144);var_y=matrix(AirPassengers,nrow = 1,ncol = 144)l[1]=a*y[1]+(1-a)*s;VAR_sum=(y[1]-s)*(y[1]-s);for(t in 2:144 ){l[t]=a*y[t]+(1-a)*l[t-1];sum=sum+(y[t]-l[t])*(y[t]-l[t]);}return(sum);}a=optim(c(0.9999,111.9892),fn=myses3,lower =c(0,0),upper = c(1,Inf),method = "L-BFGS-B")$par[1]s=optim(c(0.9999,111.9892),fn=myses3,lower =c(0,0),upper = c(1,Inf),method = "L-BFGS-B")$par[2]myses1 <- function(y,a,s) {l=rep(1,144);l[1]=a*y[1]+(1-a)*s;for(t in 2:144 ){l[t]=a*y[t]+(1-a)*l[t-1];}y[145]=l[144];return(y[145]);}y<-matrix(AirPassengers,nrow = 1,ncol = 144);print("a和s0的最优值为:");print(optim(c(0.9999,111.9892),fn=myses3,lower =c(0,0),upper = c(1,Inf),method = "L-BFGS-B")$par);print("下一期的预测值为:");print(myses1(y,a,s));}

总结

以上就是R语言实现简单指数平滑的教程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。