Ich bemühe mich sehr, eine Regressionslinie zu einem ggplot hinzuzufügen. Ich habe es zuerst mit abline versucht, aber ich habe es nicht geschafft, dass es funktioniert. Dann habe ich das versucht ...
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)
In der Regel Ihre eigene Formel zur Verfügung zu stellen , sollten Sie Argumente verwenden xund ydass Werte , die Sie in bereitgestellt entsprechen wird ggplot()- in diesem Fall xinterpretiert werden , wie x.plotund ywie y.plot. Weitere Informationen zu Glättungsmethoden und -formeln finden Sie auf der Hilfeseite der Funktion, stat_smooth()da dies der Standardstatus ist, der von verwendet wird geom_smooth().
Wenn Sie dieselben x- und y-Werte verwenden, die Sie im ggplot()Aufruf angegeben haben, und eine lineare Regressionslinie zeichnen müssen, müssen Sie die darin enthaltene Formel nicht verwenden, sondern geom_smooth()nur die method="lm".
Wie ich gerade herausgefunden habe, funktioniert die oben genannte Lösung nicht , wenn Sie ein Modell haben, das an eine multiple lineare Regression angepasst ist .
Sie müssen Ihre Zeile manuell als Datenrahmen erstellen, der vorhergesagte Werte für Ihren ursprünglichen Datenrahmen enthält (in Ihrem Fall data).
Es würde so 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))
# 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)
Eine Sache, auf die Sie achten sollten, ist die Konvention lm (y ~ x). Ich habe mich für eine zweite Lesung ein wenig umgedreht, da die Variable, die Sie 'vorhersagen', auf der x-Achse liegt. Tolle Antwort.
Dies ist etwas weniger effizient, da standardmäßig n=101Punkte berechnet werden, aber viel flexibler, da eine Vorhersagekurve für jedes unterstützte Modell erstellt wird predict, z. B. nichtlinear npregaus Paket np.
Hinweis: Wenn Sie verwenden scale_x_continuousoder scale_y_continuouseinige Werte möglicherweise abgeschnitten sind und daher geom_smoothmöglicherweise nicht richtig funktionieren. Verwenden Sie coord_cartesianstattdessen zum Zoomen .
Sie müssen sich also keine Gedanken über die Reihenfolge Ihrer Formeln oder das Hinzufügen von +0Namen machen. Sie können Namen verwenden. data.lm$coefficients[['(Intercept)']]und data.lm$coefficients[['DepDelay']].
Ufos
(Fast) wird immer (Intercept)zuerst aufgeführt. Die Namen machen den Code klarer.
qwr
Ich denke, das ist die beste Antwort - es ist die vielseitigste.
Wenn Sie andere Modelltypen anpassen möchten, z. B. eine Dosis-Wirkungs-Kurve mit logistischen Modellen, müssen Sie auch mehr Datenpunkte mit der Funktion "Vorhersage" erstellen, wenn Sie eine glattere Regressionslinie wünschen:
fit: Ihre Anpassung 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)))
Die offensichtliche Lösung mit
geom_abline
:Wo
data.lm
ist einlm
Objekt unddata.lm$coefficients
sieht ungefähr so aus:In der Praxis ist es identisch
stat_function
, die Regressionslinie als Funktion von x zu zeichnen, wobei Folgendes verwendet wirdpredict
:Dies ist etwas weniger effizient, da standardmäßig
n=101
Punkte berechnet werden, aber viel flexibler, da eine Vorhersagekurve für jedes unterstützte Modell erstellt wirdpredict
, z. B. nichtlinearnpreg
aus Paket np.Hinweis: Wenn Sie verwenden
scale_x_continuous
oderscale_y_continuous
einige Werte möglicherweise abgeschnitten sind und dahergeom_smooth
möglicherweise nicht richtig funktionieren. Verwenden Siecoord_cartesian
stattdessen zum Zoomen .quelle
+0
Namen machen. Sie können Namen verwenden.data.lm$coefficients[['(Intercept)']]
unddata.lm$coefficients[['DepDelay']]
.(Intercept)
zuerst aufgeführt. Die Namen machen den Code klarer.Ich habe diese Funktion in einem Blog gefunden
Sobald Sie die Funktion geladen haben, können Sie einfach
Sie können auch für gehen
ggplotregression( y ~ x + z + Q, data)
Hoffe das hilft.
quelle
Wenn Sie andere Modelltypen anpassen möchten, z. B. eine Dosis-Wirkungs-Kurve mit logistischen Modellen, müssen Sie auch mehr Datenpunkte mit der Funktion "Vorhersage" erstellen, wenn Sie eine glattere Regressionslinie wünschen:
fit: Ihre Anpassung einer logistischen Regressionskurve
quelle