我知道$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 one是残差方差的受限最大似然估计,它是无偏的。
备注
x
和y
,c(crossprod(x, y))
相当于sum(x * y)
但much faster。 c(crossprod(x))
同样比sum(x ^ 2)
更快。sum(x) / length(x)
也是faster而不是mean(x)
。要使用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