首页 > 解决方案 > 如何从 lrm() 获得 OR 和 95%CI?

问题描述

我想使用rms包来构建逻辑模型,但是我怎样才能得到 OR 的 95%CIlrm()呢?我只知道如何获得 OR 的值。

我的代码如下:

n <- 1000    # define sample size
set.seed(17) # so can reproduce the results
y              <- rep(0:1, 500)
age            <- rnorm(n, 50, 10)
sex            <- factor(sample(c('female','male'), n,TRUE))
label(age)            <- 'Age'
label(sex)            <- 'Sex'

f <- lrm(y ~ age + sex, x=TRUE, y=TRUE)
f

# OR
exp(coef(f))

标签: rlogistic-regression

解决方案


要获得每个变量的对数优势比的较低 95% 置信区间,请从估计值中减去标准误差的 1.96 倍。对数优势比的置信区间上限是添加到估计值的标准误差的 1.96 倍。当你对这些结果求幂时,你就有了优势比的置信区间。

使用数字 1.96 的原因是标准正态分布的 2.5% 分位数为 -1.96,其 97.5% 分位数为 +1.96。如果您想避免将 1.96 用作“幻数”,则可以改用该qnorm函数(见下文)。

对象的困难lrm在于标准误差不直接存储在模型对象中,而是每次打印到控制台时都会计算出来。但是,您可以通过对属于的成员的矩阵var的对角线求平方根来轻松获得它们:f

sqrt(diag(f$var))
#>   Intercept         age    sex=male 
#> 0.326635446 0.006222249 0.126599055

您可以检查这与模型摘要中的标准错误列是否相同。

因此,要获得优势比及其置信区间的数据框,您可以执行以下操作:

df <- data.frame(variable  = colnames(f$var),
                 OR        = exp(f$coefficients),
                 OR_lower  = exp(f$coefficients + qnorm(0.025) * sqrt(diag(f$var))),
                 OR_upper  = exp(f$coefficients + qnorm(0.975) * sqrt(diag(f$var))),
                 row.names = NULL)

df
#>    variable        OR  OR_lower OR_upper
#> 1 Intercept 1.1107651 0.5855846 2.106953
#> 2       age 0.9990378 0.9869282 1.011296
#> 3  sex=male 0.8935087 0.6971681 1.145144

推荐阅读