ボルケーノプロット作成ツール
論文や学位論文に載せる RNA-seq・プロテオミクス・メタボロミクスの結果のためのボルケーノプロット作成ツールです。あなたのカットオフで発現上昇・低下遺伝子を分け、上位のヒットにラベルを付け、凡例に個数を記します。すべてあなたの表から計算します。
ボルケーノプロット作成ツールのジャーナルスタイル
ボルケーノプロット作成ツールの 5 つのジャーナルの仕上げを、それぞれ別の例示用の結果表で描きました。ノックアウトマウスの肝臓、シングルセルのマーカー、植物の乾燥ストレス、喫煙のマイクロアレイ、リン酸化プロテオミクスのスクリーニングです。カードをクリックすると、そのプロンプトと遺伝子を読み込めます。
ボルケーノプロットの例
ボルケーノプロット作成ツールで描いた 4 つのボルケーノプロットの例(RNA-seq、プロテオミクス、メタボロミクス、ラベルを付けた遺伝子セット)です。どれもカードに載せたプロンプトと表から実際に描いたものです。カードをクリックすると、そのプロンプトと遺伝子が入力欄に入ります。
ボルケーノプロットとは?
ボルケーノプロットは、発現変動解析の結果を 1 枚で示す図です。遺伝子 1 つが点 1 つで、x 軸に 2 つの条件間の log₂ fold change(発現変動倍率の log₂)、y 軸に p 値の −log₁₀ を取ります。 大きく、しかも確かに変化した遺伝子は左右の上の隅へ上がり、変化しなかった遺伝子は 0 の周りに低く広い裾野をつくります。この形が火山(ボルケーノ)に見えるのが名前の由来です。発現変動倍率と有意性のカットオフの破線が、点を発現上昇、発現低下、有意でないものに分けます。
このボルケーノプロット作成ツールについて
- ボルケーノプロット作成ツールは、−log₁₀ p、各遺伝子の分類、個数、両軸、カットオフ線を、あなたの表からコードで計算し、すべての座標を画像モデルに渡します。モデルはそれを配置するだけです。
- ボルケーノプロット作成ツールの既定のカットオフは |log₂ fold change| ≥ 1(2 倍の変化)と p < 0.05 で、値が padj・FDR・q 値なら補正済みとして扱います。プロンプトで「|log2FC| > 0.58 and padj < 0.01」のように変更できます。
- 通常の倍率は換算します。依頼に fold change とだけ書いて log がなければ(乳酸 3.2)、ボルケーノプロット作成ツールは log₂ 3.2 = 1.68 をプロットします。ファイルの場合は列の見出しで判断します。
- 200 遺伝子までなら、ボルケーノプロット作成ツールはすべての点を正確に描きます。それを超えると、最も有意な遺伝子を正確に配置し、灰色の裾野は実際の個数と形から描くので、20,000 遺伝子の表でも本当の個数が保たれます。
ボルケーノプロットの見方を点ごとに
インターフェロン β と mock 処理を比べた RNA-seq の例示用の 20 遺伝子を、ボルケーノプロット作成ツールが実行するのと同じコードで、|log₂FC| ≥ 1 と padj < 0.05 で描きました。図の番号は手順に対応しています。
- 1
横方向:変化の向きと大きさ
x はインターフェロン β の mock に対する log₂ fold change です。0 は変化なし、+1 は 2 倍、−1 は半分で、+5.1 の IFIT1 は約 34 倍です。目盛りは対称なので、半減は倍増と同じ距離だけ左にあります。
- 2
縦方向:大きさではなく証拠の強さ
y は補正後の p の −log₁₀ です。1.3 の破線が padj 0.05、2 が 0.01 で、13.7 の IFIT1 は padj 2 × 10⁻¹⁴ です。高いほど変化がノイズである可能性が低いことを示しますが、変化の大きさについては何も語りません。
- 3
上の隅にヒットが集まる
x = 1 より右で線より上にあるのが 6 つの発現上昇遺伝子(IFIT1, ISG15, MX1, RSAD2, OAS1, IRF7)、−1 より左にあるのが 4 つの発現低下遺伝子(COL1A1, TGFBI, MYC, CCND1)です。論文で報告するのはこの個数です。
- 4
真ん中で高い:有意だが小さい
STAT1 は (0.7, 8.5) にあります。変化はとても精密に測れていますが 1.6 倍にすぎず、2 倍の線に届かないので灰色のままです。FN1 も発現低下側のもっと低い位置で同じ状態です。
- 5
外側だが低い:大きいが不確か
CXCL10 は (3.9, 0.9) にあります。平均では 15 倍高いのですが、padj は 0.12 です。リード数が少ないか、反復どうしの結果が食い違うと、ちょうどこのような点になります。このカットオフではヒットではありませんが、見直す価値はあります。
- 6
灰色の裾野:変化しなかったもの
ACTB、GAPDH などのハウスキーピング遺伝子は (0, 0) の周りに集まっています。ゲノム全体の RNA-seq のボルケーノプロットでは、調べた 15,000〜25,000 遺伝子の大半がこの裾野に入ります。
この 20 遺伝子をボルケーノプロット作成ツールに送り、プロンプトでカットオフを 1 つ変えて、点が線を越えていく様子を確かめてください。
ボルケーノプロット作成ツールの使い方
ボルケーノプロット作成ツールに遺伝子を渡す
1 行に 1 遺伝子で、名前、log₂ fold change、p を書きます(FKBP5 3.1, 1.2e-12; CCL2 −2.2, 5e-7)。結果表を .csv・.tsv・.xlsx で添付しても構いません。DESeq2・edgeR・limma・Seurat・Perseus の見出しを認識し、60,000 行まで読み込みます。
比較とカットオフを書く
軸のタイトルとして Treated vs Control のように書き、カットオフが |log₂FC| ≥ 1 と p < 0.05 でなければそれも書きます(補正済みの値なら padj か FDR と書いてください)。ラベルを付ける遺伝子を指定するか上位 N 個を頼みます。既定は両側に分けた最も有意な 10 個のヒットです。
ジャーナルスタイルを選んで生成する
Nature、Cell Press、PLOS、Bioinformatics、ggplot2 風のプレプリントの仕上げから選びます。ボルケーノプロット作成ツールは画像モデルが描く前に座標、分類、個数、カットオフ線を計算し、続けて編集するたびに計算し直します。
ボルケーノプロットに使う DESeq2・edgeR・limma・Seurat の列
どのパイプラインも同じ 3 つの数値を別の名前で書き出します。ボルケーノプロット作成ツールが各結果表から読む列は次のとおりなので、ファイルは書き出したまま添付できます。
| 結果表 | x:log₂ fold change | y:p 値 | 補正後の p(優先して使用) | 注意点 |
|---|---|---|---|---|
| DESeq2 results() | log2FoldChange | pvalue | padj | independent filtering で除かれた遺伝子は padj が NA になり、その行は飛ばします。プロットや順位付けには、DESeq2 の開発者は lfcShrink() で縮小推定した fold change を勧めています。 |
| edgeR topTags() | logFC | PValue | FDR | FDR は既定で Benjamini–Hochberg 法です。logCPM は平均発現量で、fold change ではありません。 |
| limma topTable() | logFC | P.Value | adj.P.Val | B は発現変動の対数オッズで、p 値ではありません。y 軸には使わないでください。 |
| Seurat FindMarkers() | avg_log2FC | p_val | p_val_adj | p_val_adj は全遺伝子にわたる Bonferroni 補正で、ちょうど 0 になることがよくあります。その遺伝子は 0 でない最小の値の位置に描きます。Seurat v3 は avg_logFC を自然対数で書き出していました。 |
| Perseus (MaxQuant) | Difference | −Log p-value(すでに −log₁₀) | q-value | −log₁₀ の列は p に戻してから使うので、二重に変換されることはありません。 |
| 自分で作った表 | log2FC | p または pvalue | padj、FDR または q | log の付かない Fold change という見出しの列は log₂ に換算します。4 は 2 に、0.25 は −2 になります。 |
ファイルに未補正と補正後の両方の p の列があれば、ボルケーノプロット作成ツールは補正後のほうでプロットとしきい値判定を行います。DESeq2・edgeR・limma の結果はふつうこちらで報告されます。未補正の p をプロットしたいときは、補正後の列を削除した表を添付してください。
ボルケーノプロットのカットオフ:|log₂FC| と padj で何が変わるか
2 つのカットオフがどの点をヒットとみなすかを決めますが、それはデータの事実ではなく選択です。|log₂ fold change| ≥ 1 は少なくとも倍増か半減を求め、padj < 0.05 は検出した遺伝子のうち偽陽性が 5 % と見込まれることを許容します。解説と同じ 20 遺伝子を 4 組のカットオフで、ボルケーノプロット作成ツール自身のコードで数えました。
| カットオフ | 上昇 | 低下 | 有意でない | 動いたもの |
|---|---|---|---|---|
| |log₂FC| ≥ 1、padj < 0.05(よく使う既定値) | 6 | 4 | 10 | STAT1 と FN1 は p では通りますが倍率では通らず、CXCL10 は倍率では通りますが p では通らないので、3 つとも灰色のままです。 |
| |log₂FC| ≥ 0.58(1.5 倍)、padj < 0.05 | 7 | 5 | 8 | 1.5 倍のカットオフでは STAT1 と FN1 が入ります。とても精密に測れた小さな変化です。 |
| |log₂FC| ≥ 1、padj < 0.01 | 6 | 3 | 11 | p を厳しくすると CCND1(padj 0.019)が外れます。発現上昇遺伝子はすべてすでに 0.001 未満なので、そちら側は変わりません。 |
| |log₂FC| ≥ 2(4 倍)、padj < 0.001 | 5 | 1 | 14 | 残るのは最も強いインターフェロン応答だけで IRF7 は外れ、発現低下遺伝子は TGFBI の 1 つだけです。 |
避けたい間違いが 2 つあります。padj でしきい値を決めながら y 軸に未補正の p をプロットすると、横線がカットオフを適用していない位置に引かれ、灰色の点が線より上に来ることがあります。また、R のスクリプトから 10e-6 と写したカットオフは、R では 1e-6 ではなく 10 × 10⁻⁶ = 1e-5 です。どの p をプロットするかをボルケーノプロット作成ツールに伝えれば、線はちょうどその値に引かれます。
ボルケーノプロット作成ツールで描けるもの:RNA-seq、プロテオミクス、シングルセルなど
論文や学位論文に出てくる 7 種類のボルケーノプロットと、それぞれの特徴、ボルケーノプロット作成ツールへの伝え方です。
RNA-seq のボルケーノプロット(DESeq2、edgeR、limma-voom)
最もよく見るボルケーノプロットです。調べた 15,000〜25,000 遺伝子の 1 つずつが点で、y 軸は補正後の p(padj か FDR)です。 DESeq2 の lfcShrink() で縮小推定した fold change を使えば、リード数の少ない遺伝子が ±8 まで飛び出すのを防げます。結果ファイルは書き出したまま添付してください。200 遺伝子を超えると、ボルケーノプロット作成ツールは有意な遺伝子を正確に配置し、灰色の裾野は個数から描きます。
プロテオミクスのボルケーノプロット
タンパク質の強度(ラベルフリーの LFQ か TMT)の log₂ 比を、t 検定や limma による −log₁₀ p に対して描くもので、ふつうは 2,000〜6,000 タンパク質です。 ラベルには UniProt のアクセッション番号ではなく遺伝子名を使います。Perseus はよく曲線の有意性の線(s0 定数を入れた FDR)を描きますが、ボルケーノプロット作成ツールが描くのは直線のカットオフなので、適用した |log₂FC| と p を書いてください。
メタボロミクスとリピドミクスのボルケーノプロット
倍率は通常の比(腫瘍/正常 = 3.2)で報告されることが多く、p は t 検定かウィルコクソン検定、それに FDR が付きます。 log を付けずに fold change と書けば、ボルケーノプロット作成ツールが値を換算します。3.2 は 1.68 に、0.5 は −1 にプロットされます。特徴量は数百個がふつうなので、すべての点が正確に描かれます。
シングルセルのマーカーのボルケーノプロット(Seurat FindMarkers)
1 つのクラスターをほかのすべての細胞と比べ、x に avg_log2FC、y に p_val_adj を取ります。 1 回の検定に数千個の細胞が入るため p 値は 10⁻⁸⁰ 以下にもなり、y 軸はバルクの RNA-seq よりはるかに高くまで伸びます。また p_val_adj = 0 の遺伝子が多く、ボルケーノプロット作成ツールはそれを保存されている最小の値の位置に描きます。
マイクロアレイのボルケーノプロット(limma)
log₂ 強度から求めた limma の logFC と adj.P.Val で、遺伝子ではなくプローブセット単位のことがよくあります。 倍率は RNA-seq より圧縮されるので、1.5 倍のカットオフ(|log₂FC| ≥ 0.58)がよく使われます。ボルケーノプロット作成ツールはラベルに Symbol の列を使い、シンボルが空ならプローブ ID を使います。
遺伝子を強調したラベル付きのボルケーノプロット
上位のヒットではなく、論文が扱う経路など、選んだ遺伝子のセットに名前を付けたボルケーノプロットです。 「highlight only NANOG, SOX2 and MYC」と書けば、ボルケーノプロット作成ツールはちょうどその遺伝子にラベルを付けます。灰色であっても付けるので、それこそが図の要点になることもよくあります。
リン酸化プロテオミクスと CRISPR スクリーニングのボルケーノプロット
同じ軸を別の単位に使います。リン酸化プロテオミクスならリン酸化部位(EGFR_Y1068)、MAGeCK のスクリーニングならガイドのカウントの log₂ fold change をもつ遺伝子です。 ラベルは部位名でも構いません。点 1 つが何を表すかをボルケーノプロット作成ツールに伝えれば、軸のタイトルにそれが書かれます。
ボルケーノプロットと MA プロットの違い
ボルケーノプロットは発現変動倍率を有意性に対して、MA プロットは発現変動倍率を平均発現量に対して描きます。 どちらも同じ結果表から作ります。ボルケーノプロットはどの遺伝子が確かに変化したかに答え、MA プロットは発現変動倍率が遺伝子の発現の強さに左右されていないかに答えます。
ボルケーノプロット
MA プロット
| 観点 | ボルケーノプロット | MA プロット |
|---|---|---|
| x 軸 | log₂ fold change | 対数尺度の平均発現量(A:DESeq2 の baseMean、edgeR の logCPM、limma の AveExpr) |
| y 軸 | −log₁₀ p または補正後の p | log₂ fold change (M) |
| 形 | x = 0 の広い裾野から立ち上がる V 字 | M = 0 の周りの平らな帯で、発現の低い側で扇状に広がる |
| 答える問い | どの遺伝子が大きく、確かに変化したか | リード数の少ない遺伝子が倍率を膨らませていないか、正規化で M が 0 に中心化されたか |
| 載せる場所 | 結果の図。ヒットにラベルを付ける | 品質管理と補足の図 |
ボルケーノプロット作成ツールが描くのはボルケーノプロットです。同じヒットをすべてのサンプルで示したいときは、正規化した発現量を使ってヒートマップ作成ツールで描いてください。
ボルケーノプロット作成ツールと R・Prism・Python・Excel の比較
ボルケーノプロットの多くは、DESeq2 や limma の表から R で、複数の t 検定のあとに GraphPad Prism で、あるいは Python で描かれています。それぞれで作業がどこにかかるかをまとめました。
| 項目 | ボルケーノプロット作成ツール | R(ggplot2、EnhancedVolcano) | GraphPad Prism | Python (matplotlib) | Excel |
|---|---|---|---|---|---|
| 出発点 | 入力した行、または書き出したままの DESeq2・edgeR・limma・Seurat の表 | 結果のデータフレームとスクリプト | 複数の t 検定の解析、または倍率と −log₁₀ p の XY 表 | pandas の DataFrame とスクリプト | 倍率と p の列に、補助列 =-LOG10(C2) |
| −log₁₀ p | 表から計算 | aes() の中で -log10(padj)。EnhancedVolcano なら自動 | t 検定の解析で計算 | -np.log10(df.padj) | 自分で数式を書く |
| カットオフ線と色 | 指定したカットオフ(既定は 1 と 0.05)から引き、分類ごとに個数も数える | geom_vline、geom_hline と分類の列。EnhancedVolcano では pCutoff と FCcutoff | 解析で設定するか、別の系列として描く | axvline、axhline と色の列 | 線ごとに 1 系列、色ごとに 1 系列 |
| 遺伝子のラベル | 有意性の上位 10 個、上位 N 個、または指定した遺伝子 | ggrepel、または EnhancedVolcano の selectLab | 点を 1 つずつラベル付け | annotate または adjustText | データラベルを 1 つずつ |
| ジャーナルの仕上げ | 5 つの投稿先プリセット | テーマを手で書く | Prism のグラフテンプレート | rcParams を手で書く | 手で書式設定 |
| 必要なもの | ブラウザ | R と Bioconductor | Prism のライセンス | Python と matplotlib | Excel |
気に入っている ggplot2 のボルケーノプロットがありますか。表と一緒にそのスクリーンショットを参考画像として添付すれば、ボルケーノプロット作成ツールはあなたの数値を保ったまま、その見た目に合わせます。
ボルケーノプロット作成ツールのよくある質問
ボルケーノプロットは何を示しますか?
2 つの条件の間でどの遺伝子が、どれだけ、どれほど確かに変化したかを一度に示します。 点の 1 つひとつが遺伝子で、左右の位置が log₂ fold change、高さが p 値の −log₁₀ です。点が高く外側にあるほど、変化は大きく確かです。0 付近の灰色の裾野は、変化しなかった遺伝子です。
ボルケーノプロットはどう読みますか?
まず横方向で変化の大きさと向きを読み(右が上昇、左が低下、±1 が倍増か半減)、次に縦方向で証拠の強さを読みます(1.3 が p = 0.05 で、そこから 1 目盛り上がるごとに p は 10 分の 1 になります)。ヒットは破線の外側、左右の上の隅にあります。上の解説では、20 遺伝子の 1 つの例で 6 つの領域をすべて読んでいます。
ボルケーノプロットの log₂ fold change のカットオフはいくつにすべきですか?
最もよく使われるのは |log₂FC| ≥ 1、つまり 2 倍の変化です。プロテオミクス、マイクロアレイ、シングルセルのデータなど、効果が小さいと見込まれる場合は 0.58(1.5 倍)も使われます。 カットオフは報告上の選択なので、図の説明文に書いてください。ボルケーノプロット作成ツールでは、プロンプトに書くか(「|log2FC| > 0.58」)、N 倍の変化として書けば(「1.5-fold」)log₂ に換算します。
y 軸には p 値と補正後の p 値のどちらを示すべきですか?
有意性のカットオフを適用したほうです。そうすれば横線が説明文どおりの意味になります。数千の遺伝子を調べるため、多くの論文は Benjamini–Hochberg 法で補正した p(padj、FDR、q)でしきい値を決めてプロットします。ボルケーノプロット作成ツールは、値が補正済みなら軸のタイトルを −log₁₀(adjusted p-value)、そうでなければ −log₁₀(p-value) にします。
ボルケーノプロットが左右非対称になるのはなぜですか?
低下より上昇した遺伝子が多い、あるいはその逆だからです。ボルケーノプロットの対称性は生物学的な結果のとおりにしかなりません。灰色の裾野全体が x = 0 からずれているのは別の問題です。たいていは正規化の問題を示しているので、ヒットを読む前に MA プロットで確かめる価値があります。ボルケーノプロット作成ツールが、釣り合って見えるように点の雲を左右反転させることはありません。
ボルケーノプロットのいちばん上に点が平らな列になって積み重なるのはなぜですか?
p 値が小さすぎて保存できずに 0 と書かれたため、−log₁₀ p が無限大になり、作図ソフトが 1 つの高さに押し込めているのです。Seurat の p_val_adj やとても深い RNA-seq でよく起こります。ボルケーノプロット作成ツールはそうした遺伝子を表の 0 でない最小の p の位置に描き、図にその旨を記します。p < 10⁻³⁰⁰ と報告するのは誠実ですが、正確な値をでっち上げるのはそうではありません。
R でボルケーノプロットを作るには?
ggplot2 なら、分類の列(up、down、not significant)を加えてから、ggplot(res, aes(log2FoldChange, -log10(padj), colour = class)) + geom_point() + geom_vline(xintercept = c(-1, 1), linetype = 2) + geom_hline(yintercept = -log10(0.05), linetype = 2) と書き、ラベルには ggrepel を使います。EnhancedVolcano は同じ手順を pCutoff と FCcutoff の引数にまとめています。コードを省きたいなら、write.csv() で保存した表をボルケーノプロット作成ツールに添付してください。
GraphPad Prism でボルケーノプロットを作るには?
Prism(Prism 8 以降)では、グループ化した表を複数の t 検定で解析すると、ボルケーノプロットが自動で描かれます。結果には差を −log₁₀ p に対して描いたグラフが含まれます。ほかで作った結果表からなら、XY 表の X に log₂ fold change、Y に −log₁₀ p を入れ、カットオフ線を別のデータセットとして加えるか、その表をボルケーノプロット作成ツールに添付してください。
Excel や Python でボルケーノプロットを作れますか?
Excel では、p 値の横に =-LOG10(C2) の列を加え、倍率に対するその列の散布図を作り、カットオフ線はそれぞれ 2 点の系列として加えます。分類ごとに色を分けるには、分類ごとに 1 系列が必要です。Python では plt.scatter(df.log2FoldChange, -np.log10(df.padj), c=colours) に plt.axvline と plt.axhline で同じことができ、ラベルは adjustText で配置します。ボルケーノプロット作成ツールは同じ表を .xlsx か .csv のまま、数式の列なしで受け付けます。
ボルケーノプロット作成ツールは DESeq2 や Seurat のファイルを直接読めますか?
読めます。ボルケーノプロット作成ツールは DESeq2・edgeR・limma・Seurat・Perseus の結果を列の見出しから読み取ります。 .csv・.tsv・.xlsx で 60,000 行まで対応します。NA の行は飛ばし、補正後の p があればそれを使い、通常の Fold change の列は log₂ に換算します。
ボルケーノプロット作成ツールは p 値を計算しますか?
しません。ボルケーノプロット作成ツールは表から p 値を読むだけで、統計検定は行いません。 検定は DESeq2、edgeR、limma やプロテオミクスのソフトで行ってください。その数値から、ボルケーノプロット作成ツールが −log₁₀ p、各遺伝子の分類、個数、軸、カットオフ線を正確に計算します。
ボルケーノプロット作成ツールはどの遺伝子にラベルを付けますか?
既定では、ボルケーノプロット作成ツールは発現上昇側と低下側に分けて、最も有意な 10 個のヒットにラベルを付けます。 「label the top 20」「no labels」と書くか、遺伝子を指定してください(「highlight NANOG, SOX2 and MYC」)。指定した遺伝子は灰色でもラベルが付きます。
ボルケーノプロット作成ツールはいくつの遺伝子を描けますか?
ボルケーノプロット作成ツールは 60,000 行まで受け付けるので、トランスクリプトーム全体でも扱えます。 200 遺伝子までは、すべての点を正確な座標に置きます。それを超えると、最も有意な遺伝子(300 個まで)を正確に配置し、残りは実際の個数と広がりから帯ごとに描きます。凡例には発現上昇、発現低下、有意でないものの正確な個数がそのまま記されます。
出典
- Volcano plot (statistics) — Wikipedia(英語)
- Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2 — Love, Huber & Anders, Genome Biology 15, 550 (2014)
- EnhancedVolcano: publication-ready volcano plots — Bioconductor
- FindMarkers: gene expression markers of identity classes — Seurat リファレンス(Satija Lab)
- Controlling the false discovery rate: a practical and powerful approach to multiple testing — Benjamini & Hochberg, J. R. Stat. Soc. B 57, 289–300 (1995)
関連ツールと記事
ほかの図表作成ツールと、その読み方をまとめた記事。
結果表をボルケーノプロット作成ツールに入れる
遺伝子を貼り付けるか DESeq2・edgeR・limma・Seurat のファイルを添付すれば、ボルケーノプロット作成ツールが正確なカットオフ、個数、ラベル付きのジャーナルの体裁の図を返します。
ボルケーノプロット作成ツールを開く