R可视化嵌套横截面,用于带有分类变量和交互作用项的线性回归

时间:2018-11-25 18:48:10

标签: r ggplot2 data-visualization linear-regression lattice

我正在使用R和lm函数来拟合使用连续和类别确定变量以及其中一些变量之间的相互作用的多元线性回归。

为了可视化结果模型,我一直在使用visreg软件包(https://cran.r-project.org/web/packages/visreg/index.html)。该软件包允许参考手册中描述为“横截面”图的内容通过可选的“ by”参数按类别变量分别绘制响应。它还允许使用覆盖选项将这些分类响应的图覆盖到一个图中(请参见https://cran.r-project.org/web/packages/visreg/visreg.pdfhttps://web.as.uky.edu/statistics/users/pbreheny/publications/visreg.pdf)。

我要处理的三个关键变量是气孔导度(连续因变量),水分亏缺(连续自变量),树木种类和叶龄(独立分类变量)。这三个自变量之间都有相互作用项。

通过visreg软件包,我可以轻松地按物种绘制水分亏缺对gs的影响的横截面图,可以按年龄进行绘制,还可以选择在同一图上进行覆盖(见下文)。

图1:gs对物种水分亏缺的响应: Plot 1: gs response to water deficit by species

图2:根据叶龄对水分亏缺的gs响应: Plot 2: gs response to water deficit by leaf age

图3:通过叶龄对水分亏缺的gs响应,叠加在单个图上: Plot 3: gs response to water deficit by leaf age, overlay on single plot

但是,我需要做一些稍微复杂的事情。我需要做一个横截面的子横截面。换句话说,我想像图3一样绘制叶龄对缺水的影响,但按物种进行。因此,对于每种物种,将有一个单独的图显示水分亏缺与叶龄之间的相互作用,并覆盖每种物种的叶龄效应(“ o”和“ m”)。

使用visreg包可以吗?如果不是,那么R中以这种方式可视化模型的其他方法可能是什么?

2 个答案:

答案 0 :(得分:1)

很遗憾,margin-right:auto当前尚未实现;您可以执行以下操作来解决此问题,但这并不理想:

visreg

我同意,这对library(visreg) library(ggplot2) library(gridExtra) airquality$Rad <- cut(airquality$Solar.R, 3, labels=c('Low', 'Medium', 'High')) fit <- lm(Ozone ~ Wind*Temp*Rad, airquality) mf <- model.frame(fit) v1 <- subset(visreg(fit, 'Wind', 'Temp', cond=list(Rad='Low'), plot=FALSE), mf$Rad == 'Low') v2 <- subset(visreg(fit, 'Wind', 'Temp', cond=list(Rad='Medium'), plot=FALSE), mf$Rad == 'Medium') v3 <- subset(visreg(fit, 'Wind', 'Temp', cond=list(Rad='High'), plot=FALSE), mf$Rad == 'High') grid.arrange(plot(v1, gg=TRUE) + ggtitle("Solar Radiation: Low"), plot(v2, gg=TRUE) + ggtitle("Solar Radiation: Medium"), plot(v3, gg=TRUE) + ggtitle("Solar Radiation: High")) 是一个不错的改进,但是-我为此here提出了一个问题;希望在学期结束时去做。

答案 1 :(得分:0)

我可能会丢失一些东西,但是为什么不直接在ggplot中这样做呢?

  

如图3所示,绘制叶龄对缺水的影响,但按物种进行。因此,对于每种物种,将有一个单独的图来显示水分亏缺与叶龄的相互作用,并覆盖每种物种的叶龄效应(“ o”和“ m”)

ggplot(data, aes(x = CWD_mm,
                 y = ln_gs,
                 color = leaf_age)) +
    geom_point() +
    geom_smooth(method = "lm") +
    facet_wrap(~ species)