You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于R语言结合GDP数据按年份预测菠菜消费量?

农产品消费量年度预测实现方案(基于R语言神经网络)

问题背景

我用R语言结合多因素做农产品预测,已经算出各品类的MSE值,但不知道怎么按年份预测各品类的消费量。

现有数据结构

structure(list(Year = 2016:2021, 
               GDP = c(9544.25, 9969.5, 11086.11,11231.54, 10361.28, 11407.68), 
               Spinach = c(6.1, 7.7, 7.7, 8.4, 7.6, 8.2)))

已编写的R代码

# 计算第2列和第3列的均值与标准差
mean_data <- c(mean(mydata[, 2]), mean(mydata[, 3]))
sd_data <- c(sd(mydata[, 2]), sd(mydata[, 3]))

# 使用指定的均值和标准差仅对第2列和第3列进行标准化
data_scaled <- mydata
data_scaled[, c(2, 3)] <- scale(data_scaled[, c(2, 3)], center = mean_data, scale = sd_data)

# 创建数据拆分索引
index <- sample(1:nrow(data_scaled), round(0.50 * nrow(data_scaled)))

# 创建训练集和测试集
train_data <- as.data.frame(data_scaled[index, ])
test_data <- as.data.frame(data_scaled[-index, ])

# 获取标准化数据的列名
n = names(data_scaled)
n
# 基于训练数据构建神经网络模型,以GDP为自变量预测Spinach
net = neuralnet(Spinach ~ GDP, data=train_data, hidden=c(5,5), 
                linear.output=TRUE)
plot(net)

# 在测试集上计算预测值
# 修正:compute仅需传入自变量GDP
predict_net_test <- compute(net, test_data[, "GDP"])
# 计算Spinach预测结果的均方误差(MSE)
actual_spinach_values <- test_data$Spinach
predict_net_test <- predict_net_test$net.result
MSE.net <- mean((actual_spinach_values - predict_net_test)^2)

cat("Spinach预测结果的均方误差(MSE):",MSE.net, "\n")

实现年度消费量预测的步骤

1. 逆标准化还原真实预测值

由于训练时对数据做了标准化,神经网络输出的是标准化后的数值,需要还原为实际消费量:

# 对测试集的预测值做逆标准化,还原为真实消费量
pred_spinach_actual <- predict_net_test * sd_data[2] + mean_data[2]
# 还原测试集的实际菠菜消费量(因为之前也做了标准化)
actual_spinach_actual <- test_data$Spinach * sd_data[2] + mean_data[2]
# 合并年份、实际值和预测值
test_year_result <- data.frame(
  Year = test_data$Year,
  Actual_Spinach = actual_spinach_actual,
  Predicted_Spinach = pred_spinach_actual
)
print(test_year_result)

2. 预测未来年份的菠菜消费量

要预测未来年份的消费量,需先准备对应年份的GDP数据,再重复标准化-预测-逆标准化流程:

# 假设2022-2023年的GDP数据(实际需替换为真实数据)
future_year_data <- data.frame(
  Year = 2022:2023,
  GDP = c(12000, 12500)
)
# 对未来GDP做标准化(使用训练数据的均值和标准差)
future_year_data$GDP_scaled <- (future_year_data$GDP - mean_data[1]) / sd_data[1]
# 用训练好的模型预测标准化后的菠菜值
pred_future_scaled <- compute(net, future_year_data$GDP_scaled)$net.result
# 逆标准化得到真实消费量
pred_future_actual <- pred_future_scaled * sd_data[2] + mean_data[2]
# 整理未来年份的预测结果
future_year_result <- data.frame(
  Year = future_year_data$Year,
  Predicted_Spinach = pred_future_actual
)
print(future_year_result)

3. 关键说明

  • 必须使用训练数据的均值和标准差进行标准化/逆标准化,不能用新数据的统计量,否则会导致预测偏差。
  • 如果有多个预测因素(比如除了GDP还有其他变量),只需对所有自变量做同样的标准化处理,再传入模型即可。

内容的提问来源于stack exchange,提问作者Harika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:23:23