R中的predict和glm.predict出错

时间:2013-11-05 18:00:45

标签: r types glm predict

问题

我在R中训练了一个线性回归来预测this.target city,数据框data中的变量。此trainig是在数据子集上完成的,由train.index指定。

model = glm('data[, this.target] ~ data$city', data = data, subset = train.index)

我正在尝试在保留的数据上测试此模型,该数据由test.index指定。

predictions = predict(model, data[test.index, ])

无论出于何种原因,第二步都会产生错误和警告。

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev =
object$xlevels) : invalid type (NULL) for variable 'data$city' In addition:
Warning message: 'newdata' had 22313 rows but variables found have 0 rows

我的分析

data$city是4级的因子,但似乎R将其读作“无效类型(NULL)”,即使此变量中的所有观察都不为NULL。

此外,似乎R正确读取行但不读取训练集的列。 dim(data[test.index, ])生成一个22313和12的向量。

2 个答案:

答案 0 :(得分:4)

感谢joran的评论,我能够找到解决问题的方法。乔兰指出,公式不应包括子集操作。

事实证明,这种子集允许模型拟合正常进行,但它导致模型预测与上述错误和警告一致。通过从我的公式定义中删除子集,模型拟合和预测都没有问题。

答案 1 :(得分:-1)

此解决方案适用于此错误,但不适用于主要问题,因为很难遵循。

解决方案是制作变量让我们说x; x=as.data.frame(testset)并将其传递给预测为

classifier = glm(formula = Survived ~ .,
                 family = binomial,
                 data = training_set)
x = as.data.frame(test_set)
prob_pred = predict(classifier, type = 'response', newdata =x)
y_pred = ifelse(prob_pred > 0.5, 1, 0)

预测测试集结果

在glm或rpart(基于决策树的分类库)中,测试集应该是数据框,有时预处理步骤会改变您的数据类型(您想要预测的数据)应该是数据框,如果是不是, 错误

  

model.frame.default中的错误(条款,newdata,na.action = na.action,   xlev = object $ xlevels):'data'必须是data.frame,而不是矩阵   或数组

会出现。