搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  data1.xls
资料下载链接地址: https://bbs.pinggu.org/a-2954490.html
附件大小:
看到很少有用R语言作GM(1,N)模型的,自己根据GM(1,1)的代码修改了一下,出现了一些问题。GM(1,2)的时候跑《灰色系统理论及其应用》里例题的数据是和书上吻合的,但是拓展到GM(1,3)的情况时,预测结果误差非常大,我觉得不应该是这样,但是不知道是为什么?有大神可以帮忙看看我的代码哪里出现问题了吗?十分感谢!

附件的excel中sheet2是本次数据。

  1. #GM(1,2)

  2. gm12<-function(x10,x20,t){
  3. x11 <- cumsum(x10)
  4. x21 <- cumsum(x20)
  5. b <- numeric(length(x10)-1)
  6. n <- length(x10)-1
  7. for(i in 1:n){
  8. b[i]<--(x11[i]+x11[i+1])/2
  9. b}
  10. B <- cbind(b,x21[-1])
  11. BT <- t(B)
  12. M <- solve(BT%*%B)
  13. YN <- numeric(length(x10)-1)
  14. YN <- x10[2:length(x10)]
  15. alpha <- M%*%BT%*%YN
  16. alpha2 <- matrix(alpha,ncol=1)
  17. a <- alpha2[1]
  18. u1 <- alpha2[2]
  19. cat("GM(1,N)参数估计值:",'\n',"系统发展系数-a=",-a,"",
  20. "驱动系数u1=",u1,'\n','\n')
  21. y <- numeric(length(c(1:t)))
  22. y[1]<-x10[1]
  23. for(w in 1:(t-1)){
  24. y[w+1] <- (x10[1]-u1/a*x21[w+1])*exp(-a*w)+u1/a*x21[w+1]
  25. }
  26. cat("x(11)模拟值",'\n',y,'\n')
  27. xy <- numeric(length(y))
  28. xy[1] <- y[1]
  29. for(o in 2:t){
  30. xy[o] <- y[o] - y[o-1]
  31. }
  32. cat("x(10)模拟值",'\n',xy,'\n','\n')

  33. #计算残差e
  34. e <- numeric(length(x10))
  35. for(l in 1:length(x10)){
  36. e[l] <- x10[l]-xy[l]
  37. }
  38. cat("残差:",'\n',e,'\n')
  39. #计算相对误差
  40. e2 <- numeric(length(x10))
  41. for(s in 1:length(x10)){
  42. e2[s] <- (abs(e[s])/x10[s]) #μÃÏà¶ÔÎó2î
  43. }
  44. cat("相对残差",'\n',e2,'\n','\n')
  45. cat("残差平方和=",sum(e^2),'\n')
  46. cat("平均相对误差=",sum(e2)/(length(e2)-1)*100,"%",'\n')
  47. cat("相对精度=",(1-(sum(e2)/(length(e2)-1)))*100,"%",'\n','\n')

  48. #后验差比值检验
  49. avge<-mean(abs(e));esum<-sum((abs(e)-avge)^2);evar=esum/(length(e)-1);se=sqrt(evar)
  50. avgx10<-mean(x10);x10sum<-sum((x10-avgx10)^2);x10var=x10sum/(length(x10));sx=sqrt(x10var)
  51. cv<-se/sx
  52. cat("后验差比值检验:",'\n',"C值=",cv,'\n')
  53. if(cv < 0.35){
  54. cat("C值<0.35, GM(1,N)预测精度等级为:好",'\n','\n')
  55. }else{
  56. if(cv<0.5){
  57. cat("C值属于[0.35,0.5), GM(1,N)模型预测精度等级为:合格",'\n','\n')
  58. }else{
  59. if(cv<0.65){
  60. cat("C值属于[0.5,0.65), GM(1,N)模型预测精度等级为:勉强合格",'\n','\n')
  61. }else{
  62. cat("C值>=0.65, GM(1,N)模型预测精度等级为:不合格",'\n','\n')
  63. }
  64. }
  65. }
  66. #画出输入序列x10的预测序列及x10的比较图像
  67. plot(xy,col='blue',type='b',pch=16,xlab='时间/年',ylab='全国人均每次国内旅游消费/元')
  68. points(x10,col='red',type='b',pch=4)
  69. legend('topleft',c('预测值','原始值'),pch=c(16,4),lty=l,col=c('blue','red'))
  70. }


  71. a<-c(2.874,3.278,3.307,3.39,3.679)
  72. b<-c(7.04,7.645,8.075,8.53,8.774)
  73. gm12(x20,x30,length(x20))
复制代码

  1. #GM(1,3)
复制代码

*可以看到误差非常大



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2025-12-23 12:01