Topological Fragment Index

Topological Fragment Indexというものが気になったので。

論文はこれでToFIを尤度として捉えているらしい。

式は

ToFI

ここで、nは全ボンド数。kはフラグメントについてる余計なボンド。lをフラグメントのボンド数としてm=k+lとなっている。

def combination(n,m):
    if m == 0: 
        return 1.0
    else:
        return reduce(lambda x,y:x*y,range(n-m+1,n+1)) / float(reduce(lambda x,y:x*y,range(1,m+1)))

def tofi(n,m,k):
    sum = 0.0
    for i in range(n-m+1): 
        sum +=  combination(n-m,i) / combination(n,k+i)
    return sum/(n+1)

で、整数にするために1*10^6という定数をかけるらしいのだが、なにがしたいのかよくわからん。

lが一定でkが増えるとToFIが減る

>>> tofi.tofi(23,17,5) * 1000000
8.9779501544207427
>>> tofi.tofi(23,18,6) * 1000000
2.8351421540276029
>>> tofi.tofi(23,19,7) * 1000000
0.99229975390966119

kが一定でlが減るとToFIが増える

>>> tofi.tofi(23,17,5) * 1000000
8.9779501544207427
>>> tofi.tofi(23,16,5) * 1000000
13.466925231631114
>>> tofi.tofi(23,15,5) * 1000000
20.812520812520813

後者はなんとなく理解できるけど、切断面が大きくなるほどToFIが減るってのがわからん。

計算間違ってるのかなぁ。

Nonnegative matrix factorization(NMF)でconsensus clustering

NMFを追っかけてたらMetagenes and molecular pattern discovery using matrix factorizationという論文を見つけたので、週末はこの論文を読みながら色々やってみた。NMFの便利なところは元の特徴(この論文の場合は遺伝子発現量)からより少ない任意の特徴量(論文中ではmetagene)に変換できるところであり、さらにそのままクラスターの分割に利用できる。

たとえば2つのmetageneで表現した場合、より発現量の大きいmetageneで分割すれば2つのクラスに分けられる。(QSARだったらdescriptorからmeta discriptorが導かれてそれに基づいてクラス分類ができるでしょう)

続いて、重要なのがクラスの安定性である。要するに最適なクラスタの数はいくつなのかということである。これに対して、この論文ではConsensus Clusteringというリサンプリングと隣接行列(connectivity matrix)を利用する方法をモディファイした方法を使っている。

ここで隣接行列はi番目のサンプルとj番目のサンプルが同じクラスなら1、それ以外なら0である。この行列のn回の平均値をコンセンサスマトリックスとする。コンセンサスマトリックスの値は0-1の間をとり、サンプルi,jが常に同じクラスになる場合は1、常に異なるクラスの場合は0である。フラフラするばあいはその間の値をとる。元の論文のconsensus clusteringアルゴリズムはデータの80%をランダムサンプリングして評価するのに対し、NMFの場合、初期値の行列はランダムな数字にしているので適当にループ(n)をまわすだけでよい。

NMFの実装は集合知プログラミングのものを用い、コンセンサスマトリックスを評価するコードをnumpyを使ってかいた。

import nmf
from numpy import *

def consensus(a,kstart,kend,nloop):
    """ calculate consensus matrix
    """
    (n,m)     = a.shape
    consensus = zeros((kend+1,m,m))
    conn      = zeros((m,m))

    #i = 0
    for j in range(kstart,kend+1):
        connac = zeros((m,m))

        for l in range(nloop):
            #i += 1
            (w,h) = nmf.factorize(a,pc=j)

            conn   = nmfconnectivity(h)
            connac = connac + conn

        consensus[j] = connac / float(nloop)
    return consensus

