如何构建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
相关产品推荐
相关产品推荐

