Ich frage mich, wie man die Regressionsgeradengleichung und R ^ 2 auf die ggplot
. Mein Code lautet:
library(ggplot2)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) +
geom_point()
p
Jede Hilfe wird sehr geschätzt.
r
ggplot2
linear-regression
r-faq
MYaseen208
quelle
quelle
latticeExtra::lmlineq()
.Antworten:
Hier ist eine Lösung
BEARBEITEN. Ich habe die Quelle herausgefunden, aus der ich diesen Code ausgewählt habe. Hier ist der Link zum ursprünglichen Beitrag in den Google-Gruppen von ggplot2
quelle
annotate
war auf meinem Computer korrekt.aes(
und das entsprechende)
.aes
dient zum Zuordnen von Datenrahmenvariablen zu visuellen Variablen - dies wird hier nicht benötigt, da es nur eine Instanz gibt, sodass Sie alles in den Hauptaufrufgeom_text
einfügen können. Ich werde dies in der Antwort bearbeiten.Ich habe eine Statistik
stat_poly_eq()
in mein Paket aufgenommenggpmisc
, die diese Antwort ermöglicht:Diese Statistik funktioniert mit jedem Polynom ohne fehlende Begriffe und hat hoffentlich genug Flexibilität, um allgemein nützlich zu sein. Die R ^ 2- oder angepassten R ^ 2-Beschriftungen können mit jeder mit lm () ausgestatteten Modellformel verwendet werden. Als ggplot-Statistik verhält sie sich sowohl bei Gruppen als auch bei Facetten wie erwartet.
Das 'ggpmisc'-Paket ist über CRAN erhältlich.
Version 0.2.6 wurde gerade in CRAN akzeptiert.
Es werden Kommentare von @shabbychef und @ MYaseen208 behandelt.
@ MYaseen208 Dies zeigt, wie man einen Hut hinzufügt .
@shabbychef Jetzt ist es möglich, die Variablen in der Gleichung mit denen abzugleichen, die für die Achsenbeschriftungen verwendet werden. Um das x durch z und y durch h zu ersetzen, würde man verwenden:
Als diese normalen R-analysierten Ausdrücke können griechische Buchstaben jetzt auch sowohl im lhs als auch im rhs der Gleichung verwendet werden.
[2017-03-08] @elarry Bearbeiten, um die ursprüngliche Frage genauer zu beantworten, und zeigen, wie ein Komma zwischen den Gleichungs- und R2-Bezeichnungen eingefügt wird.
[2019-10-20] @ helen.h Ich gebe unten Beispiele für die Verwendung
stat_poly_eq()
mit Gruppierung.[2020-01-21] @Herman Es mag auf den ersten Blick etwas kontraintuitiv sein, aber um eine einzige Gleichung zu erhalten, wenn man eine Gruppierung verwendet, muss man der Grammatik der Grafiken folgen. Beschränken Sie entweder die Zuordnung, mit der die Gruppierung erstellt wird, auf einzelne Ebenen (siehe unten) oder behalten Sie die Standardzuordnung bei und überschreiben Sie sie mit einem konstanten Wert in der Ebene, in der Sie die Gruppierung nicht möchten (z
colour = "black"
. B. ).Fortsetzung des vorherigen Beispiels.
[2020-01-22] Der Vollständigkeit halber ein Beispiel mit Facetten, das zeigt, dass auch in diesem Fall die Erwartungen an die Grammatik von Grafiken erfüllt sind.
quelle
x
undy
in der Formel auf diex
undy
Daten in den Ebenen des Diagramms beziehen und nicht unbedingt auf diejenigen, die zu diesem Zeitpunkt im Umfang erstellt wurdenmy.formula
. Daher sollte die Formel immer x- und y-Variablen verwenden?x
undy
beziehen Sie sich auf die Variablen, die dieser Ästhetik zugeordnet sind. Das ist die Erwartung auch für geom_smooth () und wie die Grammatik von Grafiken funktioniert. Es hätte klarer sein können, verschiedene Namen innerhalb des Datenrahmens zu verwenden, aber ich habe sie einfach wie in der ursprünglichen Frage beibehalten.ggpmisc
. Danke für den Vorschlag!aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~"))
das den Job macht.stat_poly_eq()
. Sie könnenstat_fit_glance()
auch aus dem Paket 'ggpmisc' verwenden, das R2 als numerischen Wert zurückgibt. Siehe Beispiele auf der Hilfeseite und ersetzenstat(r.squared)
durchsqrt(stat(r.squared))
.Ich habe einige Zeilen der Quelle
stat_smooth
und verwandter Funktionen geändert , um eine neue Funktion zu erstellen, die die Anpassungsgleichung und den R-Quadrat-Wert hinzufügt. Dies funktioniert auch bei Facettenplots!Ich habe den Code in @ Ramnaths Antwort verwendet, um die Gleichung zu formatieren. Die
stat_smooth_func
Funktion ist nicht sehr robust, aber es sollte nicht schwer sein, damit herumzuspielen.https://gist.github.com/kdauria/524eade46135f6348140 . Versuchen Sie zu aktualisieren,
ggplot2
wenn Sie eine Fehlermeldung erhalten.quelle
stat_smooth_func(mapping=aes(group=cut(x.val,c(-70,-20,0,20,50,130))),geom="text",method="lm",hjust=0,parse=TRUE)
in Kombination mit EvaluateSmooths von stackoverflow.com/questions/19735149/…source
die gesamte Datei in Ihrem Skript.xpos
undypos
Argumente der Funktion im Kern gemacht. Wenn Sie also möchten, dass sich alle Gleichungen überlappen, setzen Sie einfachxpos
undypos
. Ansonstenxpos
undypos
werden aus den Daten berechnet. Wenn Sie etwas ausgefalleneres wollen, sollte es nicht zu schwierig sein, der Funktion eine Logik hinzuzufügen. Zum Beispiel könnten Sie eine Funktion schreiben, um zu bestimmen, welcher Teil des Diagramms den meisten leeren Raum hat, und die Funktion dort platzieren.Ich habe Ramnaths Beitrag dahingehend geändert, dass a) generischer gemacht wird, sodass ein lineares Modell als Parameter anstelle des Datenrahmens akzeptiert wird und b) Negative angemessener angezeigt werden.
Die Verwendung würde sich ändern zu:
quelle
p1 = p + annotate("text", x = 25, y = 300, label = lm_eqn(lm(y ~ x, df)), colour="black", size = 5, parse=TRUE)
Bearbeiten: Dies behebt auch alle Probleme, die mit Buchstaben in Ihrer Legende auftreten können."cannot coerce class "lm" to a data.frame"
. Diese Alternative funktioniert:df.labs <- data.frame(x = 25, y = 300, label = lm_eqn(df))
undp <- p + geom_text(data = df.labs, aes(x = x, y = y, label = label), parse = TRUE)
lm_eqn(lm(...))
mit Ramnaths Lösung anrufen würden . Sie haben es wahrscheinlich versucht, nachdem Sie es versucht haben, aber vergessen, sicherzustellen, dass Sie es neu definiert habenlm_eqn
Ich liebe die @ Ramnath-Lösung wirklich. Um die Anpassung der Regressionsformel zu ermöglichen (anstelle von y und x als Literalvariablennamen) und den p-Wert auch zum Ausdruck hinzuzufügen (wie @Jerry T kommentierte), ist hier der Mod:
Leider funktioniert dies nicht mit facet_wrap oder facet_grid.
quelle
ggplot(mtcars, aes(x = wt, y = mpg, group=cyl))+
vor dem geom_point ()? Eine halb verwandte Frage - wenn wir uns beziehen PS und wt in deraes()
für ggplot, können wir dann greifen sie in dem Aufruf zu verwendenlm_eqn
, so ist, dann haben wir nur an einem Ort zu Code? Ich weiß , wir setzen konntenxvar = "hp"
vor dem ggplot () Aufruf und Nutzung xvar an beiden Standorten ersetzen PS , aber das fühlt sich an wie es sollte nicht notwendig sein.Verwenden von ggpubr :
quelle
label.y
?label.y = max(df$y) * 0.8
Hier ist der einfachste Code für alle
Hinweis: Pearson's Rho und nicht R ^ 2 anzeigen.
quelle
Inspiriert von dem in dieser Antwort angegebenen Gleichungsstil kann ein allgemeinerer Ansatz (mehr als ein Prädiktor + Latexausgabe als Option) sein:
Das
model
Argument erwartet einlm
Objekt, daslatex
Argument ist ein Boolescher...
Wert, um nach einem einfachen Zeichen oder einer latexformierten Gleichung zu fragen, und das Argument übergibt seine Werte an dieformat
Funktion.Ich habe auch eine Option hinzugefügt, um es als Latex auszugeben, damit Sie diese Funktion in einem Rmarkdown wie diesem verwenden können:
Jetzt mit:
Dieser Code ergibt:
y = 11.3382963933174 + 2.5893419 * x + 0.1002227 * z
Und wenn wir nach einer Latexgleichung fragen, runden wir die Parameter auf 3 Stellen:
Dies ergibt:
quelle
Ich habe Zweifel, wie man eine signifikante Statistik von t.test für bheta in die Gleichung setzt, indem man verwendet
ggpmisc::stat_poly_eq()
?Ex:
expression(hat(Y)== 0000*"**"+0000*"x"*"*"-0000*"x"^2*"**"~~~~"R"^2*":"~~0.000)
quelle