2013-03-26 13 views
46

Ich versuche, eine Regressionslinie auf einem ggplot hinzuzufügen. Ich habe es zuerst mit Abline versucht, aber ich habe es nicht geschafft, es funktionieren zu lassen. Dann habe ich das versucht ...Hinzufügen einer Regressionslinie auf einem 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) 

Aber es funktioniert auch nicht.

Antwort

77

Im Allgemeinen Ihre eigene Formel, um Ihnen Argumente x und y, die Werte, die Sie zur Verfügung gestellt in ggplot() entsprechen wird verwendet werden soll - in diesem Fall x interpretiert wird als x.plot und y als y.plot. Weitere Informationen zu Glättungsmethoden und Formeln finden Sie auf der Hilfeseite der Funktion stat_smooth(), da der Standard stat von geom_smooth() verwendet wird.

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

Wenn Sie die gleichen x- und y-Werte verwenden, die Sie im ggplot() Anruf geliefert und müssen lineare Regressionslinie zeichnen, dann müssen Sie die Formel nicht innerhalb geom_smooth() verwenden, geben Sie einfach die method="lm".

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

Wie ich dachte nur, falls Sie haben ein Modell auf mehrere linearen Regression angepasst, wird die oben genannte Lösung nicht funktionieren.

Sie müssen Ihre Zeile manuell als einen Datenrahmen erstellen, der vorhergesagte Werte für Ihren ursprünglichen Datenrahmen enthält (in Ihrem Fall data).

Es würde wie folgt aussehen:

# 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

Wenn Sie eine andere Art von Modellen passen wollen, wie eine Dosis-Wirkungs-Kurve mittels logistische Modelle, die Sie müsste auch mehr Datenpunkte mit der Funktion vorhergesagt erstellen, wenn Sie eine glattere Regressionslinie haben möchten:

fit: Ihr Sitz einer logistischen Regressionskurve

#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))) 
Verwandte Themen