如何从 lrm() 获取 OR 和 95%CI?

How to get the OR and 95%CI from lrm()?

我想使用 rms 包来构建逻辑模型,但是如何从 lrm() 中获得 95%CI 的 OR?我只知道如何获取 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))

要获得每个变量的对数优势比的较低 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