I have an R data frame greatly simplified as:
id <- rep(1:2, c(6,8)) correct <- sample(0:1,14,TRUE) phase <- c(rep("discr",3),rep("rev",3), rep("discr",4),rep("rev",4)) dat <- data.frame(id,correct,phase)
with id as my subjects (in reality I have a lot more than 2), correct = answers encoded as incorrect (0) or correct (1), and phases Discrimination and Reversal (inside the subject).
I want to perform a logical regression as
glm(correct~phase, dat, family="binomial")
additional predictors may be added later. However, since I have a different amount of data for each object, I would like to execute glm() separately for each object, and then compare the coefficients with ANOVA for group effects. I would like to do this in a for loop as
for(i in seq_along(dat$id)){ my_glm[i] <- glm(correct~list,dat[dat$id==i,],family="binomial") }
but keep getting the error message
>Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels.
I checked my data and there is no factor that contains only one level. All subjects gave at least one incorrect and one correct answer, and all took part in Discrimination and Recovery. This function works outside the loop when I specify a specific object.