以下模型有什么问题:
# 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 我收到以下错误:
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发布于 2011-10-26 02:14:38
问题恰恰在于fm和vg被存储为数字,而不是因子,因此lmer试图将fm:vg解释为序列操作符(请参见?seq),而不是交互操作符(请参见?interaction)。您可以:
fm和vg转换为数据框内的因子(mbb <- transform(mbb,vg=factor(vg),fm=factor(fm)))从您的设置中尚不清楚您希望vg和fm是因子还是连续预测因子...当然,这种区别是非常重要的。如果你想要它们作为连续的预测因子,那么为了分组的目的而将它们作为因素来对待是有点奇怪的……interaction(fm,vg) on the fly即时转换为因子((yr+vg+gen|factor(fm):factor(vg)))
我认为这些都会起作用,尽管我必须承认我还没有测试过它们。
发布于 2011-10-26 01:56:57
将交互建模为随机效应的一种可能的解决方案是将交互项作为附加列添加到mbb数据帧中。
mbb$fmvg <- with(mbb, interaction(fm,vg, sep=":"))然后模型就变成了
lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fmvg), data= mbb)https://stackoverflow.com/questions/7892944
复制相似问题