使用 tableone 包生成基线特征表的完整代码

一、Tableone包的核心功能

Tableone包主要用于生成“Table 1”表格,描述研究样本的基线特征,包括连续变量和分类变量的描述统计信息。具体功能包括:

CreateTableOne:创建包含连续和分类变量的描述性统计表对象,可以按特定分组变量进行统计对比,是使用最广泛的函数。

CreateCatTable\CreateContTable:分别用于生成仅包含分类变量和连续变量的描述性统计表对象。

svyCreateTableOne:适用于加权数据的表格生成,特别是在复杂抽样设计的研究中使用。

summary.TableOne:用于输出生成的TableOne对象的详细信息,包括每个变量的描述统计和组间比较结果。

其主要功能包括:
  • 支持连续变量和分类变量的统计描述;
  • 提供组间比较结果,包括 p 值和标准化均值差异(SMD);
  • 可按指定变量进行分层分析,方便地生成分组基线表;
  • 结合 flextable 和 officer 包,可以将表格导出为 Word 格式,便于撰写报告。
默认检验方法

在生成基线表时,tableone 包自动选择适合的数据检验方法:

  • 分类变量
    • 默认使用卡方检验(chisq.test())比较分类变量在不同组间的分布差异。
    • 当分类变量样本量较小或单元格频数较低时,推荐使用 Fisher 精确检验(fisher.test())。
  • 连续变量
    • 对于正态分布的连续变量,使用方差分析(oneway.test()),在两组比较时等同于 t 检验。
    • 对于非正态分布的连续变量,使用非参数检验(kruskal.test()),当比较两组时等效于 Mann-Whitney U 检验(wilcox.test())。

二、Tableone包的扩展功能

Tableone包不仅仅可以生成基础的统计表格,还具备许多实用的扩展功能:

ExtractSmd:提取标准化均值差异(SMD),用于评估不同组间的变量平衡情况。SMD常用于倾向性评分匹配等研究,衡量匹配前后变量的平衡性。kableone:可以将生成的TableOne对象导出为Markdown格式,使表格结果可以直接用于报告和论文的撰写。print.TableOne、print.CatTable、print.ContTable:用于格式化输出表格,使结果更加清晰易读。ShowRegTable:以更加整齐的格式展示回归结果,适合直接用于学术报告中。

三、Tableone包的应用场景

Tableone包在以下场景中尤为实用:

临床研究中的基线特征描述:在临床试验或回顾性研究中,研究人员需要描述不同治疗组或对照组的基线特征,生成类似于“Table 1”的表格。

倾向性评分匹配后的平衡性评估:在倾向性评分匹配(PSM)等方法中,研究人员常使用SMD来评估匹配前后组间的平衡性。

复杂抽样设计的数据分析:对于具有加权数据的研究,Tableone包的加权表格生成函数(如svyCreateTableOne)非常实用,可以生成考虑样本权重的统计结果。

四、示例代码

下面是一个使用 tableone 包生成基线特征表的完整代码示例:

# 加载必要的库
library(tableone)
library(dplyr) 
library(tidyverse)
library(flextable)
library(officer)

# 设置工作目录
setwd("D:/科研/3-绘图/数据")

# 读取数据
data <- read.csv("depression_survey.csv")

# 将分类变量转换为因子类型
categorical_vars <- c("Gender", "Education_Level", "Marital_Status", 
                      "Depression_Status", "Chronic_Illness", "Family_History_Depression")
data[categorical_vars] <- lapply(data[categorical_vars], factor)

# 定义分析的变量
vars <- c("Age", "Gender", "Education_Level", "Sleep_Hours", 
          "Weekly_Activity_Hours", "Depression_Status", "Depression_Score", 
          "Chronic_Illness", "Social_Support_Score", "Family_History_Depression", "Income")

# 创建按 Marital_Status 分层的 TableOne 对象
table1 <- CreateTableOne(vars = vars, strata = "Marital_Status", data = data, 
                         factorVars = categorical_vars, test = TRUE)

# 打印出包含所有水平的三线表(markdown 格式)
print(table1, showAllLevels = TRUE)

# 将 TableOne 对象转换为数据框格式
table1_df <- as.data.frame(print(table1, showAllLevels = TRUE))

# 如果需要保留原始的行名,可以将行名作为一列
table1_df$Variable <- rownames(table1_df)
rownames(table1_df) <- NULL

# 调整列顺序,将 'Variable' 列放在最前面
table1_df <- table1_df[, c("Variable", setdiff(names(table1_df), "Variable"))]

# 使用 flextable 转换并导出为 Word
table1_flex <- flextable(table1_df)
table1_flex <- autofit(table1_flex)

# 创建 Word 文档并保存
doc <- read_docx()
doc <- body_add_flextable(doc, table1_flex)
print(doc, target = "Complete_Table1_Summary.docx")

五、总结

Tableone包是生成“Table 1”表格的强大工具,适用于各种临床和流行病学研究,当然也有其他生成“Table 1”表格的工具,我们可以根据自己的需要自由选择。

使用 tableone 包生成基线特征表的完整代码
使用 tableone 包生成基线特征表的完整代码

    特别申明:本文为转载文章,转载自峰林 敲冰煮茗录,不代表贪吃的夜猫子立场,如若转载,请注明出处:https://mp.weixin.qq.com/s/0kRZKD5VZdIe9miKsc1k7w

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    xujunzju管理者
    上一篇 2024年8月31日 15:37
    下一篇 2024年10月21日 12:36

    相关推荐

    发表回复

    登录后才能评论
    联系我们
    邮箱:
    xujunzju@gmail.com
    公众号:
    xujunzju6174
    捐赠本站
    捐赠本站
    分享本页
    返回顶部