2014-11-24 4 views
1

얼마 전 Jayden이 회귀 방정식을 플롯에 추가하는 것을 보았습니다. 매우 유용하다고 생각했습니다. 하지만 R^2을 표시하지 않기 때문에 나는이에 코드를 조금 변경 :ggplot in R : 회귀 방정식을 플롯에 추가

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를 대체하는 실제 계수. 누구든지 문제를 해결하는 방법을 알고 있습니까? 매우 감사합니다!

재이든의 대답은 : 당신이 substitute()에서 l 누락처럼

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

답변

2

것 같습니다. 즉, substitute(yourFormula, l)을 사용하십시오. 여기에 r^2이없는 MWE가 있습니다.이 MWE는 여러분이보고있는 것과 같습니다 (나는 생각합니다) (Adding Regression Line Equation and R2 on graph).

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 

Regression equation

+0

감사합니다. 1을 추가했지만 다음과 같은 오류 메시지가 나타납니다. 대체 오류 (기울임 꼴 (y) == a - b %. 기울임 꼴 (x), 1) : 잘못된 환경이 지정되었습니다. 이 문제를 어떻게 해결할 수 있습니까? – Bearbear

+0

@Bearbear,'substitute()'는리스트의 이름을 두번째 인자로 찾는다. '1'이 아니라'l'이라고 부르지 않았습니까? –

+0

W, 숫자 "1"로 "l"을 쓰면서 실수를했습니다. 이제 작동합니다, 정말 고마워요. – Bearbear