2016-12-01 17 views
4

私は、観測データとモデル化データを持つデータフレームを持っています.R2値を計算したいと思います。私はこれを呼び出すことができる機能があると思ったが、それを見つけることはできない。私は自分自身を書くことができ、それを適用することができますが、私は何か明白なものを逃していますか?私は何かが欲しい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は、回帰関数に関連するサマリー関数によって報告されます。しかし、そのようなestiamteがstatsitically正当化されるときだけ。 –

+0

私はいくつかの異なるモデルを持っていますが、単純にlmのような回帰モデルの出力ではないので、サマリー関数は機能しません。基本的に私は2つのベクトルの間で比較できるようにする必要があります(Zheyuan Liの提案はこれに対して完全に機能します) –

答えて

8

これを見るには少し統計的な知識が必要です。 2つのベクトルの間の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からの答えは同じではありません。私が使用している例では、corr^2から '0.756388'、通常のr^2方程式から' 0.7531449'を得ました。小さな差ですが、それでもハイパーパラメータの選択などをモデル化するかもしれません – 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を使っていないのですか?

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 

ないもちろんの手でコードにあまりにも悪いが、なぜ主に統計のために作られた言語で、それのための機能がありません。

が通常coefficient of determination equationを実装する方法はありますか?私はまだどこかでR^2の実装が欠けていると思っています。