【问题标题】:Why the lm_eqn way of adding Regression line function did not work in my case?为什么添加回归线函数的 lm_eqn 方式在我的情况下不起作用?
【发布时间】:2018-01-09 19:23:13
【问题描述】:

我在 R 中编写函数时遇到了一个问题。 我想比较这个函数中的两个变量,我想绘制比较的回归线。我还想添加回归线的信息,包括方程和 R^2。我已经尝试过的 lm_eqn 方式在我的情况下不起作用,这是我尝试时的代码。不知道为什么,请帮忙!

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

compareFunction <- function(my_dataset, var1, var2) {
    ggplot(data = my_dataset, 
           aes(x = my_dataset[[var1]], 
               y = my_dataset[[var2]])) +
      geom_point() +
      geom_smooth(method = 'lm', formula = 'y ~ x') +
      geom_text(x = 100, y = 100, label = lm_eqn(my_dataset), parse = TRUE)
}

【问题讨论】:

  • 似乎对我有用:x = runif(100)y = runif(100)+xdf = data.frame(x,y)compareFunction(df,"x","y")
  • 嗯,你的问题是围绕情节的标签?我首先建议将geom_text(x = 100, y = 100, label = lm_eqn(my_dataset), parse = TRUE) 替换为ggtitle(lm_eqn(my_dataset))
  • @Gary:你也可以使用ggpmiscstackoverflow.com/a/54135578/786542中的stat_poly_eq

标签: r ggplot2


【解决方案1】:

好吧,评论变得有点乏味了。

所以首先我建议添加一些有用的示例数据:

x = runif(100)
y = runif(100)+x
df = data.frame(x,y)

然后按如下方式更新您的 lm_eqn 函数 - 我从您的返回值中删除了 as.character

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

compareFunction 我会改为使用ggtitle

compareFunction <- function(my_dataset, var1, var2) {
  ggplot(data = my_dataset, 
         aes(x = my_dataset[[var1]], 
             y = my_dataset[[var2]])) +
    geom_point() +
    geom_smooth(method = 'lm', formula = 'y ~ x') +
    ggtitle(lm_eqn(my_dataset))
}

然后compareFunction(df,"x","y") 产生:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2021-09-29
    • 2017-02-22
    • 1970-01-01
    • 2020-07-17
    • 2016-08-27
    相关资源
    最近更新 更多