这是我第一次使用lmer
,我不确定我做的是否正确。我的数据是一个重复的测量数据与变量ID,季节,开始时间响度和列车。在几个位置(ID)测量响度(以db为单位)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)))
我将季节从0到3重新编码,Start_Time从0到2(早上、中午、下午),并将它们转换为因子。
当我试图从层次线性模型的Angular 来理解我的模型时,变量Loudness、Season和Start_Time将是我的1级变量,Train以及ID将是我的2级变量。
我现在试图用R来计算下面的模型,这样我就可以对季节产生随机效应。还应计算开始时间和季节之间的交互作用,并且列车还存在另一个交互作用,因为它是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转换成一个数值变量时,我没有得到一个警告。我的问题是:当我把季节转换成一个数值变量时,会有什么不同呢?当季节是一个因素时,为什么R不计算模型呢?假设Train是我的2级变量,我是否正确地定义了模型?我很期待你的回答:)
1条答案
按热度按时间hxzsmxv21#
基本问题是每个Season/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方差相同,每对季节效应的相关性相同),这可能仍然是合理的