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

问题描述

我在R中使用randomForest软件包,但不只限于使用其他软件包的解决方案。 我的RF模型使用各种连续和分类变量来预测灭绝风险(“威胁”,“非威胁”)。我希望能够为我的RF模型中使用的预测变量显示变量重要性的方向。其他出版物正是这样做的:https://www.pnas.org/content/pnas/109/9/3395.full.pdf

中的图1

关于如何执行类似操作的任何想法?我读过的一条建议说,只是比较两个部分依赖图之间的差异(下面的示例),但是我觉得这可能不是最好的方法。 任何帮助将不胜感激。

partialPlot(final_rf,rf_train,size_mat,"Threatened")
partialPlot(final_rf,"Non_Threatened")

响应=受到威胁

response = Threatened

响应=未威胁

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

接下来,我们将评估RF模型:

library(randomForest)
rf <- randomForest(as.factor(y) ~ .,data=df)

净额,我们可以循环遍历每个变量,在每次循环中,我们将所有观察值的一个标准偏差添加到单个x变量中。在您的方法中,您还可以将类别变量从一个类别更改为另一个类别。然后,我们预测两种情况下的积极响应的可能性-原始条件和将标准差添加到每个变量的条件。然后我们可以总结出差异。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...