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

glm function not taking correct dataset

我刚刚开始学习 R 并处理包含 1470 个案例的数据集。数据集的名称是 ABC。使用 as.factor,我已将分类变量转换为因子。

Dept_1 <- as.factor(ABC$Dept)
Education_1 <- as.factor(ABC$Education)
BusinessTravel_1 <- as.factor(ABC$BusinessTravel)

之后,我将数据集拆分为火车,test.Number 火车和测试数据的案例似乎很完美。然后我使用 glm 函数使用下面的语法

fit = glm(attrition~Dept_1+Education_1+BusinessTravel_1,binomial(link="logit"),train)

拟合方程会运行,但它会在包含 1470 个案例的整个数据集 ABC 上执行,而不是在包含 1028 条记录的训练数据集上执行。

无法理解问题所在。

当你这样做时:

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