r语言 - ( "offset"问题?拟合泊松混合效应模型时出现错误消息(PIRLS 循环导致 NaN 值)



我试图使用泊松混合效应模型来检验在三种条件下多次阅读英语单词(words, N =8,每个单词重复10次)的效果(因为每个单词有多条路径)。在我的研究中,试验有不同的持续时间,因为每个参与者都没有时间限制地自由阅读文本。然而,当我加上"trial_time"时;在模型中,出现了如下的错误。我可以知道为什么会出现错误吗?我可以知道我的模型是否有问题吗?当我每次添加这个偏移函数时,这个错误似乎都会发生。

研究设计:受试者间设计,每位受试者随机分为三组,阅读8个英语单词。预测指标:阅读状况(分类,n=3)结果变量:注视次数(眼睛注视一个英语单词的次数,连续)

Error in (function (fr, X, reTrms, family, nAGQ = 1L, verbose = 0L, maxit = 100L, : 
PIRLS loop resulted in NaN value

我的R命令:

Count_1<- glmer(FIXATION_COUNT~ CONDITION + offset(log(TRIAL_TIME))+ (1|PARTICIPANT) + (1| WORD), family = poisson (link = "log"), data = WORD_DATA)
summary(COUNT_1)

我的部分数据:

PARTICIPANT CONDITION   WORD    COUNT   TRIAL_TIME
1   0   wallow  5   8250
1   0   wallow  0   10801
1   0   wallow      2860
1   0   wallow  0   5384
1   0   wallow      1650
1   0   wallow  0   3096
1   0   wallow  0   423
1   0   wallow  3   4516
1   0   wallow  1   2132
1   0   wallow  0   398
2   0   wallow  1   3037
2   0   wallow  0   2197
2   0   wallow  0   5767
2   0   wallow  1   7233
2   0   wallow  1   6294
2   0   wallow  0   5379
2   0   wallow  0   4448
2   0   wallow      486
2   0   wallow  0   1547
2   0   wallow  1   477
10  1   wallow  2   842
10  1   wallow  0   663
10  1   wallow  4   3150
10  1   wallow  0   2138
10  1   wallow  0   2513
10  1   wallow  0   1759
10  1   wallow      3396
10  1   wallow  0   1499
10  1   wallow  0   842
10  1   wallow  2   658

在我向模型中添加随机效应项(CONTEXT|WORD)后,出现了同样的错误(参与者的CONDITION没有随机斜率,因为每个参与者只暴露于1个条件)

Count_2<- glmer(FIXATION_COUNT~ CONDITION + offset(log(TRIAL_TIME))+ (1|PARTICIPANT) + (1| WORD) +(CONDITION|WORD), family = poisson (link = "log"), data = WORD_DATA)

这是到我的数据集的链接:

这看起来像是一个编程问题,并且可以说是一个"无效"的问题。在glmer(它应该警告你,你的模型中有非有限的偏移量),但它从根本上更像是一个统计问题。

你正在构建的模型假设注视计数与试验时间严格成正比。

  • 如果在试验时间为零时固定计数始终为零,则这些观察结果没有提供任何信息,您可以在拟合模型之前从数据中删除它们。
  • 当试验时间== 0时,如果固定计数总是零,则在模型下这是不可能的结果(当平均值等于零时,泊松样本的非零结果)。(你的数据就是这样;在零审判时间的情况下,非零响应和零响应一样多。)

在数学上,问题是log(0)-Inf,这在某些点上搞砸了计算。

你应该怎么做?这可能是CrossValidated要问的问题。考虑到您的数据中有一小部分是零时间的(4261个完整案例中的101个),您可能会使用offset(log(TRIAL_TIME + 0.5))这样的东西……

最新更新