我建立了一个线性回归模型(lm.full
),我试图在测试数据集上测试模型。当我尝试根据测试数据进行预测时,由于具有许多唯一值的功能/预测器,我遇到了问题。麻烦的特征是cbsa(基于核心的统计区域)。
火车和测试具有相同的独特价值。我不确定问题是什么,因为如果因子变量的每个级别都适合训练模型,那么我认为我应该能够预测值测试。
我将这里的数据划分为测试和训练集:
sample.size<-floor(0.95*nrow(tvwm))
# Make sure that seeds different
set.seed(15)
tvwm_train_ind <- sample(seq_len(nrow(tvwm)), size = sample.size)
tvwm_train <- tvwm[tvwm_train_ind,]
tvwm_test <- tvwm[-tvwm_train_ind,]
以下是预测:
> predict(object=lm.full, newdata=tvwm_test, type = "response")
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
factor factor(cbsa_name) has new levels Boston-Cambridge-Newton, MA-NH, Detroit-Warren-Livonia, MI, Virginia Beach-Norfolk-Newport News, VA-NC
答案 0 :(得分:2)
尝试
all(levels(tvwm_test$cbsa_name) %in% levels(tvwm_train$cbsa_name))
all(levels(tvwm_train$cbsa_name) %in% levels(tvwm_test$cbsa_name))
并确保它们都是正确的。或者,正如格雷戈尔在评论中提到的那样,你可以在一个声明中做到:
identical(levels(tvwm_test$cbsa_name), levels(tvwm_train$cbsa_name))
如果它们都不是TRUE,并且您确定训练集和测试集在数据中具有相同的因子级别,则运行以下命令以重置级别:
tvwm_train$cbsa_name <- factor(tvwm_train$cbsa_name)
tvwm_test$cbsa_name <- factor(tvwm_test$cbsa_name)