You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:52:04