положение текста для уравнения множественной регрессии на одном графике - PullRequest
2 голосов
/ 05 марта 2012

Я сгенерировал график из этого вопроса:

построил несколько столбцов на одном графике в R

, которые включают в себя несколько переменных на одном графике вместе с ихлинии регрессии.

У меня также есть уравнение и R2, но я не знаю, как разместить его на графике.

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

, который также встречается в том же вопросе

Теперь я хочу сгенерировать уравнение регрессии и значение R2 и разместить его на графике для каждой переменной (например, разместить уравнение и R2 слева или справа от каждой линейной линии)

как это можно сделать ??

спасибо

1 Ответ

2 голосов
/ 05 марта 2012

Вот одна возможность, используя @ код Винсента . Он работает с последней версией ggplot2 (v. 0.9) и версией R-forge directlabels (v. 2.5). Я также проверил код с ggplot2 0.8.9 и directlabels 2.4. (Версия directlabels, выпущенная на CRAN, не будет работать с 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)

Следует отметить, что вы также можете иметь аннотированные кривые с помощью функции labcurve() из пакета Hmisc . Я также могу представить более простые решения, использующие ggplot или решетку, а именно просто написать уравнения регрессии вдоль линий регрессии, с правильной ориентацией и небольшим смещением по оси x, чтобы избежать наложения, но это не обязательно будет очень переносимым, если ваш набор данных происходит изменить.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...