【问题标题】:text position for multiple regression equation on the same graph同一图表上多个回归方程的文本位置
【发布时间】:2012-03-05 14:09:36
【问题描述】:

我从这个问题生成了一个图表:

plot multiple columns on the same graph in R

其中包括同一图表上的多个变量及其回归线。

我也有方程和 R2,但我不知道如何将它放在图表上。

   ddply( d, "variable", function(u) { 
   r <- lm(value ~ Xax, data=u); 
    c(coef(r), r.squared=summary(r)$r.squared) } )

在同一个问题中也可以找到

现在我想为每个变量生成回归方程和 R2 值并将其放在图表上。(例如,将方程和 R2 放在每条线性线的左侧或右侧)

如何做到这一点??

谢谢

【问题讨论】:

  • This 应该可以帮助您入门(并且可以说是重复的)。将每个 eqn 放置在“靠近”每条线的位置将很难以自动化的方式明智地进行。您将有更多的运气直接指定坐标。
  • 谢谢,但是如何从这个等式中得到错误呢?是 R2 还是其他变量??
  • 你的问题只提到了系数和 R^2 值。我不知道你所说的“错误”是什么意思。
  • 线性回归误差(标准误差)。是和R2一样,还是这个函数里有别的变量(lm)??
  • “线性回归误差”可以指几件事,但绝对不是 R^2。也许您想取残差平方的平均值(或总和?)?您可以通过阅读?lm 了解如何访问它们。

标签: r


【解决方案1】:

这是一种可能性,使用@Vincent's code。它适用于最新版本的 ggplot2 (v. 0.9) 和 R-forge 版本的directlabels (v. 2.5)。我还用ggplot2 0.8.9 和directlabels 2.4 测试了代码。 (不过,在 CRAN 上发布的 directlabels 版本不适用于 ggplot2 0.9。)

这个想法基本上是用回归方程替换您的标签A、B、C、G。当然,您可以以不同的方式存储后者,但我认为这会使绘图表达式复杂化,所以让我们尽可能简单。假设我们已经有了@Vincent 的熔化变量d,

> head(d)
    Xax variable value
1  0.22        A 0.451
2  0.34        A 0.491
3  0.54        A 0.389
4  0.34        A 0.425
5  0.53        A 0.457
6  0.12        A 0.436

让我们将 variable 标签替换为您计算的方程式:

library(plyr)
lm.stats <- ddply(d, "variable", 
                  function(u) { 
                    r <- lm(value ~ Xax, data=u)
                    c(coef(r), r.squared=summary(r)$r.squared) 
                  })
my.formatter <- function(x, digits=2) {
  x <- round(x, digits=digits)
  out <- paste(x[1], ifelse(x[2]>0, "+", ""), x[2], "x", sep="")
  out <- paste(out, " (R2=", x[3], ")", sep="")
  return(out)
}
d$variablef <- d$variable
levels(d$variablef) <- apply(lm.stats[2:4], 1, my.formatter)

小助手函数my.formatter 负责组装您使用ddply 计算的不同统计信息。请注意,我复制了variable,以防我们需要后者。这是绘图的东西:

p <- ggplot(d, aes(Xax,value, col=variablef)) + 
       geom_point() + 
       stat_smooth(method=lm) 
library(directlabels)
direct.label(p)

我应该注意,您还可以使用 Hmisc 包中的 labcurve() 函数来注释曲线。我还可以想象使用 ggplot 或 lattice 的更简单的解决方案,即只需沿着回归线编写回归方程,方向正确并在 x 轴上略微移动以避免重叠,但如果您的数据集发生,这可能不一定非常便携改变。

【讨论】:

  • 感谢您的回答,我试过了,但出现错误:direct.label.ggplot(p) 中的错误:找不到函数“guides”
  • @ifreak 您使用的是什么版本的 ggplot2 和 directlabels?以上内容使用 ggplot2 0.8.9 和 directlabels 2.4(x86_64-apple-darwin9.8.0/x86_64 上的 R 2.14.1)进行了测试。
  • 我有 ggplot2 0.9.8 和 directlabels 我有我今天下载的最新版本。和 Fedora 上的 R 2.11
  • @ifreak 正如我所说,它不适用于您似乎正在使用的最新版本的 ggplot2 (0.9)(我不知道这样的版本控制,0.9.8 ,所以也许我错了,您使用的是 0.8.9 版本,尽管 guides 是在 0.9 中引入的,AFAIK)。您可以尝试从 CRAN 获取 src 0.8.9 包并将其安装在您的机器上吗?
  • 对不起,我刚刚发现我有这个版本:ggplot2_0.8.9,它不工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2014-12-31
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多