Meta 分析中变量的相对重要性——{glmulti}包、模型选择与 Akaike 权重/模型权重
关于“模型选择(model selection)”,具体信息请查阅 Burnham 和 Anderson(2002)的原著,也可参考 Wolfgang Viechtbauer 和 斯幸峰 的博文,网址如下
Model selection and multimodel inference: a practical information-theoretic approach_Burnham & Anderson_2002
https://caestuaries.opennrm.org/assets/06942155460a79991fdf1b57f641b1b4/application/pdf/burnham_anderson2002.pdf
Model Selection using the glmulti and MuMIn Packages_Viechtbauer(演示得很详细)
https://www.metafor-project.org/doku.php/tips:model_selection_with_glmulti_and_mumin
模型选择与多模型推断_斯幸峰(需要科学上网。科学网也有作者的转载)
http://sixf.org/cn/2014/03/model-selection-multimodel-inference/
1 起因
今早收到“土壤微生物组”公众号的推送,一篇 2020 年发在 GCB 上的 Meta 分析文章,配图非常漂亮

Ji Chen et al., Soil carbon loss with warming: New evidence from carbon-degrading enzymes, Global Change Biology, 2020. https://doi.org/10.1111/gcb.14986
图(b)在其他 Meta 分析中也偶有出现。以“Sum of Akaike weights”这一指标的大小来判断不同变量的相对重要性虽然直观,但也让第一次接触这一标准的人感到有些迷茫:这是个啥玩意儿?
2 经过
2.1 模仿
参考 Viechtbauer 的博文,示例的部分 R 代码如下
2.1.1 数据准备
library(metafor)
help(dat.bangertdrowns2004)
dat <- dat.bangertdrowns2004 # 导入数据
rbind(head(dat, 10), tail(dat, 10))
dat <- dat[!apply(dat[, c(“length”, “wic”, “feedback”, “info”, “pers”, “imag”, “meta”)], 1, anyNA), ] # 示例所纳入的变量
2.1.2 “模型分析”
library(glmulti)
rma.glmulti <- function(formula, data, ...)
rma(formula, vi, data = data, method = “ML”, ...)
# 这和一般的自定义函数写法不同,没搞清楚
res <- glmulti(yi ~ length + wic + feedback + info + pers + imag + meta, data = dat, level= 1, fitfunction = rma.glmulti, crit = "aicc", confsetsize = 128)
# 这一步即为“模型分析”。调用其结果即可得到变量的“相对重要性”值
plot(res, type = “s”) # 以图的形式表现“相对重要性”
2.1.3 变量的相对重要性
按照 Viechtbauer 的演示,可以通过如下代码整理各变量的相对重要性
mmi <- as.data.frame(coef(res, varweighting = "Johnson"))
mmi <- data.frame(Estimate = mmi$Est, SE = sqrt(mmi$Uncond),
Importance = mmi$Importance, row.names = row.names(mmi))
mmi$z <- mmi$Estimate / mmi$SE
mmi$p <- 2*pnorm(abs(mmi$z), lower.tail = FALSE)
names(mmi) <- c("Estimate", "Std. Error", "Importance", "z value", "Pr(>|z|)")
mmi$ci.lb <- mmi[[1]] - qnorm(.975) * mmi[[2]]
mmi$ci.ub <- mmi[[1]] + qnorm(.975) * mmi[[2]]
mmi <- mmi[order(mmi$Importance, decreasing = TRUE), c(1, 2, 4:7, 3)]
round(mmi, 4) # 结果如下

通过文献的方法部分,容易得知“相对重要性”与“Akaike 权重/模型权重”有关。然而,“权重”是如何计算的?它是否可以被更直观地体验到?
Chen 等(2020)解释道,“简而言之,特定变量的相对重要性被计算为包含该变量的所有模型的 Akaike 权重之和;该值被视为所有可能模型中各变量的总体支持度。”
这一解释似乎还是有欠直观,下面以变量 imag 为例。
2.2 实践
summary(res)$modelweights 命令会给出各模型的权重,注意到,各模型的权重之和为 1
> sum(summary(res)$modelweights)
结果为
[1] 1

示例纳入 7 个变量,理论上模型应该有 2^7=128 (个)。不妨猜测,imag 的“相对重要性”、或说“Akaike 权重之和”即是包括 imag 变量在内的模型的“模型解释度”之和。借助中间字符匹配函数 grepl( )
> res_modelweights <- weightable(res)
> sum(res_modelweights[which(grepl("imag", res_modelweights$model) == T), "weights"])
结果为
[1] 0.8478242
这与前述表格所列一致!变量的相对重要性/权重被计算为相应的模型权重之和,这是一种奇妙的转换。
3 结果/理论
3.1 斯幸峰 的解释
斯幸峰 的解释是,“(计算模型权重)得到各个模型的 AIC 值后,按照 AIC 从小到大排列,然后每个模型的 AIC 值与最小的AIC值相减,得到 ΔAIC。通过得到的 ΔAIC,计算各个模型的模型权重,即 Akaika weight(wi)。
……模型权重越大,表示该模型是真实模型的可能性就越大。比如第二个模型的 w2 为 0.31,则表示这个模型为真实模型(best possible model)的可能性为 31%。通过模型权重还可以计算各个参数的重要值(importance)。方法很简单,比如参数 1,则挑出含参数 1 的所有模型,然后把这些模型的权重相加,即是该参数的权重。各个参数的权重值一比,就知道哪个参数最重要了。”
3.2 Burnham 和 Anderson 的推导
在 Burnham 和 Anderson(2002)的原著 Model selection and multimodel inference: a practical information-theoretic approach 中,有关计算如下

式中,i 表示相应的“第 i 个模型”,R 是计算 Akaike 权重时纳入的模型总数。

