0%

说明:
1. 部分参考Elsevier/The Lancet出版的The Lancet Handbook of Essential Concepts in Clinical Research

一、摘要

  1. 根据研究者是否分配暴露因素将临床研究分为两大类:实验性和观察性。
  2. 实验性研究也可再分为两类:随机和非随机研究。
  3. 观察性研究可以是分析性的,也可以是描述性的。
  4. 分析性研究的特点是有一个比较(对照)组,而描述性研究则没有
  5. 在分析性研究中,队列研究追踪人群的时间方向是从暴露到结局。病例-对照研究与之相反是从结局回溯到暴露。横断面研究像一次快照,同时检测暴露和结局。
  6. 描述性研究,如个案报告则没有对照组。在这类研究中,研究者不能检测两者的因果关系,这是一个常常被遗忘或忽略的事实。
  7. 对相关性(association)的测量,如相对危险度或比值比。是常用的表达二分类结局(如患病和健康)的方法。相对危险度或比值比的可信区间提示了结果的精确性。
  8. 相关性测量(相对危险度或比值比)的可信区间显示了作用的强度、方向和可能的范围以及机遇发生的概率。与此相反,P仅表示机遇的大小。武断地用0.05的P来检验无效假设(Testing null hypotheses)是没有医学基础的,也不应该鼓励。

二、临床研究的分类

Scientific illiteracy is a major failing of medical education.
科学无知是医学教育的主要问题。

(一)临床研究的分类方法

  1. 没有对照组的研究称为描述性研究。
    • 最下端是个案报告(case report)
    • 当报告的患者超过一个时,就称为病例系列报告(a case-series report)

(二)临床证据的分级/Rating clinical evidence:Assessment system of the US Preventive Services Task Force美国预防服务工作组评估系统

证据质量/Quality of evidence
I Evidence from at least one properly designed randomised controlled trial.来自至少一个设计良好的随机对照临床试验中获得的证据
II-1 Evidence obtained from well-designed controlled trials without randomisation.来自设计良好的非随机对照试验中获得的证据
II-2 Evidence from well-designed cohort or case-control studies, preferably from more than one centre or research group.来自设计良好的队列研究或病例对照研究(最好是多中心研究)的证据
II-3 Evidence from multiple time series with or without the intervention. Important results in uncontrolled experiments (such as the introduction of penicillin treatment in the 1940s) could also be considered as this type of evidence.来自多个时间序列的、带有或不带有干预的研究得出的证据。重要的非对照试验(例如19世纪40年代青霉素的引入)的结果有时也可作为这一等级的证据。
III Opinions of respected authorities, based on clinical experience, descriptive studies, or reports of expert committees.来自临床经验、描述性研究或专家委员会报告的权威意见
推荐强度/Strength of recommendations
A Good evidence to support the intervention.良好的科学证据支持该干预行为
B Fair evidence to support the intervention.尚可的证据支持该干预行为
C Insufficient evidence to recommend for or against the intervention, but recommendation might be made on other grounds.没有足够的依据推荐或反对该干预行为,但在其他情况下可能会推荐
D Fair evidence against the intervention.尚可的科学证据反对该干预行为
E Good evidence against the intervention.良好的证据反对该干预行为

三、研究可以做什么,无法做什么

研究设计与研究问题是否匹配/Is the study design appropriate for the question?

(一)描述性研究/descriptive study

  1. 描述性研究可以阐述发病率(frequency)、自然病程和可能的决定因素(possible determinants of a condition)。这些结果显示多少人在一定时间患该病或发生某种状态,描述疾病和患病者的特征,并产生关于疾病的假设。这些假设可以通过更严格的研究来评价,如分析性研究或随机对照试验。
  2. 描述性研究没有对照组,不能用来评估因果关系(associations)。只有对照研究(分析性研究和实验性研究)才能够评估可能的因果关系。

(二)横断面研究(cross-sectional study):特定时间的快照

  1. 别名:频率调查(frequency survey)/现况研究(prevalence study)

  2. 横断面研究用来检测在特定时间点上,疾病和某个暴露因素,两者的存在与否。这样,焦点是患病,而不是发病。因为结局和暴露在同一时间被确定,这两个的时间关系可能不清楚。

    例如假设横断面研究发现有关节炎的女性比没有关节炎的女性肥胖更常见。是增加的体重负担导致关节炎还是有关节炎的女性不得不减少活动然后出现肥胖呢?这种问题在横断面研究中是无法回答的。

  3. 典型案例:检测心肌梗死男性患者收治入院时的血清胆固醇和他们的隔壁邻居的血清胆固醇。这种类型的研究同时提供了人群的瞬时疾病和健康状况。

(三)队列研究(cohort study):从暴露到结局

  1. 调查者确定一组暴露于感兴趣的因素的人群和一组或多组不暴露的人群,然后随访暴露组和非暴露组一段时间来观察结局。如果暴露人群比不暴露人群有较高的结局发生率,那么暴露因素与该结局的高危险性相关。
  2. 优点
    • 暴露因素在一开始就确定,可以认为暴露因素比结局发生要早,就不必像在病例-对照研究中那样考虑回忆偏倚(recall bias)。
    • 队列研究可以计算真正的发病率(true incidence rates)、相对危险度(relative risk)和归因危险度(attributable risks)。
  3. 缺点:但对于罕见事件或需要很多年才发病的疾病,这种类型的研究需要很长时间才有结果,因此费用非常高。
  4. 典型案例:从一项暴露开始(如口服避孕药),然后随访女性数年来评价其结局(如卵巢癌),那它肯定是队列研究。队列研究可以是同期的,也可以是非同期的(即前瞻性和回顾性队列研究)。

(四)病例-对照研究(Case-control study):从结局到暴露

  1. 研究者定义一组有一种结局(如卵巢癌)的人群和一组没有该结局的人群(对照),然后通过调查表、面谈或者其他方式确定两组人群某一危险因素的暴露情况(如口服避孕药、促排卵药物)。如果暴露因素在病例中的发生高于对照组,暴露因素与该结局的高危险性有关。
  2. 优点:省钱、省时
  3. 缺点:
    • 选择合适的对照组比较困难。除了研究的结局外,对照应该是在其他所有重要的方面都与病例类似。不合适的对照破坏了很多病例-对照研究,并产生错误的结果。
    • 回忆偏倚(recall bias)(病例组比对照组对暴露因素的回忆更好)始终是依靠记忆研究的难题。
    • 因为病例-对照研究缺乏分母,调查者不能计算发病率(incidence rate)、相对危险度(relative risk, RR)以及归因危险度。
    • 但可以用比值比(odds ratio, OR)评价其相关性。当结局是不常见的时候(如绝大多数癌症),比值比可以很好地代表相对危险度。
  4. 典型案例:食物造成的疾病暴发。在游船上,呕吐腹泻的患者和没有生病的人都会被问及食物因素。如果生病的人中吃某一种食物的比例高于 未生病的人,这种食物就可疑了。
三种研究设计的时间方向示意图

(五)非随机试验(non-randomised trial)

  1. 有些实验性研究不是随机将参加者分到暴露组中的(如治疗或预防策略研究)。和真正的随机不同的是,研究者常常用不够标准的方法,如交替分配(alternate assignment)。

    交替分配:在一项试验中采用月份交替的方法来分配产妇的电子胎儿监测情况(一个月自由检查,另一个月限制检查)

  2. 美国预防服务工作组和加拿大定期体检工作组(Canadian Task Force on the Periodic Health Examination)指定这种研究设计为II-1类,认为这种设计虽然不如随机试验严谨,但比其他分析性研究好。

  3. 在研究者将参加者分配到各治疗组中后,非随机试验就像队列研究一样实施和分析。暴露和未暴露的人随访一段时间以确定结局发生的频率。

  4. 优点

    • 有对照组
    • 对照组和治疗组,在确认结局上有统一的标准。
  5. 缺点:可能存在选择偏倚

