R Studio中Caret包数据拆分后glm()仍使用全量数据训练问题
问题根源
你拟合glm模型的公式写法存在逻辑冲突:
- 你在
glm()的data参数中指定了训练集Training,但公式中每个自变量都使用了dataset$x1的写法,这种全局调用全量数据集变量的写法优先级高于data参数的指定,所以模型最终读取的是全量dataset里的所有观测值。 - 额外注意:
caret包的数据拆分函数名是首字母小写的createDataPartition,如果你的代码运行时提示找不到函数,需要修正大小写。
解决方案
推荐写法
去掉公式里的dataset$前缀,直接写变量名,glm()会自动从你指定的Training数据集里读取对应变量:
glm(y ~ x1 + x2 + x3, family = binomial(link = "logit"), data = Training)
备选写法
如果需要显式指定变量所属的数据集,统一使用训练集名称即可,此时可以省略data参数:
glm(Training$y ~ Training$x1 + Training$x2 + Training$x3, family = binomial(link = "logit"))
效果验证
拟合完成后调用nobs(模型对象名)即可查看模型实际使用的训练样本量,确认数值和nrow(Training)的结果一致即可。
内容的提问来源于stack exchange,提问作者Renee Kaul
相关产品推荐
相关产品推荐

