利用R语言绘制基线资料表table1

示例
使用table1库中的CreateTableOne函数

#装载库
library(boot)       #melanoma示例数据来源
library(table1)     #没有p检验的功能,有制表功能
library(tableone)   #有p检验功能的,但是没有制表功能

table_mel <- boot::melanoma   #读取黑色素瘤数据集
#table1的输入格式
#table1(~ 变量1 + 变量2 + ... + 变量n | 分层标签, data = 数据)
#绘制table1
table1(~ sex + age + ulcer + thickness | status, data = table_mel)
#修饰table1
#将数值化的变量,重新转成分类变量的意思
#新数据 <- factor(拟转化的数据,levels = c(数值), labels = c(数值对应的类))
table_mel$status <- factor(
  table_mel$status,
  levels = c(1, 2, 3),
  labels = c("melanoma-1", "melanoma-2", "melanoma-3")
)

#0->female,1->male
table_mel$sex <- factor(
  table_mel$sex,
  levels = c( 0, 1 ),
  labels = c("female", "male")
)

table_mel$ulcer <- factor(
  table_mel$ulcer,
  levels = c(0, 1),
  labels = c("no", "yes")
)

table1(~ sex + age + ulcer + thickness | status, data = table_mel)
#两个人群的pvalue计算函数
pvalue <- function(x, ...) {
  # 构造向量和分层
  y <- unlist(x)
  g <- factor(rep(1:length(x), times=sapply(x, length)))
  if (is.numeric(y)) {
    # 数值型变量采用t检验
    p <- t.test(y ~ g)$p.value
  } else {
    # 类别型变量采用独立chi-squared检验 
    p <- chisq.test(table(y, g))$p.value
  }
  # 输出p值,初始空字符串将输出放置在变量标签下方的行上
  c("", sub("<", "&lt;", format.pval(p, digits=3, eps=0.001)))
}
#因为table1不具备pvalue显著性检验的功能,因此要自己写函数调用计算
#其实就是添加额外列,extra.col是table1提供的计算方法
table1(~ sex + age + ulcer + thickness | status, data = table_mel, extra.col=list(`P-value`=pvalue))

使用tableone库中的CreateTableOne函数

#CreateTableOne的输入格式
#CreateTableOne(vars = 全部变量, factorVars = 因子变量名, strata = 分层变量, data = 数据)
CreateTableOne(vars = c("sex", "age", "thickness", "ulcer", "status"), 
				factorVars = c("sex"), strata = "status", data = table_mel)
table = CreateTableOne(vars = c("sex", "age", "thickness", "ulcer", "status"), 
                           factorVars = c("sex"), strata = "status", data = table_mel)
#将生成的table1存成csv格式
table_mat = print(table, quote = FALSE, noSpaces = T, printToggle = FALSE)
write.csv(table_mat, file = "C://Users//Administrator//Desktop//TABLEONE.csv")
### 使用 R 语言创建逆概率加权 (IPW) 处理前后的基线对比格 为了实现这一目标,可以利用 `twang` 和 `survey` 这两个强大的 R 包来计算 IPW 并生成相应的统计格。以下是具体方法: #### 加载必要的库 ```r library(twang) library(survey) library(gtsummary) ``` #### 准备数据集并定义协变量 假设有一个名为 `data` 的数据框,其中包含治疗指示符 `treat` 及其他协变量。 ```r # 假设 data 是已经加载的数据框 head(data) # 定义用于 PS 模型的协变量列 covariates <- c("age", "sex", "income", "education") ``` #### 计算倾向得分和权重 通过 `ps()` 函数拟合逻辑回归模型以估计个体接受干预的概率即倾向得分,并基于此得到稳定化后的逆概率加权。 ```r # 创建 ps 对象 ps_model <- ps(treat ~ age + sex + income + education, data = data) # 获取平衡诊断摘要 bal.table(ps_model)[^1] # 提取标准化后的 IPWs ipw_weights <- get.weights(ps_model, stop.method = "es.mean")$weights ``` #### 构建调查设计对象 使用 `svydesign()` 来指定抽样设计方案以及应用上述计算所得的权重向量。 ```r # 设定无聚类结构下的简单随机样本设计 design_pre_ipw <- svydesign(ids=~1, weights=~1, data=data) # 应用 IPW 后的设计 design_post_ipw <- update(design_pre_ipw, weights=ipw_weights) ``` #### 利用 gtsummary 自动生成描述性统计 最后一步是调用 `tbl_summary()` 或者更高级别的汇总功能来自动生成美观易读的 HTML 格形式展示两组间差异情况。 ```r # 不带 IPW 的原始数据总结 table_unweighted <- tbl_summary( data, by="treat", statistic = list(all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} / {N}") ) # 经过 IPW 调整之后的新版统计数据概览 table_weighted <- tbl_summary( design_post_ipw, by="treat", statistic = list(all_continuous() ~ "{mean} ({se})", all_categorical() ~ "{p}%"), missing_text = "(Missing)" ) # 输出结果到控制台查看效果 print(table_unweighted) print(table_weighted) ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值