学习笔记:inferCNV

本来对4vCPUs | 32GB的配置没报太大期望,结果本地花了5个多小时才跑完的infercnv数据,服务器上只用了1个半小时就搞定了(果然是我的本太废柴了)。那就趁此机会把单细胞cnv分析捋捋清楚。
p.s. 不得不说kinesin老师的docker镜像真香,谁用谁知道
重点:本文仅为个人学习笔记,代码参考自健明老师,非原创!!!如有理解错误欢迎批评指正~参考文章如下:

  1. https://www.jianshu.com/p/05b728c39eee
  2. https://mp.weixin.qq.com/s/Qns9TCSgNg_CQuwQxQbVnw
  3. https://mp.weixin.qq.com/s/aWM5P244HPjWAmPwqacq-Q
  4. https://mp.weixin.qq.com/s/3zM7sfhX-v1FmKcxC8Ae_w

首先,infercnv的计算方法来自于2014的science关于GBM文章(PMID: 24925914),该文章首次利用单细胞转录组数据推断CNV。在Supplementary Materials中有如下描述:

1.png

其实很简单,就是将所有基因根据染色体上的位置进行排序,第i个基因的cnv值就是其上游50个基因和下游50个基因的平均表达值(因此每条染色体开头和结尾的50个基因是无法计算的)。
注意这里的 𝐸𝑘(𝑜𝑗)是relative normalized expression,因此如果是seruat对象,需要GetAssayData(object, slot = "data"),如果直接拿到csv表达矩阵,那就edgeR::cpm一下。
文中的公式可以转换为下面的代码,更易于理解~

cnv <- lapply(51:(nrow(dat)-50), function(i){
    this_cnv <- unlist( lapply(1:ncol(dat), function(j){
      sum(dat[(i-50):(i+50),j])/101
    }))
    return(this_cnv)
  })
2.png

然后这里说他们的分析纳入了6000个基因,如果按照上述100基因为步长的计算方法,因为每条染色体的基因数分布不一样,所以最后拿到的是大概350个可计算的cnv。为了避免受到文库质量的影响造成cnv数值的偏移,他们对数据进行了中心化(就是scale了一下吧)。
文章中作者纳入~6000个基因进行分析,为啥不是所有基因?可能没必要为了变异度不高的基因降低运算速度?那是不是可以根据方差rank进行过滤呢?
其实我自己的分析中只考虑删除了在大多数细胞中都不表达的基因,一般来说会过滤到7-8000个基因左右。

subraw.data[apply(subraw.data,1, function(x) sum(x>1) > 50),]

理解了原理之后,其实走流程并不困难,毕竟我们可以走健明大神铺好的路~流程代码单细胞天地都有我就不贴了,不过下面这个基因位置参考文件的代码太牛了,给AnnoProbe打call,大家感受下:

library(AnnoProbe)
geneInfor=annoGene(rownames(dat),"SYMBOL",'human')
colnames(geneInfor)
geneInfor=geneInfor[with(geneInfor, order(chr, start)),c(1,4:6)]
geneInfor=geneInfor[!duplicated(geneInfor[,1]),]
length(unique(geneInfor[,1]))

运行代码很简单:

infercnv_obj = infercnv::run(infercnv_obj,
                             cutoff=0.1, # cutoff=1 works well for Smart-seq2, and cutoff=0.1 works well for 10x Genomics
                             out_dir=my_dir,
                             cluster_by_groups=FALSE,
                             denoise=TRUE,
                             HMM=TRUE)

这里需要注意:

  1. 官方推荐smart-seq2的cutoff设置为1,10X的cutoff设置为0.1(其实10X这种测序深度用来估算cnv真的合适吗);
  2. HMM是隐马尔科夫模型,就到这吧,我是真没看懂HMM具体算法,反正你要是时间够就HMM=TRUE,不然的话可以先设置HMM=FALSE看一下大致结果。

写的比较简单,只是想从原理上去理解一下代码,主要是打个卡证明今天有学习。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354