1

如何ggpairs用 R^2 而不是相关性来报告上角?

library(GGally)    
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")])

在此处输入图像描述

4

1 回答 1

3

我认为您将需要编写一个自定义函数,如下所示。(对这种方法的一个警告是,与相关性不同,r^2 假设一个因变量,因此这可能不明智)。

library(GGally) # version 1.5.0

lm_fun <- function(data, mapping, ndp=2, ...){

    # Extract the relevant columns as data
    x <- eval_data_col(data, mapping$x)
    y <- eval_data_col(data, mapping$y)

    # Calculate the r^2 & format output
    m <- summary(lm(y ~ x))
    lbl <- paste("r^2: ", formatC(m$r.squared, digits=ndp, format="f"))

    # Write out label which is centered at x&y position
    ggplot(data=data, mapping=mapping) + 
      annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE), label=lbl, parse=TRUE, ...)+
      theme(panel.grid = element_blank()) 
  }

# Call
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")], 
        upper=list(continuous=lm_fun))

编辑:您能帮忙解释一下如何在 r^2 和值之间的 lbl 中添加新行吗?

您可以atop通过将相关代码更改为:

lbl <- substitute(atop(~r^2*':', v), 
                  list(v=formatC(m$r.squared, digits=ndp, format="f")))

或者

 v <- formatC(m$r.squared, digits=ndp, format="f")
 lbl <- bquote(atop(~r^2*':', .(v))) 

然后,您需要调整annotate调用以正确解析标签

annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE), 
          label=deparse(lbl), parse=TRUE, hjust=0, ...)

我添加hjust=0试图左对齐文本,但这并没有奏效。

于 2020-12-18T19:58:51.903 回答