Function to calculate R2 (R-squared) in R

前端 未结 6 776
悲&欢浪女
悲&欢浪女 2020-11-27 15:59

I have a dataframe with observed and modelled data, and I would like to calculate the R2 value. I expected there to be a function I could call for this, but can\'t locate o

6条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 16:43

    It is not something obvious, but the caret package has a function postResample() that will calculate "A vector of performance estimates" according to the documentation. The "performance estimates" are

    • RMSE
    • Rsquared
    • mean absolute error (MAE)

    and have to be accessed from the vector like this

    library(caret)
    vect1 <- c(1, 2, 3)
    vect2 <- c(3, 2, 2)
    res <- caret::postResample(vect1, vect2)
    rsq <- res[2]
    

    However, this is using the correlation squared approximation for r-squared as mentioned in another answer. I'm not sure why Max Kuhn didn't just use the conventional 1-SSE/SST.

    caret also has an R2() method, although it's hard to find in the documentation.

    The way to implement the normal coefficient of determination equation is:

    preds <- c(1, 2, 3)
    actual <- c(2, 2, 4)
    rss <- sum((preds - actual) ^ 2)
    tss <- sum((actual - mean(actual)) ^ 2)
    rsq <- 1 - rss/tss
    

    Not too bad to code by hand of course, but why isn't there a function for it in a language primarily made for statistics? I'm thinking I must be missing the implementation of R^2 somewhere, or no one cares enough about it to implement it. Most of the implementations, like this one, seem to be for generalized linear models.

提交回复
热议问题