Удаление ненужных символов из уравнения линии регрессии - PullRequest
1 голос
/ 12 апреля 2019

В предыдущих сборках R / R-Studio, которые я использовал, применяя формулу регрессии к ggplot, я получал график с правильно отображенным уравнением регрессии. Однако теперь, когда я перешел на R v3.5.3, я получаю дополнительные символы в строке регрессии. Я изменил предыдущий вопрос ( Добавление уравнения линии регрессии и R2 на графике SEPARATE LINES ) в качестве примера:

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

Есть ли способ удалить c и (), которые не были показаны в предыдущем ggplot, или это ошибка?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Спасибо Джейк за ответ. Я искал, чтобы форматирование функции lm_eqn содержало yhat и курсив, но ваш ответ заставил меня переосмыслить оригинальный код. Поиграв еще немного, я изменил код так:

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

Таким образом, с прошлого года было необходимо включить дополнительный набор [] вокруг коэффициентов. Еще раз спасибо, что указали мне на решение!

1 голос
/ 12 апреля 2019

Однако для начала отрегулируйте форматирование математического текста по своему усмотрению:

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

...