Уменьшена линия главной оси и CI для ggplot в R - PullRequest
4 голосов
/ 24 мая 2011

Есть ли способ добавить уменьшенную линию большой оси (и в идеале CI) к ggplot? Я знаю, что могу использовать method = "lm", чтобы получить соответствие OLS, но, похоже, нет метода по умолчанию для RMA. Я могу получить значения RMA и интервал CI из пакета lmodel2, но добавление их с помощью geom_abline (), похоже, не работает. Вот фиктивные данные и код. Я просто хочу заменить линию OLS и CI на линию RMA и CI:

dat <- data.frame(a=log10(rnorm(50, 30, 10)), b=log10(rnorm(50, 20, 2)))

ggplot(dat, aes(x=a, y=b) ) + 
    geom_point(shape=1) +       
    geom_smooth(method="lm") 

Edit1: приведенный ниже код получает значения RMA (здесь называемые SMA - стандартизированная большая ось) и CI. Пакет lmodel2 обеспечивает более подробный вывод, в то время как пакет smatr возвращает только коэффициенты и CI, если это поможет:

library(lmodel2)
fit1 <- lmodel2(b ~ a, data=dat)

library(smatr)
fit2 <- line.cis(b, a, data=dat)

Ответы [ 2 ]

7 голосов
/ 24 мая 2011

Опираясь на ответ Джорана, я думаю, что немного проще передать весь фрейм данных в geom_abline:

library(ggplot2)
library(lmodel2)

dat <- data.frame(a=log10(rnorm(50, 30, 10)), b=log10(rnorm(50, 20, 2)))
mod <- lmodel2(a ~ b, data=dat,"interval", "interval", 99)

reg <- mod$regression.results
names(reg) <- c("method", "intercept", "slope", "angle", "p-value")

ggplot(dat) + 
  geom_point(aes(b, a)) +
  geom_abline(data = reg, aes(intercept = intercept, slope = slope, colour = method))
5 голосов
/ 24 мая 2011

Как прокомментировал Чейз, фактический код lmodel2() и код ggplot, которые вы используете, будут полезны.Но вот пример, который может указать вам правильное направление:

dat <- data.frame(a=log10(rnorm(50, 30, 10)), b=log10(rnorm(50, 20, 2)))
mod <- lmodel2(a ~ b, data=dat,"interval", "interval", 99)

#EDIT: mod is a list, with components (data.frames) regression.results and 
#        confidence.intervals containing the intercepts+slopes for different 
#        estimation methods; just put the right values into geom_abline
ggplot(dat,aes(x=b,y=a)) + geom_point() + 
   geom_abline(intercept=mod$regression.results[4,2],
            slope=mod$regression.results[4,3],colour="blue") + 
   geom_abline(intercept=mod$confidence.intervals[4,2],
            slope=mod$confidence.intervals[4,4],colour="red") + 
   geom_abline(intercept=mod$confidence.intervals[4,3],
            slope=mod$confidence.intervals[4,5],colour="red") + 
   xlim(c(-10,10)) + ylim(c(-10,10))

Полное раскрытие: я ничего не знаю о регрессии RMA, поэтому я просто вытащил соответствующие уклоны и перехваты и добавил их в geom_abline(),используя пример кода из lmodel2 в качестве руководства.CI, созданные в этом игрушечном примере, похоже, не имеют особого смысла, так как мне пришлось заставить ggplot уменьшать масштаб, используя xlim() и ylim(), чтобы увидеть линии CI (красные).

Но, возможно, это поможет вам создать рабочий пример в ggplot().

EDIT2: с добавленным кодом OP для извлечения коэффициентов ggplot() будет выглядеть примерно так:

ggplot(dat,aes(x=b,y=a)) + geom_point() + 
geom_abline(intercept=fit2[1,1],slope=fit2[2,1],colour="blue") + 
geom_abline(intercept=fit2[1,2],slope=fit2[2,2],colour="red") + 
geom_abline(intercept=fit2[1,3],slope=fit2[2,3],colour="red")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...