def nmfconnectivity(h):
    """ calculate connective matrix
    """
    (k,m) = h.shape

    ar = []
    for i in range(m):
        max_i = 0
        max_v = 0
        for index,v in enumerate(h[:,i]):
            if v > max_v :
                max_v = v
                max_i = index
        ar.append(max_i)

    mat1 = tile(matrix(ar),(m,1))
    mat2 = tile(matrix(ar).T,(1,m))

    return array(mat1 == mat2, dtype=int)

これをcc.pyという名前で保存しテスト用のセットを適当に用意して実行。

from numpy import *
from pylab import *
import cc

kstart = 2
kend = 4

testarray = array([[0,0,1,1,1,0,0,0,0],
                   [0,0,1,1,0,0,0,0,0],
                   [1,1,0,0,1,1,0,0,1],
                   [1,1,0,0,0,0,0,1,0],
                   [1,1,0,1,0,0,0,0,0],
                   [0,0,0,0,0,1,1,1,1],
                   [1,0,0,0,0,1,1,1,0],
                   [0,0,0,0,0,0,1,1,1],
                   [0,0,0,1,0,1,1,1,1]
                   ])

cons = cc.consensus(testarray.T,kstart,kend+1,20)


for i in range(kstart,kend+1):
    pcolormesh(cons[i])
    if i == kstart:
        colorbar()
    savefig('ccr' + str(i) + '.png')

見ればすぐ分かるが3つにクラスタリングできそうなマトリックス。

結果

2クラスタで分けた場合。

2 clusters

3クラスタで分けた場合

3 clusters

4クラスタで分けた場合

4 clusters

もうちょっと実際のデータでやってみないとあれだなぁ。それとConsensus ClusteringのCDFプロットみたいなのが欲しいところ。

参考書籍

ProductName 集合知プログラミング
Toby Segaran
オライリージャパン / ¥ 3,570 ()
在庫あり。

参考論文

pybelで脱塩

というエントリを書いた。

脱塩したい(pybelで)

バーチャルスクリーニングとかQSARやるヒトにとっては脱塩、中性化処理ってのはおなじみのルーチンだ。

オライリーからはやっぱケモインフォマティクスの本も出して欲しいと思う

バイオインフォだけだと片手落ちの気がする。表紙はケクレ構造にちなんで亀でお願いしたい。

ProductName バイオインフォマティクスのためのPerl入門
水島 洋
オライリー・ジャパン / ¥ 5,040 ()


ProductName 実践 バイオインフォマティクス -ゲノム研究のためのコンピュータスキル-
Cynthia Gibas,Per Jambeck
オライリー・ジャパン / ¥ 4,410 ()


今のCPUとかmemoryの状況でLLで量子化学とか、かなりアリだと思うんだけどなぁ。pyquanteとかやばいでしょう。

MCSTree

ある化合物集合(ごく近傍のmarkushをちょっと拡張したようなセット)に対して、適当なスキャフォールドをrootとしたmaximum common subgraph(MCS)のサブセットの木(再帰するやつ)を作りたくて、午後中考えてたんだけどとうとう家まで持ち帰ってしまった。

適当な骨格を与えたときに、分割情報を最大にするように枝分かれさせていくアルゴリズムがいまいちよくわからん。

クリークとMCSをうまくつかってヒューリスティックなアルゴリズムで適当に分岐させていけばそれっぽいネットワークになる気がするんだけど。

どっかにそんな論文ないかのう

Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization (Part 5)

Part 5はいままでのパートにはいらないけど、ケミストが知っておくべき事柄的な章の集まりかな。

ProductName Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization
Edward Kerns,Li Di
Academic Press / ¥ 9,177 ()
在庫あり。

  1. Diagnosing and Improving Pharmacokinetic Performance
  2. Prodrugs
  3. Effects of Properties on Biological Assays
  4. Formulation

これで一通り読んだが、良書だった。

Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization (Part 4)

Part 4はメソッド。予測モデル使う時とかHTSみたいなハイスループットなアッセイ系のQCやるとき、さらにはシステムでの情報管理の際には実験系に対するある程度の理解がないとまるでダメなので、ここら辺は基本的に実験系も含めて結構把握している。

