查看原文
其他

筛选变量新方法-利用chest包对效应值变化进行估计

Editor's Note

这个包挺不错的

The following article is from 灵活胖子的进步之路 Author 灵活胖子1988

白话Change-in-estimate Approach原理

多元回归是目前调整混杂因素的常用方法,具体在实施中纳入哪些自变量进入方程是一个问题。除了根据背景知识纳入排除外,目前最常用的方法是通过单因素-多因素这种筛选方法,除此之外,根据效应值的改变也是常用的一种方法。具体是指纳入或者排除一个自变量,目前方程的效应值(比如OR或者HR)改变10%以上,这种情况下会认为该自变量对最终结果的影响较大,需要进行混杂因素的调整。这种方法在应用时应该结合DAG图联合使用。

比如吸烟对于肺癌的HR是2,目前发现性别也是患者发生肺癌的混杂因素,纳入时吸烟相对于非吸烟患者的HR为3,这时候HR这种效应值的改变量为(3-2)/2=50%,说明这个混杂因素对于最终结果的影响很大,不管其单因素分析的P值是否小于0.05,都应该纳入最终的回归方程。

官网教程地址:https://rdrr.io/cran/MatchIt/f/vignettes/MatchIt.Rmd

官网资料

官网教程说明

官网教程地址:https://cran.r-project.org/web/packages/chest/vignettes/chest-vignette.html

代码示例

#构建测试数据集
names(diab_df)
str(diab_df)

测试数据集
#二元逻辑回归效应值改变计算
results <- chest_speedglm(
  crude = "Endpoint ~ Diabetes",#初步方程
  #待调整混杂因素
  xlist = c("Age""Sex""Married""Smoke""Cancer""CVD","Education""Income"),
  data = diab_df)#数据集

#可视化结果
chest_plot(results)

初步可视化结果
#调整可视化结果图标位置
p <- chest_plot(results, nudge_y = 0, value_position = 5)  
p + scale_x_continuous(breaks = c(0.5, 1:4), limits = c(0.5, 8))

调整label位置
#可视化为森林图
chest_forest(results)  

森林图结果
原理计算过程

其实就是逐渐增加引起效应值改变的因素到方程中

#当需要调整的混杂因素较多时,可以把他们组成字符串向量后传入函数
vlist <- c("Age""Sex""Married""Smoke""Cancer""CVD","Education""Income")
results <- chest_speedglm(
  crude = "Endpoint ~ Diabetes",
  xlist = vlist, data = diab_df)

#导出数据为表格
results$data->res

表格结果
#计算交互作用及二次项混杂因素的效应量改变
diab_df$Age_Sex <- diab_df$Age*diab_df$Sex 
diab_df$Age2 = diab_df$Age^2
vlist_1<-c("Age""Sex""Age2""Age_Sex""Married""Cancer""CVD""Education""Income")
results <- chest_speedglm(crude = "Endpoint ~ Diabetes", xlist = vlist_1, data = diab_df)
chest_forest(results)

其实是不正确的,因为sex的类型不对

#生存资料的效应值改变估计
results <- chest_cox(crude = "Surv(t0, t1, Endpoint) ~ Diabetes"
                     xlist = vlist, data = diab_df)
chest_plot(results)

生存资料估计值改变图
Surv函数这样用的不多了
#条件逻辑回归的效应值改变估计
results <- chest_clogit(crude = "Endpoint ~ Diabetes + strata(mid)"
                        xlist = vlist, data = diab_df)

chest_forest(results)

条件逻辑回归结果
#线性回归的效应值改变估计
vlist<-c("Age""Sex""Married""Cancer""CVD","Education""Income")
results <- chest_lm(crude = "BMI ~ Diabetes", xlist = vlist, data = diab_df)
chest_plot(results)

线性回归效应值改变结果

总结

个人推荐还是应该先用DAG法确定混杂因素后再用chest包筛选需要调整的混杂因素,另外,考虑到实际上很多混杂因素有缺失值的情况,效应值改变幅度小有可能是因为缺失值引起,而不是本身这个混杂因素的重要性低,这种情况作者推荐删除缺失数据,不过这种方法对于样本量小的数据集会有比较大的影响,可以考虑用插补的方法进行分析。

原文注意事项

关注下方公众号,分享更多更好玩的R语言知识。

点个在看,SCI马上发表。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存