web-dev-qa-db-ja.com

lmeの結果からRMSEを取得する方法は?

$sigma二乗平均平方根誤差の概念にはわずかな違いがあることは知っています。したがって、_[〜#〜] r [〜#〜]lm関数からRMSEを取得する最も簡単な方法は何ですか?

res<-lm(randomData$price ~randomData$carat+
                     randomData$cut+randomData$color+
                     randomData$clarity+randomData$depth+
                     randomData$table+randomData$x+
                     randomData$y+randomData$z)

length(coefficients(res))

には24個の係数が含まれており、手動でモデルを作成することはできなくなりました。では、lmから導出された係数に基づいてRMSEを評価するにはどうすればよいですか?

11
Jeff

残差平方和:

_RSS <- c(crossprod(res$residuals))
_

平均二乗誤差:

_MSE <- RSS / length(res$residuals)
_

ルートMSE:

_RMSE <- sqrt(MSE)
_

ピアソンは、残差分散を推定しました(_summary.lm_によって返されます):

_sig2 <- RSS / res$df.residual
_

統計的に、MSEは残差分散の最尤推定量ですが、バイアスされています(下向き)。ピアソンのものは、偏りのない残差分散の制限付き最尤推定量です。


備考

  • 2つのベクトルxyが与えられた場合、c(crossprod(x, y))sum(x * y)と同等ですが、 はるかに高速 です。 c(crossprod(x))sum(x ^ 2)より高速です。
  • sum(x) / length(x)mean(x)より 速い です。
19
李哲源

RMSEを1行で取得するには、baseの関数のみを使用して、次のようにします。

sqrt(mean(res$residuals^2))
10
comshak

他の答えは間違っているかもしれません。回帰のMSEは、SSEを(n-k-1)で割ったものです。ここでnはデータポイントの数であり、 kはモデルパラメータの数です。

(他の回答が示唆しているように)残差の二乗の平均を取ることは、(n-k-1)ではなくnで除算することと同じです。

RMSEはsqrt(sum(res$residuals^2) / res$df)で計算します。

分母の数量res$dfは自由度を与えます。これは(n-k-1)と同じです。参照のためにこれを見てください: https://www3.nd.edu/~rwilliam/stats2/l02.pdf

1
Arthur

するだけ

sigma(res) 

あなたはそれを手に入れました

0
JF Collin