R语言 使用sjplot的plot_model函数时调整面顺序和图例标签

hwamh0ep  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(293)

我已经成功地使用sjplotplot_model函数绘制了一个多项逻辑回归模型。该回归包含一个结果(Info Seought,具有3个水平)和2个连续预测因子(DSA,阿萨)。我还更改了plot_model中的ASA值,以便根据ASA平均值和SD绘制预测效果结果:

plot1 <- plot_model(multinomialmodel , type = "pred", terms = c("DSA", "ASA[meansd]")

我有两个定制问题:
1)面顺序:方面顺序基于结果级别的默认字母顺序(“展开”,然后“第一张图片”,然后“多张图片”)。有没有一种方法来调整这一点?我试着用factor()重新排序的水平(例如hereggplot2)在运行和绘制模型之前,但这并没有导致产生的面顺序发生任何变化。也许是通过ggplot 2的一些东西,就像在第一个解决方案中提供的here
2)图例标签:图例当前用阿萨的-1 SD、平均值和+1 SD值标记绘制的线;有没有一种方法可以调整这些标签,而不是简单地说“-1 SD”,“平均值”和“+1 SD”,而不是原始值?
谢谢!

n8ghc7c1

n8ghc7c11#

首先,我使用您提供的数据复制您的图:

library(dplyr)
library(readr)
library(nnet)
library(sjPlot)

"ASA,DSA,Info_Sought
-0.108555801,0.659899854,First Pic
0.671946671,1.481880373,First Pic
2.184170211,-0.801398848,First Pic
-0.547588442,1.116555698,First Pic
-1.27930951,-0.299077419,First Pic
0.037788412,1.527545958,First Pic
-0.74271406,-0.755733264,Multiple Pics
1.20854212,-1.166723523,Multiple Pics
0.769509479,-0.390408588,Multiple Pics
-0.450025633,-1.02972677,Multiple Pics
0.769509479,0.614234269,Multiple Pics
0.281695434,0.705565438,Multiple Pics
-0.352462824,-0.299077419,Expand
0.671946671,1.481880373,Expand
2.184170211,-0.801398848,Expand
-0.547588442,1.116555698,Expand
-0.157337206,1.070890114,Expand
-1.27930951,-0.299077419,Expand" %>% 
  read_csv() -> d

multinomialmodel <- multinom(Info_Sought ~ ASA + DSA, data = d)

p1 <- plot_model(multinomialmodel , 
                 type = "pred", 
                 terms = c("DSA", "ASA[meansd]"))
p1

您尝试重新因子化没有成功,因为sjPlot::plot_model()没有注意到。解决重新排序小平面的一种方法是如上所述生成初始图,并将数据中的小平面变量替换为包含所需顺序的因子版本,如下所示:

p2 <- p1
p2$data$response.level <- factor(p2$data$response.level, 
                                 levels = c("Multiple Pics", "First Pic", "Expand"))
p2

最后,为了解决图例标签问题,我们可以将色标替换为包含所需标签的色标:

p2 + 
  scale_color_discrete(labels = c("-1 SD", "mean", "+1 SD"))

yr9zkbsy

yr9zkbsy2#

在@the-mad-statter的回答之后,我想添加一个注解,说明当您使用白色图形时如何更改图例标题和标签,其中线条因线型而异(即使用sjplotcolors = "bw"参数)。

p1 <- plot_model(multinomialmodel , 
                 type = "pred", 
                 terms = c("DSA", "ASA[meansd]"),
                 colors = "bw)

由于这些线都是黑色的,如果你想改变轴的标题和标签,你需要使用scale_linetype_manual()函数而不是scale_color_discrete(),像这样:

p1 + scale_linetype_manual(name = "ASA values",
                           values = c("dashed", "solid", "dotted"),
                           labels = c("Low (-1 SD)", "Medium (mean)", "High (+1 SD)"))

生成的图形如下所示:

请注意,我还利用这个机会更改了将线型分配给值的方式,使线对应于阿萨的平均值。

相关问题