R中glm用'-'排除变量后predict报错的原因解析
问题原因解析
核心差异源于R中公式的保存与解析逻辑:
- 用
Direction ~ . - Today - Year构建模型时,R仅在拟合阶段临时将.展开为Weekly数据集的所有变量,再移除Year和Today来计算模型系数,但模型对象中保存的公式仍然是~ . - Today - Year这个原始写法,并未自动展开为具体的变量列表。 - 调用
predict()函数时,R会在newdata的环境下重新解析这个公式:首先将.展开为newdata中的所有变量(即你选取的Lag1到Volume),接着执行- Today - Year的操作——此时会尝试查找Year变量,但newdata中并不包含该变量,因此抛出"找不到对象'Year'"的错误。 - 而手动指定变量的模型
logregall2,公式明确列出了所有需要用到的变量,predict()时直接在newdata中查找这些已存在的变量,不会触发对Year的查找操作,因此可以正常运行。
你可以通过以下代码验证两个模型的公式差异:
# 查看logregall的公式 formula(logregall) # 输出:Direction ~ . - Today - Year # 查看logregall2的公式 formula(logregall2) # 输出:Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume
内容的提问来源于stack exchange,提问作者jojorabbit
相关产品推荐
相关产品推荐

