当前位置: 首页 > article >正文

R语言进行无序多分类Logistic回归

在临床研究中,接触最多的是二分类数据,如淋巴癌是否转移,是否死亡,这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程,可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据,今天咱们来演示一下怎么使用R语言进行多分类结局逻辑回归分析。

在这里插入图片描述
咱们先导入数据和R包

library(here)
library(tidyverse)
library(haven)
library(gtsummary)
library(VGAM)
library(kableExtra)
library(HSAUR)
library(reshape2)
setwd("E:/公众号文章2024年/R无序多分类Logistic回归")
load("hsbdemo.rda")
ms<-hsbdemo

在这里插入图片描述
这个数据是高中生毕业后的一个就业计划数据,Prog是结局变量,是个三分类变量,预测变量是ses社会经济地位,其他的是一些协变量。

变量比较多,咱们选出需要的变量,并且把字符变量转成因子

ms <- ms %>% 
  select(ses, prog, female , write ) %>% 
  mutate(across(where(is.labelled), as_factor)) 

在这里插入图片描述
咱们以prog为分类变量,绘制个基线表,了解相关数据分布

ms %>%
  tbl_summary(by = prog,
              statistic = list(all_continuous() ~ "{mean} ({sd})", 
                               all_categorical() ~ "{n} ({p}%)"),
              type = list(where(is.logical) ~ "categorical")) %>% 
  modify_caption("**Table 1. Survey Participant Characteristic**")  %>%
  modify_header(label ~ "**Variable**") %>%
  modify_spanning_header(c("stat_1", "stat_2", "stat_3") ~ "**Baseline tables for three types of projects**") %>%
  modify_footnote(all_stat_cols() ~ "Mean (SD) or Frequency (%)") %>%
  bold_labels() %>%
  as_gt()

在这里插入图片描述
我们以academic为参考,建立新的变量

ms <- ms %>% 
  mutate(prog2 = fct_relevel(prog, 
                               c("academic", 'general', 'vocation')))
levels(ms$prog2)

在这里插入图片描述
更改了参考类别后,咱们使用prog2为结局变量建立无序多分类逻辑回归模型,很多包可以建立这个模型,我这里用vglm包来建,我觉得比较简单点

fit <- vglm(prog2~ ses + write, 
                 multinomial, data = ms)
summary(fit)

在这里插入图片描述
这样结果就出来啦,seslow:1和seslow:2的这两个系数是针对academic这个结局的
还可以做交互效应的,把交互效应打上去就可以啦,我这里就不弄了。

查看系数和可惜区间

b_mlog <- coef(fit )
ci_mlog <- confint(fit)
b_ci_mlog <- data.frame(b_mlog,ci_mlog) %>%
  rename("log odds" = b_mlog, "Lower CI" = X2.5.., "Upper CI" = X97.5..)
b_ci_mlog %>% 
  kbl(digits = 2, booktabs = T, caption = "Log odds from multinomial logistic regression") %>%
  kable_styling(position = "center")

在这里插入图片描述
查看各个结局概率的数据

predict.vgam(fit, type = 'response') %>% 
  head(20)

在这里插入图片描述
构造一个新数据

ms2 <- data.frame(ses = rep(c("low", "middle", "high"), each = 41), write = rep(c(30:70), 
                                                                                   3))
ms2<-predict(fit, newdata = ms2,type = 'response') %>% 
  cbind(ms2)

转化数据

ms3 <- melt(ms2, id.vars = c("ses", "write"), value.name = "probability")

在这里插入图片描述
最后绘图

ggplot(ms3, aes(x = write, y = probability, colour = ses)) + geom_line() + facet_grid(variable ~ 
                                                                                        ., scales = "free")

在这里插入图片描述
表明随着write增加,不同的经济基础转向各个计划的概率不同。

参考文献

  1. https://xianxiongma.github.io/Clinical-model/chapter2/chapter2.html
  2. https://bookdown.org/drki_musa/dataanalysis/multinomial-logistic-regression.html

http://www.kler.cn/news/304971.html

相关文章:

  • 五星级可视化页面(24):管线管路流程图可视化大屏。
  • 文档智能:OCR+Rocketqa+layoutxlm
  • Maven下载安装
  • 如何将镜像推送到docker hub
  • 【C++ 设计模式】单例模式的两种懒汉式和饿汉式
  • 使用transform对html的video播放器窗口放大
  • 基于51单片机的电饭锅控制系统proteus仿真
  • DroidBot: A Lightweight UI-Guided Test InputGenerator for Android论文学习
  • Apache SeaTunnel Zeta 引擎源码解析(二) Client端的任务提交流程
  • 【Prompt Engineering:思维树 (ToT)、检索增强生成 (RAG)、自动推理并使用工具 (ART)】
  • Nginx的使用场景:构建高效、可扩展的Web架构
  • 77-java 装饰器模式和适配器模式区别
  • PDF扫描版文字识别OCR
  • docker+docker-compose+gitlab
  • CentOS 入门
  • 深度解析:云原生环境下Docker部署Doris数据库
  • XMOJ3376 结界
  • 深度神经网络
  • Django REST framework 实现缓存机制以优化性能
  • C/S架构和B/S架构哪个更好用一些?
  • Spire.PDF for .NET【文档操作】演示:创比较 PDF 文档
  • 【C++】——string(模拟实现)
  • 基于 ROS 的Terraform托管服务轻松部署Stable Diffusion
  • 逆向学习系列(三)adb的使用
  • 打造智能数据分析平台:基于 Flask 的数据处理与模型精度验证系统
  • 使用 Docker 进入容器并运行命令的详细指南
  • GANs-生成对抗网络
  • intellij idea创建java项目
  • MinGW探源:名称背后的故事、发音指南与历史沿革
  • (179)时序收敛--->(29)时序收敛二九