我们可以使用tidyverse 创建一个单独的图。使用imap 循环allEffects 的list 输出,转换为tibble,select 所需的列,行将列表元素绑定到单个数据集(_dfr),unite 两列到一个单个,并使用ggplot 进行绘图
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
imap_dfr(allEffects(m2), ~ as_tibble(.x) %>%
mutate(dname = grep("d_", names(.), value = TRUE)) %>%
select(dname, dvalue = starts_with('d_'), grade, fit) %>%
mutate(grp = .y)) %>%
unite(dname, dname, dvalue, sep=" = ") %>%
ggplot(aes(x = grade, y = fit, color = dname)) +
geom_line() +
theme_bw() #+
# facet_wrap(~ grp)
-输出
如果我们想要行尾的标签,请使用directlabels
library(directlabels)
imap_dfr(allEffects(m2), ~ as_tibble(.x) %>%
mutate(dname = grep("d_", names(.), value = TRUE)) %>%
select(dname, dvalue = starts_with('d_'), grade, fit) %>%
mutate(grp = .y)) %>%
unite(dname, dname, dvalue, sep=" = ") %>%
ggplot(aes(x = grade, y = fit, group = dname, color = dname)) +
geom_line() +
theme_bw() +
scale_colour_discrete(guide = 'none') +
geom_dl(aes(label = dname), method="last.qp", cex = 0.8)
此外,可以将每个“dvalue”作为facet 完成
imap_dfr(allEffects(m2), ~ as_tibble(.x) %>%
mutate(dname = grep("d_", names(.), value = TRUE)) %>%
select(dname, dvalue = starts_with('d_'), grade, fit) %>%
mutate(grp = .y)) %>%
unite(dname, dname, dvalue, sep=" = ", remove = FALSE) %>%
ggplot(aes(x = grade, y = fit, group = dname, color = dname)) +
geom_line() +
theme_bw() +
scale_colour_discrete(guide = 'none') +
geom_dl(aes(label = dname), method="last.qp", cex = 0.8) +
facet_wrap(~ dvalue)
或者如果我们只需要一个特定的级别,那么filter
imap_dfr(allEffects(m2), ~ as_tibble(.x) %>%
mutate(dname = grep("d_", names(.), value = TRUE)) %>%
select(dname, dvalue = starts_with('d_'), grade, fit) %>%
mutate(grp = .y)) %>%
unite(dname, dname, dvalue, sep=" = ") %>%
filter(dname %in% c("d_hyp = 1", "d_math = 1")) %>%
ggplot(., aes(x = grade, y = fit, colour = dname, group = dname)) +
geom_line() +
scale_colour_discrete(guide = 'none') +
geom_dl(aes(label = dname), method="last.qp", cex = 0.6) +
theme_bw()