(六)随机对照试验(randomised controlled trials):金标准

  1. 是临床研究中避免选择偏倚和混杂偏倚(confoundiiig biases)的唯一方法。
  2. 随机对照试验的标志是:参加者分配到暴露因素中纯粹是随机的。
  3. 随机对照试验降低了确定结局时偏倚的可能性。如果正确的设计和完成,随机对照试验有可能避免偏倚,这样,对检验轻微的和中等程度的作用特别有效。在观察性研究中,偏倚很容易产生小的和中等程度的差异。
    • 只要正确完成,随机分配可以杜绝选择偏倚(selection bias)
    • 随机对照试验对于结局有统一的诊断标准,而且常常对参与者使用盲法,这样,减少了信息偏倚(information bias)
    • 随机对照试验独一无二的优势是消除混杂偏倚(confounding bias),包括已知的和未知的。
  4. 随机对照试验的缺点
    • 外部真实性(external validity):表示结果是否可以推广到更大区域或范围的程度。如果正确的实施,随机对照试验有内部真实性(internal validity)(它按计划进行了检测),但可能没有外部真实性。与观察性研究不同的是,随机对照试验只纳人通过筛查程序的志愿者。志愿参加试验的人与其他人有差异,比如,他们的健康状况可能比较好。
    • 随机对照试验中有些情况下是不适用的,因为故意暴露于危险状态(如毒素、细菌或其他有害因素)是不道德的。
    • 随机对照试验费用相当高

四、结局的测量

(一)术语

比值(ratio)

  1. 是一个数目除以另一个数目得到的值。
  2. 这两个数目可以相关也可以不相关。
  3. 这一特点(分子和分母的相关性)将比分为两种:
    • 分母包含分子
    • 分母不包含分子
      • 产妇死亡比:死于妊娠相关的病因的妇女为分子,活产的母亲(常常用100000)为分母。然而,不是所有的分子都包含在分母中(比如,死于异位妊娠的妇女不可能被包含在活产的母亲中)

率(rate)

  1. 率(rate)考量的是人群中事件的频率
  2. 率的分子(发生结局的人数)必须包含在分母(有发生结局这一危险的人数)中
  3. 率包含时间成分。
  4. 发病率(incidence rate):表示在特定的时间段中处于危险的人群中新发病例的数目(比如11个结核病例/100000人/年)。

比例

  1. 比例(proportion)常用作率的同义词,但前者不含有时间成分。
  2. 比例和率一样必须分母含有分子。因为分子和分母的单位相同,他们相除后得到没有维度的数值,一个没有单位的数目。
  3. 例如患病比例(每100个处于危险的人中27个患枯草热)。这一数值表示处于危险的人群中有多少人在特定的时间中处于某种状态(这里是27%)。因为没有记录某段时间的新发病例,把患病率(prevalence rate)看作比例(而不是率)更合适。

五、相关性(association)的测量

(一)相对危险度(relative risk,RR)

  1. 定义:暴露组中发生结局的频率除以非暴露组中结局的频率。
  2. 解释
    • 如果结局在两组中的频率是相同的,比值为1.0,表示暴露与结局没有关联
    • 如果结局在暴露组中更频繁,比值就大于1.0,提示暴露与危险性增加相关
    • 如果疾病频率在暴露组中低,相对危险度就会小于1.0,提示一种保护性作用

(二)比值比(odds ratio,OR)/交叉乘积比(cross-products ratio)/相对比值(relative odds)

是病例-对照研究中常用的衡量相关性的方法

  1. 定义:在病例组中暴露的可能性除以对照组中暴露的可能性。
  2. 解释
    • 如果病例组和对照组暴露的可能性相等,比值比为1.0,提示没有意义
    • 如果病例组暴露的可能性高于对照组,比值就高于1.0,提示暴露与危险性增高有关
    • 比值比低于1.0提示保护性作用
  3. 横断面研究、队列研究和随机对照研究中也可以计算比值比。
    • 疾病比值比是暴露组中发生疾病的可能性除以非暴露组中发生疾病的可能性
    • 在这种情况下,如果在荟萃分析中汇集研究的时候,比值比就有一些吸引人的统计学特点
    • 但当结局发生的比例大于5%〜10%的时候,比值比不能代表相对危险度(例如,发病率高的时候这一术语没有什么临床关联和意义)

(三)可信区间(confidence intervals)

  1. 可信区间反映了研究结果的精确性,提供了一个参数(如比例、相对危险度或者比值比)的数值范围,表示了含有来自于整个人群的研究样本的真实值的可能性。
  2. 尽管95%可信区间是最常用的,其他的,如90%可信区间也可以见到。
  3. 可信区间越大,结果的精确性越差,反之亦然。
  4. 对相对危险度和比值比来说,当95%可信区间不包括1.0时,在常用的0.05水平差别有显著性。但是,将可信区间的这一特性作为假设检验的内推方法是不合适的。

行内公式

语法是$行内公式$。可以让公式在文中与文字或其他东西混编,不独占一行。

  1. 示例
    • 质能方程$E = mc^2$
  2. 显示
    • 质能方程\(E = mc^2\)

独立公式

语法是$$行内公式$$。使公式单独占一行,不与文中其他文字等混编。

  1. 示例
    • 质能方程$$E = mc^2$$
  2. 显示
    • 质能方程\[E = mc^2\]

普通公式

普通的加减乘除数学公式的输入方法与平常的书写一样。

  1. 示例
    • $$x = 100 * y + z - 10 / 33 + 10 % 3$$
  2. 显示
    • \[x = 100 * y + z - 10 / 33 + 10 % 3\]

上下标

使用^来表示上标,_来表示下标,同时如果上下标的内容多于一个字符,可以使用{}来将这些内容括起来当做一个整体。

  1. 示例
    • $$x = a_{1}^n + a_{2}^n + a_{3}^n$$
  2. 显示
    • \[x = a_{1}^n + a_{2}^n + a_{3}^n\]

如果希望左右两边都能有上下标,可以使用\sideset语法

  1. 示例
    • $$\sideset{^1_2}{^3_4}A$$
  2. 显示
    • \[\sideset{^1_2}{^3_4}A\]

括号

()[]|都表示它们自己,但是{}因为有特殊作用因此当需要显示大括号时一般使用\lbrace \rbrace来表示。

  1. 示例
    • $$f(x, y) = 100 * \lbrace[(x + y) * 3] - 5\rbrace$$
  2. 显示
    • \[f(x, y) = 100 * \lbrace[(x + y) * 3] - 5\rbrace\]

分数

分数使用\frac{分子}{分母}这样的语法,不过推荐使用\cfrac来代替\frac,显示公式不会太挤。

  1. 示例
    • $$\frac{1}{3} 与 \cfrac{1}{3}$$
  2. 显示
    • \[\frac{1}{3} 与 \cfrac{1}{3}\]

开方

开方使用\sqrt[次数]{被开方数}这样的语法

  1. 示例
    • $$\sqrt[3]{X}$$
    • $$\sqrt{5 - x}$$
  2. 显示
    • \[\sqrt[3]{X}\]
    • \[\sqrt{5 - x}\]

希腊字母

