R语言实现灰色预测模型gm11

 

不多说,直接上R语言代码

以后有时间再继续更新

第一个先计算关联度和关联系数

#定义成函数-------------------------------------------

hsyc <- function(y, ro) {
  #这个函数是计算关联度和关联度系数
  #初始化
  (x <- y / y[ ,1])
  #求绝对差序列
  x0 <- x[1, ]
  theta <- t(abs(apply(as.matrix(x[-1, ]), 1, function(t) {t - x0})))
  #相关系数
  nieta <- (apply(theta, 1, min) + ro * rep(max(theta), each = nrow(y)-1)) / 
    (theta + ro * rep(max(theta), each = nrow(y)-1))
  #关联度
  xgd <- apply(nieta, 1, mean)
  
  #传到list
  result <- list("xgxs" = nieta, 'xgd' = xgd)
  print(result)
  
}

f <- hsyc(y, 0.5)
f$xgxs
f$xgd

#测试方程--------------------------------------------
(y <- matrix(c(c(8, 8.8, 16, 18, 24, 32), 
               c(10, 12.12, 19.28, 20.25, 23.4, 30.69)), 
             byrow = TRUE, nrow = 2))
f <- hsyc(y, 0.5)

(y <- matrix(c(c(8, 8.8, 16, 18, 24, 32), 
               c(10, 12.12, 19.28, 20.25, 23.4, 30.69), 
               c(6, 6.35, 6.57, 6.98, 8.35, 8.75)), 
             byrow = TRUE, nrow = 3))
f <- hsyc(y, 0.5)
f$xgxs
f$xgd

(y <- matrix(c(c(8, 8.8, 16, 18, 24, 32), 
               c(10, 12.12, 19.28, 20.25, 23.4, 30.69), 
               c(6, 6.35, 6.57, 6.98, 8.35, 8.75),
               c(1, 2, 3, 4, 5, 6),
               c(4, 5, 6, 7, 8, 9)),
             byrow = TRUE, nrow = 6))
f <- hsyc(y, 0.5)

 

第二个是写gmm11函数:这个函数还是有缺陷,以后更新

gmm11 <- function(x) {
  x1 <- cumsum(x)
  x0 <- x
  (b <- matrix(1, ncol = 2, nrow = length(x1)-1))
  
  for (i in seq_along(x1)-1) {
    b[i, 1] <- -(x1[i] + x1[i+1])/2
  }
  b
  (y <- x0[-1])
  
  (b_t_b <- t(b) %*% b)
  (b_t_b_1 <- solve(b_t_b))
  (b_t_y <- t(b) %*% matrix(y))
  (alpha_j <- b_t_b_1 %*% b_t_y)
  #得出预测模型
  (a <- alpha_j[1])
  (nu <- alpha_j[2])
  
  #第五步 残差检验
  #1 计算
  (x_j_1 <- (x0[1] - nu / a) * exp(- a * c(0:(length(x0)-1))) + nu / a)
  #---
  #打印公式
  cat("公式为:\n", "x(k+1) =", x0[1] - alpha_j[2] / alpha_j[1], "* exp(", alpha_j[1] , "* k)", alpha_j[2]/alpha_j[1], "\n")
  #---
  #2 累减
  lj <- function(x) {
    out <- array(dim = length(x))
    x_temp <- c(0, x)
    for(i in seq_along(x)) {
      out[i] <- x_temp[i+1] - x_temp[i]
    }
    as.numeric(out)
  }
  (x_j_0 <- lj(x_j_1))
  
  #3 计算绝对误差序列和相对误差序列
  (theta <- round(abs(x_j_0 - x0), 6))#保留小数点后6位
  (big_theta <- round(theta / x_j_0, 8))
  
  #第六步 进行关联度检验
  (nitheta <- (min(theta) + 0.5 * max(theta)) / (theta + 0.5 *max(theta)))
  # 2 关联度
  (r <- mean(nitheta))
  
  # 第七步 后验差检验
  # 1原始序列标准差
  (s1 <- sd(x0))
  # 2残差标准差
  (s2 <- sd(theta))
  # 3 计算C
  (c <- s2 / s1)
  # 4 计算小误差概率
  #s0没计算出来
  (ei <- abs(theta - mean(theta)))
  #第八步 预测值
  
  x_next <- (x0[1] - nu / a) * (exp(- a * (length(x0)+1)) - exp(- a * length(x0)))
  list(a=a, 
       mu=nu, 
       jdwc=theta,# 绝对误差
       glxs = nitheta, #关联系数
       r=r, #关联度
       c = round(c, 6), #
       ei = ei, #小误差概率
       x_next = x_next #预测值
       )
}

#-------------------------------------------------------
#测试函数
x0 <- c(26.7, 31.5, 32.8, 34.1, 35.8, 37.5)
x0 <- runif(100)
gmm11(x0)

 

灰色预测模型是一种基于灰色理论的预测方法,其原理是根据系统的发展趋势和特征进行数据处理和分析,从而得出未来的预测结果。R语言是一种开源的编程语言,拥有丰富的数据分析和预测函数库,可以用于实现灰色预测模型。 要编写灰色预测模型R语言代码,可以按照以下步骤进行: 1. 数据预处理:首先,要将原始数据进行处理,包括去除异常值、平滑数据等。R语言提供了许多函数用于数据处理,如去除异常值的函数(如outliers()),平滑数据的函数(如smooth())等。 2. 数据建模:接下来,根据处理后的数据,建立灰色预测模型。常用的灰色预测模型包括GM(1,1)模型、GM(2,1)模型等。以GM(1,1)模型为例,可以使用R语言中的灰色包forecast来进行建模。使用gm()函数进行GM(1,1)模型建模。 3. 模型评估与优化:完成模型建立后,需要对模型进行评估,包括计算预测精度、预测误差等指标,并对模型进行优化。R语言提供了各种评估模型和优化模型的函数,如accuracy()函数用于计算预测精度,optim()函数用于模型优化。 4. 模型预测与结果展示:最后,使用建立好的模型进行预测,并将预测结果进行展示。R语言提供了预测函数,如predict()函数来进行模型预测,并提供了绘图函数,如plot()函数来展示预测结果。 综上所述,想要编写灰色预测模型R语言代码,主要涉及数据预处理、模型建立、模型评估与优化、模型预测与结果展示等步骤。R语言提供了丰富的函数和库来实现这些步骤,通过逐步完成这些步骤,可以编写出完整的灰色预测模型R语言代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值