我知道$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?
答案 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是剩余方差的受限最大似然估计,它是无偏的。
<强>备注强>
x
和y
,c(crossprod(x, y))
相当于sum(x * y)
但much faster。 c(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)
你明白了