2013-03-26 16 views
46

Próbuję mocno dodać linię regresji na ggplot. Najpierw próbowałem z abline, ale nie udało mi się sprawić, żeby to działało. Potem próbowałem tego ...Dodawanie linii regresji na ggplot

data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50)) 
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm',formula=data$y.plot~data$x.plot) 

Ale to też nie działa.

Odpowiedz

77

Generalnie, aby zapewnić swoją własną formułę należy użyć argumentów x i y że będzie odpowiadać wartości podanej na ggplot() - w tym przypadku x będą interpretowane jako x.plot i y jako y.plot. Więcej informacji o metodach wygładzania i wzorze można znaleźć na stronie pomocy funkcji stat_smooth(), ponieważ jest to domyślny stat używany przez geom_smooth().

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm',formula=y~x) 

Jeśli używasz tej samej wartości X i Y, które dostarczane w zaproszeniu ggplot() i trzeba wykreślić regresji liniowej wtedy nie trzeba by użyć formuły wewnątrz geom_smooth(), po prostu dostarczyć method="lm".

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm') 
5

Jak tylko zorientowali, w przypadku gdy masz modelu zamontowany na wielokrotnej regresji liniowej, powyższe rozwiązanie nie zadziała.

Musisz ręcznie utworzyć linię jako ramkę danych zawierającą przewidywane wartości oryginalnej ramki danych (w Twoim przypadku data).

będzie to wyglądać tak:

# read dataset 
df = mtcars 

# create multiple linear model 
lm_fit <- lm(mpg ~ cyl + hp, data=df) 
summary(lm_fit) 

# save predictions of the model in the new data frame 
# together with variable you want to plot against 
predicted_df <- data.frame(mpg_pred = predict(lm_fit, df), hp=df$hp) 

# this is the predicted line of multiple linear regression 
ggplot(data = df, aes(x = mpg, y = hp)) + 
    geom_point(color='blue') + 
    geom_line(color='red',data = predicted_df, aes(x=mpg_pred, y=hp)) 

Multiple LR

# this is predicted line comparing only chosen variables 
ggplot(data = df, aes(x = mpg, y = hp)) + 
    geom_point(color='blue') + 
    geom_smooth(method = "lm", se = FALSE) 

Single LR

1

Jeśli chcesz, aby dopasować innego rodzaju modeli, jak krzywej dawka-odpowiedź za pomocą modeli logistycznych ty musiałby również utworzyć więcej punktów danych za pomocą funkcji przewidywania, jeśli chcesz mieć płynniejszą linię regresji:

dopasowanie: dopasowanie krzywa regresji logistycznej

#Create a range of doses: 
mm <- data.frame(DOSE = seq(0, max(data$DOSE), length.out = 100)) 
#Create a new data frame for ggplot using predict and your range of new 
#doses: 
fit.ggplot=data.frame(y=predict(fit, newdata=mm),x=mm$DOSE) 

ggplot(data=data,aes(x=log10(DOSE),y=log(viability)))+geom_point()+ 
geom_line(data=fit.ggplot,aes(x=log10(x),y=log(y)))