代码 大写 代码 小写
A \(A\) \alpha \(\alpha\)
B \(B\) \beta \(\beta\)
\Gamma \(\Gamma\) \gamma \(\gamma\)
\Delta \(\Delta\) \delta \(\delta\)
E \(E\) \epsilon \(\epsilon\)
Z \(Z\) \zeta \(\zeta\)
H \(H\) \eta \(\eta\)
\Theta \(\Theta\) \theta \(\theta\)
I \(I\) \iota \(\iota\)
K \(K\) \kappa \(\kappa\)
\Lambda \(\Lambda\) \lambda \(\lambda\)
M \(M\) \mu \(\mu\)
N \(N\) \nu \(\nu\)
\Xi \(\Xi\) \xi \(\xi\)
O \(O\) \omicron \(\omicron\)
\Pi \(\Pi\) \pi \(\pi\)
P \(P\) \rho \(\rho\)
\Sigma \(\Sigma\) \sigma \(\sigma\)
T \(T\) \tau \(\tau\)
\Upsilon \(\Upsilon\) \upsilon \(\upsilon\)
\Phi \(\Phi\) \phi \(\phi\)
X \(X\) \chi \(\chi\)
\Psi \(\Psi\) \psi \(\psi\)
\Omega \(\Omega\) \omega \(\omega\)

关系运算符

代码 符号
\pm \(\pm\)
\times \(\times\)
\div \(\div\)
\mid \(\mid\)
\nmid \(\nmid\)
\cdot \(\cdot\)
\circ \(\circ\)
\ast \(\ast\)
\bigodot \(\bigodot\)
\bigotimes \(\bigotimes\)
\bigoplus \(\bigoplus\)
\leq \(\leq\)
\geq \(\geq\)
\neq \(\neq\)
\approx \(\approx\)
\equiv \(\equiv\)
\sum \(\sum\)
\prod \(\prod\)
\coprod \(\coprod\)

集合运算符

代码 符号
\emptyset \(\emptyset\)
\in \(\in\)
\notin \(\notin\)
\subset \(\subset\)
\supset \(\supset\)
\subseteq \(\subseteq\)
\supseteq \(\supseteq\)
\bigcap \(\bigcap\)
\bigcup \(\bigcup\)
\bigvee \(\bigvee\)
\bigwedge \(\bigwedge\)
\biguplus \(\biguplus\)
\bigsqcup \(\bigsqcup\)

对数运算符

代码 符号
\log \(\log\)
\lg \(\lg\)
\ln \(\ln\)

三角运算符

代码 符号
\bot \(\bot\)
\angle \(\angle\)
\sin \(\sin\)
\cos \(\cos\)
\tan \(\tan\)
\cot \(\cot\)
\sec \(\sec\)
\csc \(\csc\)

微积分运算符

代码 符号
\prime \(\prime\)
\int \(\int\)
\iint \(\iint\)
\iiint \(\iiint\)
\iiiint \(\iiiint\)
\oint \(\oint\)
\lim \(\lim\)
\infty \(\infty\)
\nabla \(\nabla\)
\mathrm{d} \(\mathrm{d}\)

说明
1. 部分参考自博客[始终]上文章:解决MathJax与Markdown的冲突
2. 部分参考自博客[天空的城]上的文章:Hexo下mathjax的转义问题

启用Mathjax插件

  1. 安装:cd进入Hexo的根目录

    1
    npm install hexo-math --save

  2. 配置

    在站点配置文件_config.yml中加入下述代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    math:
    engine: 'mathjax' # or 'katex'
    mathjax:
    src: custom_mathjax_source
    config:
    # MathJax config
    katex:
    css: custom_css_source
    js: custom_js_source # not used
    config:
    # KaTeX config

NexT如何集成mathjax?

可以在next文件中的主题配置文件_config.xml下做类似如下配置后便可用:

1
2
3
4
5
# MathJax Support
mathjax:
enable: true
per_page: false
cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML

如果框架不提供配置怎么集成mathjax?

只要在需要集成的页面上加载一个script即可

1
2
3
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

如何复制别人的mathjax代码?

  1. 可以查看网页源码。

  2. 可以直接在公式上右键,按照如下图的操作后便可看到代码。

  3. 在线识别手写数学公式并转换为的mathjax代码网站

MathJax与Markdown的冲突

MathJax是一个JavaScript引擎,能够将LaTeX语法书写的公式在网页上显示出来。Markdown是一种轻量级的标记语言。用Markdown书写的文章,可以用Markdown解释器处理成标准的HTML文档。因此Markdown很适合用来写博客。

在Markdown中,下划线_被保留,用作标记符号。比如_Slant_会生成倾斜的_Slant_。在LaTeX中,下划线_被用作下标记号。比如x_i会生成\(x_i\)

由于 Markdown 在 MathJax 之前起作用,有时下标记号会被 Markdown 吃掉,变成 HTML 标记<i>而失去 LaTeX 的下标效果,造成数学公式显示不正常。

比如This is an example: $f_i = f_{i + 1}$里的两个下划线会被Markdown理解成倾斜的标记,显示成这样:

解决方案

  1. 更换Hexo的markdown引擎

    把Hexo默认的渲染markdown的引擎替换成插件pandoc(hexo-renderer-pandoc)进行渲染。但pandoc的语法与markdown有些微的差异,需要注意。

    • 安装pandoc

    • cd进入Hexo的根目录,卸载Hexo默认的markd,再安装pandoc

      1
      2
      npm uninstall hexo-renderer-marked --save
      npm install hexo-renderer-pandoc --save

说明
1. 译自Keith Goldfeld的文章Visualizing how confounding biases estimates of population-wide (or marginal) average causal effects

当我们试图评估暴露或干预对结果的影响时,混淆因素(confounding)对我们得出正确结论的能力始终存在威胁。我的目标是考虑一下如何描述混淆的方式,使得有可能从表面上看出为什么不正确地估计干预效应(intervention effects)可能会导致偏倚。

混淆、潜在的结果和因果效应

通常,我们认为混淆因素会影响暴露和结果。如果,我们在评价暴露效果的时候,忽略混杂因素,我们可能轻易地高估或低估由于暴露所造成的效果大小。

如果病情较重的患者比健康的患者更有可能服用某种特定的药物,那么服用该药的患者,其相对较差的预后,可能是由于最初的健康状况而不是药物造成的。

一个稍微不同的混淆因素的观点与潜在结果的概念性框架相关联。如果一个个体受到特定的暴露,我们可能会观察到一个潜在的结果。我们可能会或可能不会观察到潜在的结果:这取决于实际的暴露程度。(为了简化,假定我们只对两种不同的暴露感兴趣。)

\(Y_0\)代表患者未受到暴露,\(Y_1\)代表患者受到暴露。暴露因素对个人i的因果影响(causal effect)可以被定义为\(Y_{1i}-Y_{0i}\)

如果我们有足够长的时间来观察两种状态(有或没有暴露)下,每一个研究对象的结局\(Y\),并测量两种潜在的结局以及因果效应。对样本中所有个体进行平均,可以估计人口平均因果效应。(Think of a crossover or N-of-1 study.)

不幸的是,在现实世界中,将个体暴露于多种条件下几乎是不可行的。只能设置对照组和暴露组,进行比较(除了暴露因素以外,两组其他情况都相同)。

我们的目标是比较对照组与暴露组的结果分布。我们经常通过查看每个分布的均值来简化这种比较。

平均因果效应(所有个体)可以写成\(E(Y_{1i}-Y_{0i})\)\(E()\)是期望值或平均值。实际上,我们无法直接衡量这一点,因为每个人只能观察到一个潜在的结果。

