2014-09-29 109 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)

相關問題