我有一个包含观察和建模数据的数据框,我想计算R2值。我希望有一个我可以为此调用的功能,但无法找到它。我知道我可以写自己的并应用它,但我错过了一些明显的东西吗?我想要像
这样的东西obs <- 1:5
mod <- c(0.8,2.4,2,3,4.8)
df <- data.frame(obs, mod)
R2 <- rsq(df)
# 0.85
答案 0 :(得分:10)
为什么不这样:
rsq <- function(x, y) summary(lm(y~x))$r.squared
rsq(obs, mod)
#[1] 0.8560185
答案 1 :(得分:5)
这不是显而易见的事,但caret
包有一个函数postResample()
,它将根据documentation计算“绩效估算的向量”。 “绩效估算”是
并且必须从像这样的矢量访问
library(caret)
vect1 <- c(1, 2, 3)
vect2 <- c(3, 2, 2)
res <- caret::postResample(vect1, vect2)
rsq <- res[2]
然而,正如另一个答案所述,这是使用r平方的相关平方近似。我不确定为什么Max Kuhn不仅仅使用传统的1-SSE / SST。
caret
也有R2()
方法,但在文档中很难找到。
实现正常coefficient of determination equation的方法是:
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
当然,手动编码也不错,但为什么在主要用于统计的语言中没有它的功能呢?我想我必须在某个地方错过R ^ 2的实现,或者没有人关心它来实现它。大多数实现like this one似乎都适用于广义线性模型。
答案 2 :(得分:3)
您还可以使用线性模型的摘要:
summary(lm(obs ~ mod, data=df))$r.squared
答案 3 :(得分:0)
这是基于[https://en.wikipedia.org/wiki/Coefficient_of_determination]
的最简单的解决方案# 1. 'Actual' and 'Predicted' data
df <- data.frame(
y_actual = c(1:5),
y_predicted = c(0.8, 2.4, 2, 3, 4.8))
# 2. R2 Score components
# 2.1. Average of actual data
avr_y_actual <- mean(df$y_actual)
# 2.2. Total sum of squares
ss_total <- sum((df$y_actual - avr_y_actual)^2)
# 2.3. Regression sum of squares
ss_regression <- sum((df$y_predicted - avr_y_actual)^2)
# 2.4. Residual sum of squares
ss_residuals <- sum((df$y_actual - df$y_predicted)^2)
# 3. R2 Score
r2 <- 1 - ss_residuals / ss_total
答案 4 :(得分:0)
不确定为什么不能直接在R中实现,但是这个答案与Andrii's和Wordsthethewise基本上相同,如果有人像我一样经常使用它,为了方便起见,我只是将其变成一个函数。
r2_general <-function(preds,actual){
return(1- sum((preds - actual) ^ 2)/sum((actual - mean(actual))^2))
}