2012-06-26 53 views
1

使用下面的數據框,我設法計算了主題反應時間的重複測量ANOVA。這是有問題的數據幀:如何計算此混合設計實驗的誤差率方差分析?

> str(a) 
'data.frame': 2778 obs. of 9 variables: 
$ Phase : Factor w/ 1 level "Test": 1 1 1 1 1 1 1 1 1 1 ... 
$ Subject : Factor w/ 17 levels "1","2","3","5",..: 7 7 7 7 7 7 7 7 7 7 ... 
$ Group : Factor w/ 2 levels "Attn","Dist": 1 1 1 1 1 1 1 1 1 1 ... 
$ Global : Factor w/ 2 levels "D","S": 1 1 1 1 1 1 1 1 1 1 ... 
$ Local : Factor w/ 2 levels "D","S": 1 1 1 1 1 1 1 1 1 1 ... 
$ trialtype: Factor w/ 1 level "Dist": 1 1 1 1 1 1 1 1 1 1 ... 
$ RT  : num 477 682 720 NaN 604 720 910 707 705 758 ... 
$ ACC  : logi TRUE TRUE TRUE FALSE TRUE TRUE ... 

,這裏是我用來計算ANOVA的反應時間代碼:

raw<-read.table('R_notarg_noattn.tdf',header=T) 
head(raw) 
str(raw) 
raw$Subject = factor(raw$Subject) 

raw$logrt = log10(raw$RT) # logorithm of RT 
hist(raw$logrt) 

tsttrl_nooutliers = subset(raw, logrt>2 & ACC==TRUE) # take values greater than 2 logs AND where subj responded correctly 
attach(tsttrl_nooutliers) # make column names available as global variables 
hist(logrt) 
summary(aovrt <- aov(logrt ~ Group*Global*Local + Error(Subject/(Global*Local)), subset=Phase=='Test', data=tsttrl_nooutliers)) # ANOVA table 

meanrt=10^tapply(logrt,list(Global=Global, Local=Local, Group=Group), mean) # de-log and calculate means by condition 

par(mfcol=c(1,2)) # c() *combines* values into vector/list; par() sets graphical parameters... equivalent to Matlab's set() ???? 
barplot(meanrt[,,'Attn'],beside=T,ylim=c(700,1000),xpd=F) 
barplot(meanrt[,,'Dist'],beside=T,ylim=c(700,1000),xpd=F) 

detach(tsttrl_nooutliers) 

我想上的錯誤重複類似的分析費率,這些費率編碼在布爾型列ACC中。我想知道如何去做這件事,因爲這個計算需要按照每個條件計算錯誤率的中間步驟。當我說「條件」時,我的意思是說獨特的因素組合,即$ Group,$ Global,$ Local,$ trialtype(只選擇其中的$ Phase == Test,如前面的代碼片段所示)。

有人能指出我正確的方向嗎?總之,我不清楚如何獲得錯誤率,然後我應該沒有問題喂入aov函數。

回答

1

我不同意使用aov()不會產生任何問題,因爲您將從分析連續結果轉爲離散結果(乘法觀察二項式)。撇開通常需要泊松迴歸或邏輯迴歸的事實,可以將「ACC」的總和/長度累計在$ Subject,$ Group,$ Global,$ Local和$ trialtype的類別中。目前,只有一個級別爲$ trialtype和$ Phase,因此子集似乎不需要,但是如果此str()輸出位於子集上,那麼您可以通過僅使用$ trialtype ==「Test」將其限制爲那些a[a$trialtyp=="Test" , ]作爲你的數據框。

categ.a <- with(a, tapply(a$ACC, INDEX =list(Subject Group, Global, Local), 
        FUN = function(x) { 
            sum(x)/ length(x) } 

編輯1:您可能需要尋求關於如何在www.stackexchange.com上尋求離散結果的本研究設計的統計諮詢。如果您正確設置了glm()或lmer()分析,則可能甚至不需要此步驟。我一直認爲,我可能會嘗試使用$ Subject作爲具有ACC == TRUE的混合模型中的一個級別,作爲使用log(長度(ACC))偏移的泊松錯誤的結果。

編輯2:如果您在每個主題和類別中都有足夠的數字表示錯誤率是「僞連續的」,即不是很大的零,那麼原始方法可能就足夠了。

+0

我們並不完全不同意使用正確百分比的方差分析!我將不得不與我的研究主任進一步爭論,但暫時,我只是幽默他。在任何情況下,我似乎已經解決了這個問題'meanpc = aggregate(tsttrls $ ACC,list(Subject = tsttrls $ Subject,Group = tsttrls $ Group,Local = tsttrls $ Local,Global = tsttrls $ Global),意思)'雖然我不清楚這兩種方法之間的確切區別。無論如何,我接受你的答案,我很可能會在不久的將來再次提及它。非常感謝! – blz

0

您不能正確進行RT分析,因此很難看到如何進行錯誤分析。您無法對原始值進行方差分析,您需要首先彙總到條件。排除異常值後(無論如何,這些異常值的理由是什麼?),然後您需要彙總rt。

agg <- aggregate(RT ~ Group + Global + Local + Subject, data = tsttrl_nooutliers, mean) 

然後,你可以做造型。我不想告訴你如何去做精確度,儘管你現在應該能夠弄明白。您需要閱讀Dixon (2008)Jaeger (2008)。不建議對精度進行方差分析,他們做的很好,覆蓋了大部分原因。

+0

我拋出異常值的原因對於手頭的問題來說並不重要,但我們認爲需要很長時間才能做出迴應的主題並不代表那些努力完成任務的人。你的觀點在聚合方面很好,因爲我認爲這是自動處理的。你知道他們說什麼假設...在任何情況下,謝謝你的參考。 – blz

+0

不,這不是直接的德國人,但7s只是一個隨意的數字,對於大多數任務來說相當長。我真的想問你爲什麼要做日誌轉換。原始RT不是正態分佈的,但當它們有足夠的意味着RT是。在方差分析中,您分析平均RT。 – John