我们可以使用观察到的测量值来估计无法观察的平均因果效应。 混淆因素-期望

  1. 因为期望是线性的。故此:E(Y1-Y0)=E(Y1)-E(Y0)
  2. 可以说\[A_1 = 5 \]

\[\frac{a}{b}\]

说明
1. 部分参考O'Reilly Media出版的HTML and CSS和HTML with CSS & XHTML
2. 部分参考作者兼续在简书上的笔记https://www.jianshu.com/p/727dbfcef685

在医学研究领域,通常用Table 1来描述所研究人群的特征情况。Table 1包含连续性变量的均值、分类变量所占百分比以及p值等信息。为了创建Table 1有时可能会非常耗时。想象一下:我们有3组数据,每组数据10个变量(如年龄,性别等),需对变量计算均值(标准差)、参与人数(百分比)。这样的话我们需要在表中填充60个数据。

tableone包的作者是Kazuki Yoshida和Justin Bohn,利用这个包可以很方便的在R中创建表格。

一、创建Table 1

(一)创建并导入数据

本文数据是由rnorm()sample()函数模拟产生的,从这里下载。

1
2
3
4
5
6
7
8
9
10
dt <- read.csv(file.choose(), header=TRUE, sep=",")
head(dt)

Age Gender Cholesterol SystolicBP BMI Smoking Education
1 67.9 Female 236.4 129.8 26.4 Yes High
2 54.8 Female 256.3 133.4 28.4 No Medium
3 68.4 Male 198.7 158.5 24.1 Yes High
4 67.9 Male 205.0 136.0 19.9 No Low
5 60.9 Male 207.7 145.4 26.7 No Medium
6 44.9 Female 222.5 130.6 30.6 No Low

(二)设定变量并定义分类变量

现在,我们使用tableone包来创建Table 1。

  1. 首先加载tableone包,并创建我们想要放到Table 1中的变量列表。
  2. 定义分类变量。
1
2
3
4
5
6
7
8
9
#加载tableone包
library(tableone)

#创建变量列表
listVars <- c("Age", "Gender", "Cholesterol", "SystolicBP", "BMI", "Smoking",
"Education")

#定义分类变量
catVars <- c("Gender","Smoking","Education")

(三)总体人群表格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
table1 <- CreateTableOne(vars = listVars, data = dt, factorVars = catVars)

Overall
n 250
Age (mean (sd)) 57.50 (7.85)
Gender = Male (%) 107 (42.8)
Cholesterol (mean (sd)) 224.12 (24.90)
SystolicBP (mean (sd)) 145.51 (10.08)
BMI (mean (sd)) 26.79 (4.37)
Smoking = Yes (%) 72 (28.8)
Education (%)
High 108 (43.2)
Low 71 (28.4)
Medium 71 (28.4)

(四)特定人群(分类)表格

我们更感兴趣的是分别为男性和女性创建Table 1,并比较他们的均值和百分比。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 从变量列表中移除Gender
listVar <- c("Age", "Cholesterol", "SystolicBP", "BMI", "Smoking", "Education")
table1 <- CreateTableOne(listVars, dt, catVars, strata = c("Gender"))

Stratified by Gender
Female Male p test
n 143 107
Age (mean (sd)) 56.94 (8.05) 58.25 (7.55) 0.191
Cholesterol (mean (sd)) 224.80 (25.06) 223.21 (24.78) 0.620
SystolicBP (mean (sd)) 144.95 (10.99) 146.27 (8.71) 0.305
BMI (mean (sd)) 26.74 (4.58) 26.84 (4.09) 0.859
Smoking = Yes (%) 37 (25.9) 35 (32.7) 0.298
Education (%) 0.289
High 56 (39.2) 52 (48.6)
Low 45 (31.5) 26 (24.3)
Medium 42 (29.4) 29 (27.1)

tableone包还可以做更多事情。例如:计算非正态分布变量的中位数和四分位数,对不同组之间作各种假设检验的对比。

说明
1. 译自Rajyaguru DJ于2018年发表在JCO上的文章:Radiofrequency Ablation Versus Stereotactic BodyRadiotherapy for Localized Hepatocellular Carcinoma inNonsurgically Managed Patients: Analysis of the National Cancer Database.

射频消融与立体定向放疗对非手术治疗的局限性肝癌患者的影响:国家癌症数据库分析

摘要

研究目的

对于局部肝细胞癌(HCC)的管理,目前尚缺乏指导(医生)如何选择最佳局部消融治疗的数据。由于这些治疗方式的前瞻性、可比较数据有限,因此我们的目的是通过使用国家癌症数据库比较射频消融(radiofrequency ablation,RFA)与立体定向放射治疗(stereotactic body radiotherapy,SBRT)的有效性(effectiveness)。

方法

  1. 我们进行了一项观察性研究,以比较RFA与SBRT在非手术治疗肝癌患者(stage I or II)中的有效性。
  2. 通过使用基于患者(patient-),医疗设施(facility-)和肿瘤水平(tumor-level)特征的倾向性评分加权和倾向性评分匹配分析来比较总体生存率。
  3. 进行敏感性分析(A sensitivity analysis)以评估严重的肝纤维化/肝硬化程度。
  4. 此外,我们进行了探索性分析(exploratory analyses),以确定RFA和SBRT在临床相关患者子集中的有效性。

结果

  1. 3,684例(92.6%)和296例(7.4%)非手术治疗的I期或II期HCC患者分别接受RFA或SBRT治疗。
  2. 在倾向性评分匹配后,RFA组的5年总体生存率为29.8%(95%CI,24.5%-35.3%),而SBRT组则为19.3%(95%CI,13.5%-25.9%),两者差异显著(P=0.001)。
  3. 逆概率加权分析(Inverse probability–weighted analysis)也获得类似的结果。
  4. RFA的获益在所有亚组中都是一致的,并且对严重肝纤维化/肝硬化的效果是稳健的。

结论

  1. 我们的研究表明,对于I或II期HCC的非手术治疗患者,与SBRT相比,RFA治疗可获得更高的存活率。
  2. 尽管我们的结果受限于回顾性研究设计相关的偏倚。但我们认为,在没有随机临床试验的情况下,在推荐局部无法切除的HCC患者进行局部消融治疗时应考虑我们的研究结果。

前言

  1. 对于局限性肝细胞癌,可以通过手术切除或肝移植实现治愈。然而,大多数患者不适合手术,而是采用局部消融治疗(local ablative therapies),包括射频消融(radiofrequency ablation,RFA),微波消融(microwave ablation),冷冻消融(cryoablation)和立体定向放射治疗(stereotactic body radiation therapy,SBRT)。
  2. RFA广泛应用于体积较小(< 3cm)的不可切除肝癌,可实现70%到90%的优良局部控制率,并且在某些情况下被认为是治愈性治疗。
  3. 其他介入技术,例如微波消融或联合热-经动脉化学栓塞已被用于改善局部控制率,特别是对于在3cm和5cm之间的HCC肿瘤。
  4. SBRT是RFA的新兴替代方法,似乎为较小的HCC提供了类似的局部控制率。
  5. 尽管对SBRT的研究正在逐渐增加,但大多数SBRT的数据来自单中心,易于受到选择偏倚的影响。 此外,许多单中心的样本量相对较少,缺乏长期生存数据。
  6. 前瞻性随机试验对于比较RFA与SBRT治疗局部不可切除HCC的有效性是必要的。然而,目前尚无前瞻性随机试验,且进行此类试验面临许多挑战,耗时且花费较高。

研究方法

