raggregate-functionssummarize

Aggregating rmse and r2 in r


Here is a sample data as data2:

 lvl   x  y
  0 20.099 21.2
100 21.133 21.4
250 20.866 21.6
500 22.679 21.8
750 22.737 22.1
  0 30.396 32.0
100 31.373 32.1
250 31.303 32.2
500 33.984 32.8
750 44.563 38.0
  0 22.755 18.5
100 23.194 18.8
250 23.263 20.5
500 23.061 27.9
750 25.678 36.4

I tried to get the rmse and r2 for each level (lvl) by the following lines of codes:

data2 %>% group_by(lvl) %>% summarise_each(funs(rmse(data2$x~data2$y)))

and

summary(lm(data2$x,data2$y))$r.squared

respectively, and I got the following error message when calculating rmse:

Error: argument "obs" is missing, with no default

and

# A tibble: 5 x 3
    lvl         x         y
  <int>     <dbl>     <dbl>
1     0 0.6639888 0.6639888
2   100 0.6639888 0.6639888
3   250 0.6639888 0.6639888
4   500 0.6639888 0.6639888
5   750 0.6639888 0.6639888

when calculating r2.

I wanted to aggregate the rmse and r2 for each level. In this case, I have only 5 levels. So the answer will look like 5 rows X 3 columns with column names `"lvl", "rmse", "r2" Thank you in advance.


Solution

  • You don't need summarise_each summarise will do what you want. If you prefer using dplyr here is a solution

    data2 <-
    data.frame(
      lvl = c(  0, 100, 250, 500, 750, 0, 100, 250, 500, 750, 0, 100, 250, 500, 750)
      ,x = c(
        20.099, 21.133, 20.866, 22.679, 22.737, 30.396, 31.373, 31.303, 33.984, 44.563, 22.755, 23.194, 23.263, 23.061, 25.678
      )
      ,y = c(21.2, 21.4, 21.6, 21.8, 22.1, 32.0, 32.1, 32.2, 32.8, 38.0, 18.5, 18.8, 20.5, 27.9, 36.4)
    )
    
    #install.packages("ModelMetrics")
    library(ModelMetrics)
    
    data2 %>%
      group_by(lvl) %>%
      summarise(
        RMSE = rmse(x, y)
        ,R2 = cor(x, y)^2
      )
    
    ## A tibble: 5 × 3
    #    lvl     RMSE        R2
    #  <dbl>    <dbl>     <dbl>
    #1     0 2.701237 0.8176712
    #2   100 2.575982 0.8645350
    #3   250 1.729888 0.9091029
    #4   500 2.920640 0.7207692
    #5   750 7.267279 0.4542507