如何修改R中差异对比的属性或值标签?
问题:R中差异对比回归的系数标签修改需求
在使用contr.sdif做名义自变量的差异对比回归时,模型输出的系数标签(如indepvarB-A)不符合发表规范,需要改成B minus A这类格式,且labelled包无法解决,gtsummary::tbl_regression输出也未自动替换标签。
解决方案1:直接修改模型的系数名称
拟合模型后,手动替换coefficients的名称,再传入tbl_regression:
# 拟合带差异对比的模型 library(MASS) library(gtsummary) set.seed(345) depvar <- rnorm(300,300,60) indepvar <- rep(c("A","B", "C"), times=100) data <- data.frame(depvar, indepvar) data$indepvar <- as.factor(data$indepvar) contrasts(data$indepvar) <- contr.sdif m2 <- lm(depvar ~ indepvar, data = data) # 修改系数名称 names(m2$coefficients) <- c("Intercept", "B minus A", "C minus B") # 生成表格 tbl_regression(m2)
解决方案2:用gtsummary的modify_table_body自定义标签
不用修改模型,直接在tbl_regression后通过modify_table_body替换标签:
# 拟合模型(和之前一样) contrasts(data$indepvar) <- contr.sdif m2 <- lm(depvar ~ indepvar, data = data) # 生成表格并替换标签 tbl_regression(m2) %>% modify_table_body( ~ .x %>% mutate( label = case_when( variable == "indepvar" & row_type == "level" & label == "indepvarB-A" ~ "B minus A", variable == "indepvar" & row_type == "level" & label == "indepvarC-B" ~ "C minus B", TRUE ~ label ) ) )
解决方案3:手动构建对比矩阵并命名列
不使用contr.sdif,自己构建差异对比矩阵并给列命名,这样模型系数会直接用自定义名称:
# 自定义差异对比矩阵 custom_contrast <- matrix( c(0, 0, # 截距对应(A的基准) 1, -1, # B - A 0, 1), # C - B nrow = 3, dimnames = list(c("A", "B", "C"), c("B minus A", "C minus B")) ) # 设置对比 contrasts(data$indepvar) <- custom_contrast # 拟合模型 m3 <- lm(depvar ~ indepvar, data = data) # 生成表格,标签直接生效 tbl_regression(m3)
内容的提问来源于stack exchange,提问作者maurice vergeer
相关产品推荐
相关产品推荐

