在进行回归建模时,为模型中的解释变量生成附加变量图很有用,以检查与响应变量的假定关系是否适合数据。avPlotsincar包中的函数R接受模型输入,并使用基本图形系统生成添加变量图的网格。这个函数对用户非常友好,只要你需要做的就是将模型对象作为参数放入,它会自动为每个解释变量生成所有添加的变量图。这个绘图矩阵包含所有需要的信息,但不幸的是,绘图看起来很糟糕,因为它使用基本图形系统而不是ggplot2包裹。例如,使用此处找到的数据(作为文件下载Trucking.csv)此处是该avPlots函数的输出。
#Load required libraries
library(car);
#Import data, fit model, and show AV plots
DATA <- read.csv('Trucking.csv');
MODEL <- lm(log(PRICPTM) ~ DISTANCE + PCTLOAD + ORIGIN + MARKET + DEREG + PRODUCT,
data = DATA);
avPlots(MODEL);
Run Code Online (Sandbox Code Playgroud)
问题:是否有等效函数ggplot2可以为模型生成每个添加变量图的矩阵,但具有“更漂亮”的图?是否可以生成这些图,然后使用标准ggplot语法自定义它们?
我不知道任何使用ggplot. 但是,除了作为函数调用的副作用提供绘图输出外,该avPlots函数还生成一个对象,该对象是一个列表,其中包含每个添加的变量图中使用的数据值。提取这些变量的数据框并使用它们生成添加的变量图相对简单ggplot。这可以使用以下函数为通用模型对象完成。
avPlots.invis <- function(MODEL, ...) {
ff <- tempfile()
png(filename = ff)
OUT <- car::avPlots(MODEL, ...)
dev.off()
unlink(ff)
OUT }
ggAVPLOTS <- function(MODEL, YLAB = NULL) {
#Extract the information for AV plots
AVPLOTS <- avPlots.invis(MODEL)
K <- length(AVPLOTS)
#Create the added variable plots using ggplot
GGPLOTS <- vector('list', K)
for (i in 1:K) {
DATA <- data.frame(AVPLOTS[[i]])
GGPLOTS[[i]] <- ggplot2::ggplot(aes_string(x = colnames(DATA)[1],
y = colnames(DATA)[2]),
data = DATA) +
geom_point(colour = 'blue') +
geom_smooth(method = 'lm', se = FALSE,
color = 'red', formula = y ~ x, linetype = 'dashed') +
xlab(paste0('Predictor Residual \n (',
names(DATA)[1], ' | others)')) +
ylab(paste0('Response Residual \n (',
ifelse(is.null(YLAB),
paste0(names(DATA)[2], ' | others'), YLAB), ')')) }
#Return output object
GGPLOTS }
Run Code Online (Sandbox Code Playgroud)
该函数ggAVPLOTS将采用一个输入模型并ggplot为每个添加的变量图生成一个对象列表。这些已被构建为提供带有蓝色点和通过每个图的红色虚线回归线的“漂亮”图。如果您希望所有添加的变量图都显示在一个图中,使用包中的grid.arrange函数来实现这一点相对简单gridExtra。下面我们将其应用于您的模型并显示结果图。
#Produce matrix of added variable plots
library(gridExtra)
PLOTS <- ggAVPLOTS(MODEL)
K <- length(PLOTS)
NCOL <- ceiling(sqrt(K))
AVPLOTS <- do.call("arrangeGrob", c(PLOTS, ncol = NCOL, top = 'Added Variable Plots'))
ggsave('AV Plots - Trucking.jpg', width = 10, height = 10)
Run Code Online (Sandbox Code Playgroud)
可以在ggplot上面的代码中对这些图进行任何您想要的更改,因此如果用户更喜欢更改颜色、字体大小等,可以使用ggplot. 此方法的工作原理是从avPlots函数中导入添加的变量图的数据,但是一旦完成此操作,您就可以使用这些数据来生成任何类型的图。
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |