减少主轴线和R中ggplot的CI

Ste*_*eve 4 r ggplot2

无论如何要将减少的主轴线(理想情况下为CI)添加到ggplot中吗?我知道我可以使用method ="lm"来获得OLS,但似乎没有RMA的默认方法.我可以从包lmodel2获取RMA coefs和CI间隔,但添加geom_abline()似乎不起作用.这是虚拟数据和代码.我只想用一条RMA线和CI替换OLS线和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") 
Run Code Online (Sandbox Code Playgroud)

Edit1:下面的代码获得RMA(此处称为SMA - 标准化主轴)coefs和CI.包lmodel2提供更详细的输出,而package smatr只返回coefs和CI,如果有任何帮助:

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

library(smatr)
fit2 <- line.cis(b, a, data=dat)
Run Code Online (Sandbox Code Playgroud)

had*_*ley 7

建立Joran的答案,我认为将整个数据框传递给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))
Run Code Online (Sandbox Code Playgroud)


jor*_*ran 5

正如Chase评论的那样,您使用的实际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))
Run Code Online (Sandbox Code Playgroud)

完全披露:我对RMA回归一无所知,所以我只是geom_abline()使用一些示例代码lmodel2作为指导,将相关的斜坡和截距取出并插入其中.在这个玩具生产例子独联体似乎并没有多大意义,因为我不得不强迫ggplot缩小使用xlim(),并ylim()为了看到CI线(红色).

但也许这会帮助你构建一个有效的例子ggplot().

EDIT2:OPs添加代码来提取系数,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")
Run Code Online (Sandbox Code Playgroud)