R 基于nnet::multinom()模型,如何使用{ggeffects}获得预测概率图的置信区间?
我想绘制R中多项式模型的预测概率,该模型配有R 基于nnet::multinom()模型,如何使用{ggeffects}获得预测概率图的置信区间?,r,data-visualization,confidence-interval,multinomial,nnet,R,Data Visualization,Confidence Interval,Multinomial,Nnet,我想绘制R中多项式模型的预测概率,该模型配有nnet::multinom()函数。我有对数标度的数值预测 即使{ggeeffects}应与multinom()兼容,绘图显示的置信区间与线性模型显示的置信区间不同 我对R和这个社区还不熟悉,所以如果这个问题很基本或者遗漏了一些重要的东西,我深表歉意。下面是一个小例子: library(tidyverse) library(nnet) library(effects) library(ggeffects) df <- data.frame(
nnet::multinom()
函数。我有对数标度的数值预测
即使{ggeeffects}
应与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.
但它对那个人起了作用
使用{MNLpred}
包及其:对我来说不起作用,我想是因为我的预测值在对数范围内。我得到了以下错误:
Error in eval(parse(text = paste0("data$", xvari))) : attempt to apply non-function
使用
{DAMisc}
中的mnlaveffplot()
函数:工作正常,但绘图并不像我希望的那样可自定义。您可以使用ggeffects::GGEMeans()
完成此操作
库(tidyverse)
图书馆(主题)
图书馆(nnet)
库(ggeffects)#使用的包版本:v0.16.0
dfMNLpredpackage无法处理回归函数中的log()
,但在您事先计算对数刻度时,它会起作用
# Packages
library(tidyverse)
library(nnet)
library(MASS)
library(MNLpred)
library(scales)
library(ggeffects)
library(ggthemes)
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)
# Log-scaled
df$count_log <- log(df$count)
# Regression
mod2 <- multinom(response ~ count_log,
data = df,
Hess = TRUE)
# The models are identical:
coef(mod1) == coef(mod2)
或预测的边际效应:
pred_fd <- mnl_fd2_ova(model = mod2,
x = "count_log",
value1 = min(df$count_log),
value2 = max(df$count_log),
data = df)
pred_fd$plotdata_fd %>%
ggplot(aes(x = categories,
y = mean,
ymin = lower,
ymax = upper)) +
geom_pointrange() +
scale_y_continuous(labels = percent_format()) +
labs(title = "Predicted effect of Count on responses",
x = "Categories",
y = "Predicted marginal effect") +
theme_bw()
pred\u fd%
ggplot(aes(x=类别,
y=平均值,
ymin=较低,
ymax=上)+
geom_pointrange()+
连续缩放(标签=百分比格式())+
实验室(title=“计数对响应的预测影响”,
x=“类别”,
y=“预测边际效应”)+
主题_bw()
请考虑对问题稍加修改和简化,以便它专门针对一个特定命令的一个问题。到目前为止,您似乎已经尝试了三种或三种以上不同的方法,所有这些方法都会产生错误消息或出现问题,但您只为ggeffects::ggpredict()
命令提供了代码。如果你的问题完全是这样,考虑编辑其他事情。非常感谢-我已经编辑了我的问题,请让我知道如果可以进一步改进。这是非常有帮助的,谢谢!非常感谢。
# Packages
library(tidyverse)
library(nnet)
library(MASS)
library(MNLpred)
library(scales)
library(ggeffects)
library(ggthemes)
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)
# Log-scaled
df$count_log <- log(df$count)
# Regression
mod2 <- multinom(response ~ count_log,
data = df,
Hess = TRUE)
# The models are identical:
coef(mod1) == coef(mod2)
# 10 steps for predictions
steps <- (max(df$count_log) - min(df$count_log))/9
pred1 <- mnl_pred_ova(mod2,
data = df,
by = steps,
x = "count_log")
x_breaks <- seq(from = min(df$count_log),
to = max(df$count_log),
length.out = 5)
x_labels <- seq(from = min(df$count),
to = max(df$count),
length.out = 5)
pred1$plotdata %>%
ggplot(aes(x = count_log,
y = mean,
ymin = lower,
ymax = upper)) +
facet_wrap(. ~ response) +
geom_line() +
geom_ribbon(alpha = 0.2) +
scale_y_continuous(labels = percent_format()) +
scale_x_continuous(breaks = x_breaks,
labels = x_labels) +
theme_bw()
pred_fd <- mnl_fd2_ova(model = mod2,
x = "count_log",
value1 = min(df$count_log),
value2 = max(df$count_log),
data = df)
pred_fd$plotdata_fd %>%
ggplot(aes(x = categories,
y = mean,
ymin = lower,
ymax = upper)) +
geom_pointrange() +
scale_y_continuous(labels = percent_format()) +
labs(title = "Predicted effect of Count on responses",
x = "Categories",
y = "Predicted marginal effect") +
theme_bw()