首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在R中执行多变量glm (多个DV和多个IV)?

有没有办法在R中执行多变量glm (多个DV和多个IV)?
EN

Stack Overflow用户
提问于 2021-02-02 03:12:29
回答 1查看 250关注 0票数 0

我是R的新手,我想对我的数据集进行多变量和单变量分析

数据集示例:

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

代码语言:javascript
复制
model <- glm(df[,c(9:40]~df[,c(4:8)], family="poisson", data=df)

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

这就是我要为单变量分析做的事情

代码语言:javascript
复制
model_univariate <- glm(Protein1 ~ age + bmi+ gender+ group, family="poisson", data=data)

我尝试了一个for循环来尝试,这样我就不必为每个蛋白质逐个输入公式,但我总是得到一个错误

代码语言:javascript
复制
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)出错:模型公式中的术语无效

EN

回答 1

Stack Overflow用户

发布于 2021-02-04 21:05:51

请在以后提供示例数据集。假设我们有这样的东西:

代码语言:javascript
复制
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:

代码语言:javascript
复制
DV = colnames(df)[9:40]
IV = colnames(df)[5:8]

您尚未正确定义多变量响应。如果意图是一次性拟合所有响应,但又保持每个响应的分离,那么您的多响应模型只适用于lm,而不适用于您需要用于泊松的glm

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

单变量:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65998753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档