簡體   English   中英

R中的ggplot:在繪圖中添加回歸方程

[英]ggplot in R: add regression equation in a plot

不久前,我從傑登(Jayden)看到了關於將回歸方程添加到繪圖中的答案,我發現它非常有用。 但是我不想顯示R ^ 2,因此我將代碼更改為:

lm_eqn = function(m) {
l <- list(a = format(coef(m)[1], digits = 2),
  b = format(abs(coef(m)[2]), digits = 2));
if (coef(m)[2] >= 0)  {
eq <- substitute(italic(y) == a + b %.% italic(x))
} else {
eq <- substitute(italic(y) == a - b %.% italic(x))    
}
as.character(as.expression(eq));                 
}

這設法將“ a + bx”或“ a-bx”繪制到該圖上,但沒有實際系數替換a和b。 有人知道如何解決該問題嗎? 非常感謝!

傑登的答案:

 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));                 
 }

看來您缺少了l substitute()l 也就是說,使用substitute(yourFormula, l) 這是一個不帶r^2的MWE,它與您正在查看的MWE相似(我認為這是在圖上添加回歸線方程和R2 )。

library(ggplot2)

# Function to generate correlated data.
GenCorrData = function(mu, Sig, n = 1000) {
  U            <- chol(Sig)
  Z            <- matrix(rnorm(n*length(mu)), nrow = length(mu))
  Y            <- crossprod(U,Z) + mu
  Y            <- as.data.frame(t(Y))
  names(Y)     <- c("x", "y")
  return(Y)
}

# Function to add text
LinEqn = function(m) {
  l <- list(a = format(coef(m)[1], digits = 2),
            b = format(abs(coef(m)[2]), digits = 2));
  if (coef(m)[2] >= 0) {
    eq <- substitute(italic(y) == a + b %.% italic(x),l)
  } else {
    eq <- substitute(italic(y) == a - b %.% italic(x),l)    
  }
  as.character(as.expression(eq));                 
}

# Example
set.seed(700)
n1             <- 1000
mu1            <- c(4, 5)
Sig1           <- matrix(c(1, .8, .8, 1), nrow = length(mu1))
df1            <- GenCorrData(mu1, Sig1, n1)
scatter1       <- ggplot(data = df1, aes(x, y)) +
                    geom_point(shape = 21, color = "blue", size = 3.5) +
                    scale_x_continuous(expand = c(0, 0), limits = c(0, 8)) +
                    scale_y_continuous(expand = c(0, 0), limits = c(0, 8))
scatter.line1  <- scatter1 + 
                    geom_smooth(method = "lm", formula = y ~ x, se = FALSE, 
                                color="black", size = 1) +
                    annotate("text", x = 2, y = 7, color = "black", size = 5,
                             label = LinEqn(lm(y ~ x, df1)), parse = TRUE)
scatter.line1

回歸方程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM