TCGAデータベースでRNA-seq、DEG解析、生存予測

# RNA-Seqとは
RNA-Seq（リボ核酸シークエンシング）は、リボ核酸（RNA）の配列を高速に決定し、発現量を定量化するための強力な技術です。この技術は、生物の遺伝的情報の流れを理解するための重要なツールとして広く用いられています。
またRNA-Seqでは次世代シークエンシング（NGS）技術を利用して、細胞内の全RNA（全トランスクリプトーム）の配列を決定します。このプロセスは、特定の時間点での遺伝子の発現パターンや、異なる条件下での発現変動を詳細に解析することを可能にします。
RNA-Seqデータ解析のプロセスは、複雑で多段階にわたる作業であり、以下のステップから構成されています。
* データの取得
シーケンスされたデータは通常FASTQフォーマットのファイルとして取得でき、アダプタ配列のトリミングや低クオリティのリードの除去などを行います。
* マッピング
シークエンシングリードを参照ゲノムまたはトランスクリプトームにマッピングします。このプロセスでは、リードの配列が参照配列のどの部分に一致するかを特定します。
* マッピング結果をもとにしたリードカウント
マッピングの結果を基に、各遺伝子にマッピングされたリードの数をカウントします。これにより、各遺伝子の発現量を定量化します。
* 発現変動遺伝子の検出
異なるサンプル間で発現量に顕著な変化がある遺伝子を同定します。これは疾患研究や生物学的機能の解析において重要です。


今回はマッピング結果をもとにしたリードカウントのデータをダウンロードして、DEG解析、生存予測の解析を行います。

環境
* [google colacoratory](https://colab.research.google.com/drive/1Z_xEfFZH1JB_4j5zeK6hrwU0IHf_xs7a#scrollTo=5N5jsbDAVbyu)
* python3.10.12


# GDC Data Portal
GDC Data PortalとはNIH(アメリカ国立衛生研究所)によるがんゲノムプロジェクトで、多様ながん種について、様々なデータを集約、公開しているものです。
様々な大規模ながんゲノムプロジェクトからのデータを含んでおり、ゲノム配列データだけでなく、転写物レベルデータ、エピゲノムデータ、プロテオミクスデータなど、多様なタイプのがん関連データが含まれています。また、ゲノムデータに加え患者の臨床情報や病理学的データも提供されています。これにより、ゲノム変異と臨床結果との関連についても簡単にアクセスでき、研究者にとって非常に有用なサイトとなっています。

* [GDC Data Portal](https://portal.gdc.cancer.gov/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/8f7152be-fbcb-8fc6-38b1-f3eca9c590e0.png)





# GDC Data Portalからmanifestをダウンロードする
まずは[GDC Data Portal](https://portal.gdc.cancer.gov/)を開きRepositoryを開きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/6f594838-2760-795d-8898-aad7549c9bcf.png)

すると以下の画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/f2a8cf47-fccc-06b3-f5fa-c28589546e34.png)


今回は膵臓がんのデータをダウンロードしていきます。データ数のことかく
まずはFileタブのRNA-Seqとopenを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/92394438-4998-00cd-1d96-ab207a39874b.png)

次にCasesタブを開き、今回は膵臓がんなのでpancreasを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/cef70a77-6715-54af-cb42-2fabbc696943.png)


またプログラムからTCGAを選択します
ここで様々な条件を指定することができますが、（人種、年齢、性別等）今回はこれらの条件を指定せず進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/81b0f24f-40ea-49fc-cabf-dae559931147.png)

こうして条件を指定できたらすべてのファイルをカートにいれ、カートに行きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/7d315b24-4605-8617-e372-823110881dac.png)


Downloadからmanifestをクリックし、ファイルリストをダウンロードします。
また後ほど必要になるのでsample sheet,clinicalもダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/07dcf1ca-d1b2-2205-1e44-c1590c6eb81d.png)


# GDC Data Portal Transferの使い方

詳しくは[マニュアル](https://docs.gdc.cancer.gov/Data_Transfer_Tool/Users_Guide/Getting_Started/)を参照してください。


[GDC Data Transfer Page](https://gdc.cancer.gov/access-data/gdc-data-transfer-tool)に飛び、左のClientから自身の環境にあったものを選びダウンロードしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/0edb826d-96f9-9df2-ddef-0e531011476e.png)

ダウンロードが終わったらパスを通す必要があります。これはホームディレクトリにある**gdc-client**を認識可能にするためのものです。
実行ファイル（exeファイル）を配置した場所の環境変数の設定を行っていきましょう。
まずWindowsキーを押して環境変数と入力し、システム環境変数の編集を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/685046e7-0b42-952d-3c26-5835c581dd4a.png)

次にユーザー環境変数のPathの編集を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/296880bb-40bd-2cb3-68ab-04ee65c8ec55.png)

新規を押し、実行ファイルが置かれているフォルダのパスをコピーし貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/392c1879-636d-2ce2-7d9f-cbee7708bcdc.png)

今回のパスは例えば次の場所からコピーすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/5c6fe41f-ae64-54df-972b-9cecd308f2d2.png)

