2016-09-13 3 views
3

Я пытаюсь поместить две линии регрессии в один и тот же сюжет. Я могу сделать это с помощью кода ниже, но с тем же цветом линии:Как построить линию регрессии с ggplot?

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) 

Я имею в виду использовать ggplot повторить выше сюжета, так что я могу показать другую линию с различным цветом. Но я не мог понять, как это сделать.

Я только закончил первый шаг, который рисует график рассеяния, но не знаю, как добавить в него линии.

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

Я сделал некоторый поиск, и я понимаю, что я могу использовать geom_smooth (метод = «GLM») для создания линии регрессии. Но, похоже, он не основан на модели, которую я построил.

Может ли кто-нибудь пролить свет на это?

Большое спасибо.

ответ

3

Просто добавьте geom_line(aes(y=fitted_datas)), например так:

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

Результаты:

enter image description here

+0

Большое спасибо за ваш ответ, Arault. Это хорошо работает в моем коде. – Peter

2

Вы можете соответствовать модели непосредственно в geom_smooth. В этом случае вам нужно будет предоставить дополнительные аргументы методу подгонки, используя аргумент method.args, чтобы определить семейство для glm.

Ниже приведен пример добавления разных цветов в тип модели. Я использую se = FALSE для удаления доверительных интервалов.

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)