使用R中的ggplot2格式化回归线方程

时间:2013-08-16 19:30:17

标签: r ggplot2 regression equation

我很好奇如何编辑Jayden的以下解决方案,以便可以将等式格式化为y = bx + a或y = bx - a?我想让它看起来尽可能干净。

  lm_eqn = function(m) {

  l <- list(a = format(coef(m)[1], digits = 2),
      b = format(abs(coef(m)[2]), digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));

  if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) == a - b %.% italic(x)*","~~italic(r)^2~"="~r2,l)    
  }

  as.character(as.expression(eq));                 
}

我已尝试在%。%中删除并且引发错误并且我尝试反转顺序,但是在函数的if / else部分中出现语法问题。我也想在方程式被格式化的情况下进行,使得系数(a)在没有负号的情况下呈现。 abs(a)返回| a |。感谢您的任何意见!非常感谢!

这是从另一个线程(Adding Regression Line Equation and R2 on graph

开始的

2 个答案:

答案 0 :(得分:1)

如果你想用b * x +表格,那么只需:

if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == 
                 b %.% italic(x) + a*","~~italic(r)^2~"="~r2, l)
  } else {
    eq <- substitute(italic(y) == 
               - b %.% italic(x) + a *"," ~~ italic(r)^2 ~"="~r2, l)  
  }

编写R表达式需要了解语法规则:token / separator / token,但您可以使用“+”或“ - ”作为一元分隔符。在'plotmath中的plotmath符号表的上半部分具有可接受的分隔符。空格和换行被忽略。

答案 1 :(得分:0)

你看到了什么错误?这对我来说可以按要求提供bx ± a。您必须将abs()移至a的定义而不是b并测试coef(m)[1]而不是2 ...

lm_eqn = function(m) {

  l <- list(a = format(abs(coef(m)[1]), digits = 2),
      b = format(coef(m)[2], digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));

  if (coef(m)[1] >= 0)  {
    eq <- substitute(italic(y) ==  b %.% italic(x) + a*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) ==  b %.% italic(x) - a*","~~italic(r)^2~"="~r2,l)    
  }

  as.character(as.expression(eq));                 
}