【发布时间】:2016-03-17 05:59:44
【问题描述】:
我有一些纵向数据,我想从中获得指定时间的预测均值。该模型包括 2 项,它们的交互作用和时间变量的样条项。当我尝试获得预测的平均值时,我得到“错误在 mm %*% fixef(m4) : non-conformable arguments”
我使用了 lmer 的睡眠数据集来说明我的问题。首先,我导入数据并为我的交互创建一个变量“年龄”
sleep <- as.data.frame(sleepstudy) #get the sleep data
# create fake variable for age with 3 levels
set.seed(1234567)
sleep$age <- as.factor(sample(1:3,length(sleep),rep=TRUE))
然后我运行我的 lmer 模型
library(lme4)
library(splines)
m4 <- lmer(Reaction ~ Days + ns(Days, df=4) + age + Days:age + (Days | Subject), sleep)
最后,我创建了获得预测均值所需的数据和矩阵
#new data frame for predicted means
d <- c(0:9) # make a vector of days = 0 to 9 to obtain predictions for each day
newdat <- as.data.frame(cbind(Days=d, age=rep(c(1:3),length(d))))
newdat$Days <- as.numeric(as.character(newdat$Days))
newdat$age <- as.factor(newdat$age)
# create a matrix
mm<-model.matrix(~Days + ns(Days, df=4) + age + Days:age, newdat)
newdat$pred<-mm%*%fixef(m4)
此时我得到了错误: mm %*% fixef(m4) 中的错误:参数不一致
我可以使用 predict 来获得手段
newdat$pred <- predict(m4, newdata=newdat, re.form=NA)
效果很好,但我希望能够计算置信区间,所以我需要一个一致的矩阵。
我在某处读到问题可能是 lmer 创建了别名(我找不到那个帖子)。此评论是关于无法将 effect() 用于类似任务的问题。我不太明白如何克服这个问题。此外,我记得那个帖子有点旧,希望别名问题可能不再相关。
如果有人对我可能做错的地方提出建议,我将不胜感激。谢谢。
【问题讨论】:
-
在您给出的示例中,您会收到消息
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient。这意味着模型中的固定效应数量少于mm中的数量,这就是您收到错误消息的原因 -
是的,aosmith,我确实收到了这条信息。如果模型只包含样条,它就会消失;即:m4
-
抱歉,更正,它在单变量(仅样条)模型中消失了,但无论如何该错误与样条的使用有关。
-
你看我的回答了吗...?
-
是的,@BenBolker,我确实读过它——我遇到了一些需要先解决的错误。我已经直接回复了你的回答。此外,我确定了这些示例数据中的 2 个奇怪之处,它们需要新的帖子,但为了完整起见,我在此注明:1)我认为使用种子每次都会产生相同的年龄水平,但奇怪的是,事实并非如此,因此您的评论“## 下一行恰好只采样 2 和 3 ...”; 2) 当因子变量使用字母顺序与编号顺序不同的标签时,predict 和此方法会给出不同的结果。
标签: lme4 splines model.matrix