我发现使用stat_regline_equation(with ggscatter) 对于快速将回归方程添加到图中非常有用,特别是当我在多个方面进行多重回归时。然而,它似乎被困在 2 位有效数字上。我知道可以从 an 中提取系数lm,然后用注释显示它们。但从多个方面来看,这似乎确实令人畏惧和挑剔。是否可能有一个功能正在开发中(或者已经在这里,我不知道)可以用来执行此操作stat_regline_eq?我有希望,因为您可以stat_cor为 r 平方和 p 值等指定数字!任何建议或帮助将不胜感激。下面的可重现示例:
library(tidyverse)
library(ggpubr)
ggscatter(diamonds, x="carat", y="table", add="reg.line") +
facet_wrap(~color) +
stat_regline_equation(label.y=90)
summary(lm(table ~ carat, data=filter(diamonds, color=="D")))
Run Code Online (Sandbox Code Playgroud)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 56.46453 0.05438 1038.3 <2e-16 ***
carat 1.42911 0.07255 19.7 <2e-16 ***
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,D 中显示的截距ggscatter偏离了 0.5。
生成方程的基础函数是.stat_lm,是包中未导出的函数ggpubr。正如您所注意到的,它生成的术语都包含 2 位有效数字。这是硬编码到函数本身中的(您可以通过在debugonce(ggpubr:::.stat_lm)打印绘图之前运行来亲自查看,并自己单步执行该函数)。
如果您使用的是RStudio,您可以进入trace(ggpubr:::.stat_lm, edit = TRUE)控制台并在弹出的窗口中修改函数的代码。我没有使用过 R 的其他 GUI,但我认为过程应该类似。您要更改的行是第 13-14 行。
使用钻石数据集进行演示。
diamonds %>%
filter(color == "D") %>%
ggscatter(x = "carat", y = "table", add = "reg.line") +
stat_regline_equation(label.y = 90)
Run Code Online (Sandbox Code Playgroud)
函数中原始第13-14行:
eq.char <- as.character(signif(polynom::as.polynomial(coefs),
2))
Run Code Online (Sandbox Code Playgroud)
替代方案(如果您想改为按小数位指定):
eq.char <- as.character(round(polynom::as.polynomial(coefs),
1))
Run Code Online (Sandbox Code Playgroud)
另一种选择(如果您想要 5 位有效数字而不是 2 位):
eq.char <- as.character(signif(polynom::as.polynomial(coefs),
5))
Run Code Online (Sandbox Code Playgroud)
当不再需要修改时,运行untrace(ggpubr:::.stat_lm)。