基于随机森林模型的土壤 pH 预测方法的可重复性评估

Author

吴沛林、吴蕾

Published

June 1, 2026

📦 源代码: GitHub 仓库

项目简介

本项目评估 GitHub 开源项目 Soil-Analysis 的可重复性。 该研究使用随机森林模型预测土壤 pH 值,数据包含 N、P、K 养分含量及 pH 值。

评估维度: 环境可重建性、代码与流程可重复性、结果可重复性

一、数据清洗与整合

# 数据清洗与整合(01_clean.R)

# 导入数据
soil <- read.csv("dataraw/soil_data.csv")

# 剔除缺失值
soil <- na.omit(soil)

# 基本统计描述
summary(soil)
       X                N                P                K         
 Min.   :   0.0   Min.   :  0.00   Min.   :  5.00   Min.   :  5.00  
 1st Qu.: 549.8   1st Qu.: 21.00   1st Qu.: 28.00   1st Qu.: 20.00  
 Median :1099.5   Median : 37.00   Median : 51.00   Median : 32.00  
 Mean   :1099.5   Mean   : 50.55   Mean   : 53.36   Mean   : 48.15  
 3rd Qu.:1649.2   3rd Qu.: 84.25   3rd Qu.: 68.00   3rd Qu.: 49.00  
 Max.   :2199.0   Max.   :140.00   Max.   :145.00   Max.   :205.00  
       ph        Fertility_Status  
 Min.   :3.505   Length:2200       
 1st Qu.:5.972   Class :character  
 Median :6.425   Mode  :character  
 Mean   :6.469                     
 3rd Qu.:6.924                     
 Max.   :9.935                     
# 设置随机种子保证复现性
set.seed(123)

数据集包含土壤样本的 N、P、K 养分含量和 pH 值,共 2000+ 条记录。

二、随机森林建模与评估

library(randomForest)

# 构建随机森林模型
rf_model <- randomForest(ph ~ N + P + K, data=soil, ntree=500, mtry=2)

# 保存模型对象
saveRDS(rf_model, "results/rf_model.rds")

# 模型评估
pred <- predict(rf_model, soil)
rmse <- sqrt(mean((soil$ph - pred)^2))
r2 <- cor(soil$ph, pred)^2

print(paste("RMSE:", rmse))
[1] "RMSE: 0.365487911220195"
print(paste("R²:", r2))
[1] "R²: 0.833192097383881"
# 变量重要性
varImpPlot(rf_model)

模型参数:

  • 树数量(ntree):500
  • 每次分裂变量数(mtry):2
  • 因变量:pH
  • 自变量:N、P、K

三、变量重要性分析

N、P、K 三个养分对 pH 预测的重要性如图所示。

四、预测结果可视化

蓝色点为预测值,红色线为 1:1 参考线。预测值与实测值高度吻合,说明模型预测精度良好。

五、复现结果

复现过程中成功生成了以下结果文件:

文件 说明
results/ph_prediction.csv 每个样本的预测 pH 值与实测值对照
results/ph_distribution.png 预测值与实测值散点图
results/ph_importance.png 变量重要性图
results/rf_model.rds 保存的随机森林模型对象

六、可视化代码

library(ggplot2)

# 加载模型
rf_model <- readRDS("results/rf_model.rds")

# 预测结果
soil$pred_ph <- predict(rf_model, soil)

# 绘制预测 vs 实测散点图
ggplot(soil, aes(x=ph, y=pred_ph)) +
  geom_point(color="blue", alpha=0.6) +
  geom_abline(slope=1, intercept=0, color="red") +
  labs(x="实测 pH", y="预测 pH", title="预测值 vs 实测值") +
  theme_minimal()

# 绘制变量重要性图
varImpPlot(rf_model, main="变量重要性")

七、可重复性评估结论

优势:

  • 提供完整原始数据与模型文件
  • 分析逻辑清晰,参数设置明确(ntree=500, mtry=2)
  • 核心结果可复现,RMSE 与 R² 与原项目一致

不足:

  • 缺少 requirements.txt 等环境配置文件
  • 部分绘图脚本参数未完全标注
  • 数据集中存在少量异常值未处理

总体评价: 该研究为土壤 pH 预测提供了一个可复现的范例,可重复性表现良好。