如何在R中手动创建rq类对象以正常调用predict预测函数
手动创建rq类可预测对象的方法
你可以按照以下步骤构建符合predict调用要求的rq类对象,不需要保留拟合过程生成的冗余字段:
- 构造带命名的系数字段,直接生成numeric类型即可,避免后续额外修改类属性:
coefs <- c("(Intercept)" = 81.48225, "income" = 0.5601806)
- 生成符合要求的terms对象:不要直接使用原始公式,调用
terms()函数处理拟合用的公式,会自动补全predict方法需要的所有元属性:
# 传入和拟合时一致的公式和原始数据集,保证属性匹配 terms_obj <- terms(foodexp ~ income, data = engel)
- 组装对象并设置类属性:
mymdl <- list( coefficients = coefs, terms = terms_obj ) class(mymdl) <- "rq"
完成后直接调用predict(mymdl, newdata = engel2)就可以正常输出预测结果。
手动修改terms类属性后输出NA的原因
rq()函数返回的mdl$terms不是普通的formula对象,而是经过处理的terms类对象,除了公式本身之外,还附带了变量环境、变量类型、预测变量定义等十多个隐含属性,这些属性是predict.rq方法内部提取newdata对应字段、生成预测矩阵的必要信息。
你直接给普通formula对象reg_formula强行修改类为terms类,本质是给一个结构不完整的对象套了个类标识,隐含属性全部缺失,predict.rq内部调用model.matrix生成自变量矩阵时无法匹配到newdata里的income字段,生成的矩阵全是缺失值,和系数相乘后自然就输出全量NA。
你可以运行str(mdl$terms)和str(reg_formula)对比两者的结构差异,就能直接看到属性缺失的情况。
内容的提问来源于stack exchange,提问作者glaucon
相关产品推荐
相关产品推荐

