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


17

我有六个因变量(计数数据)和几个自变量,我看到在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`

任何人都可以向我解释此错误消息或解决我的问题的方法吗?


跟进@Giorgio Spedicato的回答:我们是否假设您确实需要一组模型来分别处理每个因变量,就像lm给它一个矩阵一样?
conjugateprior

我错过了分析的第二部分。在以下情况下的MMR(多元多元回归)中: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) 我必须
胡安

可能刚刚调整了答案以回答这个问题。另外,切记不要在评论中按回车键:-)
conjugateprior

我错过了分析的第二部分。在MMR(多元多元回归)中,之后: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) 我必须像这样使用manova()命令: summary(manova(my.model)) 对方差进行多元分析,并查看每个自变量的含义。那是最终目标。
胡安

没有为这种数据定义manova和anova,因此未提供。但是,如果您想查看每个IV的影响,则提供的回归表summary将为您提供每个DV 的回归表。
conjugateprior

Answers:


11

简短的答案是,glm这样不行。该lm会创建mlm,如果你给它一个矩阵对象,但这不是广泛支持仿制药,反正不能轻易一概而论glm,因为用户需要能够指定逻辑回归模型双列因变量。

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

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') 
}

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

lapply(models, summary) ## summarize each model

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


6

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


2
您会提出一个有趣的观点(+1)。肯定存在多元GLM。另一方面,lm为因变量提供矩阵可能更应被视为语法糖,而不是多变量模型的表达式:如果它多变量(正常)模型,那么错误就是“球形”,即您可以对因变量的每个元素进行单独回归并获得相同答案的方法。
conjugateprior
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.