gm(1,1)模型r代码
时间: 2023-11-21 15:02:42 浏览: 49
GM(1,1)模型是一种常用的灰色预测模型,它主要用于对数据序列进行预测和分析。
GM(1,1)模型的R代码如下:
```
# 定义GM(1,1)模型函数
GM11 <- function(x){
n <- length(x)
# 累加生成序列
X1 <- cumsum(x)
# 计算紧邻均值生成序列
Z1 <- (X1[1:(n-1)] + X1[2:n])/2
# 构造紧邻均值矩阵B和数据向量Y
B <- matrix(c(-Z1, rep(1, n-1)), ncol = 2)
Y <- x[2:n]
# 通过最小二乘法拟合参数
a <- solve(t(B) %*% B) %*% t(B) %*% Y
# 根据拟合参数计算预测值
predict <- as.vector(a[1] * exp(-a[2]*(0:(n-2))) + (x[1] - a[1]/a[2])*exp(-a[2]*(0:(n-2))))
# 计算相对误差
e <- sum(abs(predict - x[2:n])/x[2:n])
# 输出结果
print(paste("相对误差为:", e))
plot(x = 1:n, y = x, type = "b", xlab = "时间", ylab = "数据", main = "GM(1,1)模型预测")
lines(x = 1:(n-1), y = predict, col = "red")
legend("topright", legend = c("实际值", "预测值"), col = c("black", "red"), lty = c(1, 1), cex = 0.8)
# 返回预测结果
return(predict)
}
# 调用GM(1,1)模型函数
data <- c(10, 20, 30, 40, 50) # 输入数据序列
prediction <- GM11(data) # 进行预测
```
以上代码定义了一个名为`GM11`的函数,可以通过输入数据序列来进行GM(1,1)模型的预测。函数首先计算累加生成序列和紧邻均值生成序列,然后使用最小二乘法拟合参数,进而得到预测值。最后,绘制实际值和预测值的折线图,并计算相对误差。
相关推荐
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)