Add regression line equation and R^2 on graph

后端 未结 9 2201
梦如初夏
梦如初夏 2020-11-21 07:24

I wonder how to add regression line equation and R^2 on the ggplot. My code is:

library(ggplot2)

df <- data.frame(x = c(1:100))
df$y <- 2         


        
9条回答
  •  -上瘾入骨i
    2020-11-21 07:48

    Another option would be to create a custom function generating the equation using dplyr and broom libraries:

    get_formula <- function(model) {
      
      broom::tidy(model)[, 1:2] %>%
        mutate(sign = ifelse(sign(estimate) == 1, ' + ', ' - ')) %>% #coeff signs
        mutate_if(is.numeric, ~ abs(round(., 2))) %>% #for improving formatting
        mutate(a = ifelse(term == '(Intercept)', paste0('y ~ ', estimate), paste0(sign, estimate, ' * ', term))) %>%
        summarise(formula = paste(a, collapse = '')) %>%
        as.character
      
    }
    
    lm(y ~ x, data = df) -> model
    get_formula(model)
    #"y ~ 6.22 + 3.16 * x"
    
    scales::percent(summary(model)$r.squared, accuracy = 0.01) -> r_squared
    

    Now we need to add the text to the plot:

    p + 
      geom_text(x = 20, y = 300,
                label = get_formula(model),
                color = 'red') +
      geom_text(x = 20, y = 285,
                label = r_squared,
                color = 'blue')
    

提交回复
热议问题