假如你手头只有108个样本,或者说,你的数据只有108行,那该如何分析?将来能发啥样档次的论文?恐怕多数人觉得,数据量这么少,即使投一代神刊《巴基斯坦植物学报》也有难度。而下面这篇Nature大作就教育我们,数据不在多少,关键是如何分析,如何化简单为神奇。
这是一篇典型的Meta分析研究,一共包含了108个案例(是108个案例,也就是数据只有108行,而不是108篇论文,论文数量远不及108,因为同一篇论文可以提取好几个案例)。作者首先采用典型的Meta分析方法分析了不同条件下,CO2升高对土壤C的影响。
而要发Nature,仅凭这些显然是不够深入的。作者们后面便将Meta分析和随机森林结合,把108行数据玩出了新高度,新境界:
1)在108行数据中,加入了19个解释变量(环境因子),用meta随机森林(metaforest)删选出其中对效应值比较重要的变量。
##核心代码
mf_cv <- train(y = data$yi,
x = X,
method = ModelInfo_mf(),
trControl = cv_folds,
tuneGrid = tuning_grid,
keep.inbag = TRUE,
num.threads = 31,
verbose=TRUE,
num.trees = 10000)
# Cross-validated R2 of the final model:
mf_cv$results[which.min(mf_cv$results$RMSE), ]$Rsquared
### saveRDS(mf_cv, "mf_cv_rel.RData")
mf_cv <- readRDS("mf_cv_rel.RData")
importance.export.rel <- varImp(mf_cv)$importance
###write.csv(importance.export.rel,"VI_rel.csv")
final <- mf_cv$final
plot(final)
imp.rel <- VarImpPlot(final,label_elements = newnames)
imp.rel
imp <- VarImpPlot(final,label_elements = newnames)
2)基于随机森林选出的比较重要的五六个环境因子,在metafor中,进行传统的线性模型模型选择,并加入这些因子之间的交互作用,再次评估不同因子对效应值的重要性。
##核心代码
res <- glmulti(yi ~ Nitrogen.fertilization + Symbiotic.type + Effect.biomass +
Experiment.type + Cstock,
data=intact,
level=2, fitfunction=rma.glmulti, crit="aicc", confsetsize=128)
plot(res, type="s")
3)依据效应值和其决定性环境因子的关系,对效应值的全球格局进行预测。
所以说这篇靠着一百单八将能发Nature的案例,其统计技术应用超凡脱俗,看上去够炫酷,或许是个关键原因。其方法(传统Meta+随机森林)也确实值得学习。但个人总觉得如果仅仅依据108行数据,就搞一个全球的分析,不管分析再花哨炫酷,其可靠性有多大呢,欢迎老铁们提出自己的见解!
参考文献:
Terrer, C. et al. A trade-off between plant and soil carbon storage under elevated CO2. Nature 591, 599-603, doi:10.1038/s41586-021-03306-8 (2021).