首页 > 解决方案 > R 使用分类变量和交互项对线性回归的嵌套横截面进行可视化

问题描述

我正在使用 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 对不同物种缺水的反应: 图 1:gs 对不同物种缺水的反应

图 2:gs 对叶龄水分亏缺的反应: 图 2:gs 对叶龄水分亏缺的反应

图 3:gs 对叶龄水分亏缺的响应,叠加在单个图上: 图 3:gs 对叶龄水分亏缺的响应,叠加在单个图上

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

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

标签: rggplot2data-visualizationlinear-regressionlattice

解决方案


不幸的是,这目前没有在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"))

不过,我同意这将是一个很好的改进visreg——我已经在这里打开了一个问题;希望学期结束时能拿到。


推荐阅读