1.简介

  预测就是借助于对过去的探讨去推测、了解未来。灰色预测通过原始数据的处理和灰色模型的建立,发现、掌握系统发展规律,对系统的未来状态做出科学的定量预测。对于一个具体的问题,究竟选择什么样的预测模型应以充分的定性分析结论为依据。模型的选择不是一成不变的。一个模型要经过多种检验才能判定其是否合适,是否合格。只有通过检验的模型才能用来进行预测。本章将简要介绍灰数、灰色预测的概念,灰色预测模型的构造、检验、应用,最后对灾变预测的原理作了介绍。

灰色系统理论的产生和发展动态

  • 1982邓聚龙发表第一篇中文论文《灰色控制系统》标志着灰色系统这一学科诞生。
  • 1985灰色系统研究会成立,灰色系统相关研究发展迅速。
  • 1989海洋出版社出版英文版《灰色系统论文集》,同年,英文版国际刊物《灰色系统》杂志正式创刊。目前,国际、国内200多种期刊发表灰色系统论文,许多国际会议把灰色系统列为讨论专题。国际著名检索已检索我国学者的灰色系统论著500多次。灰色系统理论已应用范围已拓展到工业、农业、社会、经济、能源、地质、石油等众多科学领域,成功地解决了生产、生活和科学研究中的大量实际问题,取得了显著成果。

灰色系统与模糊数学、黑箱方法的区别

  • 主要在于对系统内涵与外延处理态度不同;研究对象内涵与外延的性质不同。
  • 灰色系统着重外延明确、内涵不明确的对象,模糊数学着重外延不明确、内涵明确的对象。
  • “黑箱”方法着重系统外部行为数据的处理方法,是因果关系的两户方法,使扬外延而弃内涵的处理方法,而灰色系统方法是外延内涵均注重的方法。

2.GM(1,1)的R语言实现

2.1 R源码

#灰色预测模型G(,)
GM11<-function(x0,t){ #x0为输入学列,t为预测个数
  x1<-cumsum(x0) #一次累加生成序列1-AG0序列(累加序列)
  b<-numeric(length(x0)-)# 初始化长度为length(x0)-1的整数部分个numeric类型且值为0的数据集b
  n<-length(x0)-# n 为length(x0)-1长度 因为需要生成MEAN(紧邻均值)生成序列 其长度少1
  :n){ #生成x1的紧邻均值生成序列
    b[i]<--(x1[i]+x1[i+])/
    b} #得序列b,即为x1的紧邻均值生成序列
  D<-numeric(length(x0)-)
  D[]<-
  B<-cbind(b,D)#作B矩阵
  BT<-t(B)#B矩阵转置
  M<-solve(BT%*%B)#求BT*B得逆
  YN<-numeric(length(x0)-)
  YN<-x0[:length(x0)]
  alpha<-M%*%BT%*%YN  #模型的最小二乘估计参数列满足alpha尖
  alpha2<-matrix(alpha,ncol=)# 将结果变成一列
  # 得到方程的两个系数
  a<-alpha2[]
  u<-alpha2[]

  # 下面为结果输出
  # 输出参数估计值及模拟值
  cat("GM(1,1)参数估计值:",'\n',"发展系数-a=",-a,"  ","灰色作用量u=",u,'\n','\n') #利用最小二乘法求得参数估计值a,u
  y<-numeric(length(c(:t)))# t为给定的预测个数
  y[]<-x1[] # 第一个数不变
  :(t-)){  #将a,u的估计值代入时间响应序列函数计算x1拟合序列y
    y[w+]<-(x1[]-u/a)*exp(-a*w)+u/a
  }
  cat("x(1)的模拟值:",'\n',y,'\n')
  xy<-numeric(length(y))
  xy[]<-y[]
  :t){ #运用后减运算还原得模型输入序列x0预测序列
    xy[o]<-y[o]-y[o-]
  }
  cat("x(0)的模拟值:",'\n',xy,'\n','\n')                       

  # 计算残差e
  e<-numeric(length(x0))
  :length(x0)){
    e[l]<-x0[l]-xy[l] #得残差序列(未取绝对值)
  }
  cat("绝对残差:",'\n',e,'\n')
  #计算相对误差
  e2<-numeric(length(x0))
  :length(x0)){
    e2[s]<-(abs(e[s])/x0[s]) #得相对误差
  }
  cat("相对残差:",'\n',e2,'\n','\n')
  cat(),'\n')
  cat()*,"%",'\n')
  cat(-(sum(e2)/(length(e2)-)))*,"%",'\n','\n')

  #后验差比值检验
  avge<-mean(abs(e));esum<-sum((abs(e)-avge)^);evar=esum/(length(e)-);se=sqrt(evar)  #计算残差的均方差se
  avgx0<-mean(x0);x0sum<-sum((x0-avgx0)^);x0var=x0sum/(length(x0));sx=sqrt(x0var)  #计算原序列x0的方差sx
  cv<-se/sx  #得验差比值(方差比)
  cat("后验差比值检验:",'\n',"C值=",cv,'\n')#对后验差比值进行检验,与一般标准进行比较判断预测结果好坏。
  #计算小残差概率
  P<-sum((abs(e)-avge)<0.6745*sx)/length(e)
  cat("小残差概率:",'\n',"P值=",P,'\n')

  if(cv < 0.35 && P>0.95){
    cat("C<0.35, P>0.95,GM(1,1)预测精度等级为:好",'\n','\n')
  }else{
    if(cv<0.5 && P>0.80){
      cat("C值属于[0.35,0.5), P>0.80,GM(1,1)模型预测精度等级为:合格",'\n','\n')
    }else{
      if(cv<0.65 && P>0.70){
        cat("C值属于[0.5,0.65), P>0.70,GM(1,1)模型预测精度等级为:勉强合格",'\n','\n')
      }else{
        cat("C值>=0.65, GM(1,1)模型预测精度等级为:不合格",'\n','\n')
      }
    }
  }
  #画出输入序列x0的预测序列及x0的比较图像
  plot(xy,col=,xlab='时间序列',ylab='值')
  points(x0,col=)
  legend(,),lty=l,col=c('blue','red'))
}

2.2 GM11 测试

> x<-c(2.67,3.13,3.25,3.36,3.56,3.72)
> GM11(x,length(x)+)
GM(,)参数估计值:
 发展系数-a= 0.04396098    灰色作用量u= 2.925617 

x()的模拟值:
 2.67 5.78087 9.031547 12.42832 15.97774 19.68668 23.56231 27.61211
x()的模拟值:
 2.67 3.11087 3.250677 3.396768 3.549424 3.708941 3.875626 4.049803 

绝对残差:
  0.01913011 -0.0006772995 -0.03676788 0.010576 0.01105927
相对残差:
  0.006111858 0.0002083999 0.01094282 0.002970786 0.002972921 

残差平方和= 0.001952456
平均相对误差= 0.4641357 %
相对精度= 99.53586 % 

后验差比值检验:
 C值= 0.0407599
小残差概率:
 P值=
C<,)预测精度等级为:好 

本文链接:http://www.cnblogs.com/homewch/p/5783073.html

