是否有类似于 R 中的 avPlots 函数的 ggplot2?

Rei*_*ica 0 r ggplot2

在进行回归建模时,为模型中的解释变量生成附加变量图很有用,以检查与响应变量的假定关系是否适合数据。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语法自定义它们?

Rei*_*ica 7

我不知道任何使用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函数中导入添加的变量图的数据,但是一旦完成此操作,您就可以使用这些数据来生成任何类型的图。