logit刻度上的Y轴,以gbm.plot为中心

时间:2014-10-30 23:45:26

标签: r machine-learning data-visualization gbm

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

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

  1. 纸张中的y轴位于对数刻度上并以中心为中心 数据分布的均值为零。 gbm.plot中的y轴 表示拟合函数。

  2. 纸上的地毯位于地块的顶部,地毯是gbm.step  在底部。

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

  4. 以下是Elith论文与gbm.plot制作的数据相比

    图3来自Elith等,2009 Figure 6 from Elith et al., 2009

    来自gbm.plot From gbm.plot

    我的解决方案

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

    1. 我不确定要将y轴转换为logit比例并将其居中以使其均值为零。

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

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

    4. 我会感激任何意见。我还认为,如果其他生态学家使用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)

2 个答案:

答案 0 :(得分:0)

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

步骤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步。让我们假装我们的数据框被称为&#34; df&#34;并有200列。在gbm.step中选择要调用的列号。

vars <- c(17, 175, 198)

步骤3.创建一个包含两列的数据框:一列将包含您可能感兴趣的所有可能的变量名称,另一列具有您要使用的标签。确保ColumnNames实际上与您在&#34; colnames(df)[vars]&#34;中找到的内容相匹配。

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="")

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

答案 1 :(得分: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)