这是我第一次与
lmer
一起工作,我不确定我是否做对了。
我的数据是具有变量 ID、季节、开始时间响度和训练的重复测量数据。响度(以 db 为单位)在多个位置 (ID) 测量了 4 次,每个季节和不同时间测量一次。火车给出了从每个位置到最近的火车站的距离。我的数据中有一些缺失值,我删除了,所以这不是一个平衡的设计。
举个例子:
df <- data.frame(Id = c(1, 1, 1, 1, 2, 2, 2, 2),
Loudness = c(12.4, 12.5, 35.4, 23.3, 12.5, 34.5, 14.5, 16.3),
Season = c("Spring", "Summer", "Fall", "Winter", "Spring", "Summer", "Fall", "Winter"),
Start_Time = c("09:32:23", "09:37:38", "10:12:34", "11:38:48",
"12:38:35", "12:38:50", "14:49:56", "13:38:45"),
Train = c(rep(12.4, 4), rep(18.4, 4)))
我将 Season 从 0 重新编码为 3,将 Start_Time 从 0 重新编码为 2(早上、中午、下午),并将它们都转换为因子。
当我试图从分层线性模型的角度理解我的模型时,变量 Loudness、Season 和 Start_Time 将是我的 1 级变量,而 Train 和 ID 将是我的 2 级变量。
我现在正在尝试在 R 中计算以下模型,以便我可以对 Season 产生随机效果。 Start Time 和 Season 之间的相互作用也应该被计算,并且还有另一个 Train 的相互作用,因为它是一个 2 级变量。
Model <- lmer(Loudness ~ Season * Start_Time * Train + (Season|ID), data = df)
但是在计算这个时我得到以下警告:
Error: number of observations (=2748) <= number of random effects (=2920) for term (Season | ID); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable
我意识到当我将 Season 转换为数值变量时,我没有收到警告。 我的问题是:当我将 Season 转换为数值变量时,它有什么区别?当 Season 是一个因素时,为什么 R 不计算模型。考虑到我假设 Train 是我的 2 级变量,我是否也正确地定义了模型? 我期待着您的回答 :)。
基本问题是每个季节/ID 组合只有一个观察值,因此您的随机效应与残差方差(每个观察值也有一个随机 iid 高斯值)混淆。如果您将 Season 转换为数值变量,您将拟合一个随机斜率模型,该模型每组只有两个参数(斜率和截距),而不是 4 个(截距和三个季节性对比参数)。
模型在其他方面看起来很合理。
多种选择:
control = lmerControl(check.nobs.vs.nRE = "ignore")
(可能还包括check.nobs.vs.nlev = "ignore"
)来忽略混杂;您的方差估计将是非唯一的,但其他一切可能都可以正常工作lmer
是不可能的,但是您可以使用 glmmTMB
(dispformula = ~0
) 或者您可以使用 lme
(lmeControl(sigma = [small non-zero number])
) 或 blme
(将 resid.prior
设置为一个小的非零值值)Season
项(即(1|ID)
);您的模型现在将对应于 齐次复合对称 模型(每个季节的 RE 方差相同,每对季节性效应具有相同的相关性),这可能仍然是合理的