R实现灰色预测的更多相关文章

  1. [matlab] 21.灰色预测、线性回归分析模型与最小二乘回归 (转载)

    灰色预测的主要特点是只需要4个数据,就能解决历史数据少,序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律性较强的生成序列,易于检验 但缺点是只适合中短期的预测,且只适合指数级增长的 ...

  2. 灰色预测原理及JAVA实现

    最近在做项目时,用户不想使用平均值来判断当前数据状态,想用其他的方式来分析数据的变化状态,在查找了一些资料后,想使用灰色预测来进行数据的预测.下面的内容是从网上综合下来的,java代码也做了一点改动, ...

  3. matlab批量灰色预测

    没事玩了一下matlab 发现现在网上的代码都是一组数据预测 所以我就写个批量数据的预测 顺便学习下matlab ----------------------------------我是快乐的分割线- ...

  4. 灰色预测 GM11模型

    灰色预测实现见:https://www.jianshu.com/p/a35ba96d852b from pandas import Series from pandas import DataFram ...

  5. 灰色预测--matlab&python实现

    function SGrey X0 = input('请输入原始负荷数据:'); %输入原始数据 n = length(X0); %原始n年数据 %累加生成 X1 = zeros(1,n); for ...

  6. python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导

    来源公式推导连接 https://blog.csdn.net/qq_36387683/article/details/88554434 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模 ...

  7. 【数学建模】数模day13-灰色系统理论I-灰色关联与GM(1,1)预测

    接下来学习灰色系统理论. 0. 什么是灰色系统? 部分信息已知而部分信息未知的系统,我们称之为灰色系统.相应的,知道全部信息的叫白色系统,完全未知的叫黑色系统. 为什么采用灰色系统理论? 在给定信息不 ...

  8. 从2019-nCoV趋势预测问题,联想到关于网络安全态势预测问题的讨论

    0. 引言 在这篇文章中,笔者希望和大家讨论一个话题,即未来趋势是否可以被精确或概率性地预测. 对笔者所在的网络安全领域来说,由于网络攻击和网络入侵常常变现出随机性.非线性性的特征,因此纯粹的未来预测 ...

  9. 【数学建模】灰色系统理论II-Verhulst建模-GM(1,N)-GM(2,1)建模

    灰色系统理论中,GM(1,1)建模很常用,但他是有一定适应范围的. GM(1,1)适合于指数规律较强的序列,只能描述单调变化过程.对于具有一定随机波动性的序列,我们考虑使用Verhulst预测模型,或 ...

随机推荐

  1. Java Web学习笔记8

    上下文参数(context-param) 由于init-param是配置在<servlet>标签里的,只能有这个Servlet来读取,因此它不是全局的参数,不能被其他的Servlet读取. ...

  2. thinkphp分页二,分装到funciton.php

    function.php代码 <?php /* 全局分页 * $table 数据表名 * $order 排序 * $pagesize 每页显示N个 * $where 查询条件 * $rollPp ...

  3. [NHibernate]并发控制

    目录 写在前面 文档与系列文章 并发控制 乐观并发控制(Optimistic Concurrency) 一个例子 悲观并发控制(Pessimistic Concurrency) 总结 写在前面 上篇文 ...

  4. tyvj1189 盖房子

    描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的.但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这些瑕 ...

  5. width的数值为百分比

    对于width的数值为百分比的时候,表示该元素的长度是相对于父容器来算的. 对于padding-right和padding-left比较好理解也是相对于父容器来算的,但容易出错的是padding-to ...

  6. PHP mkdir 0777权限问题

    在linux系统中,即使我们使用root帐号去手工执行php命令: mkdir('test', 0777); 结果文件的权限依然为: drwxr-xr-x 2 root root 4096 Jun 1 ...

  7. html5页面打包成App - Android或Iphone安装程序

    下载安装前端开发工具:HBuilder 官网下载:http://www.dcloud.io/ 根据官网说明安装 * 打开登录HBuilder,把做好的H5页面通过添加app项目把H5的文件夹加入进来( ...

  8. TouchSlide1.1,手机上的幻灯片

    TouchSlide 是纯javascript打造的触屏滑动特效插件 http://pan.baidu.com/s/1bpoWNin 官网:http://www.superslide2.com/Tou ...

  9. C#高级编程笔记 Day 6, 2016年9月 14日 (泛型)

    1.泛型类的功能:在创建泛型类时,还需要一些其他C#关键字.例如,不能把null赋予泛型类型.此时,可以使用default 关键字.如果泛型类型不需要Object类的功能,但需要调用泛型类上的某特定方 ...

  10. dp 走格子问题

    问题: 一个5x8的格子,想从左下角走到右上角,求最短路径,共有多少种走法. 思路: 因为是求最短路径,所以,只会往右往上走. 我们可以把棋盘的左下角看做二维坐标的原点(0,0),把棋盘的右上角看做二 ...