CFM-IDの紹介・使い方
今回は,David WishartのグループのFelicity Allenさんがメインで開発されたツールである,CFM-IDを紹介したいと思います.(2報存在するのですが,コアとなる考え方が掲載されているMetabolomics雑誌を引用しておきます)
Felicity Allen et al. Competitive fragmentation modeling of ESI-MS/MS spectra for putative metabolite identification. Metabolomics, 11, 98-110, 2015
個人的に,最も気に入っている機能は,「SMILES・InChI codeの情報のみから,フラグメンテーションを推定し,プロダクトイオンを生成してくれる」というところです.少し論文自体は難しく記載されていますが,結局は内部の考え方はこれまで紹介してきたツール,つまりMetFrag, MIDAS, Fragment Identificatorと同じです(フラグメンテーションの発生の仕方は同じという意味).しかしならが,CFM-IDの特徴は,「そのフラグメンテーションの確からしさ」を,機械学習結果をもとに予測し,プロダクトイオンの強度値まで出そうということです.
論文に掲載されていた例として,以下の2つの構造を考えてみます.
これら2つの構造は,ともに「脱水」つまり-H2Oのニュートラルロスが得られる可能性があります.ただ,下の構造に比べて上の構造は,NH3のニュートラルロスも考えられるわけで,H2Oのニュートラルロスが得られる可能性は低くなるはずです.
Wishart先生のグループは,このニュアンスを,MetlinとMassBank(ほとんどMetlinだと思います)のプロダクトイオンスペクトルデータベースと,合計2402個のケミカルプロパティをもとに表現する試みを行いました.
機械学習法としては,シュミレーションによるプロダクトイオンと,実測のプロダクトイオンの類似度が最大になるような最尤推定法によりパラメーターの最適化を行ったそうです.(管理人自身,そこまで詳しく式を追ったわけではないので,記載のニュアンスが間違っているかもしれません.また書き換えるかも.)
さて,使い方は非常に簡単で,今回はWebアプリケーションを紹介します.
ちなみに,CFM-ID自体のソースコードは以下からダウンロード可能で,コマンドラインツールとしても使用可能だそうです.(コードをまだ全く見ていないので,細かなコメントは控えます.コードを見て勉強してから補足していこうと思います.)
http://sourceforge.net/projects/cfm-id/
さて,ウェブアプリケーションのサイトを訪れると,主に3つの機能を見ることができます.
1.Spectra prediction: http://cfmid.wishartlab.com/predict
2.Peak Assignment: http://cfmid.wishartlab.com/assign
3.Compound identification: http://cfmid.wishartlab.com/identify
それぞれ,ほぼ名前の通りで,Spectra predictionからは,SMILESかInChI codeを入力して,PositiveモードかNegativeモードかを選択し,Adductタイプを選ぶだけで,低コリジョンエナジー結果(10V),中コリジョンエナジー結果(20V),高コリジョンエナジー結果(40V)の,プロダクトイオンスペクトル予測結果が出力されます.どうしてこの3つかというと,単純にMetlinが提供しているバラエティがこのようになっていて,Wishartのグループも,この3つそれぞれについてモデル化を行ったからです.
残り2つの機能は,結局はこのSpectra predictionの原理をもとに行われるのですが,「プロダクトイオンそれぞれに対して部分構造を割り当てたい(アサインしたい!)」という方は,Peak assignment機能を使うことができます.つまり,元となる構造SMILESと,そのMS/MSスペクトルをデータとして読み込ませることで,実測スペクトルにフラグメント情報がアサインメントされるわけです.
また,Compound identificationはその名の通り,MS/MSスペクトル情報を読みこめば,現在のところKEGGとHMDBに登録されている化合物情報の中から,最もらしい化合物を出力してくれます.上記2つとも,ユーバーは自分が使ったコリジョンエナジー(CE)情報を入力することで,(Wishart先生のグループの意図するところでは)信頼性の高い結果が得られるということになります.
ちなみに,SMILESやInChIコードがよくわからない方は,以前のコラムをご参照ください.
https://sites.google.com/site/esitomonokai/jie-xi-bu-wu/hua-he-wu-biao-ji-fang-fa
ためしに,このウェブページにて,前回のFragment Identificatorで例として挙げたグルタミン酸のSMILESを入力して,ポジティブイオンモード,[M+H]+と設定して,Submitボタンを押し解析してみましょう(下記,グルタミン酸のSMILES).
C(CC(=O)O)C(C(=O)O)N
そしたら,解析結果として以下のような形でダウンロードできます(実際にWebページの結果は,もっと見やすく,ユーザーフレンドリーに設計されているのでぜひ一度ご確認ください).下のenergy0,1,2はそれぞれCEが10,20,40に対応します.
energy0
27.0234751 0.1728268243 14 (0.17283)
28.01872406 0.2210589405 36 (0.22106)
30.03437413 0.1316867013 40 (0.13169)
42.03437413 0.2766339534 4 (0.27663)
54.03437413 0.110533107 9 (0.11053)
55.01838972 0.7111407264 25 (0.71114)
56.01363868 0.07255364545 41 (0.072554)
56.05002419 2.977351375 10 (2.9774)
57.03403978 0.3605931734 26 (0.36059)
58.06567426 0.551915204 16 (0.55192)
61.0289544 0.1862700786 1 (0.18627)
71.01330434 0.4697208652 6 (0.46972)
72.0085533 0.1540624208 34 (0.15406)
73.0289544 1.783451407 38 (1.7835)
74.02420337 1.229150104 15 (1.2292)
75.04460446 0.3993225109 42 (0.39932)
76.03985343 0.1724180748 13 (0.17242)
82.02928875 0.2804411119 28 11 (0.25433 0.026108)
84.04493881 9.372790643 29 17 (9.055 0.31775)
85.0289544 1.644856013 18 (1.6449)
86.06058888 3.789349038 30 21 (3.6044 0.18493)
87.04460446 0.2479836881 22 (0.24798)
88.03985343 0.5636715869 3 (0.56367)
100.0398534 1.492174407 44 7 (1.0737 0.41843)
102.0555035 21.70440388 45 12 (18.092 3.6121)
104.0711536 1.417794437 46 20 (1.0741 0.34366)
112.0398534 4.687613766 31 24 49 (2.879 1.6972 0.11136)
113.023869 4.262097512 32 (4.2621)
130.0504181 15.36152434 23 48 (12.325 3.0367)
131.0344337 6.724072629 51 (6.7241)
148.0609828 18.47053784 0 (18.471)
energy1
27.0234751 0.5166139178 14 (0.51661)
28.01872406 0.3719831508 36 (0.37198)
30.03437413 0.1567776207 40 (0.15678)
42.03437413 4.338919548 4 (4.3389)
44.05002419 0.26252863 5 (0.26253)
54.03437413 2.463236992 9 (2.4632)
55.01838972 1.084981038 25 (1.085)
56.01363868 0.1359177034 41 (0.13592)
56.05002419 13.28861323 10 (13.289)
57.03403978 0.5108204737 26 (0.51082)
58.02928875 0.1334405471 37 (0.13344)
58.06567426 3.522912968 16 (3.5229)
71.01330434 1.095598965 6 (1.0956)
73.0289544 2.542731446 38 (2.5427)
74.02420337 0.885410568 15 (0.88541)
75.04460446 0.7682557296 42 (0.76826)
76.03985343 0.2741319444 13 (0.27413)
82.02928875 1.123719682 28 11 (0.98936 0.13436)
84.04493881 11.66544836 29 17 (11.198 0.46764)
85.0289544 9.250264617 18 (9.2503)
86.06058888 5.192911556 30 21 (4.6454 0.54753)
87.04460446 0.6651542712 22 (0.66515)
88.03985343 1.070103284 3 (1.0701)
100.0398534 0.8160186953 44 7 (0.56669 0.24933)
102.0555035 24.69526152 45 12 (20.952 3.7433)
104.0711536 1.106217836 46 20 (0.76818 0.33804)
112.0398534 1.613220899 31 24 49 (0.74468 0.71466 0.15388)
113.023869 1.945455876 32 (1.9455)
130.0504181 3.966025085 23 48 (2.7599 1.2061)
131.0344337 1.956134914 51 (1.9561)
148.0609828 2.581188932 0 (2.5812)
energy2
27.0234751 8.751233517 14 (8.7512)
28.01872406 2.90673079 36 (2.9067)
29.03912516 2.206095244 39 (2.2061)
30.03437413 0.5363676713 40 (0.53637)
42.03437413 7.796998049 4 (7.797)
43.01838972 1.612635487 2 (1.6126)
44.05002419 0.885675551 5 (0.88568)
44.99765427 0.556534211 19 (0.55653)
54.03437413 1.01936341 9 (1.0194)
55.01838972 3.410686046 25 (3.4107)
56.05002419 36.34104393 10 (36.341)
57.03403978 2.495245678 26 (2.4952)
58.06567426 4.840981261 16 (4.841)
59.04968984 0.5968469021 27 (0.59685)
61.0289544 1.363387616 1 (1.3634)
71.01330434 2.277286305 6 (2.2773)
73.0289544 5.626003931 38 (5.626)
74.02420337 0.6028520416 15 (0.60285)
75.04460446 1.236891172 42 (1.2369)
82.02928875 0.7316739946 28 11 (0.57002 0.16166)
84.04493881 2.367561571 29 17 (1.9766 0.39099)
85.0289544 2.557774161 18 (2.5578)
86.06058888 2.036264986 30 21 (1.4636 0.57268)
87.04460446 0.679978626 22 (0.67998)
88.03985343 0.8251269295 3 (0.82513)
100.0398534 0.8413838998 44 7 (0.46648 0.37491)
102.0555035 3.229962553 45 12 (2.0305 1.1994)
104.0711536 0.5923480161 46 20 (0.36399 0.22836)
112.0398534 0.3956625804 31 24 49 (0.19496 0.14662 0.054088)
113.023869 0.332519644 32 (0.33252)
130.0504181 0.3468842261 23 48 (0.21282 0.13407)
0 148.0609828 NC(CCC(=O)O)C(=O)O
1 61.0289544 C=C(O)[OH2+]
2 43.01838972 C#C[OH2+]
3 88.03985343 C=C([NH3+])C(=O)O
4 42.03437413 C#C[NH3+]
5 44.05002419 C=C[NH3+]
6 71.01330434 C#CC(O)=[OH+]
7 100.0398534 C#CC([NH3+])C(=O)O
8 52.01872406 C#CC#[NH+]
9 54.03437413 C#CC=[NH2+]
10 56.05002419 C#CC[NH3+]
11 82.02928875 C#CC([NH3+])=C=O
12 102.0555035 C#CC([NH3+])C(O)O
13 76.03985343 [NH3+]CC(=O)O
14 27.0234751 C#[CH2+]
15 74.02420337 [NH2+]=CC(=O)O
16 58.06567426 C=CC[NH3+]
17 84.04493881 C#CC([NH3+])=CO
18 85.0289544 C#CC=C(O)[OH2+]
19 44.99765427 O=C=[OH+]
20 104.0711536 C=CC([NH3+])C(O)O
21 86.06058888 C#CC([NH3+])CO
22 87.04460446 C#CCC(O)[OH2+]
23 130.0504181 [NH3+]C(C#CC=O)C(O)O
24 112.0398534 CC#CC(=[NH2+])C(=O)O
25 55.01838972 C#CC=[OH+]
26 57.03403978 C#CC[OH2+]
27 59.04968984 C=CC[OH2+]
28 82.02928875 [NH2+]=CC#CC=O
29 84.04493881 [NH3+]CC#CC=O
30 86.06058888 [NH3+]CC#CCO
31 112.0398534 [NH3+]C(C#CC=O)=CO
32 113.023869 OC(O)C=C=C=C=[OH+]
33 98.02420337 C#CC(=[NH2+])C(=O)O
34 72.0085533 [NH+]#CC(=O)O
35 78.0555035 [NH3+]CC(O)O
36 28.01872406 C#[NH+]
37 58.02928875 [NH3+]C=C=O
38 73.0289544 C#CC(O)[OH2+]
39 29.03912516 C=[CH3+]
40 30.03437413 C=[NH2+]
41 56.01363868 [NH2+]=C=C=O
42 75.04460446 C=CC(O)[OH2+]
43 77.06025453 CCC(O)[OH2+]
44 100.0398534 [NH3+]CC#CC(=O)O
45 102.0555035 [NH3+]CC#CC(O)O
46 104.0711536 [NH3+]CC=CC(O)O
47 60.08132432 CCC[NH3+]
48 130.0504181 [NH3+]C(C#CC(=O)O)CO
49 112.0398534 C=C([NH3+])C#CC(=O)O
50 98.02420337 [NH2+]=CC#CC(=O)O
51 131.0344337 OC(=[OH+])C#CCC(O)O
さて,ここで,前回紹介したグルタミン酸の実測MS/MSを思い出してみましょう.
これは,理研のグループがWaters QTOFを用いて,かつRampと呼ばれる方法で取得したMS/MSデータです.Rampというのは,たとえば「10-60 VでRampしてください」と読みこめば,「1MS/MSスペクトルを取得する際,一瞬でCEを指定された範囲で振ってくれて,それぞれのMS/MSスペクトルの積算値を1スペクトルとして取得する」ものです.どれくらいのステップ幅でCEを振っているのかはよくわからないのですが,それぞれのコリジョンエナジー特有に得られるプロダクトイオンを「原理的に」1スキャンで捕まえることができるので,便利だと思います.他メーカーにも,名前は違えど同じ機能がありますよね.ただ,ある一定のCEで集中してデータを積算しない分,感度を犠牲にしていることになると聞いたことがあります.好みかと思いますが,少なくとも管理人が脂質分析をしている限り,同定に必要なプロダクトイオンを一気に見るためには,このようにCEをある程度振って取得するメソッドのほうが,「(必要なプロダクトイオンすべてが比較的よく見えて)同定がやりやすくなる」印象を受けました.すみません,余談でした.
また,この理研のデータはノイズ除去のためにかなりしきい値を高くして,つまり,ベースピークに対してかなり定量値が高いもののみを残しているものだと思います.
さて,CFM-IDの結果と照らしあわせて見てみると,
m/z 10V 20V 40V SMILES
84.04493881 9.37 11.66 2.36 C#CC([NH3+])=CO
102.0555035 21.7 24.69 3.22 C#CC([NH3+])C(O)O
130.0504181 15.3 3.966 0.34 [NH3+]C(C#CC=O)C(O)O
148.0609828 18.4 2.581 0 NC(CCC(=O)O)C(=O)O
となります.ベースピークが標準化されているわけではなさそうなので,それぞれのCEでの相対強度比を考えれば良いと思うのですが,まぁ,これはRampで取られたわけで,あまり強度値の評価は行わないでおきましょう.
部分構造も合っているかはわからないのですが,「ヒント」としては十分役に立ちますし,なにより,この部分構造は「実測スペクトルの情報無しに」出力されているわけで,良いプログラムだと思います.
これは,結合を切断した後の部分構造の評価プログラムをしっかり書いている証拠で,「開裂時にもっとも起こりやすいと考えられるRearrangementを評価しよう」という心意気が見られる良いプログラムかと思います.グルタミン酸は100%学習データに含まれていると思うので,本当のプログラム評価は,「Metlin登録されていない」化合物に対して行ってみると良いと思います.
それでは,今日はこのへんで!