使用每个方面的注释绘制ggplot问题中的复制

时间:2015-04-17 13:32:10

标签: r ggplot2 plyr

我有一个大型数据框。 这是类似结构的假数据;

dat = data.frame(id=seq(1:12),variable=rep(c("p1","p2","p3"),times=2),value=c(runif(6),runif(6)+1),locus=c(rep("A",6),rep("B",6)),replicate=rep(c(1,2),6), TimesLocus=rep(2,times=12))

我想绘制复制1和复制2之间的相关性。

我已经使用了。

Corr<-cor(dat[dat$replicate==1,]$value,dat[dat$replicate==2,]$value)
ggplot(dat,aes(x=dat[dat$replicate==1,]$value,y=dat[dat$replicate==2,]$value))+
  geom_point()+xlab("replicate1")+ylab("replicate2")+
  geom_smooth(method = "lm")  + 
  annotate("text", x = 0.9*max(dat[dat$replicate==1,]$value),
       y = 0.9*max(dat[dat$replicate==2,]$value),
       label = paste("r^2=",round(Corr,digits=2),sep=" "),color="blue")

但是,现在我想看看PER VARIABLE的相关性是否不同。

我可以使用。

ggplot(dat,aes(x=dat[dat$replicate==1,]$value,y=dat[dat$replicate==2,]$value))+
 geom_point()+xlab("replicate1")+ylab("replicate2")+
  geom_smooth(method = "lm")  + facet_wrap(~variable)

如果我想获得每个变量的相关性,我知道我应该创建一个单独的数据帧,但是我遇到了这个问题。

r_df <- ddply(dat, .(variable), summarise, 
          rsq=round(summary(lm(dat[dat$replicate==2,]$value~
                                    dat[dat$replicate==1,]$value))$r.squared, 2))

它为每个变量提供相同的r2ed。

我做错了什么?我可以在不重新塑造数据的情况下这样做吗?

好的,我现在正在尝试使用@shadow中的信息,并有以下内容。

 r_df_val <- ddply(df_mlt_loc_Dup, .(variable), summarise, rsq=round(summary(lm(value[replicate==2]~value[replicate==1]))$r.squared, 2))

一些计算方法是否正确。所有的rsq都是0.06或者什么,当它们应该接近0.8时,你可以在下面的图中看到相关性。它是以某种方式在按变量进行子集化时重新排序数据帧吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

ddply来电中,您再次使用了dat。这是指原始数据。您应该直接使用valuereplicate。然后他们被正确解释。

r_df <- ddply(dat, .(variable), summarise, 
              rsq = round(summary(lm(value[replicate==2]~value[replicate==1]))$r.squared, 2))

这对您提供的数据不起作用,因为数据集太小。但对于您的原始数据,它应该工作。此处还有一个更大的数据集(实际上是您提供的一些额外行的数据)。对于这些数据,它应该按照需要工作。

dat = data.frame(id=seq(1:24),variable=rep(c("p1","p2","p3"),times=4),value=c(runif(12),runif(12)+1),locus=c(rep("A",12),rep("B",12)),replicate=rep(c(1,2),12), TimesLocus=rep(2,times=24))