What is wrong with the following model:
# simulated data yr = 2; vg = 4, fm = 5, gen = 5
mbb <- data.frame( trait1 = rnorm(200, 15, 4),yr = c(rep (1:2, each = 100)),
vg = c(rep(rep(1:4, each =25), 2)), fm = rep(rep(1:5, each = 5), 8),
gen = sample(c(1:5), 200, replace = T))
require(lme4)
lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fm:vg), data= mbb)# full model
I am getting following error:
Error in validObject(.Object) :
invalid class "mer" object: Slot Zt must by dims['q'] by dims['n']*dims['s']
In addition: Warning messages:
1: In fm:vg : numerical expression has 200 elements: only the first used
2: In fm:vg : numerical expression has 200 elements: only the first used
The problem is precisely that
fmandvgare stored as numeric, not as factors, and solmertries to interpretfm:vgas a sequence operator (see?seq) rather than an interaction operator (see?interaction). You can:convert
fmandvgto factors within the data frame (mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))) [it’s not clear from your setup whether you wantvgandfmto be factors or continuous predictors … that distinction would be very important, of course … if you want them as continuous predictors, then it’s a bit weird to treat them as factors for the purposes of grouping … ]write the interaction explicitly as
interaction(fm,vg)on the flyconvert to factors on the fly (
(yr+vg+gen|factor(fm):factor(vg)))use Jim M.’s solution
I think these will all work, although I have to admit that I haven’t tested them.