使用predict()预测测试数据集中的响应变量

时间:2015-10-08 15:51:28

标签: r prediction predict

问题:应该使用什么样的代码来预测完全独立的测试数据集中的响应变量(不是从绘制了训练数据集的原始数据集中绘制的测试数据集)一个响应变量?

我被困在这两天,任何帮助都非常感谢!

我的训练集有100个观察值和27个变量。 “单位”是响应变量。测试集有6000个观察值和26个变量。我只显示两个数据集的一部分,以保持我的问题的长度可管理。

我正在使用ISLR和MASS包。

训练集:

age V1  V2  V3  V4  V5  V6  units
10  1    3   0   5   5   5   5828
7   4    5   4   4   1   2   2698
5   6    6   4   7   8  10   2578
4   4    5   4   4   1  3    2548
15  3    5   4   4   2  5    9922
5   2    4   4   5   1  3    6791

测试集:

age V1  V2  V3  V4  V5  V6
2   3   4   4   4   2   2
2   2   5   4   5   2   3
10  5   4   4   4   1   3
4   15  7   6   3   4   8
7   2   5   4   4   2   2
4   6   5   4   5   2   2
18  2   5   4   5   1   3
6   3   5   5   6   4   5

R代码:

library(ISLR)
library(MASS)

train = read.csv(".../train.csv", header = T)

train.pca = train[c(-27)]

pr.out = prcomp(train.pca, scale = TRUE, center = TRUE, retx = TRUE) # Conducting PCA  

plot(pr.out, type = 'l')

summary(pr.out)

pred.tr = predict(pr.out, newdata = train) # Predicting on the train data

dat.tr = cbind(train, pred.tr) # Appending PCA output to the train data

glm.fit.pca = glm(units ~ PC2 + PC3 + PC4 + PC5 + 
                      PC6 + PC7 + PC8 + PC9 + PC10 + 
                      PC11 + PC12 + PC13 + PC14 + PC15, 
                      data = dat.tr) # Conducting glm on train data with PCs

test = read.csv(".../test.csv", header = T) # Reading in test data

pred.test = predict(pr.out, newdata = test, type = "response") # Predicting 

# on test data. With this code, I get the following error message - "Error  
# in predict.prcomp(pr.out, newdata = y, type = "response") : 
# 'newdata' does not have named columns matching one or more of the original
# columns" I understand why because the test set doesn't have the response 
# variable

所以我尝试了以下内容:

pred.test = predict(pr.out, newdata = test) # This doesn't give me any error

dat.test = cbind(test_numr, pred.test) # Appending PCA output to test data

我不明白如何对测试数据进行测试,就像我对列车数据所做的那样,因为测试数据集没有响应变量(即“单位”)。我尝试在测试数据中初始化响应变量,方法是在测试数据集中添加响应变量:

dat.test$units = rep(0, nrow(dat.test)) 

现在,当我尝试在dat.test数据集上运行glm模型时,我得到全零。我可以理解为什么,但我不明白我应该对我的代码进行哪些更改以获得测试数据集的预测。

任何指导都非常感谢!谢谢!

编辑:我根据@csgillespie的评论再次编辑并运行了代码。我仍然有同样的问题。感谢您收到错误!

0 个答案:

没有答案