计算RMSE使用拟合模型作为函数的输入而不是$残差

时间:2017-05-24 20:18:21

标签: r

我要做的是编写一个函数来计算拟合模型的RMSE,BIC和AIC:

fit_lm <- lm(rnorm(50) ~ rnorm(50, 4))
summary(fit_lm)

当我将拟合的模型传递给AIC()和BIC()时,我可以得到结果:

# BIC   
BIC(fit_lm)

# AIC
AIC(fit_lm)

# RMSE
rmse <- function(err) { 
          sqrt( mean ( err^2 ) ) 
        }

但在这里我必须通过$residual

rmse(fit_lm$residuals)

我应该怎么做才能让rmse结果只通过拟合的模型:

rmse(fit_lm) 

2 个答案:

答案 0 :(得分:1)

你可以简单地调整你的功能:

rmse <- function(mod) { 
          sqrt( mean ( mod$residuals^2 ) ) 
        }

答案 1 :(得分:0)

这是什么(一般化版本):

rmse <- function(mod, which = NULL)
{
    if (is.null(which)) which <- 1:length(residuals(mod))
        sqrt(mean(residuals(mod)[which]^2, na.rm = TRUE))
}

rmse(fit_lm)