【问题标题】:How to run a generalized linear mixed model (GLMM) with multiple random factors?如何运行具有多个随机因素的广义线性混合模型 (GLMM)?
【发布时间】:2019-09-10 17:55:29
【问题描述】:

我想使用 lme4 包中的函数 glmer 运行具有多个随机因子的 GLMM。

我有一个这样的海洋垃圾数据集:

  • count density:数字
  • year:分类,两个级别
  • round: 分类(每年都有自己的六轮,所以轮是 - 嵌套在年份中)
  • monitoring site:分类(每个监测点每年测量6次数据,所以与监测点交叉)
  • waters:分类(每个水域有几个不同的站点,所以监控站点嵌套在水域中)
  • material: 分类

我想知道海洋垃圾的计数密度在年份、轮次、水域和材料之间是否存在显着差异。所以我输入了这个:

glmm <- glmer(count density~material*(1|year/round)*(1|waters/monitoring sites),
    family=Poisson)

请告诉我我的公式是否正确?

当我输入以下内容时,我无法从模型中得到任何信息:

glmm

它说:

错误:找不到对象“glmm”

那么glmer的正确使用方法是什么?

【问题讨论】:

  • 您一定遇到了几个错误。他们是什么?更多问题/cmets:(1)其中带有空格的变量是有问题的(至少必须用反引号保护它们); (2) 是“泊松”(小写),而不是“泊松” (3) 术语应与+ 而非* 连接
  • 还要注意,如果每个monitoring site都有自己的层级(自己的名字),那么就不需要在waters内嵌套,那是多余的。

标签: r syntax lme4


【解决方案1】:

至少(如果您的变量名称中确实有空格,这通常是一个坏主意,请参阅例如this question)您应该尝试:

glmm <- glmer(`count density` ~ material+(1|year/round)+
              (1|waters/`monitoring sites`), 
              family=poisson)

另请注意,year 不能作为随机效应很好地发挥作用,因为它只有两个级别(很难从仅两个观察值中估计方差:参见例如 these simulations),所以也许

glmm <- glmer(`count density` ~ material+year+(1|year:round)+
               (1|waters/`monitoring sites`), 
              family=poisson)

会更好。

【讨论】:

  • “年份不能作为随机效应发挥作用,因为它只有两个级别”——因为?
  • 可能是因为您仅基于 2 个观察值来估计 year 的方差。从理论的角度来看,这也没有什么意义:年份并不是从更大的年份中随机抽取的。
  • 为什么投反对票?如果明确提出问题,我们很乐意尝试解决问题......
  • @FransRodenburg 两个级别并不意味着两个观察。我也不同意这没有意义(必然)。你可以设计一个有意义的情况。
  • 但是两个水平是估计年际方差问题的相关值。 @thc,我同意将年份用作随机效应可能是有意义的。但两年后不太可能实用(请参阅上面链接的模拟,以及 GLMM 常见问题解答,以及关于 r-sig-mixed-models 的许多讨论)。
猜你喜欢
  • 2021-12-25
  • 2021-12-25
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2018-04-04
相关资源
最近更新 更多