Repeated measures ANOVA in R
August 24, 2008 at 04:46 PMRepeated measures ANOVAs in R are performed with the aov() function. The aov() function requires fully balanced data to work correctly, i.e., there can be no missing values in the data. In order to use aov() on data with missing values (most experimental data has excluded values), one needs to average over subjects or items.
Below, we assume a data frame data with at least the columns subject, factor1, factor2, and logRT. The code below averages over subjects, returning the data frame data.subject.
data.subject = aggregate(data$logRT, list(data$subject, data$factor1, data$factor2), mean)
colnames(data.subject) = c("subject", "factor1", "factor2", "logRT")
An alternative is to use the excellent reshape package.
library(reshape) data.subject = recast(data, SUBJ + factor1 + factor2 ~ variable, mean, measure.var="logRT")
You can then perform the repeated measures ANOVA on data.subject.
summary(aov(logRT ~ factor1 * factor2 + Error(subject/(factor1 * factor2)), data=data.subject))
Calculating d-prime in R
August 23, 2008 at 11:04 PMThis function takes a data frame data.frame and returns a d-prime score for each unique entry in the subject column of the data frame. Note that the function will return Inf or -Inf if any value in Hrate or Frate is 1 or 0.
dprime = function(data.frame) {
yes = subset(data.frame, resp=="Y")
no = subset(data.frame, resp=="N")
hit = subset(data.frame, resp=="Y" & acc == 1)
falsealarm = subset(data.frame, resp=="N" & acc == 0)
Hrate = xtabs(~subject,data=hit)/xtabs(~subject,data=yes)
Frate = xtabs(~subject,data=falsealarm)/xtabs(~subject,data=no)
dprime_score = qnorm(Hrate) - qnorm(Frate)
return(dprime_score)
}