从回归线方程中删除不需要的字符

时间:2019-04-12 15:37:30

标签: r ggplot2 label regression

在我使用的R / R-Studio的先前版本中,将回归公式应用于ggplot时,我会得到一个图形,其中的回归方程式正确呈现。但是,现在我切换到R v3.5.3,在回归行中得到了更多的字符。我已经修改了一个先前的问题(Adding Regression Line Equation and R2 on SEPARATE LINES graph)作为示例:

library(ggplot2)
set.seed(5)
df <- data.frame(x = c(1:50))
df$y <- df$x + rnorm(50, sd=5)

lm_eqn <- function(df){
  m <- lm(y~x, df)
  eq <- substitute(italic(hat(y)) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
                   list(a = format(coef(m)[1], digits=3),
                        b = format(coef(m)[2], digits=3),
                        r2 = format(summary(m)$r.squared, digits=3)))
  as.character(as.expression(eq))}

ggplot(data=df, aes(x=x, y=y))+
  geom_smooth(method="lm", se=FALSE, color="black", formula=y~x)+
  geom_point()+
  geom_text(x=10, y=50, label=lm_eqn(df), parse=TRUE)

我希望回归行文本为

  

y ^ =-0.162 + 1.02·x,r²= 0.886

但是,显示的是

  

y ^ = c(-0.162)+ c(1.02)·x,r²= 0.886

是否有一种方法可以删除之前的ggplot中未显示的c(),或者这是一个错误?

2 个答案:

答案 0 :(得分:1)

这是一个开始,但是,请根据需要调整数学文本的格式:

library(ggplot2)

set.seed(5)
df <- data.frame(x = c(1:50))
df$y <- df$x + rnorm(50, sd=5)


mod <- lm(y~x, df)

label <- paste('y = ', round(mod$coefficients[[1]],2), ' + ', round(mod$coefficients[[2]],2),
               'x', ',   r^2 = ', round(summary(mod)$adj.r.squared,2), sep='')


ggplot(data=df, aes(x=x, y=y))+
  geom_smooth(method="lm", se=FALSE, color="black", formula=y~x)+
  geom_point()+
  geom_text(x=10, y=50, label=label)

Plot

答案 1 :(得分:1)

感谢杰克。我一直希望保持lm_eqn函数的格式为yhat和italic,但是您的回应让我重新考虑了原始代码。在玩了一些之后,我将代码修改为:

lm_eqn <- function(df){
  m <- lm(y~x, df)
  eq <- substitute(italic(hat(y)) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
                   list(a = signif(m$coef[[1]], 3),
                        b = signif(m$coef[[2]], 3),
                        r2 = signif(summary(m)$r.squared, 3)))
  as.character(as.expression(eq))}

这带来了幸运的结果,该图现在变为: enter image description here

因此,从去年开始,有必要在系数周围包括一组额外的[]。再次感谢您为我提供解决方案!