数据来源

  1. 我们使用NCDB进行了回顾性分析,属于不受机构审查委员会监督的去标志数据(de-identified data)。
  2. NCDB是美国外科医师学会(American College of Surgeons)癌症委员会(Commission on Cancer,CoC)和美国癌症协会(the American Cancer Society)的联合项目。
  3. NCDB包含来自美国1500多家拥有CoC认证项目的医院的数据,其中包括约70%全美所有新诊断的癌症病例,即超过2900万个独特的癌症病例。
  4. 根据与每个认证机构签订的协议,删除来自美国退伍军人事务部、国防部,波多黎各的设施和其他某些计划的数据。
  5. 我们从NCDB参与者用户文件(Participant User Files,PUF)获得数据。The data elements are collected prospectively from cancer registries of CoC-accredited programs by using nationally standardized data item and coding definitions as specified in the CoC’s facility oncology registry data standards and nationally standardized data transmission format specifications coordinated by the North American Association of Central Cancer Registries.
  6. 数据元素包括患者特征、癌症分期、肿瘤的组织学特征、首次治疗的类型和时间以及结果。
  7. 对于所有在5年内诊断出的符合条件的患者,合格评定(accreditation)要求每年有90%的随访率。

研究人群

  1. 从2004年至2013年间诊断为原发性HCC的119,933名男性和女性人群中共识别了47,634例临床I期(T1N0M0)或II期(T2N0M0)患者

    International Classification of Disease-Oncology-3rd Edition code C22.0, histology codes 8170-8175

  2. 排除接受过肺叶切除术,扩大肺叶切除术,肝切除术或肝移植的患者。

  3. 以RFA或SBRT作为主要治疗方式,排除接受其他形式的局部消融治疗的患者。

  4. 排除接受任何形式的化疗(辅助或新辅助)或化疗信息未知的患者。

  5. 本研究最终纳入3,980名患者。

    CONSORT diagram

Covariates/协变量

可以在NCDB PUF数据dictionary中找到所有变量的完整详细描述。

  1. Patient-level variables
    • 诊断时的年龄
    • 性别
    • 种族
    • 保险状况
    • 根据患者邮政编码的家庭收入中位数
    • 患者人口普查区内低于高中教育的人口百分比
    • Charlson-Deyo合并症评分(被NCDB分为0,1,≥2的得分类别)
  2. Facility-level variables
    • 从患者居住区到治疗设施的距离
    • case volume in quartiles
    • 地理区域
    • type of treatment facilities(由CoC accreditation category指定,基于case volume和available services)
      • 社区
      • 综合性社区
      • 学术
      • integrated network cancer program
  3. Tumor-level variables
    • TNM分期
    • 肿瘤大小
    • 诊断年份(2004-2008 v 2009-2013)
    • 甲胎蛋白
    • 肿瘤分级和Ishak纤维化评分可用于接受活检以评估肿瘤的患者

目标

  1. 本研究的主要目的是比较非手术治疗的I期或II期HCC患者的总体生存期(overall survival,OS),同时比较接受RFA治疗的患者与接受SBRT治疗的患者的OS。 > OS的定义:从诊断日期到死亡(任何原因所导致)日期。

  2. 次要目标是确定RFA和SBRT在临床相关患者子集中的有效性。

统计分析

  1. 评估治疗方式与患者的特点,临床特点及和医疗设施特征之间的相关性
    • 分类数据:Pearson卡方,Fisher’s exact test
    • 计量数据:Wilcoxon rank sum test
  2. 对于主要结果,构建了两种OS与治疗方式之间相关性的模型
    • a propensity score-and time-to-treatment-matched univariable Cox proportional hazards model /倾向性评分和治疗时间匹配的单因素Cox比例风险模型
    • an unmatched univariable analysis based on the Kaplan-Meier estimator of inverse probability of treatment weight (IPTW)/基于IPTW的Kaplan-Meier估计量的未匹配的单因素分析
  3. 构建以接受SBRT为目标事件构建模型的倾向性评分模型。
    • 通过逐步多因素logistic回归模型。
    • 变量选择:先进行单因素分析,纳入所有与治疗方法显著相关的变量(a threshold of P <0.20 required for initial inclusion and P <0.10 required to remain in the model)。
  4. 在倾向性评分的基础上,计算稳定的IPTW。IPTWs were truncated at 第5和第95百分位
  5. 构建倾向性评分和治疗时间匹配的OS模型
    • 通过使用a greedy, nearest neighbor matching algorithm,接受SBRT治疗的患者与接受RFA治疗的患者,在倾向性评分和诊断到治疗的时间上,匹配为1:2。倾向性评分的最大允许差异为±2%,诊断到治疗的时间的最大允许差异为±14天。
    • 计算每组的Kaplan-Meier估计量,并使用对数秩检验(log-rank test)进行比较。
  6. 对于OS的最终模型,计算所有患者的IPTW Kaplan-Meier估计量,并通过对数秩检验在各组之间进行比较。
  7. 所有计算均使用SAS软件9.4版进行。
  8. 在匹配的患者组中,我们通过交互作用(interaction)和亚组分析(subgroup analyses)评估了治疗效果的异质性(heterogeneity of treatment effects),探讨了年龄,性别,临床T分期,肿瘤大小,肿瘤分级,Charlson-Deyo合并症评分和设施类型的影响。
  9. 由于在NCDB中纤维化/肝硬化例数较少,以及纤维化/肝硬化与OS减少之间的已知关联。我们在匹配的患者组中进行了敏感性分析,以研究这种未测量的混杂因素对我们的结果的潜在影响。
  10. 敏感性分析的目标是探索假设的结果情景,并在其中调整观察到的治疗效果以解释潜在的未测量的混杂因素。
  11. 除了观察到的治疗效果外,敏感性分析还纳入了关于生存效应和未测量混杂因子的不同暴露的假设信息,以计算如果去除未测量的混杂因素将会观察到的真实治疗效果。

结果

Factors Associated With Use of SBRT

  1. 开始SBRT和RFA治疗的中位时间分别为72天和48天。
  2. 患者基线特征列于表1中。 Table 1 Table 1_c
  3. 通过倾向性评分和time to treatment进行匹配,两组患者所有的协变量均取得了足够的组间平衡(见表A1)。 表A1 表A1_c
  4. 接受SBRT的患者比例随时间逐渐增加,年增长率为12%(P<0.001;图2),大多数患者(79.7%)接受三至五次治疗。

生存分析

严重纤维化/肝硬化的影响

讨论

说明
1. 译自Norbert Köhler的文章How to use R for matching samples (propensity score)

根据维基百科,倾向性评分匹配(propensity score matching,PSM)是一种用来评估处置效应的统计方法。

Propensity score matching (PSM) is a statistical matching technique that attempts to estimate the effect of a treatment, policy, or other intervention by accounting for the covariates that predict receiving the treatment

广义说来,倾向性评分分析假设只有当两组样本的研究对象具有相似特征时才能进行两组样本之间的无偏比较(unbiased comparison)。因此,PSM不仅仅是随机试验的一种替代方法,它也是流行病研究中进行样本比较的重要方法之一。让我们举个例子:

与健康相关的生活质量(Health-related quality of life,HRQOL)被认为是癌症治疗的重要结果之一。对癌症患者而言,最常用的HRQOL测度是通过欧洲癌症研究与治疗中心(European Organisation for Research and Treatment of Cancer,EORTC)的调查问卷计算得出的。

EORTC QLD-C30是一个由30个项目组成,包括5个功能量表,9个症状量表和一个整体生活质量量表的的问卷。所有量表都会给出一个0-100之间的得分。症状量表得分越高代表被调查人症状越重,其余两个量表得分越高代表生活质量越高。

