免疫组库数据分析||immunarch教程:Kmer 与 Motif 分析

immunarch — Fast and Seamless Exploration of Single-cell and Bulk T-cell/Antibody Immune Repertoires in R

10× Genomics单细胞免疫组库VDJ分析必知必会
免疫组库数据分析||immunarch教程:快速开始
免疫组库数据分析||immunarch教程:克隆型分析
免疫组库数据分析||immunarch教程:探索性数据分析
免疫组库数据分析||immunarch教程:载入10X数据
免疫组库数据分析||immunarch教程:GeneUsage分析
免疫组库数据分析||immunarch教程:Diversity 分析
免疫组库数据分析||immunarch教程:Clonotype tracking
免疫组库数据分析||immunarch教程:Clonotypes annotation

今天,我们继续我们的免疫组库数据分析的Demos,这一次我们来谈谈Kmer 与 Motif 分析。像我这样刚入门免疫组库的人首先会问什么是Kmer 与 Motif ?

不巧的是,18年初当时你们家运来小哥哥还在做宏基因组了解过Meta小课题:K-mer.

k-mer 是指将reads分成包含k个碱基的字符串,一般长短为m的reads可以分成m-k+1个k-mers.

Kmer 反应序列的特性,在我们免疫组库数据中cdr3和nt序列,自然可以计算他们的Kmer 了。

在生物学领域里,也经常会提到到motif这个词。 模体(motif)是蛋白质分子中具有特定空间构象和特定功能的结构成分。其中一类就是具有特殊功能的超二级结构。一个模体总有其特征性的氨基酸序列,并发挥特殊的功能。一般而言,常见的motion有以下几种形式:有规则地聚集在一起形成全由α-螺旋、全由β-片层或α-螺旋与β-片层混合、具体说,形成相对稳定的αα、βββ、βαβ、β2α和αTα等超二级结构,又称模体(motif)或模序。这百科。

Kmer 分析

在immunarch计算Kmer 很简单。

library(immunarch); data(immdata)       # Load the package and the test dataset
?getKmers

kmers <- getKmers(immdata$data[[1]], 3)
kmers

# A tibble: 4,405 x 2
   Kmer  Count
   <chr> <int>
 1 AAA       6
 2 AAD       5
 3 AAE       9
 4 AAF       2
 5 AAG      37
 6 AAI       2
 7 AAK       5
 8 AAL       4
 9 AAM       1
10 AAN      13
# ... with 4,395 more rows


如果有可能计算一批免疫序列中出现的kmers。为了做到这一点,您只需要向函数提供一个免疫程序列表。NA表示样品中没有这样的kmer,具体由列名决定。

kmers <- getKmers(immdata$data, 5)
kmers

# A tibble: 172,926 x 13
   Kmer  `A2-i129` `A2-i131` `A2-i133` `A2-i132` `A4-i191`
   <chr>     <int>     <int>     <int>     <int>     <int>
 1 AAAAG        NA        NA        NA        NA        NA
 2 AAAAL        NA        NA        NA        NA        NA
 3 AAAAW        NA        NA        NA        NA        NA
 4 AAADE        NA        NA        NA        NA        NA
 5 AAADN        NA         1        NA        NA        NA
 6 AAADT        NA        NA        NA        NA        NA
 7 AAAEA        NA        NA        NA        NA        NA
 8 AAAEN        NA        NA        NA         1        NA
 9 AAAET        NA        NA        NA        NA        NA
10 AAAFE        NA        NA        NA         1        NA
# ... with 172,916 more rows, and 7 more variables:
#   `A4-i192` <int>, MS1 <int>, MS2 <int>, MS3 <int>,
#   MS4 <int>, MS5 <int>, MS6 <int>

注意,默认情况下,getKmers()会在计算kmer统计数据之前过滤掉所有非编码序列。通过设置coding参数为FALSE,你可以同时使用编码和非编码序列:

kmers <- getKmers(immdata$data[[1]], 3, .coding = F)
kmers

# A tibble: 4,645 x 2
   Kmer  Count
   <chr> <int>
 1 **G       1
 2 *~G       4
 3 *~L       1
 4 *AA       1
 5 *D~       1
 6 *EE       1
 7 *G~       1
 8 *GG       1
 9 *GP       1
10 *HL       1
# ... with 4,635 more rows

一样的啦,可视化很简单

kmers <- getKmers(immdata$data, 5)
vis(kmers)

kmers的vis()函数有许多参数来操作图形。首先,.head参数指定了要可视化的最丰富的kmers数量。

p1 <- vis(kmers, .head = 5)
p2 <- vis(kmers, .head = 10)
p3 <- vis(kmers, .head = 30)

(p1 + p2) / p3

选项“stack”将所有的条堆叠在一起,这样你就可以看到kmers的完整分布。选项“fill”堆叠所有条在彼此之上也一样,但常态化它在这样的方式,所以你看到每kmer计数的分布,也就是说,你可以清楚地看到哪个曲目比其他特定kmer有更多的kmer。选项“dodge”将不同样本的kmer条分组,以便您可以清楚地看到,哪些样本总体上有更多的kmer出现。

