【问题标题】:Is there a way to perform multivariate glm in R (Multiple DV and Multiple IV)?有没有办法在 R(多 DV 和多 IV)中执行多变量 glm?
【发布时间】:2021-02-01 19:12:29
【问题描述】:

我对 R 比较陌生,我想对我的数据集进行多变量和单变量分析

数据集示例:

我有 32 个因变量和 4 个自变量都排列在列中。我想做多变量分析,告诉我哪些自变量对我的蛋白质有显着影响。然后我想对每种蛋白质进行单变量分析,看看哪个 IV 对每种蛋白质很重要。我希望这类似于 SPSS 中的多变量分析,例如:

model <- glm(df[,c(9:40]~df[,c(4:8)], family="poisson", data=df)

有没有办法在 R 中做到这一点?

这就是我想做的单变量分析

model_univariate <- glm(Protein1 ~ age + bmi+ gender+ group, family="poisson", data=data)

我尝试做一个for循环来尝试,所以我不必为每种蛋白质一个一个地输入公式,但我一直收到错误

IV <- df[,c(4:8)]

DV <-df[,c(9:40)]

for (y in DV){
form <- formula(paste(y, "~", IV))
models[[y]] <- glm(form, data = df, family="poisson") 
}

错误消息:terms.formula(formula, data = data) 中的错误: 模型公式中的无效项

【问题讨论】:

  • mcglm package 适合 R 中的多元 glms。您还可以使用 rstanarm 拟合贝叶斯多元响应模型。 rstanarm 在后台使用 stan。 stan manual 有关于 stan 中贝叶斯多元响应模型的更多信息。

标签: r statistics glm


【解决方案1】:

请在未来提供一个示例数据集。假设我们有这样的事情:

df = data.frame(matrix(rpois(4000,20),100,40))
colnames(df)[1:4] = c("c1","c2","c3","c4")
colnames(df)[5:8] = paste0("IV",1:4)
colnames(df)[9:40] = paste0("Protein",1:32)

定义 DV 和 IV:

DV = colnames(df)[9:40]
IV = colnames(df)[5:8]

您没有正确定义多变量响应。如果打算一次性拟合所有响应,但将每个响应分开,则您拥有的多响应模型仅适用于lm,不适用于您需要泊松的glm。

如果你想对所有响应建模,考虑到它们之间的关系,@eipi10 建议的包确实是要走的路。

单变量:

models = vector("list",length(DV))
names(models) = DV

for (y in DV){
form <- reformulate(response=y,IV)
models[[y]] <- glm(form, data = df, family="poisson") 
}

models[["Protein1"]]

Call:  glm(formula = form, family = "poisson", data = df)

Coefficients:
(Intercept)          IV1          IV2          IV3          IV4  
  3.3793743   -0.0063736   -0.0094023   -0.0026646   -0.0007955  

Degrees of Freedom: 99 Total (i.e. Null);  95 Residual
Null Deviance:      123.4 
Residual Deviance: 118.4    AIC: 609.6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    相关资源
    最近更新 更多