覆盖2个allEffects图表

时间:2016-05-19 20:32:47

标签: r plot overlay effects graphing

我有以下型号

require(effects)

fit<-lme(x ~ y, data, random= ~1|item)
plot(allEffects(fit)

fit2<-lme(x ~ y, data2, random = ~1|item)
plot(allEffects(fit2)

我如何绘制fit和fit2叠加?我已经尝试了par(new = T),但它不起作用。这些图表可以单独绘制。

1 个答案:

答案 0 :(得分:2)

我不确定是否有非常这样做的好方法。我通常从效果结构中提取信息并用ggplot绘制它(格子也是可能的)。

以下是一个例子:

library(effects)
library(nlme)
library(plyr)  ## utilities

将模型拟合到其中一个标准示例数据集的第一个和第二个半部分:

fm1 <- lme(distance ~ age, random = ~1|Subject,
          data = Orthodont[1:54,])
fm2 <- update(fm1, data = Orthodont[55:108,])
a1 <- allEffects(fm1)
a2 <- allEffects(fm2)

efflist对象中提取信息。这是不完全一般的部分......困难的部分是取出预测变量。

as.data.frame.efflist <- function(x) {
   ldply(x,
         function(z) {
           r <- with(z,data.frame(fit,
                                  var=variables[[1]]$levels,
                                  lower,upper))
           return(plyr::rename(r,setNames(z$variables[[1]]$name,"var")))
         })
}

为方便起见,使用ldply将两个模型的结果放在一起:

comb <- ldply(list(fm1=a1,fm2=a2),as.data.frame,.id="model")

现在情节:

library(ggplot2); theme_set(theme_bw())
ggplot(comb,aes(age,fit,
               ymin=lower,ymax=upper,
               colour=model,fill=model))+
     geom_line()+
     geom_ribbon(alpha=0.2,colour=NA)+
     geom_rug(sides="b")

地毯情节组件在这里有点傻。

enter image description here