然而,如果没有任何参照,直接对数据进行解释是很困难的。幸运的是,EORTC QLQ-C30问卷也在一些正常人群调查中使用,我们可以对比患者的得分和正常人群的得分差异,从而判断患者的一些症状和功能障碍是否能归因于癌症(或治疗)。PSM可以通过相似年龄和相同性别等特征,将患者和一般人群进行匹配。

生成两个随机数据框

本文用到的所有包可通过如下代码加载:

1
pacman::p_load(knitr, wakefield, MatchIt, tableone, captioner)

由于我们不希望在博客文章中使用真实数据,因此需要生成一些模拟数据。使用wakefield包可以很容易地实现这个功能。

  1. 创建一个名为df.patients的数据框,包含250个病人的年龄和性别数据,所有病人的年龄都要在30-78岁之间,并且70%的病人被设定为男性。

    1
    2
    3
    4
    5
    6
    7
    set.seed(180717)
    library(wakefield)
    df.patients <- r_data_frame(n = 250,
    age(x = 30:78, name = 'Age'),
    sex(x = c("Male", "Female"),
    prob = c(0.70, 0.30), name = "Sex"))
    df.patients$Sample <- as.factor('Patients')

  2. summary函数会返回创建的数据框的基本信息。患者平均年龄为53.7岁,并且大约70%为男性(66.8%)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    summary(df.patients)

    Age Sex Sample
    Min. :30.00 Male :167 Patients:250
    1st Qu.:44.00 Female: 83
    Median :57.00
    Mean :55.24
    3rd Qu.:67.00
    Max. :78.00

  3. 接下来,需要创建另一个名为df.population的数据框。我们希望这个数据集的数据和患者df.patients有些不同,因此正常人群的年龄区间被设定为18-80岁,并且男女各占一半。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    set.seed(180717)

    df.population <- r_data_frame(n = 1000, age(x = 18:80, name = 'Age'),
    sex(x = c("Male", "Female"),
    prob = c(0.50, 0.50),
    name = "Sex"))

    df.population$Sample <- as.factor('Population')

    #下方表格显示样本平均年龄为50.1岁,男女比例也大致相等。

    summary(df.population)

    Age Sex Sample
    Min. :18.0 Male :489 Population:1000
    1st Qu.:34.0 Female:511
    Median :51.0
    Mean :50.1
    3rd Qu.:66.0
    Max. :80.0

合并数据框

在匹配样本之前,我们需要把两个数据框合并。首先,生成一个新变量Group来代表研究对象来自哪个全体(逻辑型变量),再添加另一个变量Distress来表示个体的痛苦程度。Distress变量是利用wakefield包中的age函数创建的,可以发现,女性承受的痛苦级别更高。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mydata <- rbind(df.patients, df.population)
mydata$Group <- as.logical(mydata$Sample == 'Patients')
mydata$Distress <- ifelse(mydata$Sex == 'Male',
age(nrow(mydata), x = 0:42, name = 'Distress'),
age(nrow(mydata), x = 15:42, name = 'Distress'))


> mydata
# A tibble: 1,250 x 5
Age Sex Sample Group Distress
<int> <fct> <fct> <lgl> <int>
1 76 Female Patients TRUE 39
2 49 Female Patients TRUE 25
3 57 Male Patients TRUE 39
4 62 Male Patients TRUE 32
5 61 Male Patients TRUE 21
6 44 Male Patients TRUE 27
7 56 Female Patients TRUE 21
8 54 Female Patients TRUE 28
9 49 Male Patients TRUE 17
10 64 Male Patients TRUE 28
# ... with 1,240 more rows

if..else语句的基本语法是

1
2
3
4
5
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
} else {
// statement(s) will execute if the boolean expression is false.
}

当我们比较两组样本的年龄和性别分布时,我们可以发现明显的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
library(pacman)
pacman::p_load(tableone)
table1 <- CreateTableOne(vars = c('Age', 'Sex', 'Distress'),
data = mydata,
factorVars = 'Sex',
strata = 'Sample')
table1 <- print(table1,
printToggle = FALSE,
noSpaces = TRUE)

library(knitr)
kable(table1[,1:3],
align = 'c',
caption = 'Table 1: Comparison of unmatched samples')

Table 1: Comparison of unmatched samples

Patients Population p
n 250 1000
Age (mean (sd)) 55.24 (14.24) 50.10 (18.37) <0.001
Sex = Female (%) 83 (33.2) 511 (51.1) <0.001
Distress (mean (sd)) 25.12 (11.58) 24.35 (11.34) 0.344

样本匹配

现在,我们已经完成了全部的准备工作,可以开始使用MatchIT包中的matchit函数来匹配两组样本了。

1
2
3
4
5
6
7
8
9
library(MatchIt)
set.seed(180717)

match.it <- matchit(Group ~ Age + Sex,
data = mydata,
method="nearest",
ratio=1)

