本文深度进行了有序分类(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 = TRUE
和y = TRUE
是为了保存模型拟合的预测变量和响应变量的数据,便于后续分析。
选择合适的包
选择哪一个 R 包通常取决于你的具体需求,如是否需要特定的链接函数,模型诊断的详细程度,以及你对输出和结果表示的偏好。MASS
和ordinal
是开始的好选择,因为它们提供了对有序 Logistic 回归较为全面的支持。对于更高级的用户,VGAM
和rms
提供了更多的定制化选项和模型诊断工具。
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) * 2
tibble::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), 可以勾选复选框,实现一键填补:
进行多套填补后,合并多套回归分析结果如下:
另外,还能显示回归系数:
最后,软件自动生成所有的源代码,并不是示例代码,而是针对导入的数据集,生成直接可以运行结果的全套代码:
导入数据后,只要在命令框输入中文:
用differ做应变量,age和sex做自变量,进行有序分类的Logistic回归
输入这句话后,点击分析按钮,就会得到分析结果: