我刚开始学习R并处理有1470个案例的数据集。数据集的名称是ABC。使用as.factor,我将分类变量转换为因子。
Dept_1 <- as.factor(ABC$Dept)
Education_1 <- as.factor(ABC$Education)
BusinessTravel_1 <- as.factor(ABC$BusinessTravel)
之后我将数据集拆分为火车和测试。火车和测试数据的数据似乎都很完美。然后我使用glm函数使用下面的语法
fit = glm(attrition~Dept_1+Education_1+BusinessTravel_1,binomial(link="logit"),train)
拟合方程运行,但它在整个数据集ABC上执行,情况为1470,而不是1028条记录的训练数据集。
无法理解问题所在。
答案 0 :(得分:3)
执行此操作时:
Dept_1 <- as.factor(ABC$Dept)
Education_1 <- as.factor(ABC$Education)
BusinessTravel_1 <- as.factor(ABC$BusinessTravel)
您实际上在全局环境中创建了三个新变量,而不是原始数据框ABC
。因此,当您将ABC
分成训练和测试样本时,新变量不会受到影响。
当你适应模特时,你的glm
电话
fit = glm(attrition~Dept_1+Education_1+BusinessTravel_1,binomial(link="logit"),train)
将查找公式中列出的变量。它不会在train
数据集中找到它们,但它会在全局环境中找到它们。这就是为什么他们有原始长度。
你可能想要的是
ABC$Dept_1 <- as.factor(ABC$Dept)
ABC$Education_1 <- as.factor(ABC$Education)
ABC$BusinessTravel_1 <- as.factor(ABC$BusinessTravel)
将在数据框ABC
中创建变量。