使用效果包更改布局顺序:R

问题描述

我只想使用 Effects 包绘制多项式回归的一个类别。

示例:

library(nnet)
m1 <- multinom(Species ~ Sepal.Width * Petal.Width + Sepal.Length,data = iris)
plt <- effect("Sepal.Width * Petal.Width",m1,x.var = "Sepal.Width")
plot(plt,x.var = "Sepal.Width",lattice = list(strip = list(factor.names = F)),confint = list(style="auto",col = "black"),axes = list(grid = T,x = list(rug = F)))

这给了我以下内容https://i.stack.imgur.com/fdOw5.png

有什么方法可以只绘制,例如 Versicolor 类? 已经尝试使用 layout(),但我只能绘制 Setosa 和 Versicolor:

plot(plt,lattice = list(strip = list(factor.names = F),layout = c(5,2,1)),x = list(rug = F)))

如果我将 layout = c(5,1) 更改为 layout = c(5,1,1),它只会显示 Setosa。

谢谢!

解决方法

我发现的最简单的方法是使用 ggplot2。

首先,我必须将我的 object(从 effect())转换为数据框,然后从那里开始:

示例:

m1 <- multinom(Species ~ Sepal.Width * Petal.Width + Sepal.Length,data = iris)
plt <- effect("Sepal.Width * Petal.Width",m1)

plt_df <- data.frame(plt) # creating a data frame

并使用 ggplot2 绘图:

ggplot(data = plt_df,aes(x = Sepal.Width,y = prob.versicolor,ymin = L.prob.versicolor,# Lower CI
                        ymax = U.prob.versicolor)) + # Upper CI
geom_ribbon(alpha = 0.2) +  # For CI
geom_line() +  
facet_wrap(~Petal.Width,ncol = 5) +
# Few things to custoimze
scale_y_continuous("Predicted Probabilities Y",# axes on top / right sides
                     sec.axis = dup_axis(),breaks = c(0,0.25,0.5,.75,1),labels = c("0%","25%","50%","75%","100%")) + 
scale_x_continuous("Sepal Width") + 
theme_bw() +
theme(plot.title = element_text(hjust = 0.5),strip.placement = "outside",## If you want to point axis ticks inwards:
        ### (2.75pt is the default axis tick length here)
        # axis.ticks.length = unit(-2.75,"pt"),## do not show top / right axis labels:
        # axis.text.x.top = element_blank(),## For Secondary Axis:
        #axis.text.y.right = element_blank(),## As Above,Don't show axis titles:
        # axis.title.x.top = element_blank(),axis.title.y.right = element_blank(),# Change the distance between y axis title and ticks:
        axis.title.y = element_text(margin = margin(
          t = 0,r = 20,b = 0,l = 0)),panel.background = element_blank()) 

https://i.stack.imgur.com/ocVJO.png