使用效果包的自定义绘图

时间:2013-07-15 16:18:21

标签: r ggplot2 regression

我尝试从效果包中自定义多线图。

无论如何,在绘图区域内而不是图形上方的下面的示例中定位图例?

或者:有没有人知道如何使用ggplot2绘制效果包计算的多线回归的结果?

我感谢任何帮助。

安迪

示例:

library(effects)
data(Prestige)
mod5 <- lm(prestige ~ income*type + education, data=Prestige)
eff_cf <- effect("income*type", mod5)
print(plot(eff_cf, multiline=TRUE))

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

?xyplot开始阅读:

  

或者,可以将键放置在绘图区域内   指定组件xy和角落。 xy确定位置   角落给角落的角落,通常是角落之一   c(0,0)c(1,0)c(1,1)c(0,1),表示角落   单位广场。

并从?plot.eff读到

  

key.args要传递给密钥网格的其他参数   xyplot或densityplot的参数,例如,定位键(图例)   在绘图区域。

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

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

enter image description here

答案 2 :(得分:3)

根据Ruben的回答,您可以尝试以下方法:

library(sjPlot)
sjp.int(mod5, type = "eff", swapPredictors = T)

将使用ggplot重现绘图,sjp.int也会返回绘图对象以进行进一步自定义。但是,您也可以使用sjPlot-package设置某些图例参数:

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

给出了以下情节:

enter image description here

有关如何自定义绘图外观和图例位置/大小等的示例,请参阅sjPlot-manual

为了将模型的估计值绘制为森林图或所有模型术语的边际效应,请参阅sjPlot-package中的?sjp.lm,或者您甚至可以尝试我的包from GitHub中的最新功能

答案 3 :(得分:1)

@Tom Wenseleers

您可以将sjPlot::sjp.inttype='eff'一起使用。

但是,它不会给你地毯图,也没有原始数据点。

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

partial.residuals = T函数有一个参数effect()。 这为您提供了拟合值,partial.residuals.raw和partial.residuals.adjusted。 我想你可以将这些数据合并到原始数据集上,然后按组绘制平滑图,但我在早期遇到了一些困难(例如na.action=na.exclude没有得到尊重)。