R语言fmodel()函数多变量模型可视化上限及解决方案问询
关于statisticalModeling包fmodel()函数多变量可视化的问题
fmodel()函数的可视化变量上限确实是4个。从函数设计逻辑来看,它仅支持通过x轴变量+颜色区分变量+最多两个分面变量的维度组合来呈现模型,总计最多映射4个解释变量,超出的变量会被自动忽略,这就是你用5个变量时仅显示前4个的原因。
可视化全部5个变量的可行方案
1. 分批次生成不同变量组合的可视化
将5个变量拆分为多组4变量组合,分别调用fmodel()生成图形,通过多图互补覆盖所有变量的影响:
library(statisticalModeling) mod1 <- lm(wage ~ age + sex + sector + married + educ, data = mosaicData::CPS85) # 组合1:age(x轴)+ sex(颜色)+ sector(分面)+ educ(分面) fmodel(mod1, ~ age + sex + sector + educ) # 组合2:age(x轴)+ sex(颜色)+ married(分面)+ educ(分面) fmodel(mod1, ~ age + sex + married + educ)
2. 用model_eval()生成预测数据,配合ggplot2自定义可视化
借助同包的model_eval()生成包含所有变量预测值的数据集,再用ggplot2手动控制变量映射逻辑,实现全变量可视化:
library(ggplot2) # 生成覆盖所有变量的预测数据集 pred_data <- model_eval(mod1, age = seq(min(mosaicData::CPS85$age), max(mosaicData::CPS85$age), length.out=50), sex = unique(mosaicData::CPS85$sex), sector = unique(mosaicData::CPS85$sector), married = unique(mosaicData::CPS85$married), educ = c(10,12,16)) # 自定义绘图:将educ作为额外分面维度 ggplot(pred_data, aes(x=age, y=wage, color=sex)) + geom_line() + facet_grid(sector ~ married + educ) + theme_bw()
你之前直接指定educ取值却得到异常结果,是因为fmodel()不支持同时映射5个变量到可视化维度,强行传入额外变量取值会打乱函数内部的维度映射逻辑,导致图形异常。
内容的提问来源于stack exchange,提问作者somewhat_confused
相关产品推荐
相关产品推荐

