Reputation: 907
I have code to graph a simple three-level one factor regression and I can't convince sjPlot to reorder the terms on the X-axis and I wondered if anyone could help me figure out what is going on.
My code:
m0 <- lmer(ans ~ type + (1|subject/target), data=behavioral_data)
summary(m0)
p1 <- plot_model(m0,
type = "pred",
terms = c("type"),
order.terms = c(2, 1),
auto.label = F,
title = "Model Estimates of Answer (Marginal Effects)",
axis.title = c("Target Type", "Answer")
)
The output the model summary produces:
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: ans ~ type + (1 | subject/target)
Data: behavioral_data
REML criterion at convergence: 15354
Scaled residuals:
Min 1Q Median 3Q Max
-2.8944 -0.7136 -0.1561 0.6646 3.2381
Random effects:
Groups Name Variance Std.Dev.
target:subject (Intercept) 0.1434 0.3787
subject (Intercept) 0.3051 0.5524
Residual 1.7003 1.3040
Number of obs: 4447, groups: target:subject, 444; subject, 37
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 2.74088 0.10181 48.14515 26.922 <2e-16 ***
typeN -0.03277 0.06509 404.96582 -0.503 0.6149
typeY -0.14263 0.06506 404.00056 -2.193 0.0289 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
The graph I get:
I expected order.terms = c(2, 1)
to reorder Y and N. What am I missing?
Upvotes: 1
Views: 778
Reputation: 25
Alternatively, you could apply a fct_relevel() function from the forcats package, which will order the factors in the same way for all future regressions. Applying this function to the original dataset before running the regression and the plot_model function solves this issue.
Example:
data2 <- data %>%
mutate(name = fct_relevel(name,
"north", "north-east", "east",
"south-east", "south", "south-west",
"west", "north-west"))
Now, when you apply the data table to regression and plot using plot_model, the factors will show up in the order above.
Upvotes: 0
Reputation: 11
Since what plot_model() turned back is a ggplot-object, you could add other ggplot-related functions to post modify the plot. For example, try this:
p1 <- plot_model(m0,
type = "pred",
terms = c("type"),
order.terms = c(2, 1),
auto.label = F,
title = "Model Estimates of Answer (Marginal Effects)",
axis.title = c("Target Type", "Answer")
) + scale_x_discrete(limits=c("S", "Y", "N"))
The limits=() argument in the discrete-series could accept a vector of characters to indicate the order of the x-axis.
Upvotes: 1