有序分类 Logistic 回归 R 包横向测评及自动代码生成 AI 工具介绍

文摘   科学   2024-05-05 16:30   上海  


本文深度进行了有序分类(Ordered Logistic)回归的 R 代码包横向测评,并介绍了如何利用现代化的工具简单完成有序分类 Logistic 回归的各种分析并通过鼠标点击,或通过 AI 自然语言命令自动生成 R 代码,文本避免使用专业的数理统计语言和公式,仅用临床医生看得懂的语言进行描述

有序分类 Logistic 回归(Ordinal Logistic Regression),又称为有序回归,是用来处理因变量是有序分类的统计分析方法。这种回归模型适用于因变量是有序的离散型变量,而自变量可以是连续的、离散的,或者两者的组合。


假设我们在研究一个药物对疾病进程的影响。疾病进程可以分为轻微、中等和严重三个有序等级。研究的目的是分析药物剂量(一个连续变量)和患者年龄(另一个连续变量)对疾病进程的影响。


在这个例子中,我们可以建立一个有序 Logistic 回归模型,其中:

  • 因变量 𝑌 是疾病的进程(轻微、中等、严重)。

  • 自变量 𝑋 包括药物剂量和患者年龄。


通过这个模型,我们可以估计不同药物剂量和患者年龄组合下,疾病进展到各个严重程度的概率。这有助于医生更好地理解药物剂量对疾病控制的效果,并为每个患者提供更个性化的治疗建议。


在R中实现有序Logistic回归,有几个常用的包提供了相应的函数。这些包不仅提供模型拟合的功能,还有模型检验、诊断和预测等功能。下面是一些广泛使用的R包和对应的函数:


1.MASS


MASS包中的polr函数(Proportional Odds Logistic Regression)是实现有序Logistic回归的常用工具。这个函数提供了一个灵活的接口,可以指定链接函数,默认使用的是对数累积链接函数(logit)。

library(MASS)model <- polr(ordered_response ~ predictors, data = data, Hess = TRUE)

在这个示例中,ordered_response是有序因变量,predictors是影响变量,data是数据集,Hess = TRUE选项使得函数返回Hessian矩阵,有助于后续的标准误和置信区间的计算。


2.ordinal


ordinal包提供了更加专业化的有序回归模型功能,特别是clm函数(Cumulative Link Models)。这个包不仅支持标准的对数累积链接模型,还支持其他类型的链接函数,如probit和cloglog。

library(ordinal)model <- clm(ordered_response ~ predictors, data = data, link = "logit")

此处的link参数允许选择不同的链接函数,提供了模型构建的灵活性。


3.VGAM


VGAM包中的vglm函数(Vector Generalized Linear Models)提供了一个非常灵活的框架来拟合有序Logistic回归,除了标准的对数链接外,还可以应用多种链接函数。

library(VGAM)model <- vglm(ordered_response ~ predictors, family = cumulative(link = "logit"), data = data)

在这个例子中,cumulative是指定有序回归模型,而link = "logit"设置了链接函数。


4.rms


rms包是另一种实现有序Logistic回归的选择,它提供了lrm函数,专门用于拟合逻辑回归模型,包括有序逻辑回归。

library(rms)model <- lrm(ordered_response ~ predictors, data = data, x = TRUE, y = TRUE)

这里的x = TRUEy = TRUE是为了保存模型拟合的预测变量和响应变量的数据,便于后续分析。


选择合适的包


选择哪一个 R 包通常取决于你的具体需求,如是否需要特定的链接函数,模型诊断的详细程度,以及你对输出和结果表示的偏好。MASSordinal是开始的好选择,因为它们提供了对有序 Logistic 回归较为全面的支持。对于更高级的用户,VGAMrms提供了更多的定制化选项和模型诊断工具。


MASS 包的 polr 函数为什么不能显示P值?

MASS包中的polr函数用于拟合有序逻辑回归模型,但它默认并不提供 p 值。这是因为在有序逻辑回归中,确定模型系数显著性的统计检验并非直接使用标准的 Wald 检验,而polr函数的输出主要侧重于模型的估计参数和其它统计量。


如果要用 polr 函数得到 P 值,还需要额外的代码:

model <- polr(formula = differ ~ age + sex + extent, data = data)ctable <- coef(summary(model))p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2tibble::enframe(p) %>% knitr::kable()


ordinal包的 clm 函数可以显示P值,但有些自变量放进模型会报错

ordinal包的clm函数(Cumulative Link Model)设计用于有序逻辑回归,并且在输出结果时可以直接提供 p 值,这是因为它内部使用了稳健的统计方法来评估模型系数的显著性。然而,即使clm函数通常在用户体验上比polr函数更加友好,当某些自变量被放入模型中时,它也可能报错,这种情况通常由完全分离(Perfect Separation)和模型不收敛导致的。




如何才能在不用键盘打字的情况下,自动生成有序分类回归的 R 代码,并运行直接得到论文所需的图表呢?可以采用 MSTATA 软件 或 chatSTATA 软件 (www.mstata.com)


进入MSTATA后,选择 “因果推断” - “探索性影响因素研究(经典单因素多因素分析)”

鼠标操作界面如下:


点击生成按钮,可以得到以下结果:


如果要使用多重填补(multiple imputation), 可以勾选复选框,实现一键填补:




进行多套填补后,合并多套回归分析结果如下:


另外,还能显示回归系数:





最后,软件自动生成所有的源代码,并不是示例代码,而是针对导入的数据集,生成直接可以运行结果的全套代码:




软件二:使用人工智能统计软件 chatSTATA  用语言下命令进行分析:

软件链接 www.mstata.com


导入数据后,只要在命令框输入中文:


用differ做应变量,age和sex做自变量,进行有序分类的Logistic回归



输入这句话后,点击分析按钮,就会得到分析结果:


真实世界数据
介绍真实世界数据,真实世界研究和真实世界证据
 最新文章