lmer:随机因素被视为分组因素?

lmer: Random factor is treated as grouping factor?

我正在尝试使用 lmer 在 R 中创建模型。我有 40 个受试者(在我的代码中为 VPN),每个受试者在 5 分李克特量表上评估三种相关的句子类型(SHSMSP)。 这是数据的样子(对于每个参数,有 40 个评估,为了更清楚起见,我只是在这里缩短了它):

     VPN  parameter evaluation.likert
1     1       SH1      2
2     2       SH1      4
3     3       SH1      5
4     4       SH1      3
...
5     1       SM1      4
6     2       SM1      2
7     3       SM1      2
8     4       SM1      5
...
9     1       SP1      1
10    2       SP1      1
11    3       SP1      3
12    4       SP1      5
...

IMO,我需要将受试者视为随机因素以解释重复测量,这就是我在 R 中使用此代码的原因:

model <- lmer(SH*SM*SP ~ VPN + (1|VPN), data=data)

现在我收到错误消息

number of levels of each grouping factor must be < number of observations (problems: VPN).

为什么 VPN 被视为分组因素,正确的代码是什么?

VPN 被视为分组变量,因为这是您指定的:在随机效应规范 (f|g) 中,变量 g 是分组变量(在您的情况下, f==1 指定截距中的组间差异)。

@Roland 是正确的,您需要重塑数据。您的数据如下所示:

set.seed(101)
dd <- data.frame(VPN=1:40, 
         SH1 = sample(1:5, 40, replace = TRUE),
         SP1 = sample(1:5, 40, replace = TRUE),
         SM1 = sample(1:5, 40, replace = TRUE))

在 R 中重塑数据的方法有很多种,我会这样做:

dd_long <- tidyr::pivot_longer(dd,
        cols = -VPN,  ## VPN is the ID variable
        names_to = "type",
        values_to = "value")
  • 如果您想将李克特值视为数字(可能是个坏主意),最简单的模型是
lme4::lmer(value ~ 0 + type + (1|VPN))

这适合每个句子类型的单独截距。

  • 我看不出尝试评估句子类型之间的相互作用有何意义 (SM*SH*SP),因为根据我们可以看到的数据,每个个体的观察都是一个特定的个体观察一个特定的句子类型——不止一种句子类型永远不会适用于单个观察……?也许您没有向我们展示您数据的某些方面?
  • 最大模型也允许个体对句子类型的反应存在差异,反应差异具有个体内部相关性:
lme4::lmer(value ~ 0 + type + (type|VPN),
   data = data_long)

但是,对于 40 个受试者,您可能无法拟合 6 个协方差参数(3 种类型 → (3*(3+1)/2 个参数)。参见 Barr 等人 2013 年,Matuschek 等人 2017 年 ...

正如@Roland 所说,将这些数据作为 ordinal 数据处理可能更好,例如使用 累积 link 模型:

library(ordinal)
clmm(value ~ 0 + type + (type|VPN), data = data_long)