在logit尺度上并在gbm.plot中居中的Y轴

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

Gbm.plot创建的图形几乎与Elith等人论文中的例子完全相同。然而,有几个参数我无法设置以达到与论文中完全相同的图形效果。

  1. 论文中的Y轴采用logit尺度,并居中以使数据分布的平均值为零。gbm.plot中的Y轴表示拟合函数。

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

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

以下是Elith论文中的图与使用gbm.plot生成的图的对比

Elith等人2009年的图6Elith等人2009年的图6

来自gbm.plot的图来自gbm.plot的图

我的解决方案

在寻找解决方案时,我发现了这个问题,它让我想到查看源代码(这是我第一次这样做)。通过源代码,我能够很好地了解函数的构成,但仍有许多我不理解的地方。

  1. 我不确定如何更改Y轴以转换为logit尺度并居中,使其平均值为零。

  2. 我能够更改源代码,将地毯图移到图表顶部。我找到了地毯函数的命令,并添加了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)


回答:

虽然晚了,但我可以提供一个解决问题3的变通方法:为gbm.plot添加自定义X轴标签。我相信有更好的方法,但这是我所做的。如果您有大量数据并且经常调整使用的变量,这个方法会很有帮助。

步骤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 #将标签提取到一个向量中

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

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注