欢迎光临散文网 会员登陆 & 注册

Meta 分析中变量的相对重要性——{glmulti}包、模型选择与 Akaike 权重/模型权重

2022-09-01 21:44 作者:冀_翔宇  | 我要投稿

关于“模型选择(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 分析文章,配图非常漂亮

图(a):增温试验下“酶活性比”与土壤 C 贮量变化呈显著负相关(R2 = 0.237, P < 0.001, n = 58);图(b):对土壤 C 贮量而言,各变量的相对重要性

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

res_modelweights <- weightable(res); str_view(res_modelweights$model, "imag")

示例纳入 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 中,有关计算如下

Akaike 权重的计算(Burnham 和 Anderson, 2002)

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

Meta 分析中变量的相对重要性——{glmulti}包、模型选择与 Akaike 权重/模型权重的评论 (共 条)

分享到微博请遵守国家法律