【JChem】ChemAxon/Infocomノード群を使ってみよう_07_RDKit編
【現在地の確認】
本編であるTeachOpenCADD-KNIME体験記のW2が完了し、スピンオフとしてRo5にちなんでJChemノード群の体験記を書いています。今回はその最終回、化学計算の条件設定にちなんでRDKitとJChemの比較をしてみます。
右上部分のRule Engineまではすでにコメントしたので、今回は同様の計算をRDKitノード群でも実行していきます。
【RDKit Salt Stripper】
以前に紹介した通り、Ro5に関する化学計算の前には構造をフリー化したいので、下記の設定でRDKit Salt Stripperを実行します。
<参考>
【RDKit Descriptor Calculation】
こちらもすでに体験済みなので設定を再掲するのみです。
【Joiner】
意外なことに初めての紹介の様ですね。
もちろん技術理解はまっきーさんのブログに頼ります。
今回の利用目的はJChemとRDKitでの4つの化学計算の結果を横並びにして比較することですので、下記のように設定しました。
同じ化合物IDのデータを突き合わせます。
そしてColumn Selectionタブでは比較に必要なカラムに絞ります。
結果は
左側がJChemでの計算結果で、右側がRDKitでの計算結果です。
logP予測値、分子量、ドナー数、アクセプター数の順に並んでいます。
計算に用いる条件の違いで、化合物によっては分子量ですら1以上ずれることがあります。具体例でみていきましょう。
【logP予測値】
予測式が異なるので、完全に一致することはまずないですよね。
計算条件で1以上の差があることも結構あります。
例えばCHEMBL1009(levodopa)は
JChemのConsensusモデルではClogP(相当) = -1.792, RDKitではSlogD = 0.052です。
モデル間差が大きいからこそ予測精度のコンペが行われたりします。
上記の結果優秀だったJChemのAlogP(相当)モデルと上記モデルの精度比較の結果はどうなのかなど興味があります。
【分子量】
本来最もずれにくいのですが、今回はJChemのworkflowで
massを用い、Excat massを算出していないので同位体の影響が出ています。
例えばCl原子を複数持つ化合物では1以上差が生じています。
【ドナー数】
水素結合ドナーは水素結合しうるプロトン数ですので、今回の2つの計算条件で相違はありませんでした。
デモデータ5415化合物中1件も相違がなかったです。詳細は省きます。
【アクセプター数】
ドナーとは異なり、アクセプターはプログラムごとに独自の算出ルールを設定しているようです。
JChemのH Bond Donor/Acceptorノードにおいても
硫黄原子、ハロゲン原子をカウントするかどうか設定を変えることができます。
一番悩みそうなのはフッ素原子の扱いですかね。
<参考>水素結合とは
RuleEngineとRowSplitterで下記のように設定して、デモデータ5415化合物中
ドナー数が何件一致しなかったかを見てみました。
すると結果は2637件で相違がありました。
JChemの方は、どの原子をドナーと判定したかも可視化できますので、見てみましょう。workflow を一部変えましたが詳細は省略します。
<参考>Joiner設定変更
以下に2例を示しました。すみませんが詳しくないので推測ですが、
ヘテロ環の置換基が付いた窒素原子、カルボン酸基などの扱いが異なりそうだとわかります。
【化学計算の条件選び】
おそらく気になるのは結局どの算出方法が良いのかだと思います。これはとても答えにくい質問です。
身近なケモインフォマティクス研究者に訊いてみてください。おそらく多くの方が、「私には私の流儀があるので自分でカスタマイズしている」というのではないでしょうか。
あるいは「自分の目的にとっては本質的な差異ではない」という方もいるかもしれません。正直言うとRo5の判定の場合は、厳密化する効果というのはそれほどないと推測します。
化学計算の前のデータ前処理や、計算条件の選定など玄人さんはさらに多くの可能性から自分の目的にあったものを検証しながら選定しているようです。
玄人さんから詳しく聞いてみたいところです。
さて、JChem体験記はここまでとします。楽しんでいただけたでしょうか?
再び本編であるTeachOpenCADD-KNIME体験記のW3に戻ります。
記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。