Ho incluso una statistica stat_poly_eq()
nel mio pacchetto ggpmisc
che consente questa risposta:
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
Questa statistica funziona con qualsiasi polinomio senza termini mancanti e si spera abbia abbastanza flessibilità per essere generalmente utile. Le etichette R ^ 2 o R ^ 2 regolate possono essere utilizzate con qualsiasi formula di modello dotata di lm (). Essendo una statistica ggplot si comporta come previsto sia con gruppi che con sfaccettature.
Il pacchetto 'ggpmisc' è disponibile tramite CRAN.
La versione 0.2.6 è stata appena accettata da CRAN.
Risponde ai commenti di @shabbychef e @ MYaseen208.
@ MYaseen208 questo mostra come aggiungere un cappello .
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 Ora è possibile abbinare le variabili dell'equazione a quelle utilizzate per le etichette degli assi. Per sostituire la x con dire z e y con h si potrebbe usare:
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
Essendo queste normali espressioni R analizzate, le lettere greche ora possono anche essere usate sia nell'ls che nel rhs dell'equazione.
[2017-03-08] @elarry Modifica per rispondere in modo più preciso alla domanda originale, mostrando come aggiungere una virgola tra le etichette di equazione e 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
[20-10-2019] @ helen.h fornisco di seguito alcuni esempi di utilizzo stat_poly_eq()
con il raggruppamento.
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 Potrebbe essere un po 'controintuitivo a prima vista, ma per ottenere una singola equazione quando si utilizza il raggruppamento è necessario seguire la grammatica della grafica. Limitare la mappatura che crea il raggruppamento su singoli livelli (mostrato di seguito) o mantenere la mappatura predefinita e sovrascriverla con un valore costante nel livello in cui non si desidera il raggruppamento (ad es.colour = "black"
.).
Continuando dall'esempio precedente.
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] Per completezza un esempio di sfaccettature, dimostrando che anche in questo caso sono soddisfatte le aspettative della grammatica della grafica.
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()
.