2016-12-01 94 views
4

我有一个数据帧与观察和建模的数据,我想计算R2值。我希望有一个功能,我可以打电话给这个,但无法找到一个。我知道我可以写我自己的,并应用它,但我错过了明显的东西?我想要类似函数来计算R中的R(R平方)

obs <- 1:5 
mod <- c(0.8,2.4,2,3,4.8) 
df <- data.frame(obs, mod) 

R2 <- rsq(df) 
# 0.85 
+1

而不可避免的 - “调整后的R^2呢?”问题在这里解决 - http://stats.stackexchange.com/questions/48703/what-is-the-adjusted-r-squared-formula-in-lm-in-r-and-how-should-it-be -interpret – thelatemail

+0

您可能需要指定如何创建此“建模数据”。 r.squared由与回归函数相关的汇总函数报告。但只有当这样一个估计是有统计学意义的。 –

+0

我有几种不同的模型,但它不仅仅是像lm这样的回归模型的输出,所以汇总函数不起作用。基本上我需要能够在两个向量之间进行比较(李哲源的建议完全适用于此) –

回答

8

您需要一点统计知识才能看到此内容。两个向量之间的R平方就是它们相关的平方。所以,你可以定义你的功能为:

rsq <- function (x, y) cor(x, y)^2 
+0

有一些假设必须满足才能成立:http://www.win-vector.com/blog/2011/11/correlation-and-r-squared/ 我想将它用于KNN,但我不确定这些假设是否成立。将不得不检查这是否实际上与传统计算相同R^2 – wordsforthewise

+0

来自相关^ 2方法和传统1-SSE/SST的答案不相同。在我使用的例子中,我从正常的r^2方程获得了来自corr^2和'0.7531449'的'0.756388'。虽然差别很小,但它仍然可以用来模拟超参数选择等。 – wordsforthewise

3

为什么不这样:

rsq <- function(x, y) summary(lm(y~x))$r.squared 
rsq(obs, mod) 
#[1] 0.8560185 
1

它是不是很明显,但caret封装具有功能postResample(),将计算“的表现估计向量”根据documentation。 “业绩预测” 是

  • RMSE
  • Rsquared
  • 平均绝对误差(MAE)

,并从向量这样

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

但是访问,这是使用另一个答案中提到的r平方的相关平方近似。为什么他们不使用传统的1-SSE/SST超出了我的想象。

实现正常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的实现。