R 二项响应的随机森林变量重要性和相关方向

R 二项响应的随机森林变量重要性和相关方向,r,random-forest,correlation,direction,R,Random Forest,Correlation,Direction,我在R中使用randomForest包,但我不喜欢使用其他包的解决方案。 我的RF模型使用各种连续和分类变量来预测灭绝风险(受威胁、非受威胁)。我希望能够为我的RF模型中使用的预测器显示变量重要性的方向。其他出版物正是这样做的:中的图1 关于如何做类似的事情有什么想法吗?我读到的一个建议是简单地比较两个部分依赖图之间的差异(下面的例子),但我觉得这可能不是最好的方法。 任何帮助都将不胜感激 partialPlot(final_rf, rf_train, size_mat,"Threat

我在R中使用randomForest包,但我不喜欢使用其他包的解决方案。 我的RF模型使用各种连续和分类变量来预测灭绝风险(受威胁、非受威胁)。我希望能够为我的RF模型中使用的预测器显示变量重要性的方向。其他出版物正是这样做的:中的图1

关于如何做类似的事情有什么想法吗?我读到的一个建议是简单地比较两个部分依赖图之间的差异(下面的例子),但我觉得这可能不是最好的方法。 任何帮助都将不胜感激

partialPlot(final_rf, rf_train, size_mat,"Threatened")
partialPlot(final_rf, rf_train, size_mat,"Non_Threatened")
响应=威胁

响应=无威胁


你可以使用平均边际效应(或下面的平均第一差)方法

首先,我将制作一些数据

set.seed(11)
n  = 200
p = 5
X = data.frame(matrix(runif(n * p), ncol = p))
yhat = 10 * sin(pi* X[ ,1] * X[,2]) +20 *
  (X[,3] -.5)^2 + 10 * -X[ ,4] + 5 * -X[,5] 
y = as.numeric((yhat+ rnorm(n)) > mean(yhat))
df <- as.data.frame(cbind(X,y))

有趣的是,如果我理解正确的话:“效果”类似于randomForest中的排列重要性分数,除了不是随机排列x,而是添加了一个sd。这意味着,如果p2-p1为负(例如X4),则意味着与变量和响应负相关?我仍然不清楚您在代码中的什么地方指定了“积极”响应(1或0)。@Chente所说的“积极”响应,我只是指1。如果你在预测两个值的概率,那么输出会在概率的第二列给出概率差。否则,你的解释是对的。
library(randomForest)
rf <- randomForest(as.factor(y) ~ ., data=df)
nx <- names(df)
nx <- nx[-which(nx == "y")]
res <- NULL
for(i in 1:length(nx)){
  p1 <- predict(rf, newdata=df, type="prob")
  df2 <- df
  df2[[nx[i]]] <- df2[[nx[i]]] + sd(df2[[nx[i]]])
  p2 <- predict(rf, newdata=df2, type="prob")
  diff <- (p2-p1)[,2]
  res <- rbind(res, c(mean(diff), sd(diff)))
}
colnames(res) <- c("effect", "sd")
rownames(res) <- nx
res
#       effect         sd
# X1  0.11079 0.18491252
# X2  0.10265 0.16552070
# X3  0.02015 0.07951409
# X4 -0.11687 0.16671916
# X5 -0.04704 0.10274836