- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在探索 dismo 包中的 gbm 函数,以创建用于物种分布建模的增强回归树。我一直在使用 dismo vignettes 以及 Elith 等人 2008 年发表在《动物生态学杂志》上的论文“增强回归树的工作指南”。 Elith 等人的第 808:809 页。文章中,作者解释了部分依赖图,并在第 809 页底部给出了一个示例(图 6)。根据 dismo vignette“用于生态建模的增强回归树”,gbm.plot“绘制响应对一个或多个预测变量的部分依赖性”。
Gbm.plot 创建的绘图看起来几乎与 Elith 等人中的示例完全相同。但是,有一些参数我无法弄清楚如何设置以实现与论文中完全相同的图形。
论文中的 y 轴采用 Logit 刻度,并以数据分布的均值为零。 gbm.plot 中的 y 轴代表拟合函数。
论文中的地毯位于图的顶部,gbm.step 地毯位于 在底部。
Gbm.plot 使用变量名称作为 x 轴标签。论文有有意义的轴标签。
这是 Elith 论文中的图表与 gbm.plot 生成的图表的比较
图 6 来自 Elith 等人,2009 年
来自 gbm.plot
我的解决方案
在寻找解决方案时,我遇到了 this question它给了我查看源代码的想法(对我来说这是第一次)。从源代码中,我能够很好地了解该函数是如何组合在一起的,但仍然有很多我不明白的地方。
我不确定要更改什么才能将 y 轴转换为 logit 刻度并将它们居中以使其均值为零。
我能够更改源以将地毯移至图的顶部。我找到了 rug 函数的命令,并添加了 side=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/
我刚刚编写了这些代码,但输出不同。第二个代码的输出符合我的预期,但第一个代码的输出不正确。但为什么呢? def fib(n): x = 0 y = 1 print x
#include #include #define CUBE(y)y*(y*y) main() { int j; j = CUBE(-2+4);
这个问题在这里已经有了答案: Multiple assignment and evaluation order in Python (11 个答案) 关闭 1 年前。 我看到下面的代码,但不知道它做
我正在阅读 book , 并讲了 typeclass Eq 的定义 有两个功能== , /=在等式中,它们被实现为: x == y = not (x /= y) x /= y = not (
我最近参加了一个代码力量竞赛。在比赛的编辑部分,我看到了按位运算符之间的一种美妙关系,即 x + y = x & y + x |是的我还不知道证据。我拿了几个数字来看看这个等式是否正确。我很高兴知道这
我使用 CGRectMake(x,x,x,x) 在我的 View 中放置了一个按钮,当然 x 是位置和大小。当我使用 -(BOOL)shouldAutoRotate... 旋转 View 时,我想将按
this.x = (Math.random()*canvasWidth); this.y = (Math.random()*canvasHeight); (1) this.shift = {x: th
我想将此代码运行为“if 'Britain' or 'UK' in string do stuff, but don't do stuff if "Ex UK" 在字符串中": #Case insen
早上好,我是新来的,我带来了一个小问题。我无法针对以下问题开发有效的算法:我需要找到三个正数 x、y 和 z 的组合,以便 x + y、x - y、y + z、y - z、x + z 和 x - z
我现在正在使用 C++ 编写方案的解释器。我有一个关于定义和 lambda 的问题。 (define (add x y) (+ x y)) 扩展为 (define add (lambda (x y)
我正在尝试使用一台主机通过 FTP 将内容上传到另一台主机。 “我不会打开到 172.xxx.xxx.xxx(仅到 54.xxx.xxx.xxx)的连接”甚至不相关,因为我没有连接到那个主持人。这是托
在 Python 中,使用 [] 解包函数调用有什么区别? , 与 ()还是一无所有? def f(): return 0, 1 a, b = f() # 1 [a, b] = f() # 2
给定方程 z = z(x,y) 2 个表面 I和 II : z_I(x, y) = a0 + a1*y + a2*x + a3*y**2 + a4*x**2 + a5*x*y z_II(x, y)
几年前我有这个面试问题,但我还没有找到答案。 x 和 y 应该是什么才能形成无限循环? while (x = y && x != y) { } 我们尝试了 Nan,infinity+/-,null f
我正在尝试使用 Camel FTP Producer 将文件发送到第三方 ftp 服务器(似乎由 Amazon 托管),但遇到了一个问题,写入文件失败,并显示:文件操作失败...主机尝试数据连接 x.
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我正在使用 torch.tensor.repeat() x = torch.tensor([[1, 2, 3], [4, 5, 6]]) period = x.size(1) repeats = [1
#include int main() { int x = 9; int y = 2; int z = x - (x / y) * y; printf("%d", z
我很难理解先有定义然后有两个异或表达式的含义。这个定义的作用是什么? 我尝试发送 x=8, y=7,结果是 x=15 和 y=8为什么会这样? 这是程序: #define FUNC(a,b) a^=b
我正在尝试使用 SIMD 优化此功能,但我不知道从哪里开始。 long sum(int x,int y) { return x*x*x+y*y*y; } 反汇编函数如下所示: 4007a0
我是一名优秀的程序员,十分优秀!