r - 如何从 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))
解决方案
要获得每个变量的对数优势比的较低 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
推荐阅读
- javascript - 检测 JavaScript 中动态创建的输入的 id
- demandware - 在内容资产中创建会话重定向链接
- flutter - 键盘出现时颤振状态重建
- javascript - Nuxt.js 根据嵌套更改数据属性中 json 数据的格式
- java - 单击主按钮时Android显示按钮
- javascript - 根据正则表达式,我在发送时用 Keyup 事件捕获的数值没有正确写入内部输入
- python - 如何结合动画功能使用matplotlib按钮?
- excel - VBA msgbox 是/否 然后做点什么
- bash - 如何解析“whereis”输出以获取 Linux 中所需的路径?
- jquery - 如何将坐标对从字符串转换为谷歌地图多边形的数组?