如何从 lm 结果中获得 RMSE?

How to obtain RMSE out of lm result?

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

残差平方和:

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

均方误差:

MSE <- RSS / length(res$residuals)

根 MSE:

RMSE <- sqrt(MSE)

Pearson 估计残差(由 summary.lm 返回):

sig2 <- RSS / res$df.residual

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


备注

  • 给定两个向量 xyc(crossprod(x, y)) 等价于 sum(x * y)c(crossprod(x)) 同样比 sum(x ^ 2) 快。
  • sum(x) / length(x) 也比 mean(x).
  • faster

要仅使用 base 中的函数在一行中获得 RMSE,我将使用:

sqrt(mean(res$residuals^2))

我认为其他答案可能不正确。回归的 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

就这样

sigma(res) 

你明白了

检查 Metrics

中的 rmse() 函数