Incluí una estadística stat_poly_eq()
en mi paquete ggpmisc
que permite esta respuesta:
library(ggplot2)
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
Esta estadística funciona con cualquier polinomio sin términos faltantes, y con suerte tiene suficiente flexibilidad para ser generalmente útil. Las etiquetas R ^ 2 o R ^ 2 ajustadas se pueden usar con cualquier fórmula modelo equipada con lm (). Al ser una estadística ggplot, se comporta como se esperaba tanto con grupos como con facetas.
El paquete 'ggpmisc' está disponible a través de CRAN.
La versión 0.2.6 acaba de ser aceptada en CRAN.
Aborda los comentarios de @shabbychef y @ MYaseen208.
@ MYaseen208 esto muestra cómo agregar un sombrero .
library(ggplot2)
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(hat(y))~`=`~",
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
@shabbychef Ahora es posible hacer coincidir las variables de la ecuación con las utilizadas para las etiquetas de eje. Para reemplazar la x con digamos z e y con h, se usaría:
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(h)~`=`~",
eq.x.rhs = "~italic(z)",
aes(label = ..eq.label..),
parse = TRUE) +
labs(x = expression(italic(z)), y = expression(italic(h))) +
geom_point()
p
Al ser estas expresiones analizadas en R normales, las letras griegas ahora también se pueden usar tanto en lhs como en rhs de la ecuación.
[2017-03-08] @elarry Edit para abordar con mayor precisión la pregunta original, que muestra cómo agregar una coma entre las etiquetas de ecuación y R2.
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(hat(y))~`=`~",
aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~")),
parse = TRUE) +
geom_point()
p
[2019-10-20] @ helen.h A continuación, doy ejemplos de uso de stat_poly_eq()
agrupación.
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y, colour = group)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
p <- ggplot(data = df, aes(x = x, y = y, linetype = group)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
[2020-01-21] @Herman Puede ser un poco contraintuitivo a primera vista, pero para obtener una ecuación única cuando se usa la agrupación, uno debe seguir la gramática de los gráficos. Restrinja la asignación que crea la agrupación a capas individuales (que se muestra a continuación) o mantenga la asignación predeterminada y anúlela con un valor constante en la capa donde no desea la agrupación (por ejemplo colour = "black"
).
Continuando del ejemplo anterior.
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point(aes(colour = group))
p
[2020-01-22] En aras de la exhaustividad, un ejemplo con facetas, que demuestra que también en este caso se cumplen las expectativas de la gramática de los gráficos.
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point() +
facet_wrap(~group)
p
latticeExtra::lmlineq()
.