最後のほうの毒性系のアッセイとかは知らないことが多くて参考になった。

ProductName Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization
Edward Kerns,Li Di
Academic Press / ¥ 9,177 ()
在庫あり。

  1. Strategies for Integrating Drug-Like Properties Into Drug Discovery Methods
  2. Methods for Profiling Drug-like Properties: General Concepts
  3. Lipophilicity Methods
  4. pKa Methods
  5. Solubility Methods
  6. Permeability Methods
  7. Transporter Methods
  8. Blood-Brain Barrier Methods
  9. Metabolic Stability Methods
  10. Plasma Stability Methods
  11. Solution Stability Methods
  12. CYP Inhibition Methods
  13. Plasma Protein Binding Methods
  14. hERG Methods
  15. Toxicity Methods
  16. Integrity and Purity Methods

Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization (Part 3)

Part 3はDMPKとtoxicity。QSPR的というよりはもうちょとケミストよりのそういったissueに対してどういう骨格変換のアプローチをするかといった内容。

なので、経験則的なものが若干多め。ケミストリー的には量子化学計算的な手法を用いながら適切な修飾を選ぶといったものももうちょっと入ってきてもいいんじゃないかなぁと思うけど。一方、インフォマティクスとかのコンピュテーショナルケミストは、パラメータとフィルタリングとかそういうのばっかりに行きがちで、リアルな化合物を出すという視点が失われがちだからこういった本は読みやすくてよいと思う。

結局、メディシナルケミストってのはwhat's to makeであってHow to makeじゃないんだよね。とか考えると解析的な側面から入るか、合成可能性の制約から入るかの違いで行き着くところは同じような気はするんだけど。

ProductName Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization
Edward Kerns,Li Di
Academic Press / ¥ 9,177 ()
在庫あり。

  1. Transporters
  2. Blood-Brain Barrier
  3. Metabolic Stability
  4. Plasma Stability
  5. Solution Stability
  6. Plasma Protein Binding
  7. Cytochrome P450 Inhibition
  8. hERG Blocking
  9. Toxicity
  10. Integrity and Purity
  11. Pharmacokinetics
  12. Lead-like Compounds
  13. Strategies for Integrating Drug-Like Properties Into Drug Discovery Methods

さて、このPartに関してはvitroに近いところは理解できるんだけど、生体に近いところはイメージが掴めない。もっと毒性とか解剖学に近いところも勉強しないと、全体を見渡せないかもしれないなぁと思った。

Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization (Part 2)

Part 2は物性の話。ここらへんはQSPRの範疇だから割と読みやすかった。 ほとんどおさらい的な内容だが、Chemistry色が強いので、知っとくとケミストと話がしやすいかもしれない。

ProductName Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization
Edward Kerns,Li Di
Academic Press / ¥ 9,048 ()
在庫あり。

  1. Rules for Rapid Property Profiling From Structure
  2. Lipophilicity
  3. pKa
  4. Solubility
  5. Permeability Disposition, Metabolism and Safety

7の溶解性の部分は他の章よりも厚い。予測モデルとかのstate-of-the-artが載ってなかったりするけど、モデルをうまく合成計画に取り入れるのも今どきは重要なんではないかね。

パターンベースのフィンガープリント

化学構造の類似度を測るフィンガープリントで部分構造由来のものには2種類あって、ビットにパターンが対応しているものと、そうでないもの。

後者はハッシュ関数とかを使って動的に生成するのでビットの密度の効率が良いが、結局解釈できなくて困ることが多い。

で、前者を解釈しましょうっていうスレッドがあったので書いてみた

ProductName ケモインフォマティックス―予測と設計のための化学情報学
J.Gasteiger,T.Engel
丸善 / ¥ 18,900 ()
在庫あり。