mtext - r y axis scale




Regressionsgeradengleichung und R2 im Diagramm hinzufügen (3)

Hier ist eine Lösung

# GET EQUATION AND R-SQUARED AS STRING
# SOURCE: http://goo.gl/K4yh

lm_eqn <- function(df){
    m <- lm(y ~ x, df);
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
         list(a = format(coef(m)[1], digits = 2), 
              b = format(coef(m)[2], digits = 2), 
             r2 = format(summary(m)$r.squared, digits = 3)))
    as.character(as.expression(eq));                 
}

p1 <- p + geom_text(x = 25, y = 300, label = lm_eqn(df), parse = TRUE)

BEARBEITEN. Ich habe herausgefunden, woher ich diesen Code genommen habe. Hier ist der link zum ursprünglichen Post in den Google Groups ggplot2

Ich frage mich, wie man die Regressionsgeradengleichung und R ^ 2 auf dem ggplot . Mein Code ist

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.


Ich habe Ramnaths Beitrag geändert, um a) generischer zu machen, so dass es ein lineares Modell als Parameter anstelle des Datenrahmens akzeptiert und b) Negative angemessener anzeigt.

lm_eqn = function(m) {

  l <- list(a = format(coef(m)[1], digits = 2),
      b = format(abs(coef(m)[2]), digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));

  if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) == a - b %.% italic(x)*","~~italic(r)^2~"="~r2,l)    
  }

  as.character(as.expression(eq));                 
}

Die Verwendung würde sich ändern in:

p1 = p + geom_text(aes(x = 25, y = 300, label = lm_eqn(lm(y ~ x, df))), parse = TRUE)

Ich habe eine Statistik stat_poly_eq() in mein Paket ggpmisc , die diese Antwort erlaubt:

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

Diese Statistik funktioniert mit jedem Polynom ohne fehlende Terme und hat hoffentlich genug Flexibilität, um allgemein nützlich zu sein. Die Label R ^ 2 oder adjusted R ^ 2 können mit jeder Modellformel verwendet werden, die mit lm () ausgestattet ist. Da es sich um eine ggplot-Statistik handelt, verhält es sich wie erwartet sowohl mit Gruppen als auch mit Facetten.

Das Paket 'ggpmisc' ist über CRAN verfügbar.

Version 0.2.6 wurde gerade in CRAN akzeptiert.

Es adressiert Kommentare von @shabbychef und @ MYaseen208.

@ MYaseen208 zeigt, wie ein Hut hinzugefügt wird.

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 Jetzt ist es möglich, die Variablen in der Gleichung mit denen für die Achsenbeschriftungen zu vergleichen. Um das x durch sagen z und y mit h zu ersetzen, würde man verwenden:

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

Da diese normalen R-geparsten Ausdrücke griechische Buchstaben sind, können sie nun auch in den lhs und rhs der Gleichung verwendet werden.

[2017-03-08] @elarry Edit, um die ursprüngliche Frage präziser zu adressieren und zu zeigen, wie man ein Komma zwischen die Formel- und R2-Label fügt.

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





ggpmisc