4

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

无论如何将图例放置在绘图区域内而不是图形上方的示例中?

或者:有谁知道如何绘制使用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

4 回答 4

3

?xyplot你读到:

或者,可以通过指定 components 和corner 将键定位在绘图区域xyxy确定由corner给定的键的角的位置,通常是 c(0,0)、和中的一个c(1,0),表示单位正方形的角。c(1,1)c(0,1)

?plot.eff你那里读到

key.args 要传递给 xyplot 或 densityplot 的 key trellis 参数的附加参数,例如,将键(图例)定位在绘图区域中。

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

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

在此处输入图像描述

于 2013-07-15T17:17:07.623 回答
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具体取决于您希望如何显示数据。

输出如下: 在此处输入图像描述

于 2013-07-15T17:04:54.333 回答
3

Based on Ruben's answer, you can try following:

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

which will reproduce the plot with ggplot, and sjp.int also returns the plot object for further customization. However, you can also set certain legend-parameters with the sjPlot-package:

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

which gives you following plot:

enter image description here

See sjPlot-manual for examples on how to customize plot-appearance and legend-position/size etc.

For plotting estimates of your model as forest plot, or marginal effects of all model terms, see ?sjp.lm in the sjPlot-package, or you may even try out the latest features in my package from GitHub.

于 2015-06-20T08:20:22.840 回答
1

@Tom Wenseleers

您可以为此使用sjPlot::sjp.intwith 。type='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不被尊重)。

于 2015-06-18T11:37:25.863 回答