r - Logit 刻度上的 Y 轴并以 gbm.plot 为中心

标签 r machine-learning data-visualization gbm

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

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

  1. 论文中的 y 轴采用 Logit 刻度,并以 数据分布的均值为零。 gbm.plot 中的 y 轴 代表拟合函数。

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

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

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

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

来自 gbm.plot From gbm.plot

我的解决方案

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

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

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

  3. 对于变量名称,我认为我需要创建适当的变量名称列表,将其附加到数据,并以某种方式将其读入源代码。仍然超出我的想象。

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

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

gbm.plot(all.sum.tc4.lr001, 地毯=真, 平滑=真, n.plot=9, common.scale=TRUE, write.title = FALSE, 显示.contrib=TRUE, 绘图布局=c(2,3), cex.lab=1.5)

最佳答案

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

步骤 1. 找到 dismo 包的 gbm.plot 源代码。选择所有代码并创建一个新脚本并将函数命名为 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="")

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

关于r - Logit 刻度上的 Y 轴并以 gbm.plot 为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26666557/

相关文章:

javascript - 使用 d3 将数据标签和标记添加到折线图

javascript - 可视化嵌套的 JSON 结构

data-visualization - 数据可视化 : Plotting friendship relations

r - 工厂如何在 R 中自动订购其等级?

R数据表外连接按功能

android - TensorFlow 重新训练的 inception v3 模型在 Android 上崩溃

machine-learning - 语音转文字识别

从 PDF 中读取附加的 XML

r - 向 R 中数据框的特定列添加前缀

machine-learning - 机器学习 - 感知器