NIPT(Noninvasive prenatal testing)非侵入式产前检测,国内一般称作“无创DNA产前检测技术”。之前一直没有时间看,这个技术究竟怎么从母亲的血液中测胎儿的DNA,现在有时间了,赶紧记录一下原理。

NIPT技术细分为两种:一种是测CNV,另一种是测SNP。 在2012年时比较流行的4中具体方式是1

  1. Sequenom 公司:定量,短序列全基因组测序,并且评估胚胎DNA含量
  2. Verinata 公司:定量,短序列全基因组深度测序,并评估胚胎的DNA含量
  3. Ariosa 公司:定量,目标区域扩增,并且根据SNP频率来确定胚胎DNA含量
  4. Natera 公司:基于非定量的SNP,分析等位基因频率(这个方法中用白细胞的测序结果作为母亲的基因型)

其中重点要说明的是,测CNV是不用区分母亲和胎儿的DNA的,首先,我们明确母亲没有任何一种三体综合征和染色体缺失,那么在这种条件下仍然检测出一定比例的三倍体或者单倍体,那么就说明是胚胎出现了问题。

从测序角度来说就是测序深度越高越精确,对于测序结果是否说明有染色体异常,用假设检验(Z-score)来估计其异常程度。

下图比较了四个公司的方法的准确性,可以看到对于21三体综合征是最准确的,对于18三体综合征和单倍体的检测准确性低。

Imgur

测不准的原因在于测序技术有GC偏好性,并且在13和X染色体上表现得很明显2

NIPT方法目前主要还是用于测染色体倍增或者缺失(截至2013年),对于一些微缺失和微倍增( microdeletions and microduplication )用芯片的方法也开展了检测研究。

我个人的理解,孕妇首先应该做常规血检和B超检查,如果检查认为有问题,可以先做一个无创DNA产前检测来确认一下,如果无创也指示有问题或者数值处于临界值,那么继续做羊水穿刺来确定。

我本认为技术应该很高超,结果看完相关网络资料发现不用区分母婴的DNA时,方法也就很常规了。

=========================

2019年12月18日更新,修改错别字,标注失效链接

我从网上搜NIPT的具体计算方法,结果第一篇文章是自己的。。。看样子需要再写一篇算法的介绍。


又来补课了,这三部太经典了,一口气看完,每一部都很有意思。

里面的梗是在是太多了:

  • 没想到霸王龙的小手原来在十几年前已经是个梗了。
  • 企鹅叫Wheezy,马上想到Linux/Debian,结果查看百科,原来所有Debian的发行版本号命名都来自这部片子。
  • I am your father!
  • 第三部的越狱,比TV系列剧越狱难度还高。
  • 玩具里还有一只龙猫。

看完之后去翻资料,原来在2014年还出了个短篇,2018年还可能要有第四部。Andy的玩具传承给了Bonnie,不知道第四部会有什么样的故事(据说是去找Bo)。

最后再喊一句 To Infinity and Beyond!(英文博客的subtitle出处)


之前(今年一月份)本以为Jupyter这种形式可以很成功的复制到Jilia和R上,结果我发现装个IJulia非常费尽。 依赖的一个模块在安装时使用curl -f -o /root/.julia/v0.4/ZMQ/deps/downloads/zeromq-3.2.4.tar.gz -L http://download.zeromq.org/zeromq-3.2.4.tar.gz的地址已经找不到安装包了。 换成Github的结果还因为亚马逊云的问题没下载下来。顿时失去了用Jupyter写IJulia的兴趣。 20160607更新,上述逗逼问题已经解决了,安装ZMQ要用系统的安装命令dnf install zeromq3* 或者 apt-get install libzmq3*。成功安装好IJulia! ZMQ.jl 两天前更新了新的版本,但是需要在julia里及时更新METAINFO Pkg.update() 否则安装时还会出现上述问题。

另外,Rstudio太好用,以至于自己也出了个简易的R notebook,我就没兴趣用IRkernel了。

Jupyter还是用来写python比较好。


