一、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”表格的工具,我们可以根据自己的需要自由选择。
特别申明:本文为转载文章,转载自峰林 敲冰煮茗录,不代表贪吃的夜猫子立场,如若转载,请注明出处:https://mp.weixin.qq.com/s/0kRZKD5VZdIe9miKsc1k7w