R fmodel()可以使用的变量数量

1yjd4xko  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(152)

对于函数:fmodel(model_object,~x_var + color_var + facet_var)是否可以可视化包含附加变量的模型?
使用3个变量,创建图表没有问题:

install.packages('statisticalModeling')
library(statisticalModeling)

mod1 <- lm(wage ~ age + sex + sector, data = mosaicData::CPS85)
fmodel(mod1, ~ age + sex + sector)

有5个变量时,只有前4个变量包含在图形中,这是这个函数允许的最大值吗?有没有办法画出所有5个变量的图形?

mod1 <- lm(wage ~ age + sex + sector + married + educ, data = mosaicData::CPS85)
fmodel(mod1, ~ age + sex + sector + married + educ)

我曾尝试通过为第5个解释变量定义特定值来"强制"显示最后一个变量,结果输出看起来很奇怪。

mod1 <- lm(wage ~ age + sex + sector + married + educ, data = mosaicData::CPS85)
fmodel(mod1, ~ age + sex + sector + married + educ,
       educ = c(10, 12, 16))

7eumitmz

7eumitmz1#

这里有三个主要的问题。第一个是statisticalModeling软件包已经不在CRAN上了,并且存档版本似乎是在6年前更新的。因此,它可能与ggplot存在一些兼容性问题,ggplot从那时起已经进行了广泛的更新。
第二个原因是,与许多ggplot Package 器一样,fmodel旨在简化ggplot的创建,但您在易用性方面获得的好处却失去了自定义绘图或生成不属于设计规范一部分的绘图的能力。在这些情况下,通常最好自己处理数据并直接使用ggplot绘图。
第三个(也是最重要的)问题是,你的情节已经包含了很多信息,再添加一个美学Map会使情况变得更糟。
综上所述,如果你真的想制作一个图来展示5个不同的预测变量在所有可能值下的影响,你可以这样做:

library(ggplot2)

mod1 <- lm(wage ~ age + sex + sector + married + educ, data = mosaicData::CPS85)

pred_df <- with(mosaicData::CPS85, 
                expand.grid(age     = unique(age),
                            sector  = unique(sector),
                            married = unique(married),
                            sex     = unique(sex),
                            educ    = unique(educ)))

pred_df$wage <- predict(mod1, pred_df)

ggplot(pred_df, aes(age, wage, linetype = sex, color = educ, 
                    group = interaction(educ, sex))) +
  geom_line() +
  facet_grid(sector ~ married) +
  scale_color_viridis_c() +
  theme_bw(base_size = 16)

您可以看到为什么statisticalModrling包的作者没有添加这个功能,从数据可视化的Angular 来看,这是一个非常糟糕的图。

相关问题