使用immunarch包进行单细胞免疫组库数据分析(十):Kmer and sequence motif analysis and visualisation

Kmer统计计算

immunarch包中,要计算 kmer 出现的次数非常容易。我们可以直接使用getKmers()函数进行Kmer的统计计算:

kmers <- getKmers(immdata$data[[1]], 3)
## Warning: `tbl_df()` is deprecated as of dplyr 1.0.0.
## Please use `tibble::as_tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.

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

同样的,我们还可以计算一批免疫组库中 kmer 的出现次数。为此,我们只需要向该函数提供一个免疫组库的列表。其中,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` `A4-i192`   MS1   MS2
##    <chr>     <int>     <int>     <int>     <int>     <int>     <int> <int> <int>
##  1 AAAAG        NA        NA        NA        NA        NA        NA    NA     1
##  2 AAAAL        NA        NA        NA        NA        NA        NA    NA    NA
##  3 AAAAW        NA        NA        NA        NA        NA         1    NA    NA
##  4 AAADE        NA        NA        NA        NA        NA        NA    NA    NA
##  5 AAADN        NA         1        NA        NA        NA        NA    NA    NA
##  6 AAADT        NA        NA        NA        NA        NA        NA    NA    NA
##  7 AAAEA        NA        NA        NA        NA        NA        NA    NA    NA
##  8 AAAEN        NA        NA        NA         1        NA        NA    NA    NA
##  9 AAAET        NA        NA        NA        NA        NA        NA    NA    NA
## 10 AAAFE        NA        NA        NA         1        NA        NA    NA    NA
## # … with 172,916 more rows, and 4 more variables: 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

Kmer统计可视化

类似的,我们可以使用vis()函数来可视化kmer的统计信息:

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

通过设置.head参数,可以指定要可视化的最丰富的 kmer 的数量。

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

( p1 + p2 ) / p3
image.png

通过设置.position参数,我们可以更改调整柱的位置:“stack”, “dodge” and “fill”:

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

( p1 + p2 ) / p3
image.png

其中,选项“stack”将所有条形堆叠在一起,以便您可以查看 kmer 的完整分布。选项“fill”也将所有条形堆叠在一起,但同时对其进行标准化,以便您可以看到每个kmer的计数分布。选项“dodge”将不同样本的 kmer 条进行分组,以便您可以清楚地看到哪些样本总体上出现了更多的 kmer。

如果您的kmer计数的分布对于某些repertoire严重不平衡,则需要设置另外的参数.log。它允许使用y轴的对数变换,因此你可以在 kmer 计数中看到数量级的差异。

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

p1 + p2
image.png

Motif分析

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

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

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

kmers  <-  getKmers ( immdata $ data [[ 1 ]], 5 )
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"

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

其中,参数.method指定要计算的矩阵:

  • .method = "freq" - 位置频率矩阵(PFM);
  • .method = "prob" - 位置概率矩阵(PPM);
  • .method = "wei" - 位置权重矩阵(PWM);
  • .method = "self" - 自我信息矩阵。
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"
kmer_profile ( kmers , "prob" )
##          [,1]         [,2]         [,3]         [,4]         [,5]
## A 0.131172274 0.1314798811 0.0555303286 0.0475472030 0.0462728325
## C 0.094757503 0.0003808464 0.0003954943 0.0002636629 0.0001464794
## D 0.031185458 0.0312147534 0.0312147534 0.0312001055 0.0305409483
## E 0.048557911 0.0859540934 0.0860126851 0.0859833892 0.0837861987
## F 0.010077781 0.0101217244 0.0101217244 0.0380846358 0.1322562217
## G 0.134673131 0.1406641375 0.1406641375 0.1401221638 0.1366066590
## H 0.005932414 0.0059324144 0.0059324144 0.0099605970 0.0096529904
## I 0.010985953 0.0149408956 0.0162152661 0.0131245514 0.0124800422
## K 0.010561162 0.0160980826 0.0161127305 0.0161127305 0.0152924461
## L 0.045013110 0.0450863496 0.0601737245 0.0600125972 0.0590751293
## M 0.003530153 0.0035887445 0.0036033925 0.0036033925 0.0033104337
## N 0.035462655 0.0354919510 0.0355065989 0.0354333592 0.0344958913
## P 0.033470536 0.0375573101 0.0375573101 0.0374840704 0.0367516735
## Q 0.036019277 0.0361218122 0.1038099284 0.1037952804 0.1032826026
## R 0.051077356 0.0512970748 0.0513263707 0.0512091872 0.0427280318
## S 0.205378722 0.2054959059 0.1916243097 0.1190584306 0.0507111573
## T 0.049920169 0.0830391539 0.0830684498 0.0882391715 0.0849140899
## V 0.024945436 0.0282265743 0.0282265743 0.0228654294 0.0220890888
## W 0.007104249 0.0071188973 0.0071335452 0.0065915716 0.0064304443
## Y 0.030174750 0.0301893978 0.0357702618 0.0893084709 0.0891766395
## attr(,"class")
## [1] "immunr_kmer_profile_ppm" "matrix"
kmer_profile ( kmers , "wei" )
##       [,1]      [,2]      [,3]       [,4]      [,5]
## A 8.806550 8.8099289 7.5664346  7.3425192  7.303324
## C 8.337399 0.3785116 0.4329594 -0.1520031 -1.000000
## D 6.734032 6.7353868 6.7353868  6.7347096  6.703904
## E 7.372865 8.1967251 8.1977082  8.1972167  8.159871
## F 5.104337 5.1106138 5.1106138  7.0223678  8.818422
## G 8.844549 8.9073414 8.9073414  8.9017720  8.865115
## H 4.339850 4.3398500 4.3398500  5.0874628  5.042207
## I 5.228819 5.6724253 5.7905114  5.4854268  5.412782
## K 5.171927 5.7800476 5.7813597  5.7813597  5.705978
## L 7.263504 7.2658494 7.6822924  7.6784241  7.655710
## M 3.590961 3.6147098 3.6205864  3.6205864  3.498251
## N 6.919459 6.9206506 6.9212459  6.9182670  6.879583
## P 6.836050 7.0022525 7.0022525  6.9994363  6.970969
## Q 6.941928 6.9460290 8.4690312  8.4688277  8.461684
## R 7.445843 7.4520353 7.4528590  7.4495614  7.188342
## S 9.453374 9.4541965 9.3533674  8.6667566  7.435462
## T 7.412782 8.1469505 8.1474593  8.2345780  8.179163
## V 6.411935 6.5902128 6.5902128  6.2863267  6.236493
## W 4.599913 4.6028844 4.6058499  4.4918531  4.456149
## Y 6.686501 6.6872007 6.9319194  8.2519557  8.249825
## attr(,"class")
## [1] "immunr_kmer_profile_pwm" "matrix"
kmer_profile ( kmers , "self" )
##         [,1]        [,2]        [,3]        [,4]       [,5]
## A 0.38439580 0.384852924 0.231593692 0.208945980 0.20515943
## C 0.32213912 0.004325845 0.004470689 0.003134693 0.00186571
## D 0.15602031 0.156124588 0.156124588 0.156072452 0.15371599
## E 0.21191400 0.304302404 0.304425277 0.304363847 0.29971526
## F 0.06684268 0.067070605 0.067070605 0.179555617 0.38600202
## G 0.38953746 0.398033587 0.398033587 0.397280373 0.39232070
## H 0.04388305 0.043883048 0.043883048 0.066233509 0.06462492
## I 0.07149874 0.090610399 0.096424136 0.082049289 0.07892670
## K 0.06933496 0.095895752 0.095961867 0.095961867 0.09222931
## L 0.20136664 0.201588530 0.243987757 0.243566576 0.24110364
## M 0.02875681 0.029148878 0.029246677 0.029246677 0.02727388
## N 0.17084331 0.170942166 0.170991579 0.170744427 0.16756143
## P 0.16403791 0.177824941 0.177824941 0.177583728 0.17516018
## Q 0.17271556 0.173059094 0.339249150 0.339222412 0.33828469
## R 0.21918174 0.219806921 0.219890176 0.219557010 0.19435586
## S 0.46901135 0.469109844 0.456764807 0.365540136 0.21813673
## T 0.21586646 0.298115914 0.298178816 0.309052134 0.30211178
## V 0.13283645 0.145276593 0.145276593 0.124632326 0.12150152
## W 0.05070375 0.050787142 0.050870488 0.047757003 0.04681920
## Y 0.15239801 0.152450850 0.171879524 0.311245305 0.31097592
## attr(,"class")
## [1] "immunr_kmer_profile_self" "matrix"

Motif序列基序的可视化

同样的,我们可以使用vis()函数对计算出的序列基序矩阵进行可视化展示。有两种类型的图可供选择 - “sequence logo”和“text logo”。其中,参数.plot指定了绘图的类型:.plot = "seq"用于绘制“sequence logo”图和.plot = "text"(默认情况下)用于绘制“text logo”图。

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

p1 + p2
image.png

参考来源:https://immunarch.com/articles/web_only/v9_kmers.html

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

推荐阅读更多精彩内容