最近在写R画图的速查手册,写这个东西主要是记录学习R的基本画图命令。除此之外,还学习了Rmarkdown Tufte样式的使用。 不得不提,用这个样式编写绘图类的文档,不如使用普通的书籍格式方便。$\LaTeX$编写文档时图表与正文不一定能紧密相连。 基本上前面添加两句话,后面的图位置就全都跑了,在这个版式里该问题由为突出,主要是Tufte包里没有页面内部的交叉引用功能。 用了2天后,我就转向了Bookdown包,这个包是Xie Yihui从手术室出来后连续几个月不间断工作完成的新包,但是基本命令我还没有掌握, 所以第一版的速查手册是用Tufte包完成的。第一版里面对于排版以及大纲逻辑都不太清晰,以后的更新中会有较大改动。

PDF版文件在这里下载,会持续更新。

Bookdown包目前编译pdf文档采用的命令是bookdown::render_book("index.Rmd", "bookdown::pdf_book")。注意首先要将R工作目录跳转到需要编译的文档目录下,否则会找不到要编译的文件。 不能在函数中以添加路径的方式来编译,因为找不到需要涵盖到书籍里的所有文档(这是错误的->render_book("/root/bookfiles/index.Rmd"))。

参考资料

一篇文章、一本書的完整結構


我自己的系统里没有安装windows下的字体,也不打算装ctex宏包,所以需要用xeCJK宏包来显示中文。

如果在没有安装SimSun字体的情况下使用Rmarkdown里的tufte包的模板写中文文档,编译时会报错找不到SimSun字体。 这是因为tufte模板里作者默认使用ctex,ctex默认使用了SimSun字体。

如果把ctex去掉,用in_header: header.tex 的方法来调用xeCJK宏包,那么会发现有些页面的字会重叠或者不显示。

例如在模板的中文例子里“响应式页面”后面有一段话:

# 响应式页面

这个包生成的HTML页面是响应式的:
如果页宽小于760像素,边栏内容会自动隐藏。
此时我们可以点击脚注的序号显示它,其它边栏附注则可以通过点击圆圈加号的符号显示。

# 结语

希望诸位喜欢R Markdown的超级简洁性,同时我们感谢Tufte-CSS和Tufte-LaTeX项目的作者们,没有他们的辛勤劳动,就没有这个**tufte**包。
这份文档的R Markdown源文档可以在[Github上找到](https://github.com/rstudio/tufte/raw/master/inst/rmarkdown/templates/tufte_ctex/skeleton/skeleton.Rmd),
或者直接使用RStudio菜单`File -> New File -> R Markdown -> From Template`新建一个文档,或直接从R里面打开这个Rmd文件:

但是在生成的文档中缺失了。

Imgur

解决这个问题的最简单方法就是在header里重新定义上边界和下边界的距离。

\usepackage{xeCJK}  
\setCJKmainfont{WenQuanYi Zen Hei} 
%定義top和bottom邊界的距離
\usepackage{geometry}
\geometry{top=2cm,bottom=2cm}

所以完整的Rmarkdown YAML 写法是:

---
title: "Tufte样式"
subtitle: "一个R Markdown实现"
author: "JJ Allaire,谢益辉"
date: "`r Sys.Date()`"
output:
  tufte::tufte_handout:
    citation_package: natbib
    includes:
      in_header: header.tex
    latex_engine: xelatex
biblio-title: 参考文献
bibliography: skeleton.bib
link-citations: yes
---

其中header.tex 像上面\(\LaTeX\)例子中的那样。

这是打脸最快的一篇文章

20160519更新

我现在已经不用tufte包了,改用bookdown包的bookdown::tufte_handout2

安装方式如下:

install.packages("devtools")
devtools::install_github("rstudio/bookdown")

强烈推荐使用,但要注意编译后的排版同tufte包的有所不同,主要是bookdown包里的tufte样式貌似没有对table进行优化。

在bookdown里配置YAML实现中文tufte sytle的方法如下所示。

title: "A Minimal Book Example"
author: "Yihui Xie"
date: "`r Sys.Date()`"
output: 
  bookdown::tufte_handout2:
    citation_package: natbib
    latex_engine: xelatex
    includes: 
      in_header: header.tex
    toc: yes
link-citations: yes
description: "This is a minimal example of using the bookdown package to write a book."