我正在使用 stat_regline_equation 和 ggscatter。有没有办法指定系数的有效数字?

I'm using stat_regline_equation with ggscatter. Is there a way to specify the significant digits of coefficients?

我发现使用 stat_regline_equation(使用 ggscatter)对于快速将回归方程添加到图中非常有用,尤其是当我在多个方面进行多重回归时。但是,它似乎停留在 2 个有效数字上。我知道可以从 lm 中提取系数,然后用注释显示它们。但是从多个方面来看,这似乎真的令人生畏和挑剔。作品中是否可能有一个功能(或已经在这里,我不知道)用 stat_regline_eq 来做到这一点?我有希望,因为您可以用 stat_cor 为 r-square 和 p-values 之类的东西指定数字!任何建议或帮助将不胜感激。下面的可重现示例:

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")))

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 ***

如您所见,D 的 ggscatter 中显示的截距偏移了 0.5。

生成方程式的基础函数是 .stat_lmggpubr 包中未导出的函数。正如您所注意到的,它产生的术语都包含 2 个有效数字。这是硬编码到函数本身中的(您可以在打印绘图之前通过 运行ning debugonce(ggpubr:::.stat_lm) 自己查看,然后自己逐步执行函数)。

如果您使用的是RStudio,您可以在控制台中输入trace(ggpubr:::.stat_lm, edit = TRUE),然后在弹出窗口中修改函数代码window。我没有为 R 使用其他 GUI,但我认为过程应该类似。您要更改的行是第 13-14 行。

钻石数据集的演示。

diamonds %>%
  filter(color == "D") %>%
  ggscatter(x = "carat", y = "table", add = "reg.line") +
  stat_regline_equation(label.y = 90)

函数中的原始第 13-14 行:

  eq.char <- as.character(signif(polynom::as.polynomial(coefs), 
    2))

备选方案(如果您想改为指定小数位):

  eq.char <- as.character(round(polynom::as.polynomial(coefs), 
    1))

另一种选择(如果你想要 5 位有效数字而不是 2 位):

  eq.char <- as.character(signif(polynom::as.polynomial(coefs), 
    5))

当不再需要修改时,运行 untrace(ggpubr:::.stat_lm).