使用effects包创建自定义绘图

4
我尝试自定义effects包中的多行图表。
有没有办法将下面示例中的图例位置放在绘图区域内而不是上方?
或者:有谁知道如何使用ggplot2绘制由effects包计算的多行回归结果?
感激任何帮助。
安迪
示例:
library(effects)
data(Prestige)
mod5 <- lm(prestige ~ income*type + education, data=Prestige)
eff_cf <- effect("income*type", mod5)
print(plot(eff_cf, multiline=TRUE))

你能展示一些样本数据吗,就像你在effects包中所做的那样。 - Jd Baba
谢谢您的回复,我已经更新了我的问题并附上了一个例子。 - Andy
4个回答

3
根据Ruben的回答,你可以尝试以下操作:
library(sjPlot)
sjp.int(mod5, type = "eff", swapPredictors = T)

这将使用ggplot复制图表,sjp.int还返回图表对象以进行进一步的定制。但是,您也可以使用sjPlot软件包设置某些图例参数:

sjp.setTheme(legend.pos = "bottom right", 
             legend.inside = T)
sjp.int(mod5, type = "eff", swapPredictors = T)

以下是给你的绘图:

enter image description here

请参考sjPlot手册,了解如何自定义绘图外观和图例位置/大小等。

如需绘制模型估计的森林图或所有模型项的边际效应,请参见sjPlot包中的?sjp.lm,或者您可以尝试使用我在GitHub上最新的功能。


3
这是在ggplot中绘制效果对象的方法。
library(ggplot2)

## Change effect object to dataframe
eff_df <- data.frame(eff_cf)

## Plot ggplot with legend on the bottom
ggplot(eff_df)+geom_line(aes(income,fit,linetype=type))+theme_bw()+
  xlab("Income")+ylab("Prestige")+coord_cartesian(xlim=c(0,25000),ylim=c(30,110))+
  theme(legend.position="bottom")

你可以根据你想要展示数据的方式来更改 xlimylim
输出如下: enter image description here

这里只有一个额外的问题 - 您如何最优雅地添加95%置信限或95%预测带,比如使用实线和虚线显示三个组的不同颜色,并且也许还要以不同的颜色显示实际数据点?在效果包中没有选项可以显示实际数据点吗? - Tom Wenseleers

3

?xyplot中,您可以读取:

或者,通过指定组件xy和角落,可以将关键字放置在绘图区域内。其中xy决定由corner给出的关键字角落的位置,该角落通常是c(0,0)c(1,0)c(1,1)c(0,1)之一,它们表示单位正方形的四个角。

?plot.eff中,您可以读取:

key.args:传递给xyplotdensityplot的关键trellis参数的附加参数,例如将关键字(图例)定位于绘图区域。

因此,例如,您可以执行以下操作:

plot(eff_cf, multiline=TRUE,    
     key.args=list(x=0.2,y=0.9,corner=c(x=1, y=1)))

enter image description here


1

@Tom Wenseleers

您可以使用sjPlot::sjp.int,并将type='eff'用于此功能。

但是,它不会提供条形图和原始数据点。

mod5 <- lm(prestige ~ type * income + education, data=Prestige)
library(sjPlot)
sjp.int(mod5,showCI = T, type = 'eff')

函数effect()有一个参数partial.residuals = T,可以得到拟合值、部分残差和调整后的部分残差。我想你可以将这些数据与原始数据集合并,然后按组绘制平滑曲线,但早期遇到了一些困难(例如na.action=na.exclude不被尊重)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接