glm函数没有采用正确的数据集

时间:2016-11-21 13:26:57

标签: r glm

我刚开始学习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条记录的训练数据集。

无法理解问题所在。

1 个答案:

答案 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中创建变量。