如何使用基于 nnet::multinom() 模型的 {ggeffects} 获得预测概率图的置信区间?

mel*_*lex 5 r data-visualization confidence-interval nnet multinomial

我想绘制 R 中与该nnet::multinom()函数拟合的多项式模型的预测概率。我有对数尺度的数值预测变量。

尽管{ggeffects}应该与 兼容multinom(),但该图不会像线性模型那样显示置信区间。

我是 R 和这个社区的新手,所以如果这个问题非常基本或者缺少一些重要的东西,我很抱歉。这是一个小例子:

library(tidyverse)
library(nnet)
library(effects)
library(ggeffects)


df <- data.frame(response = c("1 Better", "1 Better", "1 Better", "2 Medium", "2 Medium", "2 Medium", "3 Worse", "3 Worse", "3 Worse"),
                 count = c(1000, 2000, 4000, 6000, 10000, 3000, 6000, 5000, 11000))

mod1 <- multinom(response ~ log(count), data = df)
summary(mod1)

effects::effect(mod1, term="log(count)", se=TRUE, confidence.level=.95) %>% plot() # Produces CIs.

ggeffects::ggpredict(mod1, terms = "count") %>% plot() + theme_bw() # No confidence intervals.
Run Code Online (Sandbox Code Playgroud)

如果其他人正在寻找替代方案{ggeffects},我在寻找解决方案时尝试了这些方法:

使用effects::effect(): 有效,包括置信区间,但外观不太可定制。

组合{ggeffects}{effects}:请参阅 R Studio 社区上的这篇文章,其中将效果包中的置信区间与 ggeffects 组合起来创建绘图。我收到错误

Error in FUN(X[[i]], ...) : object 'L' not found
Run Code Online (Sandbox Code Playgroud)

但这对那个人有用。

使用{MNLpred}package 及其: 对我来说不起作用,我认为因为我的预测变量是对数尺度的。我收到以下错误: mnl_pred_ova()

Error in eval(parse(text = paste0("data$", xvari))) : attempt to apply non-function
Run Code Online (Sandbox Code Playgroud)

使用mnlAveEffPlot()来自 的函数{DAMisc}:有效,但绘图并不像我想要的那样可定制。

Fab*_*ack 3

您可以使用 来执行此操作ggeffects::ggemmeans()

library(tidyverse)
library(ggthemes)
library(nnet)
library(ggeffects) # package version used: v0.16.0

df <- data.frame(response = c("1 Better", "1 Better", "1 Better", "2 Medium", "2 Medium", "2 Medium", "3 Worse", "3 Worse", "3 Worse"),
                 count = c(1000, 2000, 4000, 6000, 10000, 3000, 6000, 5000, 11000))

mod1 <- multinom(response ~ log(count),
                 data = df)

ggemmeans(mod1, terms = "count") %>% plot() + ggthemes::theme_tufte()
Run Code Online (Sandbox Code Playgroud)

有关如何使用 {ggeffects} 的更多信息,您可能还需要查看包文档ggemmeans(),尤其是和等之间的差异ggpredict()(例如此处)。

{ggeffects} 包利用了 {effects} 创建的输出,但是,我相信这就是您正在寻找的,它使得使用标准 ggplot 命令自定义绘图变得更加容易。