如何从lm结果中获得RMSE?

问题描述 投票:6回答:3

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

r regression linear-regression lm
3个回答
17
投票

剩余的平方和:

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

均方误差:

MSE <- RSS / length(res$residuals)

根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)

6
投票

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

sqrt(mean(res$residuals^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

© www.soinside.com 2019 - 2024. All rights reserved.