5
votes

I am trying to put two regression lines into the same plot. I can do it by using the code below but with the same color of line:

model1 <- glm(species~logarea, family=poisson, data=fish)
model2 <- glm.nb(species~logarea, data=fish)

plot(species~logarea,data=fish)
lines(fitted(model1)[order(logarea)]~sort(logarea),data=fish)
lines(fitted(model2)[order(logarea)]~sort(logarea),data=fish)

I am thinking to use ggplot to replicate above plot so I can display different line with different color. But I could not figure out how to do it.

I only finished the first step which is drawing the scatter plot, but don't know how to add lines on it.

ggplot(fish,aes(fish$logarea,fish$SPECIES))+geom_point()

I did some search and I understand that I can use geom_smooth(method = "glm") to generate regression line. But it seems it is not based on the model I built.

Could anyone shed some light on this?

Many thanks.

2

2 Answers

5
votes

Just add geom_line(aes(y=fitted_datas)), for instance like this :

data("mtcars")
library(ggplot2)
model <- glm(mpg~hp, family=poisson, data=mtcars)
ggplot(mtcars,aes(hp,mpg))+geom_point()+geom_line(aes(y=fitted(model)))

Results :

enter image description here

2
votes

You can fit the models directly in geom_smooth. In this case, you'll need to give extra arguments to the fitting method using the method.args argument to define the family for the glm.

Here is an example, adding different colors per model type. I use se = FALSE to remove the confidence intervals.

ggplot(fish,aes(logarea, SPECIES)) + 
    geom_point() +
    geom_smooth(method = "glm", method.args = list(family = poisson), aes(color = "poisson"), se = FALSE) +
    geom_smooth(method = MASS::glm.nb, aes(color = "NB"), se = FALSE)