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.
The geom_smooth() function in ggplot2 can plot fitted lines from models with a simple structure. Supported model types include models fit with lm() , glm() , nls() , and mgcv::gam() . Fitted lines can vary by groups if a factor variable is mapped to an aesthetic like color or group .
Adding a regression line on a ggplot You can use geom_smooth() with method = "lm" . This will automatically add a regression line for y ~ x to the plot.
A regression line will be added on the plot using the function abline(), which takes the output of lm() as an argument. You can also add a smoothing line using the function loess().
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 :
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With