2014-07-25 58 views
1

我試圖計算一個數據框中兩個數字列之間的相關係數的每個級別的相關性。下面是一個例子的數據幀:R:corp通過ddply組測試

concentration <-(c(3, 8, 4, 7, 3, 1, 3, 3, 8, 6)) 
area <-c(0.5, 0.9, 0.3, 0.4, 0.5, 0.8, 0.9, 0.2, 0.7, 0.7) 
area_type <-c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B") 
data_frame <-data.frame(concentration, area, area_type) 

在本例中,我要計算area_type的每個級別濃度和區域之間的相關性。我想使用cor.test而不是cor,因爲我想要p值和kendall tau值。我試圖做到這一點使用ddply:

ddply(data_frame, "area_type", summarise, 
    corr=(cor.test(data_frame$area, data_frame$concentration, 
       alternative="two.sided", method="kendall"))) 

不過,我有輸出的一個問題:它是從正常肯德爾cor.test輸出,其中指出Z值,p值,替代不同的方式組織假設和頭估計。而不是那個,我得到下面的輸出。我不知道輸出的每一行是什麼。另外,對於每個level_type的輸出值都是相同的。

area_type           corr 
1   A         0.3766218 
2   A           NULL 
3   A         0.7064547 
4   A         0.1001252 
5   A           0 
6   A         two.sided 
7   A    Kendall's rank correlation tau 
8   A data_frame$area and data_frame$concentration 
9   B         0.3766218 
10   B           NULL 
11   B         0.7064547 
12   B         0.1001252 
13   B           0 
14   B         two.sided 
15   B    Kendall's rank correlation tau 
16   B data_frame$area and data_frame$concentration 

我在做什麼錯誤的ddply?或者還有其他的方式嗎?謝謝。

回答

5

您可以添加名稱爲corr的附加列。另外,你的語法稍微不正確。 .指定該變量來自您指定的數據框。然後取出data_frame $否則將使用整個數據幀:

ddply(data_frame, .(area_type), summarise, corr=(cor.test(area, concentration, alternative="two.sided", method="kendall")), name=names(corr))

其中給出:

area_type       corr  name 
1   A      -0.285133 statistic 
2   A       NULL parameter 
3   A      0.7755423  p.value 
4   A      -0.1259882 estimate 
5   A        0 null.value 
6   A      two.sided alternative 
7   A Kendall's rank correlation tau  method 
8   A   area and concentration data.name 
9   B        6 statistic 
10   B       NULL parameter 
11   B      0.8166667  p.value 
12   B       0.2 estimate 
13   B        0 null.value 
14   B      two.sided alternative 
15   B Kendall's rank correlation tau  method 
16   B   area and concentration data.name 

統計是z值,估計是頭估計。

編輯:你也可以像下面這樣做只拉你想要的東西:

corfun<-function(x, y) { 
    corr=(cor.test(x, y, 
       alternative="two.sided", method="kendall")) 
} 

ddply(data_frame, .(area_type), summarise,z=corfun(area,concentration)$statistic, 
     pval=corfun(area,concentration)$p.value, 
     tau.est=corfun(area,concentration)$estimate, 
     alt=corfun(area,concentration)$alternative 
    ) 

其中給出:這是不工作的原因

area_type z pval tau.est alt 1 A -0.285133 0.7755423 -0.1259882 two.sided 2 B 6.000000 0.8166667 0.2000000 two.sided

+0

您的建議確實有助於標記輸出。但是,仍然存在統計信息與area_type的每個級別相同的問題。在這個例子中,相關結果應該不同於area_type的每個級別。所以,我現在仍然在使用ddply的方式顯然存在問題。 – user3791234

+0

哎呀,對不起,我沒有注意到這一部分。我編輯了我的答案。 –

+0

謝謝。你的編輯效果很好。 – user3791234

0

部分是心病.test回報:

Pearson's product-moment correlation 

data: data_frame$concentration and data_frame$area 
t = 0.5047, df = 8, p-value = 0.6274 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
-0.5104148 0.7250936 
sample estimates: 
    cor 
    0.1756652 

此信息不能放入廣告中ata.frame(ddply會這樣做),而不會使代碼複雜化。如果您能提供您需要的確切信息,那麼我可以提供進一步的幫助。我想看看只用

corrTest <- ddply(.data = data_frame, 
       .variables = .(area_type), 
       .fun = cor(concentration, area,)) 
           method="kendall"))) 

我還沒有測試此代碼,但是這是我最初將採取從這裏上班路線。

+0

我想輸出每個level_type的統計量(z值),p值和估計值(tau)。 – user3791234