Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 左祥太 (武汉纺织大学)
邮箱: Shutter_Z@outlook.com
目录
本文主要来自 Eleanor Murray 博士建立的 Github - causalgraphs_latex 仓库,特此致谢。
在 中文镜像仓库) 中,我们放置了作者提供的 PDF 原文和 LaTeX 源代码,大家可以前往下载,以便尽快熟悉使用 LaTeX 绘制因果图、决策树、概率图、有向无环图,以及结构方程图形的语法。
本文是 连享会 - LaTeX 仓库 的一部分,与之对应的姊妹仓库是 五分钟 Markdown。
本文介绍如何使用 LaTeX 绘制常见的有向无环图 (DAG):
LaTex 是一种基于 TEX 的排版系统,由美国计算机学家 Leslie Lamport 在 20 世纪 80 年代初期开发,利用这种格式,可以使使用者在短时间内生成满足各种期刊投稿要求格式的文章,充分地解决了部分情况下 Word 排版困难的问题。
当然,若在本地使用 LaTeX 编写文档,需要安装一些软件,做一些基本配置,事前的准备工作比使用 Word 和 Markdown 写东西要复杂一些。详情参见第 1.1 小节。
若只是想感受一下 LaTeX,然后再决定去留,可以考虑在线编译网站 https://www.overleaf.com/。只需花 5 秒钟填入邮箱,注册后即可开始编写 TeX 文档,并在线编译输入 PDF 文档。本文后续给出的范例都可以直接贴入该网站进行编译和修改。详情参见第 1.2 小节。
相关介绍如下:
目前比较主流的做法是:
XeLaTeX
Hyperref
最好放在最后考虑到下载速度等外部因素的影响,本文也提供一种在线的 LaTeX 编辑器使用方式,后续 画图 部分的实操将通过 overleaf 实现:Overleaf, Online LaTeX Editor 。 相关文档如下:
大家可以通过各种方式登录,并新建一个临时项目,从而完成简易的绘图工作。具体步骤如下:
登陆 LaTeX 在线编译网址,并注册:https://www.overleaf.com/login
新建一个项目,贴入本推文后续介绍的范例代码,单击「重新编译」
作为练习,可以自行修改左侧的代码,然后「重新编译」,对比效果变化
具体界面如下:
有向无环图 (DAG) 是评估变量之间的假设关系的工具,即这些变量在给定的研究或分析中造成偏差的可能性。它们是设计研究或分析、评估意外结果的潜在原因、或讲解因果推断的有用工具。在因果推断中常用的 DAG 有两种类型:
宏包之于 Texstudio 就如同命令之于 Stata 一般,与 Stata 执行操作时需要调用对用的命令一般,想要在 Texstudio 中实现一定的功能,就需要在 .tex 文档最前方调用对应的宏包。
% 在begin{document}之前的部分都可以称作“导言区”
% 导言区用以对宏包进行调用以及设置页面基本信息
% 方便起见这里一次性调用作者提及的所有宏包
\documentclass[a4paper]{report}
\usepackage[UTF8]{ctex}
% 调用UTF8以正确显示中文
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
% 绘图的主要宏包
\usepackage{hyperref}
% 至此调用完所有的宏包,编译发现页面仍空白(因为还没开始写正文)
% 设置超链接格式(可以不设置)
\hypersetup{
colorlinks=true,
linkcolor=black,
filecolor=black,
urlcolor=blue,
}
% 设置脚注等(非必要)
\pagestyle{fancy}
\fancyhf{}
\lfoot{连享会}
\rfoot{\thepage}
\renewcommand{\headrulewidth}{0pt}
% 设置标题作者等
\title{使用LaTex绘制有向无环图 (DAG)}
\author{译制:左祥太(武汉纺织大学)\\原作:Eleanor Murray (\url{github.com/eleanormurray}) }
% 如需在文中展示作者信息则需要在 \begin{document}下方加入 \maketitle
注意: 在 LaTex 当中,begin
与 end
一定要成对出现,不然会报错。后续绘图直接在 overleaf 网页的新建项目当中通过复制粘贴与编译即可得到对应图片。
统计学 DAG 用于展示有关于已知变量之间关联的概念。在统计 DAG 中,箭头意味着潜在的关联,可能是也可能不是因果关系。在统计 DAG 中,任何没有被箭头连接的变量都是已知或假定没有关联的。
统计 DAG 可以使用机器学习或其他统计技术从数据中收集并建立,但不应该被用来确定两个变量是否有因果关系。
在下一个 DAG 中,我们增加了一个已知的混杂因素,
⭕ 温馨提示:将如下范例 TeX 文档贴入 Overleaf, Online LaTeX Editor,即可在线编辑。
https://www.overleaf.com/login
\documentclass{article}
% 文章类型文档声明
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
% 导入主要所需宏包
\begin{document}
% 开始文档内容书写
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
% 设置箭头格式类型
\begin{tikzpicture}
\node (2) {L};
\node [right =of 2] (3) {A};
\node [right =of 3] (4) {Y};
\draw[Arrow] (2.east) -- (3.west);
\draw[Arrow] (2) to [out=25, in=160] (4);
\end{tikzpicture}
% 正式画图
\end{document}
在这个 DAG 中,
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node [rectangle, draw] (1) {L};
\node [right =of 1] (2) {A};
\node [right =of 2] (3) {Y};
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\end{tikzpicture}
\end{document}
在这个 DAG 中,有一个额外的变量
请注意,当我们以暴露的下游后果为条件时,我们就会产生碰撞点偏差的可能性。因此,从我们以
⭕ 温馨提示:将如下范例 TeX 文档贴入 Overleaf, Online LaTeX Editor,即可在线编辑。
https://www.overleaf.com/login
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node (1) {A};
\node [rectangle, draw, right =of 1] (2) {C};
\node [right =of 2] (3) {Y};
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1.east) -- (2.west);
\end{tikzpicture}
\end{document}
当数据是纵向的并且在多个时间点上可用时,DAG 必须在每个时间点上为每个变量设置单独的节点,以便保持非周期性并避免循环,时间点可以用下标来表示。
这里有一个随时间变化的混杂因素
下面的 DAG 是一个完整的 DAG ,也就是说,除了直接从每个处理方法
为简单起见,在下面的 DAG 中省略了
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node (1) {L$_{k-1}$};
\node [right =of 1] (2) {A$_{k-1}$};
\node [right =of 2] (3) {L$_{k}$};
\node [right =of 3] (4) {A$_{k}$};
\node [right =of 4] (5) {Y$_{k+1}$};
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1) to [out=25, in=160] (4);
\draw[Arrow, thick] (1) to [out=25, in=160] (5);
\draw[Arrow, thick] (2.east) -- (3.west);
\draw[Arrow, thick] (2) to [out=25, in=160] (4);
\draw[Arrow, thick] (3.east) -- (4.west);
\draw[Arrow, thick] (3) to [out=25, in=160] (5);
\end{tikzpicture}
\end{document}
因果 DAG 编码了对相关变量之间因果关系的图像。在因果 DAG 中,变量之间的箭头意味着潜在的因果关系。在因果 DAG 中,任何没有被箭头连接的变量都是已知的或假定的缺乏因果关系,当两个变量已知有关联但不被认为有因果关系时,就用一个未知变量
⭕ 温馨提示:将如下范例 TeX 文档贴入 Overleaf, Online LaTeX Editor,即可在线编辑。
https://www.overleaf.com/login
任何因果 DAG 必须包括 DAG 上任何两个变量的所有可能的共同原因。在最简单的情况下,所有的混杂物都是已知的,混杂物的统计 DAG 将与混杂物的因果 DAG 相同。在更复杂的情况下,混杂的因果 DAG 可以包括
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node (2) {L};
\node [right =of 2] (3) {A};
\node [right =of 3] (4) {Y};
\node [left =of 2] (5) {U$_1$};
\node [below =of 5] (6) {U$_2$};
\node [below =of 2] (7) {U$_3$};
\draw[Arrow] (2.east) -- (3.west);
\draw[Arrow] (2) to [out=25, in=160] (4);
\draw[Arrow] (5.east) -- (2.west);
\draw[Arrow] (5) to [out=25, in=160] (4);
\draw[Arrow] (6.north) -- (2.south);
\draw[Arrow] (6.north) -- (3.south);
\draw[Arrow] (7.north) -- (3.south);
\draw[Arrow] (7.north) -- (4.south);
\end{tikzpicture}
\end{document}
如同有对撞点的统计 DAG ,因果 DAG 有一个额外的变量
与统计 DAG 不同,因果 DAG 还包括
请注意,由于
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node (1) {A};
\node [rectangle, draw, right =of 1] (2) {C};
\node [right =of 2] (3) {Y};
\node [below =of 1] (4) {U};
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (4.east) -- (2.west);
\draw[Arrow, thick] (4.east) -- (3.west);
\end{tikzpicture}
\end{document}
当数据是纵向的并且在多个时间点上可用时,DAG 必须在每个时间点上为每个变量设置单独的节点,以便保持非周期性并避免循环。时间点可以用下标来表示。
这里有一个随时间变化的混杂因素,
在因果 DAG 中,我们通过包括
下面的 DAG 是一个完整 的 DAG ,也就是说,除了直接从每个治疗方法
为简单起见,在下面的 DAG 中省略了
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node (1) {L$_{k-1}$};
\node [right =of 1] (2) {A$_{k-1}$};
\node [right =of 2] (3) {L$_{k}$};
\node [right =of 3] (4) {A$_{k}$};
\node [right =of 4] (5) {Y$_{k+1}$};
\node [below =of 1] (6) {U};
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1) to [out=25, in=160] (4);
\draw[Arrow, thick] (1) to [out=25, in=160] (5);
\draw[Arrow, thick] (2.east) -- (3.west);
\draw[Arrow, thick] (2) to [out=25, in=160] (4);
\draw[Arrow, thick] (3.east) -- (4.west);
\draw[Arrow, thick] (3) to [out=25, in=160] (5);
\draw[Arrow, thick] (6.north) -- (1.south);
\draw[Arrow, thick] (6.east) -- (3.south);
\draw[Arrow, thick] (6.east) -- (5.south);
\end{tikzpicture}
\end{document}
当使用 DAG 示意偏见时,有时需要对箭头进行注释,以表明偏见的方向是积极的或消极的,可能会有助于记忆与理解。该代码通过在每个箭头的中点上方或下方放置一个新的文本节点来为 DAG 箭头添加标签或注释。
在下面的例子中,混杂因素
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}
\begin{document}
\tikzstyle{Arrow} = [
thick,
decoration={
markings,
mark=at position 1 with {
\arrow[thick]{latex}
}
},
shorten >= 3pt, preaction = {decorate}
]
\begin{tikzpicture}
\node (2) {L};
\node [right =of 2] (3) {A};
\node [right =of 3] (4) {Y};
\draw[Arrow] (2.east) -- (3.west) node[midway, below]{$+$};
\draw[Arrow] (2) to [out=25, in=160] node[midway, above] {$-$} (4);
\draw[Arrow] (3.east) --(4.west) node[midway, below] {$-$};
\end{tikzpicture}
\end{document}
利用 LaTex 进行绘制有向无环图更多的地方还是得自己进行操作,限于文献篇幅这里不介绍过多的方法,完整版的 PDF 与源码在参考文献当中。或者直接访问本文码云仓库:
Note:产生如下推文列表的 Stata 命令为:
lianxh latex beamer
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh