2016-07-21 14 views
1

Ich habe ein negatives Binom-Glm verwendet, um die Häufigkeit von Wirbeltieren in Seegras zu untersuchen. Weil ich einen Interaktionsterm hatte, sagte ich einige Werte für den Fischreichtum voraus. Ich möchte, dass diese vorhergesagten Regressionslinien das Ende des Diagrammbereichs erreichen. Gerade jetzt sind sie alle Schneiden zu verschiedenen Zeiten ab, wie im Beispiel unten:Regressionsgeraden erweitern mit 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") 

ich zuvor mit dem Befehl lines(), wechselte aber zu geom_lines() so konnte ich fullrange=TRUE verwenden, aber es immer noch nicht funktioniert. Ich sehe, dass ich einige fehlende Werte habe, wenn ich versuche, die Linien zu zeichnen, und ich vermute, dass deshalb einige abgeschnitten werden, aber ich weiß nicht, wohin ich von hier aus gehen soll.

Antwort

1

Sie möchten scale_y_continuous usw. hier nicht verwenden, da sie dazu führen, dass Daten, die außerhalb der angegebenen Grenzwerte liegen, vollständig ausgeschnitten werden. Stattdessen möchten Sie den Bereich des Diagramms so einschränken, dass nur ein Teil der Daten angezeigt wird. Dies wird mit coord_cartesian() getan, wie in:

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") 

Auch ich fühle mich gezwungen, hinzuzufügen, dass Ihr Grundstück mehr schön durch epi_bio Behandlung als Faktor hergestellt werden könnte:

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

Dank Ich habe versucht, 'coord_cartesian' in Klammern anstelle seiner eigenen Funktion zu verwenden. Ich hatte immer noch Probleme mit der Erweiterung meiner Zeilen auf meine realen Daten (es funktionierte für die Beispieldaten, aber aus irgendwelchen Gründen nicht für mich). Was ich gemacht habe, war von 0-35 Shootings vorherzusagen, obwohl mein Maximum 30 ist. Ich werde nur den Graphen früh abschneiden, Art von Betrug, den ich kenne. Danke, das sieht viel schöner aus! Ich habe mich nicht darauf gefreut, eine Legende manuell hinzuzufügen. – lken