a <- summary(match.it)
  1. 函数中method=‘nearest’的设定指明了使用近邻法(the nearest neighbors method)进行匹配。
  2. 其他方法包括exact matching,subclassification,optimal matching,genetic matching,ull matching等(method = c("exact", "subclass", "optimal", ""genetic", "full"))。
  3. ratio=1意味着这是一一配对。在我们的例子里,对于患者组中的每一个病例,将恰好匹配正常人群样本中的一个人。
  4. 同时也请注意Group变量需要是逻辑型变量(TRUE与FALSE)。

为了后续工作的便利,我们将summary函数的输出赋值给名为a的变量。在匹配完样本后,正常人群样本量减少到了和患者样本一致(n=250,详见Table 2)。

1
kable(a$nn, digits = 2, align = 'c', caption = 'Table 2: Sample sizes')

Table 2: Sample sizes

Control Treated
All 1000 250
Matched 250 250
Unmatched 750 0
Discarded 0 0

根据输出结果,匹配后的年龄和性别分布基本一致了。

1
kable(a$sum.matched[c(1,2,4)], digits = 2, align = 'c', caption = 'Table 3: Summary of balance for matched data')

Table 3: Summary of balance for matched data

Means Treated Means Control Mean Diff
distance 0.23 0.23 0.00
Age 55.24 55.22 0.02
SexMale 0.67 0.67 0.00
SexFemale 0.33 0.33 0.00

倾向性评分的分布可以使用MatchIt包中的plot函数进行绘制。

1
plot(match.it, type = 'jitter', interactive = FALSE)

保存匹配样本

最后,匹配的样本将保存到名为df.match的新数据框中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 获得匹配数据集(含distance和weights列)的第1~ncol(mydata)列

df.match <- match.data(match.it)[1:ncol(mydata)]

# rm()函数:删除变量函数
rm(df.patients, df.population)

# 我们可以对比两类人群间痛苦程度的差异是否依旧显著
pacman::p_load(tableone)
table4 <- CreateTableOne(vars = c('Age', 'Sex', 'Distress'),
data = df.match,
factorVars = 'Sex',
strata = 'Sample')

# printToggle:是否打印输出。如果为FALSE,则不创建输出,并返回一个矩阵。
# noSpaces:是否删除为对齐添加的空格。如果您希望自己在其他软件中对齐数字,请使用此选项。

table4 <- print(table4,
printToggle = FALSE,
noSpaces = TRUE)

# align/列对齐: 'l' (left), 'c' (center) and/or 'r' (right). 默认则align = NULL, 数值列右对齐, 其他列左对齐.
# kable函数:Create Tables In LaTeX, HTML, Markdown And ReStructuredText

kable(table4[,1:3],
align = 'c',
caption = 'Table 4: Comparison of matched samples')
Patients Population p
n 250 250
Age (mean (sd)) 55.24 (14.24) 55.22 (14.21) 0.987
Sex = Female (%) 83 (33.2) 83 (33.2) 1.000
Distress (mean (sd)) 25.12 (11.58) 22.87 (11.72) 0.032

说明:
1. 部分参考自Jason S. Haukoos, MD, MSc的文章The Propensity Score
2. 部分参考孙婷,秦国友等的文章自不同混杂结构条件下各倾向性评分方法的模拟比较研究

一、前言

2015年有2项发表在JAMA上的研究涉及对观察性数据(observational data)的分析,以评估治疗对患者预后的影响。

  1. 在Rozé等人的研究中[1],分析了一个大型观察性数据集,以评估早期超声心动图(early echocardiography screening)筛查动脉导管未闭(patent ductus arteriosus)与早产儿死亡率之间的关系。作者比较了847名接受了筛查的婴儿和666名未接受筛查的婴儿的死亡率。

    两个婴儿组不太相同:筛查组的婴儿年龄更小,女婴较多,并且很少接受过皮质类固醇激素的治疗。作者使用倾向性评分匹配(propensity score matching)创建了来自原始队列的605个匹配的婴儿对以调整这些差异因素。

  2. 另一项在Huybrechts等人的研究中[2],分析了Medicaid Analytic eXtract数据集,以评估妊娠期使用抗抑郁药与新生儿持续性肺动脉高压之间的关系。

    作者纳入了3 789 330名妇女,其中128 950名在妊娠期使用过抗抑郁药。使用抗抑郁药的妇女与没有使用抗抑郁药的妇女在年龄、种族/民族、慢性病、肥胖、吸烟和health care use方面存在差异。作者使用倾向性评分分层(propensity score stratification)方法部分地调整了这些差异。

二、使用方法

(一)为什么使用倾向性方法?

许多因素会影响治疗方法的选择。在许多情况下,患者会接受多种治疗方法。此外,接受不同治疗方法的患者显然不能混为一谈。这通常会导致患者影响结果的特征与治疗方法之间存在相关性(correlation)或混淆(confounding)。(通常称为“confounding by indication”)。

如果从常规的临床实践中获得观察性数据以比较使用不同治疗方法的患者的结局/预后,观察到的差异将是不同的患者特征和不同治疗方法的共同作用结果,难以描绘某一种治疗与另一种治疗的真实效果。

在观察性研究中,随机化是不可能的,因此研究者必须调整组间差异,以获得进行比较的治疗方法与感兴趣结局之间相关性的有效估计。多变量统计方法(Multivariable statistical methods)通常用于评估这种关联,同时调整混淆。

倾向性评分的方法可减少评估治疗效果时的偏倚,并允许研究者在分析非随机的观察性数据时降低混淆的可能性。

(二)倾向性评分的概念及其原理

  1. 倾向性评分是指在一定协变量条件下,一个观察对象接受某种暴露/处理因素(所研究的治疗方法)的可能性,它是一个从0到1的范围内连续分布的概率值。这种概率基于患者的特征,临床医生和临床环境。可以使用多变量统计方法(例如,logicistic回归)来估计这种概率。在这种情况下,所研究的治疗方法是因变量(dependent variable),而患者的特征,处方医生和临床环境则是预测因子(predictors)。

  2. 倾向性评分是指在给定一组协变量(\(X_i\))的条件下,将任意一个研究对象\(i(i=1,2,⋯,n)\)分配到处理组\((Z_i=1)\)的条件概率。第\(i\)个研究对象被分配到处理组的条件概率可以表示为:\[e(X_i)=P(Z_i=1\mid{X_i})\]

    其中\(e(X_i)\)被称为倾向性评分。倾向性评分相同的两个不同组别的研究对象,其拥有的多个协变量整体上分布是相同的。因此,组间协变量的不均衡性对处理效应估计的干扰被消除了。

  3. 倾向性评分的基本原理是用⼀个分值来替代多个协变量,均衡处理组和对照组间协变量的分布。对⾮随机化研究中的混杂因素进行类似随机化的均衡处理,减少选择偏倚。计算得出PS分值后,可采⽤匹配、回归调整、加权、分层的方法来均衡各组间协变量的差异,最终估计处理效应。

  4. 在生物医学研究中,倾向性评分通常用于比较治疗方法,但也可用于评估任何非随机因素(如接触毒素或病原体)与感兴趣结局之间的关系。

(三)倾向性评分的四种常规方法

(1)倾向性评分匹配

  1. 其通常包括2组研究对象,一组接受所研究的治疗而另一组则接受其他治疗,同时匹配具有相似或相同倾向性评分的个体。然后,直接比较接受所研究治疗的个体与接受其他治疗的个体之间的结果。
  2. 常用的匹配方法:
    • 最邻近匹配(Nearest Neighbor Matching)
      • 首先利用logistic模型计算倾向性评分值,根据分组变量将处理组与对照组区分开。
      • 然后对处理组个体随机排序,从处理组中选出第一个个体,与对照组中全部个体的倾向性评分值进行比较,找出对照组中倾向性评分值相同或相近的个体进行配对,若对照组中有2个或2个以上与处理组个体倾向性评分值相同,则随机选取。
      • 配对成功的个体从数据中剔除,对下一个体重复如上步骤,直到处理组个体全部完成匹配。
    • 卡钳匹配(caliper matching)
      • 在最邻近匹配集的基础上根据倾向性评分值在最邻近匹配集中的分布设置不同的卡钳,删除两组倾向性评分值之差在卡钳值范围外的配对个体,得到不同精度的匹配集,然后计算协变量之间的均衡性及样本不平衡性,并将结果进行汇总。
    • 全局最优匹配
  3. 使用倾向性评分匹配样本的分析结果可以接近随机对照试验的分析结果,因为考虑了数据的配对性质。

(2)倾向性评分分层

  1. 估计出每个研究对象的倾向性评分值后,根据倾向性评分值将研究对象分为若干层。

  2. 有文献指出,当估计线性处理效应的时候,将倾向性评分值分为五层可以消除组间近90%的混杂偏倚。经过分层后,每一层内处理组与对照组的协变量分布应该是均衡的。

    尽管增加层或组的数量可以减少偏倚的可能性,但通常使用五个层。

  3. 分析过程中,先在每一层内估计处理效应,最后将每层的效应整合成总的处理效应。这种方法基于于这样一种观念,即每个组/层中的个体比个体更相似。因此,他们的结果可以直接比较。

(3)使用倾向性评分进行协变量调整

在倾向性评分模型之后,构建单独的多变量模型,其中研究结果用作因变量(dependent variable),治疗组和倾向性评分用作预测变量(predictor variables)。这允许研究者评估与所研究治疗相关的结果,同时调整接受治疗的概率,从而减少混淆。

(4)倾向性评分逆处理概率加权/inverse probability of treatment weighting using the propensity score

在这种情况下,倾向性评分用于计算每个个体的统计权重(statistical weights)以创建样本,其中潜在的混杂因素的分布独立于暴露因素,允许对治疗和结果之间的关系进行无偏估计。

  1. 是边缘结构模型这类因果推断⽅法中的一种,其基本原理与传统的标准化法类似。

  2. 根据倾向性评分值赋予每个研究对象⼀个相应的权重,从⽽构建出⼀个虚拟的人群,在这个虚拟人群中,协变量的组间分布没有差异,因此消除了混杂因素的影响。

  3. 在逆处理概率加权的方法中,权重被定义为研究对象实际分组情况的概率的倒数,计算如下: \[w_i = \cfrac{z_i}{e_i}+\cfrac{(1-z_i)}{(1-e_i)}\]

    • \(z_i=1\)(处理组),则\(w_i = \cfrac{1}{e_i}\)

    • \(z_i=0\)(对照组),则\(w_i = \cfrac{1}{1-e_i}\)

  4. 计算权重后,再应⽤用加权回归的⽅方法估计处理理效应。

(四)倾向性评分以外的替代策略:以调整观察性研究中各组之间的基线差异

  1. 匹配基线特征/matching on baseline characteristics
  2. 分层分析/stratified analyses
  3. 多变量统计方法/multivariable statistical methods

倾向性评分方法通常比这些方法更实用或在统计上更有效,部分原因是倾向性评分方法可以限制最终分析中使用的预测变量的数量。倾向性评分方法通常允许将更多变量包括在倾向性评分模型(propensity score model)中,从而增加了这些方法有效调整混淆的能力,而不是直接纳入研究结果的多变量分析。

三、倾向性评分方法的局限性是什么?

  1. 每个研究对象的倾向性评分基于能够测量的患者特征,如果无法测量的因素影响治疗选择,则可能仍存在未调整的混淆。因此,在倾向性评分模型中使用较少的变量降低了有效调整混淆的可能性。
  2. 虽然倾向性评分匹配可用于组合可比较的研究组,但匹配的质量取决于倾向性评分模型的质量,而倾向性评分模型的质量又取决于进行分析的数据的质量、大小以及模型的构建方式。
  3. 传统的建模方法(如,变量选择,交互的使用use of interactions,回归诊断regression diagnostics等)通常不推荐用于倾向性评分模型的构建。例如,倾向性评分模型可以纳入更多数量的预测变量。

四、结果该如何解释?

鉴于这些研究属于观察性研究,治疗组和未治疗组中的个体不同。为了能够准确估计治疗与结局之间的关联,研究者必须调整两组之间的差异。

使用倾向性评分方法时,无论是通过匹配还是分层,结果的估计偏差小于不使用此类方法的估计偏差。

尽管观察性数据不能像随机临床试验那样严格地建立因果关系或确定治疗效果,但如果倾向性评分方法得到适当使用且样本量足够大,这些方法可能提供治疗方法可能效果的可靠近似值。这种方法对于随机临床试验不可行或不可能进行的情况特别有价值。

五、在评估倾向性分析的结果时,读者应该考虑哪些注意事项?

Rozé等人和Huybrechts等人的研究分别使用了倾向性评分匹配和倾向性评分分层。尽管这两种方法在平衡研究组方面比基于基线特征的简单匹配或分层更有效,但它们在最小化偏倚(minimize bias)方面的能力各不相同。通常,倾向性评分匹配比倾向性评分分层更大程度地减少偏差。在使用倾向性评分方法后,评估各组之间的平衡对于让读者评估研究组的可比性非常重要。

尽管没有单一的标准方法来评估平衡,但是比较治疗组和未治疗组患者之间的特征通常始于比较汇总的统计数据(例如,平均值或比例)和观察到的特征的整体分布。

对于倾向性评分匹配的样本,经常使用标准化差异(standardized differences,即差异differences/合并的标准偏差pooled standard deviations)。尽管没有普遍接受的阈值,但小于0.1的标准化差异通常被认为是可忽略不计的。

评估平衡提供了一般意义,即匹配或分层的良好程度,以及结果可能有效的程度。

不幸的是,只能在研究中可以测量的患者特征中显示平衡。无法测量的差异仍可能存在于各组间,从而导致结果的偏倚。

六、参考文献

  1. Rozé JC, Cambonie G, Marchand-Martin L, et al. Hemodynamic EPIPAGE 2 Study Group. Association between early screening for patent ductus arteriosus and in-hospital mortality among extremely preterm infants. JAMA. 2015; 313(24):2441–2448.
  2. Huybrechts KF, Bateman BT, Palmsten K, et al. Antidepressant use late in pregnancy and risk of persistent pulmonary hypertension of the newborn. JAMA. 2015; 313(21):2142–2151.

说明
1. 部分参考作者姚屹晨在简书上的笔记https://www.jianshu.com/p/650e458bc9ce
2. 部分参考作者m4jing在Github上的译文https://github.com/getify/You-Dont-Know-JS/blob/1ed-zh-CN/scope%20%26%20closures/ch2.md

一、欺骗词法作用域

eval

  1. eval函数可以接收一个字符串作为参数,以动态形式插入程序的某个位置,并对其词法作用域的环境进行修改。

    1
    2
    3
    4
    5
    6
    7
    function foo(str,a){
    eval(str);
    console.log(a,b);
    }
    var b = 2;
    foo('var b = 5;',1);
    >>>1 5

  2. 在严格模式下,eval函数在运行时拥有自己的词法作用域。这意味着其中的声明无法修改所在的作用域。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function foo(str,a){
    "use strict"
    eval(str);
    console.log(a,b);
    }
    var b = 2;
    foo('var b = 5;',1);
    >>>1 2

    function foo(str,a){
    "use strict"
    eval(str);
    console.log(a,b);
    }
    foo('var b = 5;',1);
    >>>Uncaught ReferenceError: b is not defined

with

  1. with通常被当做重复引用同一个对象中的多个属性的快捷方式,可以不需要重复引用对象本身:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var obj = {
    a: 1,
    b: 2,
    c: 3
    };

    obj.a = 2;
    obj.b = 3;
    obj.c = 4;

    with(obj) {
    a = 3;
    b = 4;
    c = 5;
    }

  2. 实际上不仅仅是为了方便地访问对象属性:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function foo(obj){
    with(obj){
    a = 2;
    }
    }
    var o1 = {
    a: 3
    };
    var o2 = {
    b: 3
    };
    foo(o1);
    o1.a;
    >>>2

    foo(o2);
    o2.a;
    >>>undefined

    a;
    >>>2
    //a被泄露到全局作用域中。
    因为,在非严格模式下,若a=2中的变量a未声明,也就是在任何作用域中都查找不到变量a,那么就会在全局作用域中创建一个变量a,并将2赋值于它。

    foo(o1)
    foo(o2)
  3. with语句接收一个对象,这个对象有0个或多个属性,并将这个对象视为好像它是一个完全隔离的词法作用域,因此这个对象的属性被视为在这个“作用域”中词法定义的标识符。如上图中的o1 Scopeo2 Scope

  4. 尽管一个with块将一个对象视为一个词法作用域,但在with块内部的一个普通var声明将不会归于这个with块的作用域,而是归于包含它的函数作用域。

  5. 当我们传递对象o1with时,with所声明的作用域是o1,而这个作用域中含有一个与o1.a属性同名的标识符。但当我们将o2对象作为作用域时,其中没有a标识符,因此进行了正常的LHS (Left Hand Side)查找,最后导致创建了一个全局变量a并赋值为2。

二、性能

JavaScript引擎在编译阶段期进行许多性能优化工作。其中的一些优化原理都归结为实质上在进行词法分析时可以静态地分析代码,并提前决定所有的变量和函数声明都在什么位置,这样在执行期间就可以少花些力气来解析标识符。

但如果引擎在代码中找到一个eval(..)with,它实质上就不得不假定自己知道的所有的标识符的位置可能是不合法的,因为它不可能在词法分析时就知道你将会向eval(..)传递什么样的代码来修改词法作用域,或者你可能会向with传递的对象有什么样的内容来创建一个新的将被查询的词法作用域。

换句话说,悲观地看,如果eval(..)with出现,那么它将做的几乎所有的优化都会变得没有意义,所以它就会简单地根本不做任何优化。没有优化,代码就运行的更慢。