これでパスを通すことができました。
パスが通っているか確認します。
Windowsキーを押してcmdと打ち込みます。そこに**gdc-client**と打ち、エラーが出なければ大丈夫です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/e19e31cd-9f66-906c-fd83-165523d4f97e.png)

ここからようやくデータのダウンロードに入っていきます。コマンドプロンプト(cmd)を開き、
```php
mkdir TCGA_pancreas
```
と適当なフォルダを作ります。ここにダウンロードしたデータを入れていきます。名前はTCGA_pancreasとしました。

-mオプションをつけてManifestファイルのパスを指定し、-dオプションで保存先ディレクトリ（今作成したTCGA_pancreasフォルダ）を指定します。

```php
gdc-client download -m "Manifestファイルのパス" -d "保存先ディレクトリのパス"
```
するとダウンロードが始まります。今回は２００個弱あり、それなりに時間がかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/fd1e171d-657b-719d-2d7f-71e22836b3a0.png)

ダウンロードが終わるとTCGA_pancreasフォルダにこのようにデータがダウンロードされました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/2324ad3d-5923-8908-3d48-af7186e49d9e.png)

中身を見てみましょう。下にtsvファイルがあり、ここに欲しいデータがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/af4864b1-56fd-93ee-16a9-43870e1fa74e.png)

これはExcelで開いたものですが、データはこのようになっています。
今回は発現量カウントの補正方法としてTPMを用います。発現量カウントの補正方法については以下の記事が参考になると思います。
* [遺伝子発現量カウントの補正方法(RPM, RPKM, TPM)【Python】](https://biotech-lab.org/articles/7045)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/095fdb98-02f8-27d2-44eb-bb5b2464d01a.png)

# データをDataFrameにまとめる
以上の様に遺伝子発現量のデータをダウンロードすることができましたが、このままでは解析を行いにくいのでpython のデータ解析ライブラリであるpandasライブラリに対応するために、一つののDataFrameにデータをまとめていきます。
目標は以下の様なDataFrameを作ることです。行に遺伝子、列に検体が並びます。今回は60660行183列の表が出来上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/7c2102a2-c5d9-922f-af49-75f5c80fd3c6.png)

今回はgoogle colaboratoryで作業を行います。
まず作成したTCGA_pancreasフォルダをGoogle Drive上にアップロードします。新規を押して、フォルダをアップロードでTCGA_pancreasフォルダをアップロードします。
また、今回作業用にTCGA_pancreas_workingフォルダも作り、これもアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/4bcb411c-fd59-50fb-20b8-6097cb937328.png)

ここまで来たら[ここ(google colacoratory)](https://colab.research.google.com/drive/1Z_xEfFZH1JB_4j5zeK6hrwU0IHf_xs7a#scrollTo=5N5jsbDAVbyu)にアクセスしてください。
詳細な作業についてはgoogle colaboratoryで説明するとしてここでは大まかな方針を説明します。
まず各ファイルについて下図の様にgene_idとTPM値のみをとりだします。こうして２列のファイルを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/e8526354-5382-e6bc-a8bd-b5cdd7f29d75.png)

次に検体１の２列目の右側（３列目）に検体２の２列目（TPM値）を追加します。これを検体の数だけ繰り返してDataFrameを作成します。

こうして作成したDataFrameは以下の様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/0d4e557e-40eb-f0be-47b3-6e73c55c8778.png)

# DEG解析を行う

発現変動遺伝子(DEGs, Differentially Expressed Genes)とは、異なる条件やグループ間において発現量が大きく上昇または減少した遺伝子のことを言います。ここではそうした発現変動遺伝子を探していきます。
DEG解析にはpyDESeq2を用います。 pyDESeq2は、PythonでDESeq2を使用してRNAシーケンスデータのDEG (Differential Gene Expression) 分析を行うためのライパーです。DESeq2は、RNAシーケンスデータのための統計的手法で、生物学的レプリケート間の遺伝子発現の変動を考慮しながら、条件間での発現の差異を特定するものです。


今回pyDESeq2において必要となるデータはcountsとmetadataの二つのファイルとなります。
countsとmetadataはそれぞれ以下の様になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/5a20e31d-2e64-0494-7c87-395210aa9134.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/19e33254-432c-89ab-7e2a-eb3820a7d69b.png)

countsはここまでで作ってきたDataFrameを転置したものになります。
metadataは各サンプルの状態が入力されているものです。この例では状態が二つ入力されています。（conditionとgroupの二つ）今回はdead or aliveかで単因子解析を行うのでconditionのみの列となります。
ここで用いるのはGDC Data Portalから発現データをダウンロードした時に一緒にダウンロードしたsample sheetとclinicalです。clinicalはフォルダになっていて中にファイルが何個か入っていますが今回使うのはclinical.tsvです。 このclinicalファイルには様々な状態が記載されていますが、今回は単一因子分析としてDead or Aliveの二つの状態のみに注目したいと思います。 つまり１列目にサンプル名２列目にvital_statusとなるようにファイル操作を行うとclinicalファイルからmetadataを作ることができます。しかしこのサンプル名が先ほど作ったDataFrameとclinicalで違うので、sample sheetを用いてこの二つをつなぐ必要があります。
具体的に見てみましょう。先ほど作成したDataFrameではsample名としてファイル名を用いています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/def15b05-7e06-f36c-8233-c104151e9805.png)

