Reputation: 11
I'm trying to create some simulated data for use in the simr package via the makeLmer function. I'm trying to produce a data set with 110 participants in a 2 x 2 x 2 within subjects factorial model. This makes 156 trials on a computerized task per participant. I keep getting this error:
"Error in model.frame.default(data = newdata, weights = weights, offset = offset, : variable lengths differ (found for 'subject')"
My code is below (sorry for the clunky bits). If anyone knows what I'm doing wrong, any help would be very much appreciated! Thanks so much. Cheers, Tom
#110 participants
subj <- factor(1:110)
## 2 sizes
size<- factor(c("one", "twelve"))
## alcohol prime
alcohol <- factor(c("alcohol", "noalcohol"))
## gender of faces
crowdgender <- factor(c("Male", "Female"))
subj_full <- rep(subj, times = 156)
size_full1 <- rep(rep("one", each=78), 110)
size_full2 <- rep(rep("twelve", each=78), 110)
size_full1<-data.frame(size_full1)
size_full2<-data.frame(size_full2)
size_full2 <- dplyr::rename(size_full2, size_full1 = size_full2)
size_full<-rbind(size_full1,size_full2)
size_full <- dplyr::rename(size_full, size_full = size_full1)
head(size_full)
alcohol_full <- data.frame(rep(rep(alcohol, each = 78), 110))
head(alcohol_full)
#R gave the column a weird name.
alcohol_full <- dplyr::rename(alcohol_full, alcohol_full = rep.rep.alcohol..each...78...110.)
head(alcohol_full)
crowdgender_full1 <- data.frame(rep(rep(rep(crowdgender, each = 39), 110),2))
head(crowdgender_full1)
crowdgender_full <- dplyr::rename(crowdgender_full1, crowdgender_full = rep.rep.rep.crowdgender..each...39...110...2.)
head(crowdgender_full)
## Combine all the variables together into one data frame
covars <- data.frame(subject=subj_full, size= size_full,
alcohol =alcohol_full, crowdgender=crowdgender_full)
covars
#set fixed effect sizes (intercept and slopes)
fixed<-list(c(.1, .2, .15, .6, .9, .3, .12, .25))
#random intercept for participants
rand<-1
#residual variance
res<-2.5
#make model
model<-makeLmer(y ~ size*alcohol*crowdgender + (1|subject), fixef = fixed, VarCorr = rand, sigma = res, data = covars)
summary(model)
Upvotes: 1
Views: 373
Reputation: 11
install.packages("simr") library(simr)
#5 participants
subj <- factor(1:5)
## 2 sizes
size<- factor(c("one", "twelve"))
## alcohol prime
alcohol <- factor(c("alcohol", "noalcohol"))
## gender of faces
crowdgender <- factor(c("Male", "Female"))
#creates all combinations
data <- expand.grid(subject = factor(1:5), size = size, alcohol = alcohol, crowdgender = crowdgender)
#add correct number of repetitions per trial type; in this experiment, there were 156 trials;
#the exact number of trials within each type was randomized to approximately 19 per type
data_rep <- data[rep(seq_len(nrow(data)), each = 19),]
covars<-data_rep
#set fixed effect sizes from Experiment 1 (intercept and slopes)
fixed<-c(0.23, 0.16, 0.59, 0.67, -0.08, -0.02, -0.42, 0.06)
#random intercept for participants
rand<-13.08
#residual variance
res<-7.74
#make model
model<-makeLmer(y ~ size*alcohol*crowdgender + (1|subject), fixef = fixed, VarCorr = rand,
sigma = res, data = covars)
summary(model)
model_150subs <- extend(model, along="subject", n=150)
model_150subs
#test power for 3-way based on 3 different effect sizes.
fixef(model_150subs)["sizetwelve:alcoholnoalcohol:crowdgenderMale"] <- 0.50 #change effect sizes 19%
fixef(model_150subs)["sizetwelve:alcoholnoalcohol:crowdgenderMale"] <- 0.75 #change effect sizes 40%
fixef(model_150subs)["sizetwelve:alcoholnoalcohol:crowdgenderMale"] <- 1.00 #change effect sizes 62%
#run this after each "fixef" command:
sim <- powerSim(model_150subs, fixed("sizetwelve:alcoholnoalcohol:crowdgenderMale", "t"), nsim = 100, seed = 888)
sim
fixef(model_150subs)["sizetwelve:alcoholnoalcohol"] <- 0.50 #change effect sizes 46%
fixef(model_150subs)["sizetwelve:alcoholnoalcohol"] <- 0.75 #change effect sizes 82%
fixef(model_150subs)["sizetwelve:alcoholnoalcohol"] <- 1.00 #change effect sizes 98%
sim <- powerSim(model_150subs, fixed("sizetwelve:alcoholnoalcohol", "t"), nsim = 100, seed = 888)
sim
fixef(model_150subs)["alcoholnoalcohol:crowdgenderMale"] <- 0.50 #change effect sizes 47%
fixef(model_150subs)["alcoholnoalcohol:crowdgenderMale"] <- 0.75 #change effect sizes 79%
fixef(model_150subs)["alcoholnoalcohol:crowdgenderMale"] <- 1.00 #change effect sizes 94%
sim <- powerSim(model_150subs, fixed("alcoholnoalcohol:crowdgenderMale", "t"), nsim = 100, seed = 888)
sim
fixef(model_150subs)["sizetwelve:crowdgenderMale"] <- 0.50 #change effect sizes 49%
fixef(model_150subs)["sizetwelve:crowdgenderMale"] <- 0.75 #change effect sizes 77%
fixef(model_150subs)["sizetwelve:crowdgenderMale"] <- 1.00 #change effect sizes 94%
sim <- powerSim(model_150subs, fixed("sizetwelve:crowdgenderMale", "t"), nsim = 100, seed = 888)
sim
fixef(model_150subs)["sizetwelve"] <- 0.50 #change effect sizes 65%
fixef(model_150subs)["sizetwelve"] <- 0.75 #change effect sizes 93%
fixef(model_150subs)["sizetwelve"] <- 1.00 #change effect sizes 100%
sim <- powerSim(model_150subs, fixed("sizetwelve", "t"), nsim = 100, seed = 888)
sim
fixef(model_150subs)["crowdgenderMale"] <- 0.50 #change effect sizes 58%
fixef(model_150subs)["crowdgenderMale"] <- 0.75 #change effect sizes 95%
fixef(model_150subs)["crowdgenderMale"] <- 1.00 #change effect sizes 100%
sim <- powerSim(model_150subs, fixed("crowdgenderMale", "t"), nsim = 100, seed =
888)
sim
fixef(model_150subs)["alcoholnoalcohol"] <- 0.50 #change effect sizes 65%
fixef(model_150subs)["alcoholnoalcohol"] <- 0.75 #change effect sizes 94%
fixef(model_150subs)["alcoholnoalcohol"] <- 1.00 #change effect sizes 100%
sim <- powerSim(model_150subs, fixed("alcoholnoalcohol", "t"), nsim = 100, seed
= 888)
sim
Upvotes: 0