如何用tbl_regression()对对数转换因变量的线性回归beta系数取指数?
问题描述
我用自然对数转换后的变量作为因变量运行了线性回归,尝试在tbl_regression()中设置exponentiate = T对结果进行逆转换时触发了错误。
未取指数的回归方程:
ln(y) = B₀ + B₁x
这个形式很难解释x每变化1个单位对y的影响。取指数后可得到更易解释的形式——x每变化1个单位时y的百分比变化:
exp(ln(y)) = exp(B₀ + B₁x)
y = exp(B₀)*exp(B₁x)
想问是否有办法让tbl_regression()输出线性回归的指数化beta系数?如果没有,有没有替代方案?
代码示例:
lm_cmv <- lm( log(cmv) ~ edu + covariates, data = analytic_sample ) %>% tbl_regression( exponentiate = T )
错误信息:
Error in `tidy_and_attach()`: ! `exponentiate = TRUE` is not valid for this type of model.
解决方案
方法一:手动修改表格内容实现指数化
tbl_regression()默认不支持线性模型的exponentiate参数,你可以先生成基础表格,再手动对系数和置信区间做指数转换:
library(gtsummary) library(dplyr) # 拟合线性回归模型 lm_cmv <- lm(log(cmv) ~ edu + covariates, data = analytic_sample) # 生成基础汇总表格 base_tbl <- tbl_regression(lm_cmv) # 指数化系数与置信区间,并修改表头说明 exp_tbl <- base_tbl %>% modify_table_body( ~ .x %>% mutate( estimate = exp(estimate), conf.low = exp(conf.low), conf.high = exp(conf.high) ) ) %>% modify_header(estimate = "**倍数变化 (95% CI)**") print(exp_tbl)
方法二:先提取模型结果再构建表格
用broom::tidy()提取模型系数并提前指数化,再传入tbl_regression():
library(gtsummary) library(broom) library(dplyr) lm_cmv <- lm(log(cmv) ~ edu + covariates, data = analytic_sample) # 提取模型结果并指数化系数、置信区间 tidy_exp <- tidy(lm_cmv, conf.int = TRUE) %>% mutate(across(c(estimate, conf.low, conf.high), exp)) # 基于处理后的结果构建表格 tbl_regression( x = tidy_exp, exponentiate = FALSE, label = list(edu = "教育水平", covariates = "协变量") # 可自定义变量标签 )
方法三:改用对数链接的广义线性模型
用glm()拟合带对数链接的高斯模型,其结果和lm(log(y)~...)完全一致,但tbl_regression()支持对这类模型设置exponentiate = TRUE:
glm_cmv <- glm( cmv ~ edu + covariates, data = analytic_sample, family = gaussian(link = "log") ) %>% tbl_regression(exponentiate = TRUE) print(glm_cmv)
内容的提问来源于stack exchange,提问作者Amina Gaye
相关产品推荐
相关产品推荐

