2010-02-25 46 views
2

我有以下設置來分析: 我們有大約150個科目,並且對於每個科目我們都進行了18次測試(在不同條件下)。 18個不同的測試條件是互補的,這樣,如果我們在測試中的平均值(對於每個對象),測試之間(對象之間)沒有相關性。 我們希望知道的是測試之間的相關性(和P值),在受試者內部,但是在所有受試者中。如何操作:與「塊」(或 - 「重複測量」?!)相關?

我現在這樣做的方式是執行爲每個主題的相關性,再看看相關的分佈收到這麼看它是否意味着是不同的,那麼0 但我懷疑有可能是一個更好的回答同樣問題的方式(有人對我說了一些關於「地理相關性」的內容,但淺搜索沒有幫助)。 p:我知道這裏可能有一個地方可以做某種混合模型,但我更願意提出一個「相關性」,我不知道如何從混合模型中提取這樣的輸出。

而且,這裏是一個短路僞代碼,給什麼我談論的一個想法:

attach(longley) 
N <- length(Unemployed) 
block <- c(
     rep("a", N), 
     rep("b", N), 
     rep("c", N) 
     ) 

Unemployed.3 <- c(Unemployed + rnorm(1), 
        Unemployed + rnorm(1), 
        Unemployed + rnorm(1)) 

GNP.deflator.3 <- c(GNP.deflator + rnorm(1), 
        GNP.deflator + rnorm(1), 
        GNP.deflator + rnorm(1)) 

cor(Unemployed, GNP.deflator) 
cor(Unemployed.3, GNP.deflator.3) 
cor(Unemployed.3[block == "a"], GNP.deflator.3[block == "a"]) 
cor(Unemployed.3[block == "b"], GNP.deflator.3[block == "b"]) 
cor(Unemployed.3[block == "c"], GNP.deflator.3[block == "c"]) 
(I would like to somehow combine the last three correlations...) 

任何想法都會受到歡迎。

最佳, 塔爾

回答

4

我同意特里斯坦 - 你正在尋找ICC。與標準實現唯一的區別是兩個評估者(測試)反覆評估每個主題。可能有一個允許的實現。與此同時,這裏是另一種獲得相關性的方法。

您可以使用「通用線性模型」,它是線性模型的推廣,明確允許殘差之間的相關性。下面的代碼使用nlme包的gls函數來實現此功能。我相信還有其他的方法。要使用此功能,我們必須首先將數據重塑爲「長」格式。爲了簡單起見,我還將變量名稱更改爲xy。我也在代碼中使用了+rnorm(N)而不是+rnorm(1),因爲這就是我認爲你的意思。

library(reshape) 
library(nlme) 
dd <- data.frame(x=Unemployed.3, y=GNP.deflator.3, block=factor(block)) 
dd$occasion <- factor(rep(1:N, 3)) # variable denoting measurement occasions 
dd2 <- melt(dd, id=c("block","occasion")) # reshape 

# fit model with the values within a measurement occasion correlated 
# and different variances allowed for the two variables 
mod <- gls(value ~ variable + block, data=dd2, 
      cor=corSymm(form=~1|block/occasion), 
      weights=varIdent(form=~1|variable)) 
# extract correlation 
mod$modelStruct$corStruct 

在建模框架中,您可以使用似然比檢驗來獲得p值。nlme也可以給你一個置信區間:

mod2 <- gls(value ~ variable + block, data=dd2, 
      weights=varIdent(form=~1|variable)) 
anova(mod, mod2) # likelihood-ratio test for corr=0 

intervals(mod)$corStruct # confidence interval for the correlation 
+0

嗨安妮科, 首先我會提到我的意思是rmorm(1)(因爲我想改變主體之間的數據,通過一個在內部相關性不會改變的因素) 其次 - 偉大的代碼! 這(如果我正確的話),正是我想要的。 現在我還有兩個問題需要解決: 1)我對這個模型結構沒有足夠深入的理解 - 所以我需要學習它。 2)我的真實數據不是線性的。它們是從0到3的整數。因此,從某種意義上說,我會需要一些非參數來執行此操作。 但無論哪種方式 - 您的答案是美好的,謝謝! – 2010-02-27 11:10:15

0

我不是專家,但在我看來像你想要什麼。它是自動的,代碼簡潔,與上面的示例給出了相同的相關性,並生成p值。

> df = data.frame(block=block, Unemployed=Unemployed.3, 
+ GNP.deflator=GNP.deflator.3) 
> require(plyr) 
Loading required package: plyr 
> ddply(df, "block", function(x){ 
+ as.data.frame(
+  with(x,cor.test(Unemployed, GNP.deflator))[c("p.value","estimate")] 
+)}) 
    block p.value estimate 
1  a 0.01030636 0.6206334 
2  b 0.01030636 0.6206334 
3  c 0.01030636 0.6206334 

要看到所有的細節,這樣做:

> dlply(df, "block", function(x){with(x,cor.test(Unemployed, GNP.deflator))}) 
$a 

    Pearson's product-moment correlation 

data: Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
0.1804410 0.8536976 
sample estimates: 
     cor 
0.6206334 


$b 

    Pearson's product-moment correlation 

data: Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
0.1804410 0.8536976 
sample estimates: 
     cor 
0.6206334 


$c 

    Pearson's product-moment correlation 

data: Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
0.1804410 0.8536976 
sample estimates: 
     cor 
0.6206334 


attr(,"split_type") 
[1] "data.frame" 
attr(,"split_labels") 
    block 
1  a 
2  b 
3  c 
+0

亞歷嗨, 謝謝你的努力,但我怕我給的解決方案是沒有什麼幫助(因爲它沒有產生單P值) 。 我的問題是與算法,而不是如何做到這一點:) 我希望有人會想出一個想法。 乾杯, Tal – 2010-02-25 18:45:33

1

如果我理解你的問題正確,你有興趣在計算多個測試之間的intraclass correlation。儘管我沒有使用它,但在psy包中有一個實現。

如果你想對關聯估計進行推理,你可以引導主體。只要確保爲每個樣品保留測試。

+0

嗨特里斯坦, 你的回答很好,但我仍然有一塊失蹤。 查看您提供的鏈接, psy軟件包中的icc允許評估評估者的可靠性。 也就是說,假設我們有X個科目,並且每個科目都進行了N次相同的測試。 那麼如果我想知道這些測試結果(對於每個主題)是多麼相似 - 那麼這個測試將是完美的。 但是 在我的情況下,我對每個(X)主題進行了兩次測試(a和b-N次)。對他們而言,我希望計算a和b之間的相關性。 我會繼續尋找。 非常感謝! – 2010-02-26 09:53:39

+0

每個科目需要兩個測試?或者每個科目需要進行兩次N次測試?如果前者,那與同樣測試的兩位評價者同構。無論是相同的測試,但不同的評估者或兩個測試無關緊要。您對測試或評估者之間的關聯感興趣。也許我仍然不明白你在做什麼。 – Tristan 2010-02-26 21:01:02

+0

我對此很感興趣。這聽起來像是重複測量ANOVA或混合模型ANOVA的情況。也許我也是誤解? – briandk 2010-02-27 01:59:12