一方でclinicalではファイル名は存在しておらず、サンプル名としてcase_submitter_idが用いられています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/3e5daa87-e70f-9561-4ba8-23b2fa7a0ec3.png)

そこでこのファイル名とcase_submitter_idをつなげるためにsample sheetを用います。sample sheetではファイル名はFile Nameの列に、case_submitter_idはSample IDの列にあります。（clinicalのcase_idとは違います。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/41d961ca-fc59-6ce7-85af-04ac327dcf80.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/22cc316b-79ae-6cb5-6565-65d8818b4c1f.png)

具体的な作業は[ここ(google colacoratory)](https://colab.research.google.com/drive/1Z_xEfFZH1JB_4j5zeK6hrwU0IHf_xs7a#scrollTo=5N5jsbDAVbyu)で行っています。

countsとmetadataが出来上がったらあとは実際にDEG解析を行っていきます。先に述べたpyDSeq2を用います。
解析の結果を見ていきましょう。下図は結果の一部となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/1bd2da47-ce19-1802-a3a8-ae2dde46389f.png)

* baseMean：遺伝子の平均カウント値
* log2FoldChange：対数2倍率の変化。ここではvital_statusのDead or Aliveの効果を表しています。
* lfcSE： 対数2倍率の変化の標準誤差であり、推定された対数2倍率の変化の不確実性を示す指標です。この値が小さいほど、対数2倍率の変化の推定値に対する信頼性が高いことを意味します。
* stat：Wald統計量。
* pvalue：Wald検定のp値。
* padj：多重比較の誤りを考慮して補正されたp値です。

発現変動遺伝子を特定するためにpadjが0.01よりも小さいものを取り出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566009/781c1a2c-639b-c15e-11af-4645fcd820f2.png)
この様に、3294個の遺伝子を発現変動遺伝子として特定することができました。

# 生存予測

機械がいつ故障するか。患者がいつ死亡するか。このようにある事象がいつ起こるのかを推定する手法として生存分析があります。今回はDEG解析で特定した発現変動遺伝子を用いて生存予測を行います。

必要なファイルは学習用データ、評価用データとなります。
サンプル数（患者数）が183名のため、学習用データに100名を用い、評価用データとして83名を用います。
学習用データは目的変数と説明変数の２つにわけることができます。
目的変数はvital_status
説明変数は各遺伝子
となります。つまり、各遺伝子がvital_statusにどの様に関与しているかを学習し、予測します。今回はロジスティック回帰を用いてモデリングを行います。

例のごとく具体的な作業は[ここ(google colacoratory)](https://colab.research.google.com/drive/1Z_xEfFZH1JB_4j5zeK6hrwU0IHf_xs7a#scrollTo=5N5jsbDAVbyu)で行っています。
モデリングをした後評価用データにあてはめてみます。５つだけ結果を表示します。

```
pred = model.predict_proba(X_test)[:, 1]
print(pred[:5])
```
結果は[2.21084671e-04 9.79174058e-01 2.19425586e-18 1.06323643e-43
 9.99999998e-01]となりました。
このようにほぼ1か0のどちらかになってしまうのは、説明変数の数が多すぎることが原因と思われます。つまり100個の変数を3294個の変数で説明するというところに無理があるということです。これは過学習とよばれ、今回もこれに相当すると思われます。

予測結果をAUCで評価しました。AUCとはROC曲線の下の面積を指し、主に分類モデルの性能を評価するために使用されます。AUCは、モデルがクラスをどの程度正確に分類できるかを示す指標です。この数値の目安は以下の様になっています。
0.9～1.0：非常に精度が高い
0.8～0.9：精度が高い
0.7～0.8：多少精度が高い
0.6～0.7：あまり良くない精度
0.5～0.6：ランダムと変わらない精度


```
from sklearn.metrics import roc_auc_score

# AUCを計算
auc = roc_auc_score(true, pred)
print(f"AUC: {auc}")
```
今回の結果は0.504となり作成したモデルは予測に全く使えないものとなってしまいました。これの原因は先に述べた過学習にあると考えています。

# まとめ
TCGAから遺伝子発現量を取得し、DEG解析を行いすい臓がんを引き起こす遺伝子を3000個程度特定し、それをもとに生存予測を行いました。
しかしながら生存予測が過学習によりうまくいきませんでした。これは特定したがん遺伝子が3000個と多かったことが原因なのでp値をもっと小さい値で原因遺伝子を選定するとよいと思われます。
今回記事を書くにあたりプログラミングがほぼ初心者だったので全般的に苦労しました。
特に苦労したのはファイル操作（Pandasの扱い）でした。なれないPandasの操作に四苦八苦しました。しかしChatGPTの助けなども得ながら進めることができました。
ご指摘、アドバイス等ございましたら気軽にコメントお願いします。
(この記事は研究室インターンで取り組みました：https://kojima-r.github.io/kojima/)