【问题标题】:Implement varImp for variable importance and plot为变量重要性和绘图实现 varImp
【发布时间】:2019-07-27 15:37:25
【问题描述】:

我正在尝试绘制以下模型的变量重要性分数。

分数输出正常,但绘制不正确 - 我需要在代码中添加另一个参数吗?

代码和分数输出如下。

library(caret)
#GENERALISED LINEAR MODEL
LR_swim <- lm(racetime_mins ~ event_date+ event_month +year +event_id + 
            gender + distance_new + New_Condition+
            raceNo_Updated +  
            handicap_mins +points+
              Wind_Speed_knots+ 
             Air_Temp_Celsius +Water_Temp_Celsius +Wave_Height_m,
               data = SwimmingTrain) 
           family=gaussian(link = "identity")

varImp2<-varImp(object=LR_swim)
plot(varImp2,main="Variable Importance")

总体 event_date 24.463358 event_month 22.358448 年 24.399390 event_id 26.878342 性别女性 30.422470 性别男 13.273062 distance_new 248.727351 New_Condition 22.574999 raceNo_Updated 9.812053 handicap_mins 134.914137 点数 40.443116 Wind_Speed_knots 14.492203 Air_Temp_Celsius 16.562194 Water_Temp_Celsius 2.861662 Wave_Height_m 8.592716

#ClassOutput
class(varImp2)
[1] "data.frame"
#HeadOutput
> head(varImp2)
          Overall
event_date   24.46336
event_month  22.35845
year         24.39939
event_id     26.87834
genderfemale 30.42247
gendermale   13.27306

我的样子;

应该是这样的

【问题讨论】:

  • 您可以在问题中添加class(vaImp2)head(varImp2) 吗?所以我们可以看到vaImp2的格式和类型。
  • @maydin 添加在上面!
  • 你试过plot(varImp2[,1],main="Variable Importance") 吗?
  • 我添加了我的情节现在的样子,我正在寻找的是 y 轴上的变量和 x 上的重要性分数
  • 您的数据集中只有一列称为“总体”...所以我不知道另一列是什么?是否要将行名用作 x 值,即使它们是字符?

标签: r r-caret


【解决方案1】:

好吧,在命令中,我询问了 varImp2 的行名是否是您的绘图中所需的 x 值,但您没有说出来。在任何情况下,假设行名是您要分配的 y 值,这些代码会为您提供所需的图,您可以自己安排 x 和 y。

library(ggplot2)

  ggplot(data= varImp2, aes(x=rownames(varImp2),y=Overall)) +
  geom_bar(position="dodge",stat="identity",width = 0, color = "black") + 
  coord_flip() + geom_point(color='skyblue') + xlab(" Importance Score")+
  ggtitle("Variable Importance") + 
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(panel.background = element_rect(fill = 'white', colour = 'black'))

【讨论】:

    【解决方案2】:

    根据您想要的结果,您的目标是从数据框中绘制一个数字列,按列中的值在 y 轴上排序。我将以mtcars 数据集为例。

    library(caret)
    LR_mtcars <- glm(mpg ~ ., data = mtcars, family = gaussian)
    varImp2 <- varImp(LR_mtcars)
    

    varImp2 是一个数据框。现在添加一个名为“标签”的列。我们将此列设为factor,然后根据“Overall”中的值对其进行排序。

    varImp2$labels <- factor(rownames(varImp2))
    varImp2$labels <- reorder(varImp2$labels, varImp2$Overall)
    

    然后我们可以绘制这些值。对于绘图的第一次迭代,我们将 x 轴和 y 轴的标题以及 y 轴的标签留空。然后我们随后将它们添加回来。

    plot(x = varImp2$Overall, y = varImp2$labels, main = "Variable Importance", 
      yaxt = "n", ylab = "", xlab = "")
    axis(2, at = 1:nrow(varImp2), labels = levels(varImp2$labels), las = 2)
    title(xlab = "Importance")
    

    这给了我们

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2019-11-30
      • 2021-05-24
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多