如果您的kmer计数的分布对于某些曲目非常不平衡,则需要另外的参数是.log。它允许使用y轴的对数变换所以你可以看到kmer计数的数量级上的差异。

p1 <- vis(kmers, .head = 10, .position = "stack")
p2 <- vis(kmers, .head = 10, .position = "stack", .log = T)
p3 <- vis(kmers, .head = 10, .position = "fill",.log = T)
p4 <- vis(kmers, .head = 10, .position = "dodge", .log = T)

(p1 + p2) /(p3+ p4 )


Motif 分析

immunarch使用常见的方法进行序列基序分析( Motif 分析),并使用不同类型的矩阵来表示序列基序:

  • 位置频率矩阵(PFM)——每个氨基酸在每个位置出现的矩阵;
  • 位置概率矩阵(PPM) -一个矩阵,每个氨基酸在每个位置出现的概率;
  • 位置权重矩阵(PWM) -一个矩阵与PPM元素的对数概率;
  • PWM中具有元件自信息的矩阵。

为了计算和可视化序列基序,首先你需要计算一个输入免疫序列的kmer统计,然后应用kmer_profile()函数来计算序列基序矩阵:

kmers <- getKmers(immdata$data[[1]], 5)
kmer_profile(kmers)

kmer_profile(kmers)
   [,1]  [,2]  [,3] [,4] [,5]
A  8955  8976  3791 3246 3159
C  6469    26    27   18   10
D  2129  2131  2131 2130 2085
E  3315  5868  5872 5870 5720
F   688   691   691 2600 9029
G  9194  9603  9603 9566 9326
H   405   405   405  680  659
I   750  1020  1107  896  852
K   721  1099  1100 1100 1044
L  3073  3078  4108 4097 4033
M   241   245   246  246  226
N  2421  2423  2424 2419 2355
P  2285  2564  2564 2559 2509
Q  2459  2466  7087 7086 7051
R  3487  3502  3504 3496 2917
S 14021 14029 13082 8128 3462
T  3408  5669  5671 6024 5797
V  1703  1927  1927 1561 1508
W   485   486   487  450  439
Y  2060  2061  2442 6097 6088
attr(,"class")
[1] "immunr_kmer_profile_pfm" "matrix"     

目前我们不支持对多个样本进行序列基序分析,但我们正在进行研究。为了计算和可视化所有样本的序列基序矩阵,您需要逐个处理它们,这可以通过for循环或lapply()函数轻松完成。

.method = "freq" - position frequency matrix (PFM);
.method = "prob" - position probability matrix (PPM);
.method = "wei" - position weight matrix (PWM);
.method = "self" - self-information matrix.

如 :

kmer_profile(kmers, "freq")
   [,1]  [,2]  [,3] [,4] [,5]
A  8955  8976  3791 3246 3159
C  6469    26    27   18   10
D  2129  2131  2131 2130 2085
E  3315  5868  5872 5870 5720
F   688   691   691 2600 9029
G  9194  9603  9603 9566 9326
H   405   405   405  680  659
I   750  1020  1107  896  852
K   721  1099  1100 1100 1044
L  3073  3078  4108 4097 4033
M   241   245   246  246  226
N  2421  2423  2424 2419 2355
P  2285  2564  2564 2559 2509
Q  2459  2466  7087 7086 7051
R  3487  3502  3504 3496 2917
S 14021 14029 13082 8128 3462
T  3408  5669  5671 6024 5797
V  1703  1927  1927 1561 1508
W   485   486   487  450  439
Y  2060  2061  2442 6097 6088
attr(,"class")
[1] "immunr_kmer_profile_pfm" "matrix"       

序列基序矩阵的可视化由vis()完成。有两种图形可供选择—— sequence logo和“text logo”。参数.plot规定了plot的类型:.plot =“seq”用于 sequence logo图形,.plot =“text”(默认情况下)用于“text logo”图形。

kp <- kmer_profile(kmers, "self")
p1 <- vis(kp)
p2 <- vis(kp, .plot = "seq")

p1 + p2

序列标志是一个图形表示的氨基酸或核酸多序列。每个标志由成堆的符号,一个堆栈中的每个位置序列。堆栈的总高度表示该位置的序列守恒,而堆栈内符号的高度表示每个氨基酸或核酸在该位置的相对频率。一般来说,序列标志比一致序列提供更丰富、更精确的描述,例如对结合位点的描述。

本节课我们体验了Kmer 与 Motif 分析,这两个都是基于序列来分析的,进一步细化了CDR3的aa和nt的多样性。之前的分析都是把他们当作一个整体看多个样本之间的关系。那么,这样做的意义什么呢?这就偏向于结构了,尽管序列结构只是初级结构。


http://weblogo.threeplusone.com/create.cgi
https://immunarch.com/articles/web_only/v9_kmers.html

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