2014-09-29 41 views
0

我正在使用两个连续预测变量进行逻辑回归模型研究。我想使用ggplot2来呈现结果,并利用facet_wrap来显示使用具有多个级别的分类预测器的回归线。我知道我可以使用stat_smooth来拟合曲线,但我的问题是我的预测因子之间的关系因组而不同,因此我有重要的线性和二次项,甚至是非显着的关系。我写了一个函数,它允许我将正确的曲线拟合到我的数据中,但是按时间顺序排列到每个方面。但是,我怎样才能应用这个使用facet_wrap并添加不同的回归线(线性或二次方)到每个方面?如何在ggplot2中的facet_wrap的每个面板上独立绘制回归模型的曲线或线条?

一个例子:

data <-data.frame (x=c(21.0,21.0,22.8,21.4,18.7,18.1,14.3,24.4,22.8, 19.2,17.8,16.4,17.3,15.2,10.4,10.4,14.7,32.4,30.4,33.9,21.5, 15.5,15.2,13.3,19.2,27.3,26.0,30.4,15.8,19.7,15.0,21.4), 
           y = c(160.0 ,160.0, 108.0 ,258.0 ,360.0 ,225.0 ,360.0 ,146.7 ,140.8, 167.6 ,167.6, 275.8 ,275.8, 275.8, 472.0 ,460.0 ,440.0 , 78.7 , 75.7, 71.1, 120.1 ,318.0 ,304.0,350.0,400.0,79.0,120.3,95.1,351.0,145.0,301.0,121.0), groups =c(6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4)) 

    data.split <-split(data,groups) 

    ggplot2.function <- function(dat, x,y){ 
      p1=ggplot(data=dat, aes(x=x, y=y)) + 
      geom_point() 
      m = glm(y~ poly(x,2), data = dat, family = "gaussian") 
      pvalue1= summary(m)$coef[, "Pr(>|t|)"] [2] 
      pvalue2= summary(m)$coef[, "Pr(>|t|)"] [3] 
      if(((pvalue2 > 0.05)==TRUE)&((pvalue1> 0.05)==TRUE)){ 
      print(p1) 
      } 
      if(((pvalue2 > 0.05)==TRUE)&((pvalue1< 0.05)==TRUE)){ 
      print(p1 + stat_smooth(method = "glm", formula = y ~ x, size = 1,se=FALSE)) 
      } 
     if((pvalue2 < 0.05)==TRUE){ 
      print(p1 + stat_smooth(method = "glm", formula = y ~ poly(x, 2), size = 1, se=FALSE)) 
     } 
     } 
    lapply(data.split,ggplot2.function) 

然后,我有三个地块。第一个是线性关系,第二个是非显着性的,第三个是二次关系。 在这种情况下,我可以使用facet_wrap函数吗? 任何帮助将不胜感激。提前致谢。

+1

您已经定义了'ggplot2.function',但没有显示正在调用它或提供任何测试数据,以便查看函数的实际输出结果。请确保你的问题是[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。但总的来说,ggplot希望所有方面都具有相同的图层。你可能会更好地分开绘制并合并它们。 – MrFlick 2014-09-29 17:05:12

+0

如果我把它们分开绘制,我怎么能把它们合并起来?我使用了函数pushViewport(viewport(layout = grid.layout(1,3))); vplayout < - function(x,y); viewport(layout.pos.row = x,layout.pos.col = y);打印(p1,vp = vplayout(1,1))。但那不起作用。感谢您的回答 – user 2014-09-29 20:02:02

回答

1

不幸的是,我认为当facet中有不同的图层时,不可能使用facet_wrap()。在同一个窗口中绘制所有绘图的唯一方法是使用函数grid.arrange()。通过分别为每个组创建ggplot,并将相应的线性或二阶(二次)多项式添加到绘图,然后在一个窗口中将它们合并,使用grid.arrange(p1,p2, p3, p4, nrow=2, ncol = 2)

相关问题