我已将Boston数据集拆分为训练和测试集,如下所示:
library(MASS)
smp_size <- floor(.7 * nrow(Boston))
set.seed(133)
train_boston <- sample(seq_len(nrow(Boston)), size = smp_size)
train_ind <- sample(seq_len(nrow(Boston)), size = smp_size)
train_boston <- Boston[train_ind, ]
test_boston <- Boston[-train_ind,]
nrow(train_boston)
# [1] 354
nrow(test_boston)
# [1] 152
现在我使用lm函数获取RSE,如下所示:
train_boston.lm <- lm(lstat~medv, train_boston)
summary(train_boston.lm)
summary(train_boston.lm)$sigma
如何计算测试数据集的残差标准误差?我不能在测试数据集上使用lm函数。有没有方法可以在测试数据集上计算RSE?
答案 0 :(得分:2)
此处您的残差标准误差与
相同summary(train_boston.lm)$sigma
# [1] 4.73988
sqrt(sum((fitted(train_boston.lm)-train_boston$lstat)^2)/
(nrow(train_boston)-2))
# [1] 4.73988
你松了估计两个参数,所以你的自由度是n-2
使用您的测试数据,您实际上并没有进行相同的估算,但是如果您想计算相同类型的计算,则将模型中的预测值替换为原始模型中拟合值的新数据,你可以做到
sqrt(sum((predict(train_boston.lm, test_boston)-test_boston$lstat)^2)/
(nrow(test_boston)-2))
虽然计算预测残差的标准差可能更有意义
sd(predict(train_boston.lm, test_boston)-test_boston$lstat)