我有一个大型数据框。 这是类似结构的假数据;
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时,你可以在下面的图中看到相关性。它是以某种方式在按变量进行子集化时重新排序数据帧吗?
答案 0 :(得分:0)
在ddply
来电中,您再次使用了dat
。这是指原始数据。您应该直接使用value
和replicate
。然后他们被正确解释。
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))