• DAG(有向无环图)的实现方法


     DAG(有向无环图)的实现方法,DAG是寻找和筛选合适协变量的可视化方法,可以方便的筛选出所需的协变量

    原理:

    DAG只是一种可视化方法,具体原理关系到图论等知识较为复杂,我们只需要学会读和画DAG图,以及学会用它来进行协变量筛选,对于应用者来说才是DAG的核心

     

    协变量筛选方法:

    1. 中间变量不能纳入

    中间变量(中介变量)是A通过B作用于C,这个比较好理解,就是中间变量的作用可以看做A和C作用的一种途径,作用是属于A的,自然不能放入,不然会导致A对C的影响降低

    2. 混杂因素(cofounder)必须放入

    cofounder是B同时对A和C有作用(Figure 1 ),B便是A对C的混杂因素,与之相对的是碰撞因素(A和C都对B有作用)较为复杂不再讨论。混杂因素于中间变量不同,必须要放入模型

    请注意中间变量与混杂因素的区别!

     Figure 1

    3.社会人口学特征一般不作为解释变量

    谁都知道年龄、性别等社会学因素对癌症等疾病结局有影响。它们存在的意义是因为它们是混杂因素。一般需要放入到模型中来但无须讨论。


    代码实践

    1. # 下载两个包:dagitty和ggdag
    2. ##install.packages("dagitty")
    3. ##install.packages("ggdag")
    4. library(tidyverse)
    5. library(dagitty)
    6. library(ggdag)
    7. # 使用dagitty包当中的dagitty函数来创建DAG
    8. # X,Y,Z这些字母都是随便的,你可以想用什么字母用什么,大写小写都可以
    9. # 这些字母代表你的变量
    10. # ->代表方向
    11. # 每一个;表示一个具体的点边关系
    12. # {}代表组,例如{A R D J S}都是效应修饰变量,组里的每个字母用空格隔开
    13. dag<-dagitty::dagitty("dag{X->Z->Y;
    14. X<-U->Y;{A R D J S}->Y;{B I}->Z;D->S;D->J;R->Z;}")
    15. ##matrix2dag可以实现从邻接矩阵生成dag
    16. dag_tidy<-ggdag::tidy_dagitty(dag,seed = 4)%>%
    17. dag_label(labels=c("X"="Meth Use","Y"="HIV","U"="Unobserved Confounder","A"="Age","B"="Binge Drink", "D" = "Education", "J" = "Occupation",
    18. "S" = "Monthly Income", "R" = "Sexual Orientation",
    19. "I" = "Injection Drug", "Z" = "Condomless Sex"))
    20. # dag_tidy是你的dag数据,node_size可以修改点的大小,text_size可以修改字母大小
    21. # label_size修改标签大小,edge_type是边的类型,可以是直的,也可以是弯的
    22. # geom_dag_label_repel里面是添加标签的函数,最好不要变动
    23. # geom_dag_edges可以改变边的属性,我这里改变了宽度
    24. # theme_dag_blank可以删掉背景
    25. ggdag(dag_tidy,node_size=15,text_size=5,label_size=5,edge_type = "link_arc")+
    26. geom_dag_label_repel(aes(label = label))+
    27. geom_dag_edges(edge_width=1)+
    28. theme_dag_blank()+
    29. expand_plot(expand_x = expansion(c(0.1,0.1)),
    30. expand_y = expansion(c(0.1,0.1)))

    运行结果示例:

    较为粗略,颜色等美学要素可以进行更改

     作者:小天

  • 相关阅读:
    Vue进阶(幺陆玖)项目部署后IE报 SCRIPT1002:语法错误 解决方案探讨
    一文详解 WebSocket 网络协议
    从零搭建开发脚手架 本地事务和远程调用等操作的剥离
    Blazor 使用拖放(drag and drop)上传文件 , 粘贴文件上传
    2022年下半年系统架构设计师下午真题及答案解析
    R语言内连接两个dataframe数据(Inner join)
    solidity
    Gradle笔记 五 Gradle 中的文件操作
    计算机毕业设计springboot+vue基本微信小程序的校园闲置二手跳蚤商城的设计与实现
    1600页!今年BATJZ大厂Java面试题全面整理合集
  • 原文地址:https://blog.csdn.net/2301_79584199/article/details/132639827