批量多分类logistic回归并导出结果

it2026-03-11  3

待解决问题:

做代谢组学分析,一共有147种代谢物,需要每个单独和其他选定的协变量一起放入线性回归模型中,依次替换147种代谢物,完成147次回归分析。


实现步骤:

R语言

1、 数据预处理:excel和spss 2、 for循环 3、 multinom() 线性回归 4、 导出结果分析


步骤1、2、4参见我之前写的《批量线性回归并整理导出结果到word文档》,这里只讲批量multinom() 线性回归的核心步骤。

具体操作:

3. multinom() 线性回归

timo <- data.frame() #先创建一个空数据框,否则后面<- 赋值会提示找不到timo for (q in c(222:368)){ result <- multinom(tdata$Y ~ tdata[,q]+tdata$age) z <-summary(result)$coefficients/summary(result)$standard.errors p <- (1-pnorm(abs(z),0,1))*2 out <- data.frame(cbind(names(tdata)[q], t(summary(result)$coefficients[,2]), t(p[,2]))) timo <- rbind(out, timo) }

详细解释

z <-summary(result)$coefficients/summary(result)$standard.errors p <- (1-pnorm(abs(z),0,1))*2 #因为nnet的multinom不提供p值,所以要自己计算 t(summary(result)$coefficients[,2]) #提取coefficient t(p[,2])) #提取p值

这两个代码一定要反复确认,最先跑好之后,summary(result)出来,一一对应着看几遍。因为你是多分类,所以每个代谢物底下会有多个分组,所以每个代谢物对应几个OR。注意如果没有t(),出来的是数组array,而不会是matrix。 建议自己多修改几个参数,对照着结果多看几遍,就会明白其中的原理了。

补充一个,如果想要认为选择对照组,可以用relevel

ml$prog2 <- relevel(ml$prog, ref = "academic") #注意relevel只能用于无序多分类排序,即,prog的值不可一世有序的数字,可以是字符

心得体会:

放几条学习链接:

R多分类logistic回归的原理和思路:MULTINOMIAL LOGISTIC REGRESSION USING R 这个写的非常好(感激不尽!):Multinomial Logit Model (MNL) 模型R语言nnet包multinom函数实现实例

“懒人”改变世界,懒得做单调重复的事情,所以耐心用了一天的时间写好代码,一键操作,减少出错,心情舒畅。 PS:一定要知其所以然。

最新回复(0)