待解决问题:
做代谢组学分析,一共有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:一定要知其所以然。
这篇博客主要介绍了如何使用R语言进行批量多分类logistic回归,通过multinom()函数实现147次回归分析,每个代谢物对应多个分组的OR值。文章强调了理解模型原理和参数设置的重要性,并分享了学习资源与心得。
1214

被折叠的 条评论
为什么被折叠?



