如何在R中做一个具有多个因变量的广义线性模型?

机器算法验证 r 广义线性模型 多重回归
2022-02-14 07:18:02

我有六个因变量(计数数据)和几个自变量,我看到在 MMR 中,脚本是这样的:

my.model <- lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn)

但是,由于我的数据是计数,我想使用广义线性模型,我尝试了这个:

my.model <- glm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn, family="poisson")

并出现此错误消息:

Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 
  (subscript) logical subscript too long`

谁能解释我这个错误信息或解决我的问题的方法?

2个回答

简短的回答是这样glm不行。如果你给它一个矩阵,lm它将创建mlm对象,但这在泛型中没有得到广泛支持,无论如何也不能轻易推广到,glm因为用户需要能够为逻辑回归模型指定双列因变量。

解决方案是分别拟合模型。假设您的 IV 和 DV 存在于一个名为 data.framedd中,并按照您的问题中的方式进行标记。下面的代码列出了一个拟合模型的列表,这些模型由它们使用的因变量的名称索引:

models <- list()
dvnames <- paste("DV", 1:6, sep='')
ivnames <- paste("IV", 1:n, sep='') ## for some value of n

for (y in dvnames){
  form <- formula(paste(y, "~", ivnames))
  models[[y]] <- glm(form, data=dd, family='poisson') 
}

要检查结果,只需将常用函数包装在 a 中lapply,如下所示:

lapply(models, summary) ## summarize each model

毫无疑问,在 R 中有更优雅的方法可以做到这一点,但这应该可行。

有人告诉我存在可以解决您的问题的多元广义线性(混合)模型。我不是这方面的专家,但我会看看SABRE 文档这本关于多变量 GLM 的书。也许他们会帮助...