如何从lm结果中获得RMSE?

时间:2017-03-30 16:27:43

标签: r regression linear-regression lm

我知道$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?

4 个答案:

答案 0 :(得分:16)

剩余的平方和:

RSS <- c(crossprod(res$residuals))

均方误差:

MSE <- RSS / length(res$residuals)

Root MSE:

RMSE <- sqrt(MSE)

Pearson估计剩余方差(由summary.lm返回):

sig2 <- RSS / res$df.residual

统计上,MSE是残差方差的最大似然估计,但是有偏差(向下)。 Pearson one是剩余方差的受限最大似然估计,它是无偏的。

<强>备注

  • 鉴于两个向量xyc(crossprod(x, y))相当于sum(x * y)much fasterc(crossprod(x))同样比sum(x ^ 2)快。
  • sum(x) / length(x)也是faster而不是mean(x)

答案 1 :(得分:6)

要只用base中的函数将RMSE放在一行中,我将使用:

sqrt(mean(res$residuals^2))

答案 2 :(得分:1)

我认为其他答案可能不正确。回归的MSE是SSE除以( n-k-1 ),其中 n 是数据点的数量, k 是模型参数的数量。

简单地将残差的平方取平均值(如其他答案所建议的)等效于除以 n 而不是( n-k-1 )。

我将通过sqrt(sum(res$residuals^2) / res$df)计算RMSE。

分母res$df中的数量为您提供了自由度,与( n-k-1 )相同。看一下以供参考:https://www3.nd.edu/~rwilliam/stats2/l02.pdf

答案 3 :(得分:0)

只需

sigma(res) 

你明白了