绘制多项逻辑回归模型的系数

Plot coefficients from a multinomial logistic regression model

我有一个多项式逻辑回归模型,使用 R 中 nnet 包中的 multinom() 函数构建。我有一个 7 class 目标变量,我想绘制系数模型中包含的变量对于我的因变量的每个 class 都有。

对于二元逻辑回归,我使用了 arm 包中的 coefplot() 函数,但我不知道如何针对多 class 问题执行此操作。

我希望我的绘图看起来像这样:

鉴于您能够像这样获取数据:

coeff <- factor(1:7,labels=c("inc", "lwg", "hcyes", "wcyes","age", "k618", "k5"))
values <- c(-0.1,0.6,0.15,0.8,-0.05,-0.05,-1.5)
upper <- c(-0.1,1,.6,1.3,-.05,.1,-1)
lower <- c(-0.1,.2,-.2,.3,-.05,-.2,-2)

df <- data.frame(coeff,values,upper,lower)

那么你所要做的就是运行:

library(ggplot2)

ggplot(df, aes(x=coeff, y=values, ymin=lower, ymax=upper)) + 
  geom_pointrange() + 
  geom_hline(yintercept=0, linetype=2)+
  coord_flip() 

结果应该是这样的:

您可以试验某些选项,使其看起来与您的示例相同

我不容易找到一个合理的 multinom() 示例:下面的示例给出了荒谬的值,但代码的结构无论如何都应该有效。基本思想是使用 broom::tidy() 提取系数并使用 ggplot/ggstance 绘制它们。 ggstance 专门用于绘制水平点范围并将它们相互位移适当的量;这也可以通过 coord_flip() 来完成,但是 coord_flip() 会导致一定程度的灵活性不足(例如,它不能轻易地与分面结合)。

library(nnet)
library(broom)
library(ggplot2); theme_set(theme_bw())
library(ggstance)

创建示例multinom() 适合:

nvars <- c("mpg","disp","hp")
mtcars_sc <- mtcars
mtcars[nvars] <- scale(mtcars[nvars])
m <- multinom(cyl~mpg+hp+disp,mtcars_sc,
              maxit=1e4)

提取系数并删除截距项:

tt <- broom::tidy(m,conf.int=TRUE)
tt <- dplyr::filter(tt, term!="(Intercept)")

剧情:

ggplot(tt, aes(x=estimate,y=term,colour=y.level))+
  geom_pointrangeh(aes(xmin=conf.low,
                     xmax=conf.high),
    position=position_dodgev(height=0.75))