2016-12-01 91 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的實現。