如何用ggpairs得到R^2?
How to get R^2 with ggpairs?
如何使 ggpairs
报告上角为 R^2 而不是相关性?
library(GGally)
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")])
我认为您需要编写一个自定义函数,如下所示。 (这种方法的一个警告是,与相关性不同,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
以尝试使文本左对齐,但这并不奏效。
如何使 ggpairs
报告上角为 R^2 而不是相关性?
library(GGally)
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")])
我认为您需要编写一个自定义函数,如下所示。 (这种方法的一个警告是,与相关性不同,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
以尝试使文本左对齐,但这并不奏效。