You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建newdata以使用训练好的GLM模型进行预测?

构建用于glm预测的newdata数据框

嘿,要让predict()正常工作,newdata的结构必须和你训练模型用的loan_data完全匹配——变量名要一致,类型要对应,尤其是因子变量的水平得和原数据一模一样,不然要么报错,要么预测结果不对。下面给你两种靠谱的构建方法:

方法1:手动构造数据框(适合明确知道因子水平的情况)

直接用data.frame()创建,注意把因子变量的所有水平都列出来(和原数据一致),避免只写当前值导致类型不匹配:

# 构建符合要求的新数据框
newdata <- data.frame(
  loan_amnt = 4200,
  # grade的水平要和原数据一致:A到G
  grade = factor("C", levels = c("A", "B", "C", "D", "E", "F", "G")),
  # home_ownership的4个水平,按原数据顺序填全
  home_ownership = factor("MORTGAGE", levels = c("MORTGAGE", "OTHER", "OWN", "RENT")),
  annual_inc = 32500,
  age = 31,
  # ir_cat的5个水平,对应原数据的因子顺序
  ir_cat = factor("0-8", levels = c("0-8", "11-13.5", "8-10", "10-11", "13.5+")),
  # emp_cat的5个水平,按原数据顺序填写
  emp_cat = factor("0-15", levels = c("0-15", "15-30", "30-45", "45-60", "60+"))
)

方法2:基于原数据模板修改(更稳妥,避免手动写水平出错)

从原数据里随便取一行作为模板,直接修改对应的值——这样会自动继承原数据所有变量的类型和因子水平,完全不用操心匹配问题:

# 从原数据取一行当模板(这里取第一行,任意行都可以)
newdata <- loan_data[1, ]

# 逐个修改变量的值
newdata$loan_amnt <- 4200
newdata$grade <- "C"       # 因为已经是因子,直接赋值合法水平就行
newdata$home_ownership <- "MORTGAGE"
newdata$annual_inc <- 32500
newdata$age <- 31
newdata$ir_cat <- "0-8"
newdata$emp_cat <- "0-15"

# 注:原模板里的loan_status不用管,predict时模型会自动忽略它(毕竟是因变量)

最后运行预测

构造好newdata之后,直接用你计划的代码就行:

predict(glm1, newdata, type = "response")

几个关键注意点

  • 变量名必须和原数据完全一致,比如不能把loan_amnt写成loan_amount
  • 因子变量的取值必须是原数据中存在的水平,比如grade不能写"H",否则会报错
  • 数值变量直接赋值数字即可,不需要额外处理

内容的提问来源于stack exchange,提问作者Nikola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:41:28