【问题标题】:ploting replicates in ggplot problems with annotation per facet在 ggplot 问题中绘制复制品,每个方面都有注释
【发布时间】:2015-04-17 13:32:10
【问题描述】:

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

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")

但是,现在我想看看每个变量的相关性是否不同。

我可以这样做。

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 时,您可以在下图中看到相关性。它是否在通过变量进行子集化时以某种方式重新排序数据帧?

【问题讨论】:

    标签: r ggplot2 plyr


    【解决方案1】:

    在您的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))
    

    【讨论】:

    • 谢谢,我使用了正确的语法,但不知何故计算不正确,请参见上图,谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多