遺伝子発現データの階層的クラスタリング
慶應義塾大学環境情報学部
遺伝子の発現のプロセス
DNAATG
mRNAAUG
転写
翻訳
タンパク質
TAA
UAA
遺伝子
遺伝子はいつ発現している?
• 全ての遺伝子が常に発現しているわけではない
• 皮膚の細胞と肝臓の細胞のDNA情報は同一
• 細胞の形質が異なるのは発現している遺伝子が異なるため
OFFON
細胞の分化(1)
• 細胞が不可逆的に特殊化していくこと
• 遺伝子の発現が細胞ごとに異なっていく
• 外部からのシグナルに影響される
シグナルとなる物質
細胞の分化(2)
• すでに存在するタンパク質の組み合わせの影響
A
Aという遺伝子が発現 Aという遺伝子は発現せず
細胞の分化(3)
• 分化の過程の影響
遺伝子の発現のタイミングが分かれば…
• 細胞分化の過程で各細胞で異なった遺伝子発現
• 脳細胞にだけ発現している遺伝子は、脳に関係した遺伝子?
• 高温で発現する遺伝子は、高温から細胞を守るために発現する遺伝子?
• 癌細胞で発現している遺伝子は、癌遺伝子?
マイクロアレイ
組織αに対して組織βで遺伝子Aが
相対的にどれくらい発現したか
遺伝子Aの配列
組織αのcDNAを緑色に蛍光標識 組織βのcDNAを赤色に蛍光標識
蛍光で発現量を比較する
組織αの発現量 > 組織βの発現量
組織αの発現量 < 組織βの発現量
たくさんの遺伝子の発現量を測定
遺伝子Aの配列 遺伝子Bの配列 遺伝子Cの配列 遺伝子Dの配列
遺伝子Eの配列 遺伝子Fの配列 遺伝子Gの配列 遺伝子Hの配列
遺伝子Iの配列 遺伝子Jの配列 遺伝子Kの配列 遺伝子Lの配列
組織α
でとれた、様々な遺伝子由来のc
DN
A
組織β
でとれた、様々な遺伝子由来のc
DN
A
マイクロアレイチップ
発現データの例
Nestinの遺伝子発現パターン
小脳 舌
※Nestinは神経の発達に関わっている
腎臓 脳 胎盤 腸
発現データの例
NAMEcdc15
10cdc15
30cdc15
50spo 0 spo 2 spo 5 spo 7
SEC2 GDP/GTP EXCHANGE FACTOR FOR SEC4P -0.51 -0.15 0.06 -0.22 0.38 0.52 0.59
TFC1 TFIIIC 95 KD SUBUNIT 0.25 -0.09 0.14 0.16 0.43 0.3
ALPHA1 ALPHA-SPECIFIC GENE ACTIVATOR -0.17 -0.56 -1.15 -0.1 -0.51 -0.42 0.11
AAP1 ARGININE/ALANINE AMINOPEPTIDASE -0.51 -0.62 -0.81 -0.2 -0.54 -0.04
BUB2 CELL CYCLE, CHECKPOINT UNKNOWN -0.49 -0.56 -0.06 -0.29 -0.4 -0.12 0.7
TOM1 CELL CYCLE, G2/M UNKNOWN -0.17 0.06 -0.22 -0.06 -0.01 -0.01 0.08
MNN4 PHOSPHATIDYLINOSITOL KINASE HOMOLG -0.56 -0.42 -0.38 -0.22 0.41 1.24 1
TFB1 TFIIH 75 KD SUBUNIT -0.32 0.28 0.1 -0.2 -0.18 0.03 0.3
TAF145 TFIID 145 KD SUBUNIT -0.01 0.32 0.29 -0.22 -0.29 -0.06 0.14
発現量の測定
• 時系列パターン … 細胞分化の過程
• 組織別 … 心臓、肝臓、脳など
• 条件別 … 栄養枯渇、ヒートショック、紫外線
遺伝子の発現機構遺伝子ネットワーク
TFA
B
転写因子が転写制御配列に結合
転写因子が発現すると…
TFA
B
転写因子の下流の遺伝子が推定できる
発現量が上がる
※リプレッサーの場合は逆に発現量は下がる
転写因子がなくなると…
TFA
B
転写因子の下流の遺伝子が推定できる
発現量が下がる
様々な遺伝子の発現パターンが分かれば…
• 同一転写因子の制御下にある遺伝子群が推定できる
• ある遺伝子の制御下にある遺伝子群が推定できる
共通の転写因子に制御されていれば…
TFA
B
発現パターンが似てくる
発現パターン
同じ発現制御を受ける遺伝子をまとめる
• 階層的クラスタリング
• 非階層的クラスタリング
発現パターンの類似性の指標
同一の転写因子の制御下にある遺伝子を探す
• ユークリッド距離
• 相関係数
ユークリッド距離n次元データの2点間の距離
d12
d22
d32
d42
d52
ユークリッド距離d = (d12 + d2
2 + d32 + d4
2 + d52)1/2
より一般的には、データa1, a2, …, anとb1, b2, …, bnの間のユークリッド距離dは
n
i
ii bad1
2)(
ユークリッド距離の問題点
• ユークリッド距離の計算では発現の絶対量が問題になる
• マイクロアレイデータは一般的に相対量– 遺伝子Aは組織αより組織βで2倍の発現を示した○
– 遺伝子Aは遺伝子Bに比べて2倍の発現を示した×
– 各遺伝子の発現パターンが大きな意味を持つ?
相関係数
Data 1
Data 2
波形の形が同じ場所で(?)類似していれば、相関係数は高くなる
相関係数を求める(1)
ixn
1
n
xi
2)(
データx1, x2, … xnの平均と標準偏差を求める
平均 標準偏差
0
5
10
15
20
25
30
35
平均 標準偏差
相関係数を求める(2)
i
i
xz
データx1, x2, … xnの標準化
-10
-8
-6
-4
-2
0
2
4
6
8
10
平均が0、標準偏差が1になる
相関係数を求める(3)
-10
-8
-6
-4
-2
0
2
4
6
8
10
ii zzn
r 21
1
相関係数の性質 (1)
ii zzn
r 21
1
22
221
2
1
2
21
12
11)(
1tz
ntzz
nz
ntzz
niiiiii
z1iもz2iも平均が0、分散が1だから、
trtr
rtrtrtrt
allfor 01)(
1221
22
2222
11 r
相関係数の性質 (2)
• 発現パターンが似ているとき、相関係数rは1
に近づく
• 発現パターンに相関がないとき、相関係数r
は0に近づく
• 発現パターンが逆になるとき、相関係数rは-1
に近づく
Data1
Data2
Data1
Data2
r = 0.71
r = -0.98
Data1
Data2
r = -0.02
相関係数は直線上の関係を表す
0
2
4
6
8
10
12
14
16
18
20
0 2 4 6 8 10 12
データ#1
データ#2
r = 0.938
0
2
4
6
8
10
12
14
16
18
20
0 2 4 6 8 10 12 14
データ#1
データ#2
r = -0.072
回帰直線と相関係数との関係
y
x
ie
xbay
y
1e
2e
(http://www.ec.kansai-u.ac.jp/user/amatsuo/powerpoint/kariyCh13.pptを改変)
i
i
i
i
yy
e
y
yr
2
2
2
)(11
の変動
の残差平方和
階層的クラスタリング(1)
0
2
4
6
8
10
12
Data1
Data2
Data3
Data4
Data1 Data2 Data3 Data4Data1 1.00Data2 0.90 1.00Data3 -0.50 -0.55 1.00Data4 -0.44 -0.46 0.95 1.00 Data1 Data2 Data3 Data4
相関行列
階層的クラスタリング(2)
0
2
4
6
8
10
12
Data1
Data2
Data3+4
Data1 Data2 Data3+4Data1 1.00Data2 0.90 1.00Data3+4 -0.48 -0.51 1.00
Data1 Data2 Data3 Data4
階層的クラスタリング(3)
0
2
4
6
8
10
12
Data1+2
Data3+4
Data1+2 Data3+4Data1+2 1.00Data3+4 -0.51 1.00
Data1 Data2 Data3 Data4
ヒト繊維芽細胞の発現データのクラスタリング
timeコレステロールの合成
細胞周期細胞修復
血管形成
早期応答 Eisen M et al. 1998
階層的クラスタリングのステップ
1.全クラスター間の相関係数の計算
2.最も相関が高いクラスターを併合
3.複数のクラスターがあるなら、1.に戻る
クラスター間の相関係数はどのように計算する?
• 最短距離法 (Single Linkage Method)
• 最長距離法 (Complete Linkage Method)
• 群平均法 (Average Linkage Method)
クラスターA, Bの要素a, bの相関係数をra,bとして、
max(ra,b)
min(ra,b)
average(ra,b)
階層的クラスタリング (Perl)# クラスターa, bの要素間の相関を計算するsub corr_clust($$$){
my $clust_a = shift;
my $clust_b = shift;
my $d = shift;
my $max = -1.0;
for my $i (@$clust_a){
for my $j (@$clust_b){
if($max < $d->[ $i ]->[ $j ]){
$max = $d->[ $i ]->[ $j ];
}
}
}
return $max;
}
# 次元数dimのデータ群dataを階層的クラスタリングsub h_cluster($){
my $data = shift;
# データセット。$data->[データ番号]->[データの次元番号]
my @cl;
# クラスター情報。$cl[クラスター番号] = [ データ番号,,, ]
# クラスター情報の初期化foreach(0..$#$data){ $cl[$_] = [ $_ ]; }
# 相関行列の作成my @d;
for my $i (0..$#$data){
for my $j (0..$#$data){
$d[$i]->[$j]
= corr_single($data->[$i], $data->[$j]);
}
}
# 階層的クラスタリングwhile ($#cl > 0){
my $corr_max = -1.0;
my($c1, $c2);
for (my $i = 0; $i < $#cl; $i ++){
for (my $j = $i + 1; $j <= $#cl; $j ++){
my $corr = corr_clust($cl[$i],
$cl[$j], ¥@d);
if ($corr > $corr_max){
$corr_max = $corr;
$c1 = $i;
$c2 = $j;
}
}
}
printf("[ Merge %d ] Merging the following
two clusters:¥n",
$#$data - $#cl + 1);
printf("(1) Cluster containing data #");
print join(",", @{$cl[$c1]}), "¥n";
printf("(2) Cluster containing data #");
print join(",", @{$cl[$c2]}), "¥n";
printf("Distance between these two clusters
= %lf¥n¥n", $corr_max);
$cl[ $c1 ] = merge($cl[ $c1 ], $cl[ $c2 ]);
# クラスターc2をc1へ統合して格納splice(@cl, $c2, 1) # クラスターc2を破棄
}
}
クラスター間の相関係数
クラスターの統合
階層的クラスタリング (Perl)その他の設定
use List::Util qw(sum);
# n次元データa, bの相関係数を計算するsub corr_single($$){
my $a = shift;
my $b = shift;
my $n = $#$a + 1;
my $mean_a = sum(@$a) / ($#$a + 1);
my $mean_b = sum(@$b) / ($#$b + 1);
my $var_a = 0;
my $var_b = 0;
foreach(0..$n-1){ $var_a += ($a->[$_] - $mean_a)**2 / $n; }
foreach(0..$n-1){ $var_b += ($b->[$_] - $mean_b)**2 / $n; }
my $corr = 0;
foreach(0..$n - 1){
$corr += (($a->[$_] - $mean_a) / ($var_a ** 0.5))
* (($b->[$_] - $mean_b) / ($var_b ** 0.5)) / $n;
}
return $corr;
}
階層的クラスタリング(C言語)/* 次元数dimのデータ群dataを階層的クラスタリング
データ数N_DATAはグローバル変数として与えられる */
void h_cluster(double data[N_DATA][DIM]){
int i, j, n;
double d[N_DATA][N_DATA]; /* データ間の相関行列 */
double corr, corr_max; /* データ間の相関 */
int c1, c2;
static struct CLUSTER cl[N_DATA]; /* クラスター情報 */
static struct CLUSTER w; /* ワーク用 */
/* クラスター情報の初期化 */
for (i=0; i < N_DATA; i++){
cl[i].n = 1;
cl[i].gene[0] = i;
}
/* 相関行列の作成 */
for (i = 0; i < N_DATA; i++)
for (j = 0; j < N_DATA; j++)
d[i][j] = corr_single(data[i], data[j], DIM);
/* 階層的クラスタリング */
n = N_DATA - 1;
while (n > 0){
corr_max = -1.0;
for (i = 0; i < n; i ++){
for (j = i + 1; j <= n; j ++){
corr = corr_clust(cl[i], cl[j], d);
if (corr > corr_max){
corr_max = corr;
c1 = i, c2 = j;
}
}
}
printf("[ Merge %d ] Merging the following two
clusters:¥n",
N_DATA - n - 1);
printf("(1) Cluster containing data #");
for(i = 0;i < cl[ c1 ].n;i ++){
printf("%d", cl[ c1 ].gene[i]);
if(i < cl[ c1 ].n - 1)putchar(',');
}
printf("¥n(2) Cluster containing data #");
for(i = 0;i < cl[ c2 ].n;i ++){
printf("%d", cl[ c2 ].gene[i]);
if(i < cl[ c2 ].n - 1)putchar(',');
}
printf("¥nDistance between these two clusters
= %lf¥n¥n", corr_max);
merge(cl[ c1 ], cl[ c2 ], w); /* クラスターを統合 */
cl[ c1 ] = w; /* クラスターc2をc1へ統合して格納 */
cl[ c2 ] = cl[n]; /* クラスターc2を破棄し、一番後ろのクラスターを代わりに格納 */
n--; /* クラスターを1つ減らす */
}
}
階層的クラスタリング(C言語)その他の設定
#define N_DATA 4 /* データ数 */
#define DIM 21
/* クラスター情報 */
struct CLUSTER {
int n; /* データ数 */
int gene[N_DATA]; /* 保持しているデータ番号の集合 */
};
/* n次元データa, bの相関係数を計算する */
double corr_single(double a[], double b[], int n){
int i;
double d = 0.0;
double mean_a, mean_b;
double var_a, var_b;
double corr;
for(mean_a = 0, i = 0;i < n;i ++)mean_a += a[i] / n;
for(mean_b = 0, i = 0;i < n;i ++)mean_b += b[i] / n;
for(var_a = 0, i = 0;i < n;i ++)
var_a += (a[i] - mean_a)*(a[i] - mean_a) / n;
for(var_b = 0, i = 0;i < n;i ++)
var_b += (b[i] - mean_b)*(b[i] - mean_b) / n;
for(corr = 0, i = 0;i < n;i ++)
corr += (a[i] - mean_a) / sqrt(var_a)
* (b[i] - mean_b) / sqrt(var_b) / n;
return corr;
}
定数の定義、構造体の宣言など
相関係数の計算
クラスタリングの計算時間
• 対象がN個あるなら、以下の数の組み合わせの中から最も関連が高いものを選ぶ
• クラスターの併合をN=1になるまで繰り返すなら、調べる組み合わせの数は
)1(2
1NN
)2(6
1)1(
2
1 2
2
NNiiN
i
結局これはO(N3)の計算量となり、データ数が多いと膨大な計算時間になる
非階層的クラスタリング
• K平均法
• 自己組織化マップ
発現データを二次元平面へ
1
2
3
4
5 A
B
条件1 条件2
1
2
3
4
5
1 2 3 4 5
条件1
条件2発現レベル
A
B
K平均法
5. 2.に戻る
1. 参照点の設定
2. 各要素の所属を最も近い参照点とする
3. 各クラスターの重心を計算
4. 参照点を重心の方向へわずかに移動させる
所属参照点の決定
5 10
5
10
5 10
5
10
(a) (b)
重心の決定と参照点の移動
5 10
5
10
5 10
5
10
(c) (d)
繰り返し
5 10
5
10
5 10
5
10
(e) (f)
K平均法デモ
自己組織化マップSelf-Organization Map (SOM)
自己組織化マップとは?
• K平均アルゴリズムは、あらかじめクラスター数Kを設定し、互いに近い値を持った各要素が同一クラスターに所属するように所属クラスターを決めてゆく
• 自己組織化マップは互いに近い値を持った各要素が近くなるように低い次元上にマップする
• 自己組織化マップは1988年にKohonenが提案した (Kohonen 1934-)
自己組織化とは?(Wikipediaより)
• 大脳皮質の視覚野をモデル化したニューラルネットの一種
• 教師なし学習によるクラスタリングの手法の一つ
• 次元削減による可視化の手法の一つ
生物の神経細胞の構造をモデル化
• 神経細胞、すなわちニューロンが情報処理の単位
• 樹状突起がニューロンに対する入力
• 軸索がニューロンからの出力
• 計算機上では各ニューロンをノード、軸索をエッジとして表す
樹状突起軸索
細胞体 神経末端
(基礎分子生物学3 学生作成資料より)
似た情報が入力されると脳の似た細胞が反応する?
SOM (Self Organization Map)
自己組織化マップ
• 多次元情報を低い次元にマッピングする
• データが近いもの同士がマッピングでも近くなるように配置する
X(1) = (9.5, 3.2, 7.5, 9.7, 6.1)
X(2) = (2.1, 2.9, 2.1, 3.1, 1.1)
X(3) = (2.2, 2.7, 2.3, 3.0, 1.2)