2016-07-21 20 views
1

私は、海草の脊椎動物の存在量を見るために負の2項glmを使いました。私は相互作用の用語を持っていたので、私は魚の存在量のいくつかの値を予測しました。私はこれらの予測された回帰線をプロット空間の終わりに到達させたいと思います。今それらはすべて、以下の例のように、異なる時間に遮断されています。私は以前に私がfullrange=TRUEを使用することができますが、それはまだ動作しませんでしたlines()コマンドを使用しますが、geom_lines()に切り替えた回帰直線をgeom_line()で延長するggplot2

total<-c(1,0,5,7,9,10,23,45,78,100) 
shoots_collected<-c(1,2,3,4,5,6,7,45,67,88) 
epi_bio<-c(0.0,11,0.89,1.5,9,5,.04,6,7,.9) 
Year<-c(1,1,1,1,2,2,2,2,1,1) 
Year<-as.factor(Year) 
intertidal<-data.frame(shoots_collected,Year,epi_bio, total) 

glm.neg<-glm.nb(total~Year+shoots_collected+epi_bio+shoots_collected*epi_bio, 
data=intertidal) 
summary(glm.neg) 
abun_shoots2015<-data.frame("shoots_collected"=rep(0:30, rep(5,31)), 
"epi_bio"=rep(c(0,1,2,3,4), 31), "Year"=rep("1", 155)) 

# then extracted predicted values using: 

p2015<-predict(glm.neg, newdata=abun_shoots2015, se.fit=TRUE, type='response') 
abun_shoots2015$fit<-p2015$fit 
ggplot(intertidal, aes(x=shoots_collected, y=total)) + 
scale_x_continuous(limits = c(0, 30))+ 
scale_y_continuous(limits=c(0,10))+ 
geom_point(pch=1)+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==0.0000),], aes(x=shoots_collected, y=fit), col="red")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==1),], aes(x=shoots_collected, y=fit), col="green")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==2),], aes(x=shoots_collected, y=fit), col="blue")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==3),], aes(x=shoots_collected, y=fit), col="yellow")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==4),], aes(x=shoots_collected, y=fit), col="pink") 

。私はラインをプロットしようとするといくつか欠けている値があることを知っている、と私はなぜいくつかが断ち切られていると思うが、私はここからどこに行くのか分からない。

答えて

1

scale_y_continuousなどは、指定された範囲を超えてデータを完全にトリミングする効果がないので、ここでは使用しません。代わりに、データの一部だけを表示するようにプロットの範囲を制限する必要があります。以下のようにこれは、coord_cartesian()で行われます。

ggplot(intertidal, aes(x=shoots_collected, y=total)) + 
coord_cartesian(xlim = c(0, 30), ylim = c(0,10)) + ## KEY! 
geom_point(pch=1)+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==0.0000),], 
      aes(x=shoots_collected, y=fit), col="red")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==1),], 
      aes(x=shoots_collected, y=fit), col="green")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==2),], 
      aes(x=shoots_collected, y=fit), col="blue")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==3),], 
      aes(x=shoots_collected, y=fit), col="yellow")+ 
geom_line(data=abun_shoots2015[which(abun_shoots2015$epi_bio==4),], 
      aes(x=shoots_collected, y=fit), col="pink") 

また、私はあなたのプロットは、よりきれいな要因としてepi_bioを処理することにより生成することができることを追加することを強要感じる:

ggplot(intertidal, aes(x=shoots_collected, y=total)) + 
    coord_cartesian(xlim = c(0, 30), ylim = c(0,10)) + ## KEY! 
    geom_point(pch=1) + 
    geom_line(data = abun_shoots2015, aes(y = fit, colour = as.factor(epi_bio))) + 
    scale_colour_discrete(name = "epi_bio") + 
    theme(legend.position = "top") 

enter image description here

+0

感謝を、私は自分の関数の代わりに角括弧の中に 'coord_cartesian'を使用しようとしていました。私は実際のデータに私の行を拡張することに問題が残っていました(それはサンプルデータでは機能しましたが、何らかの理由で私自身では機能しませんでした)。私がしたことは、私の最大値が30であっても、0-35のシュートから予測されました。私はちょっと早めにグラフを切り取ってみます。ありがとう、これはもっとよく見えます!伝説を手動で追加することを楽しみにしていませんでした。 – lken

関連する問題