2015-04-17 96 views
0

我有一個很大的數據框。 這裏是一個類似結構的假數據;在ggplot中繪製重複每個方面的註釋問題

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

回答

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)) 
+0

感謝 - 將與我的真實數據檢查並拿回 – user2814482

+0

感謝,我用你正確的語法,但不知何故的計算是不正確的,在上面看到的情節,謝謝 – user2814482