2

我目前正在探索 dismo 包中的 gbm 函数,以创建用于物种分布建模的增强回归树。我一直在使用 dismo vignettes 以及 Elith 等人发表在《动物生态学杂志》上的 2008 年论文“增强回归树的工作指南”。在 Elith 等人的第 808:809 页上。文章中,作者解释了部分依赖图,并在第 809 页底部给出了示例(图 6)。根据 dismo 小插图“用于生态建模的 Boosted Regression Trees”,gbm.plot “绘制响应对一个或多个预测变量的部分依赖性”。

Gbm.plot 创建的图看起来几乎与 Elith 等人中的示例完全相同。但是,有一些参数我无法弄清楚如何设置以实现与论文中完全相同的图。

  1. 论文中的 y 轴在 logit 尺度上并且居中以在数据分布上具有零均值。gbm.plot 中的 y 轴表示拟合函数。

  2. 论文中的地毯在图的顶部,gbm.step 地毯在底部。

  3. Gbm.plot 使用变量名称作为 x 轴标签。论文有有意义的轴标签。

这是 Elith 论文中的图与使用 gbm.plot 生成的图的比较

图 6 来自 Elith 等人,2009 年 图 6 来自 Elith 等人,2009 年

来自 gbm.plot 来自 gbm.plot

我的解决方案

在寻找解决方案时,我遇到了这个问题,它给了我查看源代码的想法(对我来说是第一次)。从源头上,我能够很好地了解该功能是如何组合在一起的,但仍有很多我不明白的地方。

  1. 我不确定要更改什么以将 y 轴转换为 logit 比例并将它们居中以使均值为零。

  2. 我能够更改源以将地毯移动到地块的顶部。我找到了 rug 函数的命令并添加了side=3.

  3. 对于变量名,我想我需要列出适当的变量名,将其附加到数据中,并以某种方式将其读入源代码。还在我头上。

我将感谢您的任何意见。我还认为,如果其他生态学家使用 Elith 论文来指导他们,他们可能会遇到同样的问题。

这是我为生成绘图而运行的代码示例

gbm.plot(all.sum.tc4.lr001, rug=TRUE, smooth=TRUE, n.plots=9, common.scale=TRUE, write.title = FALSE, show.contrib=TRUE, plot.layout=c(2,3), cex.lab=1.5)

4

2 回答 2

0

这已经晚了,但我可以为问题 3 提供一个迂回的解决方案:将自定义 x-labels 添加到 gbm.plot。我确信有更好的方法,但这就是我所做的。如果您有一个大型数据集并且正在优化您经常使用的变量,则此方法很有帮助。

步骤 1. 找到 gbm.plot 的 dismo 包源代码。选择所有代码并创建一个新脚本并将函数命名为 gbm.plot2。搜索“var.name”。替换任何正在更改 var.name 的实例。例子:

var.name <- gbm.call$predictor.names[k]
var.name <- x.label 

对此:

var.name <- labels[j]

现在保存脚本并使用 source() 调用它,或者运行整个脚本以将 gbm.plot2 放入全局环境。

第 2 步。假设我们的数据框名为“df”并且有 200 列。在 gbm.step 中选择要调用的列号。

vars <- c(17, 175, 198)

步骤 3. 制作一个包含两列的数据框:一列将包含您可能有兴趣使用的所有可能变量名称,另一列将包含您想要使用的标签。确保 ColumnNames 实际匹配您在“colnames(df)[vars]”中可以找到的内容。

ColumnNames <- c("HiHorAve", "Elev", "Type5")
Labels <- c("Hi Hello Avenue", "Probably Elevation", "Type 5 of Something")
labels <- data.frame(ColumnNames,Labels)

现在按照它们在数据框中出现的顺序对标签进行排序。这很有帮助,因为您有一堆变量并且您的数据框经常改变形状。

labels <- labels[match(colnames(df)[vars], labels$ColumnNames),]

第 4 步。像这样运行 gbm.step 方程:

BRTmodel<- gbm.step(data=df, gbm.x=vars, gbm.y = 5, .....)

步骤 5. 获取模型摘要——它按相对重要性对变量进行排序。然后按相对重要性排列标签。

smry1<- summary(BRTmodel)

labels <- labels[order(match(names(df)[vars],smry1$var))]
labels <- labels$Labels #extract the labels to a vector

第 6 步。现在运行您的新 gbm.plot 脚本!

  gbm.plot2(BRTmodel, n.plots=3, y.label="")

它应该只绘制漂亮的标签。

于 2015-01-27T20:25:09.137 回答
0

更改 x 轴标签的快速方法是确保show.contrib设置为FALSE然后使用x.label=expression(paste("")). 对于 y 轴,只需使用y.label= ""以下示例:

gbm.plot(BRT_Model, variable.no=3, smooth=TRUE,
         common.scale=TRUE, write.title=FALSE, y.label="my y-axis title", 
         x.label=expression(paste("my x-axis title")), 
         show.contrib=FALSE, plot.layout=c(1, 1), cex.lab=1.5, cex.axis=1.5)
于 2019-05-21T14:55:41.920 回答