(Rで)塩基配列解析 ~NGS、RNA-seq、ゲノム、トランスクリプトーム、正規化、発現変動、統計、モデル、バイオインフォマティクス~
  (last modified 2014/09/28, since 2010)

What's new?

はじめに

このページは、次世代シーケンサー(Next-Generation Sequencer; NGS)などから得られた短い塩基配列(short read)データ解析をRで行うための一連の手続きをまとめているものであり、 特にアグリバイオインフォマティクス教育研究プログラムの被養成者がわかる程度のレベルで作成した(しつつある)ものです。

Maintainerは門田幸二(東京大学大学院農学生命科学研究科)が永らく一人でやっていましたが、 2013年7月のリニューアル以降は私の出身研究室(東京大学・大学院農学生命科学研究科・応用生命工学専攻・生物情報工学研究室: 清水謙多郎教授)大学院生の孫建強氏が W3C validation、美しいコーディング、TCCパッケージ開発および有用関数のTCCへの追加など重要な役割を担っています。

また、私がこの仕事にこれだけの時間を費やせるのは、ボスである清水謙多郎教授の全面的なサポートのおかげです。

アグリバイオの分野は、ヒトやマウスといったゲノム配列既知のモデル生物ではなくアノテーション情報が乏しい非モデル生物を主に取り扱います。 例えば、主に次世代シーケンサー(NGS)から得られるRNA-seqデータを用いて、「de novo (genome or transcriptome) assemblyを行い、発現変動領域を同定する」 といった解析が第一段階として行われます。アセンブル周辺は未だにLinux上でのみ動作するプログラムを利用するしかありませんが、 2013年頃から本格的にWindows OS上でマッピングやカウントデータ取得が行えるようになり、(マイクロアレイ解析を行うためにRに慣れたWindowsユーザの)実験系研究者にとっての敷居が低くなってきました。 もともと私は「徹底的にR」派ではありませんでしたが、50-100人規模のハンズオン(PCを用いて生物系の学生が手を動かす)講義を講義として成立させうるのは経験上、 「Rでコピペ」を基本とする以外はあり得ません。Linux(やWindowsのコマンドプロンプト系)の場合、基本コマンドの部分で多くの学生がつまづきます。 「スペース」、「特殊文字」、「コマンドの打ち間違い」、「ファイルが存在しない」など、講義を中断せざるを得ない様々な局面に遭遇し、 学生の側も手を動かしてついていくだけで精一杯で「作業」に忙殺される傾向にあります。結果として、「本質的な全体像の理解」もままならずストレス、という愚痴や感想に至りがちです。 このページの記述形式(必要な部分のみ変更してコピペ)は、私が心穏やかにハンズオン講義を行うためのほぼ最終形です。しかし、私にとってのメリットだけでなく 「今手元にあるデータを心穏やかに最小限の労力で解析したい人」にとっても有意義なページであろうと思っています。

ここでは、アグリバイオインフォマティクス教育研究プログラム の教育研究用資料として、また、一部新学術領域研究「複合適応形質進化の遺伝子基盤解明」 の研究を遂行する上で私が用いたテクニックや知識を項目別にまとめてあります。本当に正しいやり方かどうかなど一切の保証はできませんので予めご承知おきください。 このページの中身自体は、所属機関とは一切関係ない一個人の備忘録のようなものです。リンクは自由にしていただいて構いませんし、講義資料として使うのもご自由になさってください、 前もっての連絡なども一切必要ありません。個別の項目へのリンクはときどき切れると思いますがご容赦ください。必要に応じて随時変更していますので...。 間違いや修正点、また「このような解析をやりたいがどうすればいいか?」などのリクエストがあればメール()をいただければ... (実際問題として相当様々なことにトラップされてますので対応は難しいですが...)前向きに検討させていただきます。 もちろん、アグリバイオインフォマティクス教育研究プログラム被養成者からのリクエストは優先的に対応します。

なお、よく(例えばDドライブの)外付けHDに大きなサイズのファイル(4GB以上)を保存できない、ということがあったりしますが、その対処法はおまじない的にコマンドプロンプト上で「convert D: /fs:ntfs」とやっておくことです。

このページ内で用いる色についての説明:

コメント
特にやらなくてもいいコマンド
プログラム実行時に目的に応じて変更すべき箇所

...

  • rm(list = ls())
  • 「"...\Rgui.exe" LANGUAGE=en」で英語環境にできる
  • 2013年7月以降のリニューアルで、コードのコピーがやりずらくなっています。「CTRL」キーと「ALT」キーを押しながらコードの枠内で左クリックすると、全選択できます。

参考資料(講義、講習会、本など)

基本的に私門田の個人ページに記載してあるものです。 かなり古い講演資料などの情報をもとに勉強されている方もいらっしゃるようですので、 ここでは2013年秋以降の情報を載せておくとともに、大まかな内容についても述べておきます。講演予定のものについては、資料のアップは講演当日が基本です。 50-100MB程度ありますがオリジナルのPowerPointファイルがほしい方はお気軽にリクエストしてください。 講義資料としての利用などは事前連絡や私個人への謝辞も気にせずご自由にお使いください。

書籍

  • 門田幸二, 孫建強, 湯敏, 西岡輔, 清水謙多郎,「次世代シーケンサーデータの解析手法:第1回イントロダクション」, 日本乳酸菌学会誌, 25(2), 87-94, 2014.
  • 内容:日本乳酸菌学会誌のNGS関連連載の第1回分です。NGS解析関連の情報収集先、NGS用教育カリキュラム、Windows上でのLinux環境構築、Bio-Linux、 R環境構築、Rで一通り解析ができたころを知っているマイクロアレイ解析出身のヒトがRNA-seq解析でLinuxを強く勧められる理由など。 Perl, Python, Rubyなどの他のプログラミング言語の概観。DDBJパイプラインなどのウェブツール、Galaxyの簡単な説明。 Expression Atlas中のbaselineやcontrastの説明を通じた解析目的別留意点、Expression Atlasと似た思想のRefEx紹介。 Rで乳酸菌ゲノム配列を読み込んでGC含量をコピペで得られることなど。 書籍中のリンク先やRコードは「書籍 | 日本乳酸菌学会誌 | 第1回イントロダクション」の項目をご覧ください。

  • 門田幸二著(金明哲 編), シリーズ Useful R 第7巻 トランスクリプトーム解析, 共立出版, 2014. ISBN: 978-4-320-12370-0
  • 内容:マイクロアレイとRNA-seq解析を例としてRを用いてトランスクリプトーム解析を行うための体系的な本としてまとめました。 数式が苦手なヒト向けに、重みつき平均の具体的な計算例などを挙げてオプションの意味などがわかるような中身の理解に重点を置いた構成にしてあります。 書籍中のRコードは「書籍 | トランスクリプトーム解析 | ...」をご覧ください。

  • 門田幸二,「トランスクリプトミクスの推奨データ解析ガイドライン」, ニュートリゲノミクスを基盤としたバイオマーカーの開発, シーエムシー出版, 45-52, 2013. ISBN: 978-4-7813-0820-3
  • 内容:マイクロアレイ解析の話がメインです。実験デザインの重要性を述べています。 Affymetrix GeneChipデータの数値化と発現変動遺伝子(DEG)検出法の組合せの重要性の話や、サンプル間クラスタリングである程度DEGに関する情報がわかることを述べています。 MAS5データを用いる場合は特に倍率変化で議論することも無意味であること、RMAのようなマルチアレイ正規化法を用いて得られたマイクロアレイデータの場合には なぜ倍率変化でうまくいく傾向にあるかなどの理由をM-A plotを用いて説明しています。

講習会、講義、講演資料

  • 門田幸二,「フリーソフトRを用いたビッグデータ解析:塩基配列解析を中心に (20140819, 23:29版)」, 生命医薬情報学連合大会2014, 中級者向けバイオインフォマティクス入門講習会, 仙台国際センター(宮城), 10:50-12:20, 2014.10.04
  • 内容:アグリバイオインフォマティクス教育研究プログラムの大学院講義資料の紹介。 その中の一部として、CpG解析を行う2連続塩基の出現頻度解析。small RNA-seqデータのマッピングおよび結果の考察からsequence logosを利用するモチベーションを論理的に説明。 small RNA-seqデータのsequence logosを実行することでアダプター配列がわかることなど。動作確認用のサブセット作成手順。 sequence logosの縦軸の情報量(information contents; ic)の計算手順。 情報量は、内部的にはエントロピーを計算しているだけであり、エントロピーを計算しておいて、 数値が大きければ大きいほどうれしいようにしたいがためにエントロピーの最大値を実際のエントロピー値から差し引いた情報量を縦軸として採用しているのがsequence logosであること。 エントロピー自体は、組織特異的発現パターン検出にもそのまま利用されていること。 ただし、バックグラウンドレベルが高めの場合にはうまく特異的発現パターンがエントロピーの低さで表現できないので、 バックグラウンドを差し引いたデータ変換を行ったのちエントロピーを計算するROKU法開発に至る思考回路の紹介。 スライド中のhogeフォルダの圧縮ファイルはhoge.zip(20140819, 23:30版)です。 90min分。

  • 門田幸二,「ビッグデータ解析とR」, 生命医薬情報学連合大会2014, HPCIワークショップ「医療とビッグデータ解析」, 仙台国際センター(宮城), 9:00-10:30, 2014.10.04
  • 内容:NGSデータ解析にRがある程度利用可能である、というお話。 EMBOSS、k-mer解析、wget、SAMtools、FastQC、small RNAのマッピング、sequence logos周辺がRでもできます的な話。 20min分。

  • 門田幸二,「トランスクリプトームデータ解析戦略2014」, イルミナウェビナー・RNA-Seqシリーズ, イルミナ株式会社(東京), 2014.07.22
  • 内容:イルミナウェビナーにて2011年9月8日と2011年11月17日に行ったRNA-seq周辺のアップデート情報提供がメイン。 その後のイルミナウェビナーシリーズを眺めることやアグリバイオインフォマティクスでの私の大学院講義PDF資料のありか(このページのこと)。RNA-seqのおさらい。 トランスクリプトーム解析技術(wet側)の進展話。マイクロアレイもヒトトランスクリプトームアレイが出ていること、RNA-seqはIlluminaもshort-readからmedium-readへ。 PacBioロングリードのトランスクリプトーム配列を読んだ論文が出始めており、パーソナルゲノムに引き続いてパーソナルトランスクリプトームの時代に来ていることなど。 トランスクリプトーム解析技術(dry側)の進展話。遺伝子構造推定系では有名なTophat-Cufflinksパイプライン以外にも多数のよりよいパイプラインが存在すること。 DDBJパイプラインやBaseSpaceを利用することで、Linux-freeでTophat-Cufflinksパイプラインを実行可能であること、しかしそれ以外の多くはLinuxベースであるため、 利用したい場合にはLinuxを使いこなせたほうがやはりよいということ。転写物の発現量推定もReXpress、RNA-Skimなどより便利かつ高速に実行できる時代がきていることなど。 カウントデータ取得後の発現変動解析はedgeRやDESeqが有名だが、TCCは実質的にiterative edgeRやiterative DESeqに相当するものであり、compcodeRによる客観的な性能評価でも優れていることなど。 性能評価に用いたRコードは20140722_compcodeR.txt。 1時間分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:農学生命情報科学特論I, 東京大学(東京), 2014.07.02
  • 内容:教科書の3.3節と4.3節周辺。 マッピングプログラムは大きくbowtieなどのbasic aligner (unspliced aligner)とtophatなどのsplice-aware aligner (spliced aligner)に大別されること。 splice-aware alignerの基本的なイメージ。ゲノム配列既知の場合の遺伝子構造推定としてTophat-Cufflinksパイプラインの基本形を紹介。 既知遺伝子(または転写物)の発現解析でよい場合は、トランスクリプトーム配列へのマッピングでよい。 最近はSailfishやRNA-Skimなど、k-merに基づくalignment-freeな方法が注目されていることなど。 研究目的別留意点として、 遺伝子間比較の場合とサンプル間比較の場合、配列長補正、総リード数補正、RPKMなど。 長い転写物ほどマップされるリード数が多い傾向をRで確認。GSE42212のヒトRNA-seqデータのFASTQファイル取得以降の一通りの解析。 実際に行ったのは、カウントデータ取得以降のTCCパッケージを用いたサンプル間クラスタリング、発現変動遺伝子(DEG)同定。 M-A plotのおさらい。結果の解釈。FDR、分布やモデルの説明。倍率変化でDEG同定を行う場合との比較。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:農学生命情報科学特論I, 東京大学(東京), 2014.06.25
  • 内容:教科書の2.3節が中心。 デノボゲノムアセンブリ(de novo genome assembly)の大まかな手順を説明。基本的なテクニックとしてk-merの基本的な考え方をシミュレーションデータで解析するとともに、 フィルタリング、エラー補正、de Bruijnグラフに利用されることをKmerGenieとPlatanus論文の図を利用して紹介。 デノボトランスクリプトームアセンブリ(de novo transcriptome assembly)に応用できるものとできないもの。 PacBioでのトランスクリプトーム配列決定が出てきていることを踏まえた未来予想図。 QuasRを用いたマッピングの基本。BAMやBEDの出力ファイル形式。bowtie利用時の使用したオプションとマッピング結果の解釈。 リアルsmall RNA-seqデータのカイコゲノムへのマッピング。アダプター配列除去前後のマップされたリード数の比較。結果の解釈とsequence logosでの確認など。 マッピング結果からのカウントデータ取得。複数サンプルの場合に領域が変化するという事実を見せることを通じて、Tophat-Cufflinksパイプライン中のCuffmergeの直観的理解を補助。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:農学生命情報科学特論I, 東京大学(東京), 2014.06.18
  • 内容:教科書の1.3節と2.3節の一部プラスアルファ。 NGSデータベース、データ取得、ファイル形式、前処理周辺の話。DRA, SRA, ENAを概観。 最新論文データのFASTQファイルは提供されていないことがあること、DBによってダウンロード可能なファイル形式が異なること。 Illumina Genome Analyzerのころに比べIllumina HiSeq2000はリード長が長くなっているものの、PacBioデータが確かに長いことを実データを眺めて確認。 NGSデータ取得は全体像(メタデータ情報)の理解が大事であること。ファイル形式とファイルサイズの違い。FASTQ形式の説明。 ENAは全体像の理解が容易であること、RのSRAdbパッケージを用いてデータセット中のFASTQファイルを一度にダウンロード可能なことなど。 ダウンロードしたファイルの同一性確認(MD5チェックサム)の重要性。クオリティコントロール(QC)の実行。 最新の総説や手法をもとに、どの手法が何ができて何ができないなどを様々な角度から検証。実験デザインによって前処理も様々であること。 前処理を行うRパッケージも沢山あるが、用いるパラメータに注意が必要であることをgirafeパッケージを用いたアダプター配列除去を例に紹介。 うまくいかない例。エラーへの対処法や様々な前処理の組み合わせテクニックなど。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, NAIST植物グローバル教育プロジェクト平成26年度ワークショップ, 奈良先端科学技術大学院大学(NAIST)(奈良), 2014.06.12
  • 内容:Rのインストールはどうにかできた程度の初級者中心の話。前半は、シロイヌナズナゲノムを例として染色体ごとのGC含量計算ができます、 原著論文と似た結果が得られますという話。Rコードの中身の説明、関数の使用法、パッケージの説明など。 後半は、実データの一通りの解析を概観。具体的には、SRAdbパッケージを用いたシロイヌナズナの2群間比較用RNA-seqデータ(GSE36469)のFASTQファイルダウンロード、 QuasRパッケージを用いたシロイヌナズナゲノムへのマッピングおよびカウントデータ取得、TCCパッケージを用いたサンプル間クラスタリングおよび発現変動解析まで。 スライド中のhogeフォルダの圧縮ファイルはhoge.zipです。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:機能ゲノム学, 東京大学(東京), 2014.06.04
  • 内容:教科書の4.2節プラスアルファ。 limmaパッケージを用いた2群間比較のコード内部の説明を通して、実験デザイン行列部分の記述形式に慣れさせる。 limmaを用いた複製あり3群間比較解析結果からの情報抽出。limmaでは複製なし3群間比較時にエラーが出ることを示し、統計的手法の原理(モデル構築の意味)をおさらい。 TCCパッケージ中のROKU法のような統計的手法以外の方法も利用。エントロピーが組織特異的発現パターン検出に利用可能なことなど。 機能解析の実体としてのGSEAを代表とする遺伝子セット解析の基本的な考え方、前処理(GMT形式ファイルの取得やID変換)、GSAパッケージを用いたパスウェイ解析。 最新情報としてPathviewパッケージでパスウェイマップを描画可能であることなど。分類や診断でも相関係数に基づく距離を利用可能であることなど。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:機能ゲノム学, 東京大学(東京), 2014.05.28
  • 内容:教科書の3.2節と4.2節周辺。2群間比較解析の話が中心。 パターンマッチング法の説明を通じて相関係数で発現変動遺伝子(Differentially Expressed Genes; DEGs)のランキングができますという話。apply関数の説明。 多重比較問題とfalse discovery rate (FDR)の説明。正規分布乱数データでt-testを行い、DEGが存在しない場合とDEGが存在する場合の違い。 limmaパッケージとIBMT法を利用したDEG検出。異なるDEG検出法や前処理法の利用でFDR閾値を満たすDEG数が大きく異なりうるため、DEG数の細かな違いは気にするな的な話。 M-A plotの作成も行い、limmaのような統計的検出法と2倍以上発現変動したものをDEGとみなすという倍率変化に基づく方法の違いも示し、 後者の危険性となぜ倍率変化でうまくいく場合があるのかについても同一群のM-A plotを眺めれば納得できることを示した。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:機能ゲノム学, 東京大学(東京), 2014.05.21
  • 内容:教科書の3.2節周辺。Affymetrixデータのダウンロードから前処理法(preprocessing)適用までを一気に行う発展的なやり方、 ウェブ上のテンプレートスクリプトをもとに複数の前処理法を一気に実行する手順。この手順を利用して、GSE2361, GSE7623, GSE30533のMAS5, RMA, RobLoxBioC前処理データをコピペで作成。 得られた遺伝子発現行列の列名は手作業ででも分かりやすいように変更しておくとよい。サンプル間クラスタリング、距離の定義、スケーリング、 クラスターの併合などの一般的な手順以外に、前処理法の違いでも結果は随分違うという話。GSE7623やGSE30533と酷似した図を簡単に作れます的な話。 同じGPL1355 (Affymetrix Rat Genome 230 2.0 Array)を用いて得られたGSE7623とGSE30533の二つのデータセットをマージしてクラスタリング。 GSE7623を外群として取り込むことで、GSE30533の2群間比較データ(鉄欠乏 対 コントロール)でうまくわかれていないように見えるのは、 2つの群間の発現パターンが酷似しているためであることがわかる、など。実験デザインの重要性(technical replicatesとbiological replicates)や、サンプル間クラスタリング結果とDEGの有無やDEG数との関連についても述べている。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:機能ゲノム学, 東京大学(東京), 2014.05.14
  • 内容:教科書の1.2節と2.2節周辺。マイクロアレイのイントロダクション。マイクロアレイとRNA-seqの対比。機能解析系が目的の場合にはマイクロアレイがお手軽なのでは、とか。 GEOとArrayExpressの発現データベースの概要説明。GSE、GPLとか。もっともよく利用されてきたのはAffymetrix GeneChipの3'発現アレイ。 GGRNAを利用して3'発現アレイの意味を示している。アレイデザインの最近の進展としてエクソンアレイやトランスクリプトームアレイも出ていることにも触れている。 GSE7623のプローブレベルデータのダウンロードをGEO経由とR経由で示している。プローブレベルデータから遺伝子発現行列を作成するためのMAS5やRMAなどの各種前処理法とその特徴。 グローバル正規化はRNA-seqのRPMと本質的に同じであること。入力として用いるサンプル数の増減によって、quantile正規化を内部的に用いるRMAなどは結果が変わることを確認。 結果が変わらないよりよい方法としてper-array basisのRMX (RobLoxBioC)の紹介および結果が変わらないことの確認までをやってもらった。 2コマ(2×90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:ゲノム情報解析基礎, 東京大学(東京), 2014.04.30
  • 内容:Rで塩基配列解析を行うための基本的なところ。例題としてシロイヌナズナゲノムのCpG出現頻度を解析し考察。 Rパッケージのインストール、エラーメッセージへの対処法、利用可能な関数の概観。 sequence logosを主な講義内容とし、エントロピー計算や、なぜエントロピーをそのまま利用せずに情報量に変換するかの意義。 subseq関数のオプションをうまく利用して効率的に目的のプロモーター配列領域を切り出して計算するやり方など。 課題4はプログラムの一部を任意に変更する基礎的な能力を問うもの。他の例題の中に回答が存在するので、それを効率的に見つける能力を見ている。 講義自体はスライド39までで、スライド40以降はうまくいかないこともあるという事例やRのバージョンの違いに気をつけろ的な話。「農学生命情報科学特論I」で改めて話す予定。 1コマ(90 min)分。

  • 門田幸二,「講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:ゲノム情報解析基礎, 東京大学(東京), 2014.04.23
  • 内容:Rで塩基配列解析を行うための基本的なところ。初心者が犯しがちなミス、プログラムの中身の説明、アノテーションファイルやmulti-FASTAファイルからの情報抽出、 意図的にエラーを出させてエラーへの対処能力向上、GC含量計算やそのプログラム内部の説明、ヒトゲノムのCpG出現頻度を解析するための連続塩基出現頻度解析、BSgenomeパッケージとか。 課題は、自分が解析したい入力ファイルの全体像を把握し、適切な列およびキーワードで効率よく情報収集するための練習問題レベルのものにしている。 Rがいかに簡単であるかをわかってもらうことに重点を置いている。ただし、ヘッダー行でひっかけを作っており、 目で見て明らかに回答がわかっている状況下でそれを正しく判断し適切なテンプレートプログラムを利用できるかを問うている。 また、課題2では、ゲノム配列にもバージョンがあるということを認識してもらう。 2コマ(2×90 min)分。

  • 門田幸二,「ウェブページ講義資料」, アグリバイオインフォマティクス教育研究プログラムの大学院講義科目:ゲノム情報解析基礎, 東京大学(東京), 2014.04.09
  • 内容:初心者向けバイオインフォマティクス全般およびゲノム情報解析系のイントロダクションの話。Rのイントロダクションやこのウェブページの簡単な使い方を含む。1コマ(90 min)分。

  • 門田幸二,「比較トランスクリプトーム解析とその周辺:モデル、正規化、発現変動検出など」, よく分かる次世代シークエンサー解析 ワークショップ, 九州大学(福岡), 2014.03.19
  • 内容:初心者向けRNA-seqの話。主にカウントデータ取得以降の話。シリーズ最終日の統計部分担当ということで、 「パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)」の実データ解析をメインにしつつ、 実際のDEG同定結果の発現データとM-A plot上の位置の対応関係を徹底的に示して、解析結果の正しい解釈や理解を導くような構成にしている。 多重比較とFDRの話も実データ解析結果と対応づけている。 FDR閾値を変化させたときのM-A plot上での見栄えの違いのイメージを示しつつ、2倍以上発現変動などの倍率変化で解析を行うことが危険だということが感覚的にわかるように、 同一グループ内の複製実験データのM-A plotを示している。統計的手法の感覚についても。「データの正規化は何のためか?」という初歩的な疑問に対する回答もこの中で述べている。 TCCを用いた発現変動解析の利用法を例として、このウェブページのオプションの意味についてのかなり詳細かつ丁寧な説明を含む。平均-分散プロットは時間の関係上省略している。

  • 門田幸二,「Rでゲノム・トランスクリプトーム解析」, HPCI チュートリアル・バイオインフォマティクス実習コース, 生命情報工学研究センター(東京), 2014.03.07
  • 内容:主にNGS解析の話。Rでmulti-FASTAファイルを自在に解析するやり方として、ヒトゲノム中のCpG出現確率が低いことを確かめる解析などを示しています。 主要な生物種のゲノムはRパッケージとして提供されていること。トランスクリプトーム発現解析時の注意点として、サンプル内比較とサンプル間比較の違いを述べています。 RPKMなどの話は少しだけで、基本的に比較トランスクリプトーム解析系の話。QuasRパッケージを用いたマッピング実習。 内部的に用いるbowtieのマッピングオプションを変えて挙動確認。カウントデータとは?サンプル間クラスタリング時の低発現遺伝子または転写物のフィルタリングの重要性およびその実演。 M-A plotの解釈やTCCパッケージのゼロカウント対策。理想的な実験デザイン。M-A plotでのtechnical replicatesとbiological replicatesデータの見栄えの違い。 分布やモデルというのは、同一グループに属する複製実験データの分布のこと。その分布を眺めれば2倍以上発現変動したものをDEGと判定することの危険性がわかる。 ばらつきを見積もるより直接的な指標は、log比に相当するM-A plotのM値ではなく分散。それゆえ平均-分散プロットがよく利用される。 TCCを用いたDEG同定結果と平均-分散プロット上でのDEGの位置づけ。多重比較問題とFDR。

  • 門田幸二,「トランスクリプトーム解析の現況2013(詳細版)」, 東京大学大学院農学生命科学研究科第123回アグリバイオインフォマティクスセミナー, 東京大学(東京), 2013.11.01
  • 内容:アレイ正規化の最近の話、重みつき平均の話。「パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)」の話。 SonesonらのRNA-seq手法比較論文中でいいと結論づけられたSAMseq法よりもTCCのほうが精度が高い実例。 「パイプライン | ゲノム | small RNA | SRP016842(Nie_2013)」の話で、カイコsmall RNAデータの解析実演。アダプター配列除去やカイコゲノムへのマッピングなど。

  • 門田幸二,「トランスクリプトーム解析の現況:マイクロアレイ vs. RNA-seq」, 生命医薬情報学連合大会 「オミックス・計算 そして創薬」オミックス解析における実務者意見交換会, タワーホール船堀(東京), 2013.10.30
  • 内容:主にマイクロアレイの話。RNA-seqのほうがマイクロアレイよりもダイナミックレンジが広いといっているが、 アレイのほうもラングミュアの吸脱着モデル、非特異的結合、4G signatureなどの理解が進んでその対策などもとられています、という話。 RMAのmulti-arrayベースの方法の問題点として、サンプル数の増減による影響を受けることや、3'発現解析用アレイ以降もトランスクリプトームアレイが出現していますよ、という話。

過去のお知らせ

  • バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | 速習コース。9/3-4の服部先生の講義資料が9/8に、9/11の河岡先生の講義資料が9/18にアップデートされました。 アンケートを提出していない人は早めにお願いします。(2014/09/20)
  • バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | 速習コースで利用する計算機環境構築する一通りの手順を公開しました。(2014/08/11)
  • 2014年9月1日~12日に「バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ)速習コース」を開催します。 受講申込は締め切りました。(2014/08/01)
  • 入出力のファイル名について、FASTA形式ファイルの拡張子は.fasta、FASTQ形式ファイルの拡張子は.fastqに変更する作業がほぼ完了しております。(2014/07/17)
  • マップ後 | 配列長とカウント数の関係のところで、 boxplotでの描画の際にparam個で分割(20分割など)するテクニックとして「floor(nrow(data)/param)+1」としていましたが、 これだと割り切れる場合でも+1してしまうことが判明したため「ceiling(nrow(data)/param)」に修正しました(佐伯亘平氏提供情報)。(2014/07/03)
  • 2014年07月22日にイルミナウェビナーで話します。興味ある方はどうぞ。(2014/06/30)
  • 2014年9月1日~12日に「バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ)速習コース」を東大農で開催します。 受講申込は6/24夕方に締め切りましたが、TA申込み枠はまだ若干余裕があります。 TA申込みが全日程受講申込締め切り後の6/24から7/3朝までできない状態になっていたようで失礼しましたm(_ _)m。7/4の10:00ごろに復旧しております。(2014/07/04)
  • writeFastq関数のデフォルトがgzip圧縮(孫建強氏提供情報)であることが分かったので関連項目を修正しました。 これに関連して、FASTA形式ファイルの拡張子は.fasta、FASTQ形式ファイルの拡張子は.fastqに順次変更していきます。(2014/06/15)
  • 2014年06月12日にNAIST植物グローバル教育プロジェクト・平成26年度ワークショップ「ImageJ+Rハンズオン実習2014」 が開催されます。特に門田の部分を受講したい方は2014年4月22日に作成したより詳細なインストール手順(Windows版)を参考にしてインストールしておいてください。 Mac版のインストール手順(by 孫建強氏)もあります。 Macのヒトの注意点は、「Mac OS X のバージョンに関わらず R-3.1.0-snowleopard.pkg をインストールしたほうがよい」です。 また、実習用データ(hoge.zip; 約40MB)もダウンロードしておいてください。(2014/05/14)
  • 機能解析の遺伝子オントロジー(GO)解析とパスウェイ(Pathway)解析周辺を更新し、SeqGSEAパッケージを用いた解析のみですが一通りできるようにしました。(2014/03/30)
  • 私の所属するアグリバイオインフォマティクス教育研究プログラムでは、平成26年度も(東大生に限らず)バイオインフォ関連講義を行います。 4/9に私の第一回目の講義がありましたが、過去最高の123名の出席がありました。例年東大以外の企業の方、研究員、学生が二割程度は受講しております。 このウェブページと直接関連する講義は「ゲノム情報解析基礎」と 「農学生命情報科学特論I」ですが、背景理論の説明などは「機能ゲノム学」でも行います。 興味ある科目のみの受講も可能ですので、お気軽にどうぞ。(2014/04/10)
  • 一連の解析パイプライン(RNA-seqデータ取得 -> マッピング -> カウントデータやRPKMデータ取得 -> サンプル間クラスタリングや発現変動解析およびM-A plot描画まで)のクラスタリング部分をアップデートしました。項目名の一番下のほうです。(2014/02/26)
  • 2014年3月17-19日に九州大学にて、ワークショップ(よく分かる次世代シークエンサー解析 ~最先端トランスクリプトーム解析~)が開催されます。 私は3日目(3/19, 13:00-16:30)を担当します。興味ある方はどうぞ。締切は確か2/21です。(2014/02/17)
  • 項目名の整理を行っています。3C (Hi-C)やBS-seq周辺についても少し言及してあります。(2014/02/08)
  • 発現変動解析用RパッケージTCC (ver. 1.2.0; Sun et al., BMC Bioinformatics, 2013)がBioconductorよりリリースされました。 最新版を利用したい方は、R (ver. 3.0.2)をインストールしたのち、Bioconductor (ver. 2.13)をインストールしてください。(2013/10/17)
  • どのブラウザからでもエラーなく見られる(W3C validation)ように((Rで)マイクロアレイデータ解析も含めて)リニューアルしました。(2013/07/30)
  • 2013年7月29日まで公開していた以前の「(Rで)塩基配列解析」のウェブページや関連ファイルはRdeennki.zipからダウンロード可能です(110MB程度)。(2013/07/30)
  • 平成26年3月7日に東京お台場にて、HPCIチュートリアルの一部としてRでゲノム・トランスクリプトーム解析を行います。情報はかなりアップデート予定ですが、既にキャンセル待ちなようですいませんm(_ _)m(2013/11/25)
  • 2013年6月6日に開催されたNAIST植物グローバル教育プロジェクト・平成25年度ワークショップ のときに利用した、R(ver. 3.0.1)とTCC(ver. 1.1.99)などのインストール方法はこちら(Windows用のみ;hoge.zipはおまけ)です。
  • 平成25年6月27日、7月3, 4日にこのウェブページ関連の実習を含む講義(農学生命情報科学特論I)を行います。 東大生以外の外部の方も受講可能です。詳しくは事務局までお問い合わせください。(2013/06/08)
  • 廃止予定の関数名(read.DNAStringSet -> readDNAStringSetなど)や「前処理 | 正規化...」周辺の項目名の変更をしました。(2013/01/16)
  • htmlのタグに問題があるらしくfirefoxでエラーという指摘をTbT論文共著者の西山さんから受けましたのでその周辺を修正しました。(2012/11/15)
  • R2.15.2がリリースされていたのでこれに変更しました。(2012/11/15)
  • 若干項目名を(あまりにも場違いだったものを)変更しました、直接リンクを張ってたかた、すいませんm(_ _)m。(2012/07/12)

Rのインストールと起動

基本的にはこちらまたはこちらをご覧ください。

2014年7月31日にアップデートしたWindows用のインストール手順はこちら。 2014年5月14日にアップデートしたMac版のインストール手順こちら(by 孫建強氏)もあります。 注意点は、「Mac OS X のバージョンに関わらず R-3.1.0-snowleopard.pkg をインストールしたほうがよい」です。 また、MacintoshのヒトはChIPXpressDataのところでこけることが多いようです(小杉 孝嗣氏提供情報)。

1. Windows release版のインストールの場合:

  1. Rのインストーラを「実行」
  2. 聞かれるがままに「次へ」などを押してとにかくインストールを完了させる
  3. Windows Vistaの人は(パッケージのインストール中に書き込み権限に関するエラーが出るのを避けるために)「コントロールパネル」−「ユーザーアカウント」−「ユーザーアカウント制御の有効化または無効化」で、「ユーザーアカウント制御(UAC)を使ってコンピュータの保護に役立たせる」のチェックをあらかじめ外しておくことを強くお勧めします。
  4. インストールが無事完了したら、デスクトップに出現する「R3.X.Y (32 bitの場合; XYの数値はバージョンによって異なります)」または「R x64 3.X.Y (64 bitの場合)」アイコンをダブルクリックして起動
  5. 以下を、「R コンソール画面上」でコピー&ペーストする。10GB程度のディスク容量を要しますが一番お手軽です。(どこからダウンロードするか?と聞かれるので、その場合は自分のいる場所から近いサイトを指定)
    install.packages(available.packages()[,1], dependencies=TRUE)#CRAN中にある全てのパッケージをインストール
    source("http://www.bioconductor.org/biocLite.R")#おまじない
    biocLite(all_group())                  #Bioconductor中にある全てのパッケージをインストール
    biocLite("BSgenome.Athaliana.TAIR.TAIR9", suppressUpdates=TRUE)#Bioconductor中にあるBSgenome.Athaliana.TAIR.TAIR9パッケージをインストール
    		
  6. 「コントロールパネル」−「デスクトップのカスタマイズ」−「フォルダオプション」−「表示(タブ)」−「詳細設定」のところで、「登録されている拡張子は表示しない」のチェックを外してください。

2. Macintoshのインストールの場合:

特にChIPXpressDataのところでこけたヒト用です。 このパッケージがインストールされないようにするやり方です(孫建強氏 作)。

  1. http://cran.r-project.org/bin/macosx/の「R-3.X.Y-snowleopard.pkg」をクリック。 (XY中の数値はバージョンによって異なります)
  2. ダウンロードしたファイルをダブルクリックして、聞かれるがままに「次へ」などを押してとにかくインストールを完了させる
  3. インストールが無事完了したら、Finderを起動して、左のメニューの「アプリケーション」をクリックし、Rのアイコンをダブルクリックして起動
  4. 以下を、「R コンソール画面上」でコピー&ペーストする。10GB程度のディスク容量を要しますが一番お手軽です。(どこからダウンロードするか?と聞かれるので、その場合は自分のいる場所から近いサイトを指定)
    param <- "ChIPXpressData"              #エラーの原因となっているパッケージ名を指定
    
    #install.packages(available.packages()[,1], dependencies=TRUE)#CRAN中にある全てのパッケージをインストール
    
    x <- c("UNINSTALLED_PKG_NAME")         #インストールされなかったパッケージ名をxに格納
    source("http://www.bioconductor.org/biocLite.R")#おまじない
    pkg <- all_group()                     #Bioconductor中にある全てのパッケージ名をpkgに格納
    pkg <- pkg[pkg != param]               #paramで指定したパッケージを除去した結果をpkgに格納
    for (i in pkg){                        #pkgの要素数分だけループを回す
      e <- try(biocLite(i, suppressUpdates=TRUE))#パッケージをインストール
      if(class(e) == "try-error") x <- c(x, i)#インストールに失敗したパッケージ情報をxにどんどん追加
    }
    biocLite("BSgenome.Athaliana.TAIR.TAIR9", suppressUpdates=TRUE)#Bioconductor中にあるBSgenome.Athaliana.TAIR.TAIR9パッケージをインストール
    		

3. Windows devel版(R-devel)のインストールの場合(advanced userのみ):

孫建強氏作のネットワークが不安定な場合でも一つずつ確実にインストールしていくやり方だが、非常に遅いことが判明したので非推奨になりました。

  1. Rのインストーラを「実行」
  2. 聞かれるがままに「次へ」などを押してとにかくインストールを完了させる
  3. R-develを起動し、以下を、「R コンソール画面上」でコピー&ペーストする。
    #CRAN中にある全パッケージをインストール
    x <- c("UNINSTALLED_PKG_NAME")         #インストールされなかったパッケージ名をxに格納
    available <- available.packages()      #利用可能なパッケージ名をavailableに格納
    installed <- installed.packages()      #インストールされているパッケージ名をinstalledに格納
    for (i in available[,1]){              #availableの要素数分だけループを回す
      idx <- grep(paste("^", i, "$", sep=""), installed[, 1])#available中のパッケージ名iがinstalled中にあるかどうかを判定
      if(length(idx) > 0) {                #available中のパッケージ名がinstalled中にあるかどうかを判定(あればTRUE)
        if(installed[idx,3] == available[i,2]){#バージョンも同じかどうかを判定(同じならTRUE)
          next                             #nextは、次のパッケージ名へ、という意味
        }
      }
      e <- try(install.packages(i, dependencies=TRUE))#まだインストールされていないか、インストールされていても古いバージョンのパッケージをインストール
      if(class(e) == "try-error") x <- c(x, i)#インストールに失敗したパッケージ情報をxにどんどん追加
    }
    uninstalled_cran <- x                  #インストールに失敗したパッケージ情報をuninstalled_cranに格納
    
    #Bioconductor中にある全パッケージをインストール
    x <- c("UNINSTALLED_PKG_NAME")         #インストールされなかったパッケージ名をxに格納
    source("http://www.bioconductor.org/biocLite.R")#おまじない
    for (i in all_group()){                #all_group()でみられる要素数分だけループを回す
      e <- try(biocLite(i, suppressUpdates=TRUE))#パッケージiをインストール
      if(class(e) == "try-error") x <- c(x, i)#インストールに失敗したパッケージ情報をxにどんどん追加
    }
    uninstalled_bioc <- x                  #インストールに失敗したパッケージ情報をuninstalled_biocに格納
    		

基本的な利用法

Rのインストールと起動を参考にして必要なパッケージのインストールが完了済みのヒトを対象として、 R Gui画面や作業ディレクトリの変更、このウェブページの基本的な利用法を簡単に解説したPDFファイル を作成しました。2014年10月4日の中級者向けバイオインフォマティクス入門講習会@仙台国際センター(10:50-12:20) 受講希望者は、このPDFファイルおよび シリーズ Useful R 第7巻 トランスクリプトーム解析を参考にして、 このウェブページの基本的な利用法をマスターしておいてください。

サンプルデータ

  1. Illumina/36bp/single-end/human (SRA000299) data (Marioni et al., Genome Res., 2008)
  2. 「Kidney 7 samples vs Liver 7 samples」のRNA-seqの遺伝子発現行列データ(SupplementaryTable2.txt)です。 サンプルは二つの濃度(1.5 pM and 3 pM)でシーケンスされており、「3 pMのものが5 samples vs. 5 samples」、「1.5 pMのものが2 samples vs. 2 samples」という構成です。 SupplementaryTable2.txtをエクセルで開くと、7列目以降に発現データがあることがわかります。詳細な情報は以下の通りです(原著論文中のFigure 1からもわかります):

    7列目:R1L1Kidney (3 pM)
    8列目:R1L2Liver (3 pM)
    9列目:R1L3Kidney (3 pM)
    10列目:R1L4Liver (3 pM)
    11列目:R1L6Liver (3 pM)
    12列目:R1L7Kidney (3 pM)
    13列目:R1L8Liver (3 pM)
    14列目:R2L1Liver (1.5 pM)
    15列目:R2L2Kidney (3 pM)
    16列目:R2L3Liver (3 pM)
    17列目:R2L4Kidney (1.5 pM)
    18列目:R2L6Kidney (3 pM)
    19列目:R2L7Liver (1.5 pM)
    20列目:R2L8Kidney (1.5 pM)
    
  3. Illumina/36bp/single-end/human (SRA000299) data (Marioni et al., Genome Res., 2008)
  4. Supplementary table 2のデータを取り扱いやすく加工したデータです。 オリジナルのものは最初の6列が発現データ以外のものだったり、7列目以降も二種類のサンプルが交互に出てくるなど若干R上で表現しずらかったため、以下のようにわかりやすくしたものです。 つまり、サンプルを3pMのものだけにして、「1列目:Genename, 2-6列目:Kidney群, 7-11列目:Liver群」と変更したSupplementaryTable2_changed.txtです:

    2列目:R1L1Kidney (3 pM)
    3列目:R1L3Kidney (3 pM)
    4列目:R1L7Kidney (3 pM)
    5列目:R2L2Kidney (3 pM)
    6列目:R2L6Kidney (3 pM)
    7列目:R1L2Liver (3 pM)
    8列目:R1L4Liver (3 pM)
    9列目:R1L6Liver (3 pM)
    10列目:R1L8Liver (3 pM)
    11列目:R2L3Liver (3 pM)
    
  5. Illumina/36bp/single-end/human (SRA000299) data (Marioni et al., Genome Res., 2008)
  6. 上記SupplementaryTable2_changed.txtをさらに加工したデータ。 NGSデータは(マイクロアレイの黎明期と同じく)金がかかりますので(technical and/or biological) replicatesを簡単には増やせませんので、「1サンプル vs. 1サンプル」比較の局面がまだまだあろうかと思います。 そこで、上記ファイルの2-6列目と7-11列目をそれぞれまとめた(総和をとった)ものSupplementaryTable2_changed2.txtです。

  7. カウントデータ(SupplementaryTable2_changed.txt)と長さ情報ファイル(ens_gene_46_length.txt)を読み込んで、以下を実行して、「配列長情報を含み、カウント数の和が0より大きい行のみ抽出した結果」です。カウントデータファイル(data_marioni.txt)と配列長情報ファイル(length_marioni.txt)。
    in_f1 <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_f1に格納(カウントーデータファイル)
    in_f2 <- "ens_gene_46_length.txt"      #入力ファイル名を指定してin_f2に格納(長さ情報ファイル)
    out_f1 <- "data_marioni.txt"           #出力ファイル名を指定してout_f1に格納
    out_f2 <- "length_marioni.txt"         #出力ファイル名を指定してout_f2に格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    len <- read.table(in_f2, header=TRUE, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    
    #本番(共通IDのもののみ抽出)
    rownames(len) <- len[,1]               #行の名前としてIDを与えている
    common <- intersect(rownames(len), rownames(data))#共通IDをcommonに格納
    data <- data[common,]                  #共通IDのもののみ抽出
    len <- len[common,]                    #共通IDのもののみ抽出
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    head(data)                             #確認してるだけです
    head(len)                              #確認してるだけです
    
    #本番(ゼロカウントデータのフィルタリング)
    obj <- (rowSums(data) > 0)             #条件を満たすかどうかを判定した結果をobjに格納
    data <- data[obj,]                     #objがTRUEとなる要素のみ抽出した結果をdataに格納
    len <- len[obj,]                       #objがTRUEとなる要素のみ抽出した結果をlenに格納
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    head(data)                             #確認してるだけです
    head(len)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    write.table(len, out_f2, sep="\t", append=F, quote=F, row.names=F)#lenの中身を指定したファイル名で保存
    	
  8. ABI_SOLiD/25-35bp/single-end/mouse (SRA000306; EB vs. ES) data (Cloonan et al., Nat Methods, 2008)
  9. Illumina/50bp/paired-end/mouse (SRA012213; liver) data (Robertson et al., Nat Methods, 2010)
  10. Illumina/35bp/single-end/human (SRA010153; MAQC) data (Bullard et al., BMC Bioinformatics, 2010)
  11. SRR037439から得られるFASTQファイルの最初の2000行分を抽出したMAQC2 brainデータ:SRR037439.fastq

  12. NBPSeqパッケージ(Di et al., SAGMB, 10:art24, 2011)中の ArabidopsisのBiological replicatesデータ(G1群3サンプル vs. G2群3サンプル; Cumbie et al., PLoS One, 2011)です。
  13. 26,221 genes×6 samplesの「複製あり」タグカウントデータ(data_arab.txt)

    オリジナルは"AT4G32850"というIDのものが重複して存在していたため、19520行目のデータを除去してタブ区切りテキストファイルにしています。

  14. ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011)
  15. マッピング済みの遺伝子発現行列形式のデータセットを多数提供しています。

  16. Yeastの二群間比較用データ(2 mutant strains vs. 2 wild-types; technical replicates)
  17. 7065行 × 4列のyeast RNA-seqデータ(data_yeast_7065.txt)

    R Console画面上で「library(yeastRNASeq)」と打ち込んでエラーが出る場合は、a.をコピペで実行してパッケージをインストールしましょう。 このパッケージ中には他に、fastq形式ファイル(500,000 reads)と、bowtieでマッピング(unique mapping and allowing up to two mismatches)したBowtie形式ファイルがそれぞれ4ファイルずつあります。

    a. yeastRNASeqパッケージのインストール:

    source("http://www.bioconductor.org/biocLite.R")#おまじない
    biocLite("yeastRNASeq")                #yeastRNASeqパッケージのインストール
    	

    b. yeastRNASeqパッケージがインストールされていれば以下のコピペでも取得可能:

    library(yeastRNASeq)                   #パッケージの読み込み
    data(geneLevelData)                    #yeastRNASeqパッケージ中で提供されているデータをロード
    dim(geneLevelData)                     #行数と列数を表示
    head(geneLevelData)                    #最初の数行を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(geneLevelData), geneLevelData)#geneLevelDataの「rownames情報(i.e., 遺伝子名)」と「カウントデータ」の行列を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_yeast_7065.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  18. 上記Yeastの二群間比較用データを用いてGC-content normalizationなどを行う場合に必要な情報
    yeast genes (SGD ver. r64)のGC含量(yeastGC_6717.txt)やlength情報(yeastLength_6717.txt)。
    R Console画面上で「library(EDASeq)」と打ち込んでエラーが出る場合は、a.をコピペで実行してパッケージをインストールしましょう。

    a. EDASeqパッケージのインストール:

    source("http://www.bioconductor.org/biocLite.R")#おまじない
    biocLite("EDASeq")                     #EDASeqパッケージのインストール
    	

    b. EDASeqパッケージがインストールされていれば以下のコピペでも取得可能:

    library(EDASeq)                        #パッケージの読み込み
    data(yeastGC)                          #yeastRNASeqパッケージ中で提供されているyeastのGC含量情報をロード
    length(yeastGC)                        #要素数を表示
    head(yeastGC)                          #最初の数個を表示
    
    data(yeastLength)                      #yeastRNASeqパッケージ中で提供されているyeastの配列長情報をロード
    length(yeastLength)                    #要素数を表示
    head(yeastLength)                      #最初の数個を表示
    
    #それぞれ別々のファイルに保存
    tmp <- cbind(names(yeastGC), yeastGC)  #yeastGCの「names属性情報」と「GC含量」のベクトルを列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastGC_6717.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(names(yeastLength), yeastLength)#yeastLengthの「names属性情報」と「配列長」のベクトルを列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastLength_6717.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  19. 「10.」と「11.」のファイルをもとに共通遺伝子(6685個)のみからなるのサブセットにしたファイル:
    (data_yeast_common_6685.txt; yeastGC_common_6685.txt; yeastLength_common_6685.txt)
    以下のコピペでも上記ファイルを得ることができます。
    #必要なパッケージをロード
    library(yeastRNASeq)                   #パッケージの読み込み
    library(EDASeq)                        #パッケージの読み込み
    
    #count dataやGC含量情報(SGD ver. r64)の読み込みとラベル情報の作成
    data(geneLevelData)                    #yeastRNASeqパッケージ中で提供されているカウントデータ(geneLevelData)をロード
    data(yeastGC)                          #EDASeqパッケージ中で提供されているyeastのGC含量情報(yeastGC)をロード
    data(yeastLength)                      #EDASeqパッケージ中で提供されているyeastの配列長情報(yeastLength)をロード
    
    #カウントデータ情報(geneLevelData)とGC含量情報(yeastGC)から共通して存在するサブセットを(同じ遺伝子名の並びで)取得
    common <- intersect(rownames(geneLevelData), names(yeastGC))#yeastRNASeqパッケージ中で提供されているデータをロード
    data <- as.data.frame(geneLevelData[common, ])#6685個の共通遺伝子分のカウントデータ行列をデータフレーム形式でdataに格納
    GC <- data.frame(GC = yeastGC[common]) #6685個の共通遺伝子分のGC含量ベクトルをデータフレーム形式でGCに格納
    length <- data.frame(Length = yeastLength[common])#6685個の共通遺伝子分の配列長ベクトルをデータフレーム形式でlengthに格納
    head(rownames(data))                   #行列dataの行名(rownames)情報の最初の数個を表示
    head(rownames(GC))                     #行列GCの行名(rownames)情報の最初の数個を表示
    head(rownames(length))                 #行列lengthの行名(rownames)情報の最初の数個を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「カウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_yeast_common_6685.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(GC), GC)         #「rownames情報」と「GC含量情報」を列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastGC_common_6685.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(length), length) #「rownames情報」と「配列長情報」を列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastLength_common_6685.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  20. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。
    10,000 genes×6 samplesの「複製あり」タグカウントデータ(data_hypodata_3vs3.txt)
    「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3」の計6サンプル分からなります。
    全10,000遺伝子中の最初の2,000個(gene_1〜gene_2000まで)が発現変動遺伝子(DEG)です。
    全2,000 DEGsの内訳:最初の90%分(gene_1〜gene_1800)がG1群で4倍高発現、残りの10%分(gene_1801〜gene_2000)がG2群で4倍高発現
    以下のコピペでも(数値は違ってきますが)同じ条件のシミュレーションデータを作成可能です。:
    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.2,#シミュレーションデータの作成
                 DEG.assign = c(0.9, 0.1), #シミュレーションデータの作成
                 DEG.foldchange = c(4, 4), #シミュレーションデータの作成
                 replicates = c(3, 3))     #シミュレーションデータの作成
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#「rownames情報」と「カウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_hypodata_3vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  21. 上記のTCCパッケージ中のBiological replicatesを模倣した 「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3」の計6サンプルからなるシミュレーションデータから、1列目と4列目のデータを抽出した「複製なし」タグカウントデータ(data_hypodata_1vs1.txt)
    よって、「G1_rep1, G2_rep1」の計2サンプル分のみからなります。
    以下のコピペでも(数値は違ってきますが)同じ条件のシミュレーションデータを作成可能です。:
    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.2,#シミュレーションデータの作成
                 DEG.assign = c(0.9, 0.1), #シミュレーションデータの作成
                 DEG.foldchange = c(4, 4), #シミュレーションデータの作成
                 replicates = c(1, 1))     #シミュレーションデータの作成
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#「rownames情報」と「カウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_hypodata_1vs1.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  22. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 10,000 genes×9 samplesの「複製あり」タグカウントデータ(data_hypodata_3vs3vs3.txt) 「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3, G3_rep1, G3_rep2, G3_rep3」の計9サンプル分からなります。 全10,000遺伝子中の最初の3,000個(gene_1〜gene_3000まで)が発現変動遺伝子(DEG)です。 全3,000 DEGsの内訳:(1)最初の70%分(gene_1〜gene_2100)がG1群で3倍高発現、(2)次の20%分(gene_2101〜gene_2700)がG2群で10倍高発現、(3)残りの10%分(gene_2701〜gene_3000)がG3群で6倍高発現 以下のコピペでも取得可能です。

    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(3, 3, 3))  #各群のサンプル数を指定
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#「rownames情報」と「カウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_hypodata_3vs3vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  23. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 10,000 genes×9 samplesの「複製あり」タグカウントデータ(data_hypodata_2vs4vs3.txt) 「G1_rep1, G1_rep2, G2_rep1, G2_rep2, G2_rep3, G2_rep4, G3_rep1, G3_rep2, G3_rep3」の計9サンプル分からなります。 全10,000遺伝子中の最初の3,000個(gene_1〜gene_3000まで)が発現変動遺伝子(DEG)です。 全3,000 DEGsの内訳:(1)最初の70%分(gene_1〜gene_2100)がG1群で3倍高発現、(2)次の20%分(gene_2101〜gene_2700)がG2群で10倍高発現、(3)残りの10%分(gene_2701〜gene_3000)がG3群で6倍高発現 以下のコピペでも取得可能です。

    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(2, 4, 3))  #各群のサンプル数を指定
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#「rownames情報」と「カウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_hypodata_2vs4vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  24. Illumina/35bp/single-end/human (SRA000299; kidney vs. liver) data (Marioni et al., Genome Res., 2008)
  25. ランダムな塩基配列から生成したリファレンスゲノム配列データ(ref_genome.fa)。 48, 160, 100, 123, 100 bpの配列長をもつ、計5つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。塩基の存在比はAが28%, Cが22%, Gが26%, Tが24%にしています。 set.seed関数を利用し、chr3の配列と同じものをchr5としてコピーして作成したのち、2番目と7番目の塩基置換を行っています。 そのため、実際に指定するのは最初の4つ分の配列長のみです。

    out_f <- "ref_genome.fa"               #出力ファイル名を指定してout_fに格納
    param_len_ref <- c(48, 160, 100, 123)  #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(28, 22, 26, 24) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "chr"                    #FASTA形式ファイルのdescription行に記述する内容
    param4 <- 3                            #コピーを作成したい配列番号を指定
    param5 <- c(2, 7)                      #コピー先配列の塩基置換したい位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #塩基置換関数の作成
    enkichikan <- function(fa, p) {        #関数名や引数の作成
      t <- substring(fa, p, p)             #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(fa, p, p) <- t_c           #置換
      return(fa)                           #置換後のデータを返す
    }
    
    #本番(配列生成)
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #本番(param4で指定した配列をchr5としてコピーし、param5で指定した位置の塩基をそれぞれ置換)
    hoge <- c(hoge, hoge[param4])          #param4で指定した配列を追加している
    hoge[length(param_len_ref)+1] <- enkichikan(hoge[length(param_len_ref)+1], param5[1])#塩基置換
    hoge[length(param_len_ref)+1] <- enkichikan(hoge[length(param_len_ref)+1], param5[2])#塩基置換
    
    #本番(DNAStringSet形式に変換)
    fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- paste(param_desc, 1:length(hoge), sep="")#description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  26. 上記リファレンスゲノム配列データ(ref_genome.fa)に対してbasic alignerでマッピングする際の動作確認用RNA-seqデータ (sample_RNAseq1.fa)とそのgzip圧縮ファイル(sample_RNAseq1.fa.gz)。 リファレンス配列を読み込んで、list_sub3.txtで与えた部分配列を抽出したものです。 どこに置換を入れているかがわかっているので、basic alignerで許容するミスマッチ数を変えてマップされる or されないの確認ができます。 DNAStringSetオブジェクトを入力として塩基置換を行うDNAString_chartr関数を用いて、最後のリードのみ4番目の塩基にミスマッチを入れています。

    in_f1 <- "ref_genome.fa"               #入力ファイル名(multi-FASTAファイル)を指定してin_f1に格納
    in_f2 <- "list_sub3.txt"               #入力ファイル名(リストファイル)を指定してin_f2に格納
    out_f <- "sample_RNAseq1.fa"           #出力ファイル名を指定してout_fに格納
    param <- 4                             #塩基置換したい位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #塩基置換関数の作成
    DNAString_chartr <- function(fa, p) {  #関数名や引数の作成
      str_list <- as.character(fa)         #文字列に変更
      t <- substring(str_list, p, p)       #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(str_list, p, p) <- t_c     #置換
      fa_r <- DNAStringSet(str_list)       #DNAStringSetオブジェクトに戻す
      names(fa_r) <- names(fa)             #description部分の情報を追加
      return(fa_r)                         #置換後のデータを返す
    }
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #後処理(最後のリードのparam番目の塩基に置換を入れている)
    fasta[nrow(posi)] <- DNAString_chartr(fasta[nrow(posi)], param)#指定した位置の塩基置換を実行した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分の作成)
    description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  27. 上記リファレンスゲノム配列データ(ref_genome.fa)に対してbasic alignerでマッピングする際の動作確認用RNA-seqデータ(sample_RNAseq2.fa)とそのgzip圧縮ファイル(sample_RNAseq2.fa.gz)。

    リファレンス配列を読み込んで、list_sub4.txtで与えた部分配列を抽出したものです。 基本的にジャンクションリードがbasic alignerでマップされず、splice-aware alignerでマップされることを示すために作成したものです。

    in_f1 <- "ref_genome.fa"               #入力ファイル名(multi-FASTAファイル)を指定してin_f1に格納
    in_f2 <- "list_sub4.txt"               #入力ファイル名(リストファイル)を指定してin_f2に格納
    out_f <- "sample_RNAseq2.fa"           #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #塩基配列用プレースホルダhogeを作成
    hoge_d <- NULL                         #description用プレースホルダhoge_dを作成
    for(i in 1:nrow(posi)){                #nrow(posi)回だけループを回す
      uge <- NULL                          #ugeを初期化
      for(j in 1:(length(posi[i,])/3)){    #ncol(posi)/3回だけループを回す
        obj <- names(fasta)==posi[i,3*(j-1)+1]#条件を満たすかどうかを判定した結果をobjに格納
        uge <- paste(uge, subseq(fasta[obj],  #subseq関数を用いてobjがTRUEとなるもののみに対して、
                      start=posi[i,3*(j-1)+2],#「3*(j-1)+2」列目で指定したstart位置から、
                       end=posi[i,3*(j-1)+3]),#「3*(j-1)+3」列目で指定したend位置で与えた範囲の部分配列を取得し
                       sep="")                #それをugeに連結
      }
      hoge <- append(hoge, uge)            #hogeにugeを連結
      
      uge_d <- as.character(posi[i,1])     #uge_dの初期値を与えている
      for(j in 2:(length(posi[i,]))){      #length(posi[i,])回数分だけループを回す
        uge_d <- paste(uge_d, as.character(posi[i,j]), sep="_")#description情報の作成
      }
      hoge_d <- append(hoge_d, uge_d)      #hoge_dにuge_dを連結
    }
    
    #後処理(DNAStringSet形式に変換)
    fasta <- DNAStringSet(hoge)            #行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- hoge_d                 #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  28. GTF (General Transfer Format)形式のヒトサンプルファイル(human_annotation_sub.gtf)です。

    EnsemblのFTPサイトから得たヒトの遺伝子アノテーションファイル("Homo_sapiens.GRCh37.73.gtf.gz")を ここからダウンロードして得て解凍("Homo_sapiens.GRCh37.73.gtf")したのち、 (解凍後のファイルサイズは500MB、2,268,089行×9列のファイルなので)以下のコピペで、ランダムに50,000行分を非復元抽出して得たファイルです。

    in_f <- "Homo_sapiens.GRCh37.73.gtf"   #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
    out_f <- "human_annotation_sub.gtf"    #出力ファイル名を指定してout_fに格納
    param <- 50000                         #(入力ファイルの行数以下の)得たい行数を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    hoge <- sample(1:nrow(data), param, replace=F)#入力ファイルの行数からparamで指定した数だけ非復元抽出した結果をhogeに格納
    out <- data[sort(hoge),]               #hogeで指定した行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	
  29. GTF (General Transfer Format)形式のヒトサンプルファイル(human_annotation_sub2.gtf)です。

    GTFファイル(human_annotation_sub.gtf)の各行の左端に"chr"を挿入したファイルです。

    in_f <- "human_annotation_sub.gtf"     #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
    out_f <- "human_annotation_sub2.gtf"   #出力ファイル名を指定してout_fに格納
    param <- "chr"                         #挿入したい文字列を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #本番(文字列挿入)
    data[,1] <- paste(param, data[,1], sep="")#dataオブジェクトの1列目の左側にparamで指定した文字列を挿入
    
    #ファイルに保存
    write.table(data, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#dataの中身を指定したファイル名で保存
    	
  30. GTF (General Transfer Format)形式のヒトサンプルファイル(human_annotation_sub3.gtf)です。

    ヒトゲノム配列("BSgenome.Hsapiens.UCSC.hg19")中の染色体名と一致する遺伝子アノテーション情報のみhuman_annotation_sub2.gtfから抽出したファイルです。

    in_f1 <- "human_annotation_sub2.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "human_annotation_sub3.gtf"   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み(GFF/GTFファイル)
    data <- read.table(in_f1, header=FALSE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(リファレンス配列の染色体名を抽出)
    param <- in_f2                         #paramという名前で取り扱いたいだけです
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
    keywords <- seqnames(hoge)             #染色体名情報を抽出した結果をkeywordsに格納
    keywords                               #確認してるだけです
    
    #本番
    obj <- is.element(as.character(data[,1]), keywords)#in_f1で読み込んだファイル中の1列目の文字列ベクトル中の各要素がベクトルkeywords中に含まれるか含まれないか(TRUE or FALSE)の情報をobjに格納(集合演算をしている)
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身をout_fで指定したファイル名で保存
    	
  31. Illumina/75bp/single-end/human (SRA061145) data (Wang et al., Nucleic Acids Res., 2013)
  32. ヒト肺の3群間比較用データ:normal human bronchial epithelial (HBE) cells, human lung cancer A549, and H1299 cells

  33. Illumina HiSeq 2000/100bp/paired-end/human (SRA062939 by DRA; SRA062939 by SRA; GSE42960) data (Chan et al., Hum. Mol. Genet., 2013)
  34. SRP017580でも構いません。 ペアエンドデータのSRR633902_1.fastqを入力として、最初の1000リード分を抽出することで、 SRR633902_1_sub.fastqを作成しています。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR633902_1.fastq.gz"         #入力ファイル名を指定してin_fに格納
    out_f <- "SRR633902_1_sub.fastq"       #出力ファイル名を指定してout_fに格納
    param <- 1000                          #抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    fastq                                  #fastq情報を表示
    
    #本番(サブセットの抽出)
    fastq <- fastq[1:param]                #サブセットを抽出
    fastq                                  #fastq情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	
  35. Illumina Genome Analyzer II/54bp/single-end/human (SRP017142; GSE42212) data (Neyret-Kahn et al., Genome Res., 2013)
  36. ヒトfibroblastsの2群間比較用データ:3 proliferative samples vs. 3 Ras samples

  37. Illumina HiSeq 2000 (GPL14844)/50bp/single-end/Rat (SRP037986; GSE53960) data (Yu et al., Nat Commun., 2014)
  38. ラットの10組織×雌雄(2種類)×4種類の週齢(2, 6, 21, 104 weeks)×4 biological replicatesの計320サンプルからなるデータ。

  39. Illumina GAIIx/76bp/paired-end/Drosophila or Illumina HiSeq 2000/100bp/paired-end/Drosophila (SRP009459; GSE33905) data (Graveley et al., Nature, 2011; Brown et al., Nature, 2014)
  40. ショウジョウバエの様々な組織のデータ(modENCODE)。29 dissected tissue samplesのstrand-specific, paired-endのbiological replicates (duplicates)だそうです。

  41. Illumina HiSeq 2000/36bp/single-end/Arabidopsis (SRP011435; GSE36469) data (Huang et al., Development, 2012)
  42. シロイヌナズナの2群間比較用データ:4 DEX-treated vs. 4 mock-treated

  43. PacBio/xxx bp/Human (ERP003225) data (Sharon et al., Nat Biotechnol., 2013)
  44. ヒトの長鎖RNA-seqデータです。配列長はリードによって異なります。

  45. PacBio/xxx bp/Chicken (SRP038897 by DRA; SRP038897 by SRA) data (Sharon et al., PLoS One, 2014)
  46. ニワトリの長鎖RNA-seqデータです。配列長はリードによって異なります。

  47. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample32_ref.fastasample32_ngs.fasta)です。

    50塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を10リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample32_ref.fastaで、 10リードからなる仮想NGSデータがsample32_ngs.fastaです。 リード長20塩基で10リードなのでトータル200塩基となり、50塩基からなる元のゲノム配列の4倍シーケンスしていることになります(4X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample32_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample32_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 50                    #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 10                    #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  48. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample33_ref.fastasample33_ngs.fasta)です。

    1000塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を200リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample33_ref.fastaで、 200リードからなる仮想NGSデータがsample33_ngs.fastaです。 リード長20塩基で200リードなのでトータル4,000塩基となり、1,000塩基からなる元のゲノム配列の4倍シーケンスしていることになります(4X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample33_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample33_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 1000                  #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 200                   #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  49. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample34_ref.fastasample34_ngs.fasta)です。

    1000塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を500リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample34_ref.fastaで、 500リードからなる仮想NGSデータがsample34_ngs.fastaです。 リード長20塩基で500リードなのでトータル10,000塩基となり、1,000塩基からなる元のゲノム配列の10倍シーケンスしていることになります(10X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample34_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample34_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 1000                  #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 500                   #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  50. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample35_ref.fastasample35_ngs.fasta)です。

    10000塩基の長さのリファレンス配列を生成したのち、40塩基長の部分配列を2500リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample35_ref.fastaで、 2500リードからなる仮想NGSデータがsample35_ngs.fastaです。 リード長40塩基で2500リードなのでトータル100,000塩基となり、10,000塩基からなる元のゲノム配列の10倍シーケンスしていることになります(10X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample35_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample35_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 10000                 #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 40                    #リード長を指定
    param_num_ngs <- 2500                  #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  51. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample36_ref.fastasample36_ngs.fasta)です。

    10000塩基の長さのリファレンス配列を生成したのち、80塩基長の部分配列を5000リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample36_ref.fastaで、 5,000リードからなる仮想NGSデータがsample36_ngs.fastaです。 リード長80塩基で5,000リードなのでトータル400,000塩基となり、10,000塩基からなる元のゲノム配列の40倍シーケンスしていることになります(40X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample36_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample36_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 10000                 #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 80                    #リード長を指定
    param_num_ngs <- 5000                  #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  52. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample37_ref.fastasample37_ngs.fasta)です。

    10000塩基の長さのリファレンス配列を生成したのち、100塩基長の部分配列を10000リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample37_ref.fastaで、 10,000リードからなる仮想NGSデータがsample37_ngs.fastaです。 リード長100塩基で10,000リードなのでトータル1,000,000塩基となり、10,000塩基からなる元のゲノム配列の100倍シーケンスしていることになります(100X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample37_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample37_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 10000                 #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 100                   #リード長を指定
    param_num_ngs <- 10000                 #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  53. PacBio/xxx bp/Human (SRP036136) data (Tilgner et al., PNAS, 2014)
  54. ヒトの長鎖RNA-seqデータです。配列長はリードによって異なります。

  55. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ (G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル vs. G4群3サンプル vs. G5群3サンプル)です。 10,000 genes×15 samplesの「複製あり」タグカウントデータ(data_hypodata_3vs3vs3vs3vs3.txt) 「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3, G3_rep1, G3_rep2, G3_rep3, G4_rep1, G4_rep2, G4_rep3, G5_rep1, G5_rep2, G5_rep3」の計15サンプル分からなります。 全10,000遺伝子(Ngene=10000)中の最初の2,000個(gene_1〜gene_2000まで; 20%なのでPDEG=0.2)が発現変動遺伝子(DEG)です。 全2,000 DEGsの内訳:(1)最初の50%分(gene_1〜gene_1000)がG1群で5倍高発現、 (2)次の20%分(gene_1001〜gene_1400)がG2群で10倍高発現、 (3)次の15%分(gene_1401〜gene_1700)がG3群で8倍高発現、 (4)次の10%分(gene_1701〜gene_1900)がG4群で12倍高発現、 (5)残りの5%分(gene_1901〜gene_2000)がG5群で7倍高発現。 以下のコピペでも取得可能です。

    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene=10000,PDEG=0.2,#全遺伝子数とDEGの割合を指定
             DEG.assign=c(0.5,0.2,0.15,0.1,0.05),#DEGの内訳(G1が50%,G2が20%,G3が15%,G4が10%,G5が5%)を指定
             DEG.foldchange=c(5,10,8,12,7),#DEGの発現変動度合い(G1が5倍,G2が10倍,G3が8倍,G4が12倍,G5が7倍)を指定
             replicates=c(3, 3, 3, 3, 3))  #各群のサンプル数を指定
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#「rownames情報」と「カウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_hypodata_3vs3vs3vs3vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | 速習コース

2014年9月にJST-NBDCと東大農アグリバイオ主催で「バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ)速習コース」が開催されます。 主催機関のサイト上で情報提供したほうがいいだろうということで、受講者が各自でインストールするLinux系の計算機環境構築手順、アプリケーションソフトウェア、 講義資料などを示します。ハッシュタグは#AJACS

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ)関連:

計算機環境構築(Linux系):

Linux環境構築手順は大まかに3つの手順からなります。 最低限、VirtualBoxのインストールができていればOKです。VirtualBoxのバージョンは2014年9月の実習では4.3.12以前のものを想定しています。 イメージファイルは、初日に速習コース会場にて、USBメモリで持ち込みPCにコピーすることも可能です。 また、何らかの理由により持ち込みPCにインストールできなかったとしても主催機関であるアグリバイオインフォマティクス所有のインストール済みのノートPC(60台程度あり)をすぐに貸与可能です。
 

インストール手順(Windows用):install_NGSsokushu_windows.pdf(20140822, 15:03版;約6MB;西岡 輔 氏作成)

インストール手順(Macintosh用):install_NGSsokushu_macintosh.pdf(20140826, 10:25版;約3MB;孫 建強 氏作成)

トラブルシューティング(ファイルシステム関連):troubleshooting_NTFS.pdf(20140814, 17:04版;約1MB;西岡 輔 氏作成)

トラブルシューティング(BIOS関連):troubleshooting_BIOS.pdf(20140815, 16:42版;約2MB;西岡 輔 氏作成)

  1. VirtualBoxインストール
  2. イメージファイルBioLinux.ova (アメリエフ様作成)のダウンロード
  3. 7.1GB程度あります。東大有線LANで30分程度かかります。ダウンロードリンクは複数提供しているが、どれか一つだけを利用するとよいです。
  4. VirtualBoxへのイメージファイルの導入

補足情報

2014年9月の速習コースで利用したイメージファイルは、Bio-Linux 7をベースに下記のいくつかのプログラムや解析用デモデータを追加したファイルになります(アメリエフ様作成)。 Bio-Linux 8が2014年7月末にリリースされましたが今回の速習ではBio-Linux 7となっております。 イメージファイル中にはBio-Linux 7を含めFIREやngs.plotはすでにインストールされていますので、ユーザが新たにこれらをインストールする必要はありません。 7.1GBというトンデモナイファイルサイズになってしまうのは、デモデータなどを含め一度に1つのファイルとしてダウンロードするためです。 仮想環境の概念については、日本乳酸菌学会誌のNGS関連連載の第1回分PDFが参考になるかもしれません。

計算機環境構築(アプリケーションソフトウェア系):

速習コース講義資料:

統合TVで公開予定の講義と講義資料PDFです。公開可能なものについて随時更新しています。以下のような形式で示します。

  • 日時、「項目番号および項目」、レベル(初級または中級)、形式(講義または実習)
  • 講師と所属、統合TVリンク先、講義資料(PDFファイル)
  • 講義内容
     
  • 2014年9月1日10:40-12:00、「1-1. OS, ハード構成」、初級、講義
  • 中村保一 (DDBJ)、 統合TV、講義資料
  • コンピューターの基本の理解。必要なスキル。ハードウェア(計算機の歴史、現代のハードウェア構成)。遺伝研スパコンを例に。 ソフトウェア(オペレーティング・システム(OS)、言語・プログラム・ライブラリ)。UNIX OSや、UNIXの構成、OSのご利益。 シェル環境(bash, tcsh, zsh)。スクリプト言語。米国ではPythonが人気。
  • 2014年9月1日13:15-14:45、「1-2. ネットワーク基礎」、初級、講義
  • 中村保一 (DDBJ)、 統合TV、講義資料(追加分)
  • インターネット、セキュリティの基本の理解。ネットワーク(よく使うインターネットプロトコル)。インターネットの始まり、TCP/IP。 よく使う通信プロトコル(HTTP, FTP, SSH, SFTP, SMTP/POP)。スパコンへのログインはWindowsはTera Term、Macはターミナルを起動。 外部サーバとのファイル送受信(sftp, Cyberduck, Asperaなど)。DDBJ DRAの話。 データ量の推移や検索の仕方、解析パイプラインも用意しており、主要な生物種ではLinuxを覚えなくてもどうにかなる。 遺伝研スパコンは無料。GNU/Linux。DDBJパイプラインを用いて公開データ納豆菌をVelvetでアセンブルする話。SRAメタデータの説明。
  • 2014年9月1日15:00-18:15、「1-3. UNIX I」、初級、実習
  • 仲里猛留 (DBCLS)、 統合TV、講義資料 (20140829, 16:21版)
  • UNIXの基礎の理解、VirtualBoxとBioLinux環境構築。UNIXはOSであり、Windows 7やMacOS Xと同じようなもの。 マルチユーザー、マルチタスク、super user, root。Linuxは個人で使うレベルのUNIX。 ディストリビューション(Debian系、RedHat系、OpenSuSe)。カーネル(kernel)とシェル(shell)。 BioLinuxの起動と終了、画面説明、ターミナルの起動。ディレクトリとファイル。 環境構築がほぼ全員できていたので、STAFFおよびTAで個別対応。順調に進んだため、9/2分の講義を引き続いて行った。 lsコマンド、オプションの使い分け。プロンプトは自在に設定可能。引数はカタマリごとなら入れ替えてもよい。 ディレクトリ構造。cdコマンド。ホームディレクトリは「ちるだ」、カレントディレクトリは「どっと」、 一つ上のディレクトリは「どっとが二つ」、ディレクトリの区切りは「/」。絶対パスと相対パス。 基本コマンド:ls, cd, pwd, mv, cp, rm, mkdir, cat, more/less, head/tail。 質疑応答で様々なオプションやTipsを共有。rmコマンドの-fや-rオプション。headコマンドの-15オプションで15行分見られるとか。 「CTRL + L」ボタンでターミナルをリフレッシュ。lsコマンドでワイルドカードの意味を説明。 「/home/admin1409/amelieff/perl/pl_answer」ディレクトリ上で「ls -l perl?.pl」とか「ls -l perl*.pl」での挙動の違いを確認。 ゲストOS上のコマンドのコピーはホストOSの「CTRL + C」などはだめなので、右クリックでやるべし。 ホストOS (WindowsやMacintosh)上のファイルをゲストOS (BioLinux)上にコピーするのはドラッグアンドドロップで可能。 その逆はデフォルトでは不可。日本語を含む20140911_4-4_kawaoka.txtをBioLinux上でみると文字化けするが、 下記のようにiconvコマンドで「iconv -f SJIS 20140911_4-4_kawaoka.txt > hoge.txt」で解決可能。 nkfコマンドがあればそれでも解決できるらしい。
  • 2014年9月2日10:30-18:15、「1-3. UNIX I」、中級、実習
  • 仲里猛留 (DBCLS)、 統合TV、講義資料 (20140901, 10:46版)
  • 権限(Permission)、「Read, Write, eXecute」、「ユーザ, グループ, その他」。chmod, su, sudoコマンド。 ~/genome/yeast.ntを用いてgrep, sort, uniqコマンドを実行。 「grep GAATCC genome/yeast.nt」、「grep ^GAA genome/yeast.nt」、「grep GAA$ genome/yeast.nt」など。 パイプ(縦棒)の話。「grep GAATCC genome/yeast.nt | wc -l」などいろいろ。より高機能なegrepもある。 正規表現、シングルクォーテーションとダブルクォーテーションの違い。 「echo '$SHELL' 任意のファイル名」と「echo "$SHELL" 任意のファイル名」。 「wc –l genome/yeast.nt」、「sort genome/yeast.nt | uniq | wc –l」、「sort genome/yeast.nt | uniq –c | sort –n」、 「sort genome/yeast.nt | uniq –c | sort –rn | head -3」、 「sort genome/yeast.nt | uniq –c | sort –rn | head -3 | less –S」。 リダイレクトでファイルに保存。「sort genome/yeast.nt | uniq > genome/yeast.uniq.nt」。 「sort genome/yeast.nt | uniq」、画面表示を途中で止めたい場合は「CTRL + C」。 Cufflinksというプログラムをwgetして*.tar.gzファイルが存在するところからの代表的なインストール例。 「tar xvzf cufflinks-2.2.1.tar.gz」、「cd cufflinks-2.2.21」、「whereis make」。 今回の実習環境ではnkfコマンドが入ってなかったので、みんなで「sudo apt-get install nkf」、 「apt-cache search nkf」。そして文字化けしていたファイルの文字コード変換を実行。 「nkf 20140911_4-4_kawaoka.txt > hoge2.txt」。パスの話。「echo $PATH」。 デフォルトで「bwa」と打つとbwa ver. 0.6.1-r104となるが、ホームディレクトリ以下にbwa ver. 0.7.10が既にインストールされている。 bwa最新版を「bwa」で利用したいときにパス指定をしたり、lnコマンドでシンボリックリンクを作成したりする。 エディタの紹介。viやemacsがあるが、emacsはターミナルで利用可能な「CTRL + e」や「CTRL + a」などが共通。 マルチタスクの実例。「CTRL + z」で終了、「Jobs」で確認、「bg %1」や「fg %2」など。 「ssh admin1409@localhost」で、自分自身のマシンに新たにログイン。「screen」コマンド。
    • Linuxコマンド集:20140902_1-3_nakazato_linux.pdf
    • エディタ(emacs, vi)のキーバインド集:20140902_1-3_nakazato_editor.pdf
    • wgetとunzip実例:20140902_1-3_wget_unzip.txt (20140902, 13:50版)
       
    • 要望:「/home/admin1409/amelieff/perl/pl_answer/」には多数のperlプログラムがあるが、 例えば*.plの前の数値を自動的に+10したファイル名に変更するやり方を知りたい。
    • やり方1(長尾 吉郎 氏 提供情報):
      • ファイル名変更perlプログラム:20140902_rename.pl (20140903, 14:13版)
      • 実行例:20140902_rename1_commands.txt (20140903, 16:46版)
      • 解説:test1ディレクトリ中に5つのファイル(perl2.pl, perl10.pl, perl_kk.pl, perl_87.pl, perl_87.txt)が存在する条件下で、20140902_rename.plを実行しています。 「perl 20140902_rename.pl *.pl」は、拡張子が*.plというファイルのみ入力(それゆえ該当するのはperl2.pl, perl10.pl, perl_kk.pl, and perl_87.plの4ファイル)として、 拡張子の直前の数値を+10してrenameする20140902_rename.plという名前のperlプログラムを実行する、という意味です。 実行後にlsすると「20140902_rename.pl perl12.pl perl20.pl perl_87.txt perl_97.pl perl_kk.pl」となっていて、 拡張子の直前が数値となっているファイルのファイル名が変更されていることがわかります。たとえばperl2.plはperl12.plという名前に変更されています。 それゆえ、例えば実行するためのperlプログラム名が20140902_rename.plではなく20140902_rename1.plだと、このファイル名も変更されるという特徴があります。
    • やり方2(甘利 典之 氏 提供情報。もらったファイルを門田が変更したことに起因する間違いの可能性あり):
      • ファイル名変更シェルスクリプト:20140902_rename.sh (20140903, 17:06版)
      • 実行例:20140902_rename2_commands.txt (20140903, 16:46版)
      • 解説:test2ディレクトリ中に5つのファイル(perl2.pl, perl10.pl, perl_kk.pl, perl_87.pl, perl_87.txt)が存在する条件下で、20140902_rename.shを実行しています。 「sh 20140902_rename.sh」は、拡張子が*.plというファイルのみ入力(それゆえ該当するのはperl2.pl, perl10.pl, perl_kk.pl, and perl_87.plの4ファイル)として、 拡張子の直前の数値を+10してrenameする20140902_rename.shという名前のperlプログラムを実行する、という意味です。 実行後にlsすると「20140902_rename.sh perl12.pl perl20.pl perl_87.txt perl_97.pl perl_.pl」となっていて、 拡張子の直前が数値となっているファイルのファイル名が変更されていることがわかります。たとえばperl2.plはperl12.plという名前に変更されています。 一番最後のperl_plは、元がperl_kk.plだったものです。これは拡張子の直前が数値ではないので想定外のことが起こっているということになります。 もちろん条件分岐をすればどうにかなりますが、そういったものをつけていって想定外にどこまで対応するかどうかは状況次第です。 プログラムはそのままで、拡張子の直前がかならず数値にするようにファイル名作成段階でしておくというのが現実的な対応策だと思います。
         
  • 2014年9月3日10:30-18:15、「1-4. スクリプト言語 (シェルスクリプト)」、中級、実習
  • 服部恵美 (アメリエフ)、 統合TV、講義資料 (20140908, 09:12版)
  • シェルスクリプトの基礎(変数、引数、条件付き処理、繰り返し処理、標準出力と標準エラー出力、シバンなど)。 変数を使うと値を一元管理できる。変数にしたほうがいいのは、入力ファイル名(リファレンスゲノム、塩基配列のファイル名)とか。 変数名に使わないほうがいいものは「変数名 予約語」などで検索するとよい。 引数を使うとスクリプトの中身をいちいち書き換えなくてよくなる。$1や$2以外に「$0」もある。 例えば、$0はUsageのところなどで利用される。条件付き処理でmkdir。複数の条件を指定したいときは「-aや-r」を利用。 bashのif文で使用する-eの意味は、指定した名称のファイルが存在するかではなく、 指定した名称のディレクトリまたはファイルが存在するかであろう(中杤昌弘 氏 提供情報)。 「bash -n ファイル名」でシェルのコーディング確認ができる。echoで実行コマンドを出力させて結果をわかりやすくする。 標準出力と標準エラー出力。「>&2」が標準エラー出力。「bash test7.sh 1>log 2>err」は、 標準出力はlogというファイルに出力し、標準エラー出力はerrというファイルに出力する。 プログラム内部を理解しやすくするため、スクリプト中に#から始まるコメントを入れた方がわかりやすい。 「シバン」というのは、一般的にプログラムの一行目に書く。 このプログラムはシェルスクリプトである、ということを示す場合は「#!/bin/bash」と書く。 こうすることで例えば「bash test.sh」と書く代わりに「./test.sh」で済む。 sequence logos (weblogo)の紹介をして、mature.faやhairpin.faを入力としてレベルに応じた最終課題(mkdir, grep, weblogoなど)。
    • テストデータ:hairpin.fa.zip (miRNA前駆体配列)
    • テストデータ:mature.fa.zip (成熟miRNA配列)
       
    • 要望:実習6の発展課題周辺のコードで、任意の数のディレクトリを引数で与えて作成したい。
    • やり方1(田中洋子 氏 提供情報):
      • シェルスクリプト:20140903_mkdir1.sh (20140904, 16:23版)
      • 実行例:20140903_mkdir1_commands.txt (20140904, 11:51版)
      • 解説:「bash 20140903_mkdir1.sh uge hogege hangya」と打つと、uge, hogege, hangyaという三つのディレクトリが作成されます。
    • やり方2(長尾 吉郎 氏 提供情報):
      • シェルスクリプト:20140903_mkdir2.sh (20140904, 16:23版)
      • 実行例:20140903_mkdir2_commands.txt (20140904, 13:44版)
      • 解説:引数で指定した文字列を与えると左側に"CITY_"という文字列が付加された三つのディレクトリが作成されます。 例えば、「bash 20140903_mkdir2.sh uge hogege hangya」と打つと、CITY_uge, CITY_hogege, CITY_hangyaという三つのディレクトリが作成されます。
         
    • その他1(孫建強氏 提供情報):上記20140903_mkdir*.shを作成する際に、しばらく「bash -n 20140903_mkdir*.sh」でエラーが出るという問題に苦悩しました。 原因はWindows OS上で作成したものをBioLinux上でダウンロードして使おうとしていたために、"\r"が原因と推認されるエラーメッセージが出ていました。 これは結論としてはOS間の改行コードの違いによる問題で、同じプログラムをBioLinux上で作成し直すとうまく動きました。 こういうことはしょっちゅうありますのでご注意ください。
    • その他2(田中洋子 氏 提供情報):改行コードが 「CR+LF」になっているシェルをviやemacsで開くと「^M」と表示されていて識別可能。 WindowsとLinux間でファイルサイズが違っているのは改行コードの違いによる。 具体的には、「CR」の1バイトの違いが行数分だけファイルサイズの違いに表れているのがわかる。 WinSCPのようなファイル転送ソフトだとデフォルトのテキストモードでWindowsとLinuxOS間でテキストファイルを転送すると 「賢く」改行コードを変換してくれるため、特に気にする必要はないが、Windows上で作成されたテキストファイルを BioLinux上で直接wgetコマンドで取得するとプログラムが動かないということになるので注意。 ただし、賢く変換してくれるがゆえに、大容量のFASTQファイルなどテキストモードで転送しようものなら 延々頑張って改行コードを変換してくれて転送が全然終わらないということになるのでそのあたりは注意が必要。
    • その他3(中杤昌弘 氏 提供情報):
      • シェルスクリプト:20140903_mkdir3.bsh (20140907, 13:47版)
      • 実行例:20140903_mkdir3_commands.txt (20140907, 14:15版)
      • 解説:最初の2個の引数で指定した名前のディレクトリを作成するスクリプト。3個目以降引数は別の用途に使用できる。 例えば、「bash 20140903_mkdir3.bsh uge hogege hangya」と打つと、最初の2つの引数で指定したディレクトリugeとhogegeが作成され、 3つめの引数で指定したhangyaは作成されないことがわかります。拡張子はshでなくてbshでもよいのです。
    • その他4(中杤昌弘 氏 提供情報):
      • シェルスクリプト:20140903_mkdir4.bsh (20140907, 16:04版)
      • 実行例:20140903_mkdir4_commands.txt (20140908, 07:54版)
      • 解説:bashのif文で使用する-eの意味は、指定した名称のファイルが存在するかではなく、 指定した名称のディレクトリまたはファイルが存在するかであることを検証するためのスクリプト。 ホームディレクトリ直下に存在するgenomeを引数として与えている実行例を行うと、確かに-eオプションがTRUEとなっていることがわかる。

       
  • 2014年9月4日10:30-18:15、「1-4. スクリプト言語 (Perl)」、中級、実習
  • 服部恵美 (アメリエフ)、 統合TV、講義資料 (20140908, 09:15)
  • Perlの基礎(変数、配列、引数、ハッシュ、条件付き処理、繰り返し処理、ファイル入出力、シバン、正規表現など)。 一般に、Perlのほうがシェルスクリプトよりも複雑な処理に向いていると言われる。 例えば、ファイル形式の変換や結果ファイルの独自解析など。達成目標は、hairpin.faの特定のRNAの配列を 切り出して別のファイルに書き出すPerlプログラムを書けるようになる。Perlの記載方法。値を出力するにはprintを実行、 文字列はダブルクォートかシングルクォートで囲む、行の末尾に「;」をつける、全角記号や全角空白文字は使えない。 シェルスクリプト同様、Perlでも「変数」を使うことができる。「$変数」と書くと、変数に入っている値を呼び出すことができる。 最初に変数が出てくるときには「my」をつける。シェルスクリプトと違って、代入の「=」の前後に空白が入っても大丈夫。 Perlのprintはシェルスクリプトのechoと違って最後が改行されない。 そのため、改行したい場合は明示的に「\n」と改行コードを書く必要がある。 「配列」を使うと、たくさんの値をまとめて扱うことができる。配列からの値の取り出し方。 「添字」は0から始まる。push関数で配列に値を追加。配列の要素数の調べ方(Rのlength関数に相当)。 配列を結合して文字列にするのはjoin関数。文字列を分割して配列にするのはsplit関数。 Perlでも引数が使える。Perlでは、引数を「@ARGV」という名前の専用の配列で受け取る。 ハッシュの話。「$ハッシュ名{キー}」でハッシュから値を取り出す。配列とハッシュの違い。 Perlでも条件付き処理や繰り返し処理が可能。シェルスクリプトと書き方が似ているが微妙に異なるので注意。 条件付き処理は、if-elsif-else構文を使用。Perlの比較演算子。複数の条件指定。 Perlの繰り返し処理にはforeach, for, whileなどがある。繰り返し処理でハッシュにアクセス。 繰り返し処理の中で次の要素スキップするにはnextを使用。繰り返し処理自体を中止するにはlastを使用。 {}囲んだ範囲をスコープと呼ぶ。ファイル入出力「use strict;」と「use warnings;」でバグを見つけやすくする。 #で始まる行はコメント扱いとなり、処理に影響しない。 Perlプログラムの1行目に「#!/usr/bin/perl」を記述すると、このファイルがPerlスクリプトであることが明示的になる。 正規表現は文字列のパターンを表現する方法であり、Perlでは、正規表現を//で定義する。 「~s/正規表現パターン/置換文字列/オプション」で、正規表現を用いた文字列の置換を行うことができる。 最終課題は、hairpin.faの塩基配列行を1行にするなど。
    • miRBase
    • 解答例の修正版:perl10.pl (20140924, 18:19)
      • 解説:17行目のところを「$id2seq{$id} = $_;」から「$id2seq{$id} .= $_;」に変更しています。
    • Tips(服部恵美 先生 提供情報;20140924, 18:26):
      • OS間の改行コードの違いについて、例えばWindowsで作成したファイルの改行コードは、 Perlプログラム中で以下のように、chompする前に\rを除去する処理を入れればよい。
      • s/\r//g;

        chomp;


       
  • 2014年9月5日10:30-14:45、「2-1. 配列解析基礎」、初級、実習
  • 坊農秀雅 (DBCLS)、 統合TV、講義資料 (20140828, 14:19版)
  • 配列、ゲノムデータ記述のフォーマット、アラインメント(DP)、データベース検索(BLAST、BLAT)等の基礎的な配列比較解析の原理と実習。
    • AAIndexKawashima et al., Nucleic Acids Res., 2008
    • BLASTAltschul et al., J Mol Biol., 1990
    • FASTAPearson and Lipman, Proc Natl Acad Sci U S A., 1988
    • GGRNANaito and Bono, Nucleic Acids Res., 2012
    • FASTQ形式
    • SRA/SRA-lite形式
    • SAM/BAM形式Naito and Bono, Nucleic Acids Res., 2012
    • VCF (Variant Call Format)形式
    • Wiggle (Wig)形式
    • GTF/GFF形式
    • git clone https://github.com/bonohu/AJACS47 (実習用PCにはgitは入ってなかった...)

      wget https://github.com/bonohu/AJACS47.master.zip (gitが入っていない場合はこちら)

    • HsDJ1.pep.fa
    • BmDJ1.pep.fa
    • 講義資料中のコマンド群
    • dottup -asequence HsDJ1.pep.fa -bsequence BmDJ1.pep.fa -wordsize 4

      dottup -asequence HsDJ1.pep.fa -bsequence BmDJ1.pep.fa -wordsize 4 -graph png (これでpng形式ファイルに保存できる。これだとファイル名は指定できない。by ツイート情報)

      dottup -asequence HsDJ1.pep.fa -bsequence BmDJ1.pep.fa -wordsize 4 -graph pdf (これでpdf形式ファイルに保存できる。これだとファイル名は指定できない。by ツイート情報)

      dottup -asequence HsDJ1.pep.fa -bsequence BmDJ1.pep.fa -wordsize 4 -graph png -goutfile hoge (これでhoge.pngというpng形式ファイルで保存できる。by ツイート情報)

      dottup -asequence HsDJ1.pep.fa -bsequence BmDJ1.pep.fa -wordsize 10

      dottup -asequence HsDJ1.pep.fa -bsequence BmDJ1.pep.fa -wordsize 2

      needle HsDJ1.pep.fa BmDJ1.pep.fa

      water HsDJ1.pep.fa BmDJ1.pep.fa

      less np_009193.needle

      less np_009193.water

    • EPAS1-001.nt.fa
    • EPAS1-007.nt.fa
    • 講義資料中のコマンド群
    • dottup -asequence EPAS1-001.nt.fa -bsequence EPAS1-007.nt.fa

      needle EPAS1-001.nt.fa EPAS1-007.nt.fa

      water EPAS1-001.nt.fa EPAS1-007.nt.fa

      less enst00000263734.needle

      less enst00000263734.water

    • 講義資料中のコマンド群:DBの準備とBLASTの実行
    • cd /home/admin1409/genome

      makeblastdb -in yeast.aa -dbtype prot -hash_index

      makeblastdb -in yeast.nt -dbtype nucl -hash_index

      blastp -query ~/HsDJ1.pep.fa -db yeast.aa -num_threads 4 > HsDJ1vsyeast.aa.txt

    • 講義資料中のコマンド群:オプションを変えてみる
    • blastp -query ~/HsDJ1.pep.fa -db yeast.aa -num_threads 4 -evalue 1

      blastp -query ~/HsDJ1.pep.fa -db yeast.aa -num_threads 4 -outfmt 6

      blastp -help | less

    • 講義資料中のコマンド群:例2-2
    • tblastx -query ../EPAS1-001.nt.fa -db yeast.nt -num_threads 4 -evalue 1 | less

    • 例2-3
    • Local BLASTの使い方の統合TV
    • AJACS名古屋
    • GGRNANaito and Bono, Nucleic Acids Res., 2012
    • ggrnaapi.pl関連のコマンド群
    • perl ggrnaapi.pl | less

      perl ggrnaapi.pl | sort | uniq | less

    • count.pl関連のコマンド群
    • perl ggrnaapi.pl | perl count.pl

      perl ggrnaapi.pl | perl count.pl | sort -rn -k2


       

  • 2014年9月5日15:00-18:15、「2-2. バイオ系データベース概論」、初級、実習
  • 小野浩雅 (DBCLS)、 統合TV、講義資料 (20140903, 18:22版; 18MB程度あり)
  • 基本的な各種バイオ系データベースの理解、統合DBの利用法。Google Chromeだと、統合TVを倍速指定で見ることができる。 UCSC Genome Browserでwigファイル関連、httpでうまくいかない場合はftpでやるべし。 UCSC Genome Browser, Biomart, IGVの統合TV番組を見せながら概説。 Integbio データベースカタログ、生命科学データベース横断検索、生命科学系データベース アーカイブ。 統合データベース講習会 AJACS, MotDB、新着論文レビュー、領域融合レビュー、 Allie、inMeXes、RefEx、GGRNA、GGGenome、difff、DBCLS SRA、ライフサイエンスQA、togo picture gallery。 Allieは、NGSなど略号が最初に出てきた論文を知ることができる。inMeXesでは、文献に頻出する英語表現を、一文字の入力ごとに高速に検索。 前置詞の出現頻度を調べる場合などに便利。ライフサイエンス辞書オンラインサービスと連携しているらしい。
     
  • 2014年9月8日10:30-12:00、「3-1. R 基礎1」、初級、実習
  • 門田幸二 (東京大学)、 統合TV、講義資料 (20140826, 18:20版)
  • Rインストール自体は基本的に終了した状態を想定しているものの、最初にlibrary(Biostrings)などいくつかの利用予定パッケージのロードを行い、 パッケージのインストールがうまくいっているかどうかを確認(できていなかったヒトの同定および対処)。 Rの一般的な利用法。log関数などの基本的かつ挙動を完全に把握できる関数を例として、 関数内部のオプション変更や「?関数名」で利用法の幅を広げる基本テクを概観。exp, mean, median, sort, length関数。
    • 9/8-9の2日間で用いる全データファイル:hoge.zip (20140828,12:13版)
    • Rコード:rcode_20140908.txt (20140826,14:18版)
       
  • 2014年9月8日13:15-14:45、「3-2. R 基礎2」、初級、実習
  • 門田幸二 (東京大学)、 統合TV、講義資料 (20140908, 22:02版)
  • 翻訳配列の取得を例に「(Rで)塩基配列解析」の基本的な利用法を紹介。塩基配列中にNを含む場合のエラー例とその対処法。 RGui画面中のSTOPボタンやRの終了手順。行列形式のタブ区切りテキストファイルからの情報抽出。Perlのハッシュに相当する部分。 ありがちなミスとその対処法。入力ファイルのヘッダー行の有無とread.table関数を利用した読み込み時のheaderオプションの使い分け。 論理値ベクトルの理解:is.element関数。集合演算:union, intersect, setdiff関数。その他:sort, table, toupper, tolower関数。
    • Macのディレクトリの変更は、メニューバー「その他」から「作業ディレクトリの変更」で出来る。(by ツイート情報)
    • Windows OSでコードの全選択をする場合は、コードの枠内で「CTRL + ALT + 左クリック」以外に「トリプルクリック」でもよい。 Macintosh OSは講習会中も全選択のやり方は分からずじまい。 Macユーザのあるヒトは「ドラッグするのが面倒なので、開始位置で一度クリックして終了位置までスクロールしてからShift押しながらクリックして広範囲選択してます (by ツイート情報)」。
    • スライド24の条件判定時に括弧をつけているが、講師的にはただの見栄え的なものと説明した。 しかしPerlの演算子と優先順位のようなものがRにもある(by ツイート情報)。 演算子の優先順位に関する記述はR Tipsの28. 演算子にもある(by ツイート情報)。
    • is.element関数での条件判定時に、Windows OSとMacintogh OSの多数派ではas.characterの有無で結果は変わらない(R ver. 3.1.0)が、 Macユーザの一人はas.characterをつけないとエラーが出て、もう一人はas.characterをつけるとエラーが出た。 sessionInfo()は見ていないのでバージョンがちょっと違うのかもしれない。
       
  • 2014年9月8日15:00-18:15、「3-3. R 各種パッケージ」、中級、実習
  • 門田幸二 (東京大学)、 統合TV、講義資料 (20140826,16:21版)
  • Rの各種パッケージのインストール法と代表的なパッケージBiostringsの利用法。 library, search, objects, ls関数。作業スペースの概念。Biostringパッケージで利用可能な関数を概観(Bioconductorのイントロダクション)。 source関数の利用:Rでもシェルスクリプトっぽいことができる、他人がウェブ上で公開している関数の読み込み、 Bioconductor提供パッケージインストールのためのbiocLite関数。
    • source関数実行時に利用:rcode_translate.txt
       
    • Macのヒトで作業スペースのロード時に、.RDataファイルが隠しファイルとなっていて場所が分かりづらかった(by ツイート情報)という点は重要な指摘。
       
  • 2014年9月9日10:30-14:45、「3-4. R bioconductor I」、中級、実習
  • 門田幸二 (東京大学)、 統合TV、講義資料 (20140826,21:21版)
  • setwd関数利用で効率的に解析。 塩基配列を入力としてアミノ酸配列(翻訳配列)を取得するtranslate関数を用いて、 アミノ酸配列を入力として実行しエラーを出させることを通じて、データの型の基本概念を説明。 rm, ls, objects関数を用いたオブジェクトの消去および確認。「?translate」で引数(Arguments)部分の説明。 翻訳配列取得コードの中身を説明。DNAStringSet形式、width列とnames列の説明。 自分のR環境を把握し、バージョンの違いが結果の違いとなることを認識。 sessionInfo関数、昔のバージョンのRインストール法。定期的なバージョンアップの重要性。 TCCパッケージを例として関数名が変わりうることやBioconductorサイトの見方を説明。 Biostringsパッケージのread.DNAStringSet関数がreadDNAStringSet関数に変わっていること。 Bsgenome.Hsapiens.UCSC.hg19パッケージで、R ver. 3.1.0で上流配列取得時に警告メッセージが出ており、将来的には使えなくなること。 Bioconductorのサイトを概観。いくつかのカテゴリを眺めて、CRISPRseekパッケージを発見することなど。
    • Rコード:rcode_20140909.txt (20140828,11:44版)
    • Rコード:rcode_translate2.txt
    • Rコード:rcode_translate3.txt
       
    • DNAStringSetに格納されてる各配列は、fasta[[1]]等とするか、namesで指定して、 fasta$gene1等とすればDNAStringとして得られるので、その後の解析によっては、文字列で得るよりも扱いやすい場合もあるかも(by ツイート情報)。
    • オブジェクトの消去はrm()後に、gc()というコマンドを2回打ち込んでメモリーを解放するのがお作法。
       
  • 2014年9月9日15:00-18:15、「3-5. R bioconductor II」、中級、実習
  • 門田幸二 (東京大学)、 統合TV、講義資料 (20140828,12:10版)
  • multi-FASTAファイルからの情報抽出。GC含量計算の詳細な説明。alphabetFrequency, apply関数、行列演算の基本。 FASTQ形式ファイルの読み込み、ファイル形式の変換(FASTQからFASTA)、クオリティチェック(QC)。 クオリティスコアでのフィルタリング、動作確認用のサブセット作成。FASTA/FASTQファイルのdescription行の整形。 sample, set.seed関数、gzip圧縮ファイルの読み込みや書き出しが可能であることなど。
    • writeFastq関数は同名ファイルが存在する場合は書き込み権限がないとエラーが出るが、writeXStringSet関数は同名ファイルの有無に関わらず 上書きするらしい(by ツイート情報)。
       
  • 2014年9月10日10:30-12:00、「4-1. 次世代シークエンサ基礎I」、初級、講義
  • 倉田哲也 (NAIST)、 統合TV、講義資料(非公開)
  • 原理の理解。
     
  • 2014年9月10日13:15-14:45、「4-2. 次世代シークエンサ基礎II」、初級、講義
  • 倉田哲也 (NAIST)、 統合TV、講義資料(非公開)
  • 応用分野とそのための計測技術の理解 (RNA-seq、ChIP-seq、がんゲノム、個人ゲノム、環境ゲノム、Hi-C)。
     
  • 2014年9月10日15:00-18:15、「4-3. 次世代シークエンサ実習I」、初級、実習
  • 山口昌雄 (アメリエフ)、 統合TV、講義資料 (20140811, 17:05版)
  • ファイル形式、データの可視化、データのクオリティチェック、マッピング、アセンブル。サンプルデータは下記の通り。
    • fastq形式ファイル:1K_ERR038793_1.fastq
    • bam/sam形式ファイル:1K_ERR038793.bam
    • vcf形式ファイル:1K_ERR038793_sort.vcf
    • fasta形式ファイル:genome.fa
       
    • SAMtools
    • IGV
       
    • IGV関連(田中洋子 氏 提供情報):
      • IGVトップ画面の見出し欄は非常にきれいに大中小項目分類されていてシンプルでよいが、 最初は自分の知りたい情報を見つけにくいヒトもいるかもしれない。その場合、慣れるまでは「Documents」-「IGV User Guide」 以下をすべて開いて使うとよい。
      • IGVのコマンドスタート説明
      • ゲノムは講師の先生の環境にはmm9 があったが、講習環境では{home}/igv/genomes にはhg18しかなかった。 しかし上記説明箇所のリンク[the genome registry]を開いてmm9.genome を見つけてwgetでダウンローできる。 この後の講習で出てくるかもしれないが、.genome前がIDです。例えば、mm9.genomeの場合はIDがmm9となる。 説明にもあるように、今はゲノムIDだけでなく参照に使いたいゲノムのファイル指定もできる。
      • 講習環境のIGV画面からのリファレンスゲノムの切り替えをやってみましたが、何度やってもいつまでたっても終わらない場合は、 wgetで.genomeを取得してから切り替るほうがさくっとできてよい。おそらくIGVサイトからのダウンロードと.genome作成をやっているのであろう。
      • IGVの状態は、ホーム直下のigvディレクトリの/home/admin1409/igv/prefs.properties に随時保存されるので、終了時の内容で次回起動する。 例えば、起動時に表示されるリファレンスゲノムはDEFAULT_GENOME_KEYで決まる。この設定ファイルの存在を知っているとIGVの挙動理解につながる。
      • IGVのバッチファイルはサイトの例同様、見たい領域が何か所もある時に利用していて便利。 各領域について位置指定+スナップショットで保存のバッチ作成。バッチの実行はIGVメニューからもコマンドからも実行できる。 ただしスナップショットなので、たしか下スクロールになってしまう箇所までは保存できなかったように思います。
         
  • 2014年9月11日10:30-14:45、「4-4. 次世代シークエンサ実習II」、初級、実習
  • 河岡慎平 (ATR)、 統合TV、講義資料 (20140918, 11:34版。)
  • ChIP-seqの代表的なパイプラインについての実習。iPS細胞の山中因子(OSKM factor; Oct4, Sox2, Klf4, and c-Myc) のヒトゲノム上での局在を調べたというChIP-seqデータ(Soufi et al., Cell, 2012) の取得、SRA toolkitを用いたファイル形式の変換(SRA形式からFASTQ形式)。"Input"の重要性。 FastQCを用いたクオリティチェック、ゲノムへのbowtie2でのマッピングおよび結果の解釈。複数個所にマップされるリードの取り扱い。 grep, wcなどのLinuxコマンドを駆使したフィルタリングや結果の概要把握。samtoolsを用いたファイル形式の変換(SAMからBAM)。 ngs.plotを用いて任意の座標におけるマップされたリードの分布を調査。MACS14を用いたピークコーリング(peak calling)。 UCSCゲノムブラウザで結果を眺める。Wigファイル、BEDファイル。モチーフ解析。
    • BioLinux上で「R」と打ち込むとRが起動します。「>」というプロンプトが出ている状態で以下をコピペ。(20140918, 11:14更新)
    • source("http://www.bioconductor.org/biocLite.R")#おまじない
      biocLite("ShortRead")                  #Bioconductor中にあるShortReadパッケージをインストール
      biocLite("BSgenome")                   #Bioconductor中にあるBSgenomeパッケージをインストール
      biocLite("doMC")                       #Bioconductor中にあるdoMCパッケージをインストール
      		

      コピペ中にいろいろメッセージが出る。 「>」というプロンプトが出ると一通りの処理が終わり、次のコマンド入力待ち状態になる。 その状態で「library(ShortRead)」と打ち、何らかのエラーメッセージが出ていないことを確認。 同様に「library(BSgenome)」と打ち、何らかのエラーメッセージが出ていないことを確認。 終了は「q()」。このとき、「Save workspace image? [y/n/c]:」と聞かれるがとりあえず「n」でよい。
       

    • 3つのパッケージがインストールできているかどうかの確認。 BioLinux上で「R」と打ち込むとRが起動します。「>」というプロンプトが出ている状態で以下をコピペ。 エラーメッセージが出ている人は挙手!。特に問題ないヒトはRの終了。終了は「q()」。 このとき、「Save workspace image? [y/n/c]:」と聞かれるが「n」でよい。
    • library(ShortRead)
      library(BSgenome)
      biocLite("doMC")
      
      
      library(ShortRead)
      library(BSgenome)
      biocLite("doMC")
      		
    • 全データファイル(約410MB):kawaoka.zip (20140918,11:19版)
    • 個別のファイルはこちら:

    • Gene Expression Omnibus (GEO)
    • BioLinux上でエクセルシート的な解析を行うのは「LibreOffice Calc」というものであるが、使い慣れていないヒトにとっては苦行。 使い慣れたホストOS上のEXCELなどでやりたい場合には、VirtualBoxの「設定」ー「共有フォルダ」を設定して利用するとよい(by ツイート情報)。
       
  • 2014年9月11日15:00-16:30、「6. 分子生命科学」、初級、講義
  • 河岡慎平 (ATR)、 統合TV、講義資料 (20140911, 09:45版)
  • 6-1. 分子生命科学概論 (複製、転写、翻訳、代謝、シグナル伝達などの基礎知識)。 6-2. オミクス概論(ゲノム以外のオミクスデータの基礎知識)。 6-3. 遺伝/進化概論(ゲノムデータを扱う上での遺伝学、進化学の基礎知識)。
     
  • 2014年9月11日16:45-18:15、「5-1. ゲノム情報倫理概論」、初級、講義
  • 箕輪真理・川嶋実苗 (NBDC)、 統合TV、講義資料 (20140902, 18:24版)
  • ゲノム情報を扱う上で、プライバシー保護などの必要な倫理的問題、法的問題の国内外の状況を理解し、 ゲノム情報を適切に利用できるようにする。匿名化、暗号化、情報セキュリティ概要。
     
  • 2014年9月12日10:30-14:45、「4-4. 次世代シークエンサ実習II (Reseq解析)」、初級、実習
  • 山口昌雄 (アメリエフ)、 統合TV、講義資料 (20140811, 17:05版)
  • Reseqの一般的な解析手順 (公開データ取得、クオリティコントロール、マッピング、変異検出)。
  • 2014年9月12日15:00-18:15、「4-4. 次世代シークエンサ実習II (RNA-seq解析)」、初級、実習
  • 山口昌雄 (アメリエフ)、 統合TV、講義資料 (20140811, 17:05版)
  • RNA-seqの一般的な解析手順 (公開データ取得、クオリティコントロール、マッピング、発現定量)。
     
  • 書籍 | について

    2014年4月に(Rで)塩基配列解析および(Rで)マイクロアレイデータ解析 を体系的にまとめた以下の書籍が出版されました。ここでは(Rで)塩基配列解析に関連したRNA-seq部分の書籍中のRコードを章・節・項ごとに示します。

    なるべく書籍中の記述形式に準拠しますが、例えばp72中の最初のsetwd("C:/Users/kadota/Desktop")というコマンドを忠実に実行してもエラーが出るだけです。 これはkadotaというヒトのPC上でのみ成立するコマンドだからです。 ここで利用しているsetwd関数は作業ディレクトリの変更に相当し、「ファイル」−「ディレクトリの変更」でデスクトップに移動することと同義です。 したがって、このページ全体で統一的に使っているように、ディレクトリの変更作業自体はR Gui画面左上の「ファイル」メニューを利用することとし、 setwd関数部分の記述は省略します。

    いくつかの数値の違いは、Rのバージョンの違いもあるでしょうし、取得先のデータベース側のバージョンの違いにもよると思います。 したがって、「得られるファイル」や「入力ファイルのリンク先のもの」と「手持ちの入力ファイル」が多少異なっていても気にする必要はありません。

    • 門田幸二著(金明哲 編), シリーズ Useful R 第7巻 トランスクリプトーム解析, 共立出版, 2014年4月. ISBN: 978-4-320-12370-0

    書籍 | トランスクリプトーム解析 | 2.3.1 RNA-seqデータ(FASTQファイル)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp71-73のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p72の網掛け部分:

    作業ディレクトリがデスクトップという前提です。有線LANで数十分程度はかかりますのでご注意ください。

    param <- "SRA000299"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロード
    sra_con <- dbConnect(SQLite(), sqlfile)#DBMSへの接続(ファイルの読み込み)
    hoge <- sraConvert(param, sra_con=sra_con)#メタデータ取得
    hoge                                   #hogeの中身を表示
    	

    p72下:

    作業ディレクトリがデスクトップで、デスクトップ上に"SRAmetadb.sqlite"というファイルが存在するという前提です。

    hoge$run実行後の表示順(SRR002324, SRR002325, SRR002320, SRR002322, SRR002323, SRR002321)が書籍中の順番と異なっている場合もあるようです。

    param <- "SRA000299"
    library(SRAdb)
    sqlfile <- "SRAmetadb.sqlite"
    sra_con <- dbConnect(SQLite(), sqlfile)
    hoge <- sraConvert(param, sra_con=sra_con)
    hoge
    hoge$run
    k <- getFASTQinfo(hoge$run)
    dim(k)
    colnames(k)
    	

    p73:

    私が行ったときのhoge$run実行後の表示順は(SRR002324, SRR002325, SRR002320, SRR002322, SRR002323, SRR002321)でした。 この場合、SRR002324 (腎臓1.5pM)とSRR002322 (肝臓1.5pM)は1番目と4番目 の要素に相当するので、書籍中のc(2,4)ではなく c(1,4)を指定しています。

    k[,c(9,14,16,17)]
    getFASTQfile(hoge$run[c(1,4)], srcType='ftp')
    list.files(pattern=".gz")
    	

    書籍 | トランスクリプトーム解析 | 2.3.2 リファレンス配列

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp73-78のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p74の網掛け部分:

    2014年4月15日以降にRとBioconductorのインストールを行ったヒトは、 書籍中の記述と若干の違いがあるかもしれませんが単純にバージョンの違いによるものなので気にしなくて良い。

    library(BSgenome)                      #パッケージの読み込み
    available.genomes()                    #利用可能なゲノムをリストアップ
    	

    p74下:

    head(available.genomes()) 
    hoge <- available.genomes(splitNameParts=T)
    dim(hoge)
    colnames(hoge)
    hoge$organism
    	

    p75上:

    table(hoge$organism)
    installed.genomes()
    	

    p75の網掛け部分:

    以下のコピペ実行後に「Update all/some/none? [a/s/n]: 」というメッセージが出ます。私はnにします。

    param <- "BSgenome.Tgondii.ToxoDB.7.0" #インストールしたいパッケージ名を指定
    source("http://bioconductor.org/biocLite.R")
    biocLite(param)
    	

    p75下:

    installed.genomes()
    	

    p76の網掛け部分:

    out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "refseq_mrna"       #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    library(biomaRt)                       #パッケージの読み込み
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    exportFASTA(out, file=out_f)           #FASTA形式で保存
    	

    p76下:

    2014年4月15日、R ver. 3.0.3で実行したときにはdim(out)の結果が「31690 2」でした。 また、hoge実行結果も「66 3」でした。

    dim(out)
    library(biomaRt)
    hoge <- listDatasets(useMart("ensembl"))
    dim(hoge)
    head(hoge)
    	

    p77上:

    2014年4月15日、R ver. 3.0.3でのhoge実行結果は「1149 2」でした。

    param_dataset <- "hsapiens_gene_ensembl"
    mart <- useMart("ensembl",dataset=param_dataset)
    hoge <- listAttributes(mart)
    dim(hoge)
    head(hoge)
    	

    p77の網掛け部分:

    有線LANで10分程度かかりますのでご注意ください。

    out_f <- "hoge8.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "cporcellus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "embl"              #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "5utr"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    library(biomaRt)                       #パッケージの読み込み
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    exportFASTA(out, file=out_f)           #FASTA形式で保存
    	

    p77下:

    2014年4月15日、R ver. 3.0.3でのdim(out)実行結果は「12987 2」でした。

    dim(out)
    head(out, n=3)
    ?getBM
    	

    書籍 | トランスクリプトーム解析 | 2.3.3 アノテーション情報

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp78-80のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p78の網掛け部分:

    作業ディレクトリがデスクトップという前提です。有線LANで数十分程度はかかりますのでご注意ください。 細かいところですが、書籍中では最後から2行目でちゃんとぶら下げができてないですねm(_ _)m

    out_f <- "hoge9.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定
    param_attribute <- c("refseq_mrna","hgnc_symbol","go_id")#属性名を指定
    param_filter <- "with_ox_refseq_mrna"  #フィルタリング条件を指定
    
    library(biomaRt)                       #パッケージの読み込み
    mart <- useMart("ensembl",dataset=param_dataset)
    out <- getBM(attributes=param_attribute, filters=param_filter,
                  values=list(TRUE), mart=mart)
    write.table(out, out_f, sep="", append=F, quote=F, row.names=F)
    	

    p78下:

    2014年4月16日、R ver. 3.0.3でのdim(out)実行結果は「450576 2」でした。

    dim(out)
    param_dataset <- "hsapiens_gene_ensembl"
    param_attribute <- c("refseq_mrna","hgnc_symbol","go_id")
    library(biomaRt)
    mart <- useMart("ensembl",dataset=param_dataset)
    	

    p79:

    2014年4月16日、R ver. 3.0.3でのdim(out)実行結果は「585078 2」、dim(listFilters(mart))の実行結果は「301 2」でした。 また、書籍中ではc(97,137)となっていますが、 バージョンによって頻繁に位置情報が変わるようなので、以下ではc("with_ox_refseq_mrna", "refseq_mrna") の位置情報objを自動取得するように変更しています。

    out <- getBM(attributes=param_attribute, mart=mart)
    dim(out)
    out[1:15,]
    dim(listFilters(mart))
    head(listFilters(mart))
    obj <- is.element(listFilters(mart)$name, c("with_ox_refseq_mrna", "refseq_mrna"))#書籍と違っているところ
    listFilters(mart)[obj,]                #書籍と違っているところ
    param_filter <- "refseq_mrna"
    	

    p80:

    2014年4月16日、R ver. 3.0.3では585078から450576となっていました。

    out <- getBM(attributes=param_attribute, filters=param_filter, values=list(TRUE), mart=mart)
    dim(out)
    out <- getBM(attributes=param_attribute, filters=param_filter, mart=mart)
    
    out <- getBM(attributes=param_attribute, mart=mart)
    dim(out)
    out <- subset(out, refseq_mrna != "")
    dim(out)
    out[1:10,]
    
    out <- getBM(attributes=param_attribute, mart=mart)
    dim(out)
    obj <- out[,1] != ""
    out <- out[obj,]
    dim(out)
    	

    書籍 | トランスクリプトーム解析 | 2.3.4 マッピング(準備)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp81-85のRコードです。 ここではデスクトップ上にmappingというフォルダを作成し、そこで作業を行うという前提です。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のmappingに移動し以下をコピペ。

    p81:

    enkichikan <- function(fa, p) {        #関数名や引数の作成
        t <- substring(fa, p, p)           #置換したい位置の塩基を取りだす
        t_c <- chartr("CGAT", "GCTA", t)   #置換後の塩基を作成
        substring(fa, p, p) <- t_c         #置換
        return(fa)                         #置換後のデータを返す
    }
    enkichikan("CCGTACG", 2)
    	

    p81-82の網掛け部分:

    サンプルデータ18とほぼ同じです。ref_genome.faと同じものができていると思います。

    out_f <- "ref_genome.fa"               #出力ファイル名を指定してout_fに格納
    param1 <- c(48, 160, 100, 123)         #配列長を指定
    narabi <- c("A","C","G","T")           #ACGTの並びを指定
    param2 <- c(28, 22, 26, 24)            #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param3 <- "chr"                        #FASTA形式ファイルのdescription部分を指定
    param4 <- 3                            #コピーを作成したい配列番号を指定
    param5 <- c(2, 7)                      #コピー先配列の塩基置換したい位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #chr1-4の生成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param2)         #文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param1)){            #length(param1)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param1[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam1[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #chr5の生成と塩基置換導入
    hoge <- c(hoge, hoge[param4])          #(param4)番目の配列をコピーして追加
    hoge[length(param1)+1] <- enkichikan(hoge[length(param1)+1], param5[1])#塩基置換
    hoge[length(param1)+1] <- enkichikan(hoge[length(param1)+1], param5[2])#塩基置換
    
    #ファイルに保存
    fasta <- DNAStringSet(hoge)            #DNAStringSetオブジェクトに変更
    names(fasta) <- paste(param3, 1:length(hoge), sep="")#description行を追加
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    p82:

    list.files()
    fasta
    width(fasta)
    names(fasta)
    fasta[5]
    	

    p83:

    DNAString_chartr <- function(fa, p) {  #関数名や引数の作成
      str_list <- as.character(fa)         #文字列に変更
      t <- substring(str_list, p, p)       #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(str_list, p, p) <- t_c     #置換
      fa_r <- DNAStringSet(str_list)       #DNAStringSetオブジェクトに戻す
      names(fa_r) <- names(fa)             #description部分の情報を追加
      return(fa_r)                         #置換後のデータを返す
    }
    	

    p83の網掛け部分:

    作業ディレクトリ中にref_genome.falist_sub3.txtが存在するという前提です。 sample_RNAseq1.faと同じものができていると思います。

    in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub3.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "sample_RNAseq1.fa"           #出力ファイル名を指定してout_fに格納
    param <- 4                             #最後のリードの塩基置換したい位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    
    #部分配列の抽出および最後のリードの塩基置換
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta[nrow(posi)] <- DNAString_chartr(fasta[nrow(posi)], param)#指定した位置の塩基置換を実行した結果をfastaに格納
    
    #ファイルに保存
    description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    p83下:

    dim(posi)
    posi
    	

    p84:

    list.files()
    fasta
    	

    p85の網掛け部分(上):

    single-endデータファイルの基本形です。mapping_single1.txtと同じものができていると思います。

    out_f <- "mapping_single1.txt"         #出力ファイル名を指定してout_fに格納
    param_FN <- "sample_RNAseq1.fa"        #マップしたいファイル名を指定
    param_SN <- "hoge1"                    #任意のサンプル名を指定
    out <- cbind(param_FN, param_SN)
    colnames(out) <- c("FileName", "SampleName")
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p85の網掛け部分(中):

    複数のsingle-endデータファイルの場合です。mapping_single2.txtと同じものができていると思います。

    out_f <- "mapping_single2.txt"         #出力ファイル名を指定してout_fに格納
    param_FN <- c("sample_RNAseq1.fa", "sample_RNAseq2.fa")#マップしたいファイル名を指定
    param_SN <- c("sample1", "sample2")    #任意のサンプル名を指定
    out <- cbind(param_FN, param_SN)
    colnames(out) <- c("FileName", "SampleName")
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p85の網掛け部分(下):

    paired-endデータファイルの基本形です。mapping_paired.txtと同じものができていると思います。

    out_f <- "mapping_paired.txt"          #出力ファイル名を指定してout_fに格納
    param_FN1 <- "sample_paired1.fq.gz"
    param_FN2 <- "sample_paired2.fq.gz"
    param_SN <- "uge"
    out <- cbind(param_FN1, param_FN2, param_SN)
    colnames(out) <- c("FileName1", "FileName2", "SampleName")
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    書籍 | トランスクリプトーム解析 | 2.3.5 マッピング(本番)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp86-90のRコードです。 ここではデスクトップ上にmappingというフォルダを作成し、そこで作業を行うという前提です。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のmappingに移動し以下をコピペ。

    p86の網掛け部分:

    作業ディレクトリ中にmapping_single1.txtref_genome.fa、およびsample_RNAseq1.faのみ存在するという前提です。

    in_f1 <- "mapping_single1.txt"         #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    library(QuasR)                         #パッケージの読み込み
    out <- qAlign(in_f1, in_f2, splicedAlignment=F)#マッピングを行うqAlign関数を実行した結果をoutに格納
    	

    p86下:

    list.files()
    out
    	

    p87上:

    out@alignments[,1]
    	

    p87の網掛け部分:

    R ver. 3.1.0とBioconductor ver. 2.14では、「エラー: 関数 "readGAlignments" を見つけることができませんでした」となりました。 readGAlignments関数はGenomicAlignmentsから提供されているので、 このパッケージに変更しています。

    library(GenomicAlignments)             #書籍と違っているところ
    tmpfname <- out@alignments[,1]
    for(i in 1:length(tmpfname)){
      hoge <- readGAlignments(tmpfname[i])
      hoge <- as.data.frame(hoge)
      tmp <- hoge[, c("seqnames","start","end")]
      out_f <- sub(".bam", ".bed", tmpfname[i])
      write.table(tmp,out_f,sep="\t",append=F,quote=F,row.names=F,col.names=F)
    }
    	

    p87下:

    list.files()
    	

    p88上:

    tmp
    	

    p88の網掛け部分:

    作業ディレクトリ中にmapping_single1.txtref_genome.fa、およびsample_RNAseq1.faのみ存在するという前提です。

    in_f1 <- "mapping_single1.txt"         #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param <- "-m 1 --best --strata -v 0"   #マッピング時のオプションを指定
    
    library(QuasR)                         #パッケージの読み込み
    out <- qAlign(in_f1, in_f2, splicedAlignment=F, alignmentParameter=param)
    	

    p88下:

    hoge <- readGAlignments(out@alignments[,1])
    as.data.frame(hoge)
    out@alignmentParameter
    	

    p89上:

    alignmentStats(out)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])
    qQCReport(out, pdfFilename=out_f)
    	

    p89の網掛け部分:

    ここではデスクトップ上にhumanというフォルダを作成し、そこで作業を行うという前提です。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のhumanに移動し以下をコピペ。

    mapping_single3.txtと同じものができていると思います。

    out_f <- "mapping_single3.txt"         #出力ファイル名を指定してout_fに格納
    param_FN <- c("SRR002324.fastq.gz", "SRR002322.fastq.gz")#マップしたいファイル名を指定
    param_SN <- c("Kidney", "Liver")       #任意のサンプル名を指定
    out <- cbind(param_FN, param_SN)
    colnames(out) <- c("FileName", "SampleName")
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p89下:

    getwd()
    	

    p90上:

    list.files()
    	

    p90の網掛け部分:

    作業ディレクトリ中にp89で作成したmapping_single3.txt、p73で取得した SRR002324.fastq.gzとSRR002322.fastq.gzの計3つのファイルが デスクトップ上のhumanフォルダ中に存在するという前提です。

    "BSgenome.Hsapiens.UCSC.hg19"の代わりに2013年12月にリリースされたGenome Reference Consortium GRCh38 ("BSgenome.Hsapiens.NCBI.GRCh38")を指定することもできます。 ただし、2014年4月16日以降にR ver. 3.1.0とBioconductor ver. 2.14をインストールしてあればの話です。

    in_f1 <- "mapping_single3.txt"         #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param <- "-m 1 --best --strata -v 2"   #マッピング時のオプションを指定
    ### マッピング ###
    library(QuasR)
    library(Rsamtools)
    time_s <- proc.time()                  #計算時間計測用(マッピング開始時間の記録)
    out <- qAlign(in_f1, in_f2, splicedAlignment=F, alignmentParameter=param)
    time_e <- proc.time()                  #計算時間計測用(マッピング終了時間の記録)
    ### QCレポート ###
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])
    qQCReport(out, pdfFilename=out_f)
    	

    p90下:

    alignmentStats(out)
    time_e - time_s
    	

    書籍 | トランスクリプトーム解析 | 2.3.6 カウントデータ取得

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp91-97のRコードです。 ここでは2.3.5に引き続いてデスクトップ上のhumanというフォルダ上で作業を行うという前提です。 いくつかコメントしてありますが、2014年4月17日にR ver. 3.1.0とBioconductor ver. 2.14をインストールしたノートPCで確認した結果です。 インストールの仕方についてはRのインストールと起動をごらんください。 いくつかの数値の違いは、Rのバージョンというのもあるでしょうし、取得先のデータベース側のバージョンにもよると思います。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のhumanに移動し以下をコピペ。

    p91の網掛け部分(上):

    library(GenomicFeatures)
    supportedUCSCtables()
    	

    p91の網掛け部分(中):

    2014年4月18日に表示結果を確認したところ、ヒトゲノムの最新版は Genome Reference Consortium GRCh38で"hg38"として利用可能なようですね。

    library(rtracklayer)
    ucscGenomes()
    	

    p91の網掛け部分(下):

    p90の網掛け部分で"BSgenome.Hsapiens.UCSC.hg19"の代わりに2013年12月にリリースされたGenome Reference Consortium GRCh38 ("BSgenome.Hsapiens.NCBI.GRCh38")を指定した場合は、"hg19"のところを"hg38"とすべきです。 5分程度かかります。

    param1 <- "hg19"
    param2 <- "ensGene"
    library(GenomicFeatures)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)
    	

    p91下:

    2014年4月18日、R ver. 3.1.0での転写物は204,940種類、exonは584,914領域となっていました。

    txdb
    	

    p92:

    2014年4月18日、R ver. 3.1.0でのdim(count)実行結果は「60234 3」でした。7分程度かかります。

    count <- qCount(out, txdb, reportLevel="gene")
    head(count)
    dim(count)
    	

    p92の網掛け部分:

    SRA000299_ensgene.txt(約1.5MB)と同じか似たものができていると思います。

    out_f <- "SRA000299_ensgene.txt"
    tmp <- cbind(rownames(count), count)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p93の網掛け部分:

    R ver. 3.1.0とBioconductor ver. 2.14では、「エラー: 関数 "readGAlignments" を見つけることができませんでした」となりました。 readGAlignments関数はGenomicAlignmentsから提供されているので、 このパッケージに変更しています。2分程度かかります。

    library(GenomicAlignments)             #書籍と違っているところ
    tmpfname <- out@alignments[,1]
    kidney <- readGAlignments(tmpfname[1])
    liver <- readGAlignments(tmpfname[2])
    merge <- c(kidney, liver)
    m <- reduce(granges(merge))
    	

    p93下:

    書籍中では最後の列の列名が"ngap"となっていましたが、R ver. 3.1.0とBioconductor ver. 2.14では"njunc"に変わっていますね。

    head(as.data.frame(kidney))
    head(as.data.frame(liver))
    	

    p94上:

    dim(as.data.frame(kidney))
    dim(as.data.frame(liver))
    dim(as.data.frame(m))
    head(as.data.frame(m))
    	

    p94の網掛け部分:

    1分強かかります。

    tmpsname <- out@alignments[,2]
    tmp <- as.data.frame(m)
    for(i in 1:length(tmpfname)){
      tmpcount <- summarizeOverlaps(m, tmpfname[i])
      count <- assays(tmpcount)$counts
      colnames(count) <- tmpsname[i]
      tmp <- cbind(tmp, count)
    }
    	

    p94下:

    tmpsname
    	

    p95上:

    head(tmp)
    dim(tmp)
    	

    p95の網掛け部分:

    SRA000299_granges.txt(約100MB)と同じか似たものができていると思います。3分程度かかります。

    out_f <- "SRA000299_granges.txt"
    tmpsname <- out@alignments[,2]
    h <- as.data.frame(m)
    tmp <- paste(h[,1],h[,2],h[,3],h[,4],h[,5], sep="_")
    for(i in 1:length(tmpfname)){
      tmpcount <- summarizeOverlaps(m, tmpfname[i])
      count <- assays(tmpcount)$counts
      colnames(count) <- tmpsname[i]
      tmp <- cbind(tmp, count)
    }
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p95下:

    head(tmp)
    dim(tmp)
    	

    p96の網掛け部分:

    書籍中のコード内では50の色が灰色になっていませんでしたm(_ _)m

    p90の網掛け部分で"BSgenome.Hsapiens.UCSC.hg19"の代わりに2013年12月にリリースされたGenome Reference Consortium GRCh38 ("BSgenome.Hsapiens.NCBI.GRCh38")を指定した場合は、ここも"BSgenome.Hsapiens.NCBI.GRCh38"とすべきです。

    SRA000299_seq.fa(約240MB)と同じか似たものができていると思います。2分弱かかります。

    out_f <- "SRA000299_seq.fa"
    param <- "BSgenome.Hsapiens.UCSC.hg19"
    library(param, character.only=T)
    tmp <- ls(paste("package", param, sep=":"))
    genome <- eval(parse(text=tmp))
    ### 配列取得およびファイル保存 ###
    fasta <- getSeq(genome, m)
    h <- as.data.frame(m)
    names(fasta) <- paste(h[,1],h[,2],h[,3],h[,4],h[,5], sep="_")
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)
    	

    p96下:

    head(fasta)
    head(names(fasta))
    head(width(fasta))
    	

    p97の網掛け部分:

    p96で作成したSRA000299_seq.faが存在するという前提です。 Rのバージョンなどによって得られる配列が異なるのでリンク先のファイルは参考程度です。 SRA000299_GC.txt(約165MB)と同じか似たものができていると思います。1分弱で終わります。

    in_f <- "SRA000299_seq.fa"
    out_f <- "SRA000299_GC.txt"
    library(Biostrings)
    fasta <- readDNAStringSet(in_f, format="fasta")
    ### GC含量計算本番 ###
    hoge <- alphabetFrequency(fasta)
    CG <- rowSums(hoge[,2:3])
    ACGT <- rowSums(hoge[,1:4])
    GC_content <- CG/ACGT
    tmp <- cbind(names(fasta), CG, ACGT, width(fasta), GC_content)
    colnames(tmp) <- c("description", "CG", "ACGT", "Length", "GC_content")
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)
    	

    p97下:

    head(tmp)
    	

    書籍 | トランスクリプトーム解析 | 3.3.1 解析目的別留意点

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp129-132のRコードです。 ここでは2.3.6に引き続いてデスクトップ上のhumanというフォルダ上で作業を行うという前提です。 いくつかコメントしてありますが、2014年4月17日にR ver. 3.1.0とBioconductor ver. 2.14をインストールしたノートPCで確認した結果です。 インストールの仕方についてはRのインストールと起動をごらんください。 いくつかの数値の違いは、Rのバージョンというのもあるでしょうし、取得先のデータベース側のバージョンにもよると思います。 したがって、「得られるファイル」や「入力ファイルのリンク先のもの」と「手持ちの入力ファイル」が多少異なっていても気にする必要はありません。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のhumanに移動し以下をコピペ。

    p130の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"human"という前提になっていますが、 p92で作成した配列長を含むカウントデータファイル(SRA000299_ensgene.txt; 約1.5MB)を置いてあるディレクトリであればどこでも構いません。

    in_f <- "SRA000299_ensgene.txt"
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    ### 配列長 vs. リード数の両対数プロット ###
    plot(data[,1:2], log="xy", xlab="Length", ylab="Count")
    grid(col="gray", lty="dotted")
    	

    p130:

    head(data, n=4)
    data <- data[data[,2] > 0, ]
    head(data, n=4)
    out <- lm(Kidney ~ width, data=log10(data))
    abline(out, col="gray", lwd=2, lty="solid")
    lines(lowess(data, f=0.2), col="gray", lwd=2, lty="dashed")
    	

    書籍 | トランスクリプトーム解析 | 3.3.2 データの正規化(基礎編)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp132-137のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のhumanに移動し以下をコピペ。

    p132の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"human"という前提になっていますが、 p92で作成した配列長を含むカウントデータファイル(SRA000299_ensgene.txt; 約1.5MB)を置いてあるディレクトリであればどこでも構いません。

    in_f <- "SRA000299_ensgene.txt"
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    ### 配列長lenとカウント情報countへの分割 ###
    len <- data[,1]
    count <- data[,-1]
    ### RPK補正のための遺伝子ごとの正規化係数nfの算出およびRPK正規化 ###
    nf <- 1000/len
    rpk <- sweep(count, 1, nf, "*")
    	

    p133:

    head(count, n=3)
    head(rpk, n=3)
    	

    p133の網掛け部分:

    fig3-22.pngと同じか似たものができていると思います。

    tmp <- cbind(len, rpk)
    plot(tmp[,1:2], log="xy", xlab="Length", ylab="RPK")# 図3-22作成部分
    grid(col="gray", lty="dotted")         # 図3-22作成部分(グリッド線を追加)
    tmp <- tmp[tmp[,2] > 0, ]
    out <- lm(Kidney ~ len, data=log10(tmp))
    abline(out, col="gray", lwd=2, lty="solid")
    lines(lowess(tmp[,1:2], f=0.2), col="gray", lwd=2, lty="dashed")
    	

    p134上:

    head(count)
    colSums(count)
    	

    p134の網掛け部分:

    ### RPM補正のためのサンプルごとの正規化係数nfの算出およびRPM正規化 ###
    nf <- 1000000/colSums(count)
    rpm <- sweep(count, 2, nf, "*")
    	

    p134下:

    nf
    head(rpm)
    	

    p135上:

    library(edgeR)
    rpm2 <- cpm(count)
    head(rpm2, n=3)
    	

    p135の網掛け部分:

    ### (3-2)式の定数を総リード数の平均で与える総リード数補正 ###
    nf <- mean(colSums(count))/colSums(count)
    normalized <- sweep(count, 2, nf, "*")
    	

    p135下:

    nf
    head(normalized, n=4)
    colSums(normalized)
    	

    p136の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"human"という前提になっていますが、 p92で作成した配列長を含むカウントデータファイル(SRA000299_ensgene.txt; 約1.5MB)を置いてあるディレクトリであればどこでも構いません。

    in_f <- "SRA000299_ensgene.txt"
    out_f <- "SRA000299_rpkm.txt"
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    ### 配列長lenとカウント情報countへの分割 ###
    len <- data[,1]
    count <- data[,-1]
    ### 遺伝子ごとの正規化係数nf_rpkの算出およびRPK正規化 ###
    nf_rpk <- 1000/len
    rpk <- sweep(count, 1, nf_rpk, "*")
    ### サンプルごとの正規化係数nf_rpmの算出およびrpkに対するRPM正規化 ###
    nf_rpm <- 1000000/colSums(count)
    rpkm <- sweep(rpk, 2, nf_rpm, "*")
    ### ファイルに保存 ###
    tmp <- cbind(rownames(rpkm), rpkm)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p136下:

    head(rpkm, n=4)
    	

    書籍 | トランスクリプトーム解析 | 3.3.3 クラスタリング

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp137-145のRコードです。 ここではデスクトップ上にrecountというフォルダを作成し、そこで作業を行うという前提です。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のrecountに移動し以下をコピペ。

    p138:

    書籍中では作業ディレクトリがデスクトップ上の"recount"という前提になっていますが、 ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011) から得られたbodymapのカウントデータファイル(bodymap_count_table.txt) およびラベル情報ファイル(bodymap_phenodata.txt)を置いてあるディレクトリであればどこでも構いません。

    getwd()
    list.files()
    	

    p138の網掛け部分:

    in_f <- "bodymap_count_table.txt"
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data.dist <- as.dist(1 - cor(data, method = "spearman"))
    out <- hclust(data.dist, method = "average")
    plot(out)                              # 図3-23作成部分
    	

    p138-139の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"recount"という前提になっていますが、 ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011) から得られたbodymapのカウントデータファイル(bodymap_count_table.txt; 約3.2MB) およびラベル情報ファイル(bodymap_phenodata.txt)を置いてあるディレクトリであればどこでも構いません。

    in_f1 <- "bodymap_count_table.txt"
    in_f2 <- "bodymap_phenodata.txt"
    ### ファイルの読み込み ###
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")
    phenotype <- read.table(in_f2, header=TRUE, row.names=1, sep=" ", quote="")
    ### dataオブジェクトの列名を変更 ###
    colnames(data) <- phenotype$tissue.type
    ### サンプル間クラスタリング ###
    data.dist <- as.dist(1 - cor(data, method = "spearman"))
    out <- hclust(data.dist, method = "average")
    plot(out)                              # 図3-24作成部分
    	

    p139下:

    log2(0)
    dim(data)
    sum(data == 0)
    sum(data == 0)/(52580*19)
    	

    p140上:

    obj <- rowSums(data) != 0
    dim(data[obj,])
    
    sum(data[obj,] == 0)
    sum(data[obj,] == 0)/(13131*19)
    	

    p140の網掛け部分:

    data.dist <- as.dist(1 - cor(data[obj,], method = "spearman"))
    out <- hclust(data.dist, method = "average")
    plot(out)                              # 図3-25作成部分
    	

    p140下:

    hoge <- data == 0
    apply(hoge, 2, sum)
    	

    p141:

    hoge <- apply(data, 2, rank)
    apply(hoge, 2, min)
    
    hoge <- apply(data[obj,], 2, rank)
    apply(hoge, 2, min)
    	

    p142上:

    sum(rowSums(data) == 0)
    sum(rowSums(data) == 1)
    sum(rowSums(data) == 2)
    	

    p142の網掛け部分:

    ### RPM補正のためのサンプルごとの正規化係数nfの算出およびRPM正規化 ###
    nf <- 1000000/colSums(data)
    rpm <- sweep(data, 2, nf, "*")
    ### RPM補正値の総和が1以下の遺伝子を除去(1よりも大きいものを残す) ###
    obj <- rowSums(data) > 1
    dim(rpm[obj,])
    	

    p143:

    colSums(data)
    nf*19
    	

    p143-144の網掛け部分:

    in_f1 <- "bodymap_count_table.txt"
    in_f2 <- "bodymap_phenodata.txt"
    ### ファイルの読み込み ###
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")
    phenotype <- read.table(in_f2, header=TRUE, row.names=1, sep=" ", quote="")
    ### dataオブジェクトの列名を変更 ###
    colnames(data) <- phenotype$tissue.type
    ### フィルタリング(総カウント数が0でなく、ユニークな発現パターンをもつもののみ) ###
    obj <- rowSums(data) != 0
    hoge <- unique(data[obj,])
    ### クラスタリング ###
    data.dist <- as.dist(1 - cor(hoge, method = "spearman"))
    out <- hclust(data.dist, method = "average")
    plot(out)
    	

    p144下:

    dim(data[obj,])
    dim(unique(data[obj,]))
    dim(hoge)
    dim(unique(data))
    
    dim(unique(rpm))
    length(intersect(rownames(unique(rpm)), rownames(unique(data))))
    setequal(rownames(unique(rpm)), rownames(unique(data)))
    length(setdiff(rownames(unique(rpm)), rownames(unique(data))))
    length(union(rownames(unique(rpm)), rownames(unique(data))))
    	

    書籍 | トランスクリプトーム解析 | 3.3.4 各種プロット

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp145-165のRコードです。 ここではデスクトップ上にrecountというフォルダを作成し、そこで作業を行うという前提です。

    「ファイル」−「ディレクトリの変更」でデスクトップ上のrecountに移動し以下をコピペ。

    p145-146の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"recount"という前提になっていますが、 ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011) から得られたbodymapのカウントデータファイル(bodymap_count_table.txt; 約3.2MB) を置いてあるディレクトリであればどこでも構いません。

    なお、灰色の水平線はM = 0.08で限りなく0に近い値なので、見えづらくなっています。

    in_f <- "bodymap_count_table.txt"
    ### ファイルの読み込みと列名変更 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    colnames(data)[11:13] <- c("mixture1", "mixture2", "mixture3")
    ### RPM正規化およびlog2変換 ###
    nf <- 1000000/colSums(data)
    rpm <- sweep(data, 2, nf, "*")
    logged <- log(rpm, base=2)
    ### M-A plot ###
    M <- logged$mixture2 - logged$mixture1
    A <- (logged$mixture2 + logged$mixture1)/2
    plot(A, M)                             # 図3-26作成部分
    grid(col="gray", lty="dotted")         # 図3-26作成部分(グリッド線を追加)
    abline(h=median(M, na.rm=TRUE), col="gray", lwd=1)
    	

    p146下:

    行列dataの11列目と12列目がmixture1とmixture2だということがわかっているという前提です。

    hoge <- data[,11:12]
    head(hoge, n=4)
    obj <- (hoge[,1] == 1) & (hoge[,2] >= 1)
    sum(obj)
    head(hoge[obj,], n=3)
    	

    p147:

    書籍中ではcol="gray"となっていますが、図3-27は塗りつぶし黒三角になっていますので、正しくはcol="black"ですm(_ _)m

    points(A[obj], M[obj], col="black", pch=17)# 図3-27作成部分。書籍と違っているところ
    head(rpm[obj,11:12])
    head(log2(rpm[obj,11:12]))
    head(cbind(A[obj], M[obj]))
    	

    p148:

    median(M, na.rm=TRUE)
    2^median(M, na.rm=TRUE)
    median(rpm$mixture2/rpm$mixture1, na.rm=TRUE)
    median(data$mixture2/data$mixture1, na.rm=TRUE)
    
    colSums(data[,11:13])
    sum(data[,12])/sum(data[,11])
    	

    p149の網掛け部分:

    in_f <- "bodymap_count_table.txt"
    ### ファイルの読み込みと列名変更 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    colnames(data)[11:13] <- c("mixture1", "mixture2", "mixture3")
    ### log2変換 ###
    logged <- log(data, base=2)
    ### M-A plot ###
    M <- logged$mixture2 - logged$mixture1
    A <- (logged$mixture2 + logged$mixture1)/2
    plot(A, M)                             # 図3-28作成部分
    grid(col="gray", lty="dotted")         # 図3-28作成部分(グリッド線を追加)
    abline(h=median(M, na.rm=TRUE), col="gray", lwd=1)
    	

    p150:

    median(M, na.rm=TRUE)
    log2(median(data$mixture2/data$mixture1, na.rm=TRUE))
    log2(1.96)
    	

    p150の網掛け部分:

    in_f <- "bodymap_count_table.txt"
    ### ファイルの読み込みおよび列名変更 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    colnames(data)[11:13] <- c("mixture1", "mixture2", "mixture3")
    ### サブセットの抽出、G1群を1、G2群を2としたベクトルの作成 ###
    data <- data[,11:12]
    data.cl <- c(1,2)
    ### TCCパッケージを用いたM-A plot ###
    library(TCC)
    tcc <- new("TCC", data, data.cl)
    plot(tcc, normalize=T)                 # 図3-29作成部分
    	

    p151:

    tcc
    normalized <- getNormalizedData(tcc)
    head(normalized, n=4)
    summary(normalized)
    	

    p152:

    colSums(normalized)
    
    obj <- (normalized[,1] == 0) & (normalized[,2] > 0)
    head(normalized[obj,], n=4)
    dim(normalized[obj,])
    nrow(normalized[obj,])
    M <- log2(normalized[,2]) - log2(normalized[,1])
    summary(M[obj])
    
    obj1 <- normalized[,1] != 0
    min(normalized[obj1,1])
    normalized[!obj1,1] <- 1.426567
    head(normalized[obj,], n=4)
    	

    p153:

    「...必要性はない。」ではなく「...必要はない。」ですねm(_ _)m

    M <- log2(normalized[,2]) - log2(normalized[,1])
    summary(M[obj])
    max(M[obj])
    	

    p154の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"recount"という前提になっていますが、 ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011) から得られたmaqcのカウントデータファイル(maqc_count_table.txt; 約2.3MB) を置いてあるディレクトリであればどこでも構いません。

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込みとラベル情報の作成 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data.cl <- c(1,2)
    ### TCCパッケージを用いたM-A plot ###
    library(TCC)
    tcc <- new("TCC", data[,c(4,7)], data.cl)
    plot(tcc, normalize=T, median.lines=T) # 図3-30作成部分
    legend("bottomright",c("G1:brain4","G2:brain7"))# 図3-30作成部分
    	

    p155の網掛け部分:

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込みとラベル情報の作成 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data.cl <- c(1,1,1,2,2,2)
    ### TCCパッケージを用いたM-A plot ###
    library(TCC)
    tcc <- new("TCC", data[,9:14], data.cl)
    plot(tcc, normalize=T, median.lines=T, ylim=c(-3.2, 3.2))# 図3-31作成部分
    legend("bottomright",c("G1:UHR2-4","G2:UHR5-7"))# 図3-31作成部分
    	

    p156の網掛け部分:

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込みとラベル情報の作成 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data.cl <- c(1,1,1,2,2,2)
    ### TCCパッケージを用いたM-A plot ###
    library(TCC)
    tcc <- new("TCC", data[,c(1,2,3,8,9,10)], data.cl)
    plot(tcc, normalize=T, median.lines=T, ylim=c(-11, 11))# 図3-32作成部分
    legend("bottomright",c("G1:brain1-3","G2:UHR1-3"))# 図3-32作成部分
    	

    p157の網掛け部分:

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込みとラベル情報の作成 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    library(TCC) 
    ### M-A plot (brain1-7 対 UHR1-7) ###
    tcc <- new("TCC", data, c(rep(1, 7), rep(2, 7)))
    plot(tcc,normalize=T,ylim=c(-11,11),xlim=c(-4,15),col="black",ann=F)
    ### M-A plot (brain1-3 対 brain4-6) ###
    par(new=T)
    tcc <- new("TCC", data[,1:6], c(rep(1, 3), rep(2, 3)))
    plot(tcc,normalize=T,ylim=c(-11,11),xlim=c(-4,15),col="gray",ann=F)
    ### M-A plot (UHR1-3 対 UHR4-6) ###
    par(new=T)
    tcc <- new("TCC", data[,8:13], c(rep(1, 3), rep(2, 3)))
    plot(tcc,normalize=T,ylim=c(-11,11),xlim=c(-4,15),col="gray")
    ### Legend ###
    legend("topright",c("b1-7 vs U1-7", "b1-3 vs b4-6", "U1-3 vs U4-6"), col=c("black", "gray", "gray"), pch=20)
    	

    p157-158の網掛け部分:

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込みとラベル情報の変更 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    colnames(data) <- c(rep("brain",7), rep("UHR",7))
    ### フィルタリング(総カウント数が0でなく、ユニークな発現パターンをもつもののみ) ###
    obj <- rowSums(data) != 0
    hoge <- unique(data[obj,])
    ### サンプル間クラスタリング ###
    data.dist <- as.dist(1 - cor(hoge, method = "spearman"))
    out <- hclust(data.dist, method = "average")
    plot(out)                              # 図3-34作成部分
    	

    p157-158の網掛け部分を実行する別の手段(おまけ):

    以下に示すように、TCC ver. 1.4.0以降で clusterSample関数を用いて実行することもできます。
    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込みとラベル情報の変更 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    colnames(data) <- c(rep("brain",7), rep("UHR",7))
    ### TCCパッケージを用いたサンプル間クラスタリング ###
    library(TCC)
    out <- clusterSample(data, dist.method="spearman",
                            hclust.method="average", unique.pattern=TRUE)
    plot(out)                              # 図3-34作成部分
    	

    p158の網掛け部分(下):

    plot関数中のcex=.1は拡大率に関するものであり、大きさを標準の0.1倍にするという意味です。

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込み、サブセットの抽出、総リード数補正 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data <- data[,1:7]
    nf <- mean(colSums(data))/colSums(data)
    hoge <- sweep(data, 2, nf, "*")
    ### 平均-分散プロット ###
    MEAN <- apply(hoge, 1, mean)
    VARIANCE <- apply(hoge, 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,# 図3-35作成部分
         xlim=c(1e-01, 1e+05), ylim=c(1e-01, 1e+05), col="black")# 図3-35作成部分
    grid(col="gray", lty="dotted")         # 図3-35作成部分
    abline(a=0, b=1, col="gray")           # 図3-35作成部分
    	

    p159:

    set.seed(1000)
    ransuu <- rpois(n=8, lambda=100)
    ransuu
    mean(ransuu)
    var(ransuu)
    ransuu <- rpois(n=10000, lambda=100)
    mean(ransuu)
    	

    p160:

    rpois関数実行結果の数値が若干異なっていますが、 基本的に乱数生成結果なので気にする必要はありません。

    var(ransuu)
    head(MEAN)
    length(MEAN)
    rpois(n=7, lambda=MEAN[1])
    rpois(n=7, lambda=MEAN[2])
    rpois(n=7, lambda=MEAN[3])
    	

    p160-161の網掛け部分:

    plot関数中のlog="xy"は、x軸y軸ともに対数でプロットするという指令です。

    ### 乱数行列の作成 ###
    simulated <- NULL
    for(i in 1:length(MEAN)){
        simulated <- rbind(simulated, rpois(n=7, lambda=MEAN[i]))
    }
    ### 平均-分散プロット ###
    MEAN <- apply(simulated, 1, mean)
    VARIANCE <- apply(simulated, 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,# 図3-36作成部分
         xlim=c(1e-01, 1e+05), ylim=c(1e-01, 1e+05), col="black")# 図3-36作成部分
    grid(col="gray", lty="dotted")         # 図3-36作成部分
    abline(a=0, b=1, col="gray")           # 図3-36作成部分
    	

    p161-162の網掛け部分:

    plot関数中のlog="xy"は、x軸y軸ともに対数でプロットするという指令です。図3-37です。

    in_f <- "maqc_count_table.txt"
    ### ファイルの読み込み、総リード数補正 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    nf <- mean(colSums(data))/colSums(data)
    hoge <- sweep(data, 2, nf, "*")
    ### 平均-分散プロット(brain群とUHR群のデータを一緒にして計算) ###
    MEAN <- apply(hoge, 1, mean)
    VARIANCE <- apply(hoge, 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,
         xlim=c(1e-01, 1e+07), ylim=c(1e-01, 1e+07), col="black")
    ### 平均-分散プロット(brain群のみのデータで計算) ###
    par(new=T)
    MEAN <- apply(hoge[,1:7], 1, mean)
    VARIANCE <- apply(hoge[,1:7], 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,
         xlim=c(1e-01, 1e+07), ylim=c(1e-01, 1e+07), col="gray")
    ### Legendなど ###
    grid(col="gray", lty="dotted")
    abline(a=0, b=1, col="gray")
    legend("bottomright",c("brain+UHR", "brain only"), 
    col=c("black", "gray"), pch=20)
    	

    p162-163の網掛け部分:

    書籍中では作業ディレクトリがデスクトップ上の"recount"という前提になっていますが、 ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011) から得られたgiladのカウントデータファイル(gilad_count_table.txt; 約1.5MB) を置いてあるディレクトリであればどこでも構いません。図3-38です。

    in_f <- "gilad_count_table.txt"
    ### ファイルの読み込み、サブセットの抽出、総リード数補正 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data <- data[,1:3]
    nf <- mean(colSums(data))/colSums(data)
    hoge <- sweep(data, 2, nf, "*")
    ### 平均-分散プロット ###
    MEAN <- apply(hoge, 1, mean)
    VARIANCE <- apply(hoge, 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,
         xlim=c(1e-01, 1e+07), ylim=c(1e-01, 1e+07), col="black")
    grid(col="gray", lty="dotted")
    abline(a=0, b=1, col="gray")
    	

    p165の網掛け部分:

    図3-39です。

    in_f <- "gilad_count_table.txt"
    ### ファイルの読み込み、総リード数補正 ###
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    nf <- mean(colSums(data))/colSums(data)
    hoge <- sweep(data, 2, nf, "*")
    ### 平均-分散プロット(male群とfemale群のデータを一緒にして計算) ###
    MEAN <- apply(hoge, 1, mean)
    VARIANCE <- apply(hoge, 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,
         xlim=c(1e-01, 1e+07), ylim=c(1e-01, 1e+07), col="black")
    ### 平均-分散プロット(female群のみのデータで計算) ###
    par(new=T)
    MEAN <- apply(hoge[,4:6], 1, mean)
    VARIANCE <- apply(hoge[,4:6], 1, var)
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,
         xlim=c(1e-01, 1e+07), ylim=c(1e-01, 1e+07), col="gray")
    ### Legendなど ###
    grid(col="gray", lty="dotted")
    abline(a=0, b=1, col="gray")
    legend("bottomright",c("male+female", "female only"), col=c("black", "gray"), pch=20)
    	

    書籍 | トランスクリプトーム解析 | 4.3.1 シミュレーションデータ(負の二項分布)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp188-196のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p189:

    「1setwd("C:/Users/kadota/Desktop/")」とsetwd関数の前に1が入っていますが間違いですm(_ _)m。 原稿校正時に混入したものと思われます。

    set.seed(100)
    	

    p189-190の網掛け部分:

    out_f <- "hypoData1.txt"               #出力ファイル名を指定してout_fに格納
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, 
                       DEG.assign=c(0.5, 0.5), replicates=c(5, 5))
    data <- tcc$count
    ### ファイルに保存 ###
    tmp <- cbind(rownames(data), data)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p190:

    dim(data)
    
    head(data, n=3)
    
    set.seed(100)
    	

    p190-191の網掛け部分:

    図4-7です。

    out_f <- "fig4-7.png"                  #出力ファイル名を指定してout_fに格納
    param_fig <- c(400, 350)               #ファイル出力時の横幅と縦幅を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(0.5, 0.5),
                       DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plotFCPseudocolor(tcc)
    dev.off()
    	

    p191:

    str(tcc$simulation)
    dim(tcc$simulation$DEG.foldchange)
    head(tcc$simulation$DEG.foldchange, n=3)
    	

    p192:

    set.seed(100)
    	

    p192の網掛け部分:

    図4-8です。

    out_f <- "fig4-8.png"                  #出力ファイル名を指定してout_fに格納
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(0.5, 0.5),
                       DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plot(tcc, normalize=TRUE, median.lines=TRUE)
    ### Legend ###
    legend("bottomright",c("nonDEG","DEG(G1)","DEG(G2)"), pch=c(20,20,20),
          col=c("black","blue","red"))
    dev.off()
    	

    p193:

    colSums(tcc$count)
    mean(colSums(tcc$count))
    normalized <- getNormalizedData(tcc)
    colSums(normalized)
    
    data.cl <- tcc$group$group
    logged <- log2(normalized[1:2000,])
    mean_G1 <- apply(as.matrix(logged[,data.cl==1]), 1, mean)
    mean_G2 <- apply(as.matrix(logged[,data.cl==2]), 1, mean)
    M <- mean_G2 - mean_G1
    length(M)
    M <- M[is.finite(M)]
    length(M)
    median(M)
    
    set.seed(100)
    	

    p194の網掛け部分(上):

    図4-9です。

    out_f <- "fig4-9.png"                  #出力ファイル名を指定してout_fに格納
    param_fig <- c(400, 350)               #ファイル出力時の横幅と縦幅を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(1.0, 0.0),
                       DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plotFCPseudocolor(tcc)
    dev.off()
    	

    p194(中):

    set.seed(100)
    	

    p194の網掛け部分(下):

    図4-10です。

    out_f <- "fig4-10.png"                 #出力ファイル名を指定してout_fに格納
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(1.0, 0.0),
                       DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plot(tcc, normalize=TRUE, median.lines=TRUE)
    ### Legend ###
    legend("bottomright",c("nonDEG","DEG(G1)","DEG(G2)"), pch=c(20,20,20), col=c("black","blue","red"))
    dev.off()
    	

    p195:

    書籍中のtcc実行結果では、Count:のところは表示させていません。

    colSums(tcc$count)
    tcc
    	

    書籍 | トランスクリプトーム解析 | 4.3.2 データの正規化(応用編)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp196-201のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p196:

    set.seed(100)
    	

    p196-197の網掛け部分:

    図4-11です。

    out_f <- "fig4-11.png"                 #出力ファイル名を指定してout_fに格納
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(1.0, 0.0),
                        DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### TMM正規化 ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plot(tcc, normalize=TRUE, median.lines=TRUE)
    ### Legend ###
    legend("bottomright",c("nonDEG","DEG(G1)","DEG(G2)"), pch=c(20,20,20),
          col=c("black","blue","red"))
    dev.off()
    	

    p197:

    tcc
    	

    p198:

    2092584 * 0.8391182
    
    data.cl <- tcc$group$group
    data <- tcc$count
    	

    p198の網掛け部分:

    図4-12です。

    out_f <- "fig4-12.png"                 #出力ファイル名を指定してout_fに格納
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    ### TMM正規化 ###
    library(edgeR)
    d <- DGEList(counts=data, group=data.cl)
    d <- calcNormFactors(d)
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plotSmear(d)
    dev.off()
    	

    p200:

    set.seed(100)
    	

    p200の網掛け部分:

    図4-13です。

    out_f <- "fig4-13.png"                 #出力ファイル名を指定してout_fに格納
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(1.0, 0.0),
    DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### iDEGES/edgeR正規化 ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",
                           iteration=3, FDR=0.1, floorPDEG=0.05)
    ### ファイルに保存 ###
    png(out_f, width=param_fig[1], height=param_fig[2])
    plot(tcc, normalize=TRUE, median.lines=TRUE)
    ### Legend ###
    legend("bottomright",c("nonDEG","DEG(G1)","DEG(G2)"), pch=c(20,20,20),
           col=c("black","blue","red"))
    dev.off()
    	

    書籍 | トランスクリプトーム解析 | 4.3.3 2群間比較

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp201-208のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p201:

    set.seed(100)
    	

    p201-202の網掛け部分:

    out_f <- "res_biased_TCC_DEG.txt"      #出力ファイル名を指定してout_fに格納
    param_FDR <- 0.05                      #DEG検出時のFDR閾値を指定
    ### シミュレーションデータの作成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(1.0, 0.0),
                       DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### DEG検出(iDEGES/edgeR-edgeR) ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",
                           iteration=3, FDR=0.1, floorPDEG=0.05)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)
    result <- getResult(tcc, sort=FALSE)
    ### ファイルに保存 ###
    tmp <- cbind(rownames(tcc$count), tcc$count, result)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p202:

    2014年4月27日、R ver. 3.1.0で実行したときには入力データが同じ場合でも若干得られる結果が変わっていました(2864個から2865個など)が、 内部的に利用しているedgeRのデフォルトオプションの変更など結果が異なりうる様々な要因が存在しますので、 あまり気にする必要はありません。

    head(result)
    sum(result$q.value < 0.05)
    sum(result$estimatedDEG)
    head(p.adjust(result$p.value, method="BH"), n=4)
    
    tcc$count["gene_96",]
    	

    p203:

    result[96,]
    	

    p203の網掛け部分:

    図4-14です。p201の結果を保持しているという前提です。

    out_f <- "fig4-14.png"                 #出力ファイル名を指定してout_fに格納
    param_FDR <- 0.05                      #DEG検出時のFDR閾値を指定
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])
    plot(tcc, FDR=param_FDR, col=c("black","gray"))
    ### Legend ###
    legend("topright", c("non-DEG",paste("DEG(FDR<", param_FDR, ")", sep="")),
           col=c("black", "gray"), pch=16)
    dev.off()
    	

    p204:

    head(tcc$simulation$trueDEG)
    table(tcc$simulation$trueDEG)
    head(rank(tcc$stat$p.value))
    	

    p204の網掛け部分:

    図4-15です。p201の結果を保持しているという前提です。 ROC パッケージで提供されているrocdemo.sca関数をlibrary(TCC)のみで利用できているのは、 TCCパッケージ読み込み時に内部的に用いる他のパッケージも同時に読み込んでいるからです。 これがTCCリンク先のDetailsのところの 「Depends: ..., DESeq, DESeq2, edgeR, baySeq, ROC」の意味です。

    out_f <- "fig4-15.png"                 #出力ファイル名を指定してout_fに格納
    param_fig <- c(400, 400)               #ファイル出力時の横幅と縦幅を指定
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])
    roc <- rocdemo.sca(truth = as.numeric(tcc$simulation$trueDEG != 0),
               data = -rank(tcc$stat$p.value))
    plot(roc, xlab="1-specificity", ylab="sensitivity", cex.lab=1.4)
    grid(col="gray", lty="dotted")
    dev.off()
    	

    p205:

    calcAUCValue(tcc)
    AUC(roc)
    
    set.seed(100)
    	

    p205-206の網掛け部分:

    書籍中のコードのままでは、estimateDE関数実行部分で存在しないparam_FDRを与えているためエラーが出ます。 そのため、以下ではFDR=param_FDRというオプション部分を削除しています。 なお、該当部分は結果にはなんら影響しません。理由はFDRはDEGと判定する閾値を与えているだけであり、 ここで行っているのは閾値とは関係ない発現変動順にランキングした結果のAUC値で評価しているからです。

    ### シミュレーションデータ生成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 12500, PDEG = 0.32, DEG.assign=c(1.0, 0.0),
    DEG.foldchange=c(4, 4), replicates=c(5, 5))
    ### TCC中のiDEGES/edgeR-edgeRによる解析 ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",
                           iteration=3, FDR=0.1, floorPDEG=0.05)
    tcc <- estimateDE(tcc, test.method="edger")#書籍と違っているところ
    AUC_TCC <- calcAUCValue(tcc)
    ### samr中のSAMseq法による解析 ###
    library(samr)
    data <- tcc$count
    data.cl <- tcc$group$group
    out <- SAMseq(data, data.cl, resp.type="Two class unpaired")
    p.value <- samr.pvalues.from.perms(out$samr.obj$tt, out$samr.obj$ttstar)
    roc <- rocdemo.sca(truth = as.numeric(tcc$simulation$trueDEG != 0),
               data = -rank(p.value))
    AUC_SAMseq <- AUC(roc)
    	

    p206:

    AUC_TCC
    AUC_SAMseq
    
    set.seed(100)
    	

    p206の網掛け部分(下):

    out_f <- "hypoData2.txt"               #出力ファイル名を指定してout_fに格納
    ### シミュレーションデータ生成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.20, DEG.foldchange=c(5, 3),
                       DEG.assign=c(0.8, 0.2), replicates=c(1, 1))
    data <- tcc$count
    ### ファイルに保存 ###
    tmp <- cbind(rownames(data), data)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p206下:

    dim(data)
    head(data, n=3)
    	

    p207上:

    1行ずつ独立に実行しましょう。plotFCPseudocolor(tcc)実行時に 「 以下にエラー plot.new() : figure margins too large」 となってしまったら、R Graphics画面の横幅を広げてからもう一度トライしましょう。

    plot(tcc, normalize=TRUE)
    
    plotFCPseudocolor(tcc)
    	

    p207の網掛け部分:

    p206で作成したhypoData2.txtが入力です。

    in_f <- "hypoData2.txt"                #入力ファイル名を指定してin_fに格納
    out_f <- "res_hypoData2.txt"           #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のFDR閾値を指定
    ### 入力ファイルの読み込み、TCCクラスオブジェクトの作成 ###
    library(TCC)
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))
    tcc <- new("TCC", data, data.cl)
    ### DEG検出(iDEGES/DESeq-DESeq) ###
    tcc <- calcNormFactors(tcc, norm.method="deseq", test.method="deseq",
                           iteration=3, FDR=0.1, floorPDEG=0.05)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)
    result <- getResult(tcc, sort=FALSE)
    ### ファイルに保存 ###
    tmp <- cbind(rownames(tcc$count), tcc$count, result)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p207下:

    head(result)
    	

    p208:

    sum(result$estimatedDEG == 1)
    sum(result$q.value < 0.05)
    sum(result$q.value < 0.50)
    	

    p208の網掛け部分:

    p207に引き続きて行うことを前提としています。図4-16です。

    out_f <- "fig4-16.png"                 #出力ファイル名を指定してout_fに格納
    param_DEG <- 500                       #上位遺伝子数を指定
    param_fig <- c(450, 350)               #ファイル出力時の横幅と縦幅を指定
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])
    obj <- as.numeric(tcc$stat$rank <= param_DEG) + 1
    plot(tcc, col.tag=obj, col=c("black","gray"))
    legend("topright", c("non-DEG",paste("DEG(Top", param_DEG, ")", sep="")),
           col=c("black", "gray"), pch=16)
    dev.off()
    	

    書籍 | トランスクリプトーム解析 | 4.3.4 他の実験デザイン(3群間)

    シリーズ Useful R 第7巻 トランスクリプトーム解析のp209-213のRコードです。

    「ファイル」−「ディレクトリの変更」でデスクトップに移動し以下をコピペ。

    p209:

    set.seed(100)と網掛け部分の間に「dim(data)とhead(data, n=3)」が混入しています。 これは本来網掛け部分実行後に得られるものなので間違いですm(_ _)m

    set.seed(100)
    	

    p209の網掛け部分:

    図4-17です。hypoData3.txtfig4-17.png が作成されます。

    out_f1 <- "hypoData3.txt"              #出力ファイル名を指定してout_f1に格納
    out_f2 <- "fig4-17.png"                #出力ファイル名を指定してout_f2に格納
    ### シミュレーションデータ生成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 10012, PDEG = 0.28, replicates=c(2,3,2),
                  DEG.assign=c(0.6,0.15,0.25), DEG.foldchange=c(5,3,0.4))
    data <- tcc$count
    ### ファイルに保存(カウントデータ) ###
    tmp <- cbind(rownames(data), data)
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)
    ### ファイルに保存(pseudo-colorイメージ) ###
    png(out_f2, width=450, height=350)
    plotFCPseudocolor(tcc)
    dev.off()
    	

    p209下:

    dim(data)
    	

    p210上:

    head(data, n=3)
    	

    p210の網掛け部分:

    p209で作成したhypoData3.txtが入力です。

    in_f <- "hypoData3.txt"                #入力ファイル名を指定してin_fに格納
    out_f <- "res_hypoData3.txt"           #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 2                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のFDR閾値を指定
    ### 入力ファイルの読み込み、TCCクラスオブジェクトの作成 ###
    library(TCC)
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")
    data.cl <- c(rep(1, param_G1), rep(2, param_G2) , rep(3, param_G3))
    tcc <- new("TCC", data, data.cl)
    ### DEG検出(iDEGES/edgeR-edgeR) ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",
                           iteration=3, FDR=0.1, floorPDEG=0.05)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)
    result <- getResult(tcc, sort=FALSE)
    ### ファイルに保存 ###
    tmp <- cbind(rownames(tcc$count), tcc$count, result)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)
    	

    p211:

    2014年4月28日、R ver. 3.1.0で実行したときには入力データが同じ場合でも若干得られる結果が変わっていましたが、 内部的に利用しているedgeRのデフォルトオプションの変更など結果が異なりうる様々な要因が存在しますので、 あまり気にする必要はありません。

    head(result)
    
    sum(tcc$stat$q.value < 0.05)
    sum(tcc$stat$q.value < 0.10)
    
    set.seed(100)
    	

    p211-212の網掛け部分:

    ### シミュレーションデータ生成 ###
    library(TCC)
    tcc <- simulateReadCounts(Ngene = 10012, PDEG = 0.28, replicates=c(2,3,2),
                  DEG.assign=c(0.6,0.15,0.25), DEG.foldchange=c(5,3,0.4))
    ### TCC中のiDEGES/edgeR-edgeRによる解析 ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",
                          iteration=3, FDR=0.1, floorPDEG=0.05)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)
    roc_tcc <- rocdemo.sca(truth = as.numeric(tcc$simulation$trueDEG != 0),
                          data = -tcc$stat$rank)
    AUC_tcc <- calcAUCValue(tcc)
    ### edgeRによる解析(TCC中の関数利用) ###
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",
                          iteration=0, FDR=0.1, floorPDEG=0.05)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)
    roc_edger <- rocdemo.sca(truth = as.numeric(tcc$simulation$trueDEG != 0),
                          data = -tcc$stat$rank)
    AUC_edger <- calcAUCValue(tcc)
    	

    p212:

    AUC_tcc
    AUC_edger
    	

    p212の網掛け部分(下):

    図4-18です。先にedgeRのROC曲線を描いたのち、TCCの結果を描いています。

    out_f <- "fig4-18.png"                 #出力ファイル名を指定してout_fに格納
    param_fig <- c(400, 400)               #ファイル出力時の横幅と縦幅を指定
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])
    plot(roc_edger, col="gray", ann=F)
    par(new=T)
    plot(roc_tcc, col="black", xlab="1-specificity", ylab="sensitivity", cex.lab=1.3)
    grid(col="gray", lty="dotted")
    legend("bottomright", c("TCC","edgeR"),col=c("black","gray"), lty="solid")
    dev.off()
    	

    書籍 | 日本乳酸菌学会誌 | 第1回イントロダクション

    日本乳酸菌学会誌の第1回分(原稿PDF)です。

    要約:

    Rでゲノム解析:

    ソフトウェアRを起動し、「ファイル」−「ディレクトリの変更」で解析したいファイル("Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa")を置いてあるディレクトリに移動し以下をコピペ。

    このウェブページ中の「イントロ | NGS | 読み込み | FASTA形式 | 基本情報を取得」の5.と基本的に同じです。 2014年8月16日にN50計算のところを丁寧に書き直しました。

    in_f <- "Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa"#入力ファイル名を指定してin_fに格納
    out_f <- "result_JSLAB1.txt"           #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(基本情報取得)
    Total_len <- sum(width(fasta))         #コンティグの「トータルの長さ」を取得
    Number_of_contigs <- length(fasta)     #「コンティグ数」を取得
    Average_len <- mean(width(fasta))      #コンティグの「平均長」を取得
    Median_len <- median(width(fasta))     #コンティグの「中央値」を取得
    Max_len <- max(width(fasta))           #コンティグの長さの「最大値」を取得
    Min_len <- min(width(fasta))           #コンティグの長さの「最小値」を取得
    
    #本番(N50情報取得)
    sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
    obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
    N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納
    
    #本番(GC含量情報取得)
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得
    
    #ファイルに保存
    tmp <- NULL
    tmp <- rbind(tmp, c("Total length (bp)", Total_len))
    tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
    tmp <- rbind(tmp, c("Average length", Average_len))
    tmp <- rbind(tmp, c("Median length", Median_len))
    tmp <- rbind(tmp, c("Max length", Max_len))
    tmp <- rbind(tmp, c("Min length", Min_len))
    tmp <- rbind(tmp, c("N50", N50))
    tmp <- rbind(tmp, c("GC content", GC_content))
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    書籍 | 日本乳酸菌学会誌 | 第2回解析環境構築からNGSデータ前処理まで

    日本乳酸菌学会誌の第2回分(原稿PDFとウェブ資料PDF)です。

    Winのコマンドプロンプト:

    Macのターミナル(基礎編1):

    Macのターミナル(基礎編2):

    イントロ | 一般 | ランダムに行を抽出

    例えばタブ区切りテキストファイルのannotation.txtが手元にあり、指定した数の行を(非復元抽出で)ランダムに抽出するやり方を示します。

    Linux (UNIX)のgrepコマンドのようなものです。perlのハッシュのようなものです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. タブ区切りテキストファイル(annotation.txt)からランダムに5行分を抽出したい場合:

    ヘッダー行はヘッダー行として残す場合のやり方です。

    in_f <- "annotation.txt"               #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 5                             #ランダム抽出したい行数を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    hoge <- sample(1:nrow(data), param, replace=F)#入力ファイルの行数からparamで指定した数だけ非復元抽出した結果をhogeに格納
    
    out <- data[sort(hoge),]               #hogeで指定した行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    2. タブ区切りテキストファイル(annotation.txt)からランダムに5行分を抽出したい場合:

    ヘッダー行がない場合のやり方です。

    in_f <- "annotation.txt"               #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 5                             #ランダム抽出したい行数を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    hoge <- sample(1:nrow(data), param, replace=F)#入力ファイルの行数からparamで指定した数だけ非復元抽出した結果をhogeに格納
    out <- data[sort(hoge),]               #hogeで指定した行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 任意の文字列を行の最初に挿入

    タブ区切りのヒト遺伝子アノテーションファイル(human_annotation_sub.gtf)が手元にあり、 これを入力としてQuasRパッケージを用いてマッピング結果ファイルをもとにカウントデータを得ようと思ってもエラーに遭遇することが多いです。 この原因の一つとして、GFF/GTF形式のアノテーションファイル中の文字列がゲノム情報中の文字列と異なっていることが挙げられます。 例えば、ゲノム配列中の染色体名は"chr1", "chr2", ...などという記述がほとんどですが、これに対応するGFF/GTFの一列目の文字列が"1", "2", ...となっています。

    そこでここでは、文字列を一致させるべく、タブ区切りのヒト遺伝子アノテーションファイルの左端に"chr"を挿入するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. GTFファイル(human_annotation_sub.gtf)の各行の左端に"chr"を挿入したい場合:

    ヘッダー行がない場合のやり方です。

    in_f <- "human_annotation_sub.gtf"     #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "chr"                         #挿入したい文字列を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #本番(文字列挿入)
    data[,1] <- paste(param, data[,1], sep="")#dataオブジェクトの1列目の左側にparamで指定した文字列を挿入
    
    #ファイルに保存
    write.table(data, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#dataの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 任意のキーワードを含む行を抽出(基礎)

    例えばタブ区切りテキストファイルが手元にあり、この中からリストファイル中の文字列を含む行を抽出するやり方を示します。 Linux (UNIX)のgrepコマンドのようなものであり、perlのハッシュのようなものです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、リストファイル(genelist1.txt)中のものが含まれる行全体を出力したい場合:

    in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 1                             #アノテーションファイル中の検索したい列番号を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    obj <- is.element(as.character(data[,param]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    2. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、リストファイル(genelist2.txt)中のものが含まれる行全体を出力したい場合:

    in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "genelist2.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 1                             #アノテーションファイル中の検索したい列番号を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番
    obj <- is.element(as.character(data[,param]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    3. 目的のタブ区切りテキストファイル(annotation.txt)中の第3列目をキーとして、リストファイル(genelist2.txt)中のものが含まれる行全体を出力したい場合:

    in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "genelist2.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 3                             #アノテーションファイル中の検索したい列番号を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番
    obj <- is.element(as.character(data[,param]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    4. 目的のタブ区切りテキストファイル(annotation.txt)に対して、リストファイル(genelist1.txt)中のものが含まれる行全体を出力したい場合:

    in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番(リストファイル中の要素数分だけループを回して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
    keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
    hoge <- NULL                           #最終的に欲しい行番号情報を格納するためのプレースホルダ
    for(i in 1:length(keywords)){          #length(keywords)で表現される要素数分だけループを回す
        hoge <- c(hoge, c(grep(keywords[i], data)))#リストファイル中の要素ごとに検索をかけて要素中の文字列と一致する行番号情報をhogeにどんどん格納している
        if(i%%10 == 0) cat(i, "/", length(keywords), "finished\n")#進行状況を表示させてるだけ
    }
    hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
    out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    
    #以下は(こんなこともできますという)おまけ
    #リストファイル中にあるキーワードごとに、それが見つかった行番号情報を出力
    out_f2 <- "hoge4_hoge.txt"             #出力ファイル名を指定してout_fに格納
    hoge2 <- NULL                          #欲しい行番号情報をリスト形式で格納するためのプレースホルダ
    for(i in 1:length(keywords)){          #length(keywords)で表現される要素数分だけループを回す
        hoge2 <- c(hoge2, list(grep(keywords[i], data)))#リストファイル中の要素ごとに検索をかけて要素中の文字列と一致する行番号情報を(キーワードごとに取り扱うため)リスト形式でhoge2にどんどん格納している
    }
    hoge3 <- sapply(hoge2, paste, collapse="\t")#hoge2はリスト形式になっているので、リストの各成分中の要素を"\t"で結合し、成分数が要素数になるようなベクトルhoge3を作成している(出力に用いるwriteLines関数がベクトル中の一要素を一行で出力する仕様になっている。それに合わせるための小細工です)
    hoge4 <- paste(keywords, hoge3, sep="\t")#一番左側が検索に用いたリストファイル中のキーワードになるようなベクトルhoge4を作成
    writeLines(hoge4, out_f2)              #hoge4の中身を指定したファイル名で保存
    	

    5. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、リストファイル(genelist1.txt)中のものに対応するannotation.txt中の第4列目(subcellular_location列)のみを出力する場合:

    in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1                            #アノテーションファイル中の検索したい列番号を指定
    param2 <- 4                            #出力したい列番号を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番
    obj <- is.element(as.character(data[,param1]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,param2]                #objがTRUEとなる行の(param2)列目の情報のみ抽出した結果をoutに格納
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    6. 4と同じことをsapply関数を用いてやる場合:

    in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
    keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
    hoge <- sapply(keywords, grep, x=data) #リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
    hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
    out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    7. 6と同じことを別のファイルを用いてやる場合:

    ラットのアノテーション情報ファイル(GPL1355-14795.txt), 2群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

    in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
    keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
    hoge <- sapply(keywords, grep, x=data) #リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
    hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
    out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    8. 7と基本的には同じだが、「遺伝子IDリストファイル中の文字列」が「アノテーション情報ファイル中の一番左側」にしか存在しないという前提で高速に探索したい場合:

    ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

    in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge8.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
    keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
    hoge <- sapply(paste("^", keywords, sep=""), grep, x=data)#リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
    hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
    out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    9. 8を基本として、8の出力ファイルは対象の行の情報全てを出力するものであったが、13列目のRefSeq Transcript IDに相当するもののみ抽出したい場合:

    ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

    in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge9.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 13                            #出力したい列番号を指定
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    
    #本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
    keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
    hoge <- sapply(paste("^", keywords, sep=""), grep, x=data)#リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
    hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
    hoge2 <- data[hoge]                    #ベクトルdataからobjがTRUEとなる要素のみを抽出した結果をhoge2に格納(dataオブジェクトは行列ではないことに注意!)
    hoge3 <- strsplit(hoge2, "\t")         #hoge2ベクトル中の各要素を「タブ(\t)」で区切って分割した結果をhoge3に格納
    out <- unlist(lapply(hoge3, "[[", param))#hoge3のリスト中の(param)番目の要素のみ抽出した結果outに格納
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    10. 9を基本として、8の出力ファイルは対象の行の情報全てを出力するものであったが、13列目のRefSeq Transcript IDに相当するもののみ抽出したい場合:

    ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

    アノテーション情報ファイルの形式は"#"から始まる行以外は同じ列数なので、行列形式などにすることが可能なことを利用している(9に比べて一般性は劣るがより劇的に早い計算が可能)

    in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge10.txt"                  #出力ファイル名を指定してout_fに格納
    param <- 13                            #出力したい列番号を指定
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
    
    #アノテーション情報ファイル中で"#"から始まる行を除いて(param)列目の情報を抽出している
    hoge <- grep("^#", data)               #正規表現で"#"から始まる行の位置情報を抽出してhogeに格納
    data <- data[-hoge]                    #ベクトルdataからhoge中の数値に対応する要素の除いた結果をdataに格納
    hoge1 <- strsplit(data, "\t")          #dataベクトル中の各要素を「タブ(\t)」で区切って分割した結果をhoge1に格納
    hoge2 <- unlist(lapply(hoge1, "[[", param))#hoge1のリスト中の(param)番目の要素のみ抽出してhoge2に格納
    names(hoge2) <- unlist(lapply(hoge1, "[[", 1))#hoge1のリスト中の1番目の要素が遺伝子IDと対応するので、これをhoge2のnames属性として割り当てる
    
    #本番(keywords中の要素に対応するRefSeq IDを取得)
    hoge3 <- hoge2[keywords]               #hoge2ベクトルの中から、names(hoge2)がkeywordsと一致するものを抽出してhoge3に格納
    out <- unique(hoge3)                   #重複を除去している
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    11. 10を基本として、遺伝子IDリストに対応するRefSeq Transcript IDを抽出ところまでは同じだが、RefSeq IDが同じで遺伝子IDリストにないもの(common)も存在するのでその分を考慮:

    ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

    アノテーション情報ファイルの形式は"#"から始まる行以外は同じ列数なので、行列形式などにすることが可能なことを利用している(9に比べて一般性は劣るがより劇的に早い計算が可能)

    in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
    in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f1 <- "result_rankprod_BAT_RefSeq_DEG.txt"#出力ファイル名1を指定
    out_f2 <- "result_rankprod_BAT_RefSeq_nonDEG.txt"#出力ファイル名2を指定
    param <- 13                            #出力したい列番号を指定
    
    #入力ファイルの読み込み
    data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
    geneid_DEG <- readLines(in_f2)         #in_f2で指定したファイルの読み込み
    
    #アノテーション情報ファイル中で"#"から始まる行を除いて(param)列目の情報を抽出している
    hoge <- grep("^#", data)               #正規表現で"#"から始まる行の位置情報を抽出してhogeに格納
    data <- data[-hoge]                    #ベクトルdataからhoge中の数値に対応する要素の除いた結果をdataに格納
    hoge1 <- strsplit(data, "\t")          #dataベクトル中の各要素を「タブ(\t)」で区切って分割した結果をhoge1に格納
    hoge2 <- unlist(lapply(hoge1, "[[", param))#hoge1のリスト中の(param)番目の要素のみ抽出してhoge2に格納
    names(hoge2) <- unlist(lapply(hoge1, "[[", 1))#hoge1のリスト中の1番目の要素が遺伝子IDと対応するので、これをhoge2のnames属性として割り当てる
    
    #本番
    tmp_DEG <- unique(hoge2[geneid_DEG])   #hoge2ベクトルの中から、names(hoge2)がgeneid_DEGと一致するものを抽出し、重複を除いてtmp_DEGに格納
    geneid_nonDEG <- setdiff(names(hoge2), geneid_DEG)#読み込んだ遺伝子IDリストファイル中のID以外のものをgeneid_nonDEGに格納
    tmp_nonDEG <- unique(hoge2[geneid_nonDEG])#hoge2ベクトルの中から、names(hoge2)がgeneid_nonDEGと一致するものを抽出し、重複を除いてtmp_nonDEGに格納
    
    common <- intersect(tmp_DEG, tmp_nonDEG)#tmp_DEGとtmp_nonDEGベクトル間の積集合をcommonに格納
    out_DEG <- setdiff(tmp_DEG, common)    #tmp_DEGとcommon間の差集合をout_DEGに格納
    out_nonDEG <- setdiff(tmp_nonDEG, common)#tmp_nonDEGとcommon間の差集合をout_nonDEGに格納
    
    #ファイルに保存
    writeLines(out_DEG, out_f1)            #out_DEGの中身を指定したファイル名で保存
    writeLines(out_nonDEG, out_f2)         #out_nonDEGの中身を指定したファイル名で保存
    	

    12. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、param2で指定した文字列が含まれる行全体を出力したい場合:

    in_f <- "annotation.txt"               #入力ファイル名を指定してin_fに格納(アノテーションファイル)
    out_f <- "hoge12.txt"                  #出力ファイル名を指定してout_fに格納
    param1 <- 1                            #アノテーションファイル中の検索したい列番号を指定
    param2 <- c("gene1", "gene7", "gene9") #検索したい文字列を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    obj <- is.element(as.character(data[,param1]), param2)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    13. 目的のタブ区切りテキストファイル(annotation2.txt)中の第1列目をキーとして、param2で指定した文字列が含まれる行全体を出力したい場合:

    入力ファイル中にヘッダー行がない場合の読み込み例です。

    in_f <- "annotation2.txt"              #入力ファイル名を指定してin_fに格納(アノテーションファイル)
    out_f <- "hoge13.txt"                  #出力ファイル名を指定してout_fに格納
    param1 <- 1                            #アノテーションファイル中の検索したい列番号を指定
    param2 <- c("gene1", "gene7", "gene9") #検索したい文字列を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=F, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    obj <- is.element(as.character(data[,param1]), param2)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	

    イントロ | 一般 | ランダムな塩基配列を生成

    タイトル通り、「任意の長さ」で「任意の塩基組成」からなるつランダムな塩基配列を生成するやり方を示します。 A,C,G,Tの数値を指定することで任意の塩基組成にできるようになっています。指定する数値の合計は別に100にならなくてもかまいません。 例えば「全てを1にしておけば、四種類の塩基の出現確率の期待値が25%」になりますし、「A=0, C=705, G=89, T=206みたいな指定法だと、 (数値の合計が1000なので)塩基Cの出現確率が70.5%」みたいなこともできます。

    1. 50塩基の長さのランダムな塩基配列を生成する場合:

    塩基の存在比はAが20%, Cが30%, Gが30%, Tが20%にしています。

    param_len_ref <- 50                    #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(20, 30, 30, 20) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    
    #本番(リファレンス配列生成)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference                              #確認してるだけです
    	

    2. 塩基配列を生成させて任意のdescription("kkk")を追加してFASTA形式ファイルで保存したい場合:

    70塩基の長さのランダムな塩基配列を生成するやり方です。 塩基の存在比はAが23%, Cが27%, Gが28%, Tが22%にしています。

    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param_len_ref <- 70                    #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(23, 27, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(配列生成)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference                              #確認してるだけです
    
    #本番(FASTA形式に変換)
    fasta <- DNAStringSet(reference)       #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- param_desc             #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. 任意の配列長をもつものを複数個作ってmulti-FASTAファイルとして保存したい場合:

    24, 103, 65の配列長をもつ、計3つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。

    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param_len_ref <- c(24, 103, 65)        #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(20, 30, 30, 20) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "contig"                 #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(配列生成)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #本番(FASTA形式に変換)
    fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- paste(param_desc, 1:length(hoge), sep="_")#description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. 配列長情報を含むファイル(seq_length.txt; 中身は「24, 103, 65, 49」という4行からなる数値情報)を読み込む場合:

    塩基の存在比はAが26%, Cが27%, Gが24%, Tが23%にしています。

    in_f <- "seq_length.txt"               #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(26, 27, 24, 23) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "contig"                 #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    param_len_ref <- readLines(in_f)       #in_fで指定したファイルの読み込み
    
    #本番(配列生成)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #本番(FASTA形式に変換)
    fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- paste(param_desc, 1:length(hoge), sep="_")#description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. 同一パラメータを与えたときには常に同じ塩基配列が生成されるようにしたい場合:

    48, 160, 100, 123の配列長をもつ、計4つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。 塩基の存在比はAが28%, Cが22%, Gが26%, Tが24%にしています。 set.seed関数を追加しているだけです。

    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    param_len_ref <- c(48, 160, 100, 123)  #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(28, 22, 26, 24) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "chr"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(配列生成)
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #本番(FASTA形式に変換)
    fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- paste(param_desc, 1:length(hoge), sep="_")#description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. 同一パラメータを与えたときには常に同じ塩基配列が生成されるようにしたい場合2:

    48, 160, 100, 123の配列長をもつ、計4つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。 塩基の存在比はAが28%, Cが22%, Gが26%, Tが24%にしています。 set.seed関数を追加し、chr3の配列と同じものをchr5としてコピーして作成したのち、一部の塩基置換を行っています。

    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    param_len_ref <- c(48, 160, 100, 123)  #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(28, 22, 26, 24) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "chr"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #塩基置換関数の作成
    enkichikan <- function(fa, p) {        #関数名や引数の作成
      t <- substring(fa, p, p)             #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(fa, p, p) <- t_c           #置換
      return(fa)                           #置換後のデータを返す
    }
    
    #本番(配列生成)
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #本番(chr3の配列をchr5としてコピーし、2番目と7番目の塩基をそれぞれ置換)
    hoge <- c(hoge, hoge[3])               #chr3に相当する配列を追加している
    hoge[5] <- enkichikan(hoge[5], 2)      #hoge[5]の2番目の塩基を置換
    hoge[5] <- enkichikan(hoge[5], 7)      #hoge[5]の7番目の塩基を置換
    
    #本番(FASTA形式に変換)
    fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- paste(param3, 1:length(hoge), sep="_")#description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 任意の長さの可能な全ての塩基配列を作成

    Biostringsパッケージを用いて"A", "C", "G", "T"からなる任意の長さのn塩基からなる全ての塩基配列を作成するやり方を示します。

    「ファイル」−「ディレクトリの変更」で出力結果ファイルを保存したいディレクトリに移動し以下をコピペ。

    1. n=3として、4n = 43 = 64通りの3塩基からなる可能な配列を作成したい場合:

    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 3                             #欲しい連続塩基の長さ情報を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番
    out <- mkAllStrings(c("A", "C", "G", "T"), param)#(param)連続塩基の全ての可能な配列情報をoutに格納
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    2. n=5として、4n = 45 = 1024通りの5塩基からなる可能な配列を作成したい場合:

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 5                             #欲しい連続塩基の長さ情報を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番
    out <- mkAllStrings(c("A", "C", "G", "T"), param)#(param)連続塩基の全ての可能な配列情報をoutに格納
    
    #ファイルに保存
    writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 任意の位置の塩基を置換

    任意の位置の塩基を置換するやり方を示します。ベタな書き方ですがとりあえず。。。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample1.fasta)の場合:

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #置換したい塩基の位置を指定
    param2 <- "G"                          #置換後の塩基を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    hoge <- as.character(fasta)            #文字列に置換
    
    #本番
    substring(hoge, param1, param1) <- param2#param1で指定した位置の塩基をparam2で指定した塩基に置換
    hoge <- DNAStringSet(hoge)             #DNAStringSetオブジェクトに変換した結果をhogeに格納
    names(hoge) <- names(fasta)            #description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. FASTA形式ファイル(sample2.fasta)の場合:

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #置換したい塩基の位置を指定
    param2 <- "G"                          #置換後の塩基を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    hoge <- as.character(fasta)            #文字列に置換
    
    #本番
    substring(hoge, param1, param1) <- param2#param1で指定した位置の塩基をparam2で指定した塩基に置換
    hoge <- DNAStringSet(hoge)             #DNAStringSetオブジェクトに変換した結果をhogeに格納
    names(hoge) <- names(fasta)            #description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. FASTA形式ファイル(sample2.fasta)の場合:

    param1で指定した位置の塩基を相補鎖(C -> G, G -> C, A -> T, T -> A)に置換するやり方です。そのような関数を作成して実行しています。

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #置換したい塩基の位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #塩基置換関数の作成
    DNAString_chartr <- function(fa, p) {  #関数名や引数の作成
      str_list <- as.character(fa)         #文字列に変更
      t <- substring(str_list, p, p)       #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(str_list, p, p) <- t_c     #置換
      fa_r <- DNAStringSet(str_list)       #DNAStringSetオブジェクトに戻す
      names(fa_r) <- names(fa)             #description部分の情報を追加
      return(fa_r)                         #置換後のデータを返す
    }
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- DNAString_chartr(fasta, param1)#param1で指定した位置の塩基置換を実行した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 指定した範囲の配列を取得

    single-FASTA形式やmulti-FASTA形式ファイルから様々な部分配列を取得するやり方を示します。 この項目は、「この染色体の、ここから、ここまで」という指定の仕方になります。 例えば入力ファイルがヒトゲノムだった場合に、chr3の20000から500000の座標の配列取得を行いたい場合などに利用します。 したがって、chr4とchr8の配列のみ抽出といったやり方には対応していませんのでご注意ください。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. (single-)FASTA形式ファイル(sample1.fasta)の場合:

    任意の範囲 (始点が3, 終点が9)の配列を抽出し、得られた部分配列をFASTA形式ファイル(hoge1.txt)に出力するやり方です。

    ファイルダウンロード時に、*.fastaという拡張子が*.txtに勝手に変更されることがありますのでご注意ください。

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- c(3, 9)                       #抽出したい範囲の始点と終点を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- subseq(fasta, param[1], param[2])#paramで指定した始点と終点の範囲の配列を抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    任意のRefSeq ID (例:NM_203348.1)の任意の範囲 (例:始点が2, 終点が5)の配列の抽出を行うやり方です。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "NM_203348.1"                #取得したい配列のアクセッション番号を指定
    param2 <- c(2, 5)                      #抽出したい範囲の始点と終点を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- as.logical(names(fasta) == param1)        #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- subseq(fasta[obj], param2[1], param2[2])#objがTRUEとなる配列のみに対して、param2で指定した始点と終点の範囲の配列を抽出した結果をfasta格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    目的のaccession番号が複数ある場合に対応したものです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_sub1.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    in_f1 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeにどんどん格納している
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    目的のaccession番号が複数ある場合に対応したものです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_sub2.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub2.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeにどんどん格納している
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. multi-FASTA形式のファイル (ref_genome.fa)ファイルの場合:

    目的のaccession番号が複数ある場合に対応したものです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_sub3.txt) を読み込ませて、目的の部分配列のmulti-FASTAファイルをゲットするやり方です。

    in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub3.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeにどんどん格納している
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分の作成)
    description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 指定したID(染色体やdescription)の配列を取得

    multi-FASTA形式ファイルからリストファイルで指定したID (description行の記載内容と全く同じ染色体名などの配列ID)の配列を取得するやり方を示します。 例えば入力ファイルがヒトゲノムだった場合に、chr4とchr8の配列のみ抽出したい場合などに利用します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    任意のRefSeq ID NM_203348.1の配列抽出を行うやり方です。 ファイルダウンロード時に、*.fastaという拡張子が*.txtに勝手に変更されることがありますのでご注意ください。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "NM_203348.1"                #取得したい配列のアクセッション番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- as.logical(names(fasta) == param1)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    うまくいかない例です。NM_203348.1は確かに入力ファイル中に存在するが、 バージョン情報を除いたNM_203348だとうまくいきません。 理由は、両者の文字列は完全に同じというわけではないからです。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "NM_203348"                  #取得したい配列のアクセッション番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- as.logical(names(fasta) == param1)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    うまくいかない例です。"NM_203348.1"は確かに入力ファイル中に存在するが、 スペースが余分に含まれる"NM_203348.1 "だとうまくいきません。 理由は、両者の文字列は完全に同じというわけではないからです。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "NM_203348.1 "               #取得したい配列のアクセッション番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- as.logical(names(fasta) == param1)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub5.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    in_f1 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub5.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub6.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    バージョン番号やスペースを含むIDは抽出できないという例です。リスト中の3つのうち、最後のIDの配列のみ抽出できていることがわかります。

    in_f1 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub6.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub7.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    "contig_2"の配列は取得できていますが、"contig_4"の配列は取得できていないことがわかります。理由は、"contig_4 "とスペースが入っているためです。

    in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub7.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    7. multi-FASTA形式のファイル (ref_genome.fa)ファイルの場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

    in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    8. multi-FASTA形式のファイル (ref_genome_redun.fa)ファイルの場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

    multi-FASTAの入力ファイルは、chr4という全く同じ配列が重複して存在しますが、それがそのまま反映されていることが分かります。

    in_f1 <- "ref_genome_redun.fa"         #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge8.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    9. multi-FASTA形式のファイル (ref_genome_redun.fa)ファイルの場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

    multi-FASTAの入力ファイルは、chr4という全く同じ配列が重複して存在します。 それがそのまま反映されるのが嫌で、重複を除きたい(non-redundantにしたい)場合があります。それに対応したやり方です。

    in_f1 <- "ref_genome_redun.fa"         #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge9.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    fasta <- unique(fasta)                 #重複を除いてnon-redundantにした結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    9. multi-FASTA形式のファイル (ref_genome_redun.fa)ファイルの場合:

    目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

    指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

    multi-FASTAの入力ファイルは、chr4という全く同じ配列が重複して存在します。 それがそのまま反映されるのが嫌で、重複を除きたい(non-redundantにしたい)場合があります。それに対応したやり方です。

    FASTA形式ファイルの読み込み部分で、Biostringsパッケージ中のreadDNAStringSet関数ではなく、seqinrパッケージ中のread.fasta関数を用いるやり方です。

    in_f1 <- "ref_genome_redun.fa"         #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "hoge10.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqinr)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとDNAStringSet形式への変換
    hoge <- read.fasta(in_f, seqtype="DNA", as.string=TRUE)#in_fで指定したファイルの読み込み
    fasta <- DNAStringSet(as.character(hoge))#型変換
    names(fasta) <- names(hoge)            #型変換
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    fasta <- unique(fasta)                 #重複を除いてnon-redundantにした結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 翻訳配列(translate)を取得

    塩基配列を読み込んでアミノ酸配列に翻訳するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample1.fasta)の場合:

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    hoge <- translate(fasta)               #fastaをアミノ酸配列に翻訳した結果をhogeに格納
    names(hoge) <- names(fasta)            #現状では翻訳した結果のオブジェクトhogeのdescription行が消えてしまうようなので、description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

    配列中にNを含むものが出現したところでエラーが出て止まる例です。 「以下にエラー .Call2("DNAStringSet_translate", x, skip_code, dna_codes[codon_alphabet], : in 'x[[406]]': not a base at pos 498」といったエラーが見られると思います。 これは406番目の配列の498番目のポジションの文字が塩基ではないと文句を言っています。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    hoge <- translate(fasta)               #fastaをアミノ酸配列に翻訳した結果をhogeに格納
    names(hoge) <- names(fasta)            #現状では翻訳した結果のオブジェクトhogeのdescription行が消えてしまうようなので、description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. multi-FASTA形式ファイル(h_rna.fasta)の場合:

    エラーへの対策として、ACGTのみからなる配列を抽出したサブセットを抽出しています。 翻訳はそれらのサブセットのみに対して行っているのでエラーは出なくなっていることがわかります。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(ACGTのみからなる配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- translate(fasta)               #fastaをアミノ酸配列に翻訳した結果をhogeに格納
    names(hoge) <- names(fasta)            #現状では翻訳した結果のオブジェクトhogeのdescription行が消えてしまうようなので、description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

    配列中にACGT以外のものが存在するためエラーが出る例です。 4番目の配列(つまりgene_4)の17番目のポジションがNなので妥当です。

    in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- translate(fasta)               #fastaをアミノ酸配列に翻訳した結果をhogeに格納
    names(hoge) <- names(fasta)            #現状では翻訳した結果のオブジェクトhogeのdescription行が消えてしまうようなので、description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

    エラーへの対策として、ACGTのみからなる配列を抽出したサブセットを抽出しています。 翻訳はそれらのサブセットのみに対して行っているので「文字が塩基ではない」という類のエラーがなっていることがわかります。 出力ファイル中の*は終始コドン(stop codon)を表すようですね。

    in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(ACGTのみからなる配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- translate(fasta)               #fastaをアミノ酸配列に翻訳した結果をhogeに格納
    names(hoge) <- names(fasta)            #現状では翻訳した結果のオブジェクトhogeのdescription行が消えてしまうようなので、description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. FASTA形式ファイル(sample1.fasta)の場合:

    1.と基本的に同じ結果が得られますが、AAStringSetオブジェクトでdescription行が消えてしまうバグが修正されたようなので、すっきりさせたものです。

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    fasta <- translate(fasta)              #fastaをアミノ酸配列に翻訳した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 相補鎖(complement)を取得

    FASTA形式ファイルを読み込んで相補鎖を得るやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample1.fasta)の場合:

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- complement(fasta)             #fastaオブジェクトの相補鎖をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- complement(fasta)             #fastaオブジェクトの相補鎖をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 逆相補鎖(reverse complement)を取得

    FASTA形式ファイルを読み込んで逆相補鎖を得るやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample1.fasta)の場合:

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- reverseComplement(fasta)      #fastaオブジェクトの逆相補鎖をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- reverseComplement(fasta)      #fastaオブジェクトの逆相補鎖をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 逆鎖(reverse)を取得

    FASTA形式ファイルを読み込んで逆鎖を得るやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample1.fasta)の場合:

    in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- reverse(fasta)                #fastaオブジェクトの逆鎖をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- reverse(fasta)                #fastaオブジェクトの逆鎖をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 2連続塩基の出現頻度情報を取得

    multi-FASTA形式ファイルを読み込んで、"AA", "AC", "AG", "AT", "CA", "CC", "CG", "CT", "GA", "GC", "GG", "GT", "TA", "TC", "TG", "TT" の計42 = 16通りの2連続塩基の出現頻度を調べるやり方を示します。 ヒトゲノムで"CG"の割合が期待値よりも低い(Lander et al., 2001; Saxonov et al., 2006)ですが、それを簡単に検証できます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    タイトル通りの出現頻度です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- dinucleotideFrequency(fasta)    #2連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    出現頻度ではなく、出現確率を得るやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- dinucleotideFrequency(fasta, as.prob=T)#2連続塩基の出現確率情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. multi-FASTA形式ファイル(h_rna.fasta)の場合:

    406番目のID (NR_002762.1)の塩基配列の498番目の文字が"N"なはずなのですが、これはどのように計算されているのでしょうか。。。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- dinucleotideFrequency(fasta)    #2連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. BSgenomeパッケージ中のヒトゲノム配列("BSgenome.Hsapiens.UCSC.hg19")の場合:

    タイトル通りの出現頻度です。イントロ | 一般 | 配列取得 | ゲノム配列 | BSgenome中のゲノム配列取得手順を含んでいます。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Hsapiens.UCSC.hg19" #パッケージ名を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    fasta                                  #確認してるだけです
    
    #本番
    out <- dinucleotideFrequency(fasta)    #2連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    5. BSgenomeパッケージ中のヒトゲノム配列("BSgenome.Hsapiens.UCSC.hg19")の場合:

    出現頻度ではなく、出現確率を得るやり方です。

    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Hsapiens.UCSC.hg19" #パッケージ名を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    fasta                                  #確認してるだけです
    
    #本番
    out <- dinucleotideFrequency(fasta, as.prob=T)#2連続塩基の出現確率情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    6. BSgenomeパッケージ中のシロイヌナズナゲノム配列("BSgenome.Athaliana.TAIR.TAIR9")の場合:

    出現頻度ではなく、出現確率を得るやり方です。パッケージがインストールされていない場合は、 イントロ | 一般 | 配列取得 | ゲノム配列 | BSgenomeを参考にしてインストールしてから再度チャレンジ。

    out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    fasta                                  #確認してるだけです
    
    #本番
    out <- dinucleotideFrequency(fasta, as.prob=T)#2連続塩基の出現確率情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    7. BSgenomeパッケージ中のヒトゲノム配列("BSgenome.Hsapiens.NCBI.GRCh38")の場合:

    2013年12月にリリースされたGenome Reference Consortium GRCh38です。出力は出現確率です。

    out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    fasta                                  #確認してるだけです
    
    #本番
    out <- dinucleotideFrequency(fasta, as.prob=T)#2連続塩基の出現確率情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 3連続塩基の出現頻度情報を取得

    43 = 64 通りの3連続塩基の出現頻度を調べるやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- trinucleotideFrequency(fasta)   #3連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. 130MB程度のRefSeqのhuman mRNAのmulti-FASTAファイル(h_rna.fasta)の場合:

    406番目のID (NR_002762.1)の塩基配列の498番目の文字が"N"なはずなのですが、これはどのように計算されているのでしょうか。。。

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- trinucleotideFrequency(fasta)   #3連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 任意の長さの連続塩基の出現頻度情報を取得

    4n通りの任意のn連続塩基の出現頻度を調べるやり方を示します。

    例えば2連続塩基の場合はn=2, 3連続塩基の場合はn=3と指定します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    4連続塩基(n=4)の出現頻度情報を得るやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 4                             #欲しい連続塩基の長さ情報を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- oligonucleotideFrequency(fasta, width=param)#(param)連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    2連続塩基(n=2)の出現頻度情報を得るやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 2                             #欲しい連続塩基の長さ情報を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- oligonucleotideFrequency(fasta, width=param)#(param)連続塩基の出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    2連続塩基(n=2)の全コンティグをまとめた出現頻度情報を得るやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 2                             #欲しい連続塩基の長さ情報を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- oligonucleotideFrequency(fasta, width=param, simplify.as="collapsed")#(param)連続塩基の全コンティグをまとめた出現頻度情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(out), out)          #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    2連続塩基(n=2)の全コンティグをまとめた出現確率情報を得るやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param <- 2                             #欲しい連続塩基の長さ情報を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    out <- oligonucleotideFrequency(fasta, width=param, simplify.as="collapsed", as.prob=TRUE)#(param)連続塩基の全コンティグをまとめた出現確率情報をoutに格納
    
    #ファイルに保存
    tmp <- cbind(names(out), out)          #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    イントロ | 一般 | Tips | 任意の拡張子名でファイルを保存

    出力ファイル名をわざわざ指定せずに、拡張子名のみ変えるやり方を示します。。(例:XXX.txtを読み込んでXXX.inuという拡張子で保存したい)

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    *.ugeというファイル名で保存するやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    param <- "uge"                         #拡張子名を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(拡張子を変えた出力ファイル名を作成)
    out_f <- paste(unlist(strsplit(in_f, ".", fixed=TRUE))[1], param, sep=".")#出力ファイル名を作成してout_fに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | Tips | 拡張子は同じで任意の文字を追加して保存

    ファイル保存時に、拡張子名は変えずに、拡張子の手前に任意の文字(例:"_processed")を追加するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    *_processed.faというファイル名で保存するやり方です。

    ファイル名中に"."(ドット)が一つしかないという前提です

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    param <- "_processed"                  #追加したい文字列を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番()
    hoge1 <- paste(".", unlist(strsplit(in_f, ".", fixed=TRUE))[2], sep="")#"."を含む拡張子部分をhoge1に格納
    hoge2 <- paste(param, hoge1, sep="")   #置換後の文字列をhoge2に格納
    out_f <- sub(hoge1, hoge2, in_f)       #出力ファイル名を作成してout_fに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 配列取得 | ゲノム配列 | 公共DBから

    イントロ | 一般 | 配列取得 | ゲノム配列 | BSgenome

    BSgenomeパッケージを用いて様々な生物種のゲノム配列を取得するやり方を示します。 ミヤマハタザオ (A. lyrata)、セイヨウミツバチ (A. mellifera)、 シロイヌナズナ(A.thaliana)、ウシ(B.taurus)、線虫(C.elegans)、犬(C.familiaris)、キイロショウジョウバエ(D.melanogaster)、 ゼブラフィッシュ(D.rerio)、大腸菌(E.coli)、イトヨ(G.aculeatus)、セキショクヤケイ(G.gallus)、ヒト(H.sapiens)、 アカゲザル(M.mulatta)、マウス(M.musculus)、チンパンジー(P.troglodytes)、ラット(R.norvegicus)、出芽酵母(S.cerevisiae)、 トキソプラズマ(T.gondii)と実に様々な生物種が利用可能であることがわかります。 getSeq関数はBSgenomeオブジェクト中の「single sequences」というあたりにリストアップされているchr...というものを全て抽出しています。 したがって、例えばマウスゲノムは「chr1」以外に「chr1_random」や「chrUn_random」なども等価に取扱っている点に注意してください。

    「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

    1. 利用可能な生物種とRにインストール済みの生物種をリストアップしたい場合:

    #必要なパッケージをロード
    library(BSgenome)                      #パッケージの読み込み
    
    #本番(利用可能なリストアップ;インストール済みとは限らない)
    available.genomes()                    #このパッケージ中で利用可能なゲノムをリストアップ
    
    #本番(インストール済みの生物種をリストアップ)
    installed.genomes()                    #インストール済みの生物種をリストアップ
    
    #後処理(パッケージ名でだいたいわかるがproviderやversionを分割して表示したい場合)
    installed.genomes(splitNameParts=TRUE) #インストール済みの生物種をリストアップ
    	

    2. ゼブラフィッシュ("BSgenome.Drerio.UCSC.danRer7")のゲノム情報をRにインストールしたい場合:

    400MB程度あります...

    param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定
    
    #本番
    source("http://bioconductor.org/biocLite.R")#おまじない
    biocLite(param)                        #おまじない
    
    #後処理(インストール済みの生物種をリストアップ)
    installed.genomes()                    #インストール済みの生物種をリストアップ
    	

    3. インストール済みのゼブラフィッシュのゲノム配列をmulti-FASTAファイルで保存したい場合:

    1.4GB程度のファイルが生成されます...

    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    genome                                 #確認してるだけです
    
    #本番
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. インストール済みのマウス("BSgenome.Mmusculus.UCSC.mm9")のゲノム配列をmulti-FASTAファイルで保存したい場合:

    2.8GB程度のファイルが生成されます...

    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Mmusculus.UCSC.mm9" #パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    genome                                 #確認してるだけです
    
    #本番
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg19")のゲノム配列をmulti-FASTAファイルで保存したい場合:

    3.0GB程度のファイルが生成されます...。ヒトゲノムは、まだ完全に22本の常染色体とX, Y染色体の計24本になっているわけではないことがわかります。

    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Hsapiens.UCSC.hg19" #パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    genome                                 #確認してるだけです
    
    #本番
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg19")のゲノム配列をmulti-FASTAファイルで保存したい場合:

    ヒトゲノムは、まだ完全に22本の常染色体とX, Y染色体の計24本になっているわけではないので、最初の主要な24本分のみにするやり方です。

    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.UCSC.hg19"#パッケージ名を指定
    param2 <- 24                           #取り出したい染色体数を指定(主要なものから順番に並んでいるので最初の24本に相当)
    
    #必要なパッケージをロード
    library(param1, character.only=T)      #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    #tmp <- unlist(strsplit(param1, ".", fixed=TRUE))[2]#指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param1, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    genome                                 #確認してるだけです
    
    #本番
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    fasta <- fasta[1:param2]               #染色体のフィルタリング
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    7. シロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")のゲノム情報をRにインストールしたい場合:

    Rのパッケージをインストール後、ゲノム配列をmulti-FASTAファイルで保存する一連の手順です。 The Arabidopsis Information Resource (TAIR)(Lamesch et al., Nucleic Acids Res., 2012) から得られる最新バージョンはTAIR10ですが、アセンブリ結果自体はTAIR9と同じと明記されています (README_whole_chromosomes.txt)。

    param <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定
    
    #本番
    source("http://bioconductor.org/biocLite.R")#おまじない
    biocLite(param)                        #おまじない
    
    #後処理(インストール済みの生物種をリストアップ)
    installed.genomes()                    #インストール済みの生物種をリストアップ
    	

    8. インストール済みのシロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")のゲノム配列をmulti-FASTAファイルで保存したい場合:

    The Arabidopsis Information Resource (TAIR)(Lamesch et al., Nucleic Acids Res., 2012) から得られる最新バージョンはTAIR10ですが、アセンブリ結果自体はTAIR9と同じと明記されています (README_whole_chromosomes.txt)。120MB程度のファイルが生成されます...

    out_f <- "hoge8.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    genome                                 #確認してるだけです
    
    #本番
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    9. インストール済みのヒト("BSgenome.Hsapiens.NCBI.GRCh38")のゲノム配列をmulti-FASTAファイルで保存したい場合:

    2013年12月にリリースされたGenome Reference Consortium GRCh38です。 R ver. 3.1.0とBioconductor ver. 2.14以上の環境で実行可能です。

    out_f <- "hoge9.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    genome                                 #確認してるだけです
    
    #本番
    fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
    names(fasta) <- seqnames(genome)       #description情報を追加している
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 配列取得 | プロモーター配列 | 公共DBから

    イントロ | 一般 | 配列取得 | プロモーター配列 | BSgenome

    BSgenomeパッケージを用いて様々な生物種のプロモーター配列(転写開始点近傍配列;上流配列)を取得するやり方を示します。 シロイヌナズナ(A.thaliana)、ウシ(B.taurus)、線虫(C.elegans)、犬(C.familiaris)、キイロショウジョウバエ(D.melanogaster)、 ゼブラフィッシュ(D.rerio)、大腸菌(E.coli)、イトヨ(G.aculeatus)、セキショクヤケイ(G.gallus)、ヒト(H.sapiens)、 アカゲザル(M.mulatta)、マウス(M.musculus)、チンパンジー(P.troglodytes)、ラット(R.norvegicus)、出芽酵母(S.cerevisiae)、 トキソプラズマ(T.gondii)と実に様々な生物種が利用可能であることがわかりますが、生物種によって、上流配列情報がないものもあります(例:シロイヌナズナ)。

    「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

    1. 利用可能な生物種とRにインストール済みの生物種をリストアップしたい場合:

    #必要なパッケージをロード
    library(BSgenome)                      #パッケージの読み込み
    
    #本番(利用可能なリストアップ;インストール済みとは限らない)
    available.genomes()                    #このパッケージ中で利用可能なゲノムをリストアップ
    
    #本番(インストール済みの生物種をリストアップ)
    installed.genomes()                    #インストール済みの生物種をリストアップ
    
    #後処理(パッケージ名でだいたいわかるがproviderやversionを分割して表示したい場合)
    installed.genomes(splitNameParts=TRUE) #インストール済みの生物種をリストアップ
    	

    2. ゼブラフィッシュ("BSgenome.Drerio.UCSC.danRer7")のゲノム情報をRにインストールしたい場合:

    400MB程度あります...

    param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定
    
    #本番
    source("http://bioconductor.org/biocLite.R")#おまじない
    biocLite(param)                        #おまじない
    
    #後処理(インストール済みの生物種をリストアップ)
    installed.genomes()                    #インストール済みの生物種をリストアップ
    	

    3. インストール済みのゼブラフィッシュ("BSgenome.Drerio.UCSC.danRer7")の転写開始点上流配列(1000bp)をmulti-FASTAファイルで保存したい場合:

    上流1000bp以外に2000bp, 5000bpもあります...

    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定
    param2 <- "upstream1000"               #上流1000bpを指定
    
    #必要なパッケージをロード
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    
    #前処理(param1で指定したパッケージ中のオブジェクト名をhogeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#param1で指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    hoge                                   #確認してるだけです(ここで、multiple sequencesのところにparam2で指定した文字列が存在するのでparam2が有効なんです)
    
    #本番
    tmp <- paste("hoge$", param2, sep="")  #param2で指定した文字列を含むオブジェクト名を作成した結果をtmpに格納
    fasta <- eval(parse(text=tmp))         #文字列tmpをRオブジェクトとしてfastaに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. インストール済みのマウス("BSgenome.Mmusculus.UCSC.mm9")の転写開始点上流配列(2000bp)をmulti-FASTAファイルで保存したい場合:

    上流2000bp以外に1000bp, 5000bpもあります...

    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Mmusculus.UCSC.mm9"#パッケージ名を指定
    param2 <- "upstream2000"               #上流2000bpを指定
    
    #必要なパッケージをロード
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    
    #前処理(param1で指定したパッケージ中のオブジェクト名をhogeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#param1で指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    hoge                                   #確認してるだけです(ここで、multiple sequencesのところにparam2で指定した文字列が存在するのでparam2が有効なんです)
    
    #本番
    tmp <- paste("hoge$", param2, sep="")  #param2で指定した文字列を含むオブジェクト名を作成した結果をtmpに格納
    fasta <- eval(parse(text=tmp))         #文字列tmpをRオブジェクトとしてfastaに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg19")の転写開始点上流配列(1000bp)をmulti-FASTAファイルで保存したい場合:

    上流1000bp以外に2000bp, 5000bpもあります...

    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.UCSC.hg19"#パッケージ名を指定
    param2 <- "upstream1000"               #上流1000bpを指定
    
    #必要なパッケージをロード
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    
    #前処理(param1で指定したパッケージ中のオブジェクト名をhogeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#param1で指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    hoge                                   #確認してるだけです(ここで、multiple sequencesのところにparam2で指定した文字列が存在するのでparam2が有効なんです)
    
    #本番
    tmp <- paste("hoge$", param2, sep="")  #param2で指定した文字列を含むオブジェクト名を作成した結果をtmpに格納
    fasta <- eval(parse(text=tmp))         #文字列tmpをRオブジェクトとしてfastaに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. インストール済みのヒト("BSgenome.Hsapiens.NCBI.GRCh38")の転写開始点上流配列(1000bp)をmulti-FASTAファイルで保存したい場合:

    2013年12月にリリースされたGenome Reference Consortium GRCh38のRパッケージです。上流配列情報を含まないのでエラーがでます。

    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定
    param2 <- "upstream1000"               #上流1000bpを指定
    
    #必要なパッケージをロード
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    
    #前処理(param1で指定したパッケージ中のオブジェクト名をhogeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#param1で指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    hoge                                   #確認してるだけです(ここで、multiple sequencesのところにparam2で指定した文字列が存在するのでparam2が有効なんです)
    
    #本番
    tmp <- paste("hoge$", param2, sep="")  #param2で指定した文字列を含むオブジェクト名を作成した結果をtmpに格納
    fasta <- eval(parse(text=tmp))         #文字列tmpをRオブジェクトとしてfastaに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    7. インストール済みのシロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")の転写開始点上流配列(2000bp)をmulti-FASTAファイルで保存したい場合:

    最後のほうのfastaオブジェクト作成のところでエラーが出ます。理由はmultiple sequencesのところがないためにhoge$upstream2000の情報を取得できないためです。

    out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定
    param2 <- "upstream2000"               #上流2000bpを指定
    
    #必要なパッケージをロード
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    
    #前処理(param1で指定したパッケージ中のオブジェクト名をhogeに統一)
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#param1で指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    hoge                                   #確認してるだけです(ここで、multiple sequencesのところにparam2で指定した文字列が存在するのでparam2が有効なんです)
    
    #本番
    tmp <- paste("hoge$", param2, sep="")  #param2で指定した文字列を含むオブジェクト名を作成した結果をtmpに格納
    fasta <- eval(parse(text=tmp))         #文字列tmpをRオブジェクトとしてfastaに格納
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    8. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg19")の転写開始点上流配列(1000bp)をmulti-FASTAファイルで保存したい場合:

    2014年4月リリースのBioconductor 2.14での推奨手順です。ゲノムのパッケージ(例:BSgenome.Hsapiens.UCSC.hg19)と 対応するアノテーションパッケージ(例:TxDb.Hsapiens.UCSC.hg19.knownGene)を読み込んで実行しています。

    out_f <- "hoge8.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.UCSC.hg19"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
    param2 <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(Transcript DBオブジェクト系のアノテーションパッケージ)
    param3 <- 1000                         #上流 x bpを指定
    
    #前処理(指定したパッケージ中のオブジェクト名をgenomeおよびtxdbに統一)
    library(param1, character.only=T)      #指定したパッケージの読み込み
    tmp <- ls(paste("package", param1, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
    
    library(param2, character.only=T)      #指定したパッケージの読み込み
    tmp <- ls(paste("package", param2, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納
    
    #本番
    gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
    hoge <- flank(gn, width=param3)        #指定した範囲の座標情報を取得
    fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 配列取得 | プロモーター配列 | GenomicFeatures(Lawrence_2013)

    GenomicFeaturesパッケージを主に用いてプロモーター配列(転写開始点近傍配列)を得るやり方を示します。

    ここでは、イントロ | 一般 | 配列取得 | ゲノム配列(BSgenomeから)で指定可能なゲノムと イントロ | NGS | アノテーション情報取得 | TranscriptDb | GenomicFeatures(Lawrence_2013)で作成可能なTranscriptDbオブジェクトを入力として、 getPromoterSeqという関数を用いて、転写開始点から任意の[上流xxx塩基, 下流yyy塩基]分の塩基配列を取得して、 FASTA形式ファイルで保存するやり方を示しています。

    1. ヒト("BSgenome.Hsapiens.UCSC.hg19")の[上流200塩基, 下流30塩基]のプロモーター配列を取得する場合:

    ヒトゲノム ver. 19 ("hg19"; Genome Reference Consortium GRCh37のことらしい)のUCSC Genes ("knownGene")のTranscriptDbオブジェクトを利用しています。

    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
    param2 <- "hg19"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param3 <- "knownGene"                  #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param4 <- 200                          #転写開始点上流の塩基配列数を指定
    param5 <- 30                           #転写開始点下流の塩基配列数を指定
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(ゲノム情報を取得)
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
    genome                                 #確認してるだけです
    
    #前処理(アノテーション情報を取得)
    txdb <- makeTranscriptDbFromUCSC(genome=param2, tablename=param3)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(配列取得)
    out <- getPromoterSeq(transcriptsBy(txdb, by="gene"), genome, upstream=param4, downstream=param5)#指定した範囲のプロモーター配列を取得してoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    fasta <- unlist(out)        #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. ヒト("BSgenome.Hsapiens.UCSC.hg19")の[上流200塩基, 下流30塩基]のプロモーター配列を取得する場合:

    ヒトゲノム ver. 19 ("hg19"; Genome Reference Consortium GRCh37のことらしい)のEnsembl Genes ("ensGene")のTranscriptDbオブジェクトを利用しています。

    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
    param2 <- "hg19"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param3 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param4 <- 200                          #転写開始点上流の塩基配列数を指定
    param5 <- 30                           #転写開始点下流の塩基配列数を指定
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(ゲノム情報を取得)
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
    genome                                 #確認してるだけです
    
    #前処理(アノテーション情報を取得)
    txdb <- makeTranscriptDbFromUCSC(genome=param2, tablename=param3)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(配列取得)
    out <- getPromoterSeq(transcriptsBy(txdb, by="gene"), genome, upstream=param4, downstream=param5)#指定した範囲のプロモーター配列を取得してoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    fasta <- unlist(out)        #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. シロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

    UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、 makeTranscriptDbFromGFF関数を用いてTranscriptDbオブジェクトを作成しています。

    現状では、getPromoterSeq関数実行部分で「...sequence ChrC has incompatible circularity flags:」という類のエラーが出ます。 以下は、seqinfo(genome)とseqinfo(txdb)で確かにChrCの情報のみ矛盾していることを示しています。どっちが正しいのでしょう?

    in_f1 <- "BSgenome.Athaliana.TAIR.TAIR9"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
    in_f2 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 500                          #転写開始点上流の塩基配列数を指定
    param2 <- 0                            #転写開始点下流の塩基配列数を指定
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(ゲノム情報を取得)
    library(in_f1, character.only=T)       #in_f1で指定したパッケージの読み込み
    tmp <- ls(paste("package", in_f1, sep=":"))#in_f1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
    genome                                 #確認してるだけです
    seqinfo(genome)                        #確認してるだけです
    
    #前処理(アノテーション情報を取得)
    txdb <- makeTranscriptDbFromGFF(in_f2, format="gff3")#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    seqinfo(txdb)                          #確認してるだけです
    
    #本番(配列取得)
    out <- getPromoterSeq(transcriptsBy(txdb, by="gene"), genome, upstream=param1, downstream=param2)#指定した範囲のプロモーター配列を取得してoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    fasta <- unlist(out)        #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. シロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

    UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、 makeTranscriptDbFromGFF関数を用いてTranscriptDbオブジェクトを作成しています。

    現状では、getPromoterSeq関数実行部分で「...sequence ChrC has incompatible circularity flags:」という類のエラーが出ます。 以下は、seqinfo(genome)とseqinfo(txdb)で確かにChrCの情報のみ矛盾していることを示しています。 ここでは、ChrCが環状かどうかの真偽はさておき、ゲノムファイルのほうのChrCが環状ではないというふうに変更して対処していますが、 それでも「以下にエラー loadFUN(x, seqname, ranges) : trying to load regions beyond the boundaries of non-circular sequence "Chr3"」 というエラーに遭遇してしまいます...orz

    in_f1 <- "BSgenome.Athaliana.TAIR.TAIR9"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
    in_f2 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 500                          #転写開始点上流の塩基配列数を指定
    param2 <- 0                            #転写開始点下流の塩基配列数を指定
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(ゲノム情報を取得)
    library(in_f1, character.only=T)       #in_f1で指定したパッケージの読み込み
    tmp <- ls(paste("package", in_f1, sep=":"))#in_f1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
    genome                                 #確認してるだけです
    seqinfo(genome)                        #確認してるだけです
    genome@seqinfo@is_circular <- c(F, F, F, F, F, T, F)#確認してるだけです
    genome@seqinfo@is_circular             #確認してるだけです
    
    #前処理(アノテーション情報を取得)
    txdb <- makeTranscriptDbFromGFF(in_f2, format="gff3")#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    seqinfo(txdb)                          #確認してるだけです
    
    #本番(配列取得)
    out <- getPromoterSeq(transcriptsBy(txdb, by="gene"), genome, upstream=param1, downstream=param2)#指定した範囲のプロモーター配列を取得してoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    fasta <- unlist(out)        #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. シロイヌナズナ(TAIR10_chr_all.fas)の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

    UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、 makeTranscriptDbFromGFF関数を用いてTranscriptDbオブジェクトを作成しています。

    イントロ | NGS | 読み込み | FASTA形式 | description行の記述を整形を参考にして、 description行の文字列をgffファイルと対応がとれるように変更しています。それでもまだ 「以下にエラー value[[3L]](cond) : record 16760 (Chr3:23459805-23460304) was truncated」というエラーに遭遇します。 Chr3は23459830 bpしかないこと、gffファイルでも23460304のような存在しない領域を指定しているわけでもないので、理解不能です。

    in_f1 <- "TAIR10_chr_all.fas"          #入力ファイル名を指定してin_f1に格納(リファレンス配列)
    in_f2 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 500                          #転写開始点上流の塩基配列数を指定
    param2 <- 0                            #転写開始点下流の塩基配列数を指定
    param3 <- c("Chr1","Chr2","Chr3","Chr4","Chr5","ChrM","ChrC")#置換したい文字列を指定
    
    #必要なパッケージをロード
    library(Rsamtools)                     #パッケージの読み込み
    library(Biostrings)                    #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(ゲノム情報を取得)
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    names(fasta) <- param3                  #names(fasta)の中身をparam3で置換
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file="hogegege.fa", format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    
    #前処理(アノテーション情報を取得)
    txdb <- makeTranscriptDbFromGFF(in_f2, format="gff3")#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(配列取得)
    #本番
    gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
    hoge <- flank(gn, width=param1)        #指定した範囲の座標情報を取得
    out <- getSeq(FaFile("hogegege.fa"), hoge)#指定した範囲の塩基配列情報を取得
    #out <- getPromoterSeq(transcriptsBy(txdb, by="gene"), FaFile("hogegege.fa"), upstream=param1, downstream=param2)#指定した範囲のプロモーター配列を取得してoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    fasta <- unlist(out)        #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. ヒト("BSgenome.Hsapiens.NCBI.GRCh38")の[上流200塩基, 下流30塩基]のプロモーター配列を取得する場合:

    ヒトゲノム ("hg38"; 2013年12月にリリースされたGenome Reference Consortium GRCh38)です。 現状では、RefSeq Genes ("refGene")を指定するとTranscriptDbオブジェクト作成まではできますがgetPromoterSeq関数実行時にエラーが出ます。 また、Ensembl Genes ("ensGene")を指定するとTranscriptDbオブジェクト作成段階でエラーが出ます...orz

    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "BSgenome.Hsapiens.NCBI.GRCh38"#ゲノムのパッケージ名を指定
    param2 <- "hg38"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param3 <- "refGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param4 <- 200                          #転写開始点上流の塩基配列数を指定
    param5 <- 30                           #転写開始点下流の塩基配列数を指定
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(ゲノム情報を取得)
    library(param1, character.only=T)      #param1で指定したパッケージの読み込み
    tmp <- ls(paste("package", param1, sep=":"))#param1で指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
    genome                                 #確認してるだけです
    
    #前処理(アノテーション情報を取得)
    txdb <- makeTranscriptDbFromUCSC(genome=param2, tablename=param3)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(配列取得)
    out <- getPromoterSeq(transcriptsBy(txdb, by="gene"), genome, upstream=param4, downstream=param5)#指定した範囲のプロモーター配列を取得してoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    fasta <- unlist(out)        #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | 一般 | 配列取得 | トランスクリプトーム配列 | 公共DBから

    基本はNCBI Reference Sequence (RefSeq; Pruitt et al., Nucleic Acids Res., 2014)だと思います。結構頻繁にアップデートされているようです。 RefSeqの"NM_"や"AC_"などの説明についてはこちらをご覧ください。

    イントロ | 一般 | 配列取得 | トランスクリプトーム配列 | biomaRt(Durinck_2009)

    biomaRtパッケージ (Durinck et al., Nat Protoc., 2009)を用いて様々なIDに対応する転写物(トランスクリプトーム)配列を取得するやり方を示します。

    BioMart (Kasprzyk A., Database, 2011)本体のウェブサービスへのアクセスをR経由で行うもの、という理解でいいです。

    「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

    1. RefSeq mRNAをキーとしてヒトのcDNA配列を取得したい場合:

    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "refseq_mrna"       #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(IDリスト情報を取得)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    head(hoge)                             #確認してるだけです
    length(hoge)                           #ID数を表示
    
    #本番(配列取得)
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    dim(out)                               #配列数を表示
    
    #ファイルに保存
    exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
    	

    2. Ensembl Gene IDをキーとしてヒトのcDNA配列を取得したい場合:

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "ensembl_gene_id"   #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(IDリスト情報を取得)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    head(hoge)                             #確認してるだけです
    length(hoge)                           #ID数を表示
    
    #本番(配列取得)
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    dim(out)                               #配列数を表示
    
    #ファイルに保存
    exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
    	

    3. Ensembl Gene IDをキーとしてヒトのgene_exon_intron配列を取得したい場合:

    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "ensembl_gene_id"   #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "gene_exon_intron"    #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(IDリスト情報を取得)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    head(hoge)                             #確認してるだけです
    length(hoge)                           #ID数を表示
    
    #本番(配列取得)
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    dim(out)                               #配列数を表示
    
    #ファイルに保存
    exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
    	

    4. RefSeq mRNAをキーとしてラットのcDNA配列を取得したい場合:

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "rnorvegicus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "refseq_mrna"       #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(IDリスト情報を取得)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    head(hoge)                             #確認してるだけです
    length(hoge)                           #ID数を表示
    
    #本番(配列取得)
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    dim(out)                               #配列数を表示
    
    #ファイルに保存
    exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
    	

    5. EMBL (Genbank) IDをキーとしてモルモット(C. porcellus)の5' UTR配列を取得したい場合:

    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "cporcellus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- "embl"              #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_seqtype <- "5utr"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(IDリスト情報を取得)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
    head(hoge)                             #確認してるだけです
    length(hoge)                           #ID数を表示
    
    #本番(配列取得)
    out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                    seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
    dim(out)                               #配列数を表示
    
    #ファイルに保存
    exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
    	

    イントロ | NGS | 様々なプラットフォーム

    NGS機器(プラットフォーム)もいくつかあります:

    Pacific Biosciences (PacBio)について:

    PacBio RS II Systemは最長で20,000bp以上(平均は4,500 bp)読めるようですが配列のqualityが若干(85%程度)劣るようです。 しかしエラーの入る場所がランダムなようで多数決ルール(majority rule)でエラー補正がかなりうまくいくらしいです。 このロングリードでトランスクリプトーム配列決定(新規アイソフォームの発見)をヒト(Sharon et al., 2013)やニワトリ(Thomas et al., 2014)で行った論文などが出始めています。

    Smart-seq2の実験手順(Picelli et al., Nat Protoc., 2014)なども出ているようですね。 葉緑体ゲノムでのアセンブリ性能評価(Ferrarini et al., BMC Genomics, 2013)もなされています。

    NGS機器同士の比較:

    いくつか性能評価論文も出ているようです。

    配列長に関するあたりの旧世代との比較:

    生み出す配列長の特徴としては、いわゆる第一世代のApplied Biosystems Prism 3730 (ABI3730)やGEヘルスケア社のMegaBACEなどが500-1000bp程度読めるのに対して、 NGSデータはRoche 454が400bp程度(最新のGS FLX+という機種は700bpくらい読めるらしい)、Illumina Genome HiSeq 2500が最近片側150bpのpaired-end(ペアードエンド;合計300bp)を読めるようになった程度です。

    NGSプラットフォームに特徴的なエラーについて(Error profile):

    三点あるようですが、これを書いた当時(2010年頃)とは機器(Roche 454 GS20やIllumina 1G Analyzer)状況はもはや違うと思います。 どの論文を参考にしたかもすでに記憶があいまいです。下記三つの論文のうちのどれかだとは思うのですが。。。 どれが今も当てはまるのかまではちゃんとフォローしきれていませんのでご注意ください。

    ABI SOLiDについて:

    このプラットフォームのbase call (塩基配列の読み方)は特殊です。0,1,2,3の四つの数字で表現され、これらは"color"といわれるようです。 で、この各colorは一つ前の塩基と関連して塩基を表現しているようです。 となると本当の最初の塩基はどうやって表現するのだろう?と思いますが、アダプター配列のような感じでランごとに決まった塩基が付加?!されているようです(The reads's first base is a constant per run)。 というわけで、実験によって得られたこの"color space"を"base space"に変換するといったことをやる必要があるようですね。 このような特殊性のために、SOLiDデータのためのプログラムはそれほど多くないのでしょう(Miller et al., 2010)。

    イントロ | NGS | qPCRやmicroarrayなどとの比較

    一言でいえば、3者の再現性は高いようですが、全般的にはRNA-seqのほうがダイナミックレンジが広く特に低発現領域で優れているようです。

    NGS(RNA-seq) vs. RT-PCR:

    NGS(RNA-seq) vs. マイクロアレイ:

    マイクロアレイ vs. RT-PCR:

    三者比較:

    イントロ | NGS | 可視化(ゲノムブラウザやViewer)

    可視化ツールも結構あります。

    R以外(ゲノムブラウザ; client-side):

    Review(Wang et al., Brief Bioinform., 2013)によるserver-sideと client-sideの分類分けのうち、client-sideに相当するものたちだと思われます。AJAX-based browsersともいうらしいです。

    イントロ | NGS | 配列取得 | FASTQ or SRALite | 公共DBから

    次世代シーケンサ(NGS)から得られる塩基配列データを公共データベースから取得する際には以下を利用します。 マイクロアレイデータ取得のときと同様、NGSデータもArrayExpress経由でダウンロードするのがいいかもしれません。 メタデータの全貌を把握しやすいこと、生データ(raw data)だけでなく加工済みのデータ(processed data)がある場合にはその存在がすぐにわかることなど、 操作性の点で他を凌駕していると思います。上記でも触れているようにFASTQファイルのダウンロードからマッピングまでを行うのはエンドユーザレベルでは大変ですが、 submitterが提供してくれている場合は(まだまだ少ないようですが)リファレンス配列へのマップ後のデータ、つまりBAM形式ファイルの提供もすでに始まっているようです。 2014年6月26日に知りました(DDBJ児玉さんありがとうございますm(_ _)m)。

    データの形式は基本的にSanger typeのFASTQ形式です。 FASTA形式はリードあたり二行(idの行と配列の行)で表現します。 FASTQ形式はリードあたり4行(@から始まるidの行と配列の行、および+から始まるidの行とbase callの際のqualityの行)で表現します。 FASTQ形式は、Sangerのものがデファクトスタンダード(業界標準)です。 かつてIlluminaのプラットフォームから得られるのはFASTQ-like formatという表現がなされていたようです(Cock et al., Nucleic Acids Res., 2010)。 しかし少なくとも2013年頃には、IlluminaデータもBaseSpaceやCASAVA1.8のconfigureBclToFastq.plなどを用いることで業界標準のFASTQ形式(つまりSanger typeのデータ)に切り替えられるようですし、 NCBI SRAなどの公共DBから取得するデータは全てはSanger typeのデータになっていたと思います(Kibukawa E., テクニカルサポートウェビナー, 2013)。

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)

    SRAdbパッケージを用いてRNA-seq配列を取得するやり方を示します。 SRA形式ファイルの場合はNCBIからダウンロードしているようですが、FASTQ形式ファイルの場合はEBIからダウンロードしているようです(2014年6月23日、孫建強氏提供情報)。 ここではFASTQファイルをダウンロードするやり方を示します。

    「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

    1. RNA-seqデータ("SRA000299":Marioni et al., Genome Res., 2008)の実験デザインの全体像やファイルサイズを眺める場合:

    論文中の記述から腎臓(kidney: SRS000561)と肝臓(liver: SRS000562)サンプルの二群間比較であることがわかったうえで下記情報を眺めるとより理解が深まります。 この2のサンプルはさらに濃度別に2つに分類されています:腎臓3.0pM (SRX000605), 肝臓3.0pM (SRX000571), 腎臓1.5pM (SRX000606), 肝臓1.5pM (SRX000604)。

    param <- "SRA000299"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #本番(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #本番(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    	

    2. ヒトRNA-seqデータ("SRA000299":Marioni et al., Genome Res., 2008)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

    計6ファイル、合計7.3Gb程度の容量のファイルがダウンロードされます。東大の有線LANで一時間弱程度かかります。 早く終わらせたい場合は、最後のgetFASTQfile関数のオプションを'ftp'から'fasp'に変更すると時間短縮可能です。

    param <- "SRA000299"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    #getSRAfile(hoge$run, srcType='ftp', fileType='fastq')#こういう記述の仕方でもいいみたいです。
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    3. RNA-seqデータ("SRP017142":Neyret-Kahn et al., Genome Res., 2013)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

    論文中の記述からGSE42213を頼りに、 RNA-seqデータがGSE42212として収められていることを見出し、 その情報からSRP017142にたどり着いています。

    計6ファイル、合計6Gb程度の容量のファイルがダウンロードされます。東大の有線LANで一時間弱程度かかります。 早く終わらせたい場合は、最後のgetFASTQfile関数のオプションを'ftp'から'fasp'に変更すると時間短縮可能です。

    param <- "SRP017142"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    4. シロイヌナズナのRNA-seqデータ("SRP011435":Huang et al., Development, 2012)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

    論文中の記述からGSE36469を頼りに、 RNA-seqデータがGSE36469として収められていることを見出し、 その情報からSRP011435にたどり着いています。

    計8ファイル、合計10Gb程度の容量のファイルがダウンロードされます。東大の有線LANで2時間程度かかります。

    param <- "SRP011435"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    5. ニワトリのRNA-seqデータ("SRP038897":Sharon et al., PLoS One, 2014)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

    PacBioのデータです。計xファイル、合計x Gb程度の容量のファイルがダウンロードされます。東大の有線LANでx時間程度かかります。

    param <- "SRP038897"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    6. ヒトのRNA-seqデータ("SRP017580":Chan et al., Hum. Mol. Genet., 2013)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

    Illumina HiSeq 2000のpaired-endデータです。計6ファイル、合計8 Gb程度の容量のファイルがダウンロードされます。東大の有線LANで2時間程度かかります。

    param <- "SRP017580"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    7. カイコのsmall RNA-seqデータ("SRP016842":Nie et al., BMC Genomics, 2013)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

    論文中の記述からGSE41841を頼りに、 SRP016842にたどり着いています。 したがって、ここで指定するのは"SRP016842"となります。

    以下を実行して得られるsmall RNA-seqファイルは1つ(SRR609266.fastq.gz)で、ファイルサイズは400Mb弱、11928428リードであることがわかります。

    param <- "SRP016842"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    イントロ | NGS | 配列取得 | シミュレーションデータ | について

    NGSのシミュレーションデータを作成するプログラムもいくつかあるようです。

    Rパッケージ:

    イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成から

    イントロ | 一般 | ランダムな塩基配列を生成と同じ手順でリファレンスとなる塩基配列を生成してから、 指定した配列長からなる部分配列を指定したリード数だけランダム抽出してシミュレーションNGSデータを生成するやり方を示します。

    「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

    1. 50塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を10リード分だけランダム抽出してFASTA形式で保存したい場合:

    塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。

    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param_len_ref <- 50                    #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 10                    #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | NGS | アノテーション情報取得 | について

    アノテーション情報の取り扱いやGFF形式のアノテーションファイルの読み込みなどは下記パッケージで利用可能です。例えば、 genomeIntervals中のreadGff3関数や、 GenomicFeatures中のmakeTranscriptDbFromGFF関数などです。

    イントロ | NGS | アノテーション情報取得 | GFF/GTF形式ファイル

    多くの生物種についてEnsembl (Flicek et al., Nucleic Acids Res., 2013) のFTPサイトからGTF形式(GFF ver. 2)の遺伝子アノテーションファイルを得ることができます。 GTFはGeneral Transfer FormatまたはGene Transfer Formatの略で、GTFの派生版としてGTF2というフォーマットもあるようです。 また、General Feature Format ver. 3 (GFF3)という形式も存在するなど、 GFF/GTF形式として総称されている中で様々なバリエーションがあります。いずれもrefFlat形式同様、どの領域にどの遺伝子があるのかという座標(Coordinates)情報を含みます。 ゲノム配列のバージョンと同じであることを確認した上で用いましょう。

    イントロ | NGS | アノテーション情報取得 | refFlat形式ファイル

    数多くの生物種についてはUCSCのSequence and Annotation Downloadsから辿っていけばrefFlat形式の遺伝子アノテーションファイルを得ることができます。

    このrefFlat形式のアノテーションファイルは、どの領域にどの遺伝子があるのかという座標(Coordinates)情報を含みます。

    具体的な使途としては、例えばゲノム配列に対してマッピングした結果から既知遺伝子の発現レベルを見積もるところ(正規化 | 基礎 | RPKM | ゲノム)で必要となります。

    マイクロアレイ解析に慣れた人への説明としては、NGS(RNA-seqリード)のゲノムマッピング結果から遺伝子発現行列をお手軽に得るために必要なおまじないのファイル、のようなものだと解釈していただければいいと思います。

    例として、ヒトとラットのrefFlatファイルを取得する手順を示します。

    Humanの場合:

    1. UCSCのSequence and Annotation Downloadsの"Human"をクリック
    2. Annotation databaseをクリック
    3. (アルファベット順に並んでいるので)refFlat.txt.gzをクリック

    得られた圧縮ファイルを解凍するとrefFlat.txtが得られます。

    Ratの場合:

    1. UCSCのSequence and Annotation Downloadsの"Rat"をクリック
    2. Annotation databaseをクリック
    3. (アルファベット順に並んでいるので)refFlat.txt.gzをクリック

    得られた圧縮ファイルを解凍するとRatのrefFlat.txtが得られます。

    UCSC以外にもRefSeq, Ensembl, AceViewなどからも似たような情報を取得可能なようです。

    イントロ | NGS | アノテーション情報取得 | biomaRt(Durinck_2009)

    biomaRtというRパッケージ(Durinck et al., Nat Protoc., 2009)を用いて、 様々な生物種のアノテーション情報を取得するやり方を示します。一般的にはBioMart (Kasprzyk A., Database, 2011)本体のウェブページ上でやるのでしょうが、私はGUIの変遷についていけませんorz...

    ここでは、Ensembl Geneにデータセットを固定した状態で様々な生物種のアノテーション情報を取得するやり方を示します。

    尚、Ensembl (Flicek et al., 2013)の遺伝子モデル(gene model)はリファレンスゲノムから直接アノテーションされたものであるのに対して、RefSeqはmRNA配列からアノテーションされたものです。 当然、リファレンスゲノムと個々のmRNA配列は異なりますので、RefSeq mRNA配列の一部はリファレンスゲノム配列にマップされません。

    「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

    1. ラット(Rattus norvegicus; rnorvegicus_gene_ensembl)の場合:

    取得する情報を4つ指定しています: (1) "ensembl_gene_id", (2) "ensembl_transcript_id", (3) "affy_rat230_2" (Affymetrix Rat Genome 230 2.0 Array; GPL1355のプローブセットID), (4) "go_id"。

    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "rnorvegicus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "ensembl_gene_id",      #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "ensembl_transcript_id",#取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "affy_rat230_2",        #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                        )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(取得可能なアノテーション情報をリストアップ)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ
    
    #本番(アノテーション情報取得)
    out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
    head(out)                              #確認してるだけです
    dim(out)                               #行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    2. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

    取得する情報を3つ指定しています: (1) "ensembl_transcript_id", (2) "affy_hg_u133_plus_2" (Affymetrix Human Genome U133 Plus 2.0 Array; GPL570のプローブセットID), (3) "refseq_mrna"。

    27万行程度のファイルが得られます。

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "ensembl_transcript_id",#取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "affy_hg_u133_plus_2",  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "refseq_mrna"           #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                        )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(取得可能なアノテーション情報をリストアップ)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ
    
    #本番(アノテーション情報取得)
    out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
    head(out)                              #確認してるだけです
    dim(out)                               #行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    3. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

    取得する情報を3つ指定しています: (1) "refseq_mrna", (2) "hgnc_symbol", (3) "go_id"。

    56万行程度のファイルが得られます。

    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "refseq_mrna",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "hgnc_symbol",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                        )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(取得可能なアノテーション情報をリストアップ)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ
    
    #本番(アノテーション情報取得)
    out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
    head(out)                              #確認してるだけです
    dim(out)                               #行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    4. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

    取得する情報を3つ指定しています: (1) "refseq_mrna", (2) "hgnc_symbol", (3) "go_id"。

    3.と基本的には同じですが、refseq_mrna IDが存在するもののみフィルタリングした結果を出力しています。 42.6万行程度のファイルが得られます。以下では"with_ox_refseq_mrna"をオプションとして与えていますが、 なぜかlistFilters(mart)でリストアップされているので指定可能なはずの"refseq_mrna"でやるとエラーが出てしまいます。。。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "refseq_mrna",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "hgnc_symbol",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                        )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    param_filter <- "with_ox_refseq_mrna"  #フィルタリング条件を指定(「listFilters(mart)」にリストアップされているものを指定可能)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(取得可能なアノテーション情報をリストアップ)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ
    
    #本番(アノテーション情報取得)
    out <- getBM(attributes=param_attribute, filters=param_filter, values=list(TRUE), mart=mart)#アノテーション情報取得結果をhogeに格納
    head(out)                              #確認してるだけです
    dim(out)                               #行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    5. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

    取得する情報を3つ指定しています: (1) "refseq_mrna", (2) "hgnc_symbol", (3) "go_id"。

    4.と同じ結果を得るべく、「refseq_mrna IDが存在するもののみフィルタリング」のところをgetBM関数のfiltersオプション使用以外の手段で行っています。

    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "refseq_mrna",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "hgnc_symbol",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                   "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                        )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
    
    #必要なパッケージをロード
    library(biomaRt)                       #パッケージの読み込み
    
    #前処理(取得可能なアノテーション情報をリストアップ)
    mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
    listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ
    
    #本番(アノテーション情報取得)
    out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
    head(out)                              #確認してるだけです
    dim(out)                               #行数と列数を表示
    
    #後処理(行列outの1列目の情報が存在するもののみフィルタリング:「out <- subset(out, refseq_mrna != "")」でもよい)
    obj <- out[,1] != ""                   #条件を満たすかどうかを判定した結果をobjに格納
    out <- out[obj,]                       #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    イントロ | NGS | アノテーション情報取得 | TranscriptDb | について

    アノテーション情報を取り扱うためにRでよく利用されるオブジェクトは、TranscriptDb以外に、RangedData、GRangesListなどなどが挙げられますが、 このウェブページでは、TranscriptDbというオブジェクトをアノテーション情報の基本オブジェクトとし、txdbというオブジェクト名で統一して取り扱っています。

    このtxdbに対して、GenomicFeaturesで利用可能な transcripts, exons, cds, genes, promoters, disjointExons, microRNAs, tRNAsなどの関数を適用して、GRanges形式のオブジェクトを得ることができます。 出力情報を制限したい場合には、 transcriptsByOverlaps, exonsByOverlaps, cdsByOverlapsなどの関数が利用可能です。

    GRanges形式やGRangesList形式オブジェクトの取り扱いはGenomicRangesに記載されています。

    イントロ | NGS | アノテーション情報取得 | TranscriptDb | TxDb.*から

    QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TranscriptDb"という形式のオブジェクトを利用する必要があります。TranscriptDbオブジェクトは、makeTranscriptDbFromGFF関数を用いてGTF形式ファイルを入力として作成することも可能ですが、 最も手っ取り早いやり方はTranscriptDbオブジェクト形式で格納されている"TxDb.*"という名前のパッケージを利用することです。 利用可能なTxDb.*パッケージはここにリストアップされているものたちです。

    (1)「全パッケージリスト(All Packages)」中の、
    (2)「AnnotationDataの左側のさんかく」、
    (3)「PackageTypeの左側のさんかく」、
    (4)「TranscriptDb」からも辿れます。

    ここでは、いくつかのパッケージの読み込みまでを示します。

    1. TxDb.Hsapiens.UCSC.hg19.knownGene(ヒト)の場合:

    param <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    txdb                                   #確認してるだけです
    	

    2. TxDb.Rnorvegicus.UCSC.rn5.refGene(ラット)の場合:

    param <- "TxDb.Rnorvegicus.UCSC.rn5.refGene"#パッケージ名を指定
    
    #必要なパッケージをロード
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    
    #前処理
    #tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    txdb                                   #確認してるだけです
    	

    3. TxDb.Rnorvegicus.UCSC.rn5.refGeneパッケージのインストールをしたい場合:

    パッケージのインストールができていなかった場合の対処法の例です。

    param <- "TxDb.Rnorvegicus.UCSC.rn5.refGene"#パッケージ名を指定
    
    #本番
    source("http://bioconductor.org/biocLite.R")#おまじない
    biocLite(param)                        #おまじない
    	

    イントロ | NGS | アノテーション情報取得 | TranscriptDb | GenomicFeatures(Lawrence_2013)

    QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TranscriptDb"という形式のオブジェクトを利用する必要があります。ここでは、GenomicFeatures パッケージを用いてTranscriptDbオブジェクトを得るやり方を示します。

    得られるTranscriptDbオブジェクトの元データのバージョンは、当然ここで作成されたもののほうが新しいです。 したがって、慣れてきたら、予め作成された"TxDb.*"パッケージのものを使うよりもここで直接作成してしまうほうがいいでしょう。 しかし、逆に言えば作成するたびに転写物数("transcript_nrow"のところの数値など)が異なってきますので、"RSQLite version at creation time"のところの情報は気にしたほうがいいでしょう。

    1. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    どういうものを取得可能かリストアップしているだけです。

    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    library(rtracklayer)                   #パッケージの読み込み
    
    #前処理(UCSCから取得可能なゲノム情報をリストアップ)
    ucscGenomes()                          #ゲノム情報をリストアップ
    
    #前処理(makeTranscriptDbFromUCSC関数で取得可能なtable情報をリストアップ)
    supportedUCSCtables()                  #table情報をリストアップ
    	

    2. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    ヒトゲノム ver. 19 ("hg19"; Genome Reference Consortium GRCh37のことらしい)のUCSC Genes ("knownGene")のTranscriptDbオブジェクトを取得するやり方です。

    実質的に、"TxDb.Hsapiens.UCSC.hg19.knownGene"パッケージから取得可能なものと同じ(はず)です。

    param1 <- "hg19"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "knownGene"                  #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    	

    3. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    ヒトゲノム ver. 19 ("hg19")のEnsembl Genes ("ensGene")のTranscriptDbオブジェクトを取得するやり方です。

    IDはEntrez Gene IDのままで、配列長情報などがEnsembl Genesのものになるだけのようです。

    param1 <- "hg19"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    transcripts(txdb)                      #確認してるだけです
    	

    4. Ensemblから遺伝子アノテーション情報を取得する場合:

    ヒト("hsapiens_gene_ensembl")のTranscriptDbオブジェクトを取得するやり方です。

    param <- "hsapiens_gene_ensembl"       #データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromBiomart(dataset=param)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    transcripts(txdb)                      #確認してるだけです
    	

    5. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    マウスゲノム ("mm10"; Genome Reference Consortium GRCm38)のEnsembl Genes ("ensGene")のTranscriptDbオブジェクトを取得するやり方です。

    param1 <- "mm10"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    transcripts(txdb)                      #確認してるだけです
    	

    6. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    ラットゲノム ("rn5"; RGSC Rnor_5.0)のEnsembl Genes ("ensGene")のTranscriptDbオブジェクトを取得するやり方です。

    param1 <- "rn5"                        #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    transcripts(txdb)                      #確認してるだけです
    	

    7. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    ヒツジゲノム ("oviAri3"; ISGC Oar_v3.1)のEnsembl Genes ("ensGene")のTranscriptDbオブジェクトを取得するやり方です。

    param1 <- "oviAri3"                    #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    transcripts(txdb)                      #確認してるだけです
    	

    8. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

    ニワトリゲノム ("galGal4"; ICGC Gallus-gallus-4.0)のEnsembl Genes ("ensGene")のTranscriptDbオブジェクトを取得するやり方です。

    param1 <- "galGal4"                    #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    transcripts(txdb)                      #確認してるだけです
    	

    イントロ | NGS | アノテーション情報取得 | TranscriptDb | GFF/GTF形式ファイルから

    QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TranscriptDb"という形式のオブジェクトを利用する必要があります。ここでは、GenomicFeatures パッケージを用いて手元にあるGFF/GTF形式ファイルを入力としてTranscriptDbオブジェクトを得るやり方を示します。

    基本的にはGenomicFeaturesパッケージ中のmakeTranscriptDbFromGFF関数を用いてGFF/GTF形式ファイルを読み込むことで TranscriptDbオブジェクトをエラーなく読み込むこと自体は簡単にできます。しかし、得られたTranscriptDbオブジェクトとゲノムマッピング結果ファイルを用いてカウント情報を得る場合に、 ゲノム配列提供元とアノテーション情報提供元が異なっているとエラーとなります。具体的には、GFF/GTFファイル中にゲノム配列中にない染色体名があるとエラーが出る場合があります。

    1. TAIR(Lamesch et al., Nucleic Acids Res., 2012) から提供されているArabidopsisのGFF3形式ファイル(TAIR10_GFF3_genes.gff)の場合:

    基本形です。

    in_f <- "TAIR10_GFF3_genes.gff"        #入力ファイル名を指定してin_fに格納(GFF/GTFファイル)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #本番(TranscriptDbオブジェクトの作成)
    txdb <- makeTranscriptDbFromGFF(in_f)  #txdbオブジェクトの作成
    txdb                                   #確認してるだけです
    	

    2. サンプルデータ23のヒトGTFファイル(human_annotation_sub3.gtf)の場合:

    基本形です。

    in_f <- "human_annotation_sub3.gtf"    #入力ファイル名を指定してin_fに格納(GFF/GTFファイル)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #本番(TranscriptDbオブジェクトの作成)
    txdb <- makeTranscriptDbFromGFF(in_f, format="gtf")#txdbオブジェクトの作成
    txdb                                   #確認してるだけです
    	

    3. サンプルデータ23のヒトGTFファイル(human_annotation_sub3.gtf)の場合:

    うまくいく例です。

    in_f1 <- "human_annotation_sub3.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(リファレンス配列の染色体名を抽出)
    param <- in_f2                         #paramという名前で取り扱いたいだけです
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
    chrominfo <- data.frame(chrom=as.character(seqnames(hoge)),#染色体情報をchrominfoに格納
                            length=as.vector(seqlengths(hoge)),#染色体情報をchrominfoに格納
                          is_circular=hoge@seqinfo@is_circular)#染色体情報をchrominfoに格納
    
    #本番(TranscriptDbオブジェクトの作成)
    txdb <- makeTranscriptDbFromGFF(file=in_f1, format="gtf",#txdbオブジェクトの作成
                         exonRankAttributeName="exon_number",#txdbオブジェクトの作成
                          gffGeneIdAttributeName="gene_name",#txdbオブジェクトの作成
                       chrominfo=chrominfo,#txdbオブジェクトの作成
                    species=organism(hoge))#txdbオブジェクトの作成
    txdb                                   #確認してるだけです
    	

    4. サンプルデータ22のヒトGTFファイル(human_annotation_sub2.gtf)の場合:

    うまくいかない例です。

    in_f1 <- "human_annotation_sub2.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(リファレンス配列の染色体名を抽出)
    param <- in_f2                         #paramという名前で取り扱いたいだけです
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
    chrominfo <- data.frame(chrom=as.character(seqnames(hoge)),#染色体情報をchrominfoに格納
                            length=as.vector(seqlengths(hoge)),#染色体情報をchrominfoに格納
                          is_circular=hoge@seqinfo@is_circular)#染色体情報をchrominfoに格納
    
    #本番(TranscriptDbオブジェクトの作成)
    txdb <- makeTranscriptDbFromGFF(file=in_f1, format="gtf",#txdbオブジェクトの作成
                         exonRankAttributeName="exon_number",#txdbオブジェクトの作成
                          gffGeneIdAttributeName="gene_name",#txdbオブジェクトの作成
                       chrominfo=chrominfo,#txdbオブジェクトの作成
                    species=organism(hoge))#txdbオブジェクトの作成
    txdb                                   #確認してるだけです
    	

    5. サンプルデータ21のヒトGTFファイル(human_annotation_sub1.gtf)の場合:

    うまくいかない例です。

    in_f1 <- "human_annotation_sub1.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(リファレンス配列の染色体名を抽出)
    param <- in_f2                         #paramという名前で取り扱いたいだけです
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
    chrominfo <- data.frame(chrom=as.character(seqnames(hoge)),#染色体情報をchrominfoに格納
                            length=as.vector(seqlengths(hoge)),#染色体情報をchrominfoに格納
                          is_circular=hoge@seqinfo@is_circular)#染色体情報をchrominfoに格納
    
    #本番(TranscriptDbオブジェクトの作成)
    txdb <- makeTranscriptDbFromGFF(file=in_f1, format="gtf",#txdbオブジェクトの作成
                         exonRankAttributeName="exon_number",#txdbオブジェクトの作成
                          gffGeneIdAttributeName="gene_name",#txdbオブジェクトの作成
                       chrominfo=chrominfo,#txdbオブジェクトの作成
                    species=organism(hoge))#txdbオブジェクトの作成
    txdb                                   #確認してるだけです
    	

    イントロ | NGS | 読み込み | FASTA形式 | 基本情報を取得

    multi-FASTAファイルを読み込んで、Total lengthやaverage lengthなどの各種情報取得を行うためのやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(基本情報取得)
    Total_len <- sum(width(fasta))         #コンティグの「トータルの長さ」を取得
    Number_of_contigs <- length(fasta)     #「コンティグ数」を取得
    Average_len <- mean(width(fasta))      #コンティグの「平均長」を取得
    Median_len <- median(width(fasta))     #コンティグの「中央値」を取得
    Max_len <- max(width(fasta))           #コンティグの長さの「最大値」を取得
    Min_len <- min(width(fasta))           #コンティグの長さの「最小値」を取得
    
    #本番(N50情報取得)
    sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
    obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
    N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納
    
    #本番(GC含量情報取得)
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得
    
    #ファイルに保存
    tmp <- NULL
    tmp <- rbind(tmp, c("Total length (bp)", Total_len))
    tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
    tmp <- rbind(tmp, c("Average length", Average_len))
    tmp <- rbind(tmp, c("Median length", Median_len))
    tmp <- rbind(tmp, c("Max length", Max_len))
    tmp <- rbind(tmp, c("Min length", Min_len))
    tmp <- rbind(tmp, c("N50", N50))
    tmp <- rbind(tmp, c("GC content", GC_content))
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. 130MB程度のRefSeqのhuman mRNAのmulti-FASTAファイル(h_rna.fasta)の場合:

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(基本情報取得)
    Total_len <- sum(width(fasta))         #コンティグの「トータルの長さ」を取得
    Number_of_contigs <- length(fasta)     #「コンティグ数」を取得
    Average_len <- mean(width(fasta))      #コンティグの「平均長」を取得
    Median_len <- median(width(fasta))     #コンティグの「中央値」を取得
    Max_len <- max(width(fasta))           #コンティグの長さの「最大値」を取得
    Min_len <- min(width(fasta))           #コンティグの長さの「最小値」を取得
    
    #本番(N50情報取得)
    sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
    obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
    N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納
    
    #本番(GC含量情報取得)
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得
    
    #ファイルに保存
    tmp <- NULL
    tmp <- rbind(tmp, c("Total length (bp)", Total_len))
    tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
    tmp <- rbind(tmp, c("Average length", Average_len))
    tmp <- rbind(tmp, c("Median length", Median_len))
    tmp <- rbind(tmp, c("Max length", Max_len))
    tmp <- rbind(tmp, c("Min length", Min_len))
    tmp <- rbind(tmp, c("N50", N50))
    tmp <- rbind(tmp, c("GC content", GC_content))
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    FASTA形式ファイルの読み込み部分で、Biostringsパッケージ中のreadDNAStringSet関数ではなく、seqinrパッケージ中のread.fasta関数を用いるやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqinr)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとDNAStringSet形式への変換
    hoge <- read.fasta(in_f, seqtype="DNA", as.string=TRUE)#in_fで指定したファイルの読み込み
    fasta <- DNAStringSet(as.character(hoge))#型変換
    names(fasta) <- names(hoge)            #型変換
    
    #本番(基本情報取得)
    Total_len <- sum(width(fasta))         #コンティグの「トータルの長さ」を取得
    Number_of_contigs <- length(fasta)     #「コンティグ数」を取得
    Average_len <- mean(width(fasta))      #コンティグの「平均長」を取得
    Median_len <- median(width(fasta))     #コンティグの「中央値」を取得
    Max_len <- max(width(fasta))           #コンティグの長さの「最大値」を取得
    Min_len <- min(width(fasta))           #コンティグの長さの「最小値」を取得
    
    #本番(N50情報取得)
    sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
    obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
    N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納
    
    #本番(GC含量情報取得)
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得
    
    #ファイルに保存
    tmp <- NULL
    tmp <- rbind(tmp, c("Total length (bp)", Total_len))
    tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
    tmp <- rbind(tmp, c("Average length", Average_len))
    tmp <- rbind(tmp, c("Median length", Median_len))
    tmp <- rbind(tmp, c("Max length", Max_len))
    tmp <- rbind(tmp, c("Min length", Min_len))
    tmp <- rbind(tmp, c("N50", N50))
    tmp <- rbind(tmp, c("GC content", GC_content))
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. 120MB程度のシロイヌナズナゲノムのmulti-FASTAファイル(TAIR10_chr_all.fas)の場合:

    in_f <- "TAIR10_chr_all.fas"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(基本情報取得)
    Total_len <- sum(width(fasta))         #コンティグの「トータルの長さ」を取得
    Number_of_contigs <- length(fasta)     #「コンティグ数」を取得
    Average_len <- mean(width(fasta))      #コンティグの「平均長」を取得
    Median_len <- median(width(fasta))     #コンティグの「中央値」を取得
    Max_len <- max(width(fasta))           #コンティグの長さの「最大値」を取得
    Min_len <- min(width(fasta))           #コンティグの長さの「最小値」を取得
    
    #本番(N50情報取得)
    sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
    obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
    N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納
    
    #本番(GC含量情報取得)
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得
    
    #ファイルに保存
    tmp <- NULL
    tmp <- rbind(tmp, c("Total length (bp)", Total_len))
    tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
    tmp <- rbind(tmp, c("Average length", Average_len))
    tmp <- rbind(tmp, c("Median length", Median_len))
    tmp <- rbind(tmp, c("Max length", Max_len))
    tmp <- rbind(tmp, c("Min length", Min_len))
    tmp <- rbind(tmp, c("N50", N50))
    tmp <- rbind(tmp, c("GC content", GC_content))
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    5. Ensembl Genomesから取得した乳酸菌ゲノムのmulti-FASTAファイル(Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa)の場合:

    Lactobacillus casei 12A (Taxonomy ID: 1051650)Broadbent et al., BMC Genomics, 2012のゲノム配列です。

    Lactobacillus casei 12A - Download DNA sequence - Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa.gzをダウンロード後に解凍すれば、同じファイル名のものが得られます。

    in_f <- "Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(基本情報取得)
    Total_len <- sum(width(fasta))         #コンティグの「トータルの長さ」を取得
    Number_of_contigs <- length(fasta)     #「コンティグ数」を取得
    Average_len <- mean(width(fasta))      #コンティグの「平均長」を取得
    Median_len <- median(width(fasta))     #コンティグの「中央値」を取得
    Max_len <- max(width(fasta))           #コンティグの長さの「最大値」を取得
    Min_len <- min(width(fasta))           #コンティグの長さの「最小値」を取得
    
    #本番(N50情報取得)
    sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
    obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
    N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納
    
    #本番(GC含量情報取得)
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得
    
    #ファイルに保存
    tmp <- NULL
    tmp <- rbind(tmp, c("Total length (bp)", Total_len))
    tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
    tmp <- rbind(tmp, c("Average length", Average_len))
    tmp <- rbind(tmp, c("Median length", Median_len))
    tmp <- rbind(tmp, c("Max length", Max_len))
    tmp <- rbind(tmp, c("Min length", Min_len))
    tmp <- rbind(tmp, c("N50", N50))
    tmp <- rbind(tmp, c("GC content", GC_content))
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    イントロ | NGS | 読み込み | FASTA形式 | description行の記述を整形

    multi-FASTAファイルのdescription行の記述はものによってまちまちです。ここでは何種類かのmulti-FASTA形式ファイルに対して、 「目的の記述部分のみ抽出し、それを新たなdescription」とするやり方や、まるごと指定した文字列に置換するやり方などを示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ラットの上流配列(1000bp)ファイル(rat_upstream_1000.fa)からRefSeq IDの部分のみを抽出したい場合:

    抽出例:「NM_022953_up_1000_chr1_268445091_r chr1:268445091-268446090」--> 「NM_022953」

    戦略:"_up_"を区切り文字として分割("NM_022953"と"1000_chr1_268445091_r chr1:268445091-268446090")し、分割後の1つ目の要素を抽出

    例題ファイルのダウンロード時に、なぜか拡張子の.faが.txtに勝手に変更されていたりする場合がありますのでご注意ください。

    in_f <- "rat_upstream_1000.fa"         #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "_up_"                       #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
    names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. Trinity.fastaから最初のスペースで区切られる前の文字列のみにしたい場合:

    抽出例:「comp59_c0_seq1 len=537 ~FPKM=305.1 path=[0:0-536]」--> 「comp59_c0_seq1」

    戦略:" "を区切り文字として分割("comp59_c0_seq1", "len=537", "~FPKM=305.1", "path=[0:0-536]")し、分割後の1つ目の要素を抽出

    in_f <- "Trinity.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素を抽出してhoge2に格納
    names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. DHFR.fastaからRefSeq ID部分のみ抽出したい場合:

    抽出例:「gi|68303806|ref|NM_000791.3| Homo sapiens dihydrofolate reductase (DHFR), mRNA」--> 「NM_000791.3」

    戦略:"|"を区切り文字として分割("gi", "68303806", "ref", "NM_000791.3", " Homo sapiens dihydrofolate reductase (DHFR), mRNA")し、分割後の4番目の要素を抽出

    in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "|"                          #区切り文字を指定
    param2 <- 4                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
    names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. DHFR.fastaからバージョン番号を除いたRefSeq ID部分のみ抽出したい場合:

    抽出例:「gi|68303806|ref|NM_000791.3| Homo sapiens dihydrofolate reductase (DHFR), mRNA」--> 「NM_000791」

    戦略:"|"を区切り文字として分割("gi", "68303806", "ref", "NM_000791.3", " Homo sapiens dihydrofolate reductase (DHFR), mRNA")し、分割後の4番目の要素を抽出。 次に、"."を区切り文字として分割("NM_000791", "3")し、分割後の1番目の要素を抽出。

    in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "|"                          #区切り文字を指定
    param2 <- 4                            #分割後に抽出したい要素番号を指定
    param3 <- "."                          #区切り文字を指定
    param4 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがバージョン番号つきのRefSeq IDに相当)を抽出してhoge2に格納
    hoge3 <- strsplit(hoge2, param3, fixed=TRUE)#hoge2中の文字列をparam3で区切った結果をリスト形式でhoge3に格納
    hoge4 <- unlist(lapply(hoge3, "[[", param4))#hoge3のリスト中の(param4)番目の要素(これがRefSeq IDのバージョン部分以外に相当)を抽出してhoge4に格納
    names(fasta) <- hoge4                  #names(fasta)の中身をhoge4で置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. sample_100.fastaからバージョン番号を除いたRefSeq ID部分のみ抽出したい場合:

    抽出例:「gi|239744030|ref|XR_017086.3| PREDICTED: Homo sapiens supervillin-like (LOC645954), miscRNA」--> 「XR_017086」

    戦略:"|"を区切り文字として分割("gi", "239744030", "ref", "XR_017086.3", " PREDICTED: Homo sapiens supervillin-like (LOC645954), miscRNA")し、分割後の4番目の要素を抽出。 次に、"."を区切り文字として分割("XR_017086", "3")し、分割後の1番目の要素を抽出。

    in_f <- "sample_100.fasta"             #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "|"                          #区切り文字を指定
    param2 <- 4                            #分割後に抽出したい要素番号を指定
    param3 <- "."                          #区切り文字を指定
    param4 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがこれがバージョン番号つきのRefSeq IDに相当)を抽出してhoge2に格納
    hoge3 <- strsplit(hoge2, param3, fixed=TRUE)#hoge2中の文字列をparam3で区切った結果をリスト形式でhoge3に格納
    hoge4 <- unlist(lapply(hoge3, "[[", param4))#hoge3のリスト中の(param4)番目の要素(これがRefSeq IDのバージョン部分以外に相当)を抽出してhoge4に格納
    names(fasta) <- hoge4                  #names(fasta)の中身をhoge4で置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. シロイヌナズナのゲノム配列ファイル(TAIR10_chr_all.fas; Lamesch et al., Nucleic Acids Res., 2012)のdescription部分をまるまる任意の文字列に置換したい場合:

    染色体の並びがparamで指定したものと同じであることが既知という前提です。ゲノム配列ファイル自体は120MB程度あります。

    in_f <- "TAIR10_chr_all.fas"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- c("Chr1","Chr2","Chr3","Chr4","Chr5","ChrM","ChrC")#置換したい文字列を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    names(fasta) <- param                  #names(fasta)の中身をparamで置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | NGS | 読み込み | FASTQ形式

    Sanger FASTQ形式ファイルを読み込むやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    quality情報を除く塩基配列情報のみ読み込むやり方です。配列長が同じ場合のみ読み込めます。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    quality情報も読み込むやり方です。配列長が異なっていても読み込めます。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    fastq                                  #確認してるだけです
    
    showClass("ShortReadQ")                #ShortReadQ"というクラスのオブジェクトからどのように情報を取得するかを調べたい場合
    sread(fastq)                           #塩基配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    	

    3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    quality情報も読み込むやり方です。配列長が異なっていても読み込めます。 description行の" "以降の文字を削除して、またFASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fastq"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), " ", fixed=TRUE)#id(fasta)中の文字列を" "で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", 1))#hogeのリスト中の一番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    quality情報も読み込むやり方です。配列長が異なっていても読み込めます。 description行の" "以降の文字を削除して、またFASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fastq.gz"              #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), " ", fixed=TRUE)#id(fasta)中の文字列を" "で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", 1))#hogeのリスト中の一番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
    	

    5. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。 この中から100000リード分をランダムに非復元抽出した結果をgzip圧縮なしで出力しています。 出力ファイルはSRR609266_sub.fastqと同じもの(100000リード; 約16MB)になります。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- 100000                        #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #本番
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    obj <- sample(1:length(fastq), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
    fastq <- fastq[sort(obj)]              #objで指定したリードのみ抽出した結果をfastqに格納
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    6. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。この中から最初の100000リード分をgzip圧縮なしで出力しています。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- 100000                        #抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #本番
    fastq <- fastq[1:param]                #指定したリード数を抽出した結果をfastqに格納
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    イントロ | NGS | 読み込み | FASTQ形式 | description行の記述を整形

    FASTQ形式ファイルに対して、 「目的の記述部分のみ抽出し、それを新たなdescription」としてFASTQ形式で保存するやり方などを示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

    戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

    writeFastq関数実行時にcompress=Fとして非圧縮FASTQ形式ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

    戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

    writeFastq関数実行時にcompress=Tとしてgzip圧縮FASTQ形式ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fastq.gz"              #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
    	

    3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

    戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

    writeXStringSet関数実行時にcompress=Fとして非圧縮FASTA形式ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
    names(fasta) <- description            #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

    戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

    writeXStringSet関数実行時にcompress=Tとしてgzip圧縮FASTA形式ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta.gz"              #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
    names(fasta) <- description            #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", compress=T, width=50)#fastaの中身を指定したファイル名で保存
    	

    5. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

    戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出。 次に、"."を区切り文字として分割("SRR037439"と"1")し、分割後の2つ目の要素を抽出

    writeFastq関数実行時にcompress=Fとして非圧縮FASTQ形式ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.fastq"                 #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    param3 <- "."                          #区切り文字を指定
    param4 <- 2                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納
    hoge <- strsplit(as.character(description), param3, fixed=TRUE)#description中の文字列をparam3で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param4))#hogeのリスト中の(param4)番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    6. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

    戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出。 次に、"."を区切り文字として分割("SRR037439"と"1")し、分割後の2つ目の要素を抽出

    writeXStringSet関数実行時にcompress=Fとして非圧縮FASTA形式ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- " "                          #区切り文字を指定
    param2 <- 1                            #分割後に抽出したい要素番号を指定
    param3 <- "."                          #区切り文字を指定
    param4 <- 2                            #分割後に抽出したい要素番号を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #description情報を表示
    
    #前処理
    hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納
    hoge <- strsplit(as.character(description), param3, fixed=TRUE)#description中の文字列をparam3で区切った結果をリスト形式でhogeに格納
    description <- BStringSet(sapply(hoge,"[[", param4))#hogeのリスト中の(param4)番目の要素のみ取り出してdescriptionに格納
    
    #本番
    fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
    names(fasta) <- description            #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", compress=F, width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | NGS | 読み込み | Illuminaの*_seq.txt

    Illuminaの出力ファイルで、初期のものは*_seq.txtというものらしいです。実際の生の配列データファイルは数百程度に分割されています。ここでは、そのファイル群がおさめられているディレクトリ(例:tmp)を指定して、その中の「*_seq.txt」ファイル群について一気に行う方法を示します。ここでは、(s_1_0001_seq.txts_1_0007_seq.txtの二つのファイルを含む; それぞれ1394行および826行からなる)フォルダを指定して読み込み、multi-FASTA形式で出力するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 指定したディレクトリ中に*_seq.txtという形式のファイルしかないという前提のもとで行う場合:

    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "kkk"                         #FASTA形式ファイルのdescription行に記述する内容を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- c(rep(list(NULL), 4), "DNAString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。最初の4列には"NULL"を、最後の5列目には"DNAString"というベクトルを作成してcolClassesに格納している
    fasta <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)[[1]]#colClassesで指定した列(この場合5列目)をreadXStringColumns関数を用いて読み込むことでXStringSetオブジェクト(この場合"X"は"DNA"に相当)にした結果をfastaに格納
    names(fasta) <- paste(param, 1:length(fasta), sep="_")#(multi-)FASTA形式のdescription部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. param2で指定した"s_1_*_seq.txt"という感じのファイル名のもののみ読み込む場合:

    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "kkk"                        #FASTA形式ファイルのdescription行に記述する内容
    param2 <- "s_1_.*_seq.txt"             #"s_1_*_seq.txt"という感じのファイル名のものを読み込みたい場合("."の有無に注意!!)
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    files <- list.files(getwd(), pattern=param2)#param2で指定した正規表現にマッチする文字列を含むファイルのリストをfilesに格納
    strsplit(readLines(files[[1]],1), "\t")#filesで読み込んだファイルのリストについて、最初のファイルの一行目をタブで区切って表示させているだけ。5列目のデータが塩基配列情報だということを確認しているにすぎない。
    colClasses <- c(rep(list(NULL), 4), "DNAString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。最初の4列には"NULL"を、最後の5列目には"DNAString"というベクトルを作成してcolClassesに格納している
    fasta <- readXStringColumns(getwd(), pattern=param2, colClasses=colClasses)[[1]]#colClassesで指定した列(この場合5列目)をreadXStringColumns関数を用いて読み込むことでXStringSetオブジェクト(この場合"X"は"DNA"に相当)にした結果をfastaに格納
    names(fasta) <- paste(param1, 1:length(fasta), sep="_")#(multi-)FASTA形式のdescription部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | NGS | 読み込み | Illuminaの*_qseq.txt

    Illuminaの出力ファイルで、比較的最近のは*_qseq.txtというものらしいです。実際の生の配列データファイルは数百程度に分割されています。ここでは、そのファイル群がおさめられているディレクトリ(例:tmp)を指定して、その中の「*_qseq.txt」ファイル群について一気に行う方法を示します。ここでは、(s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込み、multi-FASTA形式で出力するやり方を示します。

    *_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいるので、その列の部分のみを抽出しているだけです。尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。

    FASTQ形式といっても様々なバリエーション(Illumina FASTQやSanger FASTQなど)があります。Illumina *_qseq.txt中のquality scoreの値をそのまま用いてFASTQ形式で保存すればIllumina FASTQ形式ファイル上で取り扱うスコアとなります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 配列情報のみ抽出したい場合:

    param1 <- "kkk"                        #description行に記述する内容を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[9] <- c("DNAString")        #9列目が"DNAString"だという情報を与えている
    fasta <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)[[1]]#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をfastaに格納
    
    #後処理(description部分を追加)
    names(fasta) <- paste(param1, 1:length(fasta), sep="_")#description部分を作成している
    fasta                                  #確認してるだけです
    	

    2. Illumina FASTQ形式でdescription行が"kkk_..."のようにしたい場合:

    param1 <- "kkk"                        #description行に記述する内容
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[9:10] <- c("DNAString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。9, 10列目がそれぞれ"DNAString", "BString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(param1, 1:length(hoge[[1]]), sep="_")#description部分を作成している
    description <- BStringSet(description) #型変換をしている
    
    #本番(FASTQ形式のオブジェクトに変換)
    fastq <- ShortReadQ(hoge[[1]], hoge[[2]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    	

    3. Illumina FASTQ形式で、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

    つまり、descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すということ。

    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
    description <- BStringSet(description) #型変換をしている
    
    #本番(FASTQ形式のオブジェクトに変換)
    fastq <- ShortReadQ(hoge[[5]], hoge[[6]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    	

    イントロ | ファイル形式の変換 | について

    ごちゃませですがとりあえず...。

    イントロ | ファイル形式の変換 | BAM --> BED

    BAM形式のマッピング結果ファイル(拡張子が"bam"という前提です)を読み込んでBED形式に変換するやり方を示します。拡張子が"bed"の出力ファイルが自動生成されます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. sample_RNAseq1.bamの場合(GenomicAlignmentsパッケージ利用):

    in_f <- "sample_RNAseq1.bam"           #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(GenomicAlignments)             #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readGAlignments(in_f)          #BAM形式ファイルを読み込んだ結果をhogeに格納
    hoge <- as.data.frame(hoge)            #データフレーム形式に変換
    
    #本番(BED形式ファイルの最初の3列分に相当する情報を抽出)
    tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
    
    #ファイルに保存
    out_f <- sub(".bam", ".bed", in_f)     #BED形式ファイル名を作成した結果をout_fに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. sample_RNAseq1.bamの場合(Rsamtoolsパッケージ利用):

    in_f <- "sample_RNAseq1.bam"           #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(Rsamtools)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    param_what <- c("rname", "pos", "qwidth", "strand")#左記の情報のみ読み込むという指令をparam_whatに格納
    param_flag <- scanBamFlag(isUnmappedQuery=FALSE)#mappedされたもののみ読み込むという指令をparam_flagに格納
    param_bam <- ScanBamParam(what=param_what, flag=param_flag)#BAM形式ファイルを読み込んだ結果をhogeに格納
    hoge <- scanBam(in_f, param=param_bam)[[1]]#BAM形式ファイルを読み込んだ結果をhogeに格納
    
    #ファイルに保存
    tmp <- cbind(as.character(hoge$rname), #BED形式ファイルの1列目に相当する情報と
                hoge$pos,                  #BED形式ファイルの2列目に相当する情報と
                (hoge$qwidth+hoge$pos-1))  #BED形式ファイルの3列目に相当する情報を列方向で結合した結果をtmpに格納
    out_f <- sub(".bam", ".bed", in_f)     #BED形式ファイル名を作成した結果をout_fに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    イントロ | ファイル形式の変換 | FASTQ --> FASTA

    Sanger FASTQ形式ファイルを読み込んでFASTA形式で出力するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 配列長が同じであることが既知の場合です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. 配列長が異なるsample2.fastqの場合:

    うまくいかない例です

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. 配列長が異なるsample2.fastqの場合:

    うまくいく例です。

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
    names(fasta) <- id(fastq)              #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 配列長が同じであってもreadFastq関数で読み込むことができます。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
    names(fasta) <- id(fastq)              #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | ファイル形式の変換 | Genbank --> FASTA

    Genbank形式ファイルを読み込んでFASTA形式で出力するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. NM_138957.gbkの場合:

    NM_138957のページからGenbank形式で保存したものですが、 デフォルトの拡張子が.gbではうまく保存できなかったので*.gbkと変更しています。

    in_f <- "NM_138957.gbk"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(seqinr)                        #パッケージの読み込み
    
    #本番
    gb2fasta(source.file=in_f, destination.file=out_f)#in_fで指定したファイルを読み込んでout_fで指定したファイルで出力
    	

    イントロ | ファイル形式の変換 | qseq --> FASTA

    Illuminaの*_qseq.txtファイル群がおさめられている(例:s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込むやり方を示します。

    *_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいます。尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。また、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしています。

    FASTQ形式といっても様々なバリエーション(Illumina FASTQやSanger FASTQなど)があります。Illumina *_qseq.txt中のquality scoreの値をそのまま用いてFASTQ形式で保存すればIllumina FASTQ形式ファイルとなります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. description行が"kkk_..."のようにしたい場合:

    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "kkk"                        #description行に記述する内容
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[9] <- c("DNAString")        #9列目が"DNAString"だという情報を与えている
    fasta <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)[[1]]#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をfastaに格納
    names(fasta) <- paste(param1, 1:length(fasta), sep="_")#description部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

    つまり、descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すということ。

    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
    description <- BStringSet(description) #型変換をしている
    
    #本番(FASTA形式のオブジェクトに変換)
    fasta <- hoge[[5]]                     #配列情報部分をfastaに格納
    names(fasta) <- description            #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    イントロ | ファイル形式の変換 | qseq --> Illumina FASTQ

    Illuminaの*_qseq.txtファイル群がおさめられている(例:s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込むやり方を示します。

    *_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいます。 尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。 また、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしています。 FASTQ形式といっても様々なバリエーション(Illumina FASTQやSanger FASTQなど)があります。 Illumina *_qseq.txt中のquality scoreの値をそのまま用いてFASTQ形式で保存すればIllumina FASTQ形式ファイルとなります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

    descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
    description <- BStringSet(description) #型変換をしている
    
    #本番(FASTQ形式のオブジェクトに変換)
    fastq <- ShortReadQ(hoge[[5]], hoge[[6]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    2. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしつつ、一番右側に"/2"の記述を追加したい場合:

    writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    out_f <- "hoge2.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- "/2"                          #description行に追加したい情報を格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
    description <- BStringSet(paste(description, param, sep=""))#paramで指定した記述内容を追加している
    
    #本番(FASTQ形式のオブジェクトに変換)
    fastq <- ShortReadQ(hoge[[5]], hoge[[6]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    イントロ | ファイル形式の変換 | qseq --> Sanger FASTQ

    Illuminaの*_qseq.txtファイル群がおさめられている(例:s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込むやり方を示します。

    *_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいます。 尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。また、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしています。

    2013/08/18までは、例えば「Illumina ASCII 64」に相当する"@"を「Sanger ASCII 33」に相当する"!"などと一文字づつ変換していましたが、forループを用いて一度に変換する美しいスクリプトに変更しました。

    基本的にはIllumina ASCIIコードに「-31」することでSanger ASCIIコードに変換できるので、Phred score = 0に相当する「Illumina ASCII 64」から、Phred score = 61に相当する「Illumina ASCII 126」までの範囲をSanger ASCIIコードに変換しています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

    descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
    description <- BStringSet(description) #型変換をしている
    
    #本番(Illumina qualityスコアをSanger qualityスコアに変換)
    qscore <- hoge[[6]]                    #readのquality情報部分をqscoreに格納
    for(i in 64:126){                      #Illumina ASCIIコードの64-126の範囲をSanger ASCIIコードの33-95に変換するループ
       qscore <- chartr(rawToChar(as.raw(i)), rawToChar(as.raw(i - 31)), qscore)#qscore中の文字列を置換(as.raw関数で整数をASCIIコードに変換し、rawToChar関数でASCIIコードをASCII文字に変換しています)
    }
    
    #後処理(FASTQ形式のオブジェクトに変換)
    fastq <- ShortReadQ(hoge[[5]], qscore, description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    2. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしつつ、一番右側に"/2"の記述を追加したい場合:

    writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    out_f <- "hoge2.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- "/2"                          #description行に追加したい情報を格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
    colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
    hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納
    
    #前処理(description部分を作成)
    description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
    description <- BStringSet(paste(description, param, sep=""))#paramで指定した記述内容を追加している
    
    #本番(Illumina qualityスコアをSanger qualityスコアに変換)
    qscore <- hoge[[6]]                    #readのquality情報部分をqscoreに格納
    for(i in 64:126){                      #Illumina ASCIIコードの64-126の範囲をSanger ASCIIコードの33-95に変換するループ
       qscore <- chartr(rawToChar(as.raw(i)), rawToChar(as.raw(i - 31)), qscore)#qscore中の文字列を置換(as.raw関数で整数をASCIIコードに変換し、rawToChar関数でASCIIコードをASCII文字に変換しています)
    }
    
    #後処理(FASTQ形式のオブジェクトに変換)
    fastq <- ShortReadQ(hoge[[5]], qscore, description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    id(fastq)                              #description情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    前処理 | クオリティチェック | qrqc

    FastQCのR版のようなものです。 Sanger FASTQ形式ファイルを読み込んで、positionごとの「クオリティスコア(quality score)」、 「どんな塩基が使われているのか(base frequency and base proportion)」、「リード長の分布」、 「GC含量」、「htmlレポート」などを出力してくれます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです (Bullard et al., 2010)。 下記を実行すると「SRR037439-report」という名前のフォルダが作成されます。 中にあるreport.htmlをダブルクリックするとhtmlレポートを見ることができます。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readSeqFile(in_f, quality="sanger")#in_fで指定したファイルの読み込み
    
    #本番
    makeReport(fastq)                      #htmlレポートの作成
    	

    2. サンプルデータ25のFASTQ形式ファイル(SRR633902_1_sub.fastq)の場合:

    SRR633902から得られるFASTQファイルの最初の2,000行分を抽出したヒトデータです (Chan et al., Hum. Mol. Genet., 2013)。 下記を実行すると「SRR633902_1_sub」という名前のフォルダが作成されます。中にあるreport.htmlをダブルクリックするとhtmlレポートを見ることができます。 「Error : Insufficient values in manual scale. 2 needed but only 1 provided.」というエラーが出ることは確認済みですが、htmlファイルは作成されます。

    in_f <- "SRR633902_1_sub.fastq"        #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readSeqFile(in_f, quality="sanger")#in_fで指定したファイルの読み込み
    
    #本番
    makeReport(fastq)                      #htmlレポートの作成
    	

    3. FASTQ形式ファイル(SRR609266_sub.fastq)の場合:

    前処理 | フィルタリング | 任意のリード(サブセット)を抽出の8を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013; 100000リード; 約16MB)です。 下記を実行すると「SRR609266_sub」という名前のフォルダが作成されます。中にあるreport.htmlをダブルクリックするとhtmlレポートを見ることができます。 元のgzip圧縮FASTQファイルはNCBI SRAから取得したものであるため、本来はSanger Quality Scoreなはずです。 つまり、readSeqFile関数で読み込む際のデフォルトはquality="sanger"でよいはずです。 しかし、スコア分布的に用いたIllumina pipelineのバージョンが 1.3から1.7なんじゃないかなと思った(スコア分布が概ね30-40近辺にあるはずだという思想)ので、+33のSangerではなく+64のilluminaに独断で行っています。 このあたりの判定は現実問題としては、結構厄介です(Cock et al., 2010)。

    in_f <- "SRR609266_sub.fastq"          #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readSeqFile(in_f, quality="illumina")#in_fで指定したファイルの読み込み
    
    #本番
    makeReport(fastq)                      #htmlレポートの作成
    	

    前処理 | クオリティチェック | PHREDスコアに変換

    ここでは、NCBI Sequence Read Archive (SRA)から得られる(従ってSanger FASTQ形式)FASTQ形式ファイルを読み込んでPHREDスコアに変換したり、そのboxplotを描画するやり方を示します。

    PHREDスコアは、ベースコール(A, C, G, Tの四種類の塩基のうちのどの塩基かを決めること)のクオリティを示すp値(低ければ低いほどそのベースコールの信頼性が高いことを意味する)を二桁の整数値に変換したものであり、PHRED score = -10 * log10(p)で計算されます。

    例えば、

    • p=0.001の場合は、PHRED score = -10 * log10(0.001) = 30
    • p=0.01の場合は、PHRED score = -10 * log10(0.01) = 20
    • p=0.1の場合は、PHRED score = -10 * log10(0.1) = 10
    • p=1の場合は、PHRED score = -10 * log10(1) = 0

    のように計算されますので、PHREDスコアが高いほどそのベースコールの信頼性が高いことを意味します。

    例題で解析しているファイルは全リードのほんの一部なので、ばらつきはありますが、5'側のベースコールのクオリティは高く、3'側に読み進んでいくほどPHREDスコアが低くなる傾向にあることが読み取れます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    PHREDスコア変換後、その数値情報をタブ区切りテキストファイルで保存するやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    
    #本番(PHREDスコアに変換)
    out <- as(quality(fastq), "matrix")    #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をoutに格納
    dim(out)                               #行数と列数を確認しているだけ
    colnames(out) <- 1:ncol(out)           #列名を付与
    rownames(out) <- as.character(id(fastq))#行名を付与
    
    #ファイルに保存
    tmp <- cbind(rownames(out), out)       #outの左側に行名を結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    PHREDスコア変換後、スコア分布をboxplotで描くやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    
    #本番(PHREDスコアに変換)
    out <- as(quality(fastq), "matrix")    #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をoutに格納
    dim(out)                               #行数と列数を確認しているだけ
    colnames(out) <- 1:ncol(out)           #列名を付与
    rownames(out) <- as.character(id(fastq))#行名を付与
    
    #本番(boxplot)
    boxplot(as.data.frame(out), outline=FALSE, xlab="cycle number", ylab="PHRED score")#outをdata.frame形式にしてboxplotを描画(outline=FALSEの意味は、外れ値を描画しない、です。)
    	

    3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    PHREDスコア変換後、スコア分布のboxplotをpngファイルに保存するやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    
    #本番(PHREDスコアに変換)
    out <- as(quality(fastq), "matrix")    #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をoutに格納
    dim(out)                               #行数と列数を確認しているだけ
    colnames(out) <- 1:ncol(out)           #列名を付与
    rownames(out) <- as.character(id(fastq))#行名を付与
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    boxplot(as.data.frame(out), outline=FALSE, xlab="cycle number", ylab="PHRED score")#outをdata.frame形式にしてboxplotを描画(outline=FALSEの意味は、外れ値を描画しない、です。)
    dev.off()                              #おまじない
    	

    前処理 | クオリティチェック | 配列長分布を調べる

    FASTAまたはFASTQ形式ファイルを読み込んで配列長分布を得るやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample2.fasta)の場合:

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    out <- table(width(fasta))             #長さごとの出現頻度情報を得た結果をoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    2. FASTQ形式ファイル(sample2.fastq)の場合:

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    out <- table(width(fastq))             #長さごとの出現頻度情報を得た結果をoutに格納
    out                                    #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | PHREDスコアが低い塩基をNに置換

    Sanger FASTQ形式ファイルを読み込んで、PHREDスコアが任意の閾値未満の塩基を"N"に置換するやり方を紹介します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #PHREDスコアの閾値を指定
    param2 <- "N"                          #置換後の文字を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    hoge1 <- as(quality(fastq), "matrix")  #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をhoge1に格納
    obj <- hoge1 < param1                  #条件を満たすかどうかを判定した結果をobjに格納
    hoge2 <- DNAString(paste(rep(param2, max(width(fastq))), collapse=""))#「最長配列の長さ」で「全ての塩基がparam2で指定した文字」からなるDNAStringオブジェクトを作成してhoge2に格納
    hoge3 <- as(Views(hoge2, start=1, end=rowSums(obj)), "DNAStringSet")#rowSums(at)で各リードごとのPHREDスコアが閾値未満の塩基数がわかるので、その塩基数分からなるparam2の文字のDNAStringSetオブジェクトを作成してhoge3に格納
    fasta <- replaceLetterAt(sread(fastq), obj, hoge3)#objがTRUEの位置の塩基をhoge3中の塩基で置換した結果をfastaに格納
    fastq <- ShortReadQ(fasta, quality(fastq), id(fastq))#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | PHREDスコアが低い配列(リード)を除去

    Sanger FASTQ形式ファイルを読み込んで、PHREDスコアが低いリードを除去するやり方を紹介します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 PHREDスコアが20未満のものがリード長に占める割合が0.1以上のリードを除去するやり方です。 (例題のファイル中のリードは全て35bpのリードである。その10%以上ということで実質的にPHREDスコアが閾値未満のものが4塩基以上あるリードはダメということ) writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #PHREDスコアの閾値を指定
    param2 <- 0.1                          #指定した閾値未満のものが配列長に占める割合を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    hoge <- as(quality(fastq), "matrix")   #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をhogeに格納
    obj <- (rowSums(hoge < param1) <= width(fastq)*param2)#条件を満たすかどうかを判定した結果をobjに格納
    fastq <- fastq[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 PHREDスコアが20以上の塩基数が0.9より多いリードのみ抽出するやり方です。 1と同じことを別の言葉で表現しているだけです。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fastq"                 #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #PHREDスコアの閾値を指定
    param2 <- 0.9                          #指定した閾値以上の塩基数の配列長に占める割合を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    hoge <- as(quality(fastq), "matrix")   #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をhogeに格納
    obj <- (rowSums(hoge >= param1) > width(fastq)*param2)#条件を満たすかどうかを判定した結果をobjに格納
    fastq <- fastq[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 PHREDスコアが20以上の塩基数と配列長に占める割合(%)を出力させるやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #PHREDスコアの閾値を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    
    #本番
    hoge <- as(quality(fastq), "matrix")   #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をhogeに格納
    obj_num <- rowSums(hoge >= param1)     #param1で指定した条件を満たすリードごとの塩基数をobj_numに格納
    obj_percent <- 100*obj_num/width(fastq)#obj_num中の塩基数をパーセンテージに変換したものをobj_percentに格納
    
    #後処理(description行をシンプルにしている)
    hoge <- strsplit(as.character(id(fastq)), " ", fixed=TRUE)#id(reads)中の文字列を" "で区切った結果をリスト形式でhogeに格納
    description <- sapply(hoge,"[[", 1)    #hogeのリスト中の一番目の要素のみ取り出してdescriptionに格納
    
    #ファイルに保存
    tmp <- cbind(description, width(fastq), obj_num, obj_percent)#「description」、「配列長」、「閾値を満たす塩基数」、「その割合」を列方向に結合したものをtmpに格納
    colnames(tmp) <- c("description", "read_length", "nucleotide_number", "percentage")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 PHREDスコアが20未満のものがリード長に占める割合が0.8以上のリードを除去するやり方です。 あるチュートリアル(Short Reads Quality Control and Preprocessingの6ページ目) に書いてあったフィルタリング条件(less than 20 over the 80%)です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fastq"                 #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #PHREDスコアの閾値を指定
    param2 <- 0.8                          #指定した閾値未満のものが配列長に占める割合を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    hoge <- as(quality(fastq), "matrix")   #ASCIIコードのquality scoreをPHRED scoreに変換し、データ構造をmatrixにした結果をhogeに格納
    obj <- (rowSums(hoge < param1) <= width(fastq)*param2)#条件を満たすかどうかを判定した結果をobjに格納
    fastq <- fastq[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | ACGTのみからなる配列を抽出

    FASTQファイルやFASTAファイルを読み込んで"N"などの文字を含まず、ACGTのみからなる配列を含むコンティグのみ抽出して、(multi-)FASTA形式ファイルに出力するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    出力ファイルのdescription行を「kkk_...」に変更するやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "kkk"                        #(multi-)FASTA形式のdescription部分(の一部)を指定してparam1に格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    names(fasta) <- paste(param1, 1:length(fasta), sep="_")#description部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    配列中にNを含まないので、入力ファイルと同じ結果が返されることがわかります。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. FASTA形式ファイル(sample2.fasta)の場合:

    配列中に"-"を含むcontig_1と配列中に"N"を含むcontig_8, ..., 12が消えていることがわかります。

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    5. FASTA形式ファイル(sample2.fasta)の場合:

    4.と同じ結果になりますが、やり方を変えています。

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- 0                             #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param  #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    6. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

    gene_4が消えていることが分かります。

    in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
    obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | ACGT以外のcharacter"-"をNに変換

    sample2.fastaファイル中のcontig_1のように、なぜか文字列以外のcharacter(例:"-")が含まれることがたまにあります。 ここでは、"-"を"N"に変換するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample2.fasta)の場合:

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- "-"                           #Nに変換したいcharacterを指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- chartr(param, "N", fasta)     #paramで指定したcharacterを"N"に変換した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | ACGT以外の文字数が閾値以下の配列を抽出

    (multi-)FASTAファイルを読み込んでACGT以外の文字(実質的にNに相当)数がparam1で指定した閾値以下の配列のみ抽出するやり方を示します。この値を0にすれば、ACGTのみからなる配列の抽出を行うのと同じ意味になります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample2.fasta)を読み込んでACGTのみからなる配列を抽出したい(Nが0個に相当)場合:

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 0                            #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param1 #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. FASTA形式ファイル(sample2.fasta)を読み込んでNが1個含むものまで許容してフィルタリングしたい場合:

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 1                            #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param1 #条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. FASTA形式ファイル(sample2.fasta)を読み込んでNが1個含むものまで許容してフィルタリングしたい場合:

    QuasRパッケージ中のpreprocessReads関数を用いるやり方です。

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1                            #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    
    #本番
    out <- preprocessReads(filename=in_f,  #フィルタリングの実行
                           outputFilename=out_f,#フィルタリングの実行
                           minLength=0,    #フィルタリングの実行
                           nBases=param1)  #フィルタリングの実行
    out                                    #確認してるだけです
    	

    前処理 | フィルタリング | 重複のない配列セットを作成

    ユニークな配列からなるセットにするやり方を紹介します。ちなみに、ユニークとはいっても例えば"AACGTTGCA"と"AACGTTGCAG"は独立な配列として取り扱われます。

    出力ファイルのdescription行は「kkk_X_Y」に変更しています。重複配列同士のdescription行が異なっていた場合に、どれを使うかという問題があることと、description行部分の記述をすっきりさせて、Xに相当する部分に配列のシリアル番号、そしてYに相当する部分にその配列の出現回数を示すようにしています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample2.fasta)の場合:

    contig_8, 11, 12の三つの配列がまとめられていることなどがわかります。

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "kkk"                        #(multi-)FASTA形式のdescription部分(の一部)を指定してparam1に格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- tables(fasta, n=length(unique(fasta)))#読まれた頻度順にsequenceをソートして結果をhogeに格納
    fasta <- DNAStringSet(names(hoge$top)) #sequenceの配列情報(「names(hoge$top)」)をDNAStringSetオブジェクトとしてreadsに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分を作成)
    names(fasta) <- paste(param1, 1:length(fasta), hoge$top, sep="_")#description部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "kkk"                        #(multi-)FASTA形式のdescription部分(の一部)を指定してparam1に格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- tables(fasta, n=length(unique(fasta)))#読まれた頻度順にsequenceをソートして結果をhogeに格納
    fasta <- DNAStringSet(names(hoge$top)) #sequenceの配列情報(「names(hoge$top)」)をDNAStringSetオブジェクトとしてreadsに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分を作成)
    names(fasta) <- paste(param1, 1:length(fasta), hoge$top, sep="_")#description部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    配列中にNを含まず重複配列も存在しないので、順番のみ入れ替わった結果が返されていることがわかります。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "kkk"                        #(multi-)FASTA形式のdescription部分(の一部)を指定してparam1に格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- tables(fasta, n=length(unique(fasta)))#読まれた頻度順にsequenceをソートして結果をhogeに格納
    fasta <- DNAStringSet(names(hoge$top)) #sequenceの配列情報(「names(hoge$top)」)をDNAStringSetオブジェクトとしてreadsに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分を作成)
    names(fasta) <- paste(param1, 1:length(fasta), hoge$top, sep="_")#description部分を作成している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | 指定した長さ以上の配列を抽出

    FASTA形式やFASTQ形式ファイルを入力として、指定した配列長以上の配列を抽出するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. multi-FASTAファイル(hoge4.fa)の場合:

    イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたファイルです。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- 50                            #配列長の閾値を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- as.logical(width(fasta) >= param)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. FASTA形式ファイル(sample2.fasta)の場合:

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- 16                            #配列長の閾値を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    table(width(fasta))                    #配列長分布を表示
    
    #本番
    obj <- as.logical(width(fasta) >= param)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    table(width(fasta))                    #配列長分布を表示
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. FASTQ形式ファイル(sample2.fastq)を読み込んでFASTQ形式で保存する場合:

    writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fastq"                   #出力ファイル名を指定してout_fに格納
    param <- 26                            #配列長の閾値を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長分布を表示
    
    #本番
    obj <- as.logical(width(fastq) >= param)#条件を満たすかどうかを判定した結果をobjに格納
    fastq <- fastq[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長分布を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    4. FASTQ形式ファイル(sample2.fastq)を読み込んでFASTA形式で保存する場合:

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- 26                            #配列長の閾値を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    fasta <- sread(fastq)                  #塩基配列情報をfastaに格納
    fasta                                  #確認してるだけです
    table(width(fasta))                    #配列長分布を表示
    
    #本番
    obj <- as.logical(width(fasta) >= param)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    table(width(fasta))                    #配列長分布を表示
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | 任意のリード(サブセット)を抽出

    FASTA形式やFASTQ形式ファイルを入力として、任意の配列(リード)を抽出するやり方を示します。 ここのコードをテンプレートにして、マッピングなどを行う際に動作確認用として指定したリード数からなるサブセットを作成できます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. multi-FASTAファイル(hoge4.fa)の場合:

    イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたものです。 最初の3リードを抽出するやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- 3                             #抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- 1:param                         #抽出したいリードの位置情報をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. multi-FASTAファイル(hoge4.fa)の場合:

    (全部で4リードからなることが既知という前提で)2-4番目のリードを抽出するやり方です。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param_range <- 2:4                     #抽出したいリードの範囲を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- param_range                     #抽出したいリードの位置情報をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. multi-FASTAファイル(hoge4.fa)の場合:

    1.と同じで最初の3リードを抽出するやり方ですが、表現方法が異なります。

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param_range <- 1:3                     #抽出したいリードの範囲を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    obj <- param_range                     #抽出したいリードの位置情報をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. FASTQ形式ファイル(sample2.fastq)を読み込んでFASTQ形式で保存する場合:

    writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。 (全部で187リードからなることが既知という前提で)5-20番目のリードを抽出するやり方です。

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fastq"                 #出力ファイル名を指定してout_fに格納
    param_range <- 5:20                    #抽出したいリードの範囲を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #本番
    obj <- param_range                     #抽出したいリードの位置情報をobjに格納
    fastq <- fastq[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastqに格納
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    5. FASTQ形式ファイル(sample2.fastq)を読み込んでFASTQ形式で保存する場合:

    (全部で187リードからなることが既知という前提でそれよりも少ない)30リード分をランダムに非復元抽出するやり方です。 writeFastq関数実行時にcompress=Fとしてgzip圧縮前のファイルを出力しています

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- 30                            #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #本番
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    obj <- sample(1:length(fastq), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
    fastq <- fastq[sort(obj)]              #objで指定したリードのみソートして抽出した結果をfastqに格納
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    6. FASTQ形式ファイル(sample2.fastq)を読み込んでFASTQ形式で保存する場合:

    (全部で187リードからなることが既知という前提でそれよりも少ない)30リード分をランダムに非復元抽出するやり方です。 5.と実質的に同じですが、gzip圧縮ファイルとして保存するやり方です。Macintoshではうまくいかないかもしれません。

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.fastq.gz"              #出力ファイル名を指定してout_fに格納
    param <- 30                            #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #本番
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    obj <- sample(1:length(fastq), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
    fastq <- fastq[sort(obj)]              #objで指定したリードのみソートして抽出した結果をfastqに格納
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
    	

    7. FASTQ形式ファイル(sample2.fastq)を読み込んでFASTA形式で保存する場合:

    (全部で187リードからなることが既知という前提でそれよりも少ない)30リード分をランダムに非復元抽出するやり方です。

    in_f <- "sample2.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納
    param <- 30                            #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    fasta <- sread(fastq)                  #塩基配列情報をfastaに格納
    names(fasta) <- id(fastq)              #description情報をnames(fasta)に格納
    fasta                                  #確認してるだけです
    
    #本番
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    obj <- sample(1:length(fasta), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
    fasta <- fasta[sort(obj)]              #objで指定したリードのみソートして抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    8. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)を読み込んでFASTQ形式で保存する場合:

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。 この中から100000リード分をランダムに非復元抽出した結果をgzip圧縮なしで出力しています。 出力ファイルはSRR609266_sub.fastqと同じもの(100000リード; 約16MB)になります。 Macintoshではうまくいかないかもしれません。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge8.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- 100000                        #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #本番
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    obj <- sample(1:length(fastq), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
    fastq <- fastq[sort(obj)]              #objで指定したリードのみソートして抽出した結果をfastqに格納
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    9. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)を読み込んでFASTQ形式で保存する場合:

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。 この中から最初の100000リード分をgzip圧縮なしで出力しています。 Macintoshではうまくいかないかもしれません。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge9.fastq"                 #出力ファイル名を指定してout_fに格納
    param <- 100000                        #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #本番
    fastq <- fastq[1:param]                #指定したリード数を抽出した結果をfastqに格納
    id(fastq)                              #確認してるだけです(description情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    10. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 (全部で500リードからなることが既知という前提で)5-20番目のリードを抽出するやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge10.fastq"                #出力ファイル名を指定してout_fに格納
    param_range <- 5:20                    #抽出したいリードの範囲を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #本番
    obj <- param_range                     #抽出したいリードの位置情報をobjに格納
    fastq <- fastq[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastqに格納
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    11. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 (全部で500リードからなることが既知という前提で)30リード分をランダムに非復元抽出するやり方です。 writeFastq関数実行時にcompress=Fとしてgzip圧縮前のファイルを出力しています

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge11.fastq"                #出力ファイル名を指定してout_fに格納
    param <- 30                            #ランダム抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #本番
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    obj <- sample(1:length(fastq), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
    fastq <- fastq[sort(obj)]              #objで指定したリードのみソートして抽出した結果をfastqに格納
    sread(fastq)                           #確認してるだけです(塩基配列情報を表示)
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | 任意のIDを含む配列を抽出

    二つのファイル(multi-FASTA形式ファイルとIDリストファイル)を読み込んで、IDリストファイル中のRefSeq IDに対応する配列のサブセットを抽出するやり方を示します。 multi-FASTAファイルのdescription行の記述中にIDリストファイル中の文字列が存在することが大前提であることはいうまでもありませんが一応言っときます。 また、同一文字列としてうまく認識させるために、(description行の記述の中からIDリスト中の文字列と完全一致させるべく) description部分の記述をうまく分割(例:"_up_"など)してIDと一致する部分のみにする必要があり、このあたりは、自分でdescription行を眺めて適宜改変しなければなりません。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. multi-FASTAファイル(rat_upstream_1000.fa)の中からIDリスト(sample_IDlist1.txt)を含む配列を抽出したい場合:

    (multi-FASTAファイルのほうのdescription行を"_up_"を区切り文字として分割し、分割後の1番目の要素を抽出することでIDリストとの対応付けを可能としている)

    in_f1 <- "rat_upstream_1000.fa"        #入力ファイル名(multi-FASTAファイル)を指定してin_f1に格納
    in_f2 <- "sample_IDlist1.txt"          #入力ファイル名(IDリストファイル)を指定してin_f2に格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(reads中のdescription部分を改変)
    hoge <- strsplit(names(fasta), "_up_", fixed=TRUE)#names(fasta)中の文字列を"_up_"で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", 1)) #hogeのリスト中の1番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
    names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. multi-FASTAファイル(sample_100.fastaの中からIDリスト(sample_IDlist2.txt)を含む配列を抽出したい場合:

    (multi-FASTAファイルのほうのdescription行を"|"を区切り文字として分割し、分割後の4番目の要素を抽出することでIDリストとの対応付けを可能としているつもりだが、バージョン番号が残っているのでうまくいかない例)

    in_f1 <- "sample_100.fasta"            #入力ファイル名(multi-FASTAファイル)を指定してin_f1に格納
    in_f2 <- "sample_IDlist2.txt"          #入力ファイル名(IDリストファイル)を指定してin_f2に格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(reads中のdescription部分を改変して対応付け可能にしたつもり...)
    hoge <- strsplit(names(fasta), "|", fixed=TRUE)#names(fasta)中の文字列を"|"で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", 4)) #hogeのリスト中の4番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
    names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. multi-FASTAファイル(sample_100.fastaの中からIDリスト(sample_IDlist2.txt)を含む配列を抽出したい場合:

    (バージョン番号つきRefSeq IDをさらに"."を区切り文字として分割し、分割後の1番目の要素を抽出することでIDリストとの対応付けを可能としている)

    in_f1 <- "sample_100.fasta"            #入力ファイル名(multi-FASTAファイル)を指定してin_f1に格納
    in_f2 <- "sample_IDlist2.txt"          #入力ファイル名(IDリストファイル)を指定してin_f2に格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(fasta中のdescription部分を改変して対応付け)
    hoge <- strsplit(names(fasta), "|", fixed=TRUE)#names(fasta)中の文字列を"|"で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", 4)) #hogeのリスト中の4番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
    hoge3 <- strsplit(hoge2, ".", fixed=TRUE)#hoge2中の文字列を"."で区切った結果をリスト形式でhoge3に格納
    hoge4 <- unlist(lapply(hoge3, "[[", 1))#hoge3のリスト中の1番目の要素(これがRefSeq IDのバージョン部分以外に相当)を抽出してhoge4に格納
    names(fasta) <- hoge4                  #names(fasta)の中身をhoge4で置換
    fasta                                  #確認してるだけです
    
    #本番
    obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | Illuminaのpass filtering

    ここはまだ未完成です。。。

    二つのpaired-endファイル(read1.fqread2.fq)があるという前提で二つのファイル中で両方ともpass filteringフラグが1となっているものを抽出するやり方を示します。ここで読み込む二つのファイルは同一行に同一IDが位置するファイルであるという前提で行います。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    in_f1 <- "read1.fq"                    #読み込みたいFASTQ形式のファイル名を指定してin_f1に格納
    in_f2 <- "read2.fq"                    #読み込みたいFASTQ形式のファイル名を指定してin_f2に格納
    out_f1 <- "read1_pf.fastq"             #出力ファイル名を指定してout_f1に格納
    out_f2 <- "read2_pf.fastq"             #出力ファイル名を指定してout_f2に格納
    
    library(ShortRead)                     #パッケージの読み込み
    
    #read1について基本情報取得
    reads1 <- readFastq(in_f1)             #in_f1で指定したファイルの読み込み
    hoge <- strsplit(as.character(id(reads1)), "/", fixed=TRUE)#id(reads1)中の文字列を"/"で区切った結果をリスト形式でhogeに格納
    hoge2 <- sapply(hoge,"[[", 1)          #hogeのリスト中の一番目の要素のみ取り出してhoge2に格納
    hoge3 <- strsplit(hoge2, ":", fixed=TRUE)#hoge2中の文字列を":"で区切った結果をリスト形式でhoge3に格納
    pass_filter1 <- sapply(hoge3,"[[", length(hoge3[[1]]))#hoge3のリスト中の最後の要素のみ取り出してpass_filter1に格納
    tmp_serial1 <- hoge2                   #入力ファイルのIDの順番がファイル間で同じかどうかを確かめるためにhoge2情報をtmp_serial1に格納
    
    #read2について基本情報取得
    reads2 <- readFastq(in_f2)             #in_f2で指定したファイルの読み込み
    hoge <- strsplit(as.character(id(reads2)), "/", fixed=TRUE)#id(reads2)中の文字列を"/"で区切った結果をリスト形式でhogeに格納
    hoge2 <- sapply(hoge,"[[", 1)          #hogeのリスト中の一番目の要素のみ取り出してhoge2に格納
    hoge3 <- strsplit(hoge2, ":", fixed=TRUE)#hoge2中の文字列を":"で区切った結果をリスト形式でhoge3に格納
    pass_filter2 <- sapply(hoge3,"[[", length(hoge3[[1]]))#hoge3のリスト中の最後の要素のみ取り出してpass_filter2に格納
    tmp_serial2 <- hoge2                   #入力ファイルのIDの順番がファイル間で同じかどうかを確かめるためにhoge2情報をtmp_serial2に格納
    
    #入力ファイルの状態を念のため確認している
    #Step1:二つのファイル間でIDの総数が同じかどうかをチェック
    #Step2:二つのファイル間でID情報のpass filterの部分より左側のところのみが同じかどうかをチェック
    flag <- 0
    if(length(tmp_serial1) == length(tmp_serial2)){
        print("Step1:OK")
        flag <- 1
        if(length(tmp_serial1) == sum(tmp_serial1 == tmp_serial2)){
            print("Step2:OK")
            flag <- 2
        }else{
            print("Step2:IDs between two paired-end files are not ideltical!")
        }
    }else{
        print("Step1:The two files are not paired-end!")
    }
    
    #本番:二つのファイル間でpass filteringフラグが1のもののみ抽出する
    if(flag == 2){
        hoge_flag <- as.integer(pass_filter1) + as.integer(pass_filter2)#IDごとにpass filteringフラグの和を計算した結果をhoge_flagに格納(両方で1のものは2になる)
        length(hoge_flag)                  #フィルタリング前のリード数を表示
        sum(hoge_flag == 2)                #フィルタリング後のリード数を表示
        writeFastq(reads1[hoge_flag == 2], out_f1)#reads1の中からhoge_flagの値が2となるもののみ指定したファイル名で保存
        writeFastq(reads2[hoge_flag == 2], out_f2)#reads2の中からhoge_flagの値が2となるもののみ指定したファイル名で保存
    }
    	

    前処理 | フィルタリング | GFF/GTF形式ファイル

    QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TranscriptDb"という形式のオブジェクトを利用する必要があります。 この形式のオブジェクトは、Rで提供されていない生物種の遺伝子アノテーションパッケージ以外のものについても、GFF/GTF形式のファイルがあれば、 それを入力としてTranscriptDbオブジェクトを作成するための関数(GenomicFeaturesパッケージ中のmakeTranscriptDbFromGFF関数)が提供されています。 しかし現実には、GFF/GTF形式ファイルは提供元によって微妙に異なるため、エラーを吐いてmakeTranscriptDbFromGFF関数を実行できない場合が多いです。 それゆえイントロ | 一般 | 任意の文字列を行の最初に挿入のような小細工をして、 染色体名を同じ文字列として認識できるようにしたファイル(human_annotation_sub2.gtf)を用意する必要があるのですが、それでもまだだめな場合があります。 それは、EnsemblのFTPサイトから提供されているGFF/GTFファイル中には、 例えばヒトの場合「chr1, chr2, ...chr22, chrX, chrY, chrMT」以外に"HSCHR6_MHC_APD"や"HSCHR6_MHC_COX"などの記述があるためです。 例えばリファレンス配列を"BSgenome.Hsapiens.UCSC.hg19"に指定して行った場合には、"HSCHR6_MHC_APD"がリファレンス配列中に存在しないため、 GTFファイルに存在する"HSCHR6_MHC_APD"コンティグ?!上の特定の領域にマップされたリード数をカウントできるはずもなく、結果的に「そんなものはない!」とmakeTranscriptDbFromGFF関数実行中に怒られるわけです。

    この問題への最も合理的な対処法は、GFF/GTFファイルの中から、自分がマッピングに用いたリファレンス配列中の染色体名と同じ文字列の行だけを抽出した新たなGFF/GTFファイルを作成することです。 したがって、ここではGFF/GTFファイルとリファレンス配列を読み込んで、リファレンス配列中に存在する染色体名を含む行だけを抽出するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ヒトゲノム配列("BSgenome.Hsapiens.UCSC.hg19")中の染色体名と一致する遺伝子アノテーション情報のみGTFファイル(human_annotation_sub2.gtf)から抽出したい場合:

    in_f1 <- "human_annotation_sub2.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み(GFF/GTFファイル)
    data <- read.table(in_f1, header=FALSE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(リファレンス配列の染色体名を抽出)
    param <- in_f2                         #paramという名前で取り扱いたいだけです
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
    keywords <- seqnames(hoge)             #染色体名情報を抽出した結果をkeywordsに格納
    keywords                               #確認してるだけです
    
    #本番
    obj <- is.element(as.character(data[,1]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    前処理 | フィルタリング | 組合せ | ACGTのみ & 指定した長さの範囲の配列

    フィルタリングを組み合わせるやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample2.fasta)の場合:

    ACGTのみからなる配列を抽出したのち、さらに指定した長さの範囲(20-30bp)の配列を抽出するやり方を示します。

    in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param_nBases <- 0                      #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    param_range <- 20:30                   #配列長の範囲を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番1(ACGTのみの配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param_nBases#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番2(指定した長さの範囲の配列を抽出)
    obj <- (width(fasta) >= min(param_range)) & (width(fasta) <= max(param_range))#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | トリミング | ポリA配列除去 | ShortRead(Morgan_2009)

    ShortReadパッケージを用いたmRNAの3'末端に存在するpoly A配列部分をトリムするやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample3.fasta)の場合:

    許容するミスマッチ数を0としています。

    in_f <- "sample3.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"#トリムしたい配列情報を指定してparam1に格納
    param_mismatch <- 0                    #許容するミスマッチ数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- trimLRPatterns(Rpattern=param1, subject=fasta, max.Rmismatch=rep(param_mismatch, nchar(param1)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. FASTA形式ファイル(sample3.fasta)の場合:

    許容するミスマッチ数を1としています。

    in_f <- "sample3.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"#トリムしたい配列情報を指定してparam1に格納
    param_mismatch <- 1                    #許容するミスマッチ数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- trimLRPatterns(Rpattern=param1, subject=fasta, max.Rmismatch=rep(param_mismatch, nchar(param1)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    前処理 | トリミング | アダプター配列除去(基礎) | girafe(Toedling_2010)

    girafeパッケージを用いたアダプター配列除去を行うやり方を示します。アダプター配列除去を行うやり方を示します。

    注意点1としては、実際に塩基配列長が短くなっていてもdescription行の記述(特に配列長情報の記述)は変わりませんので、「なんかおかしい」と気にしなくて大丈夫です。

    注意点2としては、例えば、アダプター配列の5'側が「CATCG...」となっているにも関わらずなぜ二番目の配列の3'側「...CATAG」の最後の5塩基がトリムされているのだろう?と疑問に思われる方がいらっしゃるかもしれませんが、これは。R Console上で「?trimAdapter」と打ち込んでデフォルトのオプションを眺めることで理由がわかります。つまり、アラインメントスコア計算時に、この関数はデフォルトで一致に1点、不一致に-1点を与えて一塩基づつオーバーラップの度合いを上げていく、という操作をしているからです。 したがって、もし完全一致のみに限定したい場合は、trimAdapter関数のところで、不一致に対して大幅に減点するようなパラメータを与えればいいんです。例えば「mismatch.score = -1000」とか。。。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    デフォルトのパラメータ(一致に1点、不一致に-1点)でトリムし、FASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    
    #必要なパッケージをロード
    library(girafe)                        #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #本番
    fastq <- trimAdapter(fastq, param_adapter)#trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    アダプター配列と完全一致のみで2塩基以上一致するものだけをトリムし、FASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fastq"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    param2 <- 2                            #アダプター配列との最低一致塩基数をparam2に格納
    
    #必要なパッケージをロード
    library(girafe)                        #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #本番
    mismatch <- nchar(param_adapter) + 100 #不一致に対して大幅に減点するための値を「アダプター配列長+100」としている(100を足しているのは念のため)
    fastq <- trimAdapter(fastq, param_adapter,#trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
               mismatch.score = -mismatch, #trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
               score.threshold = param2)   #trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    アダプター配列と完全一致のみで2塩基以上一致するものだけをトリムし、FASTA形式で保存するやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    param2 <- 2                            #アダプター配列との最低一致塩基数をparam2に格納
    
    #必要なパッケージをロード
    library(girafe)                        #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #本番
    mismatch <- nchar(param_adapter) + 100 #不一致に対して大幅に減点するための値を「アダプター配列長+100」としている(100を足しているのは念のため)
    fastq <- trimAdapter(fastq, param_adapter,#trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
               mismatch.score = -mismatch, #trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
               score.threshold = param2)   #trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
    fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
    names(fasta) <- id(fastq)              #description情報部分をfastaに追加
    fasta                                  #確認してるだけです
    table(width(fasta))                    #配列長ごとの出現頻度情報を表示
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    アダプター配列と完全一致のみで2塩基以上一致するものだけをトリムし、gzip圧縮FASTQ形式ファイルで保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.fastq.gz"              #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    param2 <- 2                            #アダプター配列との最低一致塩基数をparam2に格納
    
    #必要なパッケージをロード
    library(girafe)                        #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #本番
    mismatch <- nchar(param_adapter) + 100 #不一致に対して大幅に減点するための値を「アダプター配列長+100」としている(100を足しているのは念のため)
    fastq <- trimAdapter(fastq, param_adapter,#trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
               mismatch.score = -mismatch, #trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
               score.threshold = param2)   #trimAdapter関数を用いてアダプター配列除去した結果をfastqに格納
    sread(fastq)                           #配列情報を表示
    table(width(fastq))                    #配列長ごとの出現頻度情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
    	

    前処理 | トリミング | アダプター配列除去(基礎) | ShortRead(Morgan_2009)

    ShortReadパッケージを用いたアダプター配列除去を行うやり方を示します。 smallRNA-seqから得られる配列データにはアダプター配列(例:CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG; Oligonucleotide sequences (c) 2007-2009 Illumina, Inc. All rights reserved.) が含まれ、アダプター配列を含んだままの状態でゲノムなどのリファレンス配列にマッピングすることはできません。 ここでは、許容するミスマッチ数を指定して、RNA-seqデータの右側にあるアダプター配列を除去するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample3.fasta)の場合:

    アダプター配列既知("ACGTACGTAA")で、許容するミスマッチ数が0 (param_mismatch <- 0)、 でアダプター配列除去を行い、FASTA形式で保存するやり方です。

    in_f <- "sample3.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "ACGTACGTAA"          #アダプター配列を指定
    param_mismatch <- 0                    #許容するミスマッチ数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をfastaに格納
                subject=fasta,             #アダプター配列除去を行った結果をfastaに格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. FASTQ形式ファイル(sample1.fastq)の場合:

    アダプター配列既知("CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG")で、 許容するミスマッチ数が2 (param_mismatch <- 2)でアダプター配列除去を行い、FASTA形式で保存するやり方です。

    in_f <- "sample1.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    param_mismatch <- 2                    #許容するミスマッチ数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をfastaに格納
                subject=fasta,             #アダプター配列除去を行った結果をfastaに格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. FASTQ形式ファイル(sample1.fastq)の場合:

    アダプター配列既知("CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG")で、 許容するミスマッチ数が2 (param_mismatch <- 2)でアダプター配列除去を行い、FASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "sample1.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fastq"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    param_mismatch <- 2                    #許容するミスマッチ数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    
    #本番
    hoge1 <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をhoge1に格納
                subject=sread(fastq),      #アダプター配列除去を行った結果をhoge1に格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をhoge1に格納
    hoge2 <- BStringSet(quality(quality(fastq)), start=1, end=width(hoge1))#quality(fastq)オブジェクトをトリムしてhoge2に格納
    fastq <- ShortReadQ(hoge1, hoge2, id(fastq))#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    4. FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

    small RNA-seqデータ(400Mb弱、11928428リード)です。圧縮ファイルもreadDNAStringSet関数で通常手順で読み込めます。 原著論文(Nie et al., BMC Genomics, 2013)中の記述から GSE41841を頼りに、 SRP016842にたどりつき、 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものが入力ファイルです。 原著論文中では、アダプター配列やクオリティの低いリードを除去したのち、ゲノムにマッピングしたと書いてあります。 アダプター配列情報はどこにも書かれていませんでしたが、Table S2中のアダプター配列除去後の最も短いリードが18 nt (例:"GCAGTCGTGGCCGAGCGG")であり、 「この18 nt」と「この配列を含む生リード配列の差分」がアダプター配列ということになります。 詳細な情報は書かれていませんでしたが、おそらくアダプター配列は"TGGAATTCTCGGGTGCCAAGGAACTCCAGTC..."という感じだろうと推測して、 許容するミスマッチ数が1という条件でアダプタ配列除去を行っています。 最後のwriteFastq関数実行時にcompress=Tとしてgzip圧縮FASTQ形式で保存しています。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納(RNA-seqファイル)
    out_f <- "hoge4.fastq.gz"              #出力ファイル名を指定してout_fに格納
    param_adapter <- "TGGAATTCTCGGGTGCCAAGGAACTCCAGTC"#アダプター配列を指定
    param_mismatch <- 1                    #許容するミスマッチ数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    
    #本番
    hoge1 <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をhoge1に格納
                subject=sread(fastq),      #アダプター配列除去を行った結果をhoge1に格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をhoge1に格納
    hoge2 <- BStringSet(quality(quality(fastq)), start=1, end=width(hoge1))#quality(fastq)オブジェクトをトリムしてhoge2に格納
    fastq <- ShortReadQ(hoge1, hoge2, id(fastq))#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
    	

    前処理 | トリミング | アダプター配列除去(応用) | QuasR(Lerch_20XX)

    QuasRパッケージを用いたアダプター配列除去とそれに付随する様々な組み合わせのやり方を示します。 2013年11月ごろ(R ver. 3.0.2 and Bioconductor 2.13)ではうまくいっていましたが、 2014年6月11日(R ver. 3.1.0 and Bioconductor 2.14)で試すと、エラーが発生してR Guiが終了してしまうことを確認済みです。 圧縮ファイルのままでアダプター配列除去できるので非常にありがたかったのですが...。誰か対処法が分かったかたはお知らせいただければ幸いです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. gzip圧縮状態のFASTQ形式ファイル(SRR609266.fastq.gz)の場合:

    small RNA-seqデータ(ファイルサイズは400Mb弱、11928428リード)です。 原著論文(Nie et al., BMC Genomics, 2013)中の記述から GSE41841を頼りに、 SRP016842にたどりつき、 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものが入力ファイルです。 原著論文中では、アダプター配列やクオリティの低いリードを除去したのち、ゲノムにマッピングしたと書いてあります。 アダプター配列情報はどこにも書かれていませんでしたが、Table S2中のアダプター配列除去後の最も短いリードが18 nt (例:"GCAGTCGTGGCCGAGCGG")であり、 「この18 nt」と「この配列を含む生リード配列の差分」がアダプター配列ということになります。 詳細な情報は書かれていませんでしたが、おそらくアダプター配列は"TGGAATTCTCGGGTGCCAAGGAACTCCAGTC..."という感じだろうと推測できます。 ここでは、1塩基ミスマッチまで許容して(推定)アダプター配列除去を行ったのち、 "ACGT"のみからなる配列(許容するN数が0)で、 配列長が18nt以上のものをフィルタリングして出力しています。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納(RNA-seqファイル)
    out_f <- "SRR609266_p.fastq.gz"        #出力ファイル名を指定してout_fに格納
    param_adapter <- "TGGAATTCTCGGGTGCCAAGGAACTCCAGTC"#アダプター配列を指定
    param_mismatch <- 1                    #許容するミスマッチ数を指定
    param_nBases <- 0                      #許容するNの数を指定
    param_minLength <- 18                  #アダプター配列除去後の許容する最低配列長を指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    
    #本番(前処理)
    res <- preprocessReads(filename=in_f,  #前処理を実行
                 outputFilename=out_f,     #前処理を実行
                 Rpattern=param_adapter,   #前処理を実行
                 max.Rmismatch=rep(param_mismatch, nchar(param_adapter)),#前処理を実行
                 nBases=param_nBases,      #前処理を実行
                 minLength=param_minLength)#前処理を実行
    res                                    #確認してるだけです
    	

    前処理 | トリミング | アダプター配列除去(応用) | ShortRead(Morgan_2009)

    ShortReadパッケージを用いたアダプター配列除去とそれに付随する様々な組み合わせのやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. FASTA形式ファイル(sample3.fasta)の場合:

    アダプター配列既知("ACGTACGTAA")で、許容するミスマッチ数が0 (param_mismatch <- 0)、 ACGTのみからなる配列(param_nBases <- 0)、配列長の範囲指定(20:30) の組み合わせです。

    in_f <- "sample3.fasta"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "ACGTACGTAA"          #アダプター配列を指定
    param_mismatch <- 0                    #許容するミスマッチ数を指定
    param_nBases <- 0                      #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    param_range <- 20:30                   #配列長の範囲を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番1(アダプター配列除去)
    fasta <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をfastaに格納
                subject=fasta,             #アダプター配列除去を行った結果をfastaに格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番2(ACGTのみの配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param_nBases#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番3(指定した長さの範囲の配列を抽出)
    obj <- (width(fasta) >= min(param_range)) & (width(fasta) <= max(param_range))#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. FASTQ形式ファイル(sample1.fastq)の場合:

    アダプター配列既知("CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG")で、許容するミスマッチ数が2 (param_mismatch <- 2)、 ACGTのみからなる配列(param_nBases <- 0)、配列長の範囲指定(20:30) の組み合わせです。

    in_f <- "sample1.fastq"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "CATCGATCCTGCAGGCTAGAGACAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"#アダプター配列を指定
    param_mismatch <- 2                    #許容するミスマッチ数を指定
    param_nBases <- 0                      #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    param_range <- 20:30                   #配列長の範囲を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番1(アダプター配列除去)
    fasta <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をfastaに格納
                subject=fasta,             #アダプター配列除去を行った結果をfastaに格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番2(ACGTのみの配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param_nBases#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番3(指定した長さの範囲の配列を抽出)
    obj <- (width(fasta) >= min(param_range)) & (width(fasta) <= max(param_range))#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. FASTQ形式ファイル(SRR609266.fastq)の場合:

    small RNA-seqデータ(ファイルサイズは1.8GB、圧縮後で400Mb弱、11928428リード)です。 原著論文(Nie et al., BMC Genomics, 2013)中の記述から GSE41841を頼りに、 SRP016842にたどりつき、 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものが入力ファイルです。

    原著論文中では、アダプター配列やクオリティの低いリードを除去したのち、ゲノムにマッピングしたと書いてあります。 アダプター配列情報はどこにも書かれていませんでしたが、Table S2中のアダプター配列除去後の最も短いリードが18 nt (例:"GCAGTCGTGGCCGAGCGG")であり、 「この18 nt」と「この配列を含む生リード配列の差分」がアダプター配列ということになります。 詳細な情報は書かれていませんでしたが、おそらくアダプター配列は"TGGAATTCTCGGGTGCCAAGGAACTCCAGTC..."という感じだろうと推測できます。

    アダプター配列既知("TGGAATTCTCGGGTGCCAAGGAACTCCAGTC")で、許容するミスマッチ数が2、 ACGTのみからなる配列(param_nBases <- 0)、配列長の範囲指定(20:30) の組み合わせです。

    in_f <- "SRR609266.fastq"              #入力ファイル名を指定してin_fに格納(RNA-seqファイル)
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param_adapter <- "TGGAATTCTCGGGTGCCAAGGAACTCCAGTC"#アダプター配列を指定
    param_mismatch <- 2                    #許容するミスマッチ数を指定
    param_nBases <- 0                      #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    param_range <- 20:30                   #配列長の範囲を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番1(アダプター配列除去)
    fasta <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をfastaに格納
                subject=fasta,             #アダプター配列除去を行った結果をfastaに格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番2(ACGTのみの配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param_nBases#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番3(指定した長さの範囲の配列を抽出)
    obj <- (width(fasta) >= min(param_range)) & (width(fasta) <= max(param_range))#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

    small RNA-seqデータ(400Mb弱、11928428リード)です。圧縮ファイルもreadDNAStringSet関数で通常手順で読み込めます。 原著論文(Nie et al., BMC Genomics, 2013)中の記述から GSE41841を頼りに、 SRP016842にたどりつき、 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものが入力ファイルです。

    原著論文中では、アダプター配列やクオリティの低いリードを除去したのち、ゲノムにマッピングしたと書いてあります。 アダプター配列情報はどこにも書かれていませんでしたが、Table S2中のアダプター配列除去後の最も短いリードが18 nt (例:"GCAGTCGTGGCCGAGCGG")であり、 「この18 nt」と「この配列を含む生リード配列の差分」がアダプター配列ということになります。 詳細な情報は書かれていませんでしたが、おそらくアダプター配列は"TGGAATTCTCGGGTGCCAAGGAACTCCAGTC..."という感じだろうと推測できます。

    アダプター配列既知("TGGAATTCTCGGGTGCCAAGGAACTCCAGTC")で、許容するミスマッチ数が2、 ACGTのみからなる配列(param_nBases <- 0)、配列長の範囲指定(20:30) の組み合わせです。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納(RNA-seqファイル)
    out_f <- "hoge4.fasta.gz"              #出力ファイル名を指定してout_fに格納
    param_adapter <- "TGGAATTCTCGGGTGCCAAGGAACTCCAGTC"#アダプター配列を指定
    param_mismatch <- 2                    #許容するミスマッチ数を指定
    param_nBases <- 0                      #許容するACGT以外の文字数(実質的にはNの許容数に相当)を指定
    param_range <- 20:30                   #配列長の範囲を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番1(アダプター配列除去)
    fasta <- trimLRPatterns(Rpattern=param_adapter,#アダプター配列除去を行った結果をfastaに格納
                subject=fasta,             #アダプター配列除去を行った結果をfastaに格納
                max.Rmismatch=rep(param_mismatch, nchar(param_adapter)))#アダプター配列除去を行った結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番2(ACGTのみの配列を抽出)
    hoge <- rowSums(alphabetFrequency(DNAStringSet(fasta))[,1:4])#ACGTの総数をカウントした結果をhogeに格納
    obj <- (width(fasta) - hoge) <= param_nBases#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #本番3(指定した長さの範囲の配列を抽出)
    obj <- (width(fasta) >= min(param_range)) & (width(fasta) <= max(param_range))#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50, compress=T)#fastaの中身を指定したファイル名で保存
    	

    前処理 | トリミング | 指定した末端塩基数だけ除去

    3'末端を指定塩基数分だけトリムするやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #3'末端のトリムしたい塩基数
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- DNAStringSet(fasta, start=1, end=(width(fasta)-param1))#(param1)塩基だけトリムした結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    FASTQ形式ファイルを読み込んでFASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fastq"                   #出力ファイル名を指定してout_fに格納
    param1 <- 2                            #3'末端のトリムしたい塩基数
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    sread(fastq)                           #配列情報を表示
    
    #本番
    hoge1 <- DNAStringSet(sread(fastq), start=1, end=width(sread(fastq))-param1)#sread(fastq)オブジェクトの中から(param1)塩基だけトリムした結果をDNAStringSet形式にしてhoge1に格納
    hoge2 <- BStringSet(quality(quality(fastq)), start=1, end=width(quality(quality(fastq)))-param1)#quality(fastq)オブジェクトの中から(param1)塩基だけトリムした結果をDNAStringSet形式にしてhoge2に格納
    fastq <- ShortReadQ(hoge1, hoge2, id(fastq))#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
    sread(fastq)                           #配列情報を表示
    quality(fastq)                         #quality情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	

    3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

    SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

    FASTQ形式ファイルを読み込んでFASTA形式で保存するやり方です。

    in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- 4                            #3'末端のトリムしたい塩基数
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    fasta <- DNAStringSet(fasta, start=1, end=(width(fasta)-param1))#(param1)塩基だけトリムした結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    アセンブル | について

    アセンブルという言葉がなかなか理解しずらい人は、単純に「多重配列アラインメント(multiple sequence alignment)を行って一本一本の配列だけからでは到底到達できないような長い配列(これをコンセンサス配列という)を作成すること」だと解釈することで差し支えないと思います。

    出力ファイル形式はFASTAがデファクトスタンダードです。

    アセンブルによって、まず一本一本のリードをコンティグ(contigs)にまとめます。そしてコンティグの並び(order or orientation)やコンティグ間のギャップサイズ("N"の数で表現)をスカッフォールド(scaffolds)で表します。(別の言葉でいうと、scaffoldsは複数のコンティグの並びがどうなっているかを表したもの or まとめたもの、です。)

    一般にFASTA形式のアセンブルされた配列のファイルとともに、コンティグに関するいくつかの統計値も得られます。最大コンティグ長(maximum length)、平均コンティグ長(average length)、全コンティグを結合して得られる長さ(combined total length)、N50などです。

    ちなみにこのN50というのは、「最も長いコンティグから順番に連結していったときにcombined total lengthの50%になったときのコンティグの長さ」です。「combined total lengthが50%となるような最小数のコンティグ集合のうち最も小さいコンティグの長さ」という言い方もできます。 length-weighted medianという表現もなされるようです。

    アセンブリを行う際に問題となるのは「リピート配列の取り扱い」や「アセンブルの際に設定する閾値」です。 前者については、ペアードエンド(paired-end)の一部がリピート配列の末端部分だったり、ペアードエンドの片方がリピート配列そのものであればリピート配列の素性がかなりわかります。

    後者については、いわゆる感度・特異度の議論と本質的に同じで、combined total lengthをより長くする(つまり感度を上げたい)ためには多少ミスアセンブル(特異度が下がること; chimeric assembly)を許容する必要があります。

    デノボゲノムアセンブリ(de novo genome assembly):

    ゲノムアセンブリの手順は、以下に示すように大きく4つのステージに分けられるそうです(El-Metwally et al., PLoS Comput Biol., 2013):

    1. 前処理(pre-processing filtering; error correction)
    2. グラフ構築(graph construction process)
    3. グラフ簡易化(graph simplification process)
    4. 後処理(post-processing filtering)

    1. 前処理(pre-processing filtering; error correction):

    ここで行う処理は、塩基置換(substitution; mismatch)、インデル(indels; insertion/deletion)、曖昧な塩基(N)を含むリードの除去や補正です。 基本的な戦略は「エラーの頻度は低い」ですが、原理的に高頻度で出現するリピート配列の悪影響を受けるようです。

    シークエンスエラー(sequencing error)と多型(polymorphism)の違いはグラフ構築後でないとわからないので、2.のグラフ構築ステップ時に行う場合もあるようです。 また、アセンブルプログラムの中に完全に組み込まれていたりなど切り分けは若干ややこしいですがざっとリストアップしておきます。 エラー補正プログラムとほぼ同義です。ちなみに、初期のアセンブラはこのエラー補正ステップがないようです(El-Metwally et al., PLoS Comput Biol., 2013)。 この理由は、ABI3730のような800bp程度まで読めるロングリードのアセンブリの場合は配列一致部分も長い(long overlap)ので、一致部分に多少のエラーを含もうが影響は限定的だったからです。

    エラー補正は大きく4つのアプローチに分けられるそうです:K-spectrum (k-mer), Suffix Tree/Array (STA), Multiple Sequence Alignment (MSA), Hybrid。

    2. グラフ構築(graph construction process):

    ここで行うのは、前処理後のリードを用いてリード間のオーバーラップ(overlap)を頼りにつなげていく作業です。 シークエンスエラー(sequencing error)と多型(polymorphism)の違いを見るべく、グラフ構築時にエラー補正を行うものもあります。 おそらく全てのアセンブルプログラムはグラフ理論(Graph theory)を用いています。 一筆書きの問題をグラフ化して解くような学問です。 それらはさらに4つのアプローチに大別できます: Overlap (OLC), de Bruign (k-mer), Greedy, Hybrid。

    2-1. Overlap-Layout-Consensus (OLC)アプローチ。アセンブル問題をハミルトンパス(Hamiltonian path)問題として解く、ABI3730 sequencerの頃から存在する伝統的な方法。 overlap, layout, and consensusの3つのステップからなるためOLCと略される。 454など比較的長い配列(数百塩基程度)のアセンブルを目的としたものが多いようですが、最近ではSGAやReadjoinerなどショートリードにもうまく対応したものが出てきているようです。

    2-2. de Bruign (k-mer)アプローチ。これは、de Bruijn graph (DBG)中のオイラーパス探索(DBG approach; Eulerian approach; Euler approach; Eulerian path approach)に基づくもので、 グラフは頂点(ノード; nodes or vertices; 一つ一つの配列に相当)と辺(エッジ; edges or arcs)で表されますが、 リードを1塩基づつずらして全ての可能なk-mer (all possible fixed k length strings; k個の連続塩基のことでkは任意の正の整数)を生成し各k-merをノードとした有向グラフ(k-merグラフ)を作成します。 全リードに対して同様の作業を行い、完全一致ノードをマージして得られるグラフがDBGです。 そしてこのグラフは各エッジを一度だけ通るオイラーパス(Eulerian path)をもつことが分かっているので、あとは既知のオイラーパス問題専用アルゴリズムを適用するというアプローチです。 どのk-merの値を用いればいいかはなかなか難しいようですが、KmerGenie (Chikh et al., Bioinformatics, 2014)という最適なkの値を見積もってくれるプログラムもあるようです。

    2-3. Greedyアプローチ。貪欲法(Greedy algorithm)に基づくものですが、paired-endなどのリード全体の関係を考慮しないため、 あまり広くは使われていないようです。single-endリードを入力とし、比較的小さいサイズのゲノムに対して適しているとのことです (El-Metwally et al., PLoS Comput Biol., 2013)。

    2-4. Hybridアプローチ。上記の異なる方法を組み合わせたhybridと、異なるシーケンサーを組み合わせたhybridの2種類あります。おそらく後者がhybrid assemblyと言われるものに相当します。

    3. グラフ簡易化(graph simplification process):

    ここで行うのは、グラフ構築後に複雑化したグラフをシンプルにしていく作業です。連続したノード(consecutive node) やバブル (bubble)のマージ作業に相当します。 Dead endの除去やリピート領域で形成されるX-cutを2つのパスに切り分ける作業なども含みます。

    4. 後処理(post-processing filtering):

    ここで行うのは、簡易化後のグラフを一筆書き(渡り歩く、とか横切る、というイメージでよい;これがトラバース)してコンティグを得る作業です。 paired-endリード情報を用いて、コンティグ同士を連結させたスーパーコンティグ(super-contigs)またはスカッフォールド(scaffolds)構築や、ミスアセンブリの同定も含みます。 2.のアセンブラの中にscaffolderを書いてあるのはscaffolding moduleを持っているものたちです(El-Metwally et al., PLoS Comput Biol., 2013)。 記載もれもあるとは思います。以下に示すのは、scaffoldingのみを単独で行うプログラムたちです。

    評価体系:

    アセンブリの精度評価(確からしさの見積もり)は一般に難しいようですが、メイトペア(mate pair)による制約(constraint)を一般に利用してアセンブルしますので、 それを満たしている(satisfaction)のがどの程度あるかやその制約に反した(vaiolation)結果がどの程度あったかということを精度評価に用いるというやり方も提案されています。 リファレンスとなるゲノム配列が既知の場合にはそれとの比較が有用だろうと思いますが、このあたりは私の守備範囲ではありません。 どのアセンブラがいいかについての評価を行う枠組みもあるようです。

    トランスクリプトーム用アセンブラ:

    どの方法も基本的にアセンブルする(配列同士を連結する)かどうかの判断基準として、k-mer (k個の連続塩基が)一致しているかどうかで判断しますが、 ゲノム用を改良して作成した初期のもののは、このkについて複数の値を利用するという戦略(de novo transcriptome assembly with multiple k-mer values)をとっているようです。 背景としては、ゲノム配列のアセンブリはゲノム全体でcoverageが一般に一定である(or 一定であることを仮定している)のに対して、 トランスクリプトームは転写物によってかなりcoverageが異なります。これは、遺伝子ごとに発現レベルが違うということをcoverageという別の言葉で説明しているだけです。 一般に、kの値を大きくすると高発現遺伝子(高発現転写物)からなるより長い"contig"が得られ、他方kを小さくすると低発現遺伝子がちゃんと"contig"として得られるといった感じになります。 もう少し別な言い方をすると、「kを大きくするとより長いcontig (transcript fragment; 転写物断片)が得られ、kを小さくすると転写物断片がさらに断片化されたようなものが得られる」というイメージです。 kの範囲についてですが、例えばTrans-ABySSはリードの長さがLだとするとL/2からL-1の範囲にしています。

    ちなみに一般にkは奇数(odd number)を採用しますが、これはパリンドローム(palindrome)を回避するためらしいです。 例えば5'-ACGTTGCA-3'という配列でk=8を考えてみるとこの相補鎖も全く同じ(そういう配列がパリンドロームだから)で混乱してしまいますが、 kが例えば7や9のような奇数なら相補鎖にマッチすることはないのでパリンドローム問題にぶち当たることはないわけです。

    アセンブル | ゲノム用

    Rパッケージはおそらくありません。

    プログラム:

    Review、ガイドライン、パイプライン系:

    マッピング | について

    リファレンス配列にマッピングを行うプログラム達です。 basic aligner (unspliced aligner)はsplice-aware aligner (spliced aligner)内部で使われていたりします。

    マッピング | basic aligner

    アルゴリズム的な観点から、Seed-and-extend系とBurrows-Wheeler transform (BWT)系の大きく2種類に大別可能です。 そのアルゴリズムの特性によって得手不得手があるようですのでご注意ください。 また、論文自体は古くても、プログラムを頻繁にバージョンアップさせてよりよくなっている場合もありますので、出版年にこだわる必要はあまりないのではと思っています。

    Review、ガイドライン、パイプライン系:

    以下は、2012年頃に書いたものですので情報自体は若干古いですが分類別にリストアップしています。

    (BLASTやFASTA的な昔からある)Seed-and-extend methods

    このカテゴリに含まれる方法は、マップするshort readよりもさらに短い配列(これがいわゆる"seed"; 種)の完全一致(perfect match)領域をリファレンス配列から探し、このseed領域を拡張(extend)させてアラインメントするというスタンスのものたちです。特徴としては、マップするリファレンス配列(ゲノム配列 or トランスクリプトーム配列)のクオリティが低い場合にも対応可能です。したがって、近縁種のゲノムにマップしたいような場合には、内部的にこのカテゴリに含まれるプログラムを採用しているほうがより多くマップさせることができることが期待されます。また、polymorphism (or sequence variation)の割合が高いようなものについても、こちらのカテゴリの方法のほうがよりよい結果を得られると期待されます。

    以下のプログラムたちがこのカテゴリに含まれます:

    Burrows-Wheeler transform (BWT) methods

    このカテゴリに含まれる方法は、文字通りBWTというアルゴリズムを用いて効率的にマップしたいshort readsと完全一致(perfect match)する領域を探すものたちです。基本的にperfect matchを探すのに向いているため、ミスマッチを許容すると劇的に計算が遅くなります。したがって、比較的きれいなトランスクリプトーム配列に対してマップさせたい場合には、このカテゴリに含まれるプログラムを用いるほうが計算時間的に有利だと思います。short readのころには、このアルゴリズムを実装したプログラムがどんどんpublishされていたような印象がありますが、最近はどうなんでしょうね。こっち方面はあまりサーベイしていないのですが、プログラムのバージョンアップで多少のindelsに対しても頑健なものになっているのかもしれません。。。

    以下のプログラムたちがこのカテゴリに含まれます:

    マッピング | splice-aware aligner

    basic alignerはジャンクションリード(junciton reads; spliced reads)のマッピングができません。 splice-aware alignerは計算に時間がかかるものの、それらもマッピングしてくれます。 SpliceMapは、リードの半分の長さをマップさせておいてそのアラインメントを拡張(extend)させる戦略を採用しています。 いずれの方法も、バージョンアップがどんどんなされるプログラムは、アルゴリズム(計算手順)自体も変わっていたりしますので参考程度にしてください。 大きな分類としては、seed-and-extend系とexon-first系に分けられるようです。 exon-first系は、内部的にbasic-alignerを用いてざっくりとマップできるものをマップし、マップされなかったものがジャンクションリード候補としてリードを分割してマップされる場所を探すイメージです。 seed-and-extend系は、前者に比べて計算時間がかかるものの、全リードを等価に取り扱うため、exon-first系にありがちな 「本当はジャンクションリードなんだけどbasic alignerでのマッピング時にpseudogeneにマップされてしまう」ということはないようです(Garber et al., 2011)。 その後multi-seed系の方法も提案されているようです(Gatto et al., 2014)。

    Review、ガイドライン、パイプライン系:

    マッピング | Bisulfite sequencing用

    Bisulfite sequencingデータ専用のマッピングプログラムも結構あります。

    Review、ガイドライン、パイプライン系:

    マッピング | (ESTレベルの長さの) contig

    NGSというよりは一般的なものですが、いくつか挙げておきます。 Trans-ABySSの論文中では、exonerate(のest2genomeというモード)でcontigをマウスゲノムにマップしています(Robertson et al., Nat Methods, 2010)。 また、SPALNはcDNA配列をゲノムにマップするものですが、私自身がEST配列をゲノムにマップする目的で使用した経験があります。

    マッピング | 基礎

    マッピングの基本形を示します。出力はBED形式と似ています(理解しやすいので...)。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. hoge4.faをリファレンス配列(マップされる側)として、data_reads.txt中の4リードのマッピングを行う場合:

    イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)です。

    in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(マップされる側)
    in_f2 <- "data_reads.txt"              #入力ファイル名を指定してin_f2に格納(マップする側)
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    reads <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    
    #本番
    out <- c("in_f2", "in_f1", "start", "end")#最終的に得る出力ファイルのヘッダー情報を指定してoutに格納(4列のデータを得る)
    for(i in 1:length(reads)){             #リード数分だけループを回す
        hoge <- vmatchPattern(pattern=as.character(reads[i]), subject=fasta)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索して結果をhogeに格納
        hoge1 <- cbind(start(unlist(hoge)), end(unlist(hoge)))#一致領域の(start, end)の位置情報をhoge1に格納
        hoge2 <- names(unlist(hoge))       #ヒットしたリファレンス配列中のIDをhoge2に格納
        hoge3 <- rep(as.character(reads[i]), length(hoge2))#hoge2の要素数分だけ、マップする側の配列(in_f2で指定するものに相当)のIDをhoge3に格納
        out <- rbind(out, cbind(hoge3, hoge2, hoge1))#cbind(hoge3, hoge2, hoge1)で表される欲しい情報をどんどんオブジェクトoutの下に追加している(ループが回るたびにどんどん行数が増えていっているイメージ)
    }
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	

    マッピング | single-end | ゲノム | basic aligner(基礎) | QuasR(Lerch_XXX)

    QuasRパッケージを用いてsingle-end RNA-seqデータのリファレンスゲノム配列へのマッピングを行うやり方を示します。 basic alignerの一つであるBowtie (Langmead et al., Genome Biol., 2009)を実装した Rbowtieパッケージを内部的に使っています。

    入力として与えるRNA-seqデータファイルはFASTA形式でもFASTQ形式でも構いません。ただし、拡張子が".fa", ".fna", ".fasta", ".fq", ".fastq"のいずれかでないといけないようです。 例えば".txt"だとエラーになります。また、圧縮ファイルでも構わないようです。".gz", ".bz2", ".xz"を認識できるようです。

    リファレンスゲノムは、BSgenomeパッケージで利用可能なものをそのまま指定することができるようです。 つまり、available.genomes()でみられるパッケージ名を指定可能だということです。もし指定したパッケージがインストールされていなかった場合でも、自動でインストールしてくれるようです。

    マッピングプログラム(aligner)のデフォルトは、ジャンクションリードのマッピングができないが高速なBowtie (Langmead et al., Genome Biol., 2009)です。 Bowtieプログラム自体は、複数個所にマップされるリードの取り扱い(uniquely mapped reads or multi-mapped reads)を"-m"オプションで指定したり、 許容するミスマッチ数を指定する"-v"などの様々なオプションを利用可能ですが、QuasR中では、"-m 1 -–best -–strata"オプションを基本として、内部的に自動選択するらしいです。 実際に用いられたオプションは下記スクリプト中のoutオブジェクトの出力結果から知ることができます。 この項目では、マッピングのオプションについては変更を加えずに、一つのRNA-seqファイルのマッピングを行う基本的なやり方を示しています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1.サンプルデータ18,19のRNA-seqデータ(sample_RNAseq1.fa)のref_genome.faへのマッピングの場合:

    mapping_single_genome1.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(sample_RNAseq1.fa)、 そして2行目の2列目に「任意のサンプル名」(例:namae)を記載したタブ区切りテキストファイルを用意した上で行います。 1行目の文字列は変えてはいけません(つまり"FileName"と"SampleName"のままにしておくということです)

    マッピング後に得られるBAM形式ファイルは、"sample_RNAseq1_XXXXXXXXXX.bam"というファイル名で作業ディレクトリ上に自動で生成されます。 ここで、XXXXXXXXXXはランダムな文字列からなります。 理由は、同じRNA-seqファイルを異なるパラメータやリファレンス配列にマッピングしたときに、同じ名前だと上書きしてしまう恐れがあるためです。 また、Quality Controlレポートも"sample_RNAseq1_XXXXXXXXXX_QC.pdf"というファイル名で作業ディレクトリ上に自動で生成されます。

    マッピングに用いたパラメータは"-m 1 --best --strata -v 2"であったことがわかります。

    in_f1 <- "mapping_single_genome1.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2)            #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    	

    2.サンプルデータ18,19のRNA-seqのgzip圧縮ファイル(sample_RNAseq1.fa.gz)のref_genome.faへのマッピングの場合:

    mapping_single_genome2.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(sample_RNAseq1.fa.gz)、 そして2行目の2列目に「任意のサンプル名」(例:asshuku)を記載したタブ区切りテキストファイルを用意した上で行います。 1行目の文字列は変えてはいけません(つまり"FileName"と"SampleName"のままにしておくということです)

    圧縮ファイルをそのまま読み込ませることもできる例です。

    in_f1 <- "mapping_single_genome2.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2)            #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    	

    3.サンプルデータ18,19のRNA-seqのgzip圧縮ファイル(sample_RNAseq1.fa.gz)のref_genome.faへのマッピングの場合:

    mapping_single_genome2.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(sample_RNAseq1.fa.gz)、 そして2行目の2列目に「任意のサンプル名」(例:asshuku)を記載したタブ区切りテキストファイルを用意した上で行います。 1行目の文字列は変えてはいけません(つまり"FileName"と"SampleName"のままにしておくということです)

    マッピング結果をBED形式ファイルとして保存するやり方です。GenomicAlignmentsパッケージを用いて内部的にBAM形式ファイルを読み込み、 BED形式に変換してから保存しています。qQCReport関数実行時に警告メッセージ(compressed 'fasta' input is not yet supported)が出ることを確認していますが、 単純にgzip圧縮FASTA形式ファイルはまだサポートされていないということだけで、マッピング自体はうまくいっているので問題ありません。

    in_f1 <- "mapping_single_genome2.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2)            #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    4.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)のhoge4.faへのマッピングの場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で行います。 1行目の文字列は変えてはいけません(つまり"FileName"と"SampleName"のままにしておくということです)

    一つもマップされるものがない例であり、FASTQを入力ファイルとして読み込めるという例でもあります。もちろん圧縮ファイル形式でもOKです。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "hoge4.fa"                    #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2)            #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    5.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)のトキソプラズマゲノムBSgenome.Tgondii.ToxoDB.7.0へのマッピングの場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で行います。 1行目の文字列は変えてはいけません(つまり"FileName"と"SampleName"のままにしておくということです)

    ヒトRNA-seqデータをBSgenomeパッケージで利用可能な生物種のリファレンスゲノム配列にマッピングするやり方の一例です。 計算時間短縮のためゲノムサイズの小さいトキソプラズマゲノムBSgenome.Tgondii.ToxoDB.7.0を指定しています。 BSgenome.Hsapiens.UCSC.hg19を指定すると(おそらく数時間程度かかるかもしれませんが...)マップされる確率は当然上がります(同じ生物種なので)。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Tgondii.ToxoDB.7.0" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2)            #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    マッピング | single-end | ゲノム | basic aligner(応用) | QuasR(Lerch_XXX)

    QuasRパッケージを用いてsingle-end RNA-seqデータのリファレンスゲノム配列へのマッピングを行うやり方を示します。 basic alignerの一つであるBowtie (Langmead et al., Genome Biol., 2009)を実装した Rbowtieパッケージを内部的に使っています。

    Bowtie自体は、複数個所にマップされるリードの取り扱い(uniquely mapped reads or multi-mapped reads)を"-m"オプションで指定したり、 許容するミスマッチ数を指定する"-v"などの様々なオプションを利用可能ですが、「基礎」のところではやり方を示しませんでした。 ここでは、マッピングのオプションをいくつか変更して挙動を確認したり、複数のRNA-seqファイルを一度にマッピングするやり方を示します。 尚、出力ファイルは、"*.bam", "*_QC.pdf", "*.bed"の3つです。それ以外のファイルは基本無視で大丈夫です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1.サンプルデータ18,19のRNA-seqデータ(sample_RNAseq1.fa)のref_genome.faへのマッピングの場合(mapping_single_genome1.txt):

    オプションを"-m 1 --best --strata -v 0"とした例です。 sample_RNAseq1.faでマップされないのは計3リードです。 2リード("chr3_11_45"と"chr3_15_49")はchr5にもマップされるので、"-m 1"オプションで落とされます。 1リード("chr5_1_35")は該当箇所と完全一致ではない(4番目の塩基にミスマッチをいれている)ので落とされます。

    in_f1 <- "mapping_single_genome1.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 0"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    2.サンプルデータ18,19のRNA-seqデータ(sample_RNAseq1.fa)のref_genome.faへのマッピングの場合(mapping_single_genome1.txt):

    オプションを"-m 1 --best --strata -v 1"とした例です。 sample_RNAseq1.faでマップされないのは計2リードです。 chr5にもマップされる2リード("chr3_11_45"と"chr3_15_49")が"-m 1"オプションで落とされます。

    in_f1 <- "mapping_single_genome1.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 1"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    3.サンプルデータ18,19のRNA-seqデータ(sample_RNAseq1.fa)のref_genome.faへのマッピングの場合(mapping_single_genome1.txt):

    オプションを"-m 1 -v 1"とした例です。 sample_RNAseq1.faでマップされないのは計3リードです。 2リード("chr3_11_45"と"chr3_15_49")はchr5にもマップされるので、"-m 1"オプションで落とされます。 1リード("chr3_3_37")は該当箇所と完全一致ですが、chr5_3_37とは1塩基ミスマッチでマップ可能です。 "--best --strata"は最小のミスマッチ数でヒットした結果のみ出力するオプションなので、これをつけておかないと"chr3_3_37"は2か所にマップされるリードということで"-m 1"オプションで落とされる、という例です。

    in_f1 <- "mapping_single_genome1.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 -v 1"           #マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    4.サンプルデータ18-20の複数のRNA-seqデータ(sample_RNAseq1.fasample_RNAseq2.fa)をref_genome.faにマッピングする場合(mapping_single_genome4.txt):

    複数のRNA-seqデータファイルを一度にマッピングするときに用意するファイルの記述例です。 下の行にどんどんマップしたいファイルを追加していくだけです。リード長が異なっていても大丈夫なようです。 sample_RNAseq1.faでマップされないのは計2リードです。 chr5にもマップされる2リード("chr3_11_45"と"chr3_15_49")が"-m 1"オプションで落とされます。 sample_RNAseq2.faでマップされないのは、2-4番目のジャンクションリードです。

    in_f1 <- "mapping_single_genome4.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 1"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    5. gzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)のカイコゲノム(integretedseq.fa)>へのマッピングの場合(mapping_single_genome7.txt):

    small RNA-seqデータ(400Mb弱、11928428リード)です。 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものが SRR609266.fastq.gz (Nie et al., BMC Genomics, 2013)です。 カイコゲノム配列は、農業生物資源研究所(NIAS)が提供しているカイコゲノム配列のウェブページからIntegrated sequences (integretedseq.txt.gz) をダウンロードし、解凍します。解凍後のファイル名は"integretedseq.txt"となりますが、拡張子を".txt"から".fa"に変更して、"integretedseq.fa"としたものを使用しています。

    ちなみに、イントロ | 一般 | 配列取得 | ゲノム配列 | 公共DBからを参考にして、 Ensemblから取得したBombyx_mori.GCA_000151625.1.22.dna.toplevel.fa.gzを解凍したものだと、 qAlign関数実行中に「これはfastaファイルではない」とエラーが出て実行できませんでした。20分強かかります。

    in_f1 <- "mapping_single_genome7.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "integretedseq.fa"            #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 1"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    6. 2つのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gzhoge4.fastq.gz)のカイコゲノム(integretedseq.fa)へのマッピングの場合(mapping_single_genome8.txt):

    small RNA-seqデータ(400Mb弱; 11928428リード; Nie et al., BMC Genomics, 2013)です。 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものがSRR609266.fastq.gzです。 また、前処理 | トリミング | アダプター配列除去(基礎) | ShortRead(Morgan_2009)の4を実行して得られたものがhoge4.fastq.gzです。 カイコゲノム配列は、農業生物資源研究所(NIAS)が提供しているカイコゲノム配列のウェブページからIntegrated sequences (integretedseq.txt.gz) をダウンロードし、解凍します。解凍後のファイル名は"integretedseq.txt"となりますが、拡張子を".txt"から".fa"に変更して、"integretedseq.fa"としたものを使用しています。30分強かかります。

    in_f1 <- "mapping_single_genome8.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "integretedseq.fa"            #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    マッピング | single-end | ゲノム | splice-aware aligner | QuasR(Lerch_XXX)

    QuasRパッケージを用いてsingle-end RNA-seqデータのリファレンスゲノム配列へのマッピングを行うやり方を示します。 splice-aware alignerの一つであるSpliceMap (Au et al., Nucleic Acids Res., 2010)を実装した Rbowtieパッケージを内部的に使っています。

    (QuasRパッケージ中の)SpliceMap利用時は、リード長が50bp以上あることが条件のようです。 したがって、35bpのsample_RNAseq1.faを入力ファイルに含めるとエラーが出ます。

    尚、出力ファイルは、"*.bam", "*_QC.pdf", "*.bed"の3つです。それ以外のファイルは基本無視で大丈夫です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1.サンプルデータ18と20のRNA-seqデータ(sample_RNAseq2.fa)をref_genome.faにマッピングする場合(mapping_single_genome5.txt):

    デフォルトのオプションで実行する例です。

    リード長が50bp以上ありますが、なぜか「failed while generating 25mers」という類のエラーが出ます。

    in_f1 <- "mapping_single_genome5.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=T)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    2.サンプルデータ18と20のRNA-seqデータ(sample_RNAseq2.fa)をref_genome.faにマッピングする場合(mapping_single_genome5.txt):

    オプションを"-max_intron 200 -min_intron 5 -max_multi_hit 5 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"とした例です。

    リード長が50bp以上ありますが、なぜか「failed while generating 25mers」という類のエラーが出ます。

    in_f1 <- "mapping_single_genome5.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-max_intron 200 -min_intron 5 -max_multi_hit 5 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
                  alignmentParameter=param_mapping,#マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=T)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    3.QuasRパッケージ中のサンプルRNA-seqデータ(rna_1_1.fq)の最初の5リードからなるファイル(sample_RNAseq3.fa)をref_genome.faにマッピングする場合(mapping_single_genome6.txt):

    オプションを"-max_intron 200 -min_intron 5 -max_multi_hit 5 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"とした例です。

    リード長が50bp以上ありますが、なぜか「failed while generating 25mers」という類のエラーが出ます。

    in_f1 <- "mapping_single_genome6.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-max_intron 200 -min_intron 5 -max_multi_hit 5 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
                  alignmentParameter=param_mapping,#マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=T)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    4.QuasRパッケージ中のサンプルRNA-seqデータ(rna_1_1.fq)の最初の5リードからなるファイル(sample_RNAseq3.fa)をref_genome.faにマッピングする場合(mapping_single_genome6.txt):

    デフォルトのオプションで実行する例です。 実際に用いられたオプションが"-max_intron 400000 -min_intron 20000 -max_multi_hit 10 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"となっているのがわかります。

    エラーが出なくなりますが当然?!マップされません。

    in_f1 <- "mapping_single_genome6.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=T)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    5.QuasRパッケージ中のサンプルRNA-seqデータ(rna_1_1.fq)の最初の5リードからなるファイル(sample_RNAseq3.fa)をref_genome.faにマッピングする場合(mapping_single_genome6.txt):

    オプションを"-max_intron 400000 -min_intron 20000 -max_multi_hit 10 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"とした例です。

    4.と同じ結果(エラーは出ないがマップされない)になります。

    in_f1 <- "mapping_single_genome6.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-max_intron 400000 -min_intron 20000 -max_multi_hit 10 -selectSingleHit TRUE -seed_mismatch 1 -read_mismatch 2 -try_hard yes"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #本番(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
                  alignmentParameter=param_mapping,#マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=T)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #ファイルに保存(QCレポート用のpdfファイル作成)
    out_f <- sub(".bam", "_QC.pdf", out@alignments[,1])#Quqlity Controlレポートのpdfファイル名を作成した結果をout_fに格納
    qQCReport(out, pdfFilename=out_f)      #QCレポート結果をファイルに保存
    out_f                                  #ファイル名を表示してるだけです
    
    #ファイルに保存(BED形式ファイル)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      hoge <- readGAlignments(tmpfname[i]) #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
      hoge <- as.data.frame(hoge)          #データフレーム形式に変換
      tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納
      out_f <- sub(".bam", ".bed", tmpfname[i])#BED形式ファイル名を作成した結果をout_fに格納
      out_f                                #ファイル名を表示してるだけです
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    }
    	

    マップ後 | について

    (ゲノムやトランスクリプトーム配列へのマッピング時には問題にならないと思いますが、おそらく)RNA-seqのアセンブルを行う場合には、sequencing errorの除去以外にも「アダプター配列」や「low-complexity reads (低複雑性のリード;繰り返し配列)」や「PCR duplicates(ロングインサートライブラリによくあるらしい...)」の除去を行うのが普通なようです。(私がTrinityでアセンブルを行う場合にはそんなことやったこともないのですが、やったら大分違うのでしょうか。。。)ここではこれらのerror除去を行うプログラムを列挙しておきます:

    入力ファイルがリファレンス配列へのマップ後のファイル(SAM/BAM, BED, GFF形式など)(Rパッケージ):

    入力ファイルがリファレンス配列へのマップ後のファイル(SAM/BAM, BED, GFF形式など)(R以外):

    (おそらく)454 platform用:

    その他:

    マップ後 | 出力ファイル形式について

    様々ないろいろな出力ファイル形式があることがわかります。

    注目すべきは、Sequence Alignment/Map (SAM) formatです。この形式は国際共同研究の1000人のゲノムを解析するという1000 Genomes Projectで採用された(開発された)フォーマットで、("@"から始まる)header sectionと(そうでない)alignment sectionから構成されています。このヒトの目で解読可能な形式がSAMフォーマットで、このバイナリ版がBinary Alignment/Map (BAM)フォーマットというものです。今後SAM/BAM formatという記述をよく見かけるようになることでしょう。

    代表的な出力ファイル形式:

    マップ後 | 出力ファイルの読み込み | BAM形式

    GenomicAlignmentsパッケージを用いてBAM形式ファイルを読み込むやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. sample_RNAseq1.bamの場合:

    in_f <- "sample_RNAseq1.bam"           #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(GenomicAlignments)             #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readGAlignments(in_f)          #BAM形式ファイルを読み込んだ結果をhogeに格納(これはGAlignmentsオブジェクト)
    hoge                                   #確認してるだけです
    	

    マップ後 | 出力ファイルの読み込み | Bowtie形式

    Bowtie形式出力ファイルを読み込むやり方を、yeastRNASeqパッケージ中にある(このパッケージがインストールされていることが前提です)wt_1_f.bowtie.gzファイルを例として解説します。yeastRNASeqというパッケージがインストールされていれば、(例えば私のWindows 7, 64bitマシン環境だと)「コンピュータ - OS(C:) - Program Files - R - R-3.0.1 - library - yeastRNASeq - reads」から目的のファイルにたどり着きます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ディレクトリの変更をちゃんとやった場合:

    in_f <- "wt_1_f.bowtie.gz"             #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    aligned <- readAligned(in_f, type="Bowtie")#in_fで指定したファイルの読み込み
    aligned                                #確認してるだけです
    	

    2. yeastRNASeqパッケージ中のreadsフォルダ中に目的のファイルがあることが既知の場合:

    in_f <- "wt_1_f.bowtie.gz"             #入力ファイル名を指定してin_fに格納
    param1 <- "yeastRNASeq"                #パッケージ名を指定
    param2 <- "reads"                      #フォルダ名を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    path <- file.path(system.file(package=param1, param2))#ファイルパスの指定
    aligned <- readAligned(path, in_f, type="Bowtie")#in_fで指定したファイルの読み込み
    aligned                                #確認してるだけです
    	

    マップ後 | 出力ファイルの読み込み | SOAP形式

    basic alignerの一つであるSOAPを実行して得られたSOAP形式ファイルの読み込み例をいくつか示します。

    SOAP以外のフォーマットも「マッピング | 出力ファイルの読み込み |」を参考にして、必要な情報さえ読み込んでおけば、それ以降は同じです。 SOAP形式ファイルの場合、param1に相当するのは入力ファイルの8列目の記述に、そしてparam2に相当するのは7列目の記述に相当します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. output.soapの場合:

    885リードからなるファイルです。8番染色体上の+鎖のみにマップされたリードのみFASTAファイルで保存するやり方1です。

    in_f <- "output.soap"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "chr08"                      #染色体の条件を指定
    param2 <- "+"                          #strandの条件を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    aligned <- readAligned(in_f, type="SOAP")#in_fで指定したファイルの読み込み
    aligned                                #確認してるだけです
    
    #本番(フィルタリング)
    aligned <- aligned[aligned@chromosome == param1]#param1で指定した染色体の情報のみ抽出して、alignedに格納
    aligned                                #確認してるだけです
    aligned <- aligned[aligned@strand == "+"]#param2で指定したstrandのもののみ抽出して、alignedに格納
    aligned                                #確認してるだけです
    
    #後処理(FASTA形式に変換)
    fasta <- sread(aligned)                #alignedで得られたオブジェクトから塩基配列情報をDNAStringSetオブジェクトとして得たい場合
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    2. output.soapの場合:

    885リードからなるファイルです。8番染色体上の+鎖のみにマップされたリードのみFASTAファイルで保存するやり方2です。

    in_f <- "output.soap"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "chr08"                      #染色体の条件を指定
    param2 <- "+"                          #strandの条件を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    aligned <- readAligned(in_f, type="SOAP")#in_fで指定したファイルの読み込み
    aligned                                #確認してるだけです
    
    #本番(フィルタリング)
    hoge <- compose(chromosomeFilter(param1), strandFilter(param2))#param1 and param2で指定したフィルタリング条件をまとめてhogeに格納
    aligned <- aligned[hoge(aligned)]      #フィルタリングを実行して、その結果をalignedに格納
    
    #後処理(FASTA形式に変換)
    fasta <- sread(aligned)                #alignedで得られたオブジェクトから塩基配列情報をDNAStringSetオブジェクトとして得たい場合
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    3. output.soapの場合:

    885リードからなるファイルです。strandは気にせずに10番染色体上にマップされたリードのみFASTAファイルで保存するやり方です。

    in_f <- "output.soap"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
    param1 <- "chr10"                      #染色体の条件を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    aligned <- readAligned(in_f, type="SOAP")#in_fで指定したファイルの読み込み
    aligned                                #確認してるだけです
    
    #本番(フィルタリング)
    hoge <- compose(chromosomeFilter(param1))#param1で指定したフィルタリング条件をまとめてhogeに格納
    aligned <- aligned[hoge(aligned)]      #フィルタリングを実行して、その結果をalignedに格納
    
    #後処理(FASTA形式に変換)
    fasta <- sread(aligned)                #alignedで得られたオブジェクトから塩基配列情報をDNAStringSetオブジェクトとして得たい場合
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	

    4. output.soapの場合:

    染色体ごとにマップされたリード数情報を取得するやり方です。

    in_f <- "output.soap"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    aligned <- readAligned(in_f, type="SOAP")#in_fで指定したファイルの読み込み
    aligned                                #確認してるだけです
    
    #本番
    out <- as.data.frame(table(aligned@chromosome))#頻度情報をカウントした結果をoutに格納
    colnames(out) <- c("chromosome", "frequency")#列名を付与
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    5. output.soapの場合:

    染色体およびstrandごとにマップされたリード数情報を取得するやり方です。

    in_f <- "output.soap"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    aligned <- readAligned(in_f, type="SOAP")#in_fで指定したファイルの読み込み
    
    #本番
    hoge <- paste(aligned@chromosome, aligned@strand, sep="___")#染色体名とstrand情報を(区切り文字を"___"として)一時的に連結させた結果をhogeに格納
    out <- as.data.frame(table(hoge))      #頻度情報をカウントした結果をoutに格納
    colnames(out) <- c("chromosome___strand", "frequency")#列名を付与
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    マップ後 | 出力ファイルの読み込み | htSeqTools (Planet_2012)

    比較解析などの場合に「複数のサンプル間のクラスタリングをまず行う」ことをトランスクリプトーム解析の基本手順として行ったほうがよい、ということを私の講義でも述べていますが、このパッケージでも1) サンプル間の類似度をMDSプロットで表現する機能があるようですね。

    また、2) PCR biasに起因する一部のリードが大量にシークエンスされてしまったようなものも、BIC (Bayesian Information Criterion)を用いたリピート数のモデル化ややFDR (False Discovery Rate)の閾値を設けて取り除くようなこともできるようです。

    ChIP-seq (or MeDIP, DNase-seq)などの場合には、controlに対してimmuno-precipitation (IP)サンプルにおける特定の領域中のリード数(coverage)が増大します。このcoverageの標準偏差(standard deviation; SD)はリード数nのルートに比例するらしいです。なのでもしIPサンプルのSDn (=SD/sqrt(n))がcontrolサンプルのSDnと同程度であればIPがうまくいっていないことを意味します。このパッケージでは、この3) enrichment efficiencyの評価もできるようです。

    その他には、ゲノムにマップされた領域のスクリーニングや、領域ごとにマップされたリード数をカウントしたり、複数サンプル間でのリード数の比較をlikelihod ratioやpermutationカイ二乗検定で行ってくれるようです。

    ちなみに、入力ファイルの形式はBAM形式ファイル(Rsamtools or ShortReadパッケージで読み込み可能)かBED, GFF, WIG形式ファイル(rtracklayerパッケージで読み込み可能)で、マップ後のファイルということになります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    in_f <- ""                             #読み込みたいファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(htSeqTools)                    #パッケージの読み込み
    	

    マップ後 | カウント情報取得 | について

    BAM形式などのマッピング結果ファイルからカウントデータを取得するためのパッケージや関数もいくつかあります。 htSeqToolsのislandCounts関数、 Rsubread(Windows版はなし)のfeatureCounts関数、 GenomicRangesのsummarizeOverlaps関数などです。 QuasRは、内部的にGenomicRangesのsummarizeOverlaps関数を利用しています。

    マップ後 | カウント情報取得 | ゲノム | アノテーション有 | QuasR(Lerch_XXX)

    QuasRパッケージを用いたsingle-end RNA-seqデータのリファレンスゲノム配列へのBowtieによるマッピングから、 カウントデータ取得までの一連の流れを示します。アノテーション情報は、GenomicFeaturesパッケージ中の 関数を利用してTranscriptDbオブジェクト形式にしたものを利用しています。 マッピングのやり方やオプションの詳細については マッピング | single-end | ゲノム | basic aligner(応用) | QuasR(Lerch_XXX)などを参考にしてください。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19 へのマッピング結果の場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で(オプションを"-m 1 --best --strata -v 2"として)行っています。

    hg19にマップした結果なので、TranscriptDbオブジェクト取得時のゲノム情報もそれを基本として、 UCSC Genes ("knownGene")を指定しているので、Entrez Gene IDに対するカウントデータ取得になっています。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "knownGene"                  #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(マッピング)
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #前処理(TranscriptDbオブジェクト作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(カウントデータ取得)
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    dim(count)                             #行数と列数を表示
    head(count)                            #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(count), count)   #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19 へのマッピング結果の場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で(オプションを"-m 1 --best --strata -v 2"として)行っています。

    hg19にマップした結果なので、TranscriptDbオブジェクト取得時のゲノム情報もそれを基本として、 RefSeq Genes ("refGene")を指定しているのでRefSeq Gene IDに対するカウントデータ取得になっていますはずですが、そうはなっていません。

    この理由は(バグか開発者のポリシーかは不明ですが)おそらくRefSeqが転写物単位のIDなためゲノムマッピング結果の取り扱いとは相性が悪いためでしょう。 ちなみに長さ情報は変わっているので、なんらかの形でRefSeqの情報が反映されているのでしょう。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "refGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(マッピング)
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #前処理(TranscriptDbオブジェクト作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(カウントデータ取得)
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    dim(count)                             #行数と列数を表示
    head(count)                            #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(count), count)   #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19へのマッピング結果の場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で(オプションを"-m 1 --best --strata -v 2"として)行っています。

    hg19にマップした結果なので、TranscriptDbオブジェクト取得時のゲノム情報もそれを基本として Ensembl Genes ("ensGene")を指定しているので、Ensembl Gene IDに対するカウントデータ取得になっています。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(マッピング)
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #前処理(TranscriptDbオブジェクト作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(カウントデータ取得)
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    dim(count)                             #行数と列数を表示
    head(count)                            #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(count), count)   #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19へのマッピング結果の場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で(オプションを"-m 1 --best --strata -v 2"として)行っています。

    hg19にマップした結果なので、TranscriptDbオブジェクト取得時のゲノム情報もそれを基本として Ensembl Genes ("ensGene")を指定しているので、Ensembl Gene IDに対するカウントデータ取得になっています。

    基本は3と同じですが、一般的なカウントデータ行列の形式(2列目以降がカウント情報)にし、配列長情報と別々のファイルにして保存するやり方です。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f1 <- "hoge4_count.txt"            #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge4_genelength.txt"       #出力ファイル名を指定してout_f2に格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(マッピング)
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #前処理(TranscriptDbオブジェクト作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(カウントデータ取得)
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    dim(count)                             #行数と列数を表示
    head(count)                            #確認してるだけです
    
    #ファイルに保存(カウント情報)
    data <- count[,-1]                     #カウント情報をdataに格納
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(遺伝子配列長情報)
    genelength <- count[,1]                #遺伝子配列長情報をgenelengthに格納
    tmp <- cbind(names(genelength), genelength)#保存したい情報をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    5.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19へのマッピング結果の場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で(オプションを"-m 1 --best --strata -v 2"として)行っています。

    3.と違って、TranscriptDbオブジェクト取得時に、Ensemblにアクセスしてhsapiens_gene_ensembl をデータベース名として指定しています。

    ちなみにこれは、txdbオブジェクトの作成まではうまくいきますが、最後のqCount関数の実行のところでエラーが出ます。 理由は、Ensemblで提供されている染色体名seqnames(transcripts(txdb))の中にBSgenome.Hsapiens.UCSC.hg19で提供されている染色体名以外の名前のものが含まれているためです。 データ提供元が異なるとうまくいかない例です。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param2 <- "hsapiens_gene_ensembl"      #データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #前処理(マッピング)
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #前処理(TranscriptDbオブジェクト作成)
    txdb <- makeTranscriptDbFromBiomart(dataset=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    txdb                                   #確認してるだけです
    
    #本番(カウントデータ取得)
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    dim(count)                             #行数と列数を表示
    head(count)                            #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(count), count)   #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    マップ後 | カウント情報取得 | ゲノム | アノテーション無 | QuasR(Lerch_XXX)

    QuasRパッケージを用いたsingle-end RNA-seqデータのリファレンスゲノム配列へのBowtieによるマッピングから、 カウントデータ取得までの一連の流れを示します。アノテーション情報がない場合を想定しているので、GenomicAlignments パッケージを利用して、マップされたリードの和集合領域(union range)を得たのち、領域ごとにマップされたリード数をカウントしています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1.サンプルデータ18,19のRNA-seqデータ(sample_RNAseq1.fa)のref_genome.faへのマッピングの場合(mapping_single_genome1.txt):

    オプションを"-m 1 --best --strata -v 0"とした例です。

    in_f1 <- "mapping_single_genome1.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 0"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #前処理(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #本番(マップされたリードの和集合領域同定)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    tmpsname <- out@alignments[,2]         #サンプル名(in_f1の2列目に相当)をtmpsnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      if(i == 1){
        k <- readGAlignments(tmpfname[i])  #BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      } else{
        k <- c(k, readGAlignments(tmpfname[i]))#BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      }
    }
    m <- reduce(granges(k))                #GRangesオブジェクトへの変換および和集合領域情報を得た結果のGRangesオブジェクトをmに格納
    
    #本番(カウント情報取得)
    tmp <- as.data.frame(m)                #出力ファイルのカウントデータ以外の情報をtmpに格納
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      tmpcount <- summarizeOverlaps(m, tmpfname[i])#GRangesオブジェクトmに対するBAMファイルのマップ結果のカウント情報取得結果をtmpcountに格納
      count <- assays(tmpcount)$counts     #SummarizedExperimentクラスオブジェクトのtmpcountからカウントデータ行列部分を抽出した結果をcountに格納
      colnames(count) <- tmpsname[i]       #行列countの列名を変更
      tmp <- cbind(tmp, count)             #保存したい情報を連結してtmpに格納(和集合領域とカウント)
    }
    
    #ファイルに保存
    out_f <- sub(".bam", "_range.txt", tmpfname[i])#変更したファイル名を作成した結果をout_fに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    2.サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19 へのマッピング結果の場合:

    mapping_single_genome3.txtのような2行目の1列目に「マッピングしたいRNA-seqファイル名」(SRR037439.fastq)、 そして2行目の2列目に「任意のサンプル名」(例:human_brain)を記載したタブ区切りテキストファイルを用意した上で(オプションを"-m 1 --best --strata -v 2"として)行っています。 RNA-seqデータのほうのリード数は少ないですが、リファレンス配列の前処理でかなり時間がかかるようです(2時間とか...)。

    in_f1 <- "mapping_single_genome3.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #前処理(マッピング)
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #本番(マップされたリードの和集合領域およびその領域に対するカウント情報取得)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    tmpsname <- out@alignments[,2]         #サンプル名(in_f1の2列目に相当)をtmpsnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      k <- readGAlignments(tmpfname[i])    #BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      m <- reduce(granges(k))              #GRangesオブジェクトへの変換および和集合領域情報を得た結果のGRangesオブジェクトをmに格納
      tmpcount <- summarizeOverlaps(m, tmpfname[i])#GRangesオブジェクトmに対するBAMファイルのマップ結果のカウント情報取得結果をtmpcountに格納
      count <- assays(tmpcount)$counts     #SummarizedExperimentクラスオブジェクトのtmpcountからカウントデータ行列部分を抽出した結果をcountに格納
      colnames(count) <- tmpsname[i]       #行列countの列名を変更
      tmp <- cbind(as.data.frame(m), count)#和集合領域情報とカウント情報を結合した結果をtmpに格納
      out_f <- sub(".bam", "_range.txt", tmpfname[i])#変更したファイル名を作成した結果をout_fに格納
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    }
    	

    3.サンプルデータ18-20の複数のRNA-seqデータ(sample_RNAseq1.fasample_RNAseq2.fa)をref_genome.faにマッピングする場合(mapping_single_genome4.txt):

    複数のRNA-seqデータファイルごとに和集合領域を定めてカウント情報を得るやり方です。"*_range.txt"という2つの出力ファイルが生成されます。

    in_f1 <- "mapping_single_genome4.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    param_mapping <- "-m 1 --best --strata -v 1"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #前処理(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #本番(マップされたリードの和集合領域およびその領域に対するカウント情報取得)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    tmpsname <- out@alignments[,2]         #サンプル名(in_f1の2列目に相当)をtmpsnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      k <- readGAlignments(tmpfname[i])    #BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      m <- reduce(granges(k))              #GRangesオブジェクトへの変換および和集合領域情報を得た結果のGRangesオブジェクトをmに格納
      tmpcount <- summarizeOverlaps(m, tmpfname[i])#GRangesオブジェクトmに対するBAMファイルのマップ結果のカウント情報取得結果をtmpcountに格納
      count <- assays(tmpcount)$counts     #SummarizedExperimentクラスオブジェクトのtmpcountからカウントデータ行列部分を抽出した結果をcountに格納
      colnames(count) <- tmpsname[i]       #行列countの列名を変更
      tmp <- cbind(as.data.frame(m), count)#和集合領域情報とカウント情報を結合した結果をtmpに格納
      out_f <- sub(".bam", "_range.txt", tmpfname[i])#変更したファイル名を作成した結果をout_fに格納
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    }
    	

    4.サンプルデータ18-20の複数のRNA-seqデータ(sample_RNAseq1.fasample_RNAseq2.fa)をref_genome.faにマッピングする場合(mapping_single_genome4.txt):

    全部のマッピング結果をまとめて和集合領域を定め、カウント情報を得るやり方です。サンプル間比較の際に便利。

    in_f1 <- "mapping_single_genome4.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_mapping <- "-m 1 --best --strata -v 1"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #前処理(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #本番(マップされたリードの和集合領域同定)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    tmpsname <- out@alignments[,2]         #サンプル名(in_f1の2列目に相当)をtmpsnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      if(i == 1){
        k <- readGAlignments(tmpfname[i])  #BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      } else{
        k <- c(k, readGAlignments(tmpfname[i]))#BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      }
    }
    m <- reduce(granges(k))                #GRangesオブジェクトへの変換および和集合領域情報を得た結果のGRangesオブジェクトをmに格納
    
    #本番(カウント情報取得)
    tmp <- as.data.frame(m)                #出力ファイルのカウントデータ以外の情報をtmpに格納
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      tmpcount <- summarizeOverlaps(m, tmpfname[i])#GRangesオブジェクトmに対するBAMファイルのマップ結果のカウント情報取得結果をtmpcountに格納
      count <- assays(tmpcount)$counts     #SummarizedExperimentクラスオブジェクトのtmpcountからカウントデータ行列部分を抽出した結果をcountに格納
      colnames(count) <- tmpsname[i]       #行列countの列名を変更
      tmp <- cbind(tmp, count)             #和集合領域情報とカウント情報を結合した結果をtmpに格納
    }
    
    #ファイルに保存
    out_f <- sub(".bam", "_range.txt", tmpfname[i])#変更したファイル名を作成した結果をout_fに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    5.サンプルデータ18-20の複数のRNA-seqデータ(sample_RNAseq1.fasample_RNAseq2.fa)をref_genome.faにマッピングする場合(mapping_single_genome4.txt):

    全部のマッピング結果をまとめて和集合領域を定め、カウント情報を得るやり方です。一般的なカウントデータ行列の形式(2列目以降がカウント情報)にし、配列長情報と別々のファイルにして保存するやり方です。

    in_f1 <- "mapping_single_genome4.txt"  #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "ref_genome.fa"               #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f1 <- "hoge4_count.txt"            #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge4_genelength.txt"       #出力ファイル名を指定してout_f2に格納
    param_mapping <- "-m 1 --best --strata -v 1"#マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    
    #前処理(マッピング)
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    out                                    #マッピングに用いたパラメータや入力ファイルの情報などを表示
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    
    #本番(マップされたリードの和集合領域同定)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    tmpsname <- out@alignments[,2]         #サンプル名(in_f1の2列目に相当)をtmpsnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      if(i == 1){
        k <- readGAlignments(tmpfname[i])  #BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      } else{
        k <- c(k, readGAlignments(tmpfname[i]))#BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      }
    }
    m <- reduce(granges(k))                #GRangesオブジェクトへの変換および和集合領域情報を得た結果のGRangesオブジェクトをmに格納
    
    #本番(カウント情報取得)
    h <- as.data.frame(m)                  #出力ファイルのカウントデータ以外の情報をhに格納(この情報を結合して行名を作成している)
    tmp <- paste(h[,1],h[,2],h[,3],h[,4],h[,5], sep="_")#出力ファイルの行名部分を作成
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      tmpcount <- summarizeOverlaps(m, tmpfname[i])#GRangesオブジェクトmに対するBAMファイルのマップ結果のカウント情報取得結果をtmpcountに格納
      count <- assays(tmpcount)$counts     #SummarizedExperimentクラスオブジェクトのtmpcountからカウントデータ行列部分を抽出した結果をcountに格納
      colnames(count) <- tmpsname[i]       #行列countの列名を変更
      tmp <- cbind(tmp, count)             #列名とカウント情報を結合した結果をtmpに格納
    }
    
    #ファイルに保存(カウント情報および配列長情報)
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- paste(h[,1],h[,2],h[,3],h[,4],h[,5], sep="_")#出力ファイルの行名部分を作成
    tmp <- cbind(tmp, h$width)             #和集合領域情報とカウント情報を結合した結果をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから

    BED形式のマップ後のファイルと(マップされる側の)リファレンス配列ファイルを読み込んでリファレンス配列の並びで配列長とカウント情報を取得するやり方を示します。 出力ファイルの並びは「リファレンス配列のdescription行」「配列長」「カウント情報」です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. マップされる側の配列(hoge4.fa)中のIDの並びでBED形式ファイル(sample_1.bed)中の出現回数をカウントする場合:

    in_f1 <- "sample_1.bed"                #入力ファイル名を指定してin_f1に格納(BED形式ファイル)
    in_f2 <- "hoge4.fa"                    #入力ファイル名を指定してin_f2に格納(リファレンス配列ファイル)
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, sep="\t")    #in_f1で指定したファイルの読み込み
    fasta <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    head(data)                             #確認してるだけです
    
    #本番
    hoge <- table(data[,1])                #出現頻度をカウントした結果をhogeに格納
    head(hoge)                             #確認してるだけです
    out <- rep(0, length(fasta))           #最終的に欲しいカウント情報の初期値を0にしておく
    names(out) <- names(fasta)             #names(fasta)をnames(out)に格納
    out[names(hoge)] <- hoge               #生リードカウントを代入
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(names(out), width(fasta), out)#「ID, 配列長, カウント情報」の並びにしたものをtmpに格納
    colnames(tmp) <- c("ID", "Length", "Count")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    2. マップされる側の配列(hoge4.fa)中のIDをソートした並びでBED形式ファイル(sample_1.bed)中の出現回数をカウントする場合:

    in_f1 <- "sample_1.bed"                #入力ファイル名を指定してin_f1に格納(BED形式ファイル)
    in_f2 <- "hoge4.fa"                    #入力ファイル名を指定してin_f2に格納(リファレンス配列ファイル)
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, sep="\t")    #in_f1で指定したファイルの読み込み
    fasta <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    head(data)                             #確認してるだけです
    
    #本番
    hoge <- table(data[,1])                #出現頻度をカウントした結果をhogeに格納
    head(hoge)                             #確認してるだけです
    out <- rep(0, length(fasta))           #最終的に欲しいカウント情報の初期値を0にしておく
    names(out) <- sort(names(fasta))       #アルファベット順にソートしたnames(fasta)をnames(out)に格納
    out[names(hoge)] <- hoge               #生リードカウントを代入
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(names(out), width(fasta[names(out)]), out)#「ID, 配列長, カウント情報」の並びにしたものをtmpに格納
    colnames(tmp) <- c("ID", "Length", "Count")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    3. マップされる側の配列(h_rna.fasta)中のIDの並びでBED形式ファイル(SRR002324_t.bed)中の出現回数をカウントする場合:

    in_f1 <- "SRR002324_t.bed"             #入力ファイル名を指定してin_f1に格納(BED形式ファイル)
    in_f2 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f2に格納(リファレンス配列ファイル)
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, sep="\t")    #in_f1で指定したファイルの読み込み
    fasta <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    head(data)                             #確認してるだけです
    
    #本番
    hoge <- table(data[,1])                #出現頻度をカウントした結果をhogeに格納
    head(hoge)                             #確認してるだけです
    out <- rep(0, length(fasta))           #最終的に欲しいカウント情報の初期値を0にしておく
    names(out) <- names(fasta)             #names(fasta)をnames(out)に格納
    out[names(hoge)] <- hoge               #生リードカウントを代入
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(names(out), width(fasta), out)#「ID, 配列長, カウント情報」の並びにしたものをtmpに格納
    colnames(tmp) <- c("ID", "Length", "Count")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    4. マップされる側の配列(h_rna.fasta)中のIDをソートした並びでBED形式ファイル(SRR002324_t.bed)中の出現回数をカウントする場合:

    in_f1 <- "SRR002324_t.bed"             #入力ファイル名を指定してin_f1に格納(BED形式ファイル)
    in_f2 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f2に格納(リファレンス配列ファイル)
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, sep="\t")    #in_f1で指定したファイルの読み込み
    fasta <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    head(data)                             #確認してるだけです
    
    #本番
    hoge <- table(data[,1])                #出現頻度をカウントした結果をhogeに格納
    head(hoge)                             #確認してるだけです
    out <- rep(0, length(fasta))           #最終的に欲しいカウント情報の初期値を0にしておく
    names(out) <- sort(names(fasta))       #アルファベット順にソートしたnames(fasta)をnames(out)に格納
    out[names(hoge)] <- hoge               #生リードカウントを代入
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(names(out), width(fasta[names(out)]), out)#「ID, 配列長, カウント情報」の並びにしたものをtmpに格納
    colnames(tmp) <- c("ID", "Length", "Count")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    マップ後 | 配列長とカウント数の関係

    RNA-seqデータは、原理的に配列長が長い転写物ほどその断片配列のリード数が多い傾向にあります。ここではそれを眺めます。 2014年7月3日に、boxplotで示すためにparam個で分割(20分割など)するテクニックとして「floor(nrow(data)/param)+1」としていましたが、 これだと割り切れる場合でも+1してしまうことが判明したため「ceiling(nrow(data)/param)」に修正しました(佐伯亘平氏提供情報)。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 配列長とカウント情報を含むファイル(sample_length_count.txt)の場合:

    マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」の出力ファイルです。

    横軸:配列長、縦軸:カウント数のシンプルな散布図を作成したい場合です。

    (ダイナミックレンジが広いので両軸ともにlog10にしています。したがって、ゼロカウントになるところはlogを計算できないのでプロットされませんよ、という警告が出ます)

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    
    #本番(散布図)
    plot(data, log="xy")                   #両対数プロット
    #plot(Count ~ Length, data=data, log="xy")#表現方法が異なるだけ
    #plot(Count ~ Length, data=log10(data), xlab="log10(Length)", ylab="log10(Count)")#表現方法が異なるだけ
    	

    2. 配列長とカウント情報を含むファイル(sample_length_count.txt)の場合:

    マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」の出力ファイルです。

    横軸:配列長、縦軸:カウント数のシンプルな散布図を作成したい場合です。線形回帰も行っています。

    (ダイナミックレンジが広いので両軸ともにlog10にしています。したがって、ゼロカウントになるところはlogを計算できないのでプロットされませんよ、という警告が出ます)

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    head(data)                             #確認してるだけです
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    dim(data)                              #行数と列数を表示
    head(data)                             #確認してるだけです
    
    #本番(両対数プロット図)
    plot(data, log="xy")                   #両対数プロット
    
    #線形回帰(Linear Regression Model)
    out <- lm(Count ~ Length, data=log10(data))#線形回帰を行っている
    abline(out, col="red")                 #回帰直線を赤色で引いている
    	

    3. 配列長とカウント情報を含むファイル(sample_length_count.txt)の場合:

    マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」の出力ファイルです。

    横軸:配列長、縦軸:カウント数のシンプルな散布図を作成したい場合です。平滑化曲線を追加しています。

    (ダイナミックレンジが広いので両軸ともにlog10にしています。したがって、ゼロカウントになるところはlogを計算できないのでプロットされませんよ、という警告が出ます)

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    param <- 0.2                           #lowess曲線を描くときのwindow幅(0-1の範囲をとり、デフォルトは2/3)を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    head(data)                             #確認してるだけです
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    dim(data)                              #行数と列数を表示
    head(data)                             #確認してるだけです
    
    #本番(両対数プロット図)
    plot(data, log="xy")                   #両対数プロット
    
    #平滑化曲線
    lines(lowess(data, f=param), col="red")#lowess曲線を赤色で引いている
    	

    4. 配列長とカウント情報を含むファイル(sample_length_count.txt)の場合:

    マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」の出力ファイルです。

    横軸:配列長、縦軸:カウント数のboxplot(箱ひげ図)を作成したい場合です。

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    param <- 20                            #boxplotを描くときの水準数(配列長順でソートした結果の分割数に相当)を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    head(data)                             #確認してるだけです
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    dim(data)                              #行数と列数を表示
    head(data)                             #確認してるだけです
    
    #前処理(配列長の短い順にソート)
    data <- data[order(data[,1]),]         #ソート
    head(data)                             #確認してるだけです
    tail(data)                             #確認してるだけです
    
    #前処理(paramで指定した数にdataを分割するためのグループラベル情報作成)
    f <- gl(param, ceiling(nrow(data)/param), nrow(data))#nrow(data)で表される要素数からなるベクトルをparam個の水準数に分割した因子ベクトルfを作成
    head(f)                                #確認してるだけです
    
    #本番(boxplot)
    plot(f, log10(data[,2]), xlab="Length", ylab="log10(Count)")#boxplot
    
    #解説(配列長が短い上位5%について)
    data_shortest <- data[f==1,]           #ラベルが1の要素のみ抽出(配列長が短い最初の5%に相当)
    summary(data_shortest)                 #要約統計量を表示
    summary(log10(data_shortest))          #要約統計量を表示
    
    #解説(配列長が長い上位5%について)
    data_longest <- data[f==param,]        #ラベルがparamの要素のみ抽出(配列長が短い最後の5%に相当;つまり配列長が長い上位5%)
    summary(data_longest)                  #要約統計量を表示
    summary(log10(data_longest))           #要約統計量を表示
    	

    5. 配列長とカウント情報を含むファイル(sample_length_count.txt)の場合:

    マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」の出力ファイルです。

    横軸:配列長、縦軸:カウント数のboxplot(箱ひげ図)をpng形式ファイルで保存したい場合です。

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #boxplotを描くときの水準数(配列長順でソートした結果の分割数に相当)を指定
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    
    #前処理(配列長の短い順にソート)
    data <- data[order(data[,1]),]         #ソート
    
    #前処理(param1で指定した数にdataを分割するためのグループラベル情報作成)
    f <- gl(param1, ceiling(nrow(data)/param1), nrow(data))#nrow(data)で表される要素数からなるベクトルをparam1個の水準数に分割した因子ベクトルfを作成
    
    #本番(ファイルに保存)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(f, log10(data[,2]), xlab="Length", ylab="log10(Count)")#boxplot
    dev.off()                              #おまじない
    	

    6. カウントデータファイル(srp017142_count_bowtie.txt)と長さ情報ファイル(srp017142_genelength.txt)が別々の場合:

    パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)」の出力ファイルです。

    カウントデータファイルは全部で6サンプル分のデータが含まれていますが、ここでは(Ensembl Gene ID列を除く)3列目の"Pro_rep3"のカウントデータと配列長との関係を調べています。

    横軸:配列長、縦軸:カウント数のboxplot(箱ひげ図)をpng形式ファイルで保存したい場合です。

    in_f1 <- "srp017142_count_bowtie.txt"  #入力ファイル名を指定してin_f1に格納(カウント情報ファイル)
    in_f2 <- "srp017142_genelength.txt"    #入力ファイル名を指定してin_f2に格納(配列長情報ファイル)
    out_f <- "hoge6.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #boxplotを描くときの水準数(配列長順でソートした結果の分割数に相当)を指定
    param2 <- 3                            #配列長との関係を調べたいサンプルの列番号を指定
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    hoge <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    len <- read.table(in_f2, header=TRUE, row.names=1, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    hoge <- hoge[, param2]                 #指定した列のカウント情報を抽出
    data <- cbind(len, hoge)               #配列長ベクトルとカウントベクトルを列方向で結合した結果をdataに格納
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    
    #前処理(配列長の短い順にソート)
    data <- data[order(data[,1]),]         #ソート
    
    #前処理(param1で指定した数にdataを分割するためのグループラベル情報作成)
    f <- gl(param1, ceiling(nrow(data)/param1), nrow(data))#nrow(data)で表される要素数からなるベクトルをparam1個の水準数に分割した因子ベクトルfを作成
    
    #本番(ファイルに保存)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(f, log10(data[,2]), xlab="Length", ylab="log10(Count)")#boxplot
    dev.off()                              #おまじない
    	

    7. RPKM補正後のファイル(srp017142_RPKM_bowtie.txt)と長さ情報ファイル(srp017142_genelength.txt)が別々の場合:

    パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)」の出力ファイルです。

    RPKMデータファイルは全部で6サンプル分のデータが含まれていますが、ここでは(Ensembl Gene ID列を除く)3列目の"Pro_rep3"のカウントデータと配列長との関係を調べています。

    横軸:配列長、縦軸:カウント数のboxplot(箱ひげ図)をpng形式ファイルで保存したい場合です。配列長補正によって、偏りが軽減されていることがわかります。

    in_f1 <- "srp017142_RPKM_bowtie.txt"   #入力ファイル名を指定してin_f1に格納(カウント情報ファイル)
    in_f2 <- "srp017142_genelength.txt"    #入力ファイル名を指定してin_f2に格納(配列長情報ファイル)
    out_f <- "hoge7.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #boxplotを描くときの水準数(配列長順でソートした結果の分割数に相当)を指定
    param2 <- 3                            #配列長との関係を調べたいサンプルの列番号を指定
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    hoge <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    len <- read.table(in_f2, header=TRUE, row.names=1, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    hoge <- hoge[, param2]                 #指定した列のカウント情報を抽出
    data <- cbind(len, hoge)               #配列長ベクトルとカウントベクトルを列方向で結合した結果をdataに格納
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    
    #前処理(配列長の短い順にソート)
    data <- data[order(data[,1]),]         #ソート
    
    #前処理(param1で指定した数にdataを分割するためのグループラベル情報作成)
    f <- gl(param1, ceiling(nrow(data)/param1), nrow(data))#nrow(data)で表される要素数からなるベクトルをparam1個の水準数に分割した因子ベクトルfを作成
    
    #本番(ファイルに保存)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(f, log10(data[,2]), xlab="Length", ylab="log10(Count)")#boxplot
    dev.off()                              #おまじない
    	

    8. 配列長を含むカウントデータファイル(SRA000299_ensgene.txt)の場合:

    書籍 | トランスクリプトーム解析 | 2.3.6 カウントデータ取得のp92のコードを実行して得られたファイルです。 (Gene ID列を除く)1列目の配列長と2列目の"Kidney"のカウントデータとの関係を調べています。

    横軸:配列長、縦軸:カウント数のboxplot(箱ひげ図)をpng形式ファイルで保存したい場合です。

    in_f <- "SRA000299_ensgene.txt"        #入力ファイル名を指定してin_fに格納
    out_f <- "hoge8.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #boxplotを描くときの水準数(配列長順でソートした結果の分割数に相当)を指定
    param2 <- c(1, 2)                      #配列長との関係を調べたいサンプルの列番号を指定
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込みとサブセットの抽出
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- data[, param2]                 #指定した列のカウント情報を抽出
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    
    #前処理(配列長の短い順にソート)
    data <- data[order(data[,1]),]         #ソート
    
    #前処理(param1で指定した数にdataを分割するためのグループラベル情報作成)
    f <- gl(param1, ceiling(nrow(data)/param1), nrow(data))#nrow(data)で表される要素数からなるベクトルをparam1個の水準数に分割した因子ベクトルfを作成
    
    #本番(ファイルに保存)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(f, log10(data[,2]), xlab="Length", ylab="log10(Count)")#boxplot
    dev.off()                              #おまじない
    	

    正規化 | について

    記述内容が相当古いので参考程度にしてください(2014/06/22)。。。

    サンプル内正規化周辺:

    一つ上の項目(前処理 | 発現レベルの定量化について)は主にリファレンス配列(ゲノムやトランスクリプトーム)に対してRNA-seqによって得られたリードをマップし、 既知の遺伝子構造に対して転写物ごとの発現レベルに応じたspliced readsの割り当て方や遺伝子レベルの発現量をどのように見積もるか?といった問題に対処するプログラムを紹介しています。 そのため、サンプル内での異なる遺伝子間の発現レベルの大小を比較可能にしたうえでqPCR結果とのlinearityなどの評価を行うことになりますので、「(gene lengthなどの)サンプル内の正規化」は内包していると考えても基本的に差し支えはありません。

    「長い遺伝子ほどマップされるリード数が多くなる」ことは2008年頃の時点ですでにわかっていたので、gene lengthの補正は基本的に組み込まれていました。 しかし、その後gene length補正後でも「配列長が長いほど(発現レベルが高いほど)有意に発現変動していると検出される傾向にある(Oshlack and Wakefield, 2009)」という報告や、 「GC含量が高くても低くてもリードカウント数が少なくなり、中程度のGC含量のところがリードカウント数が多い傾向にある(unimodal; Risso et al., 2011)」といったことがわかってきており、リードカウント数(or 発現変動解析結果)とGC含量(or gene length)のbiasをなくす方法が提案されてきました。

    どの順番(またはタイミング)で正規化を行うかについてはまだよくわかっていません。Young(2010)らはGene Ontology解析時に発現変動解析後にgene lengthの補正を行っていますが、Risso(2011)らは発現変動解析前にGC-related bias補正を行うほうがよいと述べています。

    尚、ここでの主な評価基準は下記のa.およびb.です。

    サンプル間正規化周辺:

    sequence depth関連のサンプル間正規化の主な目的の一つとして、異なるサンプル(グループ)間で発現の異なる遺伝子(Differentially Expressed Genes; DEGs)を検出することが挙げられます。 したがって、特にサンプル間正規化を目的とした正規化法の評価は下記のよく用いられる評価基準のうち、「c.」が重要視されます。 「どの正規化法を使うか?」ということが「どの発現変動遺伝子検出法を使うか?」ということよりも結果に与える影響が大きい(Bullard et al., 2010; Kadota et al., 2012; Garmire and Subramaniam, 2012)ことがわかりつつあります。

    正規化 | サンプル間 | 複製あり | TbT正規化(Kadota_2012)でも述べていますが、従来のサンプル間正規化法(RPMやTMM法)は比較する二群間(G1群 vs. G2群)でDEG数に大きな偏りがないことを前提にしています。 つまり、「(G1群 >> G2群)のDEG数と(G1群 << G2群)のDEG数が同程度」という前提条件がありますが、実際には大きく偏りがある場合も想定すべきで、偏りがあるなしにかかわらずロバストに正規化を行ってくれるのがTbT正規化法(Kadota et al., 2012)です。 偏りがあるなしの主な原因はDEGの分布にあるわけです。よって、TbT論文では、「正規化中にDEG検出を行い、DEGを除き、non-DEGのみで再度正規化係数を決める」というDEG elimination strategyに基づく正規化法を提案しています。 そして、TbT法を含むDEG elimination strategyに基づくいくつかの正規化法をTCCというRパッケージ中に実装しています(TCC論文中ではこの戦略をDEGES「でげす」と呼んでいます; Sun et al., 2013)。TCCパッケージ中に実装されている主な方法および入力データは以下の通りです:

    1. DEGES/TbT:オリジナルのTbT法そのもの。TMM-baySeq-TMMという3ステップで正規化を行う方法。step 2のDEG同定のところで計算時間のかかるbaySeqを採用しているため、他のパッケージでは数秒で終わる正規化ステップが数十分程度はかかるのがネック。また、biological replicatesがあることを前提としている。(A1, A2, ...) vs. (B1, B2, ...)のようなデータという意味。
    2. iDEGES/edgeR:DEGES/TbT法の超高速版(100倍程度高速)。TMM-(edgeR-TMM)nというステップで正規化を行う方法(デフォルトはn = 3)。step 2のDEG同定のところでedgeRパッケージ中のexact test (Robinson and Smyth, 2008)を採用しているためDEG同定の高速化が可能。
      したがって、(step2 - step3)のサイクルをiterative (それゆえDEGESの頭にiterativeの意味を示すiがついたiDEGESとなっている)に行ってよりロバストな正規化係数を得ることが理論的に可能な方法です。それゆえreplicatesのある二群間比較を行いたい場合にはDEGES/TbTよりもiDEGES/edgeRのほうがおすすめ。
    3. iDEGES/DESeq:一連のmulti-stepの正規化手順をすべてDESeqパッケージ中の関数のみで実装したパイプライン。複製実験のない二群間比較時(i.e., A1 vs. B1など)にはこちらを利用します。

    ここでは、主に生のリードカウント(整数値;integer)データを入力として(異なる遺伝子間の発現レベルの大小比較のため)サンプル内で行うGC含量補正やgene length補正を行う方法や、 (サンプル間で同一遺伝子の発現変動比較のため)サンプル間で行うsequence depth関連の補正を行う方法についてリストアップしておきます。なぜ前処理 | 発現レベルの定量化についてで得られた数値データを使わないのか?についてですが、 よく言われることとしては「モデル(Poisson model, generalized Poisson model, negative binomial modelなど)に従わなくなるから取り扱いずらくなる」ということもあるんでしょうね。このあたりはedgeRのマニュアルなどで明記されていたりもします。 spliced read情報を含んだ発現情報を用いた正規化法の開発についてもディスカッションではよく述べられています(Dillies et al., in press)が、、、対応版は近い将来publishされる論文で出てくるでしょう。

    また、現在の方法は主に転写物レベルではなく遺伝子レベルの解析です。一歩踏み込んだエクソンレベルの解析用Rパッケージ(正規化法含む)も出てきています(Anders et al., 2012)。

    一般によく用いられるカウントデータは「2塩基ミスマッチまで許容して一か所にのみマップされるリードの数(uniquely mapped reads allowing up to two mismatches)」です(Frazee et al., 2011; Risso et al., 2011; Sun and Zhu, 2012)。 どの正規化法がいいかを評価する基準としてよく用いられているのは下記のものなどが挙げられます。 二番目については、gold standardの結果自体も測定誤差(measurement error; ME)を含むのでgold standard非依存のME modelを利用した評価法(Sun and Zhu, 2012)も提案されています:

    1. 複製実験データの再現性が高いかどうか?(reproducibilityとかprecisionという用語が対応します)
    2. qRT-PCRやmicroarrayなどの他の実験技術由来のデータをgold standardとしてそれとの相関係数が高いかどうか?(accuracy; Garmire and Subramaniam, 2012)
    3. シミュレーションデータなど、既知の発現変動遺伝子(DEGs)を発現変動遺伝子として上位にランキングできる正規化法かどうか?(AUC; Kadota et al., 2012)

    「方法名」:「Rパッケージ名」:「原著論文」の順番です。(あれば)

    また、必ずしも正規化法の原著論文とは対応付いていませんのであしからず。この方法を使いたいがどのパッケージで利用可能?、という視点でご覧になってください。

    正規化(サンプル内; GC含量補正):
    正規化(サンプル内; GC contents and gene length同時補正):
    正規化(サンプル内; 全般;分布系):
    正規化(サンプル内; 全般;その他(自分の前後の塩基の使用頻度を考慮, sequencing preference)):
    正規化(サンプル間):

    他の参考文献:

    正規化 | 基礎 | RPK or CPK (配列長補正)

    ここでは、「マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」で得られた配列長とカウント情報を含むファイル(sample_length_count.txt)から、 転写物ごとのリード数を「配列長が1000 bp (kilobase)だったときのリード数; Reads per kilobase (RPK)」に変換するやり方を示します。 「リード数 = カウント数」なのでReadsのところをCountsに置き換えた表現(Counts per kilobase; CPK)もときどき見受けられます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 配列長とカウント情報を含むファイル(sample_length_count.txt)を読み込んで変換結果をファイルに保存する場合:

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1000                         #「Reads per X」のXの値を指定(デフォルトはRPKなので1000)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    
    #本番(正規化)
    nf <- param1/data[,1]                  #正規化係数を計算した結果をnfに格納
    out <- data[,2] * nf                   #正規化係数を各行に掛けた結果をoutに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data[,1], out)#「ID, 配列長, カウント情報」の並びにしたものをtmpに格納
    colnames(tmp) <- c("ID", "Length", "Count")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. 配列長とカウント情報を含むファイル(sample_length_count.txt)を読み込んで変換し、横軸:配列長、縦軸:RPK値のboxplot(箱ひげ図)をpng形式ファイルで保存したい場合:

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 20                           #boxplotを描くときの水準数(配列長順でソートした結果の分割数に相当)を指定
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    
    #前処理(ゼロカウントデータのフィルタリング)
    data <- data[data[,2]>0,]              #カウントが0より大きい行のみ抽出した結果をdataに格納
    head(data)                             #確認してるだけです
    
    #前処理(boxplot用;配列長の短い順にソート)
    data <- data[order(data[,1]),]         #ソート
    head(data)                             #確認してるだけです
    
    #前処理(boxplot用;param1で指定した数にdataを分割するためのグループラベル情報作成)
    f <- gl(param1, floor(nrow(data)/param1)+1, nrow(data))#nrow(data)で表される要素数からなるベクトルをparam1個の水準数に分割した因子ベクトルfを作成
    
    #本番(正規化)
    nf <- 1000/data[,1]                    #正規化係数を計算した結果をnfに格納
    data[,2] <- data[,2] * nf              #正規化係数を各行に掛けた結果を元の位置に代入
    head(data)                             #確認してるだけです
    
    #ファイルに保存(boxplot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(f, log10(data[,2]), xlab="Length", ylab="log10(Count)")#boxplot
    abline(h=1, col="red")                 #縦軸が1のところに水平線を引いている
    dev.off()                              #おまじない
    	

    3. サンプルデータ4の18,110 genes×10 samplesのカウントデータ(data_marioni.txt)と長さ情報ファイル(length_marioni.txt)を読み込んで行う場合:

    in_f1 <- "data_marioni.txt"            #入力ファイル名を指定してin_f1に格納(カウントーデータファイル)
    in_f2 <- "length_marioni.txt"          #入力ファイル名を指定してin_f2に格納(長さ情報ファイル)
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    len <- read.table(in_f2, header=TRUE, row.names=1, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    head(data)                             #確認してるだけです
    head(len)                              #確認してるだけです
    colSums(data)                          #列ごとの総リード数を表示
    
    #本番(RPK正規化)
    nf <- 1000/len[,1]                     #正規化係数(RPK補正用)を計算した結果をnfに格納
    data <- sweep(data, 1, nf, "*")        #正規化係数を各行に掛けた結果をdataに格納
    head(data)                             #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    正規化 | 基礎 | RPM or CPM (総リード数補正)

    カウントデータファイルを読み込んで、転写物ごとのリード数を「総リード数が100万 (million)だったときのリード数; Reads per million (RPM)」に変換するやり方を示します。 「リード数 = カウント数」なのでReadsのところをCountsに置き換えた表現(Counts per million; CPM)もときどき見受けられます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 3列目にカウント情報を含むファイル(sample_length_count.txt)からRPM変換した結果をファイルに保存したい場合:

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1000000                      #補正後の総リード数を指定(RPMにしたい場合はここの数値はそのまま)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    sum(data[,2])                          #総リード数を表示
    
    #本番(正規化)
    nf <- param1/sum(data[,2])             #正規化係数を計算した結果をnfに格納
    out <- data[,2] * nf                   #正規化係数を各行に掛けた結果をoutに格納
    head(out)                              #RPM変換後の数値を表示
    sum(out)                               #総リード数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data[,1], out)#「ID, 配列長, カウント情報」の並びにしたものをtmpに格納
    colnames(tmp) <- c("ID", "Length", "Count")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1000000                      #補正後の総リード数を指定(RPMにしたい場合はここの数値はそのまま)
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    dim(data)                              #確認してるだけです
    colSums(data)                          #総リード数を表示
    
    #前処理(non-DEGデータのみ抽出)
    data <- data[param_nonDEG,]            #param_nonDEGで指定した行の情報のみ抽出
    head(data)                             #確認してるだけです
    dim(data)                              #確認してるだけです
    colSums(data)                          #総リード数を表示
    
    #本番(正規化)
    nf <- param1/colSums(data)             #正規化係数を計算した結果をnfに格納
    data <- sweep(data, 2, nf, "*")        #正規化係数を各列に掛けた結果をdataに格納
    head(data)                             #確認してるだけです
    colSums(data)                          #総リード数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGデータのみを正規化してM-A plotを作成しています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1000000                      #補正後の総リード数を指定(RPMにしたい場合はここの数値はそのまま)
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(non-DEGデータのみ抽出)
    data <- data[param_nonDEG,]            #param_nonDEGで指定した行の情報のみ抽出
    
    #本番(正規化)
    nf <- param1/colSums(data)             #正規化係数を計算した結果をnfに格納
    data <- sweep(data, 2, nf, "*")        #正規化係数を各列に掛けた結果をdataに格納
    
    #本番(M-A plot)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    G1 <- apply(as.matrix(data[,data.cl==1]), 1, mean)#遺伝子ごとにG1群の平均を計算した結果をG1に格納
    G2 <- apply(as.matrix(data[,data.cl==2]), 1, mean)#遺伝子ごとにG2群の平均を計算した結果をG2に格納
    M <- log2(G2) - log2(G1)               #M-A plotのM(y軸の値)に相当するものをMに格納)
    A <- (log2(G1) + log2(G2))/2           #M-A plotのA(x軸の値)に相当するものをAに格納)
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    median(M, na.rm=TRUE)                  #M値(=log2(G2/G1))の中央値(Inf and -Infを含む)を表示
    abline(h=median(M, na.rm=TRUE), col="black")#M値(=log2(G2/G1))の中央値を指定した色で表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data, G1, G2, log2(G1), log2(G2), M, A)#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGデータのみを正規化してM-A plotを作成していろいろとハイライトさせるやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    param1 <- 1000000                      #補正後の総リード数を指定(RPMにしたい場合はここの数値はそのまま)
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(non-DEGデータのみ抽出)
    data <- data[param_nonDEG,]            #param_nonDEGで指定した行の情報のみ抽出
    
    #本番(正規化)
    nf <- param1/colSums(data)             #正規化係数を計算した結果をnfに格納
    data <- sweep(data, 2, nf, "*")        #正規化係数を各列に掛けた結果をdataに格納
    
    #本番(M-A plot)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    G1 <- apply(as.matrix(data[,data.cl==1]), 1, mean)#遺伝子ごとにG1群の平均を計算した結果をG1に格納
    G2 <- apply(as.matrix(data[,data.cl==2]), 1, mean)#遺伝子ごとにG2群の平均を計算した結果をG2に格納
    M <- log2(G2) - log2(G1)               #M-A plotのM(y軸の値)に相当するものをMに格納)
    A <- (log2(G1) + log2(G2))/2           #M-A plotのA(x軸の値)に相当するものをAに格納)
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    
    #後処理(いろいろな条件を満たすものを描画している)
    obj <- "gene_2002"                     #ハイライトさせたい遺伝子名"gene_2002"を指定
    points(A[obj], M[obj], col="red", cex=1.0, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    
    obj <- (M >= log2(4))                  #条件を満たすかどうかを判定した結果をobjに格納(4倍以上G2群で高発現な遺伝子)
    points(A[obj], M[obj], col="blue", cex=0.8, pch=6)#objがTRUEとなる要素のみ指定した色で描画
    sum(obj, na.rm=TRUE)                   #objがTRUEとなる要素数を表示させている
    
    obj <- (A > 10)                        #条件を満たすかどうかを判定した結果をobjに格納(Aの値が10より大きい遺伝子)
    points(A[obj], M[obj], col="lightblue", cex=0.8, pch=17)#objがTRUEとなる要素のみ指定した色で描画
    sum(obj, na.rm=TRUE)                   #objがTRUEとなる要素数を表示させている
    	

    5. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    上記DEGを色分けするやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    param1 <- 1000000                      #補正後の総リード数を指定(RPMにしたい場合はここの数値はそのまま)
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #本番(正規化)
    nf <- param1/colSums(data)             #正規化係数を計算した結果をnfに格納
    data <- sweep(data, 2, nf, "*")        #正規化係数を各列に掛けた結果をdataに格納
    
    #本番(M-A plot)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    G1 <- apply(as.matrix(data[,data.cl==1]), 1, mean)#遺伝子ごとにG1群の平均を計算した結果をG1に格納
    G2 <- apply(as.matrix(data[,data.cl==2]), 1, mean)#遺伝子ごとにG2群の平均を計算した結果をG2に格納
    M <- log2(G2) - log2(G1)               #M-A plotのM(y軸の値)に相当するものをMに格納)
    A <- (log2(G1) + log2(G2))/2           #M-A plotのA(x軸の値)に相当するものをAに格納)
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    median(M[param_nonDEG], na.rm=TRUE)    #non-DEGデータのM値(=log2(G2/G1))の中央値(Inf and -Infを含む)を表示
    abline(h=median(M[param_nonDEG], na.rm=TRUE), col="black")#non-DEGデータのM値(=log2(G2/G1))の中央値を指定した色で表示
    
    #後処理(いろいろな条件を満たすものを描画している)
    obj <- param_DEG_G1                    #「G1群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="blue", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    
    obj <- param_DEG_G2                    #「G2群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="red", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    	

    6. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    上記DEGを色分けしてPNG形式ファイルとして保存するやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 1000000                      #補正後の総リード数を指定(RPMにしたい場合はここの数値はそのまま)
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #本番(正規化)
    nf <- param1/colSums(data)             #正規化係数を計算した結果をnfに格納
    data <- sweep(data, 2, nf, "*")        #正規化係数を各列に掛けた結果をdataに格納
    
    #後処理(M-A plotのための基礎情報取得)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    G1 <- apply(as.matrix(data[,data.cl==1]), 1, mean)#遺伝子ごとにG1群の平均を計算した結果をG1に格納
    G2 <- apply(as.matrix(data[,data.cl==2]), 1, mean)#遺伝子ごとにG2群の平均を計算した結果をG2に格納
    M <- log2(G2) - log2(G1)               #M-A plotのM(y軸の値)に相当するものをMに格納)
    A <- (log2(G1) + log2(G2))/2           #M-A plotのA(x軸の値)に相当するものをAに格納)
    
    #ファイルに保存(M-A plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         ylim=c(-8, 6), pch=20, cex=.1)    #M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    median(M[param_nonDEG], na.rm=TRUE)    #non-DEGデータのM値(=log2(G2/G1))の中央値(Inf and -Infを含む)を表示
    abline(h=median(M[param_nonDEG], na.rm=TRUE), col="black")#non-DEGデータのM値(=log2(G2/G1))の中央値を指定した色で表示
    obj <- param_DEG_G1                    #「G1群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="blue", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    obj <- param_DEG_G2                    #「G2群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="red", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c("DEG(G1)", "DEG(G2)", "non-DEG"), col=c("blue", "red", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    7. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    edgeRパッケージ中のcpm関数を用いるやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    colSums(data)                          #総リード数を表示
    
    #本番(正規化)
    data <- cpm(data)                      #RPM正規化を実行した結果をdataに格納
    head(data)                             #確認してるだけです
    colSums(data)                          #総リード数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #おまけとして、RPM正規化後のデータでM-A plotを描画
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    	

    8. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    6.をTCCパッケージを利用して行うやり方です。 各サンプルのリード数を100万ではなく平均リード数に揃えています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge8.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge8.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #ファイルに保存(テキストファイル)
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身をout_fで指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    obj <- c(rep(1, length(param_DEG_G1)), #DEG or non-DEGの位置情報ベクトルをobjに格納
             rep(2, length(param_DEG_G2)),                           #DEG or non-DEGの位置情報ベクトルをobjに格納 
             rep(3, length(param_nonDEG))) #DEG or non-DEGの位置情報ベクトルをobjに格納
    cols <- c("blue", "red", "black")      #色情報を指定してcolsに格納
    plot(tcc, col=cols, col.tag=obj, normalize=T)#M-A plot
    legend("topright", c("DEG(G1)", "DEG(G2)", "non-DEG"), col=c("blue", "red", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    9. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    2.をTCCパッケージを利用して行うやり方です。 各サンプルのリード数を100万ではなく平均リード数に揃えています。

    non-DEGデータのみを正規化してM-A plotを作成するやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge9.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge9.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(サブセットの抽出とTCCクラスオブジェクトの作成)
    data <- data[param_nonDEG,]            #param_nonDEGで指定した行の情報のみ抽出
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #ファイルに保存(テキストファイル)
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身をout_fで指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, normalize=T)#M-A plot
    dev.off()                              #おまじない
    	

    正規化 | 基礎 | RPKM | トランスクリプトーム

    ここでは、「マップ後 | カウント情報取得 | トランスクリプトーム | BED形式ファイルから」で得られた配列長とカウント情報を含むファイル(sample_length_count.txt)から、 転写物ごとのリード数を「配列長が1000 bp (kilobase)で総リード数が100万だったときのリード数; Reads per kilobase per million (RPKM)」に変換するやり方を示します。

    また、18,110 genes×10 samplesサンプルデータのカウントデータ(data_marioni.txt; G1群5サンプル vs. G2群5サンプル) についても、長さ情報を含む別ファイル(length_marioni.txt)を同時に読み込んでRPKM値に変換するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. sample_length_count.txtの場合:

    in_f <- "sample_length_count.txt"      #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    sum(data[,2])                          #総リード数を表示
    
    #本番(正規化)
    nf_RPM <- 1000000/sum(data[,2])        #正規化係数(RPM補正用)を計算した結果をnf_RPMに格納
    nf_RPK <- 1000/data[,1]                #正規化係数(RPK補正用)を計算した結果をnf_RPKに格納
    data[,2] <- data[,2] * nf_RPM * nf_RPK #正規化係数を各行に掛けた結果を元の位置に代入
    head(data)                             #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. カウントデータ(data_marioni.txt)と長さ情報ファイル(length_marioni.txt)を読み込んで行う場合:

    in_f1 <- "data_marioni.txt"            #入力ファイル名を指定してin_f1に格納(カウントーデータファイル)
    in_f2 <- "length_marioni.txt"          #入力ファイル名を指定してin_f2に格納(長さ情報ファイル)
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    len <- read.table(in_f2, header=TRUE, row.names=1, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    head(data)                             #確認してるだけです
    head(len)                              #確認してるだけです
    colSums(data)                          #列ごとの総リード数を表示
    
    #本番(RPM正規化)
    nf_RPM <- 1000000/colSums(data)        #正規化係数(RPM補正用)を計算した結果をnf_RPMに格納
    data <- sweep(data, 2, nf_RPM, "*")    #正規化係数を各列に掛けた結果をdataに格納
    head(data)                             #確認してるだけです
    colSums(data)                          #列ごとの総リード数を表示
    
    #本番(RPK正規化)
    nf_RPK <- 1000/len[,1]                 #正規化係数(RPK補正用)を計算した結果をnf_RPKに格納
    data <- sweep(data, 1, nf_RPK, "*")    #正規化係数を各行に掛けた結果をdataに格納
    head(data)                             #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    正規化 | 基礎 | RPKM | ゲノム

    ゲノムへのマッピング結果ファイル(BED format)をもとにして、(既知)遺伝子の発現レベルを計算してくれます。

    そのためには、マッピング結果ファイルだけでなく、どの領域にどの遺伝子があるのかという座標(Coordinates)情報を含むrefFlatという形式のファイル(アノテーション情報取得 | refFlatファイルを参照)も同時に必要ですので予め入手しておいてください。

    ここでは、以下を行って得られたBED formatファイル(SRR002323.bowtiebed; 140MB程度あります)とヒトのrefFlat.txtの二つのファイルを入力として遺伝子発現レベルを見積もるやり方を示します。

    ちなみにこのSRR002323.bowtiebedファイルは、NCBI SRAから得られたSRR002323.fastqファイルをfastq_process2.plで前処理(マッピング | 入力ファイル形式についてを参照)して得られたSRR002323.fastq2ファイルをマッピングプログラムBowtie ver. 0.12.5 (オプションは"--offrate 3 -p 8 -a --best --strata -v 2 -m 1 --sam")を用いて、 ヒトゲノム配列(chr1-22, X, Y, and M;配列取得 | リファレンス配列(マップされる側)を参照)に対して実行して得られたSAM formatファイルをBED formatに変換(イントロ | NGS | ファイル形式の変換を参照)したものです。

    以下を実行して得られるファイル(SRR002323.bowtieexp)は、5列から構成されます:

    • 1列目:「Gene symbol」
    • 2列目:「生のsequenceされた回数(raw counts)」
    • 3列目:「正規化後の発現レベル(RPKM)」
    • 4列目:「入力BED formatファイル中の行数(マップされた総リード数に相当;all reads)」
    • 5列目:「配列長(そのgene symbolを構成するエクソン領域の和集合)」

    この3列目のRPKM値がいわゆるglobal normalization後のデータということになります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. SRR002323.bowtiebedの場合:

    in_f1 <- "SRR002323.bowtiebed"         #BED formatファイルを指定してin_f1に格納
    in_f2 <- "refFlat.txt"                 #refFlat formatファイルを指定してin_f2に格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(DEGseq)                        #パッケージの読み込み
    
    #本番
    out <- getGeneExp(in_f1, refFlat=in_f2, output=out_f)#in_f1とin_f2で指定したファイルを読み込んで計算した結果をout_fで指定したファイルに出力
    
    #以下は(こんなこともできますという)おまけ
    out[,3]                                #3列目のRPKMの情報のみ抽出したいとき
    	

    正規化 | サンプル内 | EDASeq(Risso_2011)

    Risso et al., BMC Bioinformatics, 2011Fig.1を見ればわかりますが、 遺伝子のカウント数(発現量に相当;縦軸)をGC含量で横軸に展開してやるとunimodal(山が一つ、の意味)な分布になる傾向にあります。 つまり、GC含量が低すぎても高すぎてもカウント数が低くなり、中程度のときにタグカウント数が多くなる傾向にある、ということを言っているわけです。 彼らはこの傾向をYeastのRNA-seqデータ(同じgrowth conditionで得られた4つのcultures。これらはbiological replicatesとみなせるそうです。 そしてcultureごとに2 technical replicatesがある。計8列分のデータ; Y1, Y1, Y2, Y2, Y7, Y7, Y4, Y4; SRA048710)で示しています。 このデータから4 replicates vs. 4 replicatesの"null pseudo-dateset"を計choose(8,4)/2 = 35セットの「発現変動遺伝子(DEG)のないデータセット」を作成可能ですが、 GC含量が高いほどDEGとcallされる傾向にある(Fig.6)ことも示しています。 マイクロアレイではこのようなGC biasは見られませんので、library preparation時にこのようなbiasが導入されているんだろう(Benjamini and Speed, Nucleic Acids Res., 2012)と言われています。 Rissoらは、このGC biasを補正するための方法として、EDASeqパッケージ中でloess, median, FQ (full quantile)の三つの正規化法を提案し実装していますが、ここでは彼らの論文中で最もGC biasを補正できたというFQ正規化法のやり方を示します。 もちろんGC biasを補正するわけですから、入力データはいわゆる「遺伝子発現行列データ(count matrix)」以外に「遺伝子ごとのGC含量情報を含むベクトル情報」が必要です。

    ここではサンプルデータ10のyeastRNASeqパッケージから取得可能な「2 samples vs 2 samples」のyeast RNA-seq dataset (7065 genes×4列; Lee et al., 2008)、 およびEDASeqパッケージから取得可能なSGD ver. r64に基づくyeast遺伝子のGC含量情報(6717 genes)を用いて一連の解析を行います。 発現情報とGC含量情報の対応付けが若干ややこしいですが、このあたりのテクニックは結構重要です。

    尚、以下ではparam1のところで、"full"を指定することでfull quantile正規化(GCのbinごとにカウントの順位が同じものは同じカウントになるような正規化)を実現していますが、ここを以下のように変えることで他に三種類の異なる正規化を実行することができます:

    • "loess"の場合:loess正規化(non-linearな局所的な回帰を行ってくれる)
    • "median"の場合:median正規化(GCのbinごとのmedianが同じになるような正規化を行う)
    • "upper"の場合:upper quartile正規化(GCのbinごとのupper quartile (75 percentile rankのこと)が同じになるような正規化を行う)

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてある(or 出力ファイルを置きたい)ディレクトリに移動し以下をコピペ。

    1. GC含量とカウント情報を含むファイル(sample_gc_count.txt)の場合:

    in_f <- "sample_gc_count.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- "full"                       #正規化法(full quantile正規化の場合はこのまま)を指定
    param2 <- 10                           #binの数を指定(デフォルトは10。何等分して正規化するかという意味)
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理
    count <- as.matrix(data[,2])           #カウント情報部分を抽出
    rownames(count) <- rownames(data)      #行名を付加
    GC <- data.frame(GC=data[,1]/100)      #1/100してGC含量情報部分を抽出
    rownames(GC) <- rownames(data)         #行名を付加
    head(count)                            #確認してるだけです
    head(GC)                               #確認してるだけです
    data.cl <- c(rep(1, ncol(count)))      #行名を付加
    es <- newSeqExpressionSet(exprs=count, #SeqExpressionSetというクラスにデータを格納
                       featureData=GC,     #SeqExpressionSetというクラスにデータを格納
                       phenoData=data.frame(conditions=data.cl))#SeqExpressionSetというクラスにデータを格納
    es                                     #確認してるだけです
    
    #本番(正規化)
    out <- withinLaneNormalization(es, "GC", which=param1, num.bins=param2, round=FALSE)#正規化を実行した結果をoutに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), GC, exprs(out))#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. GC含量とカウント情報を含むファイル(sample_gc_count.txt)の場合:

    (どういう正規化係数がかかっているのかについて詳細な情報を出力している)

    in_f <- "sample_gc_count.txt"          #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge2_before.png"           #出力ファイル名を指定してout_f1に格納(正規化前のbias plot)
    out_f2 <- "hoge2_after.png"            #出力ファイル名を指定してout_f2に格納(正規化後のbias plot)
    out_f3 <- "hoge2.txt"                  #出力ファイル名を指定してout_f3に格納
    param1 <- "full"                       #正規化法(full quantile正規化の場合はこのまま)を指定
    param2 <- 10                           #binの数を指定(デフォルトは10。何等分して正規化するかという意味)
    param_fig <- c(500, 450)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理
    count <- as.matrix(data[,2])           #カウント情報部分を抽出
    rownames(count) <- rownames(data)      #行名を付加
    GC <- data.frame(GC=data[,1]/100)      #1/100してGC含量情報部分を抽出
    rownames(GC) <- rownames(data)         #行名を付加
    head(count)                            #確認してるだけです
    head(GC)                               #確認してるだけです
    data.cl <- c(rep(1, ncol(count)))      #行名を付加
    es <- newSeqExpressionSet(exprs=count, #SeqExpressionSetというクラスにデータを格納
                       featureData=GC,     #SeqExpressionSetというクラスにデータを格納
                       phenoData=data.frame(conditions=data.cl))#SeqExpressionSetというクラスにデータを格納
    es                                     #確認してるだけです
    
    #本番(正規化)
    out <- withinLaneNormalization(es, "GC", which=param1, num.bins=param2, round=FALSE)#正規化を実行した結果をoutに格納
    out2 <- withinLaneNormalization(es, "GC", which=param1, num.bins=param2, offset=TRUE)#正規化係数情報を取得した結果をout2に格納
    
    #ファイルに保存
    png(out_f1, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    biasPlot(es, "GC", log = T)            #正規化前のプロット(横軸:GC含量、縦軸:log(カウント))
    dev.off()                              #おまじない
    
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    biasPlot(out, "GC", log = T)           #正規化後のプロット(横軸:GC含量、縦軸:log(カウント))
    dev.off()                              #おまじない
    
    tmp <- cbind(rownames(data), data, exp(offst(out2)), exprs(out))#保存したい情報をtmpに格納
    colnames(tmp) <- c("ID", "GC_contents", "Count(before)", "Norm_factor", "Count(after")#列名を付与
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. EDASeqパッケージ中の記述と似たやり方で示した場合:

    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 2                          #G2群のサンプル数を指定
    param1 <- "full"                       #正規化法(full quantile正規化の場合は"full"のまま)を指定
    
    #必要なパッケージをロード
    library(yeastRNASeq)                   #パッケージの読み込み
    library(EDASeq)                        #パッケージの読み込み
    
    #count dataやGC含量情報(SGD ver. r64)の読み込みとラベル情報の作成
    data(geneLevelData)                    #yeastRNASeqパッケージ中で提供されているデータをロード
    data(yeastGC)                          #EDASeqパッケージ中で提供されているyeastのGC含量情報をロード
    dim(geneLevelData)                     #行数と列数を表示
    head(geneLevelData)                    #最初の数行を表示
    length(yeastGC)                        #要素数を表示
    head(yeastGC)                          #最初の数個を表示
    head(rownames(geneLevelData))          #geneLevelData行列の行名(rownames)情報の最初の数個を表示
    head(names(yeastGC))                   #yeastGCベクトルのnames属性情報の最初の数個を表示
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #カウントデータ情報(geneLevelData)とGC含量情報(yeastGC)から共通して存在するサブセットを(同じ遺伝子名の並びで)取得
    common <- intersect(rownames(geneLevelData), names(yeastGC))#二つのベクトルから積集合(intersection)を抽出した結果をcommonに格納
    length(common)                         #共通遺伝子数(正確にはcommonベクトルの要素数)を表示
    data <- as.matrix(geneLevelData[common, ])#6685個の共通遺伝子分のカウントデータ行列を行列形式でdataに格納
    GC <- data.frame(GC = yeastGC[common]) #6685個の共通遺伝子分のGC含量ベクトルをデータフレーム形式でGCに格納
    head(rownames(data))                   #data行列の行名(rownames)情報の最初の数個を表示
    head(rownames(GC))                     #GC行列の行名(rownames)情報の最初の数個を表示
    es <- newSeqExpressionSet(exprs = data,#SeqExpressionSetというクラスにデータを格納
                       featureData = GC,   #SeqExpressionSetというクラスにデータを格納
                       phenoData = data.frame(conditions = data.cl,#SeqExpressionSetというクラスにデータを格納
                                         row.names = colnames(data)))#SeqExpressionSetというクラスにデータを格納
    es                                     #esを表示
    
    #横軸:GC含量、縦軸:log(count)のプロットを作成しbiasの有無をチェック
    #(GC含量依存性があることがわかる。ちなみにbiasがない場合には水平線になる)
    biasPlot(es, "GC", log = T, ylim = c(-1, 4))#プロット。G1群("mut_1" and "mut_2"に相当)のラベルが1, G2群("wt_1" and "wt_2"に相当)のラベルが2としてプロットされている。
    
    #本番(full quantile(FQ)正規化)
    out <- withinLaneNormalization(es, "GC", which = param1)#サンプル(列 or レーン)ごとに正規化を実行した結果をoutに格納
    
    #横軸:GC含量、縦軸:log(count)のプロットを作成し正規化後の状態をチェック
    #(GC含量依存性が緩和されていることがわかる。full quantileなのになぜ水平にならないんだろう。。。)
    biasPlot(out, "GC", log = T, ylim = c(-1, 4))#プロット。G1群("mut_1" and "mut_2"に相当)のラベルが1, G2群("wt_1" and "wt_2"に相当)のラベルが2としてプロットされている。
    
    #GC bias補正前後のカウントデータとGC含量の情報をファイルに出力したい場合
    out_f1 <- "data_yeastGCbias_common_before.txt"#出力ファイル名1(補正前のカウントデータ)を指定
    out_f2 <- "data_yeastGCbias_common_after.txt"#出力ファイル名2(補正後のカウントデータ)を指定
    out_f3 <- "data_yeastGCbias_common_GCcontent.txt"#出力ファイル名3(GC含量のデータ)を指定
    tmp <- cbind(rownames(exprs(es)), exprs(es))#補正前のカウント情報exprs(es)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(exprs(out)), exprs(out))#補正前のカウント情報exprs(es)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(fData(es)), fData(es))#GC含量情報fData(es)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #GC bias補正前後のoffset(logスケールでの補正前後の差、正規化係数のlog、に相当)ファイルに出力したい場合
    out_f4 <- "data_yeastGCbias_common_offset.txt"#出力ファイル名4(offset情報)を指定
    out2 <- withinLaneNormalization(es, "GC", which = param1, offset = TRUE)#サンプル(列 or レーン)ごとに正規化を実行した結果をoutに格納
    head(offst(out2))                      #offset値(i.e., 正規化係数のlog)の最初の数行を表示
    tmp <- cbind(rownames(offst(out2)), offst(out2))#offset情報offst(out2)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f4, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #offsetと正規化前後の数値の関係を簡単に説明
    head(exprs(out))                       #a. 正規化のカウントデータの最初の数行を表示
    head(exprs(es))                        #b. 正規化のカウントデータの最初の数行を表示
    head(exp(offst(out2)))                 #c. (logスケールのなので)オリジナルスケール上でのoffset値にした状態で最初の数行を表示
    normalized <- exprs(es) * exp(offst(out2))#d. 「正規化前のカウントデータ」に「オリジナルスケールのoffset値」を掛けた結果をnormalizedに格納
    head(normalized)                       #e. 掛け算(b * c)で得た正規化後のカウントデータnormalizedの最初の数行を表示(a.と微妙に異なっていることがわかる)
    head(round(normalized))                #f. 「a.の正規化後のデータ」は、e.のnormalizedの実数の数値をround関数で最も近い整数値に丸めたものです。
    	

    4. 二つのタブ区切りテキストファイルの読み込みからやる場合:

    7,065行×4列のyeast RNA-seqデータ(data_yeast_7065.txt; 2 wild-types vs. 2 mutant strains; technical replicates) 6,717 yeast genes (SGD ver. r64)のGC含量(yeastGC_6717.txt)

    in_f1 <- "data_yeast_7065.txt"         #入力ファイル名(タグカウントファイル)を指定
    in_f2 <- "yeastGC_6717.txt"            #入力ファイル名(GC含量情報を含むファイル)を指定
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 2                          #G2群のサンプル数を指定
    param1 <- "full"                       #正規化法(full quantile正規化の場合は"full"のまま)を指定
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #count dataやGC含量情報の読み込みとラベル情報の作成
    data.tmp <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    gc.tmp <- read.table(in_f2, header=TRUE, row.names=1, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #カウントデータ情報(data.tmp)とGC含量情報(gc.tmp)から共通して存在するサブセットを(同じ遺伝子名の並びで)取得
    common <- intersect(rownames(data.tmp), rownames(gc.tmp))#二つのベクトルから積集合(intersection)を抽出した結果をcommonに格納
    length(common)                         #共通遺伝子数(正確にはcommonベクトルの要素数)を表示
    data <- as.matrix(data.tmp[common, ])  #6685個の共通遺伝子分のカウントデータ行列を行列形式でdataに格納
    GC <- data.frame(GC = gc.tmp[common, ])#6685個の共通遺伝子分のGC含量行列を行列形式でGCに格納
    rownames(GC) <- common                 #行列GCにrownamesを代入している(消えてしまっているためです)
    es <- newSeqExpressionSet(exprs = data,#SeqExpressionSetというクラスにデータを格納
                       featureData = GC,   #SeqExpressionSetというクラスにデータを格納
                       phenoData = data.frame(conditions = data.cl,#SeqExpressionSetというクラスにデータを格納
                                         row.names = colnames(data)))#SeqExpressionSetというクラスにデータを格納
    es                                     #esを表示
    
    #横軸:GC含量、縦軸:log(count)のプロットを作成しbiasの有無をチェック
    #(GC含量依存性があることがわかる。ちなみにbiasがない場合には水平線になる)
    biasPlot(es, "GC", log = T, ylim = c(-1, 4))#プロット。G1群("mut_1" and "mut_2"に相当)のラベルが1, G2群("wt_1" and "wt_2"に相当)のラベルが2としてプロットされている。
    
    #本番(full quantile(FQ)正規化)
    out <- withinLaneNormalization(es, "GC", which = param1)#サンプル(列 or レーン)ごとに正規化を実行した結果をoutに格納
    
    #横軸:GC含量、縦軸:log(count)のプロットを作成し正規化後の状態をチェック
    #(GC含量依存性が緩和されていることがわかる。full quantileなのになぜ水平にならないんだろう。。。)
    biasPlot(out, "GC", log = T, ylim = c(-1, 4))#プロット。G1群("mut_1" and "mut_2"に相当)のラベルが1, G2群("wt_1" and "wt_2"に相当)のラベルが2としてプロットされている。
    
    #GC bias補正前後のカウントデータとGC含量の情報をファイルに出力したい場合
    out_f1 <- "data_yeastGCbias_common_before.txt"#出力ファイル名1(補正前のカウントデータ)を指定
    out_f2 <- "data_yeastGCbias_common_after.txt"#出力ファイル名2(補正後のカウントデータ)を指定
    out_f3 <- "data_yeastGCbias_common_GCcontent.txt"#出力ファイル名3(GC含量のデータ)を指定
    tmp <- cbind(rownames(exprs(es)), exprs(es))#補正前のカウント情報exprs(es)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(exprs(out)), exprs(out))#補正前のカウント情報exprs(es)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(fData(es)), fData(es))#GC含量情報fData(es)の左側にその行名(つまり遺伝子名)を結合した結果をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    正規化 | サンプル内 | RNASeqBias(Zheng_2011)

    RNASeqBiasというRパッケージの正規化法の論文です。論文中では、GAM correction法と呼んでいます。 a simple generalized-additive-model based approachを用いてGC contentやgene lengthの補正を同時に行ってくれるようです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    
    	

    正規化 | サンプル間 | Upper-quartile(Bullard_2010)

    Bullardら(2010)の各種統計的解析手法の評価論文で用いられた正規化法です。 マイクロアレイデータのときは「中央値(median)を揃える」などが行われたりしましたが、 「第3四分位数(upper-quartile or 75 percentile rank)の値を揃える」という操作を行うことに相当します。 EDASeqというパッケージを用いて正規化を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "data_hypodata_3vs3_UQ.txt"   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param1 <- "upper"                      #upper-quartile正規化法("upper")を指定
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #発現データの読み込みとSeqExpressionSetオブジェクトの作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    es <- newSeqExpressionSet(exprs = as.matrix(data),#SeqExpressionSetというクラスにデータを格納
                       phenoData = data.frame(conditions = data.cl,#SeqExpressionSetというクラスにデータを格納
                                         row.names = colnames(data)))#SeqExpressionSetというクラスにデータを格納
    es                                     #esを表示
    summary(exprs(es))                     #発現データの要約統計量を表示(UQ値が揃っていないことがわかる; 3rd Qu.のところ)
    
    #UQ正規化の実行
    hoge <- betweenLaneNormalization(es, which=param1)#正規化を実行した結果をhogeに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- exprs(hoge)        #正規化後のデータを取り出してnormalized.countに格納
    summary(normalized.count)              #正規化後のデータの要約統計量を表示(UQ値が75に揃っていることがわかる; 3rd Qu.のところ)
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(16      16      16      20      19      19)
    	

    2. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "data_yeast_7065_UQ.txt"      #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群(mut群)のサンプル数を指定
    param_G2 <- 2                          #G2群(wt群)のサンプル数を指定
    param1 <- "upper"                      #upper-quartile正規化法("upper")を指定
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #発現データの読み込みとSeqExpressionSetオブジェクトの作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    es <- newSeqExpressionSet(exprs = as.matrix(data),#SeqExpressionSetというクラスにデータを格納
                       phenoData = data.frame(conditions = data.cl,#SeqExpressionSetというクラスにデータを格納
                                         row.names = colnames(data)))#SeqExpressionSetというクラスにデータを格納
    es                                     #esを表示
    summary(exprs(es))                     #発現データの要約統計量を表示(UQ値が揃っていないことがわかる; 3rd Qu.のところ; 51, 51, 42, 44)
    
    #UQ正規化の実行
    hoge <- betweenLaneNormalization(es, which=param1)#正規化を実行した結果をhogeに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- exprs(hoge)        #正規化後のデータを取り出してnormalized.countに格納
    summary(normalized.count)              #正規化後のデータの要約統計量を表示(UQ値が47に揃っていることがわかる; 3rd Qu.のところ)
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    正規化 | サンプル間 | Quantile(Bullard_2010)

    カウントデータの「サンプル(列)間でカウント数の順位が同じならばカウント数も同じ」になるような操作を行う正規化です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(limma)                         #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #本番
    hoge <- normalizeBetweenArrays(as.matrix(data))#Quantile normalizationを実行し、結果をhogeに格納
    
    #ファイルに保存
    normalized.count <- exprs(hoge)        #正規化後のデータを取り出してnormalized.countに格納
    summary(normalized.count)              #正規化後のデータの要約統計量を表示(分布が完全に揃っていることがわかる)
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    箱ひげ図(box plot)も作成しています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #発現データの読み込みとSeqExpressionSetオブジェクトの作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    es <- newSeqExpressionSet(exprs=as.matrix(data),#SeqExpressionSetというクラスにデータを格納
                  phenoData=data.frame(conditions=data.cl,#SeqExpressionSetというクラスにデータを格納
                                 ow.names=colnames(data)))#SeqExpressionSetというクラスにデータを格納
    es                                     #esを表示
    summary(exprs(es))                     #発現データの要約統計量を表示(分布が揃っていないことがわかる)
    
    #本番
    hoge <- betweenLaneNormalization(es, which="full")#正規化を実行した結果をhogeに格納
    
    #ファイルに保存
    normalized.count <- exprs(hoge)        #正規化後のデータを取り出してnormalized.countに格納
    summary(normalized.count)              #正規化後のデータの要約統計量を表示(分布が完全に揃っていることがわかる)
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(16      16      16      20      19      19)
    	

    3. サンプルデータ10の7,065 genes×4 samplesのカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(EDASeq)                        #パッケージの読み込み
    
    #発現データの読み込みとSeqExpressionSetオブジェクトの作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    es <- newSeqExpressionSet(exprs=as.matrix(data),#SeqExpressionSetというクラスにデータを格納
                  phenoData=data.frame(conditions=data.cl,#SeqExpressionSetというクラスにデータを格納
                                 ow.names=colnames(data)))#SeqExpressionSetというクラスにデータを格納
    es                                     #esを表示
    summary(exprs(es))                     #発現データの要約統計量を表示(分布が揃っていないことがわかる)
    
    #本番
    hoge <- betweenLaneNormalization(es, which="full")#正規化を実行した結果をhogeに格納
    
    #ファイルに保存
    normalized.count <- exprs(hoge)        #正規化後のデータを取り出してnormalized.countに格納
    summary(normalized.count)              #正規化後のデータの要約統計量を表示(分布が完全に揃っていることがわかる)
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    正規化 | サンプル間 | 2群間 | 複製あり | iDEGES/edgeR(Sun_2013)

    TCCパッケージ(Sun et al., BMC Bioinformatics, 2013)から利用可能なiDEGES/edgeR正規化法の実行手順を示します。 iDEGES/edgeRは、TbT正規化法(Kadota et al., Algorithms Mol. Biol., 2012) 以上の理論性能かつ100倍程度高速(デフォルトの場合)化を実現したお勧めの正規化法です。

    ここでは、iDEGES/edgeR法の実体である「TMM-(edgeR-TMM)n」パイプラインのnの値(iterationの回数)を3として実行します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    M-A plotを作成したり、non-DEGの分布についても確認しています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #本番(M-A plot)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    G1 <- apply(as.matrix(data[,data.cl==1]), 1, mean)#遺伝子ごとにG1群の平均を計算した結果をG1に格納
    G2 <- apply(as.matrix(data[,data.cl==2]), 1, mean)#遺伝子ごとにG2群の平均を計算した結果をG2に格納
    M <- log2(G2) - log2(G1)               #M-A plotのM(y軸の値)に相当するものをMに格納)
    A <- (log2(G1) + log2(G2))/2           #M-A plotのA(x軸の値)に相当するものをAに格納)
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    median(M[param_nonDEG], na.rm=TRUE)    #non-DEGデータのM値(=log2(G2/G1))の中央値(Inf and -Infを含む)を表示
    abline(h=median(M[param_nonDEG], na.rm=TRUE), col="black")#non-DEGデータのM値(=log2(G2/G1))の中央値を指定した色で表示
    
    #後処理(いろいろな条件を満たすものを描画している)
    obj <- param_DEG_G1                    #「G1群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="blue", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    
    obj <- param_DEG_G2                    #「G2群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="red", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    
    legend("topright", c("DEG(G1)", "DEG(G2)", "non-DEG"), col=c("blue", "red", "black"), pch=20)#凡例を作成している
    
    #non-DEGの分布を確認している
    summary(data[param_nonDEG,])           #正規化後のnon-DEGデータの要約統計量を表示
    apply(data[param_nonDEG,], 2, median)  #正規化後のnon-DEGデータの中央値を表示
    

    3. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    M-A plotをpng形式ファイルで保存するやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_fig <- c(400, 380)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #後処理(M-A plotのための基礎情報取得)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    G1 <- apply(as.matrix(data[,data.cl==1]), 1, mean)#遺伝子ごとにG1群の平均を計算した結果をG1に格納
    G2 <- apply(as.matrix(data[,data.cl==2]), 1, mean)#遺伝子ごとにG2群の平均を計算した結果をG2に格納
    M <- log2(G2) - log2(G1)               #M-A plotのM(y軸の値)に相当するものをMに格納)
    A <- (log2(G1) + log2(G2))/2           #M-A plotのA(x軸の値)に相当するものをAに格納)
    
    #ファイルに保存(M-A plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         ylim=c(-8, 6), pch=20, cex=.1)    #M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    median(M[param_nonDEG], na.rm=TRUE)    #non-DEGデータのM値(=log2(G2/G1))の中央値(Inf and -Infを含む)を表示
    abline(h=median(M[param_nonDEG], na.rm=TRUE), col="black")#non-DEGデータのM値(=log2(G2/G1))の中央値を指定した色で表示
    obj <- param_DEG_G1                    #「G1群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="blue", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    obj <- param_DEG_G2                    #「G2群で高発現のDEG」という条件を指定
    points(A[obj], M[obj], col="red", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c("DEG(G1)", "DEG(G2)", "non-DEG"), col=c("blue", "red", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    4. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    TCCパッケージ中のplot関数を使ってシンプルにM-A plotをpng形式ファイルで保存するやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #ファイルに保存(M-A plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    obj <- c(rep(1, length(param_DEG_G1)), #DEG or non-DEGの位置情報ベクトルをobjに格納
             rep(2, length(param_DEG_G2)),                           #DEG or non-DEGの位置情報ベクトルをobjに格納 
             rep(3, length(param_nonDEG))) #DEG or non-DEGの位置情報ベクトルをobjに格納
    cols <- c("blue", "red", "black")      #色情報を指定してcolsに格納
    plot(tcc, col=cols, col.tag=obj, ylim=c(-8, 6), median.lines=TRUE)#M-A plot
    legend("topright", c("DEG(G1)", "DEG(G2)", "non-DEG"), col=c("blue", "red", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    正規化 | サンプル間 | 2群間 | 複製あり | TbT(Kadota_2012)

    TbT法の正規化における基本戦略は「正規化時に悪さをするDEGを正規化前に除いてしまえ (DEG elimination strategy; DEGES; でげす)」です。 通常のDEG検出手順は「1.データ正規化( → 2.DEG検出)」の2ステップで完結するため、上記コンセプトを実現することができません。そこで通常の手順を二回繰返す解析パイプラインを提案しています。 つまり「1.データ正規化 → 2.DEG検出 → 3.データ正規化( → 4.DEG検出)」です。この手順で行えばStep3のデータ正規化時にStep2で検出されたDEG候補を除いたデータで正規化を行うことができるのです。 TbT法の実体は、「1.TMM法(Robinson and Oshlack, 2010) → 2.baySeq (Hardcastle and Kelly, 2010) → 3.TMM法」の解析パイプラインです。Step1で既存正規化法の中で高性能なTMM法を採用し、 Step2で(Step1で得られたTMM正規化係数と総リード数(library sizes)を掛けて得られた)effective library sizesを与えてbaySeqを実行してDEG候補を取得し、 Step3でnon-DEGsのみで再度TMM正規化を実行して得られたものがTbT正規化係数です。従って、TbT正規化法を利用する場合は、内部的に用いられた文献も引用するようにお願いします。

    以下のスクリプトを実行すると概ね数十分程度はかかります(*_*)...。これは、TbT法の内部で計算時間のかかるbaySeqを利用しているためです。 動作確認のみしたい、という人はparam_samplesizeのところで指定する数値を500とかにして実行してください。おそらく数分で結果を得られると思われます。 ここでは、TbT正規化係数の算出法とTbT正規化後のデータを得る手順などを示しています。 が、基本的に正規化だけで終わることはありませんので、ここの項目のみでは何の役にも立ちませんのであしからず。。。

    また、サンプルデータ14 (data_hypodata_1vs1.txt)の1 sample vs. 1 sampleのような「複製なし」データの正規化は実行できません(理由はstep2で用いるbaySeqが複製ありを前提としているためです)のでご注意ください。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_samplesize <- 10000              #TbT法のstep2中で行うブートストラップリサンプリング回数(10000が推奨。すごく時間がかかります。とりあえず、という人は500とか1000とかでやってみてください。)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm",#正規化を実行した結果をtccに格納
                   test.method="bayseq", samplesize=param_samplesize)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(17.70699, 17.78708, 17.60127, 18.20635, 17.41963, 17.27200)
    
    #TbT正規化のstep2で検出されたpotential DEGの結果(step3で使われないものたち)を表示
    table(tcc$private$DEGES.potentialDEG)  #0 (nonDEGに相当)が8,494個、1 (G1で高発現のDEGに相当)が1,134個、2 (G2で高発現のDEGに相当)が372個と判定されていたことがわかる
    
    #TbT正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(0.7494026 0.8421160 0.7308061 1.2549357 1.1788312 1.2439084)
    
    #このデータは「答え」がわかっているものなので、答え(DEG or non-DEG)の情報込みで正規化後のデータのM-A plotを描画
    tcc$private$simulation <- TRUE         #おまじない
    tcc$simulation$trueDEG <- c(rep(1, 1800), rep(2, 200), rep(0, 8000))#真の情報からなるベクトルをtccクラスオブジェクトに格納
    plot(tcc, median.lines=TRUE)           #log-ratio(縦軸の値)のmedian値をそれぞれの色で表示:non-DEG(黒; 0.049), G1で高発現のDEG(青; -1.942), G2で高発現のDEG(赤; 2.061)
    	

    2. サンプルデータ10の7,065 genes×4 samplesのカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    param_samplesize <- 10000              #TbT法のstep2中で行うブートストラップリサンプリング回数(10000が推奨。すごく時間がかかります。とりあえず、という人は500とか1000とかでやってみてください。)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm",#正規化を実行した結果をtccに格納
                   test.method="bayseq", samplesize=param_samplesize)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #TbT正規化のstep2で検出されたpotential DEGの結果(step3で使われないものたち)を表示
    table(tcc$private$DEGES.potentialDEG)  #0 (nonDEGに相当)が3,927個、1 (G1で高発現のDEGに相当)が1,604個、2 (G2で高発現のDEGに相当)が1,534個と判定されていたことがわかる。実に100*(1604+1534)/7065=44.416%がDEGと判定されていることになるがtechnical replicatesのデータなので妥当といえば妥当。
    
    #TbT正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(1.1456801 1.1463897 0.8556477 0.8522824)
    	

    3. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    このデータはどのサンプルでも発現していない(zero count; ゼロカウント)ものが多いので、 どこかのサンプルで0より大きいカウントのもののみからなるサブセットを抽出して2.と同様の計算を行っています。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    param_samplesize <- 10000              #TbT法のstep2中で行うブートストラップリサンプリング回数(10000が推奨。すごく時間がかかります。とりあえず、という人は500とか1000とかでやってみてください。)
    param_lowcount <- 0                    #低発現遺伝子のフィルタリングを行う際の閾値。遺伝子(行)ごとにカウントの総和を計算し、ここで指定した値よりも大きいものだけがその後の解析に用いられる
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    dim(tcc$count)                         #カウント行列の行数と列数を表示(7065行4列)
    
    #フィルタリングの実行(低発現のものを除去)
    tcc <- filterLowCountGenes(tcc, low.count = param_lowcount)#param_lowcountで指定した閾値より大きい総カウント数をもつ遺伝子のみを抽出している
    dim(tcc$count)                         #カウント行列の行数と列数を表示(6508行4列になっていることがわかる)
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm",#正規化を実行した結果をtccに格納
                   test.method="bayseq", samplesize=param_samplesize)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #TbT正規化のstep2で検出されたpotential DEGの結果(step3で使われないものたち)を表示
    table(tcc$private$DEGES.potentialDEG)  #0 (nonDEGに相当)が3,285個、1 (G1で高発現のDEGに相当)が1,656個、2 (G2で高発現のDEGに相当)が1,567個と判定されていたことがわかる
    
    #TbT正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(1.1448574 1.1433478 0.8578253 0.8539695)
    	

    正規化 | サンプル間 | 2群間 | 複製あり | TMM(Robinson_2010)

    前処理 | についてでも述べていますがNGSデータはマイクロアレイに比べてダイナミックレンジが広いという利点はあるとは思いますが、 RPM(やRPKM)で実装されているいわゆるグローバル正規化に基づく方法はごく少数の高発現遺伝子の発現レベルの影響をもろに受けます。 そしてこれらが比較するサンプル間で発現変動している場合には結論が大きく変わってしまいます。なぜなら総リード数に占める高発現の発現変動遺伝子(Differentially Expressed Genes; DEGs)のリード数の割合が大きいからです。

    RobinsonらはMarioniら(2008)の「腎臓 vs. 肝臓」データの比較において実際にこのような現象が起きていることを(housekeeping遺伝子の分布を真として)示し、 少数の高発現遺伝子の影響を排除するためにtrimmed mean of M values (TMM)という正規化法を提案しています(Robinson and Oshlack, 2010)。

    この方法はRのedgeRというパッケージ中にcalcNormFactorsという名前の関数で存在します。 また、この方法はTCCパッケージ中の関数を用いても実行可能です。 TCCパッケージから得られる(TMM)正規化係数は「正規化係数の平均が1になるようにさらに正規化したもの」であるため、両者の正規化係数に若干の違いがありますが細かいことは気にする必要はありません。

    ここでは、正規化係数の算出と正規化後のデータを得る手順などを示していますが、基本的に正規化だけで終わることはありませんので、ここの項目のみでは何の役にも立ちませんのであしからず。。。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(17.06540 17.15646 17.07707 18.90293 18.04854 17.93468)
    
    #TMM正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(0.7843388 0.8806613 0.7597886 1.2192004 1.1476476 1.2083632)
    
    #このデータは「答え」がわかっているものなので、答え(DEG or non-DEG)の情報込みで正規化後のデータのM-A plotを描画
    tcc$private$simulation <- TRUE         #おまじない
    tcc$simulation$trueDEG <- c(rep(1, 1800), rep(2, 200), rep(0, 8000))#真の情報からなるベクトルをtccクラスオブジェクトに格納
    plot(tcc, median.lines=TRUE)           #log-ratio(縦軸の値)のmedian値をそれぞれの色で表示:non-DEG(黒; 0.152), G1で高発現のDEG(青; -1.840), G2で高発現のDEG(赤; 2.164)
    	

    2. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #TMM正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(1.1391738 1.1395812 0.8596891 0.8615559)
    	

    3. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。 TCCを使わずにedgeRパッケージ内の関数を用いて2.と同じ結果を出すやり方です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #TMM正規化本番
    d <- DGEList(counts=data, group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #正規化係数を計算
    d$samples$norm.factors                 #edgeRパッケージから得られる正規化係数そのものを表示(1.1504029 1.1508142 0.8681632 0.8700484)
    mean(d$samples$norm.factors)           #正規化係数の平均が1でないことがわかる(1.009857)
    norm.factors <- d$samples$norm.factors/mean(d$samples$norm.factors)#正規化係数の平均が1になるように正規化したものがTCCパッケージで得られるものと同じです
    norm.factors                           #TCCパッケージから得られるTMM正規化係数と同じになっていることがわかる(1.1391738 1.1395812 0.8596891 0.8615559)
    
    #正規化後のデータをファイルに出力
    ef.libsizes <- colSums(data)*norm.factors#effective library sizesというのはlibrary sizesに正規化係数を掛けたものなのでそれを計算した結果をef.libsizesに格納
    normalized.count <- sweep(data, 2, mean(ef.libsizes)/ef.libsizes, "*")#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    正規化 | サンプル間 | 2群間 | 複製あり | median(Anders_2010)

    DESeqというRパッケージ中で採用されている正規化法を採用して得られた正規化後のデータを得るやり方を示します。

    DESeqは正規化係数(normalization factor)という言葉を使わずにsize factorという言葉を使っています。 これはTbTやTMM正規化係数とは異なるものなので、ここでは「DESeqの正規化係数」を得ています。 また、この方法はTCCパッケージ中の関数を用いても実行可能です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1.サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(16.83471 17.03814 16.87943 19.26712 18.12903 18.16272)
    
    #正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(0.7974195 0.8893788 0.7709404 1.1996644 1.1459043 1.1966927)
    
    #このデータは「答え」がわかっているものなので、答え(DEG or non-DEG)の情報込みで正規化後のデータのM-A plotを描画
    tcc$private$simulation <- TRUE         #おまじない
    tcc$simulation$trueDEG <- c(rep(1, 1800), rep(2, 200), rep(0, 8000))#真の情報からなるベクトルをtccクラスオブジェクトに格納
    plot(tcc, median.lines=TRUE)           #log-ratio(縦軸の値)のmedian値をそれぞれの色で表示:non-DEG(黒; 0.186), G1で高発現のDEG(青; -1.809), G2で高発現のDEG(赤; 2.196)
    	

    2. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(1.1431946 1.1408795 0.8568723 0.8590536)
    
    #正規化後のデータの列ごとの各種要約統計量を表示
    summary(normalized.count)              #normalized.countの各列(つまりサンプル)の要約統計量を表示
    	

    3. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。 TCCを使わずにDESeqパッケージ内の関数を用いて2.と同じ結果を出すやり方です。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Anders and Huberの(AH)正規化本番
    cds <- newCountDataSet(data, data.cl)  #CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算し、結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factorsです(1.1365363 1.1272941 0.8835836 0.9287529)
    norm.factors <- sizeFactors(cds)/colSums(data)#DESeqのsize factorsから「DESeqの正規化係数(これの平均が1になるとは限らない)」をnorm.factorsに格納
    norm.factors <- norm.factors/mean(norm.factors)#正規化係数の平均が1になるように正規化した「これ(norm.factors)」がTCCパッケージで得られる「DESeqの正規化係数」です
    norm.factors                           #norm.factorsの中身を表示(1.1431946 1.1408795 0.8568723 0.8590536)。TCCパッケージから得られる「DESeqの正規化係数」と同じになっていることがわかる。
    
    #正規化後のデータをファイルに出力
    sizeFactors(cds) <- sizeFactors(cds)/mean(sizeFactors(cds))#正規化後のデータ取得自体は「DESeqの正規化係数」とは無関係に取得可能であるが、TCC経由で得られるものと同じにするためにsize factorsの平均が1になるように正規化している
    normalized.count <- counts(cds, normalized=TRUE)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータの列ごとの各種要約統計量を表示
    summary(normalized.count)              #normalized.countの各列(つまりサンプル)の要約統計量を表示
    	

    4. サンプルデータ10の7,065 genes×4 samplesの「複製あり」タグカウントデータ(data_yeast_7065.txt)

    technical replicatesのデータ(mut群2サンプル vs. wt群2サンプル)です。 DESeqパッケージ内の関数を用いてDESeqパッケージ内のマニュアル通りにやった場合。 若干数値が違ってきます(ということを示したいだけです)が正規化後の値の要約統計量をどこに揃えるか程度の違いなので気にする必要はないです。 実際、ここで得られるsize factorsの平均は1.019042ですが、この定数値を正規化後のデータに掛けるとTCCで得られるデータと同じになります。

    in_f <- "data_yeast_7065.txt"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Anders and Huberの(AH)正規化本番
    cds <- newCountDataSet(data, data.cl)  #CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算し、結果をcdsに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- counts(cds, normalized=TRUE)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータの列ごとの各種要約統計量を表示
    summary(normalized.count)              #normalized.countの各列(つまりサンプル)の要約統計量を表示
    	

    正規化 | サンプル間 | 2群間 | 複製なし | iDEGES/DESeq(Sun_2013)

    iDEGES/edgeR法(Sun et al., BMC Bioinformatics, 2013)は、サンプルデータ14 (data_hypodata_1vs1.txt)の1 sample vs. 1 sampleのような「複製なし」データの正規化は実行できません。 理由はstep2で用いるexact test(iDEGES/edgeR法の場合)が複製ありを前提としているためです。 iDEGES/DESeq法(Sun et al., BMC Bioinformatics, 2013)は複製なしの二群間比較用データの正規化を「正規化時に悪さをするDEGを正規化前に除いてしまえ (DEG elimination strategy; DEGES; でげす)」というTbT法論文(Kadota et al., 2012)で提唱した戦略を DESeqパッケージ中の関数(正規化法やDEG検出法)のみで実現したDESeq-(DESeq-DESeq)n(デフォルトはn=3)からなるパイプラインです。 ここでは、iDEGES/DESeq正規化係数の算出法とiDEGES/DESeq正規化後のデータを得る手順などを示しています。 が、基本的に正規化だけで終わることはありませんので、ここの項目のみでは何の役にも立ちませんのであしからず。。。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定    
    param_G2 <- 1                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, iteration=3)#正規化を実行した結果をtccに格納(iDEGES/edgeRのときと同じコマンドだが、内部的にカウント行列の列数で自動判定してiDEGES/DESeqを採用している)
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(17.33728 18.71540)
    
    #iDEGES/DESeq正規化のstep2で検出されたpotential DEGの結果(step3で使われないものたち)を表示
    table(tcc$private$DEGES.potentialDEG)  #0 (nonDEGに相当)が9,500個、1 (G1で高発現のDEGに相当)が500個、2 (G2で高発現のDEGに相当)が0個と判定されていたことがわかるが、これはバグで実際にはG2で高発現のものもある。
    
    #iDEGES/DESeq正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(0.7707068 1.2292932)
    
    #このデータは「答え」がわかっているものなので、答え(DEG or non-DEG)の情報込みで正規化後のデータのM-A plotを描画
    tcc$private$simulation <- TRUE         #おまじない
    tcc$simulation$trueDEG <- c(rep(1, 1800), rep(2, 200), rep(0, 8000))#真の情報からなるベクトルをtccクラスオブジェクトに格納
    plot(tcc, median.lines=TRUE)           #log-ratio(縦軸の値)のmedian値をそれぞれの色で表示:non-DEG(黒; 0.110), G1で高発現のDEG(青; -1.890), G2で高発現のDEG(赤; 2.163)
    	

    正規化 | サンプル間 | 2群間 | 複製なし | TMM(Robinson_2010)

    TMM正規化法をTCCパッケージを用いて行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定    
    param_G2 <- 1                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(17.04961 19.06260)
    
    #TMM正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(0.7874063 1.2125937)
    
    #このデータは「答え」がわかっているものなので、答え(DEG or non-DEG)の情報込みで正規化後のデータのM-A plotを描画
    tcc$private$simulation <- TRUE         #おまじない
    tcc$simulation$trueDEG <- c(rep(1, 1800), rep(2, 200), rep(0, 8000))#真の情報からなるベクトルをtccクラスオブジェクトに格納
    plot(tcc, median.lines=TRUE)           #log-ratio(縦軸の値)のmedian値をそれぞれの色で表示:non-DEG(黒; 0.161), G1で高発現のDEG(青; -1.839), G2で高発現のDEG(赤; 2.213)
    	

    正規化 | サンプル間 | 2群間 | 複製なし | median(Anders_2010)

    DESeqというRパッケージ中で採用されている正規化法を採用して得られた正規化後のデータを得るやり方を示します。

    DESeqは正規化係数(normalization factor)という言葉を使わずにsize factorという言葉を使っています。 これはTbTやTMM正規化係数とは異なるものなので、ここでは「DESeqの正規化係数」を得ています。 また、この方法はTCCパッケージ中の関数を用いても実行可能です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定    
    param_G2 <- 1                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #正規化後のデータをファイルに出力
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    tmp <- cbind(rownames(normalized.count), normalized.count)#「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    
    #以下は(こんなこともできますという)おまけ
    #正規化後のデータでM-A plotを描画
    plot(tcc)                              #M-A plotを描画
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみを用いて(logスケールで)boxplot
    nonDEG <- 2001:10000                   #non-DEGの位置情報をnonDEGに格納
    boxplot(log(normalized.count[nonDEG, ]))#boxplot (non-DEGなので分布が揃っているほどよい正規化法であることを意味する。一部0のlogをとろうとしているので警告が出る、、、が気にしない)
    
    #正規化後のデータでnon-DEGsに相当する2001-10000行目のデータのみについて要約統計量を表示(サンプル間の数値が揃っているほどよい)
    summary(normalized.count[nonDEG, ])    #各列(つまりサンプル)の要約統計量を表示
    apply(normalized.count[nonDEG, ], 2, median)#各列(つまりサンプル)のmedian(中央値)を表示(16.83471 17.03814 16.87943 19.26712 18.12903 18.16272)
    
    #正規化係数を表示
    tcc$norm.factors                       #正規化係数を表示(0.7974195 0.8893788 0.7709404 1.1996644 1.1459043 1.1966927)
    
    #このデータは「答え」がわかっているものなので、答え(DEG or non-DEG)の情報込みで正規化後のデータのM-A plotを描画
    tcc$private$simulation <- TRUE         #おまじない
    tcc$simulation$trueDEG <- c(rep(1, 1800), rep(2, 200), rep(0, 8000))#真の情報からなるベクトルをtccクラスオブジェクトに格納
    plot(tcc, median.lines=TRUE)           #log-ratio(縦軸の値)のmedian値をそれぞれの色で表示:non-DEG(黒; 0.186), G1で高発現のDEG(青; -1.809), G2で高発現のDEG(赤; 2.196)
    	

    正規化 | サンプル間 | 3群間 | 複製あり | iDEGES/edgeR(Sun_2013)

    TCCパッケージ(Sun et al., BMC Bioinformatics, 2013)から利用可能なiDEGES/edgeR正規化法の実行手順を示します。

    ここでは、iDEGES/edgeR法の実体である「TMM-(edgeR-TMM)n」パイプラインのnの値(iterationの回数)を3として実行します。RPKMのような長さ補正は行っていませんのでご注意ください。ここの出力結果はRPMに相当するものです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で高発現、gene_2101〜gene_2700がG2群で高発現、gene_2701〜gene_3000がG3群で高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で高発現、gene_2101〜gene_2700がG2群で高発現、gene_2701〜gene_3000がG3群で高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGの分布について確認しています。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_nonDEG <- 3001:10000             #non-DEGの位置を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #non-DEGの分布を確認(揃っているほどよい正規化法)
    summary(data[param_nonDEG,])           #正規化後のnon-DEGデータの要約統計量を表示
    apply(data[param_nonDEG,], 2, median)  #正規化後のnon-DEGデータの中央値を表示
    	

    3. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGの分布について確認しています。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_nonDEG <- 3001:10000             #non-DEGの位置を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #non-DEGの分布を確認(揃っているほどよい正規化法)
    summary(data[param_nonDEG,])           #正規化後のnon-DEGデータの要約統計量を表示
    apply(data[param_nonDEG,], 2, median)  #正規化後のnon-DEGデータの中央値を表示
    	

    正規化 | サンプル間 | 3群間 | 複製あり | TMM(Robinson_2010)

    edgeRパッケージから利用可能なTMM正規化法(Robinson and Oshlack, Genome Biol., 2010)の実行手順を示します。RPKMのような長さ補正は行っていませんのでご注意ください。ここの出力結果はRPMに相当するものです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で高発現、gene_2101〜gene_2700がG2群で高発現、gene_2701〜gene_3000がG3群で高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で高発現、gene_2101〜gene_2700がG2群で高発現、gene_2701〜gene_3000がG3群で高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGの分布について確認しています。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_nonDEG <- 3001:10000             #non-DEGの位置を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #non-DEGの分布を確認(揃っているほどよい正規化法)
    summary(data[param_nonDEG,])           #正規化後のnon-DEGデータの要約統計量を表示
    apply(data[param_nonDEG,], 2, median)  #正規化後のnon-DEGデータの中央値を表示
    	

    3. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #「rownames情報」と「正規化後のデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGの分布について確認しています。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_nonDEG <- 3001:10000             #non-DEGの位置を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    data <- getNormalizedData(tcc)         #正規化後のデータを取り出してdataに格納
    
    #non-DEGの分布を確認(揃っているほどよい正規化法)
    summary(data[param_nonDEG,])           #正規化後のnon-DEGデータの要約統計量を表示
    apply(data[param_nonDEG,], 2, median)  #正規化後のnon-DEGデータの中央値を表示
    	

    解析 | 一般 | アラインメント(ペアワイズ;基本編1)

    グローバルアラインメント(global alignment;EMBOSSのneedleに相当)や ローカルアラインメント(local alignment; EMBOSSのwaterに相当)をやってくれます。 ここでは、3つの塩基配列(seq1, seq2, and seq3)からなるmulti-FASTA形式のファイルtest2.fastaや、通常のfasta形式の二つのファイル(seq2.fasta, seq3.fasta)の比較を例題とします。

    ちなみにこのページでは、「配列A vs. 配列B」という表記法で、配列Bに相当するほうが"subject"で配列Aに相当するほうが"pattern"です。

    また、置換行列(nucleotideSubstitutionMatrix)を指定してやる必要がありますが、ここではEMBOSSの塩基配列比較時にデフォルトで用いている「EDNAFULL」という置換行列を用います。

    local alignmentの結果は極めてEMBOSSのものと似ていますが(EMBOSSのスコア=34, Rのスコア=33)、global alignmentの結果は相当違っていることは認識しています(2010/6/8現在)。 おそらくギャップペナルティを計算する際の数式の違いによるものだろうと楽観していますが、もし間違っていればご指摘よろしくお願いします。

    BLOSUM62やPAM250などの代表的な置換行列もftp://ftp.ncbi.nih.gov/blast/matrices/から取得することができます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 「seq2.fasta vs. seq3.fasta」のlocal alignmentの場合:

    in_f1 <- "seq2.fasta"                  #読み込みたいファイル名を指定してin_f1に格納
    in_f2 <- "seq3.fasta"                  #読み込みたいファイル名を指定してin_f2に格納
    param1 <- "local"                      #アラインメントのタイプ(local, global, overlap, global-local, local-globalのいずれか)を指定
    param2 <- -10                          #gap opening panalty(ギャップ開始ペナルティ)を指定(-10がデフォルト)
    param3 <- -0.5                         #gap extension penalty(ギャップ伸長ペナルティ)を指定(-4がデフォルト)
    
    file <- "ftp://ftp.ncbi.nih.gov/blast/matrices/NUC.4.4"#置換行列ファイル(EDNAFULLのものはNUC.4.4に相当)のURLをfileに格納
    submat <- as.matrix(read.table(file, check.names=FALSE))#fileを読み込んでsubmatに格納
    library(Biostrings)                    #パッケージの読み込み
    read1 <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    read2 <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    out <- pairwiseAlignment(pattern=read1,subject=read2,type=param1,#アラインメントを実行し、結果をoutに格納
               gapOpening=param2,gapExtension=param3,substitutionMatrix=submat)#アラインメントを実行し、結果をoutに格納
    
    #以下は(こんなこともできますという)おまけ
    #out中の情報抽出あれこれ:
    out@pattern                            #in_f1で指定した配列中のアラインメントされた領域を表示
    out@subject                            #in_f2で指定した配列中のアラインメントされた領域を表示
    out@score                              #アラインメントスコアを表示
    
    #二つの配列のIDとアラインメントスコアをファイルに出力:
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    tmp <- cbind(names(read1), names(read2), out@score)#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. multi-FASTAファイル中の「seq3 vs. seq1」のglobal alignmentの場合:

    in_f <- "test2.fasta"                  #読み込みたいmulti-FASTA形式のファイル名を指定してin_fに格納
    param1 <- "global"                     #アラインメントのタイプ(local, global, overlap, global-local, local-globalのいずれか)を指定
    param2 <- 3                            #multi-FASTA入力ファイルの何番目の配列かを指定
    param3 <- 1                            #multi-FASTA入力ファイルの何番目の配列かを指定
    param4 <- -10                          #gap opening panalty(ギャップ開始ペナルティ)を指定(-10がデフォルト)
    param5 <- -0.5                         #gap extension penalty(ギャップ伸長ペナルティ)を指定(-4がデフォルト)
    
    file <- "ftp://ftp.ncbi.nih.gov/blast/matrices/NUC.4.4"#置換行列ファイル(EDNAFULLのものはNUC.4.4に相当)のURLをfileに格納
    submat <- as.matrix(read.table(file, check.names=FALSE))#fileを読み込んでsubmatに格納
    library(Biostrings)                    #パッケージの読み込み
    reads <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    out <- pairwiseAlignment(pattern=reads[param2],subject=reads[param3],type=param1,#アラインメントを実行し、結果をoutに格納
               gapOpening=param4,gapExtension=param5,substitutionMatrix=submat)#アラインメントを実行し、結果をoutに格納
    
    #以下は(こんなこともできますという)おまけ
    #二つの配列のID,アラインメントスコア,%identidyをファイルに出力:
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    tmp <- cbind(names(reads[param2]), names(reads[param3]), score(out), pid(out))#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 一般 | アラインメント(ペアワイズ;基本編2)

    アラインメント(ペアワイズ;基本編1)では、二つの配列間のアラインメントについて、その基本的な利用法とアラインメントスコアを抽出する方法について述べましたが、 他にも配列一致度など様々な情報を抽出することができます。そこで、ここでは「seq2 vs. seq3のlocal alignment結果」からどのような情報が取れるかなどを中心に手広く紹介します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    #まずはアラインメント結果outの取得
    in_f1 <- "seq2.fasta"                  #読み込みたいファイル名を指定してin_f1に格納
    in_f2 <- "seq3.fasta"                  #読み込みたいファイル名を指定してin_f2に格納
    param1 <- "local"                      #アラインメントのタイプ(local, global, overlap, global-local, local-globalのいずれか)を指定
    param2 <- -10                          #gap opening panalty(ギャップ開始ペナルティ)を指定(-10がデフォルト)
    param3 <- -0.5                         #gap extension penalty(ギャップ伸長ペナルティ)を指定(-4がデフォルト)
    
    file <- "ftp://ftp.ncbi.nih.gov/blast/matrices/NUC.4.4"#置換行列ファイル(EDNAFULLのものはNUC.4.4に相当)のURLをfileに格納
    submat <- as.matrix(read.table(file, check.names=FALSE))#fileを読み込んでsubmatに格納
    library(Biostrings)                    #パッケージの読み込み
    read1 <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    read2 <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    out <- pairwiseAlignment(pattern=read1,subject=read2,type=param1,#アラインメントを実行し、結果をoutに格納
               gapOpening=param2,gapExtension=param3,substitutionMatrix=submat)#アラインメントを実行し、結果をoutに格納
    
    #ここからがいろいろな情報を取得するやり方
    out                                    #まずはデフォルトのoutの中身を表示
    score(out)                             #アラインメントスコアを表示
    pattern(out)                           #左側の配列(この場合seq2に相当;pattern)のアラインメントされた領域を表示
    subject(out)                           #右側の配列(この場合seq2に相当;subject)のアラインメントされた領域を表示
    nchar(out)                             #アラインメントされた領域(gapを含む)の長さを表示
    nmatch(out)                            #アラインメントされた領域の一致塩基数を表示
    nmismatch(out)                         #アラインメントされた領域の不一致塩基数を表示
    nedit(out)                             #アラインメントされた領域のレーベンシュタイン距離(Levenshtein distance)を表示(nedit(out) + nmatch(out) = nchar(out)です)
    pid(out)                               #アラインメントされた領域の配列一致度(percent identity)を表示
    	

    解析 | 一般 | アラインメント(ペアワイズ;応用編)

    グローバルアラインメント(global alignment;EMBOSSのneedleに相当)や ローカルアラインメント(local alignment; EMBOSSのwaterに相当)をやってくれます。 ここでは、3つの塩基配列(seq1, seq2, and seq3)からなるmulti-FASTA形式のファイルtest2.fastaを入力として、「それ以外 vs. 特定の配列」のペアワイズアラインメントを一気にやる方法を紹介します

    ちなみにこのページでは、「配列A vs. 配列B」という表記法で、配列Bに相当するほうが"subject"で配列Aに相当するほうが"pattern"です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 特定の配列が入力multi-FASTAファイルの1番目にある場合:

    in_f <- "test2.fasta"                  #読み込みたいmulti-FASTA形式のファイル名を指定してin_fに格納
    param1 <- "local"                      #アラインメントのタイプ(local, global, overlap, global-local, local-globalのいずれか)を指定
    param2 <- 1                            #multi-FASTA入力ファイルの何番目の配列かを指定
    param3 <- -10                          #gap opening panalty(ギャップ開始ペナルティ)を指定(-10がデフォルト)
    param4 <- -0.5                         #gap extension penalty(ギャップ伸長ペナルティ)を指定(-4がデフォルト)
    
    file <- "ftp://ftp.ncbi.nih.gov/blast/matrices/NUC.4.4"#置換行列ファイル(EDNAFULLのものはNUC.4.4に相当)のURLをfileに格納
    submat <- as.matrix(read.table(file, check.names=FALSE))#fileを読み込んでsubmatに格納
    library(Biostrings)                    #パッケージの読み込み
    reads <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    out <- pairwiseAlignment(pattern=reads[-param2],subject=reads[param2],type=param1,#アラインメントを実行し、結果をoutに格納
               gapOpening=param3,gapExtension=param4,substitutionMatrix=submat)#アラインメントを実行し、結果をoutに格納
    
    #以下は(こんなこともできますという)おまけ
    #比較している配列の組み合わせ数などの情報を得たい:
    names(reads[param2])                   #param2で指定した特定の配列のIDを表示("subject"に相当)
    names(reads[-param2])                  #param2で指定した特定の配列"以外"のID(s)を表示("pattern"に相当)
    length(reads[-param2])                 #ペアワイスアラインメント(pairwise alignment)をいくつやっているのか表示
    
    #out中の情報抽出あれこれ:
    out[1]                                 #1つ目のペアワイズアラインメント結果を表示
    out[1]@score                           #1つ目のペアワイズアラインメント結果のスコアを表示
    score(out[1])                          #1つ目のペアワイズアラインメント結果のスコアを表示
    out[2]                                 #2つ目のペアワイズアラインメント結果を表示
    out[2]@score                           #2つ目のペアワイズアラインメント結果のスコアを表示
    score(out[2])                          #2つ目のペアワイズアラインメント結果のスコアを表示
    score(out)                             #ペアワイズアラインメント結果のスコアを全て表示
    
    #比較した二配列のIDとアラインメントスコアをファイルに出力:
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    tmp <- NULL
    for(i in 1:length(reads[-param2])){
        tmp <- rbind(tmp, c(names(reads[-param2])[i], names(reads[param2]), out[i]@score))#保存したい情報をtmpに格納
    }
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. 特定の配列が入力multi-FASTAファイルの3番目にある場合:

    in_f <- "test2.fasta"                  #読み込みたいmulti-FASTA形式のファイル名を指定してin_fに格納
    param1 <- "local"                      #アラインメントのタイプ(local, global, overlap, global-local, local-globalのいずれか)を指定
    param2 <- 3                            #multi-FASTA入力ファイルの何番目の配列かを指定
    param3 <- -10                          #gap opening panalty(ギャップ開始ペナルティ)を指定(-10がデフォルト)
    param4 <- -0.5                         #gap extension penalty(ギャップ伸長ペナルティ)を指定(-4がデフォルト)
    
    file <- "ftp://ftp.ncbi.nih.gov/blast/matrices/NUC.4.4"#置換行列ファイル(EDNAFULLのものはNUC.4.4に相当)のURLをfileに格納
    submat <- as.matrix(read.table(file, check.names=FALSE))#fileを読み込んでsubmatに格納
    library(Biostrings)                    #パッケージの読み込み
    reads <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    out <- pairwiseAlignment(pattern=reads[-param2],subject=reads[param2],type=param1,#アラインメントを実行し、結果をoutに格納
               gapOpening=param3,gapExtension=param4,substitutionMatrix=submat)#アラインメントを実行し、結果をoutに格納
    
    #以下は(こんなこともできますという)おまけ
    #比較している配列の組み合わせ数などの情報を得たい:
    names(reads[param2])                   #param2で指定した特定の配列のIDを表示("subject"に相当)
    names(reads[-param2])                  #param2で指定した特定の配列"以外"のID(s)を表示("pattern"に相当)
    length(reads[-param2])                 #ペアワイスアラインメント(pairwise alignment)をいくつやっているのか表示
    
    #out中の情報抽出あれこれ:
    out[1]                                 #1つ目のペアワイズアラインメント結果を表示
    out[1]@score                           #1つ目のペアワイズアラインメント結果のスコアを表示
    score(out[1])                          #1つ目のペアワイズアラインメント結果のスコアを表示
    out[2]                                 #2つ目のペアワイズアラインメント結果を表示
    out[2]@score                           #2つ目のペアワイズアラインメント結果のスコアを表示
    score(out[2])                          #2つ目のペアワイズアラインメント結果のスコアを表示
    score(out)                             #ペアワイズアラインメント結果のスコアを全て表示
    
    #比較した二配列のIDとアラインメントスコアをファイルに出力:
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    tmp <- NULL
    for(i in 1:length(reads[-param2])){
        tmp <- rbind(tmp, c(names(reads[-param2])[i], names(reads[param2]), out[i]@score))#保存したい情報をtmpに格納
    }
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 一般 | パターンマッチング

    リファレンス配列(マップされる側)から文字列検索(マップする側)を行うやり方を示します。マッピングと同じです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. DHFR.fastaを入力として、"AATGCTCAGGTA"でキーワード探索を行う場合(No hitです...):

    (Dihydrofolate reductase (DHFR)という塩基配列(NM_000791)のFASTA形式ファイルで、 Zinc Finger Nuclease (ZFN)認識配列(AATGCTCAGGTA)領域の探索の場合をイメージしています)

    in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
    param <- "AATGCTCAGGTA"                #調べたい配列パターンを指定してparamに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    out <- vmatchPattern(pattern=param, subject=fasta)#paramで指定した配列と100%マッチの領域を探索して結果をoutに格納
    out[[1]]                               #outの中身を表示(入力ファイル中には一致領域がないことがわかる)
    	

    2. DHFR.fastaを入力として、"CCTACTATGT"でキーワード探索を行う場合(存在することが分かっている断片配列):

    in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
    param <- "CCTACTATGT"                  #調べたい配列パターンを指定してparamに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    out <- vmatchPattern(pattern=param, subject=fasta)#paramで指定した配列と100%マッチの領域を探索して結果をoutに格納
    out[[1]]                               #outの中身を表示(入力ファイルの(13,22)の位置に一致領域があることを示している)
    unlist(out)                            #outの中身を表示(入力ファイルの(13,22)の位置に一致領域があることを示している)
    start(unlist(out))                     #一致領域のstart位置情報の抽出
    	

    3. DHFR.fastaを入力として、"CCTACTATGT"でキーワード探索を行った結果をファイルに保存する場合:

    in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "CCTACTATGT"                  #調べたい配列パターンを指定してparamに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- vmatchPattern(pattern=param, subject=fasta)#paramで指定した配列と100%マッチの領域を探索した結果をhogeに格納
    out <- cbind(start(unlist(hoge)), end(unlist(hoge)))#一致領域の位置情報をoutに格納
    colnames(out) <- c("start", "end")     #列名を付与
    out                                    #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
    	

    4. multi-FASTAファイルhoge4.faを入力として、"AGG"でキーワード探索を行う場合:

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param <- "AGG"                         #調べたい配列パターンを指定してparamに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- vmatchPattern(pattern=param, subject=fasta)#paramで指定した配列と100%マッチの領域を探索して結果をhogeに格納
    out <- cbind(start(unlist(hoge)), end(unlist(hoge)))#一致領域の位置情報をoutに格納
    colnames(out) <- c("start", "end")     #列名を付与
    rownames(out) <- names(unlist(hoge))   #行名を付与
    out                                    #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(out), out)       #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    5. multi-FASTAファイルhoge4.faをリファレンス配列(マップされる側)として、10リードからなるdata_seqlogo1.txtでマッピングを行う場合:

    in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(マップされる側)
    in_f2 <- "data_seqlogo1.txt"           #入力ファイル名を指定してin_f2に格納(マップする側)
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    reads <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    
    #本番
    out <- c("in_f2", "in_f1", "start", "end")#最終的に得る出力ファイルのヘッダー情報を指定してoutに格納(4列のデータを得る)
    for(i in 1:length(reads)){             #リード数分だけループを回す
        hoge <- vmatchPattern(pattern=as.character(reads[i]), subject=fasta)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索して結果をhogeに格納
        hoge1 <- cbind(start(unlist(hoge)), end(unlist(hoge)))#一致領域の(start, end)の位置情報をhoge1に格納
        hoge2 <- names(unlist(hoge))       #ヒットしたリファレンス配列中のIDをhoge2に格納
        hoge3 <- rep(as.character(reads[i]), length(hoge2))#hoge2の要素数分だけ、マップする側の配列(in_f2で指定するものに相当)のIDをhoge3に格納
        out <- rbind(out, cbind(hoge3, hoge2, hoge1))#cbind(hoge3, hoge2, hoge1)で表される欲しい情報をどんどんオブジェクトoutの下に追加している(ループが回るたびにどんどん行数が増えていっているイメージ)
    }
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	

    6. multi-FASTAファイルhoge4.faをリファレンス配列(マップされる側)として、4リードからなるdata_reads.txtでマッピングを行う場合:

    in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(マップされる側)
    in_f2 <- "data_reads.txt"              #入力ファイル名を指定してin_f2に格納(マップする側)
    out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    reads <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    
    #本番
    out <- c("in_f2", "in_f1", "start", "end")#最終的に得る出力ファイルのヘッダー情報を指定してoutに格納(4列のデータを得る)
    for(i in 1:length(reads)){             #リード数分だけループを回す
        hoge <- vmatchPattern(pattern=as.character(reads[i]), subject=fasta)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索して結果をhogeに格納
        hoge1 <- cbind(start(unlist(hoge)), end(unlist(hoge)))#一致領域の(start, end)の位置情報をhoge1に格納
        hoge2 <- names(unlist(hoge))       #ヒットしたリファレンス配列中のIDをhoge2に格納
        hoge3 <- rep(as.character(reads[i]), length(hoge2))#hoge2の要素数分だけ、マップする側の配列(in_f2で指定するものに相当)のIDをhoge3に格納
        out <- rbind(out, cbind(hoge3, hoge2, hoge1))#cbind(hoge3, hoge2, hoge1)で表される欲しい情報をどんどんオブジェクトoutの下に追加している(ループが回るたびにどんどん行数が増えていっているイメージ)
    }
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	

    7. multi-FASTAファイルhoge4.faをリファレンス配列(マップされる側)として、4リードからなるdata_reads.txtでマッピングを行う場合(hoge1オブジェクトの作成のところの記述の仕方が若干異なる):

    in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(マップされる側)
    in_f2 <- "data_reads.txt"              #入力ファイル名を指定してin_f2に格納(マップする側)
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    reads <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    
    #本番
    out <- c("in_f2", "in_f1", "start", "end")#最終的に得る出力ファイルのヘッダー情報を指定してoutに格納(4列のデータを得る)
    for(i in 1:length(fasta)){             #リファレンス配列数分だけループを回す
        hoge <- matchPDict(PDict(reads), fasta[[i]])#リファレンス配列中のi番目の配列に対してオブジェクトreads中の全配列をmatchPDict関数を用いてマッピングした結果をhogeに格納
        hoge1 <- cbind(start(unlist(hoge)), end(unlist(hoge)))#一致領域の(start, end)の位置情報をhoge1に格納
        hoge2 <- names(unlist(hoge))       #ヒットしたリードのIDをhoge2に格納
        hoge3 <- rep(names(fasta[i]), length(hoge2))#hoge2の要素数分だけ、マップされる側のリファレンス配列(in_f1で指定するものに相当)のIDをhoge3に格納
        out <- rbind(out, cbind(hoge3, hoge2, hoge1))#cbind(hoge3, hoge2, hoge1)で表される欲しい情報をどんどんオブジェクトoutの下に追加している(ループが回るたびにどんどん行数が増えていっているイメージ)
        #as.integer(coverage(hoge, 1, width(fasta[i])))
    }
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	

    解析 | 一般 | GC含量 (GC contents)

    multi-FASTA形式ファイルを読み込んで配列ごとのGC含量 (GC contents)を出力するやり方を示します。 出力ファイルは、「description」「CGの総数」「ACGTの総数」「配列長」「%GC含量」としています。 尚、%GC含量は「CGの総数/ACGTの総数」で計算しています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

    in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- CG/ACGT*100              #%GC含量を計算してGC_contentに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), CG, ACGT, width(fasta), GC_content)#保存したい情報をtmpに格納
    colnames(tmp) <- c("description", "CG", "ACGT", "Length", "%GC_contents")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    2. h_rna.fastaファイルの場合:

    in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- CG/ACGT*100              #%GC含量を計算してGC_contentに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), CG, ACGT, width(fasta), GC_content)#保存したい情報をtmpに格納
    colnames(tmp) <- c("description", "CG", "ACGT", "Length", "%GC_contents")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    3. test1.fastaファイルの場合:

    in_f <- "test1.fasta"                  #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- CG/ACGT*100              #%GC含量を計算してGC_contentに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), CG, ACGT, width(fasta), GC_content)#保存したい情報をtmpに格納
    colnames(tmp) <- c("description", "CG", "ACGT", "Length", "%GC_contents")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    4. 120MB程度のシロイヌナズナゲノムのmulti-FASTAファイル(TAIR10_chr_all.fas)の場合:

    in_f <- "TAIR10_chr_all.fas"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
    CG <- rowSums(hoge[,2:3])              #C,Gの総数を計算してCGに格納
    ACGT <- rowSums(hoge[,1:4])            #A,C,G,Tの総数を計算してACGTに格納
    GC_content <- CG/ACGT*100              #%GC含量を計算してGC_contentに格納
    
    #ファイルに保存
    tmp <- cbind(names(fasta), CG, ACGT, width(fasta), GC_content)#保存したい情報をtmpに格納
    colnames(tmp) <- c("description", "CG", "ACGT", "Length", "%GC_contents")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    seqLogoパッケージを用いてsequence logos (Schneider and Stephens, 1990)を実行するやり方を示します。 ここでは、multi-FASTAファイルを読み込んでポジションごとの出現頻度を調べる目的で利用します。上流-35 bpにTATA boxがあることを示す目的などに利用されます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 入力ファイルがmulti-FASTA形式のファイル(test1.fasta)の場合:

    in_f <- "test1.fasta"                  #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    	

    2. 入力ファイルがmulti-FASTA形式のファイル(data_seqlogo1.fasta)の場合:

    in_f <- "data_seqlogo1.fasta"          #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    	

    3. 入力ファイルがmulti-FASTA形式のファイル(data_seqlogo1.fasta)の場合:

    得られた結果をPNG形式ファイルとして保存するやり方です。

    in_f <- "data_seqlogo1.fasta"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(600, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    	

    4. 入力ファイルが塩基組成のファイル(data_seqlogo2.fasta)の場合:

    全部で4行からなり、1行目がA, 2行目がC, 3行目がG, そして4行目がTの並びになっているという前提です。 列数は塩基配列の長さ分だけ長くなってかまいません。

    in_f <- "data_seqlogo2.fasta"          #入力ファイル名を指定してin_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- read.table(in_f)               #in_fで指定したファイルの読み込み
    
    #本番(sequence logoを実行)
    out <- makePWM(hoge)                   #情報量(information content; ic)を計算している
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    	

    5. 入力ファイルがmulti-FASTA形式のファイル(TAIR10_upstream_500_20101028)の場合:

    Arabidopsisの上流500bpの配列セットです。500bpと長いため、461-500bpの範囲のみについて解析し、得られた図をファイルに保存するやり方です。 以下はダウンロードしたファイルの拡張子として、"fasta"を付加しているという前提です。

    in_f <- "TAIR10_upstream_500_20101028.fasta"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- c(461, 500)                  #抽出したい範囲の始点と終点を指定
    param2 <-  500                         #入力ファイルの配列長を指定
    param_fig <- c(700, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(配列長が500bpのもののみフィルタリング後、解析したいサブセットを抽出)
    obj <- as.logical(width(fasta) == param2)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなるもののみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    fasta <- subseq(fasta, param1[1], param1[2])#解析したい範囲を切り出してfastaに格納
    fasta                                  #確認してるだけです
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    	

    6. 入力ファイルがmulti-FASTA形式のファイル(TAIR10_upstream_1000_20101104)の場合:

    Arabidopsisの上流1000bpの配列セットです。1000bpと長いため、951-1000bpの範囲のみについて解析し、得られた図をファイルに保存するやり方です。 ファイル中の1塩基目が転写開始点からもっとも遠く離れたところで、1000塩基目が転写開始点のすぐ隣ということになります。 以下はダウンロードしたファイルの拡張子として、"fasta"を付加しているという前提です。

    in_f <- "TAIR10_upstream_1000_20101104.fasta"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- c(951, 1000)                 #抽出したい範囲の始点と終点を指定
    param2 <-  1000                        #入力ファイルの配列長を指定
    param_fig <- c(800, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(配列長が500bpのもののみフィルタリング後、解析したいサブセットを抽出)
    obj <- as.logical(width(fasta) == param2)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなるもののみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    fasta <- subseq(fasta, start=param1[1], end=param1[2])#解析したい範囲を切り出してfastaに格納
    fasta                                  #確認してるだけです
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    	

    7. 入力ファイルがmulti-FASTA形式のファイル(TAIR10_upstream_1000_20101104)の場合:

    6.と同じ結果が得られますが、転写開始点上流50bpのみを切り出して解析するというオプションにしています。

    in_f <- "TAIR10_upstream_1000_20101104.fasta"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge7.png"                   #出力ファイル名を指定してout_fに格納
    param1 <- 50                           #切り出したい上流x bpを指定
    param2 <-  1000                        #入力ファイルの配列長を指定
    param_fig <- c(800, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(配列長が500bpのもののみフィルタリング後、解析したいサブセットを抽出)
    obj <- as.logical(width(fasta) == param2)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなるもののみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    fasta <- subseq(fasta, width=param1, end=param2)#解析したい範囲を切り出してfastaに格納
    fasta                                  #確認してるだけです
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    
    #おまけ(配列長分布や配列長がparam2と異なるID情報を取得)
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    table(width(fasta))                    #配列長分布(ほとんどがparam2と同じであることがわかる)
    obj <- as.logical(width(fasta) != param2)#条件を満たすかどうかを判定した結果をobjに格納
    fasta <- fasta[obj]                    #objがTRUEとなるもののみ抽出した結果をfastaに格納
    fasta                                  #確認してるだけです
    	

    8. FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

    small RNA-seqデータ(400Mb弱、11,928,428リード)です。圧縮ファイルもreadDNAStringSet関数で通常手順で読み込めます。 原著論文(Nie et al., BMC Genomics, 2013)中の記述から GSE41841を頼りに、 SRP016842にたどりつき、 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の7を実行して得られたものが入力ファイルです。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge8.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(800, 370)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    	

    9. FASTQ形式ファイル(hoge4.fastq.gz)の場合:

    small RNA-seqデータ(280Mb弱、11,928,428リード)です。 原著論文(Nie et al., BMC Genomics, 2013)中の記述から GSE41841を頼りに、 SRP016842にたどりつき、 前処理 | トリミング | アダプター配列除去(応用) | ShortRead(Morgan_2009)の4を実行して得られたものが入力ファイルです。 アダプター配列除去後のデータなので、リードごとに配列長が異なる場合でも読み込めるShortReadパッケージ中の readFastq関数を用いています。

    in_f <- "hoge4.fastq.gz"               #入力ファイル名を指定してin_fに格納
    out_f <- "hoge9.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(787, 370)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    fasta <- sread(fastq)                  #リード塩基配列情報をfastaに格納
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    	

    10. FASTQ形式ファイル(SRR609266_sub.fastq)の場合:

    前処理 | フィルタリング | 任意のリード(サブセット)を抽出 の8.を実行して得られたsmall RNA-seqデータ(100,000リード; 約16MB)です。

    in_f <- "SRR609266_sub.fastq"          #入力ファイル名を指定してin_fに格納
    out_f <- "hoge10.png"                  #出力ファイル名を指定してout_fに格納
    param_fig <- c(800, 370)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    library(seqLogo)                       #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
    
    #本番(sequence logoを実行)
    hoge <- consensusMatrix(fasta, as.prob=T, baseOnly=T)#各ポジションの塩基組成(probability)を計算してhogeに格納。as.prob=Fにすることで塩基の出現割合ではなく出現頻度にすることもできる
    out <- makePWM(hoge[1:4,])             #hogeはACGT以外の塩基(例えばN)のprobabilityもotherという5番目の行に出力するが、makePWM関数はACGTの最初の4行分の行列データのみ許容して受け付け、情報量(information content; ic)などを計算してくれる
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    seqLogo(out)                           #塩基組成やicの情報を含むoutを入力としてsequence logoを描画。単に「plot(out)」でも同じ結果が得られる。
    dev.off()                              #おまじない
    	

    解析 | 一般 | 上流配列解析 | LDSS(Yamamoto_2007)

    Local Distribution of Short Sequence (LDSS)というのは、例えば手元に転写開始点上流1000塩基(upstream 1kb;下流3000塩基などでもよい)のFASTA形式の塩基配列セットがあったときに、 hexamer (6-mer)とかoctamer (8-mer)程度の短い塩基配列(short sequence)の分布を調べて、「Arabidopsis thalianaでは、"CTCTTC"というhexamerが転写開始点(Transcription Start Site; TSS)の近くにくるほどより多く出現する(参考文献1)」などの解析をしたい場合に行います。

    入力データとして用いる上流 or 下流X塩基の配列セットは、配列取得 | 遺伝子の転写開始点近傍配列(上流配列など)を参考にして取得してください。

    ここではArabidopsisの上流1000bpの配列セット(ファイル名:"TAIR10_upstream_1000_20101104.fasta")とラットの上流1000bpの配列セット(ファイル名:"rat_upstream_1000.fa")に対して、 pentamer (5-mer)の4^5(=1024)通りの配列一つ一つについて「上流1000bpのどこに出現したかを上流配列セット全体で出現頻度をカウントします。 この時、得られる情報はpentamerごとに「1bp目, 2bp目,...(1000 - 5 - 1)bp目の出現頻度」となるので、原著論文(参考文献1)と似た思想(全く同じというわけではありません!)でRPH, RPA, およびバックグラウンドレベルに比べて有意に局在化している短い配列(short sequences having localized distributions within upstream region)かどうかのフラグ情報を出力するやり方を示します。

    1. 1024通りのpentamer一つ一つについて、その「RPH, RPA, Local Distributionしているか否か」情報のみをファイル出力する場合:
    2. 上記に加え、全1024通りの配列のshort sequencesの実際の分布もpngファイルで出力したい場合:

    尚、この方法(LDSS)はposition-sensitive typeには有効ですが、position-insensitive typeのものはアルゴリズム的に検出不可能です(参考文献6)。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. pentamer(5-mer; 4^5=1024通り)でプロモータ構成モチーフ候補リストを作成したい場合:

    in_f <- "TAIR10_upstream_1000_20101104.fasta"#読み込みたいFASTA形式のファイル名を指定してin_fに格納
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #調べたい連続塩基数(hexamerの場合は6, octamerの場合は8など)を指定してparam1に格納
    param_fig <- c(1000, 500)              #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込みとフィルタリング
    seq <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    seq                                    #seqの中身をざっとみてるだけ(33602個あることがわかる)
    seq <- seq[width(seq) == median(width(seq))]#配列長はほとんどが一定長(この場合1000bp)だがときどき存在する異なるものを除去している
    seq                                    #seqの中身をざっとみてるだけ(33600個となり、1000bpでなかったものが2個含まれていたことがわかる)
    
    #(param1)-merの可能な全ての塩基配列を作成
    reads <- mkAllStrings(c("A", "C", "G", "T"), param1)#(param1)連続塩基の全ての可能な配列情報をreadsに格納
    
    #4^(param1)通りの塩基配列一つ一つについて上流配列セットseqに対するパターンマッチングを行う
    out <- NULL
    for(i in 1:length(reads)){             #readsの要素数分だけループを回す
        tmp <- vmatchPattern(pattern=as.character(reads[i]), subject=seq)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索し、結果をtmpに格納
        s_posi_freq <- rle(sort(start(unlist(tmp))))#一致領域のstart positionごとの頻度情報を計算してs_posi_freqに格納
        hoge <- rep(0, (width(seq[1]) - param1 + 1))#1000bp長の配列から5連続塩基で一致領域を探索しそのstart positionのみ調査する場合には、可能なstart positionは1塩基目から(1000-5+1)塩基目までしかないため、取りうる範囲を限定してpositionごとの頻度の初期値を0として作成している
        hoge2 <- replace(hoge, s_posi_freq$values, s_posi_freq$lengths)#s_posi_freqベクトルはfrequencyの値が0のポジションの情報がないため、0個のfrequencyのポジションを確実に作成して要素数を揃えている
        out <- rbind(out, hoge2)           #全部で(width(seq[1]) - param1 + 1)個分の要素(この場合は1000-5+1=996個の要素)からなるstart positionごとの頻度情報ベクトルhoge2を調べたい連続塩基ごとに作成した結果を行方向でどんどん結合している
        if(i%%10 == 0) cat(i, "/", length(reads), "finished\n")      #進行状況を表示させてるだけ 
    }
    rownames(out) <- reads                 #行列outのどの行がどの連続塩基由来のものかを割り当てている
    
    #有意な(param1)-merを探索
    threshold <- apply(out,1,median) + 5*apply(out,1,mad)#出現頻度の(median+5*MAD)の値を計算してthresholdに格納
    obj <- apply(out,1,max) > threshold    #条件を満たすかどうかを判定した結果をobjに格納(出現頻度の最大値がthresholdより大きいかどうか)
    baseline <- apply(out,1,median)        #baselineを出現頻度の中央値として与えている
    baseline[baseline < 1] <- 1            #baselineが1未満のものを1に置換している
    RPH <- apply(out,1,max) / baseline     #出現頻度の最大値をbaselineで割ったものをRPHと定義している
    RPA <- apply((out - baseline),1,sum) / apply(out,1,sum)#「(出現頻度 - baseline)の和 / 出現頻度の和」をRPAと定義している
    
    #ファイルに保存
    tmp <- cbind(rownames(out), RPH, RPA, obj)#保存したい情報をtmpに格納
    colnames(tmp) <- c("(param1)-mer", "Relative Peak Height (RPH)", "Relative Peak Area (RPA)", "Local Distribution")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    
    #既知のコアプロモーター領域の分布をチェック
    plot(out["TATAA",])                    #TATA-boxのプロット
    plot(out["GCCCA",])                    #PPDB中でGCCCA, PLACE(参考文献5)中でGGGCCというモチーフのやつ。転写開始点(右側)近傍にブロードにGCCCAという配列が濃縮して存在していることがわかる。
    	

    2. 上記を基本としつつ組合せ数分だけ原著論文(参考文献1)Fig.1と同じような図をpngファイルで生成したい場合:

    (以下をコピペすると作業ディレクトリ上に1024個のpngファイルが生成されますので注意!!)

    in_f <- "TAIR10_upstream_1000_20101104.fasta"#読み込みたいFASTA形式のファイル名を指定してin_fに格納
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #調べたい連続塩基数(hexamerの場合は6, octamerの場合は8など)を指定してparam1に格納
    param_fig <- c(1000, 500)              #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込みとフィルタリング
    seq <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    seq                                    #seqの中身をざっとみてるだけ(33602個あることがわかる)
    seq <- seq[width(seq) == median(width(seq))]#配列長はほとんどが一定長(この場合1000bp)だがときどき存在する異なるものを除去している
    seq                                    #seqの中身をざっとみてるだけ(33600個となり、1000bpでなかったものが2個含まれていたことがわかる)
    
    #(param1)-merの可能な全ての塩基配列を作成
    reads <- mkAllStrings(c("A", "C", "G", "T"), param1)#(param1)連続塩基の全ての可能な配列情報をreadsに格納
    
    #4^(param1)通りの塩基配列一つ一つについて上流配列セットseqに対するパターンマッチングを行う
    out <- NULL
    for(i in 1:length(reads)){             #readsの要素数分だけループを回す
        tmp <- vmatchPattern(pattern=as.character(reads[i]), subject=seq)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索し、結果をtmpに格納
        s_posi_freq <- rle(sort(start(unlist(tmp))))#一致領域のstart positionごとの頻度情報を計算してs_posi_freqに格納
        hoge <- rep(0, (width(seq[1]) - param1 + 1))#1000bp長の配列から5連続塩基で一致領域を探索しそのstart positionのみ調査する場合には、可能なstart positionは1塩基目から(1000-5+1)塩基目までしかないため、取りうる範囲を限定してpositionごとの頻度の初期値を0として作成している
        hoge2 <- replace(hoge, s_posi_freq$values, s_posi_freq$lengths)#s_posi_freqベクトルはfrequencyの値が0のポジションの情報がないため、0個のfrequencyのポジションを確実に作成して要素数を揃えている
        out <- rbind(out, hoge2)           #全部で(width(seq[1]) - param1 + 1)個分の要素(この場合は1000-5+1=996個の要素)からなるstart positionごとの頻度情報ベクトルhoge2を調べたい連続塩基ごとに作成した結果を行方向でどんどん結合している
        if(i%%10 == 0) cat(i, "/", length(reads), "finished\n")      #進行状況を表示させてるだけ 
    }
    rownames(out) <- reads                 #行列outのどの行がどの連続塩基由来のものかを割り当てている
    
    #有意な(param1)-merを探索
    threshold <- apply(out,1,median) + 5*apply(out,1,mad)#出現頻度の(median+5*MAD)の値を計算してthresholdに格納
    obj <- apply(out,1,max) > threshold    #条件を満たすかどうかを判定した結果をobjに格納(出現頻度の最大値がthresholdより大きいかどうか)
    baseline <- apply(out,1,median)        #baselineを出現頻度の中央値として与えている
    baseline[baseline < 1] <- 1            #baselineが1未満のものを1に置換している
    PH <- apply(out,1,max)                 #出現頻度の最大値をPHに格納
    RPH <- PH / baseline                   #出現頻度の最大値をbaselineで割ったものをRPHと定義している
    RPA <- apply((out - baseline),1,sum) / apply(out,1,sum)#「(出現頻度 - baseline)の和 / 出現頻度の和」をRPAと定義している
    
    #ファイルに保存
    tmp <- cbind(rownames(out), RPH, RPA, obj)#保存したい情報をtmpに格納
    colnames(tmp) <- c("(param1)-mer", "Relative Peak Height (RPH)", "Relative Peak Area (RPA)", "Local Distribution")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    
    #pngファイルを一気に生成
    for(i in 1:length(reads)){
        out_f <- paste("result_", rownames(out)[i], ".png", sep="")#ファイル名を作成
        png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
        plot(out[i,], ylim=c(0, max(c(PH[i], threshold[i]))),#行列outのi番目の行の数値をプロットしている
            ylab="Occurence", xlab="Position", type="p", pch=20, cex=0.8)#行列outのi番目の行の数値をプロットしている
        abline(h=baseline[i], col="red")   #baseline (出現頻度の中央値)を赤線で追加している
        text(0, baseline[i], "baseline", col="red", adj=c(0,0))#baselineを引いたところに"baseline"という文字を追加している
        abline(h=threshold[i], col="red")  #有意かどうかを判定するために採用した閾値(threshold = baseline+5*MAD)の値も赤線で追加している
        text(0, threshold[i], "threshold(= baseline + 5*MAD)", col="red", adj=c(0,0))#閾値を引いたところに"threshold"という文字を追加している
        dev.off()
    }
    	

    3. 2と同じだが入力ファイルがラット上流配列セット(ファイル名:"rat_upstream_1000.fa")の場合:

    in_f <- "rat_upstream_1000.fa"         #読み込みたいFASTA形式のファイル名を指定してin_fに格納
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #調べたい連続塩基数(hexamerの場合は6, octamerの場合は8など)を指定してparam1に格納
    param_fig <- c(1000, 500)              #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込みとフィルタリング
    seq <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    seq                                    #seqの中身をざっとみてるだけ(33602個あることがわかる)
    seq <- seq[width(seq) == median(width(seq))]#配列長はほとんどが一定長(この場合1000bp)だがときどき存在する異なるものを除去している
    seq                                    #seqの中身をざっとみてるだけ(33600個となり、1000bpでなかったものが2個含まれていたことがわかる)
    
    #(param1)-merの可能な全ての塩基配列を作成
    reads <- mkAllStrings(c("A", "C", "G", "T"), param1)#(param1)連続塩基の全ての可能な配列情報をreadsに格納
    
    #4^(param1)通りの塩基配列一つ一つについて上流配列セットseqに対するパターンマッチングを行う
    out <- NULL
    for(i in 1:length(reads)){             #readsの要素数分だけループを回す
        tmp <- vmatchPattern(pattern=as.character(reads[i]), subject=seq)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索し、結果をtmpに格納
        s_posi_freq <- rle(sort(start(unlist(tmp))))#一致領域のstart positionごとの頻度情報を計算してs_posi_freqに格納
        hoge <- rep(0, (width(seq[1]) - param1 + 1))#1000bp長の配列から5連続塩基で一致領域を探索しそのstart positionのみ調査する場合には、可能なstart positionは1塩基目から(1000-5+1)塩基目までしかないため、取りうる範囲を限定してpositionごとの頻度の初期値を0として作成している
        hoge2 <- replace(hoge, s_posi_freq$values, s_posi_freq$lengths)#s_posi_freqベクトルはfrequencyの値が0のポジションの情報がないため、0個のfrequencyのポジションを確実に作成して要素数を揃えている
        out <- rbind(out, hoge2)           #全部で(width(seq[1]) - param1 + 1)個分の要素(この場合は1000-5+1=996個の要素)からなるstart positionごとの頻度情報ベクトルhoge2を調べたい連続塩基ごとに作成した結果を行方向でどんどん結合している
        if(i%%10 == 0) cat(i, "/", length(reads), "finished\n")      #進行状況を表示させてるだけ 
    }
    rownames(out) <- reads                 #行列outのどの行がどの連続塩基由来のものかを割り当てている
    
    #有意な(param1)-merを探索
    threshold <- apply(out,1,median) + 5*apply(out,1,mad)#出現頻度の(median+5*MAD)の値を計算してthresholdに格納
    obj <- apply(out,1,max) > threshold    #条件を満たすかどうかを判定した結果をobjに格納(出現頻度の最大値がthresholdより大きいかどうか)
    baseline <- apply(out,1,median)        #baselineを出現頻度の中央値として与えている
    baseline[baseline < 1] <- 1            #baselineが1未満のものを1に置換している
    PH <- apply(out,1,max)                 #出現頻度の最大値をPHに格納
    RPH <- PH / baseline                   #出現頻度の最大値をbaselineで割ったものをRPHと定義している
    RPA <- apply((out - baseline),1,sum) / apply(out,1,sum)#「(出現頻度 - baseline)の和 / 出現頻度の和」をRPAと定義している
    
    #ファイルに保存
    tmp <- cbind(rownames(out), RPH, RPA, obj)#保存したい情報をtmpに格納
    colnames(tmp) <- c("(param1)-mer", "Relative Peak Height (RPH)", "Relative Peak Area (RPA)", "Local Distribution")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    
    #pngファイルを一気に生成
    for(i in 1:length(reads)){
        out_f <- paste("result_", rownames(out)[i], ".png", sep="")#ファイル名を作成している
        png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
        plot(out[i,], ylim=c(0, max(c(PH[i], threshold[i]))),#行列outのi番目の行の数値をプロットしている
            ylab="Occurence", xlab="Position", type="p", pch=20, cex=0.8)#行列outのi番目の行の数値をプロットしている
        abline(h=baseline[i], col="red")   #baseline (出現頻度の中央値)を赤線で追加している
        text(0, baseline[i], "baseline", col="red", adj=c(0,0))#baselineを引いたところに"baseline"という文字を追加している
        abline(h=threshold[i], col="red")  #有意かどうかを判定するために採用した閾値(threshold = baseline+5*MAD)の値も赤線で追加している
        text(0, threshold[i], "threshold(= baseline + 5*MAD)", col="red", adj=c(0,0))#閾値を引いたところに"threshold"という文字を追加している
        dev.off()
    }
    	

    解析 | 一般 | 上流配列解析 | Relative Appearance Ratio(Yamamoto_2011)

    手元に(Rで)マイクロアレイデータ解析サンプルマイクロアレイデータ21の「発現変動遺伝子(DEG)の転写開始点のFASTA形式の上流配列セット(ファイル名:"seq_BAT_DEG.fa")」と「それ以外(nonDEG)の上流配列セット(ファイル名:"seq_BAT_nonDEG.fa")」 の二つのファイルがあったときに、任意のk-mer(4k通り;k=6のときは4096通り)に対して、どのk-merが発現変動と関連しているかをFisher's Exact Testを用いてp値を計算する手順を示します。 尚、ここで用いている二つのファイルはいずれも「ACGTのみからなり、配列長は1000bp」です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. pentamer(5-mer; 45=1024通り)で各k-merごとにp値とFDR値をリストアップする場合:

    in_f1 <- "seq_BAT_DEG.fa"              #読み込みたいFASTA形式のDEGのファイル名を指定してin_f1に格納
    in_f2 <- "seq_BAT_nonDEG.fa"           #読み込みたいFASTA形式のnonDEGのファイル名を指定してin_f2に格納
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    param1 <- 5                            #調べたい連続塩基数(hexamerの場合は6, octamerの場合は8など)を指定してparam1に格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    seq_DEG <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    seq_DEG                                #オブジェクトの中身をざっとみてるだけ(563 sequencesであることがわかる)
    seq_nonDEG <- readDNAStringSet(in_f2, format="fasta")#in_f2で指定したファイルの読み込み
    seq_nonDEG                             #オブジェクトの中身をざっとみてるだけ(8898 sequencesであることがわかる)
    
    #(param1)-merの可能な全ての塩基配列を作成
    reads <- mkAllStrings(c("A", "C", "G", "T"), param1)#(param1)連続塩基の全ての可能な配列情報をreadsに格納
    
    #4^(param1)通りの塩基配列一つ一つについて上流配列セットに対するパターンマッチングを行う
    out <- NULL
    for(i in 1:length(reads)){             #readsの要素数分だけループを回す
        tmp <- vmatchPattern(pattern=as.character(reads[i]), subject=seq_DEG)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索し、結果をtmpに格納
        out_DEG <- length(start(unlist(tmp)))#一致領域のstart positionの情報を抽出してout_DEGに格納
        tmp <- vmatchPattern(pattern=as.character(reads[i]), subject=seq_nonDEG)#オブジェクトreads中の各塩基配列と100%マッチの領域を探索し、結果をtmpに格納
        out_nonDEG <- length(start(unlist(tmp)))#一致領域のstart positionの情報を抽出してout_nonDEGに格納
        x <- c(out_nonDEG, length(seq_nonDEG), out_DEG, length(seq_DEG))#Fisher's Exact Testを行うための2×2分割表の基礎情報を作成してxに格納
        data <- matrix(x, ncol=2, byrow=T) #ベクトルxを行列形式に変換した結果をdataに格納
        pvalue <- fisher.test(data)$p.value#Fisher's Exact Testを行って得られたp値をpvalueに格納
        out <- rbind(out, c(x, pvalue))    #必要な情報を行方向で結合することでまとめている
        if(i%%10 == 0) cat(i, "/", length(reads), "finished\n")      #進行状況を表示させてるだけ 
    }
    rownames(out) <- reads                 #行列outのどの行がどの連続塩基由来のものかを割り当てている(行名を与えている)
    p.value <- out[,ncol(out)]             #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    
    #ファイルに保存
    tmp <- cbind(rownames(out), out, q.value)  #保存したい情報をtmpに格納
    colnames(tmp) <- c("k-mer", "Occurence in nonDEG", "# of nonDEG sequences", "Occurence in DEG", "# of DEG sequences", "p.value", "q.value")#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
    	

    解析 | 基礎 | k-mer | ゲノムサイズ推定(基礎) | qrqc

    qrqcパッケージを用いてNGSデータのk-mer解析を行うやり方を示します。 ゲノムサイズ推定を行うための基本的な考え方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ32のFASTA形式ファイル(sample32_ngs.fasta)の場合:

    4X coverageであることが分かっているデータです。 理由は、50塩基長のリファレンス配列から20塩基長のリードを10個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は20塩基以下ですので、条件を満たす19を指定しています。

    in_f <- "sample32_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 19                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""))#ヒストグラムを描画
    dev.off()                              #おまじない
    	

    2. サンプルデータ32のFASTA形式ファイル(sample32_ngs.fasta)の場合:

    4X coverageであることが分かっているデータです。 理由は、50塩基長のリファレンス配列から20塩基長のリードを10個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は20塩基以下ですので、条件を満たす11を指定しています。

    in_f <- "sample32_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 11                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""))#ヒストグラムを描画
    dev.off()                              #おまじない
    	

    3. サンプルデータ32のFASTA形式ファイル(sample32_ngs.fasta)の場合:

    4X coverageであることが分かっているデータです。 理由は、50塩基長のリファレンス配列から20塩基長のリードを10個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は20塩基以下ですので、条件を満たす5を指定しています。

    in_f <- "sample32_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 5                           #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""))#ヒストグラムを描画
    dev.off()                              #おまじない
    	

    4. サンプルデータ33のFASTA形式ファイル(sample33_ngs.fasta)の場合:

    4X coverageであることが分かっているデータです。 理由は、1,000塩基長のリファレンス配列から20塩基長のリードを200個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は20塩基以下ですので、条件を満たす5を指定しています。

    in_f <- "sample33_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 5                           #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""))#ヒストグラムを描画
    dev.off()                              #おまじない
    	

    5. サンプルデータ34のFASTA形式ファイル(sample34_ngs.fasta)の場合:

    10X coverageであることが分かっているデータです。 理由は、1,000塩基長のリファレンス配列から20塩基長のリードを500個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は20塩基以下ですので、条件を満たす5を指定しています。

    in_f <- "sample34_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 5                           #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""))#ヒストグラムを描画
    dev.off()                              #おまじない
    	

    6. サンプルデータ35のFASTA形式ファイル(sample35_ngs.fasta)の場合:

    10X coverageであることが分かっているデータです。 理由は、10,000塩基長のリファレンス配列から40塩基長のリードを2,500個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は40塩基以下ですので、条件を満たす15を指定しています。

    in_f <- "sample35_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 15                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""))#ヒストグラムを描画
    dev.off()                              #おまじない
    	

    7. サンプルデータ36のFASTA形式ファイル(sample36_ngs.fasta)の場合:

    40X coverageであることが分かっているデータです。 理由は、10,000塩基長のリファレンス配列から80塩基長のリードを5,000個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は80塩基以下ですので、条件を満たす21を指定しています。 hist関数実行時に分割数を指定すべくbreaksオプションも変更しています。

    in_f <- "sample36_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge7.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 21                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""),#ヒストグラムを描画
         breaks=max(kmer))                 #ヒストグラムを描画
    dev.off()                              #おまじない
    	

    8. サンプルデータ37のFASTA形式ファイル(sample37_ngs.fasta)の場合:

    100X coverageであることが分かっているデータです。 理由は、10,000塩基長のリファレンス配列から100塩基長のリードを10,000個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は100塩基以下ですので、条件を満たす21を指定しています。 hist関数実行時に分割数を指定すべくbreaksオプションも変更しています。

    in_f <- "sample37_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge8.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 21                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""),#ヒストグラムを描画
         breaks=max(kmer))                 #ヒストグラムを描画
    dev.off()                              #おまじない
    	

    9. サンプルデータ37のFASTA形式ファイル(sample37_ngs.fasta)の場合:

    100X coverageであることが分かっているデータです。 理由は、10,000塩基長のリファレンス配列から100塩基長のリードを10,000個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は100塩基以下ですので、条件を満たす31を指定しています。 hist関数実行時に分割数を指定すべくbreaksオプションも変更しています。

    in_f <- "sample37_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge9.png"                   #出力ファイル名を指定してout_fに格納
    param_k <- 31                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""),#ヒストグラムを描画
         breaks=max(kmer))                 #ヒストグラムを描画
    dev.off()                              #おまじない
    	

    10. サンプルデータ37のFASTA形式ファイル(sample37_ngs.fasta)の場合:

    100X coverageであることが分かっているデータです。 理由は、10,000塩基長のリファレンス配列から100塩基長のリードを10,000個ランダム抽出したものだからです。 k-merのkの値は、リード配列長以下に設定します。この場合は100塩基以下ですので、条件を満たす11を指定しています。 hist関数実行時に分割数を指定すべくbreaksオプションも変更しています。

    in_f <- "sample37_ngs.fasta"           #入力ファイル名を指定してin_fに格納
    out_f <- "hoge10.png"                  #出力ファイル名を指定してout_fに格納
    param_k <- 11                          #k-merのkの値を指定
    param_fig <- c(400, 380)               #ヒストグラム描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(qrqc)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    hoge <- readSeqFile(in_f, type="fasta", kmer=T, k=param_k)#in_fで指定したファイルの読み込み
    hoge                                   #確認してるだけです
    
    #本番(k-mer出現頻度解析)
    kmer <- table(hoge@kmer$kmer)          #k-merごとの出現頻度を抽出
    kmer                                   #確認してるだけです
    length(kmer)                           #k-merの種類数を表示(sequence errorがない場合にはゲノムサイズに相当)
    table(kmer)                            #k-merの出現数ごとの頻度を表示(k-merの種類を問わない)
    
    #ファイルに保存(ヒストグラム)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hist(kmer, ylab="Frequency(number of k-mers)",#ヒストグラムを描画
         xlab=paste("Number of occurences at k=", param_k, sep=""),#ヒストグラムを描画
         breaks=max(kmer))                 #ヒストグラムを描画
    dev.off()                              #おまじない
    	

    解析 | 基礎 | 平均-分散プロット(Technical replicates)

    MarioniらはTechnical replicatesのデータがポアソン分布(Poisson distribution)に従うことを報告しています(Marioni et al., Genome Res., 2008)。 つまり「各遺伝子のtechnical replicatesデータの平均と分散が全体として同じ」だと言っているわけです。ここでは、横軸:平均、縦軸:分散としたプロットを描画してその傾向を眺めます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の場合:

    総リード数補正を行って、群ごとにプロットしています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge1_G1.txt"               #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge1_G1.png"               #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge1_G2.txt"               #出力ファイル名を指定してout_f3に格納
    out_f4 <- "hoge1_G2.png"               #出力ファイル名を指定してout_f4に格納
    out_f5 <- "hoge1_all.png"              #出力ファイル名を指定してout_f5に格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定    
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #総リード数を表示
    
    #前処理(データ正規化; 群ごとに総リード数の平均値を揃えている)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    hoge <- data[,data.cl==1]              #G1群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G1群の正規化係数を計算した結果をnfに格納
    G1 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG1に格納
    colSums(G1)                            #総リード数を表示
    hoge <- data[,data.cl==2]              #G2群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G2群の正規化係数を計算した結果をnfに格納
    G2 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG2に格納
    colSums(G2)                            #総リード数を表示
    
    #本番(Mean-Variance plotなど; G1群)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="blue")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G1", col="blue", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plotなど; G2群)
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f4, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G2", col="red", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plot; G1 and G2両方)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    png(out_f5, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="blue")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", c("G1", "G2"), col=c("blue", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    2. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の場合:

    総リード数補正を行って、2つの群をまとめてプロットしています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge2.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge2.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定    
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #総リード数を表示
    
    #前処理(総リード数補正)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    nf <- mean(colSums(data))/colSums(data)#G1群の正規化係数を計算した結果をnfに格納
    normalized.count <- sweep(data, 2, nf, "*")#正規化係数を各列に掛けた結果をnormalized.countに格納
    colSums(normalized.count)              #総リード数を表示
    
    #ファイルに保存(テキストファイル)
    hoge <- normalized.count               #hogeとして取り扱う
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(Mean-Variance plot)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="black")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G1+G2", col="black", pch=20)#凡例を作成している
    
    #後処理(回帰分析など)
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    	

    3. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の場合:

    総リード数補正を行って、2つの群をまとめてプロットしています。また、G2群のみのプロットも重ね書きしています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定    
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #総リード数を表示
    
    #前処理(総リード数補正)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    nf <- mean(colSums(data))/colSums(data)#正規化係数を計算した結果をnfに格納
    normalized.count <- sweep(data, 2, nf, "*")#正規化係数を各列に掛けた結果をnormalized.countに格納
    colSums(normalized.count)              #総リード数を表示
    
    #ファイルに保存(Mean-Variance plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hoge <- normalized.count               #hogeとして取り扱う
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="black")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    MEAN <- apply(hoge[,data.cl==2], 1, mean)#各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge[,data.cl==2], 1, var)#各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("bottomright", c("G1+G2", "G2"), col=c("black", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    4. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の場合:

    TCCパッケージ中のiDEGES/edgeR正規化後のデータを用いて、2つの群をまとめてプロットしています。また、G2群のみのプロットも重ね書きしています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    
    #ファイルに保存(Mean-Variance plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hoge <- normalized.count               #hogeとして取り扱う
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="black")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    MEAN <- apply(hoge[,data.cl==2], 1, mean)#各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge[,data.cl==2], 1, var)#各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("bottomright", c("G1+G2", "G2"), col=c("black", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    5. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の場合:

    TCCパッケージ中のiDEGES/edgeR正規化後のデータを用いて、2つの群をまとめてプロットしています。

    iDEGES/edgeR-edgeR解析パイプライン適用後のFDR < 0.05を満たす遺伝子をマゼンタで色づけしています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    obj <- as.logical(tcc$stat$q.value < param_FDR)#条件を満たすかどうかを判定した結果をobjに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(Mean-Variance plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hoge <- normalized.count               #hogeとして取り扱う
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+06), ylim=c(1e-02, 1e+06), col="black")#プロット
    points(MEAN[obj], VARIANCE[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("bottomright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    解析 | 基礎 | 平均-分散プロット(Biological replicates)

    Biological replicatesのデータは負の二項分布(negative binomial distribution; 分散 > 平均)に従うことを検証します。 つまり、ポアソン分布(分散 = 平均)よりももっとばらつきが大きいということを言っています。 ここでは、横軸:平均、縦軸:分散としたプロットを描画してその傾向を眺めます。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge1_G1.txt"               #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge1_G1.png"               #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge1_G2.txt"               #出力ファイル名を指定してout_f3に格納
    out_f4 <- "hoge1_G2.png"               #出力ファイル名を指定してout_f4に格納
    out_f5 <- "hoge1_all.png"              #出力ファイル名を指定してout_f5に格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #総リード数を表示
    
    #前処理(データ正規化; 群ごとに総リード数の平均値を揃えている)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    hoge <- data[,data.cl==1]              #G1群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G1群の正規化係数を計算した結果をnfに格納
    G1 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG1に格納
    colSums(G1)                            #総リード数を表示
    hoge <- data[,data.cl==2]              #G2群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G2群の正規化係数を計算した結果をnfに格納
    G2 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG2に格納
    colSums(G2)                            #総リード数を表示
    
    #本番(Mean-Variance plotなど; G1群)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G1", col="blue", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plotなど; G2群)
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f4, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G2", col="red", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plot; G1 and G2両方)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    png(out_f5, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", c("G1", "G2"), col=c("blue", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGデータのみで総リード数を揃えてから計6サンプルを一緒にしてプロットしています。これが検定のイメージです。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge2.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge2.png"                  #出力ファイル名を指定してout_f2に格納
    param_DEG_G1 <- 1:1800                 #G1群で高発現のDEGの位置を指定
    param_DEG_G2 <- 1801:2000              #G2群で高発現のDEGの位置を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #全データの総リード数を表示
    colSums(data[param_nonDEG,])           #non-DEGのみの総リード数を表示
    
    #前処理(データ正規化; non-DEGの総リード数の平均値を揃えている)
    hoge <- data[param_nonDEG,]            #non-DEGのみのデータを抽出した結果をhogeに格納
    nf <- mean(colSums(hoge))/colSums(hoge)#正規化係数を計算した結果をnfに格納
    normalized <- sweep(data, 2, nf, "*")  #正規化係数を各列に掛けた結果をnormalizedに格納
    colSums(normalized[param_nonDEG,])     #正規化後のデータでnon-DEGのみの総リード数を表示
    
    #本番(平均-分散情報などを保存)
    hoge <- normalized                     #正規化後のデータをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data, hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #本番(平均-分散プロット)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    obj <- param_nonDEG                    #non-DEGの位置情報をobjに格納
    plot(MEAN[obj], VARIANCE[obj], log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="black")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    obj <- param_DEG_G1                    #G1群で高発現のDEGの位置情報をobjに格納
    plot(MEAN[obj], VARIANCE[obj], log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    obj <- param_DEG_G2                    #G2群で高発現のDEGの位置情報をobjに格納
    plot(MEAN[obj], VARIANCE[obj], log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red",#プロット
         xlab="MEAN", ylab="VARIANCE")     #プロット
    
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", c("DEG(G1)", "DEG(G2)", "non-DEG"), col=c("blue", "red", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    3. NBPSeqパッケージ中の26,222 genes×6 samplesの場合:

    3 Mockサンプル vs. 3 treatedサンプルのデータです。

    もう少し具体的には、バクテリアを感染させて防御応答をみたデータで、詳細はCumbie et al., PLoS One, 2011に書かれています。

    out_f1 <- "hoge3_G1.txt"               #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge3_G1.png"               #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge3_G2.txt"               #出力ファイル名を指定してout_f3に格納
    out_f4 <- "hoge3_G2.png"               #出力ファイル名を指定してout_f4に格納
    out_f5 <- "hoge3_all.png"              #出力ファイル名を指定してout_f5に格納
    param_G1 <- 3                          #G1群(mock群)のサンプル数を指定    
    param_G2 <- 3                          #G2群(hrcc群)のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(NBPSeq)                        #パッケージの読み込み
    
    #(パッケージ中に存在する)発現データのロード
    data(arab)                             #このパッケージ中にあるarabというオブジェクト名のデータを取り出している
    data <- arab                           #データはarabというオブジェクト名で取り扱えるが、dataという名前で取り扱うことにする
    dim(data)                              #行数と列数を表示
    head(data)                             #最初の数行分を表示(最初の3列がMockサンプルであることが分かる)
    colSums(data)                          #総リード数を表示
    
    #前処理(データ正規化; 群ごとに総リード数の平均値を揃えている)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    hoge <- data[,data.cl==1]              #G1群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G1群の正規化係数を計算した結果をnfに格納
    G1 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG1に格納
    colSums(G1)                            #総リード数を表示
    hoge <- data[,data.cl==2]              #G2群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G2群の正規化係数を計算した結果をnfに格納
    G2 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG2に格納
    colSums(G2)                            #総リード数を表示
    
    #本番(Mean-Variance plotなど; G1群)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G1", col="blue", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plotなど; G2群)
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f4, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G2", col="red", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plot; G1 and G2両方)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    png(out_f5, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", c("G1", "G2"), col=c("blue", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    4. サンプルデータ8の26,221 genes×6 samplesのリアルデータ(data_arab.txt; mock 3サンプル vs. hrcc 3サンプル)の場合:

    3.と基本的に同じデータですが、ファイルの読み込みから行う一般的なやり方です。

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge4_G1.txt"               #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge4_G1.png"               #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge4_G2.txt"               #出力ファイル名を指定してout_f3に格納
    out_f4 <- "hoge4_G2.png"               #出力ファイル名を指定してout_f4に格納
    out_f5 <- "hoge4_all.png"              #出力ファイル名を指定してout_f5に格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #総リード数を表示
    
    #前処理(データ正規化; 群ごとに総リード数の平均値を揃えている)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    hoge <- data[,data.cl==1]              #G1群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G1群の正規化係数を計算した結果をnfに格納
    G1 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG1に格納
    colSums(G1)                            #総リード数を表示
    hoge <- data[,data.cl==2]              #G2群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G2群の正規化係数を計算した結果をnfに格納
    G2 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG2に格納
    colSums(G2)                            #総リード数を表示
    
    #本番(Mean-Variance plotなど; G1群)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G1", col="blue", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plotなど; G2群)
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    tmp <- cbind(rownames(data), data[,data.cl==1], hoge, MEAN, VARIANCE)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    png(out_f4, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", "G2", col="red", pch=20)#凡例を作成している
    
    hoge <- hoge[apply(hoge, 1, var) > 0,] #回帰分析のときにエラーが出ないように分散>0のもののみ抽出しているだけ
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    hoge <- as.data.frame(cbind(MEAN, VARIANCE))#回帰分析(regression analysis)を行うためののおまじない(1列目がMEAN, 2列目がVARIANCEならなる行列を作成したあとデータフレーム形式にした結果をhogeに格納)
    out <- lm(VARIANCE~MEAN, data=log10(hoge))#独立変数(説明変数)をMEAN, 従属変数(目的変数)をVARIANCEとしてlog10変換したデータの線形回帰を行った結果をoutに格納
    abline(out, col="black")               #回帰直線を追加
    out                                    #outの簡単な中身を表示(切片(Intercept)が-0.001173, 傾き(MEAN)が1.349519であることがわかる。つまり、y=a+bxのaが切片、bが傾きに相当する)
    summary(out)                           #回帰分析結果outのもう少し詳細な結果を表示している(Multiple R-squared(決定係数)の値が0.8149と1に相当近い値が得られていることから線形回帰で十分よいfittingが得られていると判断できる。また、一番下のp-valueが限りなく0に近いことは、MEANという従属変数が不要であるという帰無仮説を棄却するに値する、つまり従属変数が独立変数によって説明可能であることを意味する)
    dev.off()                              #おまじない
    
    #本番(Mean-Variance plot; G1 and G2両方)
    hoge <- G1                             #G1オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    png(out_f5, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    hoge <- G2                             #G2オブジェクトをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", c("G1", "G2"), col=c("blue", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    5. サンプルデータ8の26,221 genes×6 samplesのリアルデータ(data_arab.txt; mock 3サンプル vs. hrcc 3サンプル)の場合:

    G1とG2群を混ぜてプロットしています。

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)                          #総リード数を表示
    
    #前処理(データ正規化; 群ごとに総リード数の平均値を揃えている)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    nf <- mean(colSums(data))/colSums(data)#正規化係数を計算した結果をnfに格納
    normalized.count <- sweep(data, 2, nf, "*")#正規化係数を各列に掛けた結果をnormalized.countに格納
    colSums(normalized.count)              #総リード数を表示
    
    #本番(Mean-Variance plot; G1 and G2両方)
    hoge <- normalized.count               #hogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="black")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    hoge <- normalized.count[,data.cl==1]  #hogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1, ann=F,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="blue")#プロット
    
    par(new=T)                             #図の重ね合わせをするという宣言
    hoge <- normalized.count[,data.cl==2]  #hogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="red")#プロット
         
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("topright", c("(G1+G2)", "G1", "G2"), col=c("black", "blue", "red"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    6. サンプルデータ8の26,221 genes×6 samplesのリアルデータ(data_arab.txt; mock 3サンプル vs. hrcc 3サンプル)の場合:

    TCCパッケージ中のiDEGES/edgeR正規化後のデータを用いて、2つの群をまとめてプロットしています。

    iDEGES/edgeR-edgeR解析パイプライン適用後のFDR < 0.05を満たす遺伝子をマゼンタで色づけしています。

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 3                          #G2群(liver)のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized.count <- getNormalizedData(tcc)#正規化後のデータを取り出してnormalized.countに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    obj <- as.logical(tcc$stat$q.value < param_FDR)#条件を満たすかどうかを判定した結果をobjに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(Mean-Variance plot)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hoge <- normalized.count               #hogeとして取り扱う
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="black")#プロット
    points(MEAN[obj], VARIANCE[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    legend("bottomright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    解析 | 新規転写物同定(ゲノム配列を利用)

    reference-based methodsというカテゴリに含まれるものたちです。 ゲノム配列にRNA-seqデータのマッピングを行ってどこに遺伝子領域があるかなどの座標(アノテーション)情報を取得する遺伝子構造推定用です。 実質的にde novo transcriptome assemblyと目指すところは同じですが、 やはりゲノムというリファレンス配列を用いるほうがより正確であるため、ゲノム配列が利用可能な場合は利用するのが一般的です。 一般にこの種のプログラムは遺伝子構造推定だけでなく、発現量推定まで行ってくれます。 とりあえずリストアップしただけのものもあったと思いますので、間違いもいくつか含まれていると思います。

    R用:

    Review、ガイドライン、パイプライン系:

    解析 | 発現量推定(トランスクリプトーム配列を利用)

    新規転写物(新規isoform)の発見などが目的でなく、既知転写物の発現量を知りたいだけの場合には、やたらと時間がかかるゲノム配列へのマッピングを避けるのが一般的です。 有名なCufflinksも一応GTF形式のアノテーションファイルを与えることでゲノム全体にマップするのを避けるモードがあるらしいので、一応リストアップしています。 転写物へのマッピングの場合には、splice-aware alignerを用いたジャンクションリードのマッピングを行う必要がないので、高速にマッピング可能なbasic alignerで十分です。 但し、複数個所にマップされるリードは考慮する必要があり、確率モデルのパラメータを最尤法に基づいて推定するexpectation-maximization (EM)アルゴリズムがよく用いられます。 マッピングを行わずに、k-merを用いてalignment-freeで行う発現量推定を行うSailfishやRNA-Skimは従来法に比べて劇的に高速化がなされているようです。 間違いがいくつか含まれているとは思います。 2014年6月に調べた結果をリストアップします:

    Review、ガイドライン、パイプライン系:

    解析 | クラスタリング | について

    ここで紹介するのは実質的にRNA-seqカウントデータ用ですが、ぽつぽつと出始めているようです。

    解析 | クラスタリング | サンプル間 | hclust

    RNA-seqカウントデータのクラスタリング結果は、特にゼロカウント(0カウント; zero count)を多く含む場合に(もちろん距離の定義の仕方によっても変わってきますが) 低発現データのフィルタリングの閾値次第で結果が変わる傾向にあります。 ここでは、上記閾値問題に悩まされることなく頑健なサンプル間クラスタリングを行うやり方を示します。 内部的に行っていることは、1)全サンプルで0カウントとなる行(遺伝子)をフィルタリングした後、unique関数を用いて同一発現パターンのものを1つのパターンとしてまとめ、 2)「1 - Spearman順位相関係数」でサンプル間距離を定義、3)Average-linkage clusteringの実行、です。 順位相関係数を用いてサンプルベクトル間の類似度として定義するので、サンプル間正規化の問題に悩まされません。 また、低発現遺伝子にありがちな同一発現パターンの遺伝子をまとめることで、(変動しやすい)同順位となる大量の遺伝子が集約されるため、 結果的に「総カウント数がx個以下のものをフィルタリング...」という閾値問題をクリアしたことになります。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    non-DEGデータのみでクラスタリングを行っています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(サブセットの抽出)
    data <- data[param_nonDEG,]            #指定した行のみ抽出した結果をdataに格納
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    3.サンプルデータ9のReCount (Frazee et al., BMC Bioinformatics, 2011)から提供されているカウントデータの場合:

    Study列が"bodymap"データのクラスタリングを行います。"Count table"列のカウントデータファイル(bodymap_count_table.txt) のみではサンプル名がIDとして与えられているため、"Phenotype table"列のサンプル名情報ファイル(bodymap_phenodata.txt) も利用してbrain, liver, heartなどに変換した上でクラスタリング結果を表示させています。

    in_f1 <- "bodymap_count_table.txt"     #入力ファイル名を指定してin_f1に格納(カウントデータファイル)
    in_f2 <- "bodymap_phenodata.txt"       #入力ファイル名を指定してin_f2に格納(サンプル名情報ファイル)
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込みと列名変更
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    phenotype <- read.table(in_f2, header=TRUE, row.names=1, sep=" ", quote="")#in_f2で指定したファイルの読み込み
    colnames(data) <- phenotype$tissue.type#列名を付与
    dim(data)                              #確認してるだけです
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f, pointsize=15, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    4. サンプルデータ8の26,221 genes×6 samplesのリアルデータ(data_arab.txt; mock 3サンプル vs. hrcc 3サンプル)の場合:

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    5. 59,857 genes×6 samplesのリアルデータ(srp017142_count_bowtie.txt; 3 proliferative samples vs. 3 Ras samples)の場合:

    Neyret-Kahn et al., Genome Res., 2013の2群間比較用ヒトRNA-seqカウントデータです。 パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)から得られます。

    in_f <- "srp017142_count_bowtie.txt"   #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    解析 | クラスタリング | サンプル間 | TCC(Sun_2013)

    TCCパッケージ(ver. 1.4.0以降)サンプル間クラスタリングを行うやり方を示します。 clusterSample関数を利用した頑健なクラスタリング結果を返します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 59,857 genes×6 samplesのリアルデータ(srp017142_count_bowtie.txt; 3 proliferative samples vs. 3 Ras samples)の場合:

    Neyret-Kahn et al., Genome Res., 2013の2群間比較用ヒトRNA-seqカウントデータです。 パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)から得られます。

    in_f <- "srp017142_count_bowtie.txt"   #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.png"                   #出力ファイル名を指定してout_fに格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    out <- clusterSample(data, dist.method="spearman",
                            hclust.method="average", unique.pattern=TRUE)
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    解析 | クラスタリング | 遺伝子間 | MBCluster.Seq (Si_2014)

    MBCluster.Seqパッケージを用いたやり方を示します。 最適なクラスター数周辺までかなりいろいろとできるようなことを書いてあったような気がします。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    
    #必要なパッケージをロード
    library(MBCluster.Seq)                 #パッケージの読み込み
    	

    解析 | 発現変動 | ポアソン分布 | シミュレーションデータ(Technical replicates)

    ポアソン分布(Poisson distribution)に従うデータとは、任意の値(λ)を与えたときに、分散がλとなるような分布になるようなデータのことです。

    以下では、1.ポアソン分布の感覚をつかみながら、2.参考文献1の実際のデータを入力(empirical distribution of read countsに相当)として与えてシミュレーションデータの作成を行います。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1-1. ポアソン分布の感覚をつかむ(初級):

    任意のλ(> 0)を与え、任意の数の乱数を発生させ、その分散がλに近い値になっているかどうか調べる。

    param1 <- 8                            #λの値を指定
    param2 <- 100                          #発生させる乱数の数を指定
    out <- rpois(param2, lambda=param1)    #ポアソン分布に従う乱数を発生させた結果をoutに格納
    out                                    #outの中身を表示
    var(out)                               #outの分散を計算している
    	

    1-2. ポアソン分布の感覚をつかむ(中級):

    λを1から100までにし、各λの値について発生させる乱数の数を増やし、λの値ごとの平均と分散を計算した結果をプロット

    out <- NULL                            #最終的に平均と分散の計算結果を格納するためのプレースホルダを作成している
    for(i in 1:100){                       #100回ループを回す
       x <- rpois(n=2000, lambda=i)        #λがiのときのポアソン分布に従う乱数を2000個発生させた結果をxに格納
       out <- rbind(out, c(mean(x), var(x)))#xの平均と分散を計算した結果をどんどんoutの下の行に追加
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    colnames(out) <- c("MEAN", "VARIANCE") #100行2列の行列outに列名を付与
    plot(out)                              #平均と分散の関係をプロット(傾きが1の直線っぽくなっていることが分かる。つまり平均=分散ってこと)
    
    #λを5, 60, 200の三つの要素からなるベクトルとして与えて各々1000個分の乱数を発生させる
    param1 <- c(5, 60, 200)                #λの値を指定
    param2 <- 10000                        #各λの値ごとの発生させる乱数の数を指定
    out <- rpois(param2*length(param1), lambda=param1)#ポアソン分布に従う乱数を発生させた結果をoutに格納
    hist(out)                              #ヒストグラムを描画
    	

    2. シミュレーションデータの作成本番(7サンプル分の行列データとして作成):

    サンプルデータ2のSupplementaryTable2_changed.txtの「kidney 5サンプル vs. liver 5サンプル」のデータに相当しますが、このうちkidneyのデータを入力として与えることにします。

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 7                            #サンプル数を指定
    
    #データファイルの読み込みとλベクトルの作成(kidneyのfive technical replicatesのデータを用いる)
    tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    tmp <- rowSums(tmp[,1:5])              #kidneyの5 replicatesのデータの各行の和を計算している
    RPM <- tmp*1000000/sum(tmp)            #リード数の総和を100万にしている
    LAMBDA <- RPM[RPM > 0]                 #λが0だと意味がないのでそういうものを除いている
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る
    out <- NULL                            #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param1){                    #param1回ループを回す
        out <- cbind(out, rpois(n=length(LAMBDA), lambda=LAMBDA))#length(LAMBDA)個の乱数を発生させている(λベクトルはLAMBDAで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #得られた20921行×param1列からなる行列outがポアソン分布に従っているかを確認
    obj <- rowSums(out) > 0                #条件を満たすかどうかを判定した結果をobjに格納(行の和が0より大きいkどうか)
    out2 <- out[obj,]                      #objがTRUEのもののみ抽出してout2に格納
    MEAN <- apply(out2, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(out2, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy")         #両対数(底は10)プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    
    #行列outの中から分散が計算できたもののみ、検証用情報(LAMDA, MEAN, VARIANCE)とともにファイルに出力
    tmp <- cbind(out2, LAMBDA[obj], MEAN, VARIANCE)#保存したい情報をtmpに格納(λ, 乱数の平均, 乱数の分散)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. シミュレーションデータの作成本番(遺伝子数(行数)を任意に与える場合):

    サンプルデータ2のSupplementaryTable2_changed.txtの「kidney 5サンプル vs. liver 5サンプル」のデータに相当しますが、このうちkidneyのデータを入力として与えることにします。

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 7                            #サンプル数を指定    
    param_Ngene <- 5000                    #全遺伝子数を指定
    
    #データファイルの読み込みとλベクトルの作成(kidneyのfive technical replicatesのデータを用いる)
    tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    tmp <- rowSums(tmp[,1:5])              #kidneyの5 replicatesのデータの各行の和を計算している
    LAMBDA <- tmp[tmp > 0]                 #λが0だと意味がないのでそういうものを除いている
    LAMBDA <- sample(LAMBDA, param_Ngene, replace=TRUE)#param_Ngeneで指定した数だけサンプリングした結果をLAMBDAに格納
    LAMBDA <- LAMBDA*1000000/sum(LAMBDA)   #リード数の総和を100万にしている
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る
    out <- NULL                            #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param1){                    #param1回ループを回す
        out <- cbind(out, rpois(n=length(LAMBDA), lambda=LAMBDA))#length(LAMBDA)個の乱数を発生させている(λベクトルはLAMBDAで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #得られたparam2行×param1列からなる行列outがポアソン分布に従っているかを確認
    obj <- apply(out, 1, var) > 0          #条件を満たすかどうかを判定した結果をobjに格納(行列outの各行の分散が0より大きいかどうか)
    out2 <- out[obj,]                      #objがTRUEのもののみ抽出してout2に格納
    MEAN <- apply(out2, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(out2, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy")         #両対数(底は10)プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    
    #行列outをファイルに出力
    tmp <- cbind(LAMBDA, out)              #保存したい情報をtmpに格納(LAMBDAの数値情報, 行列out)
    colnames(tmp) <- c("LAMBDA", paste("replicate",1:param1,sep=""))#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. シミュレーションデータの作成本番(G1群3サンプル vs. G2群3サンプルのデータで、全遺伝子の10%がG1群で2倍高発現というデータにしたい場合):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_Ngene <- 10000                   #全遺伝子数を指定
    param4 <- 0.1                          #発現変動遺伝子の割合を指定    
    param5 <- 2                            #発現変動の度合い(fold-change)を指定    
    
    #データファイルの読み込みとλベクトルの作成(kidneyのfive technical replicatesのデータを用いる)
    tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    tmp <- rowSums(tmp[,1:5])              #kidneyの5 replicatesのデータの各行の和を計算している
    LAMBDA <- tmp[tmp > 0]                 #λが0だと意味がないのでそういうものを除いている
    LAMBDA <- sample(LAMBDA, param_Ngene, replace=TRUE)#param_Ngeneで指定した数だけサンプリングした結果をLAMBDAに格納
    LAMBDA <- LAMBDA*1000000/sum(LAMBDA)   #リード数の総和を100万にしている
    
    #発現変動遺伝子(DEG)に相当する位置情報の特定、およびG1群用にその部分のみ(param5)倍高発現となるようなλに変更
    DEG_degree <- rep(1, param_Ngene)      #DEGの発現変動の度合い情報を格納するプレースホルダを作成している
    DEG_degree[1:(param_Ngene*param4)] <- param5#param_Ngene個の遺伝子ベクトル中最初の(param_Ngene*param4)個の発現変動の度合いをparam5としている
    DEG_posi <- DEG_degree == param5       #DEGの位置情報を取得している
    LAMBDA_A <- LAMBDA*DEG_degree          #G1群用のλ(つまりLAMBDA*DEG_degree)をLAMBDA_Aに格納
    LAMBDA_B <- LAMBDA                     #G2群用のλ(つまりLAMBDA)をLAMBDA_Bに格納
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る(G1群用)
    outA <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G1){                  #param_G1回ループを回す(つまりG1群のサンプル数分だけループを回している)
        outA <- cbind(outA, rpois(n=length(LAMBDA_A), lambda=LAMBDA_A))#length(LAMBDA_A)個の乱数を発生させている(λベクトルはLAMBDA_Aで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る(G2群用)
    outB <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G2){                  #param_G2回ループを回す(つまりG2群のサンプル数分だけループを回している)
        outB <- cbind(outB, rpois(n=length(LAMBDA_B), lambda=LAMBDA_B))#length(LAMBDA_B)個の乱数を発生させている(λベクトルはLAMBDA_Bで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #ファイルに保存
    tmp <- cbind(outA, outB)               #保存したい情報をtmpに格納(G1群とG2群のデータ)
    colnames(tmp) <- c(paste("G1_rep",1:param_G1,sep=""),paste("G2_rep",1:param_G2,sep=""))#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #M-A plotを描画して確認
    data <- tmp                            #シミュレーションデータをdataとして取り扱う
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #M-A plotの横軸に相当する情報(Average)を計算した結果をx_axisに格納
    y_axis <- mean_G2 - mean_G1            #M-A plotの縦軸に相当する情報(Minus)を計算した結果をy_axisに格納
    param_xrange <- c(0.5, 10000)          #横軸の描画範囲を指定したものをparam_xrangeに格納
    plot(x_axis, y_axis, pch=20, cex=0.1, xlim=log2(param_xrange), xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="magenta", pch=20, cex=0.1)#DEGに相当するもの(つまりDEG_posiがTRUEの部分)の色をマゼンタにしている
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    legend("topright", c("DEG", "non-DEG"), col=c("magenta", "black"), pch=19)#legendを表示
    	

    5. シミュレーションデータの作成本番(G1群3サンプル vs. G2群3サンプルのデータで、全遺伝子の10%がDEG。DEGのうちの80%がG1群で高発現、残りの20%がG2群で高発現というデータにしたい場合):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_Ngene <- 10000                   #全遺伝子数を指定
    param4 <- 0.1                          #発現変動遺伝子の割合(PDEG)を指定    
    param5 <- 2                            #発現変動の度合い(fold-change)を指定  
    param6 <- 0.8                          #DEGのうちG1群で高発現なものの割合(PA)を指定   
    
    #データファイルの読み込みとλベクトルの作成(kidneyのfive technical replicatesのデータを用いる)
    tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    tmp <- rowSums(tmp[,1:5])              #kidneyの5 replicatesのデータの各行の和を計算している
    LAMBDA <- tmp[tmp > 0]                 #λが0だと意味がないのでそういうものを除いている
    LAMBDA <- sample(LAMBDA, param_Ngene, replace=TRUE)#param_Ngeneで指定した数だけサンプリングした結果をLAMBDAに格納
    LAMBDA <- LAMBDA*1000000/sum(LAMBDA)   #リード数の総和を100万にしている
    
    #発現変動遺伝子(DEG)に相当する位置情報の特定、およびその部分のみ(param5)倍高発現となるようなλに変更
    DEG_degree_A <- rep(1, param_Ngene)    #DEGの発現変動の度合い情報を格納するプレースホルダを作成している
    DEG_degree_A[1:(param_Ngene*param4*param6)] <- param5#param_Ngene個の遺伝子ベクトル中最初の(param_Ngene*param4*param6)個の発現変動の度合いをparam5としている
    LAMBDA_A <- LAMBDA*DEG_degree_A        #G1群用のλ(つまりLAMBDA*DEG_degree_A)をLAMBDA_Aに格納
    DEG_degree_B <- rep(1, param_Ngene)    #DEGの発現変動の度合い情報を格納するプレースホルダを作成している
    DEG_degree_B[(param_Ngene*param4*param6+1):param_Ngene*param4)] <- param5#param_Ngene個の遺伝子ベクトル中「(param_Ngene*param4*param6+1):(param_Ngene*param4)」に相当する位置のの発現変動の度合いをparam5としている
    LAMBDA_B <- LAMBDA*DEG_degree_B        #G2群用のλ(つまりLAMBDA*DEG_degree_B)をLAMBDA_Bに格納
    DEG_posi <- (DEG_degree_A*DEG_degree_B) > 1#DEGの位置情報を取得している
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る(G1群用)
    outA <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G1){                    #param_G1回ループを回す(つまりG1群のサンプル数分だけループを回している)
        outA <- cbind(outA, rpois(n=length(LAMBDA_A), lambda=LAMBDA_A))#length(LAMBDA_A)個の乱数を発生させている(λベクトルはLAMBDA_Aで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る(G2群用)
    outB <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G2){                    #param_G2回ループを回す(つまりG2群のサンプル数分だけループを回している)
        outB <- cbind(outB, rpois(n=length(LAMBDA_B), lambda=LAMBDA_B))#length(LAMBDA_B)個の乱数を発生させている(λベクトルはLAMBDA_Bで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #ファイルに保存
    tmp <- cbind(outA, outB)               #保存したい情報をtmpに格納(G1群とG2群のデータ)
    colnames(tmp) <- c(paste("G1_rep",1:param_G1,sep=""),paste("G2_rep",1:param_G2,sep=""))#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #M-A plotを描画して確認
    data <- tmp                            #シミュレーションデータをdataとして取り扱う
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #M-A plotの横軸に相当する情報(Average)を計算した結果をx_axisに格納
    y_axis <- mean_G2 - mean_G1            #M-A plotの縦軸に相当する情報(Minus)を計算した結果をy_axisに格納
    param_xrange <- c(0.5, 10000)          #横軸の描画範囲を指定したものをparam_xrangeに格納
    plot(x_axis, y_axis, pch=20, cex=0.1, xlim=log2(param_xrange), xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="magenta", pch=20, cex=0.1)#DEGに相当するもの(つまりDEG_posiがTRUEの部分)の色をマゼンタにしている
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    legend("topright", c("DEG", "non-DEG"), col=c("magenta", "black"), pch=19)#legendを表示
    	

    6. シミュレーションデータの作成本番:

    Robinson and Oshlack, 2010のFig. 2のデータとほとんど同じものを作りたい場合。違いはG1群およびG2群でuniqueに発現しているものを入れてないだけ

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_Ngene <- 20000                   #全遺伝子数を指定
    param4 <- 0.1                          #発現変動遺伝子の割合(PDEG)を指定    
    param5 <- 2                            #発現変動の度合い(fold-change)を指定  
    param6 <- 0.8                          #DEGのうちG1群で高発現なものの割合(PA)を指定   
    
    #データファイルの読み込みとλベクトルの作成(kidneyのfive technical replicatesのデータを用いる)
    tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    tmp <- rowSums(tmp[,1:5])              #kidneyの5 replicatesのデータの各行の和を計算している
    LAMBDA <- tmp[tmp > 0]                 #λが0だと意味がないのでそういうものを除いている
    LAMBDA <- sample(LAMBDA, param_Ngene, replace=TRUE)#param_Ngeneで指定した数だけサンプリングした結果をLAMBDAに格納
    LAMBDA <- LAMBDA*1000000/sum(LAMBDA)   #リード数の総和を100万にしている
    
    #発現変動遺伝子(DEG)に相当する位置情報の特定、およびその部分のみ(param5)倍高発現となるようなλに変更
    DEG_degree_A <- rep(1, param_Ngene)    #DEGの発現変動の度合い情報を格納するプレースホルダを作成している
    DEG_degree_A[1:(param_Ngene*param4*param6)] <- param5#param_Ngene個の遺伝子ベクトル中最初の(param3*param4*param6)個の発現変動の度合いをparam5としている
    LAMBDA_A <- LAMBDA*DEG_degree_A        #G1群用のλ(つまりLAMBDA*DEG_degree_A)をLAMBDA_Aに格納
    DEG_degree_B <- rep(1, param_Ngene)    #DEGの発現変動の度合い情報を格納するプレースホルダを作成している
    DEG_degree_B[(param_Ngene*param4*param6+1):(param_Ngene*param4)] <- param5#param_Ngene個の遺伝子ベクトル中「(param_Ngene*param4*param6+1):(param_Ngene*param4)」に相当する位置のの発現変動の度合いをparam5としている
    LAMBDA_B <- LAMBDA*DEG_degree_B        #G2群用のλ(つまりLAMBDA*DEG_degree_B)をLAMBDA_Bに格納
    DEG_posi <- (DEG_degree_A*DEG_degree_B) > 1#DEGの位置情報を取得している
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る(G1群用)
    outA <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G1){                    #param_G1回ループを回す(つまりG1群のサンプル数分だけループを回している)
        outA <- cbind(outA, rpois(n=length(LAMBDA_A), lambda=LAMBDA_A))#length(LAMBDA_A)個の乱数を発生させている(λベクトルはLAMBDA_Aで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #ポアソン分布に従う乱数を生成してシミュレーションデータを得る(G2群用)
    outB <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G2){                    #param_G2回ループを回す(つまりG2群のサンプル数分だけループを回している)
        outB <- cbind(outB, rpois(n=length(LAMBDA_B), lambda=LAMBDA_B))#length(LAMBDA_B)個の乱数を発生させている(λベクトルはLAMBDA_Bで与えている)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #ファイルに保存
    tmp <- cbind(outA, outB)               #保存したい情報をtmpに格納(G1群とG2群のデータ)
    colnames(tmp) <- c(paste("G1_rep",1:param_G1,sep=""),paste("G2_rep",1:param_G2,sep=""))#列名を付与
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #M-A plotを描画して確認
    data <- tmp                            #シミュレーションデータをdataとして取り扱う
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #M-A plotの横軸に相当する情報(Average)を計算した結果をx_axisに格納
    y_axis <- mean_G2 - mean_G1            #M-A plotの縦軸に相当する情報(Minus)を計算した結果をy_axisに格納
    param_xrange <- c(0.5, 10000)          #横軸の描画範囲を指定したものをparam_xrangeに格納
    plot(x_axis, y_axis, pch=20, cex=0.1, xlim=log2(param_xrange), xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="magenta", pch=20, cex=0.1)#DEGに相当するもの(つまりDEG_posiがTRUEの部分)の色をマゼンタにしている
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    legend("topright", c("DEG", "non-DEG"), col=c("magenta", "black"), pch=19)#legendを表示
    	

    解析 | 発現変動 | 負の二項分布 | シミュレーションデータ(Biological replicates)

    誰が最初か今のところ把握していませんがBiological replicatesのデータが負の二項分布(negative binomial distribution; NB分布) に従うというのがこの業界のコンセンサスです。つまり、ポアソン分布よりももっとばらつき(dispersion)が大きいということを言っています。 ここではまず、NB modelの一般式としてVARIANCE = MEAN + φ×(MEAN)^2において、MEAN=10 and φ=0.1 のNBモデルに従う乱数を発生させて発現変動解析との関連のイメージをつかみます。 このときのVARIANCEの期待値はVARIANCE = 10 + 0.1×(10)^2 = 20となります。このほかにも様々な例を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. MEAN=10 and φ=0.1の場合(基本形):

    (MEAN-VARIANCE plotをファイルpngファイルに保存しています)

    out_f <- "hoge1.png"                   #出力ファイル名を指定してout_fに格納
    param_MEAN <- 10                       #平均カウント数(MEAN)を指定
    param_dispersion <- 0.1                #dispersion parameterの値を指定
    param_Ngene <- 1000                    #全遺伝子数を指定
    param_G1 <- 3                          #G1群のサンプル数を指定    
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #NB分布に従う乱数を発生
    rnbinom(n=100, mu=param_MEAN, size=1/param_dispersion)#100個の乱数を発生させている
    hoge <- rnbinom(n=10000, mu=param_MEAN, size=1/param_dispersion)#10000個の乱数を発生させた結果をhogeに格納
    var(hoge)                              #分散を計算した結果を表示(期待値通り)
    
    #NB分布に従うシミュレーションデータを作成
    hoge1 <-param_Ngene*(param_G1 + param_G2)#必要な乱数の数を計算している(行数×列数)
    hoge2 <- rnbinom(n=hoge1, mu=param_MEAN, size=1/param_dispersion)#指定した数の乱数を発生させた結果をhoge2に格納
    data <- matrix(hoge2, nrow=param_Ngene)#(param_Ngene)行からなる行列データに変換した結果をdataに格納
    head(data)                             #確認してるだけです
    dim(data)                              #行数と列数を表示
    
    #MEAN-VARIANCE plot(ファイルに保存)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    MEAN <- apply(data, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(data, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="black")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1
    
    #指定した平均カウント数における最大の発現変動遺伝子(DEG)を作成してプロット
    DEG <- c(rep(0, param_G1), rep(param_MEAN*2, param_G2))#可能な最大のDEGの発現パターンを自作した結果をDEGに格納(G2で高発現にしている)
    DEG                                    #発現パターンを表示
    mean(DEG)                              #DEGの平均カウント数(MEAN)を表示
    var(DEG)                               #DEGの分散(VARIANCE)を表示
    points(mean(DEG), var(DEG), col="red", cex=1.0, pch=20)#DEGの点を指定した色で描画
    legend("topright", c("DEG", "non-DEG"), col=c("red", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    2. G1群2サンプル vs. G2群2サンプルのデータで、全遺伝子の15%がDEG。DEGのうちの20%がG1群で4倍高発現、残りの80%がG2群で4倍高発現というデータにしたい場合:

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 4                            #発現変動の度合い(fold-change)を指定
    param_G1 <- 2                          #G1群のサンプル数を指定    
    param_G2 <- 2                          #G2群のサンプル数を指定
    param_Ngene <- 20000                   #全遺伝子数を指定
    param_PDEG <- 0.15                     #発現変動遺伝子の割合(PDEG)を指定
    param_PA <- 0.2                        #DEGのうちG1群で高発現なものの割合(PA)を指定
    
    #必要なパッケージをロード
    library(NBPSeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data(arab)                             #このパッケージ中にあるarabというオブジェクト名のデータを取り出している
    data <- arab                           #データはarabというオブジェクト名で取り扱えるが、dataという名前で取り扱うことにする
    data.cl <- c(rep(1, 3), rep(2, 3))     #G1群を1、G2群を2としたベクトルdata.clを作成(ここのラベル情報は経験分布作成用のデータが3群 vs. 3群のデータだと分かっているため)
    
    #RPM正規化して群ごとのMEANとφの経験分布情報を取得
    RPM <- sweep(data, 2, 1000000/colSums(data), "*")#RPM正規化した結果をRPMに格納
    RPM_A <- RPM[,data.cl == 1]            #G1群のデータのみ抽出してRPM_Aに格納
    RPM_B <- RPM[,data.cl == 2]            #G2群のデータのみ抽出してRPM_Bに格納
    RPM_A <- RPM_A[apply(RPM_A, 1, var) > 0,]#分散が0より大きいもののみ抽出
    RPM_B <- RPM_B[apply(RPM_B, 1, var) > 0,]#分散が0より大きいもののみ抽出
    MEAN <- c(apply(RPM_A, 1, mean), apply(RPM_B, 1, mean))#RPM補正後のread countsの遺伝子ごとの平均値を計算した結果をMEANに格納
    VARIANCE <- c(apply(RPM_A, 1, var), apply(RPM_B, 1, var))#RPM補正後のread countsの遺伝子ごとの分散を計算した結果をVARIANCEに格納
    DISPERSION <- (VARIANCE - MEAN)/(MEAN*MEAN)#RPM補正後のread countsの遺伝子ごとのφを計算した結果をDISPERSIONに格納
    mean_disp_tmp <- cbind(MEAN, DISPERSION)#MEANとDISPERSIONを列方向に結合した結果をmean_disp_tmpに格納
    mean_disp_tmp <- mean_disp_tmp[mean_disp_tmp[,2] > 0,]#mean_disp_tmp行列中の二列目(DISPERSION部分)が0より大きいもののみ抽出(理由は後に使うrnbinom関数が負のdispersion parameterの値を許容しないからです)
    hoge <- sample(1:nrow(mean_disp_tmp), param_Ngene, replace=TRUE)#最終的にparam_Ngeneで指定した行数分のデータにしたいので、mean_disp_tmp行列の行数から(復元抽出で)ランダムサンプリングするための数値ベクトル情報をhogeに格納
    mean_disp <- mean_disp_tmp[hoge,]      #mean_disp_tmp行列からhogeで指定した行を抽出した結果をmean_dispに格納
    
    #指定したDEGの条件にすべく、meanに相当するところの値を群ごとに変更する。また、このときにDEGの位置情報も取得している
    mu <- mean_disp[,1]                    #経験分布の平均値に相当する情報をmuに格納(単に文字数を減らして見やすくしたいだけです)
    DEG_degree_A <- rep(1, param_Ngene)         #(param_Ngene)で指定した遺伝子数分だけ倍率変化の初期値を1倍としたものをDEG_degree_Aに格納
    DEG_degree_A[1:(param_Ngene*param_PDEG*param_PA)] <- param1#DEG_degree_Aのベクトルに対して、最初の行から(param_Ngene*param_PDEG*param_PA)で表現されるG1群で高発現にする遺伝子数分に相当する位置を(param1)倍するという情報に置換する
    mu_A <- mu*DEG_degree_A                #G1群で高発現とする位置のmuの値を(param1)倍した結果をmu_Aに格納
    DEG_degree_B <- rep(1, param_Ngene)         #(param_Ngene)で指定した遺伝子数分だけ倍率変化の初期値を1倍としたものをDEG_degree_Bに格納
    DEG_degree_B[(param_Ngene*param_PDEG*param_PA+1):(param_Ngene*param_PDEG)] <- param1#DEG_degree_Bのベクトルに対して、G1群で高発現とした位置情報の次の行(param_Ngene*param_PDEG*param_PA+1)からG2群で高発現にする遺伝子数分に相当する位置を(param1)倍するという情報に置換する
    mu_B <- mu*DEG_degree_B                #G2群で高発現とする位置のmuの値を(param1)倍した結果をmu_Bに格納
    DEG_posi_org <- (DEG_degree_A*DEG_degree_B) > 1#DEGに相当する位置をTRUE、それ以外をFALSEとしたベクトルをDEG_posi_orgに格納
    nonDEG_posi_org <- (DEG_degree_A*DEG_degree_B) == 1#non-DEGに相当する位置をTRUE、それ以外をFALSEとしたベクトルをnon-DEG_posi_orgに格納
    
    #負の二項分布に従う乱数を生成して群ごとのシミュレーションデータを得る
    outA <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G1){                   #(param_G1)回ループを回す
        outA <- cbind(outA, rnbinom(n=length(mu_A), mu=mu_A, size=1/mean_disp[,2]))#length(mu_A)個の乱数を発生させている(rnbinom関数はVARIANCE=mu + mu^2/sizeとして定義しているので左記のような指定方法でよい)
    }                                                                #ここまできたら、次のiの値でループの最初からやり直し
    outB <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G2){                   #(param_G2)回ループを回す
        outB <- cbind(outB, rnbinom(n=length(mu_B), mu=mu_B, size=1/mean_disp[,2]))#length(mu_B)個の乱数を発生させている(rnbinom関数はVARIANCE=mu + mu^2/sizeとして定義しているので左記のような指定方法でよい)
    }                                                                #ここまできたら、次のiの値でループの最初からやり直し
    
    #(param_Ngene)行(param_G1+param_G2)列のカウント情報からなる行列outから全ての列でゼロカウントの行を削除した行列RAWを作成し、ファイルに出力
    out <- cbind(outA, outB)               #G1群のデータとG2群のデータを列方向で結合した結果をoutに格納
    obj <- rowSums(out) > 0                #条件を満たすかどうかを判定した結果をobjに格納(行の和が0より大きいかどうか)
    RAW <- out[obj,]                       #行列outの中からobjベクトルの値がTRUEとなる行のみを抽出してRAWに格納
    DEG_posi <- DEG_posi_org[obj]          #DEG_posi_orgベクトルに対して、objベクトルの値がTRUEとなる要素のみを抽出してDEG_posiに格納
    nonDEG_posi <- nonDEG_posi_org[obj]    #nonDEG_posi_orgベクトルに対して、objベクトルの値がTRUEとなる要素のみを抽出してnonDEG_posiに格納
    tmp <- cbind(RAW, DEG_posi)            #保存したい情報をtmpに格納(行列RAWとDEGかどうかのフラグ情報)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #M-A plotを描画して確認
    data <- RAW                            #シミュレーションデータRAWをdataとして取り扱う
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #M-A plotの横軸に相当する情報(Average)を計算した結果をx_axisに格納
    y_axis <- mean_G2 - mean_G1            #M-A plotの縦軸に相当する情報(Minus)を計算した結果をy_axisに格納
    #param_xrange <- c(0.5, 10000)         #横軸の描画範囲を指定したものをparam_xrangeに格納
    #plot(x_axis, y_axis, pch=20, cex=0.1, xlim=log2(param_xrange), xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    plot(x_axis, y_axis, pch=20, cex=0.1, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="magenta", pch=20, cex=0.1)#DEGに相当するもの(つまりDEG_posiがTRUEの部分)の色をマゼンタにしている
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    legend("topright", c("DEG", "non-DEG"), col=c("magenta", "black"), pch=19)#legendを表示
    	

    3. G1群1サンプル vs. G2群1サンプルのデータで、全遺伝子の15%がDEG。DEGのうちの20%がG1群で4倍高発現、残りの80%がG2群で4倍高発現というデータにしたい場合:

    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param1 <- 4                            #発現変動の度合い(fold-change)を指定
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_Ngene <- 20000                   #全遺伝子数を指定
    param_PDEG <- 0.15                     #発現変動遺伝子の割合(PDEG)を指定
    param_PA <- 0.2                        #DEGのうちG1群で高発現なものの割合(PA)を指定
    
    #必要なパッケージをロード
    library(NBPSeq)                        #パッケージの読み込み
    
    #発現データの読み込みとラベル情報の作成
    data(arab)                             #このパッケージ中にあるarabというオブジェクト名のデータを取り出している
    data <- arab                           #データはarabというオブジェクト名で取り扱えるが、dataという名前で取り扱うことにする
    data.cl <- c(rep(1, 3), rep(2, 3))     #G1群を1、G2群を2としたベクトルdata.clを作成
    
    #RPM正規化して群ごとのMEANとφの経験分布情報を取得
    RPM <- sweep(data, 2, 1000000/colSums(data), "*")#RPM正規化した結果をRPMに格納
    RPM_A <- RPM[,data.cl == 1]            #G1群のデータのみ抽出してRPM_Aに格納
    RPM_B <- RPM[,data.cl == 2]            #G2群のデータのみ抽出してRPM_Bに格納
    RPM_A <- RPM_A[apply(RPM_A,1,var) > 0,]#分散が0より大きいもののみ抽出
    RPM_B <- RPM_B[apply(RPM_B,1,var) > 0,]#分散が0より大きいもののみ抽出
    MEAN <- c(apply(RPM_A, 1, mean), apply(RPM_B, 1, mean))#RPM補正後のread countsの遺伝子ごとの平均値を計算した結果をMEANに格納
    VARIANCE <- c(apply(RPM_A, 1, var), apply(RPM_B, 1, var))#RPM補正後のread countsの遺伝子ごとの分散を計算した結果をVARIANCEに格納
    DISPERSION <- (VARIANCE - MEAN)/(MEAN*MEAN)#RPM補正後のread countsの遺伝子ごとのφを計算した結果をDISPERSIONに格納
    mean_disp_tmp <- cbind(MEAN, DISPERSION)#MEANとDISPERSIONを列方向に結合した結果をmean_disp_tmpに格納
    mean_disp_tmp <- mean_disp_tmp[mean_disp_tmp[,2] > 0,]#mean_disp_tmp行列中の二列目(DISPERSION部分)が0より大きいもののみ抽出(理由は後に使うrnbinom関数が負のdispersion parameterの値を許容しないからです)
    hoge <- sample(1:nrow(mean_disp_tmp), param_Ngene, replace=TRUE)#最終的にparam_Ngeneで指定した行数分のデータにしたいので、mean_disp_tmp行列の行数から(復元抽出で)ランダムサンプリングするための数値ベクトル情報をhogeに格納
    mean_disp <- mean_disp_tmp[hoge,]      #mean_disp_tmp行列からhogeで指定した行を抽出した結果をmean_dispに格納
    
    #指定したDEGの条件にすべく、meanに相当するところの値を群ごとに変更する。また、このときにDEGの位置情報も取得している
    mu <- mean_disp[,1]                    #経験分布の平均値に相当する情報をmuに格納(単に文字数を減らして見やすくしたいだけです)
    DEG_degree_A <- rep(1, param_Ngene)    #(param_Ngene)で指定した遺伝子数分だけ倍率変化の初期値を1倍としたものをDEG_degree_Aに格納
    DEG_degree_A[1:(param_Ngene*param_PDEG*param_PA)] <- param1#DEG_degree_Aのベクトルに対して、最初の行から(param_Ngene*param_PDEG*param_PA)で表現されるG1群で高発現にする遺伝子数分に相当する位置を(param1)倍するという情報に置換する
    mu_A <- mu*DEG_degree_A                #G1群で高発現とする位置のmuの値を(param1)倍した結果をmu_Aに格納
    DEG_degree_B <- rep(1, param_Ngene)    #(param_Ngene)で指定した遺伝子数分だけ倍率変化の初期値を1倍としたものをDEG_degree_Bに格納
    DEG_degree_B[(param_Ngene*param_PDEG*param_PA+1):(param_Ngene*param_PDEG)] <- param1#DEG_degree_Bのベクトルに対して、G1群で高発現とした位置情報の次の行(param_Ngene*param_PDEG*param_PA+1)からG2群で高発現にする遺伝子数分に相当する位置を(param1)倍するという情報に置換する
    mu_B <- mu*DEG_degree_B                #G2群で高発現とする位置のmuの値を(param1)倍した結果をmu_Bに格納
    DEG_posi_org <- (DEG_degree_A*DEG_degree_B) > 1#DEGに相当する位置をTRUE、それ以外をFALSEとしたベクトルをDEG_posi_orgに格納
    nonDEG_posi_org <- (DEG_degree_A*DEG_degree_B) == 1#non-DEGに相当する位置をTRUE、それ以外をFALSEとしたベクトルをDEG_posi_orgに格納
    
    #負の二項分布に従う乱数を生成して群ごとのシミュレーションデータを得る
    outA <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G1){                   #(param_G1)回ループを回す
        outA <- cbind(outA, rnbinom(n=length(mu_A), mu=mu_A, size=1/mean_disp[,2]))#length(mu_A)個の乱数を発生させている(rnbinom関数はVARIANCE=mu + mu^2/sizeとして定義しているので左記のような指定方法でよい)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    outB <- NULL                           #最終的に結果を格納するためのプレースホルダを作成している
    for(i in 1:param_G2){                   #(param_G2)回ループを回す
        outB <- cbind(outB, rnbinom(n=length(mu_B), mu=mu_B, size=1/mean_disp[,2]))#length(mu_B)個の乱数を発生させている(rnbinom関数はVARIANCE=mu + mu^2/sizeとして定義しているので左記のような指定方法でよい)
    }                                      #ここまできたら、次のiの値でループの最初からやり直し
    
    #(param_Ngene)行(param_G1+param_G2)列のカウント情報からなる行列outから全ての列でゼロカウントの行を削除した行列RAWを作成し、ファイルに出力
    out <- cbind(outA, outB)               #G1群のデータとG2群のデータを列方向で結合した結果をoutに格納
    obj <- rowSums(out) > 0                #条件を満たすかどうかを判定した結果をobjに格納(行の和が0より大きいかどうか)
    RAW <- out[obj,]                       #行列outの中からobjベクトルの値がTRUEとなる行のみを抽出してRAWに格納
    DEG_posi <- DEG_posi_org[obj]          #DEG_posi_orgベクトルに対して、objベクトルの値がTRUEとなる要素のみを抽出してDEG_posiに格納
    nonDEG_posi <- nonDEG_posi_org[obj]    #nonDEG_posi_orgベクトルに対して、objベクトルの値がTRUEとなる要素のみを抽出してnonDEG_posiに格納
    tmp <- cbind(RAW, DEG_posi)            #保存したい情報をtmpに格納(行列RAWとDEGかどうかのフラグ情報)
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #M-A plotを描画して確認
    data <- RAW                            #シミュレーションデータRAWをdataとして取り扱う
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #M-A plotの横軸に相当する情報(Average)を計算した結果をx_axisに格納
    y_axis <- mean_G2 - mean_G1            #M-A plotの縦軸に相当する情報(Minus)を計算した結果をy_axisに格納
    #param_xrange <- c(0.5, 10000)         #横軸の描画範囲を指定したものをparam_xrangeに格納
    #plot(x_axis, y_axis, pch=20, cex=0.1, xlim=log2(param_xrange), xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    plot(x_axis, y_axis, pch=20, cex=0.1, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)")#M-A plotを描画
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="magenta", pch=20, cex=0.1)#DEGに相当するもの(つまりDEG_posiがTRUEの部分)の色をマゼンタにしている
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    legend("topright", c("DEG", "non-DEG"), col=c("magenta", "black"), pch=19)#legendを表示
    	

    解析 | 発現変動 | について

    ここでは、RNA-seqから得られるカウントデータの特徴や、実験デザイン、モデルなどについて基本的なところを述べています。 しかし、以下の記述内容は2012年頃までの知識に基づいているため結構古くなっています。参考程度にしてください。 2014年7月現在の印象としては、ReExpressのような新規転写物を同定しつつ、 既知転写物とそれらの新規転写物配列情報をアップデートしながら発現量推定を行い、 かつ発現変動解析まで行う、あるいはそれを繰り返すという方向性に移行しつつあるような感じです。 つまり、これまでの行数一定の"遺伝子"発現行列データを入力として解析するのではなく、 逐次転写物の発現量の数値や行数が変化しながら解析を行うようなイメージです。

    カウントデータとモデル

    私のマイクロアレイの論文(Kadota et al., 2009)では、「データ正規化法」と「発現変動遺伝子検出法」の組合せに相性がある、ということを述べています。NGSデータ解析時にも同様な注意が必要です。

    ここでの入力データは「遺伝子発現行列」です。「raw countsのもの」か「正規化後」の遺伝子発現行列のどちらを入力データとして用いるのかは用いる方法によりますが、特に指定のない限り「raw countsのデータ」を入力として下さい。

    NGSデータは測定値が何回sequenceされたかというcount情報に基づくもので、digital gene expression (DGE)データなどと呼ばれます。 そして、生のカウントデータは当然ながら、integer (整数;小数点以下の数値を含むはずがない)です。 ある遺伝子由来のsequenceされたリード数は二項分布(binomial distribution)に従うと様々な論文中で言及されています。つまり、

    • 一般的な二項分布の説明:1(成功)か0(失敗)かのいずれかのn回の独立な試行を行ったときの1の数で表現される離散確率分布で、1が出る確率をpとしている。
    • NGSに置き換えた説明:マップされたトータルのリード数がnで、あるリードに着目したときにある特定の遺伝子由来のものである確率がp、ということになります。

    ポアソン分布(Poisson distribution)に従う、という記述もよくみかけますが本質的に同じ意味(ポアソン分布や正規分布は二項分布の近似)です。 つまり、nが大きいのがNGSの特徴であるので、pが小さくても、np(sequenceされたある特定の遺伝子由来のリード数の期待値、に相当; λ=np)がそこそこ大きな値になることが期待されるわけです。

    というわけですので、このような二項分布を仮定したモデルに基づく「発現変動遺伝子検出法」を用いる際には、 へたに正規化を行ってそのモデルを仮定することができなくなるような墓穴を掘ることはないでしょう、ということです。

    ちなみに「負の二項分布(negative bionomial distribution)」というキーワードを目にすることもあろうかと思いますが、これは二項分布の拡張版です。

    いわゆるtechnical variation (技術的なばらつき)は「ポアソン分布」として考えることができるが、 biological variation (生物学的なばらつき;もう少し正確にはbiological replicatesのvariation)は一般にそれよりも大きいので(サンプル間の変動係数(coefficient of variation; CV)を)additional variationとして取り扱うべく「負の二項(Negative Binomial; NB)分布」として考える必要性があるのでしょうね。(Robinson and Oshlack, 2010)

    technical replicatesとbiological replicatesの意味合い

    technical replicatesとbiological replicatesの意味合いについて、もうすこしざっくりと説明します。

    例えば「人間である私の体内の二つの組織間(例えば大脳(Brain; B)と皮膚(Skin; S))で発現変動している遺伝子を検出したい」という目的があったとします。 同じ組織でもばらつきを考慮する必要があるので大脳由来サンプルをいくつかに分割して(これがtechnical replicatesという意味)データを取得します。 皮膚由来サンプルについても同様です。これで得られたデータは(B1, B2, ...) vs. (S1, S2, ...)のようなreplicatesありのデータになります。 この私一個人のtechnical replicatesデータから発現変動遺伝子が得られたとします。 一般的に「私一個人内でのデータのばらつき(technical variation)」は「同じ人間だけど複数の別人の大脳(or 皮膚)由来サンプル間のばらつき(biological variation)」よりも小さいです。 ですので、technical replicates由来データで発現変動遺伝子(Differentially Expressed Genes; DEGs)を同定した結果は「そんなあほな!!」というくらいのDEGs数がレポートされます。 ここで注意しなければいけないのは、この結果は「私一個人の二つのサンプル間で発現変動している遺伝子がこれだけあった」ということを言っているだけで、 「(私が所属する)人間全般に言えることではない!」という点です。そしてもちろん一般には「私個人の事象についてではなく人間(ある特定の生物種)全般にいえる事象に興味がある」わけです。 それゆえ(biological replicatesのデータでないとユニバーサルな事象を理解するのが難しいために)ある程度理解が進んだ人はbiological replicatesが重要だと言っているわけです。

    「モデルだ〜分布だ〜」ということと「ユーザーがプログラムを実行して得られる結果(発現変動遺伝子数や特徴)」との関係

    「モデルだ〜分布だ〜」ということと「ユーザーがプログラムを実行して得られる結果(発現変動遺伝子数や特徴)」との関係についてですが、重要なのは「比較している二群間でどの程度差があれば発現変動していると判断するか?」です。

    これをうまく表現するために、同一サンプルの(biological) replicatesデータから発現変動していないデータがどの程度ばらついているかをまず見積もります。 (このときにどういう数式でばらつきを見積もるのか?というところでいろんな選択肢が存在するがために沢山のRパッケージが存在しうるというわけですが、、、まあこれはおいといて) 負の二項分布モデル(negative binomial model; NB model)では分散VARをVAR = MEAN + φMEAN^2という数式(φ > 0)で表現するのが一般的です。 ちなみにポアソンモデルというのはNBモデルのφ = 0の場合(つまりVAR = MEAN; ある遺伝子の平均発現量がわかるとその遺伝子の分散が概ね平均と同じ、という意味)です。 計算手順としては、同一サンプルの(biological) replicatesデータからφがどの程度の値かを見積もります(推定します)。 ここまでで「ある発現変動していない遺伝子(non-DEGs)の平均発現量がこれくらいのときの分散はこれくらい」という情報が得られます。 これで発現変動していないものの分布(モデル)が決まります。その後、比較する二つのサンプルのカウント(発現量)データを一緒にして分散を計算し、 non-DEGsの分布のどの程度の位置にいるか(p値)を計算し、形式的には帰無仮説(Null Hypothesis)を棄却するかどうかという手順を経てDEG or non-DEGの判定をします。

    用いる正規化法の違いが(non-DEGの)モデル構築にどう影響するか?どう関係するのか?

    用いる正規化法の違いが(non-DEGの)モデル構築にどう影響するか?どう関係するのか?についてですが、これは極めてシンプルで、DEGかどうかの判定をする際に「比較する二つのサンプルのカウント(発現量)データを一緒にして分散を計算し...」を行う際に、サンプル間の正規化がうまくできていなければバラツキ(分散)を正しく計算できません。

    ただそれだけですが、用いる正規化法次第で結果が大きく異なりうるのです(Robinson and Oshlack, 2010)。そして発現変動解析結果はその後の解析(GO解析など)にほとんどそのまま反映されますので私を含む多くのグループが正規化法の開発や性能評価といったあたりの研究を行っています。

    正規化 | についてのところでも述べていますが、大抵の場合、 パッケージ独自の「正規化法」と「発現変動遺伝子検出法」が実装されており、「どの正規化法を使うか?」ということが「どの発現変動遺伝子検出法を使うか?」ということよりも結果に与える影響が大きい(Bullard et al., 2010; Kadota et al., 2012; Garmire and Subramanian, 2012)ことがわかりつつあります。 従来のサンプル間正規化法(RPMやTMM法)は比較する二群間(G1群 vs. G2群)でDEG数に大きな偏りがないことを前提にしています。 つまり、「(G1群 >> G2群)のDEG数と(G1群 << G2群)のDEG数が同程度」という前提条件がありますが、実際には大きく偏りがある場合も想定すべきで、偏りがあるなしにかかわらずロバストに正規化を行ってくれるのがTbT正規化法(Kadota et al., 2012)です。 偏りがあるなしの主な原因はDEGの分布にあるわけです。よって、TbT論文では、「正規化中にDEG検出を行い、DEGを除き、non-DEGのみで再度正規化係数を決める」というDEG elimination strategyに基づく正規化法を提案しています。 そして、TbT法を含むDEG elimination strategyに基づくいくつかの正規化法をTCCというRパッケージ中に実装しています(TCC論文中ではこの戦略をDEGES「でげす」と呼んでいます; Sun et al., 2013)。TCCパッケージ中に実装されている主な方法および入力データは以下の通りです:

    1. DEGES/TbT:オリジナルのTbT法そのもの。TMM-baySeq-TMMという3ステップで正規化を行う方法。step 2のDEG同定のところで計算時間のかかるbaySeqを採用しているため、他のパッケージでは数秒で終わる正規化ステップが数十分程度はかかるのがネック。また、biological replicatesがあることを前提としている。(A1, A2, ...) vs. (B1, B2, ...)のようなデータという意味。
    2. iDEGES/edgeR:DEGES/TbT法の超高速版(100倍程度高速)。TMM-(edgeR-TMM)nというステップで正規化を行う方法(デフォルトはn = 3)。step 2のDEG同定のところでedgeRパッケージ中のexact test (Robinson and Smyth, 2008)を採用しているためDEG同定の高速化が可能。
      したがって、(step2 - step3)のサイクルをiterative (それゆえDEGESの頭にiterativeの意味を示すiがついたiDEGESとなっている)に行ってよりロバストな正規化係数を得ることが理論的に可能な方法です。 それゆえreplicatesのある二群間比較を行いたい場合にはDEGES/TbTよりもiDEGES/edgeRのほうがおすすめ。
    3. iDEGES/DESeq:一連のmulti-stepの正規化手順をすべてDESeqパッケージ中の関数のみで実装したパイプライン。複製実験のない二群間比較時(i.e., A1 vs. B1など)にはこちらを利用します。

    TCCパッケージでは、内部的にedgeR, baySeq, DESeqを利用しています。

    解析 | 発現変動 | 2群間 | 対応なし | について

    実験デザインが以下のような場合にこのカテゴリーに属す方法を適用します:

    Aさんの正常サンプル
    Bさんの正常サンプル
    Cさんの正常サンプル
    Dさんの腫瘍サンプル
    Eさんの腫瘍サンプル
    Fさんの腫瘍サンプル
    Gさんの腫瘍サンプル

    2014年7月に調査した結果をリストアップします。

    Review、ガイドライン、パイプライン系:

    解析 | 発現変動 | 2群間 | 対応なし | 複製あり | TCC (Sun_2013)

    TCCを用いたやり方を示します。

    内部的にiDEGES/edgeR(Sun_2013)正規化を実行したのち、 edgeRパッケージ中のexact testで発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行っています。TCC原著論文中のiDEGES/edgeR-edgeRという解析パイプラインに相当します。 全てTCCパッケージ(Sun et al., BMC Bioinformatics, 2013)内で完結します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge1.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge1.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(400, 380)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    正規化後のテキストファイルデータを出力し、平均-分散プロットのpngファイルを出力しています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge2.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge2.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(380, 420)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), normalized, result)#正規化後のデータの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(平均-分散プロット)
    hoge <- normalized                     #正規化後のデータをhogeに格納
    MEAN <- apply(hoge, 1, mean)           #各行の平均を計算した結果をMEANに格納
    VARIANCE <- apply(hoge, 1, var)        #各行の分散を計算した結果をVARIANCEに格納
    
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(MEAN, VARIANCE, log="xy", pch=20, cex=.1,#プロット
         xlim=c(1e-02, 1e+08), ylim=c(1e-02, 1e+08), col="black")#プロット
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    abline(a=0, b=1, col="gray")           #y=xの直線を指定した色で追加(y=a+bxのa=0, b=1)
    obj <- (result$q.value < param_FDR)    #条件を満たすかどうかを判定した結果をobjに格納
    points(MEAN[obj], VARIANCE[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    	

    3. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    DEG検出後に任意のFDR閾値を満たす遺伝子数を調べたり、色分けしたりx, y軸の範囲を限定するなどする様々なテクニックを示しています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.1                       #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_nonDEG <- 2001:10000             #non-DEGの位置を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    
    #後処理(様々な情報を得ている)
    sum(tcc$estimatedDEG)                  #param_FDRのところで指定した閾値を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    sum(tcc$DEGES$potentialDEG)            #DEGES正規化のstep2でpotential DEGと判定された数を表示
    tcc$norm.factors                       #DEGES正規化係数を表示(この係数を用いてDEG検出を行っている)
    
    #ファイルに保存(全遺伝子でM-A plot)
    out_f1 <- "hoge3_all_010.png"           #出力ファイル名を指定してout_f1に格納
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    A <- getResult(tcc)$a.value            #M-A plotのA値を抽出
    png(out_f1, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         xlim=c(-2, 16), ylim=c(-8, 6), pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    obj <- tcc$stat$q.value < param_FDR    #条件を満たすかどうかを判定した結果をobjに格納
    points(A[obj], M[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(M[obj] < 0)                        #FDR < 0.10を満たものの中でM < 0(G1群で高発現)となる遺伝子数を表示
    sum(M[obj] > 0)                        #FDR < 0.10を満たものの中でM > 0(G2群で高発現)となる遺伝子数を表示
    
    #ファイルに保存(non-DEGデータのみでM-A plot; FDR < 0.1)
    tcc <- tcc[param_nonDEG]               #non-DEGデータ情報のみ抽出
    out_f2 <- "hoge3_nonDEG_010.png"       #出力ファイル名を指定してout_f2に格納
    
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    A <- getResult(tcc)$a.value            #M-A plotのA値を抽出
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         xlim=c(-2, 16), ylim=c(-8, 6), pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    obj <- tcc$stat$q.value < param_FDR    #条件を満たすかどうかを判定した結果をobjに格納
    points(A[obj], M[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(M[obj] < 0)                        #FDR < 0.10を満たものの中でM < 0(G1群で高発現)となる遺伝子数を表示
    sum(M[obj] > 0)                        #FDR < 0.10を満たものの中でM > 0(G2群で高発現)となる遺伝子数を表示
    
    #ファイルに保存(non-DEGデータのみでM-A plot; FDR < 0.2)
    param_FDR <- 0.2                       #DEG検出時のfalse discovery rate (FDR)閾値を指定
    out_f3 <- "hoge3_nonDEG_020.png"       #出力ファイル名を指定してout_f3に格納
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    A <- getResult(tcc)$a.value            #M-A plotのA値を抽出
    png(out_f3, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         xlim=c(-2, 16), ylim=c(-8, 6), pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    obj <- tcc$stat$q.value < param_FDR    #条件を満たすかどうかを判定した結果をobjに格納
    points(A[obj], M[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(M[obj] < 0)                        #FDR < 0.10を満たものの中でM < 0(G1群で高発現)となる遺伝子数を表示
    sum(M[obj] > 0)                        #FDR < 0.10を満たものの中でM > 0(G2群で高発現)となる遺伝子数を表示
    
    #ファイルに保存(non-DEGデータのみでM-A plot; FDR < 0.4)
    param_FDR <- 0.4                       #DEG検出時のfalse discovery rate (FDR)閾値を指定
    out_f4 <- "hoge3_nonDEG_040.png"       #出力ファイル名を指定してout_f4に格納
    
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    A <- getResult(tcc)$a.value            #M-A plotのA値を抽出
    png(out_f4, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         xlim=c(-2, 16), ylim=c(-8, 6), pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    obj <- tcc$stat$q.value < param_FDR    #条件を満たすかどうかを判定した結果をobjに格納
    points(A[obj], M[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(M[obj] < 0)                        #FDR < 0.10を満たものの中でM < 0(G1群で高発現)となる遺伝子数を表示
    sum(M[obj] > 0)                        #FDR < 0.10を満たものの中でM > 0(G2群で高発現)となる遺伝子数を表示
    
    #ファイルに保存(non-DEGデータのみでM-A plot; FDR < 0.6)
    param_FDR <- 0.6                       #DEG検出時のfalse discovery rate (FDR)閾値を指定
    out_f5 <- "hoge3_nonDEG_060.png"        #出力ファイル名を指定してout_f5に格納
    
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    A <- getResult(tcc)$a.value            #M-A plotのA値を抽出
    png(out_f5, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(A, M, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)",#M-A plotを描画
         xlim=c(-2, 16), ylim=c(-8, 6), pch=20, cex=.1)#M-A plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    obj <- tcc$stat$q.value < param_FDR    #条件を満たすかどうかを判定した結果をobjに格納
    points(A[obj], M[obj], col="magenta", cex=0.1, pch=20)#objがTRUEとなる要素のみ指定した色で描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(M[obj] < 0)                        #FDR < 0.10を満たものの中でM < 0(G1群で高発現)となる遺伝子数を表示
    sum(M[obj] > 0)                        #FDR < 0.10を満たものの中でM > 0(G2群で高発現)となる遺伝子数を表示
    	

    4. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の場合:

    「FDR閾値を満たすもの」と「fold-change閾値を満たすもの」それぞれのM-A plotを作成しています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge4.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge4_FDR.png"              #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge4_FC.png"               #出力ファイル名を指定してout_f3に格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot; FDR)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR, xlim=c(-3, 13), ylim=c(-10, 10))#param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("bottomright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    
    #ファイルに保存(M-A plot; fold-change)
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    hoge <- rep(1, length(M))              #初期値を1にしたベクトルhogeを作成
    hoge[abs(M) > log2(param_FC)] <- 2     #条件を満たす位置に2を代入
    cols <- c("black", "magenta")          #色情報を指定してcolsに格納
    
    png(out_f3, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, col=cols, col.tag=hoge, xlim=c(-3, 13), ylim=c(-10, 10))#M-A plotを描画
    legend("bottomright", c(paste("DEG(", param_FC, "-fold)", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(abs(M) > log2(16))                 #16倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(8))                  #8倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(4))                  #4倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(2))                  #2倍以上発現変動する遺伝子数を表示
    	

    5. サンプルデータ4の18,110 genes×10 samplesのリアルデータ(data_marioni.txt; kidney 5サンプル vs. liver 5サンプル)の最初の4サンプルを比較する場合:

    「FDR閾値を満たすもの」と「fold-change閾値を満たすもの」それぞれのM-A plotを作成しています。

    in_f <- "data_marioni.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge5.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge5_FDR.png"              #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge5_FC.png"               #出力ファイル名を指定してout_f3に格納
    param_G1 <- 2                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 2                          #G2群(liver)のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(サブセットの抽出)
    data <- data[,1:(param_G1+param_G2)]   #最初の(param_G1+param_G2)列分のデータを抽出している
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot; FDR)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR, xlim=c(-3, 13), ylim=c(-10, 10))#param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("bottomright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    
    #ファイルに保存(M-A plot; fold-change)
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    hoge <- rep(1, length(M))              #初期値を1にしたベクトルhogeを作成
    hoge[abs(M) > log2(param_FC)] <- 2     #条件を満たす位置に2を代入
    cols <- c("black", "magenta")          #色情報を指定してcolsに格納
    
    png(out_f3, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, col=cols, col.tag=hoge, xlim=c(-3, 13), ylim=c(-10, 10))#M-A plotを描画
    legend("bottomright", c(paste("DEG(", param_FC, "-fold)", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(abs(M) > log2(16))                 #16倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(8))                  #8倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(4))                  #4倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(2))                  #2倍以上発現変動する遺伝子数を表示
    	

    6. サンプルデータ8の26,221 genes×6 samplesのリアルデータ(data_arab.txt; mock 3サンプル vs. hrcc 3サンプル)の場合:

    「FDR閾値を満たすもの」と「fold-change閾値を満たすもの」それぞれのM-A plotを作成しています。

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge6.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge6_FDR.png"              #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge6_FC.png"               #出力ファイル名を指定してout_f3に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(サブセットの抽出)
    data <- data[,1:(param_G1+param_G2)]   #最初の(param_G1+param_G2)列分のデータを抽出している
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot; FDR)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR, xlim=c(-3, 13), ylim=c(-10, 10))#param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("bottomright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    
    #ファイルに保存(M-A plot; fold-change)
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    hoge <- rep(1, length(M))              #初期値を1にしたベクトルhogeを作成
    hoge[abs(M) > log2(param_FC)] <- 2     #条件を満たす位置に2を代入
    cols <- c("black", "magenta")          #色情報を指定してcolsに格納
    
    png(out_f3, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, col=cols, col.tag=hoge, xlim=c(-3, 13), ylim=c(-10, 10))#M-A plotを描画
    legend("bottomright", c(paste("DEG(", param_FC, "-fold)", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(abs(M) > log2(16))                 #16倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(8))                  #8倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(4))                  #4倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(2))                  #2倍以上発現変動する遺伝子数を表示
    	

    7. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    1.と基本的に同じで、出力のテキストファイルが正規化前のデータではなく正規化後のデータになっていて、発現変動順にソートしたものになっています。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge7.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge7.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(400, 380)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), normalized, result)#正規化後のデータの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- tmp[order(tmp$rank),]           #発現変動順にソートした結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    	

    解析 | 発現変動 | 2群間 | 対応なし | 複製あり | edgeR(Robinson_2010)

    edgeRパッケージを用いて発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描くやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #MA-plotを描画
    plotSmear(d)                           #MA-plotの基本形(縦軸(M):log-ratio, 横軸(A):全体的な発現レベル)
    	

    3. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、FDR < 0.05を満たすものを赤色で示すやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #MA-plotを描画
    hoge <- rownames(data)[q.value < param_FDR]#指定したFDRの閾値を満たす遺伝子名情報をhogeに格納
    plotSmear(d, de.tags=hoge)             #MA-plotの基本形に加え、発現変動遺伝子に相当する
    length(hoge)                           #発現変動遺伝子数を表示
    length(hoge)/nrow(data)                #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    4. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、FDR値で発現変動順に並べた上位300個を赤色で示すやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- 300                          #MA-plot描画時の赤色で示す上位遺伝子数の閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #MA-plotを描画
    hoge <- rownames(data)[ranking <= param3]#param3で指定した個数の上位遺伝子の遺伝子名情報をhogeに格納
    plotSmear(d, de.tags=hoge)             #MA-plotの基本形に加え、発現変動遺伝子に相当する
    length(hoge)                           #発現変動遺伝子数を表示
    length(hoge)/nrow(data)                #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    5. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、2倍以上発現変化しているものを赤色で示すやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- 2                            #MA-plot描画時の倍率変化の閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #MA-plotを描画
    hoge <- rownames(data)[abs(out$table$logFC) >= log2(param3)]#param3で指定した倍率変化の閾値を満たす遺伝子名情報をhogeに格納
    plotSmear(d, de.tags=hoge)             #MA-plotの基本形に加え、発現変動遺伝子に相当する
    length(hoge)                           #発現変動遺伝子数を表示
    length(hoge)/nrow(data)                #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    6. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、MA-plotで大きさを指定してpng形式ファイルに保存するやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge6.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge6.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- 2                            #MA-plot描画時の倍率変化の閾値を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #MA-plotを描画
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hoge <- rownames(data)[abs(out$table$logFC) >= log2(param3)]#param3で指定した倍率変化の閾値を満たす遺伝子名情報をhogeに格納
    plotSmear(d, de.tags=hoge)             #MA-plotの基本形に加え、発現変動遺伝子に相当する
    dev.off()                              #おまじない
    length(hoge)                           #発現変動遺伝子数を表示
    length(hoge)/nrow(data)                #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    7. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、FDR < 0.01を満たすものを赤色で示したMA-plotをファイルに保存するやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge7.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge7.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.01                      #MA-plot描画時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    #write.table(tmp[order(ranking),], out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存(発現変動順にソートしたいとき)
    
    #MA-plotを描画
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    hoge <- rownames(data)[q.value < param_FDR]#指定したFDRの閾値を満たす遺伝子名情報をhogeに格納
    plotSmear(d, de.tags=hoge)             #MA-plotの基本形に加え、発現変動遺伝子に相当する
    dev.off()                              #おまじない
    length(hoge)                           #発現変動遺伝子数を表示
    length(hoge)/nrow(data)                #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    8. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、FDR < 0.01を満たすものを赤色で示したMA-plotをファイルに保存するやり方です。 基本は7と同じで、MA-plotの描画をplotSmear関数を用いないで行うやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge8.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge8.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.01                      #MA-plot描画時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (q.value < param_FDR)      #指定した閾値未満のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A=(log2(G2)+log2(G1))/2", ylab="M=log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    9. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    MA-plotも描き、FDR < 0.01を満たすものを赤色で示したMA-plotをファイルに保存するやり方です。 基本は8と同じで、MA-plotの描画をRPMではなくTMM正規化後のデータで行うやり方です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge9.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge9.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.01                      #MA-plot描画時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #edgeRを用いてDEGの検出を実行
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateCommonDisp(d)             #the quantile-adjusted conditional maximum likelihood (qCML)法でcommon dispersionを計算している
    d <- estimateTagwiseDisp(d)            #the quantile-adjusted conditional maximum likelihood (qCML)法でmoderated tagwise dispersionを計算している
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化係数を計算
    norm_f_TMM <- d$samples$norm.factors   #TMM正規化係数の情報を抽出してnorm_f_TMMに格納
    names(norm_f_TMM) <- colnames(data)    #norm_f_TMMのnames属性をcolnames(data)で与えている
    effective_libsizes <- colSums(data) * norm_f_TMM#effective library sizesというのはlibrary sizesに(TMM)正規化係数を掛けたものなのでそれを計算した結果をeffective_libsizesに格納
    RPM_TMM <- sweep(data, 2, 1000000/effective_libsizes, "*")#元のカウントデータをeffective_libsizesで割り(RPMデータと同程度の数値分布にしたいので)1000000を掛けた正規化後のデータをRPM_TMMに格納
    
    data <- RPM_TMM                        #RPM_TMMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_edgeR < param_FDR)      #指定した閾値未満のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A=(log2(G2)+log2(G1))/2", ylab="M=log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    解析 | 発現変動 | 2群間 | 対応なし | 複製あり | SAMseq(Li_2013)

    samrパッケージ中のSAMseq (Li and Tibshirani, 2013)を用いて 発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(samr)                          #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(DEG検出)
    out <- SAMseq(data, data.cl, resp.type="Two class unpaired")#DEG検出を実行した結果をoutに格納
    p.value <- samr.pvalues.from.perms(out$samr.obj$tt, out$samr.obj$ttstar)#p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < 0.10)                    #FDR < 0.10を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納。
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    このDEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    
    #必要なパッケージをロード
    library(samr)                          #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(DEG検出)
    out <- SAMseq(data, data.cl, resp.type="Two class unpaired")#DEG検出を実行した結果をoutに格納
    p.value <- samr.pvalues.from.perms(out$samr.obj$tt, out$samr.obj$ttstar)#p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < 0.10)                    #FDR < 0.10を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納。
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #後処理(AUC値の計算)
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    3. サンプルデータ13と同じ10,000 genes×6 samplesのシミュレーションデータの作成から行う場合:

    「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3」の計6サンプル分からなります。 全10,000遺伝子中の最初の2,000個(gene_1〜gene_2000まで)が発現変動遺伝子(DEG)です。 全2,000 DEGsの内訳:最初の90%分(gene_1〜gene_1800)がG1群で4倍高発現、残りの10%分(gene_1801〜gene_2000)がG2群で4倍高発現

    このDEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    library(samr)                          #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #シミュレーションデータの作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene=10000, PDEG=0.2,#シミュレーションデータの作成
                 DEG.assign=c(0.9, 0.1),   #シミュレーションデータの作成
                 DEG.foldchange=c(4, 4),   #シミュレーションデータの作成
                 replicates=c(3, 3))       #シミュレーションデータの作成
    data <- tcc$count                      #カウントデータ情報をdataに格納
    data.cl <- tcc$group$group             #G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(DEG検出)
    out <- SAMseq(data, data.cl, resp.type="Two class unpaired")#DEG検出を実行した結果をoutに格納
    p.value <- samr.pvalues.from.perms(out$samr.obj$tt, out$samr.obj$ttstar)#p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < 0.10)                    #FDR < 0.10を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納。
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #後処理(AUC値の計算)
    obj <- as.numeric(tcc$simulation$trueDEG != 0)#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    4. サンプルデータ13と同じ10,000 genes×6 samplesのシミュレーションデータの作成から行う場合:

    「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3」の計6サンプル分からなります。 全10,000遺伝子中の最初の2,000個(gene_1〜gene_2000まで)が発現変動遺伝子(DEG)です。 全2,000 DEGsの内訳:最初の90%分(gene_1〜gene_1800)がG1群で4倍高発現、残りの10%分(gene_1801〜gene_2000)がG2群で4倍高発現

    このDEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。 samrパッケージではなくTCCパッケージを用いています。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    library(samr)                          #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #シミュレーションデータの作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene=10000, PDEG=0.2,#シミュレーションデータの作成
                 DEG.assign=c(0.9, 0.1),   #シミュレーションデータの作成
                 DEG.foldchange=c(4, 4),   #シミュレーションデータの作成
                 replicates=c(3, 3))       #シミュレーションデータの作成
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="samseq")#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(q.value < 0.10)                    #FDR < 0.10を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #後処理(AUC値の計算)
    calcAUCValue(tcc)                      #AUC計算
    	

    解析 | 発現変動 | 2群間 | 対応なし | 複製なし | TCC (Sun_2013)

    TCCを用いたやり方を示します。

    内部的にiDEGES/DESeq(Sun_2013)正規化を実行したのち、 DESeqパッケージ中のnegative binomial testで発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行っています。 TCC原著論文中のiDEGES/DESeq-DESeqという解析パイプラインに相当します。 全てTCCパッケージ内で完結します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", test.method="deseq",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    head(result, n=3)                      #確認してるだけです(最初の3遺伝子分を表示)
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画したり、 このDEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", test.method="deseq",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    head(result, n=3)                      #確認してるだけです(最初の3遺伝子分を表示)
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #正規化後のデータでM-A plotを描画
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    
    #AUC値の計算
    ranking <- tcc$stat$rank               #順位情報をrankingに格納
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    3. サンプルデータ8の26,221 genes×6 samplesのリアルデータ(data_arab.txt; mock 3サンプル vs. hrcc 3サンプル)の場合:

    mock群の1番目(mock1)と3番目(mock3)のサブセットを抽出して複製なしデータとして取り扱っています。

    「FDR閾値を満たすもの」と「fold-change閾値を満たすもの」それぞれのM-A plotを作成しています。

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge3.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge3_FDR.png"              #出力ファイル名を指定してout_f2に格納
    out_f3 <- "hoge3_FC.png"               #出力ファイル名を指定してout_f3に格納
    param_subset <- c(1, 3)                #取り扱いたいサブセット情報を指定
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    param_fig <- c(400, 380)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(サブセットの抽出とTCCクラスオブジェクトの作成)
    data <-data[,param_subset]             #param_subsetで指定した列の情報のみ抽出
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", test.method="deseq",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    head(result, n=3)                      #確認してるだけです(最初の3遺伝子分を表示)
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot; FDR)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR, xlim=c(-3, 13), ylim=c(-10, 10))#param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("bottomright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    
    #ファイルに保存(M-A plot; fold-change)
    param_FC <- 2                          #fold-change閾値(param_FC倍)を指定
    M <- getResult(tcc)$m.value            #M-A plotのM値を抽出
    hoge <- rep(1, length(M))              #初期値を1にしたベクトルhogeを作成
    hoge[abs(M) > log2(param_FC)] <- 2     #条件を満たす位置に2を代入
    cols <- c("black", "magenta")          #色情報を指定してcolsに格納
    
    png(out_f3, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, col=cols, col.tag=hoge, xlim=c(-3, 13), ylim=c(-10, 10))#M-A plotを描画
    legend("bottomright", c(paste("DEG(", param_FC, "-fold)", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(abs(M) > log2(16))                 #16倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(8))                  #8倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(4))                  #4倍以上発現変動する遺伝子数を表示
    sum(abs(M) > log2(2))                  #2倍以上発現変動する遺伝子数を表示
    	

    4. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    1.と基本的に同じで、出力のテキストファイルが正規化前のデータではなく正規化後のデータになっていて、発現変動順にソートしたものになっています。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge4.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge4.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(400, 380)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", test.method="deseq",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), normalized, result)#正規化後のデータの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- tmp[order(tmp$rank),]           #発現変動順にソートした結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
    	

    解析 | 発現変動 | 2群間 | 対応なし | 複製なし | DESeq (Anders_2010)

    Anders and Huberの(AH)正規化(Anders_2010)を実行したのち、 DESeqパッケージ中のnegative binomial testで発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うDESeqパッケージ内のオリジナルの手順を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(Anders and Huberの(AH)正規化)
    cds <- newCountDataSet(data, data.cl)  #CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算し、結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factorsです(1.049957, 0.952420)
    
    #本番(DEG検出)
    cds <- estimateDispersions(cds, method="blind", sharingMode="fit-only")#モデル構築
    out <- nbinomTest(cds, 1, 2)           #発現変動の各種統計量を計算し、結果をoutに格納
    p.value <- out$pval                    #p-valueをp.valueに格納
    p.value[is.na(p.value)] <- 1           #NAを1に置換している
    q.value <- out$padj                    #adjusted p-valueをq.valueに格納
    q.value[is.na(q.value)] <- 1           #NAを1に置換している
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    logratio <- out$log2FoldChange         #log2(B/A)統計量をlogratioに格納
    head(out, n=3)                         #確認してるだけです(最初の3遺伝子分を表示)
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking, logratio)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画したり、 このDEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    param_FDR <- 0.1                       #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(Anders and Huberの(AH)正規化)
    cds <- newCountDataSet(data, data.cl)  #CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算し、結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factorsです(1.049957, 0.952420)
    
    #本番(DEG検出)
    cds <- estimateDispersions(cds, method="blind", sharingMode="fit-only")#モデル構築
    out <- nbinomTest(cds, 1, 2)           #発現変動の各種統計量を計算し、結果をoutに格納
    p.value <- out$pval                    #p-valueをp.valueに格納
    p.value[is.na(p.value)] <- 1           #NAを1に置換している
    q.value <- out$padj                    #adjusted p-valueをq.valueに格納
    q.value[is.na(q.value)] <- 1           #NAを1に置換している
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    logratio <- out$log2FoldChange         #log2(B/A)統計量をlogratioに格納
    head(out, n=3)                         #確認してるだけです(最初の3遺伝子分を表示)
    sum(q.value < param_FDR)                 #指定したFDR閾値を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking, logratio)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #正規化後のデータでM-A plotを描画
    plotMA(out)                            #指定したFDR閾値を満たすDEGを赤としてM-A plotを描画
    
    #AUC値の計算
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    3. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    TCCパッケージを用いて同様の解析を行うやり方です。出力ファイルのa.value列がlogratioに相当し、q.value列上でFDR閾値を決めます。

    (内部的な細かい話ですが...)estimateDispersions関数実行時に、fitType="parametric"を最初に試して、エラーが出たら自動的に"local"に変更しています。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.10                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc,iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, FDR=param_FDR)  #DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    head(result, n=3)                      #確認してるだけです(最初の3遺伝子分を表示)
    sum(tcc$stat$q.value < param_FDR)      #指定したFDR閾値を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    TCCパッケージを用いて同様の解析を行うやり方です。出力ファイルのa.value列がlogratioに相当し、q.value列上でFDR閾値を決めます。

    (内部的な細かい話ですが...)estimateDispersions関数実行時に、fitType="parametric"を最初に試して、エラーが出たら自動的に"local"に変更しています。

    param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画したり、 このDEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.10                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc,iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, FDR=param_FDR)  #DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    head(result, n=3)                      #確認してるだけです(最初の3遺伝子分を表示)
    sum(tcc$stat$q.value < param_FDR)      #指定したFDR閾値を満たす遺伝子数を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #正規化後のデータでM-A plotを描画
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    
    #AUC値の計算
    ranking <- tcc$stat$rank               #順位情報をrankingに格納
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    解析 | 発現変動 | 2群間 | 対応なし | 複製なし | edgeR(Robinson_2010)

    edgeRパッケージを用いて発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ14の10,000 genes×2 samplesのカウントデータ(data_hypodata_1vs1.txt)の場合:

    シミュレーションデータ(G1群1サンプル vs. G2群1サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_1vs1.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 1                          #G1群のサンプル数を指定
    param_G2 <- 1                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データの型をmatrixにしている
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番
    d <- DGEList(counts=data,group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化を実行
    d <- estimateGLMCommonDisp(d, method="deviance", robust=TRUE, subset=NULL)#モデル構築
    out <- exactTest(d)                    #exact test (正確確率検定)で発現変動遺伝子を計算した結果をoutに格納
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 発現変動 | 2群間 | BitSeq (Glaus_2012)

    BitSeqのやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    #必要なパッケージをロード
    library(BitSeq)                        #パッケージの読み込み
    	

    解析 | 発現変動 | 2群間 | DSS (Wu_201X)

    DSS (Dispersion Shrinkage for Sequencing)のやり方を示します。二群間比較用です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    #必要なパッケージをロード
    library(DSS)                           #パッケージの読み込み
    	

    解析 | 発現変動 | 2群間 | NOISeq (Tarazona_2011)

    NOISeq(参考文献1)のやり方を示します。二群間比較用です。

    ここでは、以下の3つのデータセットに対するやり方を示します:

    1. Technical replicatesデータ(G1群5サンプル vs. G2群5サンプル)
    2. Biological replicatesデータ(G1群3サンプル vs. G2群3サンプル: data_arab.txt)
    3. Biological replicatesシミュレーションデータ(G1群3サンプル vs. G2群3サンプル: simdata_3vs3.txt)

    Technical replicatesのほうは、サンプルデータ2のSupplementaryTable2_changed.txtのデータです。

    Biological replicatesのほうは、NBPSeqパッケージに同梱されているArabidopsis(シロイヌナズナ)のデータ(サンプルデータ8のdata_arab.txt)です。

    この方法は負の二項分布(negative-binomial distribution;biological replicates用)やポアソン分布(Poisson distribution;technical replicates用)などの何らかの分布を仮定したパラメトリックな方法(edgeR, DESeq, baySeq, NBPSeq, GPseqなどが該当)とは異なり、ノンパラメトリックな方法です。

    replicateがないデータ(G1群1サンプル vs. G2群1サンプル)場合には(technical replicatesを想定して?!)noise distributionを作成し、replicatesがある場合には同一群内のデータを用いてnoise distributionを作成することでDEG or non-DEGの判定をするような仕組みになっています。

    また、この方法は転写物の長さ情報も(RPKM補正後のデータを使いたい場合には)使います。マニュアル中にはここでは長さ情報がない場合には"NA"という情報を含むファイル(SupplementaryTable2_changed_length.txt)を入力として与えるという選択肢を提供していますが、私が2012/06/19に試した限りではうまく動きません。 よって、以下では長さ情報を含むファイルを読み込まずに実行するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. Technical replicatesデータ(G1群5サンプル vs. G2群5サンプル)の場合(データの正規化はTMM法を採用する場合):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge1.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge1.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- "tech"                       #replicatesのタイプを指定。入力データがtechnical replicatesの場合は"tech"を、biological replicatesの場合は"bio"を指定
    param4 <- "tmm"                        #データ正規化手段を指定。Upper Quartile値を揃える場合は"uqua"を、TMM正規化法を採用する場合には"tmm"を、(転写物の長さ情報がある場合には1000bpに揃えて)総リード数が100万になるようにしたい場合には"rpkm"を、データ正規化を行わない場合には"n"を指定
    param5 <- 0.8                          #DEGとみなすProbability(1に近いほどより厳しい閾値に相当)を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    source("http://bioinfo.cipf.es/noiseq/lib/exe/fetch.php?media=noiseq.r")#NOISeqを利用するための関数をロード
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- readData(file=in_f, header=TRUE, cond1=c(2:(param_G1+1)), cond2=c((param_G1+2):(param_G1+1+param_G2)))#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    RAW <- cbind(data[[1]], data[[2]])     #結果の出力時にG1群G2群の別々に分かれた状態になっているのをまとめたものをRAWに格納(出力時により簡便に取り扱うためのおまじない)
    rownames(RAW) <- rownames(data[[1]])   #RAWの行名を読み込んだ発現データファイルの一列目の情報で与えている
    
    #NOISeq本番
    out <- noiseq(data[[1]], data[[2]], repl=param3, norm=param4, long=1000, q=param5, nss=0, lc=1, k=0.5)#NOISeqを実行した結果をoutに格納
    
    #得られた統計量や順位情報などを抽出してファイル出力
    stat_NOISeq <- out$probab              #DEGとみなす確率(1に近いほど発現変動の度合いが大きくて0に近いほどnon-DEG。ここではq=0.8と指定しているので、Probabilityが0.8以上のものがDEGとされていることになる)をstat_NOISeqに格納
    stat_NOISeq <- ifelse(is.na(stat_NOISeq), 0, stat_NOISeq)#NAを0に置換している(全部の数値が0で計算できないようなものがNAとなり、これらはDEGとは言えないのでProbabilityの値を0にしたいという思想です)
    rank_NOISeq <- rank(-stat_NOISeq)      #stat_NOISeqでランキングした結果をrank_NOISeqに格納
    hoge <- cbind(rownames(RAW), RAW, stat_NOISeq, rank_NOISeq)#入力データの右側に、「stat_NOISeq」と「rank_NOISeq」を結合した結果をtmpに格納
    tmp <- hoge[order(rank_NOISeq),]       #発現変動の度合いでソートした結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NOISeq > param5)     #param5で指定した閾値以上のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    
    #おまけ
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    2. Biological replicatesデータ(G1群3サンプル vs. G2群3サンプル)の場合:

    in_f <- "data_arab.txt"                #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge2.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge2.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- "bio"                        #replicatesのタイプを指定。入力データがtechnical replicatesの場合は"tech"を、biological replicatesの場合は"bio"を指定
    param4 <- "tmm"                        #データ正規化手段を指定。Upper Quartile値を揃える場合は"uqua"を、TMM正規化法を採用する場合には"tmm"を、(転写物の長さ情報がある場合には1000bpに揃えて)総リード数が100万になるようにしたい場合には"rpkm"を、データ正規化を行わない場合には"n"を指定
    param5 <- 0.8                          #DEGとみなすProbability(1に近いほどより厳しい閾値に相当)を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    source("http://bioinfo.cipf.es/noiseq/lib/exe/fetch.php?media=noiseq.r")#NOISeqを利用するための関数をロード
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- readData(file=in_f, header=TRUE, cond1=c(2:(param_G1+1)), cond2=c((param_G1+2):(param_G1+1+param_G2)))#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    RAW <- cbind(data[[1]], data[[2]])     #結果の出力時にG1群G2群の別々に分かれた状態になっているのをまとめたものをRAWに格納(出力時により簡便に取り扱うためのおまじない)
    rownames(RAW) <- rownames(data[[1]])   #RAWの行名を読み込んだ発現データファイルの一列目の情報で与えている
    
    #NOISeq本番
    out <- noiseq(data[[1]], data[[2]], repl=param3, norm=param4, long=1000, q=param5, nss=0, lc=1, k=0.5)#NOISeqを実行した結果をoutに格納
    
    #得られた統計量や順位情報などを抽出してファイル出力
    stat_NOISeq <- out$probab              #DEGとみなす確率(1に近いほど発現変動の度合いが大きくて0に近いほどnon-DEG。ここではq=0.8と指定しているので、Probabilityが0.8以上のものがDEGとされていることになる)をstat_NOISeqに格納
    stat_NOISeq <- ifelse(is.na(stat_NOISeq), 0, stat_NOISeq)#NAを0に置換している(全部の数値が0で計算できないようなものがNAとなり、これらはDEGとは言えないのでProbabilityの値を0にしたいという思想です)
    rank_NOISeq <- rank(-stat_NOISeq)      #stat_NOISeqでランキングした結果をrank_NOISeqに格納
    hoge <- cbind(rownames(RAW), RAW, stat_NOISeq, rank_NOISeq)#入力データの右側に、「stat_NOISeq」と「rank_NOISeq」を結合した結果をtmpに格納
    tmp <- hoge[order(rank_NOISeq),]       #発現変動の度合いでソートした結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NOISeq > param5)     #param5で指定した閾値以上のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    
    #おまけ
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    3. Biological replicatesのシミュレーションデータデータ(G1群3サンプル vs. G2群3サンプル、simdata_3vs3.txt)の場合:

    in_f <- "simdata_3vs3.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge3.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge3.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- "bio"                        #replicatesのタイプを指定。入力データがtechnical replicatesの場合は"tech"を、biological replicatesの場合は"bio"を指定
    param4 <- "tmm"                        #データ正規化手段を指定。Upper Quartile値を揃える場合は"uqua"を、TMM正規化法を採用する場合には"tmm"を、(転写物の長さ情報がある場合には1000bpに揃えて)総リード数が100万になるようにしたい場合には"rpkm"を、データ正規化を行わない場合には"n"を指定
    param5 <- 0.8                          #DEGとみなすProbability(1に近いほどより厳しい閾値に相当)を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    source("http://bioinfo.cipf.es/noiseq/lib/exe/fetch.php?media=noiseq.r")#NOISeqを利用するための関数をロード
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- readData(file=in_f, header=TRUE, cond1=c(2:(param_G1+1)), cond2=c((param_G1+2):(param_G1+1+param_G2)))#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    RAW <- cbind(data[[1]], data[[2]])     #結果の出力時にG1群G2群の別々に分かれた状態になっているのをまとめたものをRAWに格納(出力時により簡便に取り扱うためのおまじない)
    rownames(RAW) <- rownames(data[[1]])   #RAWの行名を読み込んだ発現データファイルの一列目の情報で与えている
    
    #NOISeq本番
    out <- noiseq(data[[1]], data[[2]], repl=param3, norm=param4, long=1000, q=param5, nss=0, lc=1, k=0.5)#NOISeqを実行した結果をoutに格納
    
    #得られた統計量や順位情報などを抽出してファイル出力
    stat_NOISeq <- out$probab              #DEGとみなす確率(1に近いほど発現変動の度合いが大きくて0に近いほどnon-DEG。ここではq=0.8と指定しているので、Probabilityが0.8以上のものがDEGとされていることになる)をstat_NOISeqに格納
    stat_NOISeq <- ifelse(is.na(stat_NOISeq), 0, stat_NOISeq)#NAを0に置換している(全部の数値が0で計算できないようなものがNAとなり、これらはDEGとは言えないのでProbabilityの値を0にしたいという思想です)
    rank_NOISeq <- rank(-stat_NOISeq)      #stat_NOISeqでランキングした結果をrank_NOISeqに格納
    hoge <- cbind(rownames(RAW), RAW, stat_NOISeq, rank_NOISeq)#入力データの右側に、「stat_NOISeq」と「rank_NOISeq」を結合した結果をtmpに格納
    tmp <- hoge[order(rank_NOISeq),]       #発現変動の度合いでソートした結果をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NOISeq > param5)     #param5で指定した閾値以上のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    
    #おまけ
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    4. Biological replicatesのシミュレーションデータデータ(G1群3サンプル vs. G2群3サンプル、simdata_3vs3.txt)の場合

    どこがDEGがわかっているのでAUC値を計算するところまでやる:

    in_f <- "simdata_3vs3.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge4.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge4.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- "bio"                        #replicatesのタイプを指定。入力データがtechnical replicatesの場合は"tech"を、biological replicatesの場合は"bio"を指定
    param4 <- "tmm"                        #データ正規化手段を指定。Upper Quartile値を揃える場合は"uqua"を、TMM正規化法を採用する場合には"tmm"を、(転写物の長さ情報がある場合には1000bpに揃えて)総リード数が100万になるようにしたい場合には"rpkm"を、データ正規化を行わない場合には"n"を指定
    param5 <- 0.8                          #DEGとみなすProbability(1に近いほどより厳しい閾値に相当)を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    source("http://bioinfo.cipf.es/noiseq/lib/exe/fetch.php?media=noiseq.r")#NOISeqを利用するための関数をロード
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data.tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    DEG_posi <- data.tmp$DEG_posi          #DEGの位置情報を取得
    nonDEG_posi <- data.tmp$nonDEG_posi    #nonDEGの位置情報を取得
    data <- data.tmp[,1:(param_G1+param_G2)]#発現データ部分のみ抽出してdataに格納
    RAW <- data                            #dataの内容をRAWにコピーしてるだけー
    
    #NOISeq本番
    out <- noiseq(data[,data.cl==1], data[,data.cl==2], repl=param3, norm=param4, long=1000, q=param5, nss=0, lc=1, k=0.5)#NOISeqを実行した結果をoutに格納
    
    #得られた統計量や順位情報などを抽出してファイル出力
    stat_NOISeq <- out$probab              #DEGとみなす確率(1に近いほど発現変動の度合いが大きくて0に近いほどnon-DEG。ここではq=0.8と指定しているので、Probabilityが0.8以上のものがDEGとされていることになる)をstat_NOISeqに格納
    stat_NOISeq <- ifelse(is.na(stat_NOISeq), 0, stat_NOISeq)#NAを0に置換している(全部の数値が0で計算できないようなものがNAとなり、これらはDEGとは言えないのでProbabilityの値を0にしたいという思想です)
    rank_NOISeq <- rank(-stat_NOISeq)      #stat_NOISeqでランキングした結果をrank_NOISeqに格納
    hoge <- cbind(rownames(RAW), RAW, stat_NOISeq, rank_NOISeq, DEG_posi)#入力データの右側に、「stat_NOISeq」、「rank_NOISeq」、「DEG_posi」を結合した結果をtmpに格納
    write.table(hoge, out_f1, sep="\t", append=F, quote=F, row.names=F)#hogeの中身を指定したファイル名で保存
    
    #AUC値を計算
    AUC(rocdemo.sca(truth=DEG_posi, data=-rank_NOISeq))#AUC値を計算する関数AUCを実行(結果はそのまま表示されている。1に近いほど感度・特異度が高いことを示す)
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NOISeq > param5)     #param5で指定した閾値以上のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    
    #おまけ
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    5. Biological replicatesのシミュレーションデータデータ(G1群3サンプル vs. G2群3サンプル、simdata_3vs3.txt)の場合

    どこがDEGがわかっているのでAUC値を計算するところまでやり、予めTMM正規化したデータをNOISeqで解析する:

    in_f <- "simdata_3vs3.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge5.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge5.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- "bio"                        #replicatesのタイプを指定。入力データがtechnical replicatesの場合は"tech"を、biological replicatesの場合は"bio"を指定
    param4 <- "n"                          #データ正規化手段を指定。ここでは自分でTMM正規化後のデータを作成したものを読み込ませるので、オプションとしては「データの正規化を行わない"n"」を与えている
    param5 <- 0.8                          #DEGとみなすProbability(1に近いほどより厳しい閾値に相当)を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    source("http://bioinfo.cipf.es/noiseq/lib/exe/fetch.php?media=noiseq.r")#NOISeqを利用するための関数をロード
    library(edgeR)                         #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data.tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    DEG_posi <- data.tmp$DEG_posi          #DEGの位置情報を取得
    nonDEG_posi <- data.tmp$nonDEG_posi    #nonDEGの位置情報を取得
    data <- data.tmp[,1:(param_G1+param_G2)] #発現データ部分のみ抽出してdataに格納
    RAW <- data                            #dataの内容をRAWにコピーしてるだけ
    
    #TMM正規化後のデータを作成
    data <- RAW                            #RAWの内容をdataにコピーしてるだけ
    d <- DGEList(counts=data, group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化係数を計算
    norm_f_TMM <- d$samples$norm.factors   #TMM正規化係数の情報を抽出してnorm_f_TMMに格納
    effective_libsizes <- colSums(data) * norm_f_TMM#effective library sizesというのはlibrary sizesに(TMM)正規化係数を掛けたものなのでそれを計算した結果をeffective_libsizesに格納
    RPM_TMM <- sweep(data, 2, 1000000/effective_libsizes, "*")#元のカウントデータをeffective_libsizesで割り(RPMデータと同程度の数値分布にしたいので)one million (=1000000)を掛けた正規化後のデータをRPM_TMMに格納
    
    #NOISeq本番
    data <- RPM_TMM                        #RPM_TMMの内容をdataにコピーしてるだけ
    out <- noiseq(data[,data.cl==1], data[,data.cl==2], repl=param3, norm=param4, long=1000, q=param5, nss=0, lc=1, k=0.5)#NOISeqを実行した結果をoutに格納
    
    #得られた統計量や順位情報などを抽出してファイル出力
    stat_NOISeq <- out$probab              #DEGとみなす確率(1に近いほど発現変動の度合いが大きくて0に近いほどnon-DEG。ここではq=0.8と指定しているので、Probabilityが0.8以上のものがDEGとされていることになる)をstat_NOISeqに格納
    stat_NOISeq <- ifelse(is.na(stat_NOISeq), 0, stat_NOISeq)#NAを0に置換している(全部の数値が0で計算できないようなものがNAとなり、これらはDEGとは言えないのでProbabilityの値を0にしたいという思想です)
    rank_NOISeq <- rank(-stat_NOISeq)      #stat_NOISeqでランキングした結果をrank_NOISeqに格納
    hoge <- cbind(rownames(RAW), RAW, stat_NOISeq, rank_NOISeq, DEG_posi)#入力データの右側に、「stat_NOISeq」、「rank_NOISeq」、「DEG_posi」を結合した結果をtmpに格納
    write.table(hoge, out_f1, sep="\t", append=F, quote=F, row.names=F)#hogeの中身を指定したファイル名で保存
    
    #AUC値を計算
    AUC(rocdemo.sca(truth=DEG_posi, data=-rank_NOISeq))#AUC値を計算する関数AUCを実行(結果はそのまま表示されている。1に近いほど感度・特異度が高いことを示す)
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NOISeq > param5)     #param5で指定した閾値以上のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    
    #おまけ
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    6. Biological replicatesのシミュレーションデータデータ(G1群3サンプル vs. G2群3サンプル、simdata_3vs3.txt)の場合

    どこがDEGがわかっているのでAUC値を計算するところまでやり、予めTbT正規化したデータをNOISeqで解析する:

    in_f <- "simdata_3vs3.txt"             #入力ファイル名を指定してin_fに格納
    out_f1 <- "hoge6.txt"                  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "hoge6.png"                  #出力ファイル名を指定してout_f2に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param3 <- "bio"                        #replicatesのタイプを指定。入力データがtechnical replicatesの場合は"tech"を、biological replicatesの場合は"bio"を指定
    param4 <- "n"                          #データ正規化手段を指定。ここでは自分でTMM正規化後のデータを作成したものを読み込ませるので、オプションとしては「データの正規化を行わない"n"」を与えている
    param5 <- 0.8                          #DEGとみなすProbability(1に近いほどより厳しい閾値に相当)を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    source("http://bioinfo.cipf.es/noiseq/lib/exe/fetch.php?media=noiseq.r")#NOISeqを利用するための関数をロード
    library(edgeR)                         #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data.tmp <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    DEG_posi <- data.tmp$DEG_posi          #DEGの位置情報を取得
    nonDEG_posi <- data.tmp$nonDEG_posi    #nonDEGの位置情報を取得
    data <- data.tmp[,1:(param_G1+param_G2)]#発現データ部分のみ抽出してdataに格納
    RAW <- data                            #dataの内容をRAWにコピーしてるだけ
    
    #TbT正規化後のデータを作成
    data <- RAW                            #RAWの内容をdataにコピーしてるだけ
    TbTout <- do_TbT(data, data.cl, sample_num=10000)#TbT正規化法を実行する関数do_TbTを実行した結果をTbToutに格納
    norm_f_TbT <- TbTout$norm_f_TbT        #TbT正規化係数の情報を抽出してnorm_f_TbTに格納
    effective_libsizes <- colSums(data) * norm_f_TbT#effective library sizesというのはlibrary sizesに(TbT)正規化係数を掛けたものなのでそれを計算した結果をeffective_libsizesに格納
    RPM_TbT <- sweep(data, 2, 1000000/effective_libsizes, "*")#元のカウントデータをeffective_libsizesで割り(RPMデータと同程度の数値分布にしたいので)one million (=1000000)を掛けた正規化後のデータをRPM_TbTに格納
    
    #NOISeq本番
    data <- RPM_TbT                        #RPM_TMMの内容をdataにコピーしてるだけ
    out <- noiseq(data[,data.cl==1], data[,data.cl==2], repl=param3, norm=param4, long=1000, q=param5, nss=0, lc=1, k=0.5)#NOISeqを実行した結果をoutに格納
    
    #得られた統計量や順位情報などを抽出してファイル出力
    stat_NOISeq <- out$probab              #DEGとみなす確率(1に近いほど発現変動の度合いが大きくて0に近いほどnon-DEG。ここではq=0.8と指定しているので、Probabilityが0.8以上のものがDEGとされていることになる)をstat_NOISeqに格納
    stat_NOISeq <- ifelse(is.na(stat_NOISeq), 0, stat_NOISeq)#NAを0に置換している(全部の数値が0で計算できないようなものがNAとなり、これらはDEGとは言えないのでProbabilityの値を0にしたいという思想です)
    rank_NOISeq <- rank(-stat_NOISeq)      #stat_NOISeqでランキングした結果をrank_NOISeqに格納
    hoge <- cbind(rownames(RAW), RAW, stat_NOISeq, rank_NOISeq, DEG_posi)#入力データの右側に、「stat_NOISeq」、「rank_NOISeq」、「DEG_posi」を結合した結果をtmpに格納
    write.table(hoge, out_f1, sep="\t", append=F, quote=F, row.names=F)#hogeの中身を指定したファイル名で保存
    
    #AUC値を計算
    AUC(rocdemo.sca(truth=DEG_posi, data=-rank_NOISeq))#AUC値を計算する関数AUCを実行(結果はそのまま表示されている。1に近いほど感度・特異度が高いことを示す)
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NOISeq > param5)     #param5で指定した閾値以上のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    dev.off()                              #おまじない
    
    #おまけ
    sum(DEG_posi)                          #発現変動遺伝子数を表示
    sum(DEG_posi)/nrow(data)               #発現変動遺伝子の全遺伝子数に占める割合を表示
    	

    解析 | 発現変動 | 2群間 | NBPSeq (Di_2011)

    NBPSeqを用いてるやり方を行います。

    このパッケージは、任意の正規化法によって得られた正規化係数を組み込むことができます。

    このパッケージは、基本的にBiological replicatesのデータを入力として想定しています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. デフォルト(たぶんRPM補正)の場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge.txt"                    #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- 0.01                         #MA-plot描画時のp-valueの閾値を指定
    
    #必要なパッケージをロード
    library(NBPSeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データをmatrix型に変換している
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    RAW <- data                            #dataをRAWに格納
    
    #NBPSeqを用いてDEGの検出を実行
    out <- nbp.test(data, data.cl, 1, 2)   #計算を実行
    stat_NBPSeq <- out$p.values            #p-valueをstat_NBPSeqに格納
    rank_NBPSeq <- rank(stat_NBPSeq)       #stat_NBPSeqでランキングした結果をrank_NBPSeqに格納
    tmp <- cbind(rownames(data), data, stat_NBPSeq, rank_NBPSeq)#入力データの右側に、「stat_NBPSeq」と「rank_NBPSeq」を結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NBPSeq < param3)     #param3で指定した閾値未満のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    	

    2. TMM正規化法を組み合わせた場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- 0.01                         #MA-plot描画時のp-valueの閾値を指定
    
    #必要なパッケージをロード
    library(NBPSeq)                        #パッケージの読み込み
    library(edgeR)                         #パッケージの読み込み
    library(DEGseq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data <- as.matrix(data)                #データをmatrix型に変換している
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    RAW <- data                            #dataをRAWに格納
    
    #TMM正規化係数を得る
    d <- DGEList(counts=data, group=data.cl)#DGEListオブジェクトを作成してdに格納
    d <- calcNormFactors(d)                #TMM正規化(参考文献2)を実行
    norm_f_TMM <- d$samples$norm.factors   #TMM正規化係数の部分のみ取り出してnorm_f_TMMに格納
    
    #TMM正規化係数とNBPSeqを組合せてDEGの検出を実行
    out <- nbp.test(data, data.cl, 1, 2, norm.factors=norm_f_TMM)#TMM正規化係数を組み合わせて計算を実行
    stat_NBPSeq <- out$p.values            #p-valueをstat_NBPSeqに格納
    rank_NBPSeq <- rank(stat_NBPSeq)       #stat_NBPSeqでランキングした結果をrank_NBPSeqに格納
    tmp <- cbind(rownames(data), data, stat_NBPSeq, rank_NBPSeq)#入力データの右側に、「stat_NBPSeq」と「rank_NBPSeq」を結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPM正規化後のデータでM-A plotを描画(するための基礎情報取得)
    data <- RAW                            #RAWをdataに格納
    norm_f_RPM <- 1000000/colSums(data)    #各列に対して掛ける正規化係数を計算してnorm_f_RPMに格納
    RPM <- sweep(data, 2, norm_f_RPM, "*") #norm_f_RPMを各列に掛けた結果をRPMに格納
    data <- RPM                            #RPMをdataに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    DEG_posi <- (stat_NBPSeq < param3)     #param3で指定した閾値未満のものの位置情報をDEG_posiに格納
    
    #MA-plotを描画(本番)
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
    points(x_axis[DEG_posi], y_axis[DEG_posi], col="red", pch=20, cex=0.1)#DEGを赤色にしている
    	

    解析 | 発現変動 | 2群間 | 対応あり | について

    実験デザインが以下のような場合にこのカテゴリーに属す方法を適用します:

    Aさんの正常サンプル(or "time_point1" or "Group1")
    Bさんの正常サンプル(or "time_point1" or "Group1")
    Cさんの正常サンプル(or "time_point1" or "Group1")
    Aさんの腫瘍サンプル(or "time_point2" or "Group2")
    Bさんの腫瘍サンプル(or "time_point2" or "Group2")
    Cさんの腫瘍サンプル(or "time_point2" or "Group2")
    

    2014年3月に調査した結果をリストアップします。

    解析 | 発現変動 | 2群間 | 対応あり | 複製なし | TCC中のDEGES/edgeR-edgeR (Sun_2013)

    DEGES/edgeR正規化(Sun et al., 2013)を実行したのち、 edgeRパッケージ中のGLM (一般化線形モデル; Generalized Linear Model)に基づく方法 (McCarthy et al., 2012)で発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方を示します。 TCC原著論文中のDEGES/edgeR-edgeRという解析パイプラインに相当します。 Bioconductor ver. 2.13で利用可能なTCC ver. 1.2.0ではまだ実装されていないので、 ここでは、edgeRパッケージ中の関数のみを用いて対応のあるサンプル(paired samples)データ解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(1. DGEListオブジェクトの作成、2. 実験デザイン行列の作成など)
    d <- DGEList(counts=data)              #1. DGEListオブジェクトdを作成
    pair <- as.factor(c(1:param_G1, 1:param_G2))#2. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#2. グループラベル情報をclに格納
    design <- model.matrix(~ pair + cl)    #2. デザイン行列を作成した結果をdesignに格納
    FDR <- 0.1                             #DEGES正規化内部でのDEG検出時のFDR閾値を指定
    floorPDEG <- 0.05                      #上記FDR閾値を満たす遺伝子数がここで指定した値(5%)未満だったときに、最低でも上位5%の遺伝子をDEGとみなして除去するための下限値を指定
    
    #本番(DEGES/edgeR正規化)
    ### STEP 1 ###
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    d$samples$norm.factors                 #確認してるだけです
    ### STEP 2 ###
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    if (sum(q.value < FDR) > (floorPDEG * nrow(data))){#FDR閾値を満たす遺伝子数がここで指定した値(5%)よりも多いかどうか?
      is.DEG <- as.logical(q.value < FDR)  #Yesの場合は、FDR閾値を満たす遺伝子がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    } else {                               #Noの場合は...
      is.DEG <- as.logical(rank(p.value, ties.method="min") <= nrow(data)*floorPDEG)#上位(floorPDEG)%がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    }
    ### STEP 3 ###
    d <- DGEList(counts=data[!is.DEG, ])   #DGEListオブジェクトdを作成(non-DEG)
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    norm.factors <- d$samples$norm.factors*colSums(data[!is.DEG, ])/colSums(data)#non-DEGのみ用に得られたTMM正規化係数を全遺伝子に掛けられるようにするための補正
    norm.factors <- norm.factors/mean(norm.factors)#TMM正規化を実行した結果をdに格納
    norm.factors                           #確認してるだけです
    
    #本番(DEG検出)
    d <- DGEList(counts=data)              #DGEListオブジェクトdを作成
    d$samples$norm.factors <- norm.factors #計算した正規化係数を代入
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    1.と全く同じ結果が得られますが、デザイン行列designの作成のところで順番を入れ替えています。 それに伴い、検定時のglmLRT関数実行時に、coefで指定する列情報を2列目に変更しています。1.ではデフォルトがdesign行列の最後の列なので、何も指定しなくていいのです。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(1. DGEListオブジェクトの作成、2. 実験デザイン行列の作成など)
    d <- DGEList(counts=data)              #1. DGEListオブジェクトdを作成
    pair <- as.factor(c(1:param_G1, 1:param_G2))#2. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#2. グループラベル情報をclに格納
    design <- model.matrix(~ cl + pair)    #2. デザイン行列を作成した結果をdesignに格納
    FDR <- 0.1                             #DEGES正規化内部でのDEG検出時のFDR閾値を指定
    floorPDEG <- 0.05                      #上記FDR閾値を満たす遺伝子数がここで指定した値(5%)未満だったときに、最低でも上位5%の遺伝子をDEGとみなして除去するための下限値を指定
    
    #本番(DEGES/edgeR正規化)
    ### STEP 1 ###
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    d$samples$norm.factors                 #確認してるだけです
    ### STEP 2 ###
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit, coef=2)             #検定(デザイン行列の2列目が目的のグループラベル情報clに相当)
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    if (sum(q.value < FDR) > (floorPDEG * nrow(data))){#FDR閾値を満たす遺伝子数がここで指定した値(5%)よりも多いかどうか?
      is.DEG <- as.logical(q.value < FDR)  #Yesの場合は、FDR閾値を満たす遺伝子がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    } else {                               #Noの場合は...
      is.DEG <- as.logical(rank(p.value, ties.method="min") <= nrow(data)*floorPDEG)#上位(floorPDEG)%がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    }
    ### STEP 3 ###
    d <- DGEList(counts=data[!is.DEG, ])   #DGEListオブジェクトdを作成(non-DEG)
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    norm.factors <- d$samples$norm.factors*colSums(data[!is.DEG, ])/colSums(data)#non-DEGのみ用に得られたTMM正規化係数を全遺伝子に掛けられるようにするための補正
    norm.factors <- norm.factors/mean(norm.factors)#TMM正規化を実行した結果をdに格納
    norm.factors                           #確認してるだけです
    
    #本番(DEG検出)
    d <- DGEList(counts=data)              #DGEListオブジェクトdを作成
    d$samples$norm.factors <- norm.factors #計算した正規化係数を代入
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit, coef=2)             #検定(デザイン行列の2列目が目的のグループラベル情報clに相当)
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    3. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    DEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(1. DGEListオブジェクトの作成、2. 実験デザイン行列の作成など)
    d <- DGEList(counts=data)              #1. DGEListオブジェクトdを作成
    pair <- as.factor(c(1:param_G1, 1:param_G2))#2. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#2. グループラベル情報をclに格納
    design <- model.matrix(~ pair + cl)    #2. デザイン行列を作成した結果をdesignに格納
    FDR <- 0.1                             #DEGES正規化内部でのDEG検出時のFDR閾値を指定
    floorPDEG <- 0.05                      #上記FDR閾値を満たす遺伝子数がここで指定した値(5%)未満だったときに、最低でも上位5%の遺伝子をDEGとみなして除去するための下限値を指定
    
    #本番(DEGES/edgeR正規化)
    ### STEP 1 ###
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    d$samples$norm.factors                 #確認してるだけです
    ### STEP 2 ###
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    if (sum(q.value < FDR) > (floorPDEG * nrow(data))){#FDR閾値を満たす遺伝子数がここで指定した値(5%)よりも多いかどうか?
      is.DEG <- as.logical(q.value < FDR)  #Yesの場合は、FDR閾値を満たす遺伝子がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    } else {                               #Noの場合は...
      is.DEG <- as.logical(rank(p.value, ties.method="min") <= nrow(data)*floorPDEG)#上位(floorPDEG)%がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    }
    ### STEP 3 ###
    d <- DGEList(counts=data[!is.DEG, ])   #DGEListオブジェクトdを作成(non-DEG)
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    norm.factors <- d$samples$norm.factors*colSums(data[!is.DEG, ])/colSums(data)#non-DEGのみ用に得られたTMM正規化係数を全遺伝子に掛けられるようにするための補正
    norm.factors <- norm.factors/mean(norm.factors)#TMM正規化を実行した結果をdに格納
    norm.factors                           #確認してるだけです
    
    #本番(DEG検出)
    d <- DGEList(counts=data)              #DGEListオブジェクトdを作成
    d$samples$norm.factors <- norm.factors #計算した正規化係数を代入
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値の計算
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    4. TCCパッケージ中の1,000 genes×6 samplesのカウントデータ(hypoData)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_200までがDEG (最初の180個がG1群で高発現、残りの20個がG2群で高発現) gene_201〜gene_1000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    library(TCC)                           #パッケージの読み込み
    
    #カウントデータオブジェクトの読み込み
    data(hypoData)                         #TCCパッケージ中のhypoDataオブジェクトをロード
    data <- hypoData                       #オブジェクト名を変更
    
    #前処理(1. DGEListオブジェクトの作成、2. 実験デザイン行列の作成など)
    d <- DGEList(counts=data)              #1. DGEListオブジェクトdを作成
    pair <- as.factor(c(1:param_G1, 1:param_G2))#2. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#2. グループラベル情報をclに格納
    design <- model.matrix(~ pair + cl)    #2. デザイン行列を作成した結果をdesignに格納
    FDR <- 0.1                             #DEGES正規化内部でのDEG検出時のFDR閾値を指定
    floorPDEG <- 0.05                      #上記FDR閾値を満たす遺伝子数がここで指定した値(5%)未満だったときに、最低でも上位5%の遺伝子をDEGとみなして除去するための下限値を指定
    
    #本番(DEGES/edgeR正規化)
    ### STEP 1 ###
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    d$samples$norm.factors                 #確認してるだけです
    ### STEP 2 ###
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    if (sum(q.value < FDR) > (floorPDEG * nrow(data))){#FDR閾値を満たす遺伝子数がここで指定した値(5%)よりも多いかどうか?
      is.DEG <- as.logical(q.value < FDR)  #Yesの場合は、FDR閾値を満たす遺伝子がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    } else {                               #Noの場合は...
      is.DEG <- as.logical(rank(p.value, ties.method="min") <= nrow(data)*floorPDEG)#上位(floorPDEG)%がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    }
    ### STEP 3 ###
    d <- DGEList(counts=data[!is.DEG, ])   #DGEListオブジェクトdを作成(non-DEG)
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    norm.factors <- d$samples$norm.factors*colSums(data[!is.DEG, ])/colSums(data)#non-DEGのみ用に得られたTMM正規化係数を全遺伝子に掛けられるようにするための補正
    norm.factors <- norm.factors/mean(norm.factors)#TMM正規化を実行した結果をdに格納
    norm.factors                           #確認してるだけです
    
    #本番(DEG検出)
    d <- DGEList(counts=data)              #DGEListオブジェクトdを作成
    d$samples$norm.factors <- norm.factors #計算した正規化係数を代入
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    5. TCCパッケージ中の1,000 genes×6 samplesのカウントデータ(hypoData)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_200までがDEG (最初の180個がG1群で高発現、残りの20個がG2群で高発現) gene_201〜gene_1000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    4.と全く同じ結果が得られますが、デザイン行列designの作成のところで順番を入れ替えています。 それに伴い、検定時のglmLRT関数実行時に、coefで指定する列情報を2列目に変更しています。1.ではデフォルトがdesign行列の最後の列なので、何も指定しなくていいのです。

    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    library(TCC)                           #パッケージの読み込み
    
    #カウントデータオブジェクトの読み込み
    data(hypoData)                         #TCCパッケージ中のhypoDataオブジェクトをロード
    data <- hypoData                       #オブジェクト名を変更
    
    #前処理(1. DGEListオブジェクトの作成、2. 実験デザイン行列の作成など)
    d <- DGEList(counts=data)              #1. DGEListオブジェクトdを作成
    pair <- as.factor(c(1:param_G1, 1:param_G2))#2. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#2. グループラベル情報をclに格納
    design <- model.matrix(~ cl + pair)    #2. デザイン行列を作成した結果をdesignに格納
    FDR <- 0.1                             #DEGES正規化内部でのDEG検出時のFDR閾値を指定
    floorPDEG <- 0.05                      #上記FDR閾値を満たす遺伝子数がここで指定した値(5%)未満だったときに、最低でも上位5%の遺伝子をDEGとみなして除去するための下限値を指定
    
    #本番(DEGES/edgeR正規化)
    ### STEP 1 ###
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    d$samples$norm.factors                 #確認してるだけです
    ### STEP 2 ###
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit, coef=2)             #検定(デザイン行列の2列目が目的のグループラベル情報clに相当)
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    if (sum(q.value < FDR) > (floorPDEG * nrow(data))){#FDR閾値を満たす遺伝子数がここで指定した値(5%)よりも多いかどうか?
      is.DEG <- as.logical(q.value < FDR)  #Yesの場合は、FDR閾値を満たす遺伝子がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    } else {                               #Noの場合は...
      is.DEG <- as.logical(rank(p.value, ties.method="min") <= nrow(data)*floorPDEG)#上位(floorPDEG)%がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    }
    ### STEP 3 ###
    d <- DGEList(counts=data[!is.DEG, ])   #DGEListオブジェクトdを作成(non-DEG)
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    norm.factors <- d$samples$norm.factors*colSums(data[!is.DEG, ])/colSums(data)#non-DEGのみ用に得られたTMM正規化係数を全遺伝子に掛けられるようにするための補正
    norm.factors <- norm.factors/mean(norm.factors)#TMM正規化を実行した結果をdに格納
    norm.factors                           #確認してるだけです
    
    #本番(DEG検出)
    d <- DGEList(counts=data)              #DGEListオブジェクトdを作成
    d$samples$norm.factors <- norm.factors #計算した正規化係数を代入
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit, coef=2)             #検定(デザイン行列の2列目が目的のグループラベル情報clに相当)
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 発現変動 | 2群間 | 対応あり | 複製なし | TCC中のDEGES/DESeq-DESeq (Sun_2013)

    書きかけです。

    DEGES/DESeq正規化(Sun et al., 2013)を実行したのち、 DESeqパッケージ中のGLM (一般化線形モデル; Generalized Linear Model)に基づく方法 で発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方を示します。 TCC原著論文中のDEGES/DESeq-DESeqという解析パイプラインに相当します。 Bioconductor ver. 2.13で利用可能なTCC ver. 1.2.0ではまだ実装されていないので、 ここでは、DESeqパッケージ中の関数のみを用いて対応のあるサンプル(paired samples)データ解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    TCC ver. 1.3.2で2014年4月に利用可能予定のコードです。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                          #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(1. DGEListオブジェクトの作成、2. 実験デザイン行列の作成など)
    d <- DGEList(counts=data)              #1. DGEListオブジェクトdを作成
    pair <- as.factor(c(1:param_G1, 1:param_G2))#2. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#2. グループラベル情報をclに格納
    design <- model.matrix(~ pair + cl)    #2. デザイン行列を作成した結果をdesignに格納
    FDR <- 0.1                             #DEGES正規化内部でのDEG検出時のFDR閾値を指定
    floorPDEG <- 0.05                      #上記FDR閾値を満たす遺伝子数がここで指定した値(5%)未満だったときに、最低でも上位5%の遺伝子をDEGとみなして除去するための下限値を指定
    
    #本番(DEGES/edgeR正規化)
    ### STEP 1 ###
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    d$samples$norm.factors                 #確認してるだけです
    ### STEP 2 ###
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    if (sum(q.value < FDR) > (floorPDEG * nrow(data))){#FDR閾値を満たす遺伝子数がここで指定した値(5%)よりも多いかどうか?
      is.DEG <- as.logical(q.value < FDR)  #Yesの場合は、FDR閾値を満たす遺伝子がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    } else {                               #Noの場合は...
      is.DEG <- as.logical(rank(p.value, ties.method="min") <= nrow(data)*floorPDEG)#上位(floorPDEG)%がTRUE、そうでないものがFALSEと判定した結果をis.DEGベクトルに格納
    }
    ### STEP 3 ###
    d <- DGEList(counts=data[!is.DEG, ])   #DGEListオブジェクトdを作成(non-DEG)
    d <- calcNormFactors(d)                #TMM正規化を実行した結果をdに格納
    norm.factors <- d$samples$norm.factors*colSums(data[!is.DEG, ])/colSums(data)#non-DEGのみ用に得られたTMM正規化係数を全遺伝子に掛けられるようにするための補正
    norm.factors <- norm.factors/mean(norm.factors)#TMM正規化を実行した結果をdに格納
    norm.factors                           #確認してるだけです
    
    #本番(DEG検出)
    d <- DGEList(counts=data)              #DGEListオブジェクトdを作成
    d$samples$norm.factors <- norm.factors #計算した正規化係数を代入
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 発現変動 | 2群間 | 対応あり | 複製なし | edgeR(Robinson_2010)

    edgeRパッケージを用いて対応のあるサンプル(paired samples)データ解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_f1に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(1. DGEListオブジェクトの作成、2. TMM正規化、3. 実験デザイン行列の作成)
    d <- DGEList(data)                     #1. DGEListオブジェクトdを作成
    d <- calcNormFactors(d)                #2. TMM正規化を実行した結果をdに格納
    pair <- as.factor(c(1:param_G1, 1:param_G2))#3. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#3. グループラベル情報をclに格納
    design <- model.matrix(~ pair + cl)    #3. デザイン行列を作成した結果をdesignに格納
    
    #本番(DEG検出)
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    DEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_f1に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(1. DGEListオブジェクトの作成、2. TMM正規化、3. 実験デザイン行列の作成)
    d <- DGEList(data)                     #1. DGEListオブジェクトdを作成
    d <- calcNormFactors(d)                #2. TMM正規化を実行した結果をdに格納
    pair <- as.factor(c(1:param_G1, 1:param_G2))#3. 対応関係の情報をpairに格納
    cl <- as.factor(c(rep(1, param_G1), rep(2, param_G2)))#3. グループラベル情報をclに格納
    design <- model.matrix(~ pair + cl)    #3. デザイン行列を作成した結果をdesignに格納
    
    #本番(DEG検出)
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #モデル構築(ばらつきの程度を見積もっている)
    out <- glmLRT(fit)                     #検定
    #tmp <- topTags(out, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- out$table$PValue            #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値の計算
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    解析 | 発現変動 | 2群間 | 対応あり | 複製なし | DESeq (Anders_2010)

    DESeqパッケージを用いて対応のあるサンプル(paired samples)データ解析を行うやり方を示します。 TCCパッケージでも内部的にDESeqを呼び出して実行可能なので、そのやり方も示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    TCC ver. 1.3.2で2014年4月に利用可能予定のコードです。getResult関数のところでエラーが出るようですね。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    design.cl <- data.frame(               #デザイン行列と同じ意味合いのデータフレーム形式オブジェクトを作成
        group=c(rep(1, param_G1), rep(2, param_G2)),#グループラベル情報
        pair=c(1:param_G1, 1:param_G2)     #対応関係の情報
    )                                      #
    tcc <- new("TCC", data, design.cl)     #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0, paired=T)#正規化を実行した結果をtccに格納
    tcc$norm.factors                       #確認してるだけです
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR, paired=T)#DEG検出を実行した結果をtccに格納
    #result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    #sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    p.value <- tcc$stat$p.value             #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    #tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    DEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    TCC ver. 1.3.2で2014年4月に利用可能予定のコードです。getResult関数のところでエラーが出るようですね。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_DEG <- 2000                      #DEG数を指定
    param_nonDEG <- 8000                   #non-DEG数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    design.cl <- data.frame(               #デザイン行列と同じ意味合いのデータフレーム形式オブジェクトを作成
        group=c(rep(1, param_G1), rep(2, param_G2)),#グループラベル情報
        pair=c(1:param_G1, 1:param_G2)     #対応関係の情報
    )                                      #
    tcc <- new("TCC", data, design.cl)     #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0, paired=T)#正規化を実行した結果をtccに格納
    tcc$norm.factors                       #確認してるだけです
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR, paired=T)#DEG検出を実行した結果をtccに格納
    #result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    #sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    p.value <- tcc$stat$p.value             #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    #tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値の計算
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    3. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.txt)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    1.と同じ入力形式で、TCCパッケージを使わずにDESeqパッケージ中の関数のみで行うやり方です。TCCのほうが手順的にも簡便であることがわかります。

    in_f <- "data_hypodata_3vs3.txt"       #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    pair <- c(1:param_G1, 1:param_G2)      #対応関係の情報
    design.cl <- data.frame(               #デザイン行列と同じ意味合いのデータフレーム形式オブジェクトを作成
        group=as.factor(data.cl),          #グループラベル情報
        pair=as.factor(pair)               #対応関係の情報
    )                                      #
    
    #本番(正規化)
    cds <- newCountDataSet(data, design.cl)#CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算し、結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factors
    
    #本番(DEG検出)
    cds <- estimateDispersions(cds, method="blind", sharingMode="fit-only")#モデル構築
    fit1 <- fitNbinomGLMs(cds, count ~ as.factor(data.cl) + as.factor(pair))#full model
    fit0 <- fitNbinomGLMs(cds, count ~ as.factor(pair))#reduced model
    p.value <- nbinomGLMTest(fit1, fit0)   #検定
    p.value[is.na(p.value)] <- 1           #NAを1に置換している
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    4. TCCパッケージ中の1,000 genes×6 samplesのカウントデータ(hypoData)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_200までがDEG (最初の180個がG1群で高発現、残りの20個がG2群で高発現) gene_201〜gene_1000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    TCC ver. 1.3.2で2014年4月に利用可能予定のコードです。getResult関数のところでエラーが出るようですね。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    library(DESeq)                         #パッケージの読み込み
    
    #カウントデータオブジェクトの読み込み
    data(hypoData)                         #TCCパッケージ中のhypoDataオブジェクトをロード
    data <- hypoData                       #オブジェクト名を変更
    
    #前処理(TCCクラスオブジェクトの作成)
    design.cl <- data.frame(               #デザイン行列と同じ意味合いのデータフレーム形式オブジェクトを作成
        group=c(rep(1, param_G1), rep(2, param_G2)),#グループラベル情報
        pair=c(1:param_G1, 1:param_G2)     #対応関係の情報
    )                                      #
    tcc <- new("TCC", data, design.cl)     #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0, paired=T)#正規化を実行した結果をtccに格納
    tcc$norm.factors                       #確認してるだけです
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR, paired=T)#DEG検出を実行した結果をtccに格納
    #result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    #sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    p.value <- tcc$stat$p.value             #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    #tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    5. TCCパッケージ中の1,000 genes×6 samplesのカウントデータ(hypoData)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_200までがDEG (最初の180個がG1群で高発現、残りの20個がG2群で高発現) gene_201〜gene_1000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    DEG or non-DEGの位置情報と実際のランキング結果情報を用いてAUC値の計算を行う例です。

    TCC ver. 1.3.2で2014年4月に利用可能予定のコードです。getResult関数のところでエラーが出るようですね。

    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_DEG <- 200                       #DEG数を指定
    param_nonDEG <- 800                    #non-DEG数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    library(ROC)                           #パッケージの読み込み
    library(DESeq)                         #パッケージの読み込み
    
    #カウントデータオブジェクトの読み込み
    data(hypoData)                         #TCCパッケージ中のhypoDataオブジェクトをロード
    data <- hypoData                       #オブジェクト名を変更
    
    #前処理(TCCクラスオブジェクトの作成)
    design.cl <- data.frame(               #デザイン行列と同じ意味合いのデータフレーム形式オブジェクトを作成
        group=c(rep(1, param_G1), rep(2, param_G2)),#グループラベル情報
        pair=c(1:param_G1, 1:param_G2)     #対応関係の情報
    )                                      #
    tcc <- new("TCC", data, design.cl)     #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0, paired=T)#正規化を実行した結果をtccに格納
    tcc$norm.factors                       #確認してるだけです
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR, paired=T)#DEG検出を実行した結果をtccに格納
    #result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    #sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    p.value <- tcc$stat$p.value             #p値をp.valueに格納
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    #tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値の計算
    obj <- c(rep(1, param_DEG), rep(0, param_nonDEG))#DEGの位置を1、non-DEGの位置を0としたベクトルobjを作成
    AUC(rocdemo.sca(truth=obj, data=-ranking))#AUC計算
    	

    6. TCCパッケージ中の1,000 genes×6 samplesのカウントデータ(hypoData)の場合:

    Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_200までがDEG (最初の180個がG1群で高発現、残りの20個がG2群で高発現) gene_201〜gene_1000までがnon-DEGであることが既知です。

    G1群の3つのサンプル(G1_1, G1_2, G1_3)とG2群の3つのサンプル(G2_1, G2_2, G2_3)が対応しているという仮定で解析を行います。

    例えば、G1_1とG2_1がAさん、G1_2とG2_2がBさん、そしてG1_3とG2_3がCさんというイメージです。したがって、G1群とG2群のサンプル数が異なることはアリエマセン。

    4.と同じ入力形式で、TCCパッケージを使わずにDESeqパッケージ中の関数のみで行うやり方です。TCCのほうが手順的にも簡便であることがわかります。

    out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data(hypoData)                         #TCCパッケージ中のhypoDataオブジェクトをロード
    data <- hypoData                       #オブジェクト名を変更
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    pair <- c(1:param_G1, 1:param_G2)      #対応関係の情報
    design.cl <- data.frame(               #デザイン行列と同じ意味合いのデータフレーム形式オブジェクトを作成
        group=as.factor(data.cl),          #グループラベル情報
        pair=as.factor(pair)               #対応関係の情報
    )                                      #
    
    #本番(正規化)
    cds <- newCountDataSet(data, design.cl)#CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算し、結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factors
    
    #本番(DEG検出)
    cds <- estimateDispersions(cds, method="blind", sharingMode="fit-only")#モデル構築
    fit1 <- fitNbinomGLMs(cds, count ~ as.factor(data.cl) + as.factor(pair))#full model
    fit0 <- fitNbinomGLMs(cds, count ~ as.factor(pair))#reduced model
    p.value <- nbinomGLMTest(fit1, fit0)   #検定
    p.value[is.na(p.value)] <- 1           #NAを1に置換している
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 発現変動 | 3群間 | 対応なし | について

    実験デザインが以下のような場合にこのカテゴリーに属す方法を適用します:

    Aさんの肝臓サンプル(or "time_point1" or "Group1")
    Bさんの肝臓サンプル(or "time_point1" or "Group1")
    Cさんの肝臓サンプル(or "time_point1" or "Group1")
    Dさんの腎臓サンプル(or "time_point2" or "Group2")
    Eさんの腎臓サンプル(or "time_point2" or "Group2")
    Fさんの腎臓サンプル(or "time_point2" or "Group2")
    Gさんの大腸サンプル(or "time_point3" or "Group3")
    Hさんの大腸サンプル(or "time_point3" or "Group3")
    Iさんの大腸サンプル(or "time_point3" or "Group3")
    

    2014年3月に調査した結果をリストアップします。

    解析 | 発現変動 | 3群間 | 対応なし | 複製あり | TCC (Sun_2013)

    TCCを用いたやり方を示します。

    内部的にiDEGES/edgeR(Sun_2013)正規化を実行したのち、 edgeRパッケージ中のexact testで発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行っています。 TCC原著論文中のiDEGES/edgeR-edgeRという解析パイプラインに相当します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    2. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)と同じものをTCCパッケージ内部で作成する場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータ作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(param_G1, param_G2, param_G3))#各群のサンプル数を指定
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値を計算(高いほどよい方法)
    calcAUCValue(tcc)                      #AUC値計算結果を表示(どこかの群で発現変動しているか否かの1 or 0の予測結果のベクトルと真の情報とのROC曲線の下部面積)
    	

    3. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    4. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)と同じものをTCCパッケージ内部で作成する場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータ作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(param_G1, param_G2, param_G3))#各群のサンプル数を指定
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値を計算(高いほどよい方法)
    calcAUCValue(tcc)                      #AUC値計算結果を表示(どこかの群で発現変動しているか否かの1 or 0の予測結果のベクトルと真の情報とのROC曲線の下部面積)
    	

    5. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    1.と基本的に同じで、出力のテキストファイルが正規化前のデータではなく正規化後のデータになっていて、発現変動順にソートしたものになっています。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), normalized, result)#正規化後のデータの右側にDEG検出結果を結合したものをtmpに格納
    tmp <- tmp[order(tmp$rank),]           #発現変動順にソートした結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    sum(tcc$stat$q.value < 0.05)           #FDR < 0.05を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.10)           #FDR < 0.10を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.20)           #FDR < 0.20を満たす遺伝子数を表示
    sum(tcc$stat$q.value < 0.30)           #FDR < 0.30を満たす遺伝子数を表示
        

    解析 | 発現変動 | 3群間 | 対応なし | 複製あり | edgeR(Robinson_2010)

    TMM正規化(Robinson_2010)を実行したのち、 edgeRパッケージ中のexact testで発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方(edgeR coupled with TMM normalization; TMM-edgeR)を示します。デフォルトのedgeRの手順に相当します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    2. サンプルデータ15の10,000 genes×9 samplesのシミュレーションデータ(data_hypodata_3vs3vs3.txt)と同じものをTCCパッケージ内部で作成する場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータ作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(param_G1, param_G2, param_G3))#各群のサンプル数を指定
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値を計算(高いほどよい方法)
    calcAUCValue(tcc)                      #AUC値計算結果を表示(どこかの群で発現変動しているか否かの1 or 0の予測結果のベクトルと真の情報とのROC曲線の下部面積)
    	

    3. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    4. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)と同じものをTCCパッケージ内部で作成する場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータ作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(param_G1, param_G2, param_G3))#各群のサンプル数を指定
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値を計算(高いほどよい方法)
    calcAUCValue(tcc)                      #AUC値計算結果を表示(どこかの群で発現変動しているか否かの1 or 0の予測結果のベクトルと真の情報とのROC曲線の下部面積)
    	

    5. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    3.と同じ入力形式で、TCCパッケージを使わずにedgeRパッケージ中の関数のみで行うやり方です。TCCのほうが手順的にも簡便であることがわかります。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(edgeR)                         #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(DGEListオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    d <- DGEList(data, group=data.cl)      #DGEListオブジェクトdを作成
    
    #本番(正規化)
    d <- calcNormFactors(d)                #正規化を実行した結果をdに格納
    
    #本番(DEG検出)
    design <- model.matrix(~ as.factor(data.cl))#デザイン行列を作成した結果をdesignに格納
    d <- estimateGLMCommonDisp(d, design)  #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTrendedDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    d <- estimateGLMTagwiseDisp(d, design) #モデル構築(ばらつきの程度を見積もっている)
    fit <- glmFit(d, design)               #検定
    coef <- 2:length(unique(data.cl))      #線形モデルの比較する係数を指定(全ての群間比較時のおまじない的な記述法です)
    lrt <- glmLRT(fit, coef=coef)          #検定
    tmp <- topTags(lrt, n=nrow(data), sort.by="none")#検定結果を抽出
    p.value <- tmp$table$PValue            #p値を抽出
    q.value <- tmp$table$FDR               #q値を抽出
    result <- cbind(p.value, q.value)      #p値とq値をまとめた結果をresultに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    解析 | 発現変動 | 3群間 | 対応なし | 複製あり | DESeq (Anders_2010)

    DESeqパッケージを用いて発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行うやり方(DESeq coupled with DESeq normalization; DESeq-DESeq)を示します。 デフォルトのDESeqの手順に相当します。TCCパッケージを用いても同様のことができますので、動作確認も兼ねて両方のやり方を示しています。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    2. サンプルデータ15の10,000 genes×9 samplesのシミュレーションデータ(data_hypodata_3vs3vs3.txt)と同じものをTCCパッケージ内部で作成する場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータ作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(param_G1, param_G2, param_G3))#各群のサンプル数を指定
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値を計算(高いほどよい方法)
    calcAUCValue(tcc)                      #AUC値計算結果を表示(どこかの群で発現変動しているか否かの1 or 0の予測結果のベクトルと真の情報とのROC曲線の下部面積)
    	

    3. サンプルデータ15の10,000 genes×9 samplesのカウントデータ(data_hypodata_3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    1.と同じ入力形式で、TCCパッケージを使わずにDESeqパッケージ中の関数のみで行うやり方です。TCCのほうが手順的にも簡便であることがわかります。

    in_f <- "data_hypodata_3vs3vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    
    #本番(正規化)
    cds <- newCountDataSet(data, data.cl)  #CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算した結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factors
    
    #本番(DEG検出)
    cds <- estimateDispersions(cds, method="pooled")#モデル構築
    fit1 <- fitNbinomGLMs(cds, count ~ as.factor(data.cl))#full model
    fit0 <- fitNbinomGLMs(cds, count ~ 1)  #reduced model
    p.value <- nbinomGLMTest(fit1, fit0)   #検定
    p.value[is.na(p.value)] <- 1           #NAを1に置換している
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    4. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    5. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)と同じものをTCCパッケージ内部で作成する場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータ作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(param_G1, param_G2, param_G3))#各群のサンプル数を指定
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="deseq", iteration=0)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="deseq", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#「rownames情報」、「カウントデータ」、「DEG検出結果」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #AUC値を計算(高いほどよい方法)
    calcAUCValue(tcc)                      #AUC値計算結果を表示(どこかの群で発現変動しているか否かの1 or 0の予測結果のベクトルと真の情報とのROC曲線の下部面積)
    	

    6. サンプルデータ16の10,000 genes×9 samplesのカウントデータ(data_hypodata_2vs4vs3.txt)の場合:

    シミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 gene_1〜gene_3000までがDEG (gene_1〜gene_2100がG1群で3倍高発現、gene_2101〜gene_2700がG2群で10倍高発現、gene_2701〜gene_3000がG3群で6倍高発現) gene_3001〜gene_10000までがnon-DEGであることが既知です。

    3.と同じ入力形式で、TCCパッケージを使わずにDESeqパッケージ中の関数のみで行うやり方です。TCCのほうが手順的にも簡便であることがわかります。

    in_f <- "data_hypodata_2vs4vs3.txt"    #入力ファイル名を指定してin_fに格納
    out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 4                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(DESeq)                         #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2), rep(3, param_G3))#G1群を1、G2群を2、G3群を3としたベクトルdata.clを作成
    
    #本番(正規化)
    cds <- newCountDataSet(data, data.cl)  #CountDataSetオブジェクトを作成してcdsに格納
    cds <- estimateSizeFactors(cds)        #size factorを計算した結果をcdsに格納
    sizeFactors(cds)                       #これがDESeqのsize factors
    
    #本番(DEG検出)
    cds <- estimateDispersions(cds, method="pooled")#モデル構築
    fit1 <- fitNbinomGLMs(cds, count ~ as.factor(data.cl))#full model
    fit0 <- fitNbinomGLMs(cds, count ~ 1)  #reduced model
    p.value <- nbinomGLMTest(fit1, fit0)   #検定
    p.value[is.na(p.value)] <- 1           #NAを1に置換している
    q.value <- p.adjust(p.value, method="BH")#q値をq.valueに格納
    ranking <- rank(p.value)               #p.valueでランキングした結果をrankingに格納
    sum(q.value < param_FDR)               #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data, p.value, q.value, ranking)#入力データの右側にp.value、q.value、rankingを結合した結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    解析 | 発現変動 | 5群間 | 対応なし | 複製あり | TCC (Sun_2013)

    TCCを用いたやり方を示します。

    内部的にiDEGES/edgeR(Sun_2013)正規化を実行したのち、 edgeRパッケージ中のexact testで発現変動遺伝子(Differentially expressed Genes; DEGs)検出を行っています。 TCC原著論文中のiDEGES/edgeR-edgeRという解析パイプラインに相当します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. サンプルデータ39の10,000 genes×15 samplesのカウントデータ(data_hypodata_3vs3vs3vs3vs3.txt)の場合:

    シミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル vs. G4群3サンプル vs. G5群3サンプル)です。 gene_1〜gene_2000までがDEG (gene_1〜gene_1000がG1群で5倍高発現、gene_1001〜gene_1400がG2群で10倍高発現、gene_1401〜gene_1700がG3群で8倍高発現、 gene_1701〜gene_1900がG4群で12倍高発現、gene_1901〜gene_2000がG5群で7倍高発現)、gene_2001〜gene_10000までがnon-DEGであることが既知です。

    in_f <- "data_hypodata_3vs3vs3vs3vs3.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_G3 <- 3                          #G3群のサンプル数を指定
    param_G4 <- 3                          #G4群のサンプル数を指定
    param_G5 <- 3                          #G5群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1,param_G1), rep(2,param_G2), rep(3,param_G3), rep(4,param_G4), rep(5,param_G5))#G1群を1、G2群を2、G3群を3、G4群を4、G5群を5としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count, result)#入力データの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
        

    解析 | 発現変動 | 時系列 | Bayesian model-based clustering (Nascimento_2012)

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    	

    解析 | 発現変動 | 時系列 | maSigPro(Nueda_2014)

    maSigProパッケージを用いた時系列データ解析を示します。 西岡輔 氏提供情報ですm(_ _)m

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    
    #必要なパッケージをロード
    library(maSigPro)                      #パッケージの読み込み
    
    	

    解析 | 発現変動 | エクソン | について

    選択的スプライシング(alternative splicing; AS)とは、ある共通の前駆体mRNAからエクソン(exon)のextending, shortening, skipping, includingやイントロン(intron)配列の保持(retaining)によって異なるmRNAバリアントを作り出すメカニズムのことを指します。

    これらのイベントはalternative exon events (AEEs)と総称されるようです。ちなみに全ヒト遺伝子の75-92%が複数のアイソフォーム(multiple isoforms)となりうるという報告もあるようです(言い換えると8-25%がsingle isoform genesだということ)。

    複数のサンプル間で発現に違いのあるエクソン(Differential Exon Usage; DEU)を同定するためのプログラムです。

    2014年6月に調査した結果をリストアップします。

    R用:

    解析 | 発現変動 | エクソン | DEXSeq

    DEXSeqパッケージを用いてサンプル間で発現に違いのあるエクソン(exon)を同定するやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    	

    解析 | 機能解析 | 遺伝子オントロジー(GO)解析 | について

    RNA-seqなどのタグカウントデータから遺伝子オントロジー(GO)解析を行うためのパッケージもいくつか出ています。

    2014年6月に調査した結果をリストアップします。

    解析 | 機能解析 | 遺伝子オントロジー(GO)解析 | SeqGSEA (Wang_2014)

    SeqGSEAを用いてGO解析を行うやり方を示します。 このパッケージは、exonレベルのカウントデータを入力として、発現変動遺伝子セットに相当する有意に発現変動したGO termsを出力するのが基本ですが、geneレベルのカウントデータを入力として解析することも可能です。 統計的有意性の評価にサンプルラベル情報の並べ替え(permutation)戦略を採用しているため、 各グループあたりの反復数が5以上のデータを想定しているようです(Wang et al., 2014)。また、計算時間が半端なくかかります。 例えば、並べ替え回数がたったの20回でも2時間ちょっとかかります(Panasonic Let's note CF-SX3本郷モデルの場合)のでご注意ください。 推奨は1000回以上と書いてますが、10日ほどかかることになるので個人的にはアリエナイですね...。

    SeqGSEAでの機能解析の基本は、exonレベルとgeneレベルの発現変動解析結果を組み合わせてGSEAを行うというものです(Wang and Cairns, 2013)。 SeqGSEA著者たちは、exonレベルの発現変動解析のことをDifferential splicing (DS) analysisと呼んでいて、 おそらくDSGseq (Wang et al., 2013)はSeqGSEA中に組み込まれています。 そしてgeneレベルの発現変動解析をDifferential expression (DE) analysisとして、SeqGSEA中では DESeqを利用しています。

    GSEAに代表される発現変動遺伝子セット解析は、基本的にGSEAの開発者らが作成した様々な遺伝子セット情報を収めたMolecular Signatures Database (MSigDB)からダウンロードした.gmt形式ファイルを読み込んで解析を行います。

    *gmt形式ファイルのダウンロード方法は、基本的に以下の通りです:

    1. Molecular Signatures Database (MSigDB)
      register」のページで登録し、遺伝子セットをダウンロード可能な状態にする。
    2. Molecular Signatures Database (MSigDB)
      「Download gene sets」の"Download"のところをクリックし、Loginページで登録したe-mail addressを入力。
    3. これでMSigDBのダウンロードページに行けるので、
      「c5: gene ontology gene sets」の「bp: biological process」を解析したい場合はc5.bp.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c5: gene ontology gene sets」の「cc: cellular components」を解析したい場合はc5.cc.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c5: gene ontology gene sets」の「mf: molecular functions」を解析したい場合はc5.mf.v4.0.symbols.gmtファイルをダウンロードしておく。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. exonレベルのカウントデータファイル(srp017142_count_bowtie2.txt)の場合:

    パイプライン | ゲノム | 機能解析 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013) のStep2の出力結果ファイルです。SeqGSEA内部でReadCountSetクラスオブジェクトというものを作成する必要がありますが、 これはexonレベルのカウントデータと遺伝子アノテーション情報(Ensembl gene IDおよびexon ID)を対応づけるためのものです。 カウントデータ自体は、ヒトゲノム("hg19")のEnsembl Genes ("ensGene")情報を利用して取得しているので、 アノテーション情報も同じ条件でオンライン上でTranscriptDbオブジェクトとして取得しています(Lawrence et al., 2013)。 以下のスクリプト中の前処理のところでごちゃごちゃと計算しているのは、複数のEnsembl gene IDによって共有されているexon (shared exon)の情報のみ解析から除外しています。 その後、shared exonを除く残りのexonレベルのカウントデータ情報を用いてDifferential splicing (DS) analysisを行い、exonレベルの発現変動解析(Wang et al., Gene, 2013)を行っています。 計算のボトルネックはこの部分です。 次に、exonレベルのカウントデータからgeneレベルのカウントデータを作成したのち、DESeqパッケージを用いて 遺伝子レベルの発現変動解析(Anders and Huber, 2010)を行っています。 SeqGSEA (Wang and Cairns, BMC Bioinformatics)は、これら2つのレベルの発現変動解析結果の情報を統合して よりよい遺伝子セット解析(Gene Set Enrichment Analysis; GSEA; Subramanian et al., 2005)を行うという手法です。 ヒト遺伝子の90%以上は選択的スプライシングが起こっている(Wang et al., Nature, 2008)ので、 geneレベルのみの発現変動解析結果をもとにするやり方であるGOSeq (Young et al., Genome Biol., 2010)よりもいいだろう、という思想です。 以下では"c5.bp.v4.0.symbols.gmt"の解析を行っています。 また、並べ替え回数がたったの20回でも2時間ちょっとかかります(Panasonic Let's note CF-SX3本郷モデルの場合)のでご注意ください。 並べ替えを200回行って得られた srp017142_SeqGSEA_c5bp_exon200.txtでは、FDR < 0.01を満たすGO termは26個であることがわかります。

    in_f1 <- "srp017142_count_bowtie2.txt" #入力ファイル名を指定してin_f1に格納
    in_f2 <- "c5.bp.v4.0.symbols.gmt"      #入力ファイル名を指定してin_f2に格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_perm <- 20                       #並べ替え回数を指定(数値が大きいほどより正確だがその分だけ時間がかかる。実際の解析ではサンプル数にもよるが最低でも1000以上を推奨)
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(SeqGSEA)                       #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    dim(data)                              #確認してるだけです
    tmp_colname <- colnames(data)          #SeqGSEAが判別可能なサンブルラベル情報に変更
    colnames(data) <- c(paste("E", 1:param_G1, sep=""), paste("C", 1:param_G2, sep=""))#SeqGSEAが判別可能なサンブルラベル情報に変更
    
    #前処理(ReadCountSetクラスオブジェクトの作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    hoge1 <- exonsBy(txdb, by=c("gene"))   #Ensembl Gene IDごとに構成するexonの座標情報を格納したGRangesListオブジェクトをhoge1に格納
    hoge2 <- unlist(hoge1)                 #GRangesListからGRanges形式オブジェクトに変換
    hoge2                                  #確認してるだけです
    hoge3 <- table(hoge2$exon_id)          #exon IDごとの出現回数を取得
    hoge4 <- names(hoge3)[hoge3 == 1]      #出現回数が1回だったもののexon ID情報を取得
    obj <- is.element(as.character(hoge2$exon_id), hoge4)#元のhoge2オブジェクト上での位置情報を取得
    exonIDs <- as.character(hoge2$exon_id)[obj]#shared exon以外のexon IDを取得
    geneIDs <- names(hoge2)[obj]           #shared exon以外のgene IDを取得
    data <- data[exonIDs,]                 #shared exon以外のexon IDの並びでカウントデータのサブセットを取得
    dim(data)                              #確認してるだけです
    exonIDs <- paste("E", exonIDs, sep="") #exon IDの最初に"E"を追加
    RCS <- newReadCountSet(data, exonIDs, geneIDs)#ReadCountSetオブジェクトを作成
    RCS                                    #確認してるだけです
    
    #前処理(低発現exonのフィルタリング)
    RCS <- exonTestability(RCS, cutoff = 5)#exonレベルでの総リードカウント数が5未満のリードを除去
    geneTestable <- geneTestability(RCS)   #geneレベルでのフィルタリングの有無情報を取得
    RCS <- subsetByGenes(RCS, unique(geneID(RCS))[geneTestable])#フィルタリング実行
    RCS                                    #確認してるだけです
    
    #本番(Differential splicing (DS) analysis; Wang et al., Gene, 2013)
    time_DS_s <- proc.time()               #計算時間を計測するため
    RCS <- estiExonNBstat(RCS)             #DS解析(exon DS NB-statistics算出)
    RCS <- estiGeneNBstat(RCS)             #DS解析(gene DS NB-statistics算出)
    head(fData(RCS)[, c("exonIDs", "geneIDs", "testable", "NBstat")])#確認してるだけです
    permuteMat <- genpermuteMat(RCS, times=param_perm)#DS解析(permutation testのところ)
    RCS <- DSpermute4GSEA(RCS, permuteMat) #DS解析(permutation testのところ)
    DSscore.normFac <- normFactor(RCS@permute_NBstat_gene) #DS解析(NB統計量の正規化によるDSスコアの算出)
    DSscore <- scoreNormalization(RCS@featureData_gene$NBstat, DSscore.normFac)#DS解析(NB統計量の正規化によるDSスコアの算出)
    DSscore.perm <- scoreNormalization(RCS@permute_NBstat_gene, DSscore.normFac)#DS解析(NB統計量の正規化によるDSスコアの算出)
    RCS <- DSpermutePval(RCS, permuteMat)  #DS解析(p値の算出)
    head(DSresultGeneTable(RCS))           #確認してるだけです
    time_DS_e <- proc.time()               #計算時間を計測するため
    time_DS_e - time_DS_s                  #計算時間を表示(単位は秒)
    
    #本番(Differential expression (DE) analysis; Anders and Huber, Genome Biol., 2010)
    time_DE_s <- proc.time()               #計算時間を計測するため
    geneCounts <- getGeneCount(RCS)        #DE解析(geneレベルのカウントデータ取得)
    head(geneCounts)                       #確認してるだけです
    DEG <- runDESeq(geneCounts, label(RCS))#DE解析(DESeqの実行)
    DEGres <- DENBStat4GSEA(DEG)           #DE解析(NB統計量情報の取得)
    DEpermNBstat <- DENBStatPermut4GSEA(DEG, permuteMat)#DE解析(permutation testのところ)
    DEscore.normFac <- normFactor(DEpermNBstat)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore <- scoreNormalization(DEGres$NBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore.perm <- scoreNormalization(DEpermNBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEGres <- DEpermutePval(DEGres, DEpermNBstat)#DE解析(p値の算出)
    head(DEGres)                           #確認してるだけです
    time_DE_e <- proc.time()               #計算時間を計測するため
    time_DE_e - time_DE_s                  #計算時間を表示(単位は秒)
    
    #本番(Integrative GSEA; Wang and Cairns, BMC Bioinformatics, 2013)
    combine <- rankCombine(DEscore, DSscore, DEscore.perm, DSscore.perm, DEweight = 0.3)#DS scoreとDE scoreの統合
    gene.score <- combine$geneScore        #integrated score情報取得
    gene.score.perm <- combine$genePermuteScore#permutationデータセットのintegrated average score情報取得
    GS <- loadGenesets(in_f2, unique(geneID(RCS)), geneID.type = "ensembl")#gmtファイルの読み込みおよびSeqGeneSetオブジェクトの作成
    GS <- GSEnrichAnalyze(GS, gene.score, gene.score.perm)#SeqGSEAの実行
    
    #ファイルに保存
    #tmp <- GSEAresultTable(GS, GSDesc = TRUE)#SeqGSEA実行結果をtmpに格納(この関数はソート機能がないので非推奨)
    tmp <- topGeneSets(GS, n=length(GS@GSNames), sortBy="FDR")#SeqGSEA実行結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. geneレベルのカウントデータファイル(srp017142_count_bowtie.txt)の場合:

    パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013) のStep2の出力結果ファイルです。 SeqGSEA (Wang and Cairns, BMC Bioinformatics)は、 exonレベル(Differential Splicing; DS)とgeneレベル(Differential Expression; DE)の2つの発現変動解析結果を統合して よりよい遺伝子セット解析(Gene Set Enrichment Analysis; GSEA; Subramanian et al., 2005)を行うという手法ですが、 選択的スプライシング(Alternative Splicing; AS)が少ないあるいはない高等生物以外にも適用可能です。 ここでは、geneレベルの発現変動解析のみに基づくDE-only GSEAのやり方を示します。計算時間のボトルネックになっていたexonレベルの発現変動解析を含まないので高速に計算可能なため、 並べ替え回数を多くすることが可能です(500回で100分程度)。 以下では"c5.bp.v4.0.symbols.gmt"の解析を行っています。並べ替えを500回行って得られた srp017142_SeqGSEA_c5bp_gene500.txtでは、FDR < 0.05を満たすGO termは10個であることがわかります。

    in_f1 <- "srp017142_count_bowtie.txt"  #入力ファイル名を指定してin_f1に格納
    in_f2 <- "c5.bp.v4.0.symbols.gmt"      #入力ファイル名を指定してin_f2に格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_perm <- 40                       #並べ替え回数を指定(数値が大きいほどより正確だがその分だけ時間がかかる。実際の解析ではサンプル数にもよるが最低でも1000以上を推奨)
    
    #必要なパッケージをロード
    library(SeqGSEA)                       #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    dim(data)                              #確認してるだけです
    tmp_colname <- colnames(data)          #SeqGSEAが判別可能なサンブルラベル情報に変更
    colnames(data) <- c(paste("E", 1:param_G1, sep=""), paste("C", 1:param_G2, sep=""))#SeqGSEAが判別可能なサンブルラベル情報に変更
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(Differential expression (DE) analysis; Anders and Huber, Genome Biol., 2010)
    time_s <- proc.time()                  #計算時間を計測するため
    DEG <- runDESeq(data, as.factor(data.cl))#DESeqの実行
    DEGres <- DENBStat4GSEA(DEG)           #NB統計量情報の取得
    permuteMat <- genpermuteMat(as.factor(data.cl), times=param_perm)#並べ替え情報の取得
    DEpermNBstat <- DENBStatPermut4GSEA(DEG, permuteMat)#DE解析(permutation testのところ)
    DEscore.normFac <- normFactor(DEpermNBstat)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore <- scoreNormalization(DEGres$NBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore.perm <- scoreNormalization(DEpermNBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    
    #本番(Integrative GSEA; Wang and Cairns, BMC Bioinformatics, 2013)
    gene.score <- geneScore(DEscore, DEweight=1)#integrated score情報取得
    gene.score.perm <- genePermuteScore(DEscore.perm, DEweight=1)#permutationデータセットのintegrated average score情報取得
    GS <- loadGenesets(in_f2, rownames(data), geneID.type = "ensembl")#gmtファイルの読み込みおよびSeqGeneSetオブジェクトの作成
    GS <- GSEnrichAnalyze(GS, gene.score, gene.score.perm, weighted.type=1)#SeqGSEAの実行
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(単位は秒)
    
    #ファイルに保存
    #tmp <- GSEAresultTable(GS, GSDesc = TRUE)#SeqGSEA実行結果をtmpに格納(この関数はソート機能がないので非推奨)
    tmp <- topGeneSets(GS, n=length(GS@GSNames), sortBy="FDR")#SeqGSEA実行結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 機能解析 | 遺伝子オントロジー(GO)解析 | GOseq (Young_2010)

    GOseqを用いてGO解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    	

    解析 | 機能解析 | パスウェイ(Pathway)解析 | について

    RNA-seqなどのタグカウントデータからパスウェイ(Pathway)解析を行うためのパッケージもいくつか出ています。このページでは、 SeqGSEAの解析が一通りできるようにしてあります(2014/03/30)。 入力のカウントデータは、Ensembl (Flicek et al., Nucleic Acids Res., 2014)のアノテーション情報がおそらくデファクトスタンダードだと思います。

    2014年3月に調査した結果をリストアップします。

    解析 | 機能解析 | パスウェイ(Pathway)解析 | SeqGSEA (Wang_2014)

    SeqGSEAを用いてPathway解析を行うやり方を示します。 このパッケージは、exonレベルのカウントデータを入力として、発現変動遺伝子セットに相当する有意に発現変動したKEGG Pathway名などを出力するのが基本ですが、geneレベルのカウントデータを入力として解析することも可能です。 統計的有意性の評価にサンプルラベル情報の並べ替え(permutation)戦略を採用しているため、 各グループあたりの反復数が5以上のデータを想定しているようです(Wang et al., 2014)。また、計算時間が半端なくかかります。 例えば、並べ替え回数がたったの20回でも2時間ちょっとかかります(Panasonic Let's note CF-SX3本郷モデルの場合)のでご注意ください。 推奨は1000回以上と書いてますが、10日ほどかかることになるので個人的にはアリエナイですね...。

    SeqGSEAでの機能解析の基本は、exonレベルとgeneレベルの発現変動解析結果を組み合わせてGSEAを行うというものです(Wang and Cairns, 2013)。 SeqGSEA著者たちは、exonレベルの発現変動解析のことをDifferential splicing (DS) analysisと呼んでいて、 おそらくDSGseq (Wang et al., 2013)はSeqGSEA中に組み込まれています。 そしてgeneレベルの発現変動解析をDifferential expression (DE) analysisとして、SeqGSEA中では DESeqを利用しています。

    GSEAに代表される発現変動遺伝子セット解析は、基本的にGSEAの開発者らが作成した様々な遺伝子セット情報を収めたMolecular Signatures Database (MSigDB)からダウンロードした.gmt形式ファイルを読み込んで解析を行います。

    *gmt形式ファイルのダウンロード方法は、基本的に以下の通りです:

    1. Molecular Signatures Database (MSigDB)
      register」のページで登録し、遺伝子セットをダウンロード可能な状態にする。
    2. Molecular Signatures Database (MSigDB)
      「Download gene sets」の"Download"のところをクリックし、Loginページで登録したe-mail addressを入力。
    3. これでMSigDBのダウンロードページに行けるので、
      「c2: curated gene sets」の「all canonical pathways」を解析したい場合はc2.cp.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c2: curated gene sets」の「BioCarta gene sets」を解析したい場合はc2.cp.biocarta.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c2: curated gene sets」の「KEGG gene sets」を解析したい場合はc2.cp.kegg.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c2: curated gene sets」の「Reactome gene sets」を解析したい場合はc2.cp.reactome.v4.0.symbols.gmtファイルをダウンロードしておく。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. exonレベルのカウントデータファイル(srp017142_count_bowtie2.txt)の場合:

    パイプライン | ゲノム | 機能解析 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013) のStep2の出力結果ファイルです。SeqGSEA内部でReadCountSetクラスオブジェクトというものを作成する必要がありますが、 これはexonレベルのカウントデータと遺伝子アノテーション情報(Ensembl gene IDおよびexon ID)を対応づけるためのものです。 カウントデータ自体は、ヒトゲノム("hg19")のEnsembl Genes ("ensGene")情報を利用して取得しているので、 アノテーション情報も同じ条件でオンライン上でTranscriptDbオブジェクトとして取得しています(Lawrence et al., 2013)。 以下のスクリプト中の前処理のところでごちゃごちゃと計算しているのは、複数のEnsembl gene IDによって共有されているexon (shared exon)の情報のみ解析から除外しています。 その後、shared exonを除く残りのexonレベルのカウントデータ情報を用いてDifferential splicing (DS) analysisを行い、exonレベルの発現変動解析(Wang et al., Gene, 2013)を行っています。 計算のボトルネックはこの部分です。 次に、exonレベルのカウントデータからgeneレベルのカウントデータを作成したのち、DESeqパッケージを用いて 遺伝子レベルの発現変動解析(Anders and Huber, 2010)を行っています。 SeqGSEA (Wang and Cairns, BMC Bioinformatics)は、これら2つのレベルの発現変動解析結果の情報を統合して よりよい遺伝子セット解析(Gene Set Enrichment Analysis; GSEA; Subramanian et al., 2005)を行うという手法です。 ヒト遺伝子の90%以上は選択的スプライシングが起こっている(Wang et al., Nature, 2008)ので、 geneレベルのみの発現変動解析結果をもとにするやり方であるGOSeq (Young et al., Genome Biol., 2010)よりもいいだろう、という思想です。 以下では"c2.cp.kegg.v4.0.symbols.gmt"の解析を行っています。 また、並べ替え回数がたったの20回でも2時間ちょっとかかります(Panasonic Let's note CF-SX3本郷モデルの場合)のでご注意ください。 並べ替えを200回行って得られた srp017142_SeqGSEA_c2cp_exon200.txtでは、FDR < 0.02を満たすパスウェイIDは21個であることがわかります(計算時間は20時間ほどでした)。

    in_f1 <- "srp017142_count_bowtie2.txt" #入力ファイル名を指定してin_f1に格納
    in_f2 <- "c2.cp.kegg.v4.0.symbols.gmt" #入力ファイル名を指定してin_f2に格納
    out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_perm <- 20                       #並べ替え回数を指定(数値が大きいほどより正確だがその分だけ時間がかかる。実際の解析ではサンプル数にもよるが最低でも1000以上を推奨)
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(SeqGSEA)                       #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    dim(data)                              #確認してるだけです
    tmp_colname <- colnames(data)          #SeqGSEAが判別可能なサンブルラベル情報に変更
    colnames(data) <- c(paste("E", 1:param_G1, sep=""), paste("C", 1:param_G2, sep=""))#SeqGSEAが判別可能なサンブルラベル情報に変更
    
    #前処理(ReadCountSetクラスオブジェクトの作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    hoge1 <- exonsBy(txdb, by=c("gene"))   #Ensembl Gene IDごとに構成するexonの座標情報を格納したGRangesListオブジェクトをhoge1に格納
    hoge2 <- unlist(hoge1)                 #GRangesListからGRanges形式オブジェクトに変換
    hoge2                                  #確認してるだけです
    hoge3 <- table(hoge2$exon_id)          #exon IDごとの出現回数を取得
    hoge4 <- names(hoge3)[hoge3 == 1]      #出現回数が1回だったもののexon ID情報を取得
    obj <- is.element(as.character(hoge2$exon_id), hoge4)#元のhoge2オブジェクト上での位置情報を取得
    exonIDs <- as.character(hoge2$exon_id)[obj]#shared exon以外のexon IDを取得
    geneIDs <- names(hoge2)[obj]           #shared exon以外のgene IDを取得
    data <- data[exonIDs,]                 #shared exon以外のexon IDの並びでカウントデータのサブセットを取得
    dim(data)                              #確認してるだけです
    exonIDs <- paste("E", exonIDs, sep="") #exon IDの最初に"E"を追加
    RCS <- newReadCountSet(data, exonIDs, geneIDs)#ReadCountSetオブジェクトを作成
    RCS                                    #確認してるだけです
    
    #前処理(低発現exonのフィルタリング)
    RCS <- exonTestability(RCS, cutoff = 5)#exonレベルでの総リードカウント数が5未満のリードを除去
    geneTestable <- geneTestability(RCS)   #geneレベルでのフィルタリングの有無情報を取得
    RCS <- subsetByGenes(RCS, unique(geneID(RCS))[geneTestable])#フィルタリング実行
    RCS                                    #確認してるだけです
    
    #本番(Differential splicing (DS) analysis; Wang et al., Gene, 2013)
    time_DS_s <- proc.time()               #計算時間を計測するため
    RCS <- estiExonNBstat(RCS)             #DS解析(exon DS NB-statistics算出)
    RCS <- estiGeneNBstat(RCS)             #DS解析(gene DS NB-statistics算出)
    head(fData(RCS)[, c("exonIDs", "geneIDs", "testable", "NBstat")])#確認してるだけです
    permuteMat <- genpermuteMat(RCS, times=param_perm)#DS解析(permutation testのところ)
    RCS <- DSpermute4GSEA(RCS, permuteMat) #DS解析(permutation testのところ)
    DSscore.normFac <- normFactor(RCS@permute_NBstat_gene) #DS解析(NB統計量の正規化によるDSスコアの算出)
    DSscore <- scoreNormalization(RCS@featureData_gene$NBstat, DSscore.normFac)#DS解析(NB統計量の正規化によるDSスコアの算出)
    DSscore.perm <- scoreNormalization(RCS@permute_NBstat_gene, DSscore.normFac)#DS解析(NB統計量の正規化によるDSスコアの算出)
    RCS <- DSpermutePval(RCS, permuteMat)  #DS解析(p値の算出)
    head(DSresultGeneTable(RCS))           #確認してるだけです
    time_DS_e <- proc.time()               #計算時間を計測するため
    time_DS_e - time_DS_s                  #計算時間を表示(単位は秒)
    
    #本番(Differential expression (DE) analysis; Anders and Huber, Genome Biol., 2010)
    time_DE_s <- proc.time()               #計算時間を計測するため
    geneCounts <- getGeneCount(RCS)        #DE解析(geneレベルのカウントデータ取得)
    head(geneCounts)                       #確認してるだけです
    DEG <- runDESeq(geneCounts, label(RCS))#DE解析(DESeqの実行)
    DEGres <- DENBStat4GSEA(DEG)           #DE解析(NB統計量情報の取得)
    DEpermNBstat <- DENBStatPermut4GSEA(DEG, permuteMat)#DE解析(permutation testのところ)
    DEscore.normFac <- normFactor(DEpermNBstat)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore <- scoreNormalization(DEGres$NBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore.perm <- scoreNormalization(DEpermNBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEGres <- DEpermutePval(DEGres, DEpermNBstat)#DE解析(p値の算出)
    head(DEGres)                           #確認してるだけです
    time_DE_e <- proc.time()               #計算時間を計測するため
    
    #本番(Integrative GSEA; Wang and Cairns, BMC Bioinformatics, 2013)
    combine <- rankCombine(DEscore, DSscore, DEscore.perm, DSscore.perm, DEweight = 0.3)#DS scoreとDE scoreの統合
    gene.score <- combine$geneScore        #integrated score情報取得
    gene.score.perm <- combine$genePermuteScore#permutationデータセットのintegrated average score情報取得
    GS <- loadGenesets(in_f2, unique(geneID(RCS)), geneID.type = "ensembl")#gmtファイルの読み込みおよびSeqGeneSetオブジェクトの作成
    GS <- GSEnrichAnalyze(GS, gene.score, gene.score.perm)#SeqGSEAの実行
    
    #ファイルに保存
    #tmp <- GSEAresultTable(GS, GSDesc = TRUE)#SeqGSEA実行結果をtmpに格納(この関数はソート機能がないので非推奨)
    tmp <- topGeneSets(GS, n=length(GS@GSNames), sortBy="FDR")#SeqGSEA実行結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    2. geneレベルのカウントデータファイル(srp017142_count_bowtie.txt)の場合:

    パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013) のStep2の出力結果ファイルです。 SeqGSEA (Wang and Cairns, BMC Bioinformatics)は、 exonレベル(Differential Splicing; DS)とgeneレベル(Differential Expression; DE)の2つの発現変動解析結果を統合して よりよい遺伝子セット解析(Gene Set Enrichment Analysis; GSEA; Subramanian et al., 2005)を行うという手法ですが、 選択的スプライシング(Alternative Splicing; AS)が少ないあるいはない高等生物以外にも適用可能です。 ここでは、geneレベルの発現変動解析のみに基づくDE-only GSEAのやり方を示します。計算時間のボトルネックになっていたexonレベルの発現変動解析を含まないので高速に計算可能なため、 並べ替え回数を多くすることが可能です(500回で100分程度)。 以下では"c2.cp.kegg.v4.0.symbols.gmt"の解析を行っています。並べ替えを500回行って得られた srp017142_SeqGSEA_c2cpkegg_gene1000.txtでは、FDR < 0.02を満たすPathwayは44個であることがわかります。

    in_f1 <- "srp017142_count_bowtie.txt"  #入力ファイル名を指定してin_f1に格納
    in_f2 <- "c2.cp.kegg.v4.0.symbols.gmt" #入力ファイル名を指定してin_f2に格納
    out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_perm <- 40                       #並べ替え回数を指定(数値が大きいほどより正確だがその分だけ時間がかかる。実際の解析ではサンプル数にもよるが最低でも1000以上を推奨)
    
    #必要なパッケージをロード
    library(SeqGSEA)                       #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    dim(data)                              #確認してるだけです
    tmp_colname <- colnames(data)          #SeqGSEAが判別可能なサンブルラベル情報に変更
    colnames(data) <- c(paste("E", 1:param_G1, sep=""), paste("C", 1:param_G2, sep=""))#SeqGSEAが判別可能なサンブルラベル情報に変更
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #本番(Differential expression (DE) analysis; Anders and Huber, Genome Biol., 2010)
    time_s <- proc.time()                  #計算時間を計測するため
    DEG <- runDESeq(data, as.factor(data.cl))#DESeqの実行
    DEGres <- DENBStat4GSEA(DEG)           #NB統計量情報の取得
    permuteMat <- genpermuteMat(as.factor(data.cl), times=param_perm)#並べ替え情報の取得
    DEpermNBstat <- DENBStatPermut4GSEA(DEG, permuteMat)#DE解析(permutation testのところ)
    DEscore.normFac <- normFactor(DEpermNBstat)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore <- scoreNormalization(DEGres$NBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore.perm <- scoreNormalization(DEpermNBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    
    #本番(Integrative GSEA; Wang and Cairns, BMC Bioinformatics, 2013)
    gene.score <- geneScore(DEscore, DEweight=1)#integrated score情報取得
    gene.score.perm <- genePermuteScore(DEscore.perm, DEweight=1)#permutationデータセットのintegrated average score情報取得
    GS <- loadGenesets(in_f2, rownames(data), geneID.type = "ensembl")#gmtファイルの読み込みおよびSeqGeneSetオブジェクトの作成
    GS <- GSEnrichAnalyze(GS, gene.score, gene.score.perm, weighted.type=1)#SeqGSEAの実行
    time_e <- proc.time()                  #計算時間を計測するため
    time_e - time_s                        #計算時間を表示(単位は秒)
    
    #ファイルに保存
    #tmp <- GSEAresultTable(GS, GSDesc = TRUE)#SeqGSEA実行結果をtmpに格納(この関数はソート機能がないので非推奨)
    tmp <- topGeneSets(GS, n=length(GS@GSNames), sortBy="FDR")#SeqGSEA実行結果をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    解析 | 菌叢解析 | について

    このあたりはほとんどノータッチです。菌叢解析(microbiome analysis)といういわゆるメタゲノム解析用のRパッケージもあるようです。

    2014年7月に調査した結果をリストアップします。

    R以外:

    Review、ガイドライン、パイプライン系:

    解析 | 菌叢解析 | phyloseq (McMurdie_2013)

    phyloseqを用いて菌叢解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(phyloseq)                      #パッケージの読み込み
    	

    解析 | エクソーム解析 | について

    目的のエクソン領域のみ効率的に濃縮してシークエンスすることで、SNPやインデル(indel)などエクソン(exon)領域中のの変異を検出するものです。 1,000人ゲノムプロジェクト(1000 Genomes Project Consortium, Nature, 2012)の解析などがこの範疇に含まれます。 basic alignerの一つであるBWAでマッピング後にGenome Analysis Toolkit (GATK)という変異検出プログラムを適用する解析パイプラインが王道のようです。 1,000人ゲノムのようなデータが出てきているのでこれらのpopulation (a collection of genomes)に対して効率的にマッピングを行うBWBBLEというプログラムなどが出始めています。 また、exome sequencingとexome microarrayの比較を行った論文(Wang et al., Front Genet., 2013)なども出ています。 2014年7月に調査した結果をリストアップします。

    Review、ガイドライン、パイプライン系:

    解析 | ChIP-seq | について

    このあたりはほとんどノータッチです。2013年12月にデータ解析ガイドライン系の論文(Bailey et al., PLoS Comput Biol., 2013)も出ているようです。

    2014年2月に調査した結果をリストアップします。

    解析 | ChIP-seq | DiffBind (Ross-Innes_2012)

    DiffBindを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(DiffBind)                      #パッケージの読み込み
    	

    解析 | ChIP-seq | ChIPseqR (Humburg_2011)

    ChIPseqRを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(ChIPseqR)                      #パッケージの読み込み
    	

    解析 | ChIP-seq | chipseq

    chipseqを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(chipseq)                       #パッケージの読み込み
    	

    解析 | ChIP-seq | PICS (Zhang_2011)

    PICSを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(PICS)                          #パッケージの読み込み
    	

    解析 | ChIP-seq | ChIPpeakAnno (Zhu_2010)

    ChIPpeakAnnoを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(ChIPpeakAnno)                  #パッケージの読み込み
    	

    解析 | ChIP-seq | rMAT (Droit_2010)

    rMATを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(rMAT)                          #パッケージの読み込み
    	

    解析 | ChIP-seq | CSAR (Kaufmann_2009)

    CSARを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(CSAR)                          #パッケージの読み込み
    	

    解析 | ChIP-seq | ChIPsim (Zhang_2008)

    ChIPsimを用いてChIP-seq解析を行うやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(ChIPsim)                       #パッケージの読み込み
    	

    解析 | ChIP-seq | 新規モチーフ | rGADEM(Li_2009)

    rGADEMを用いたやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(rGADEM)                        #パッケージの読み込み
    	

    解析 | ChIP-seq | 新規モチーフ | cosmo(Bembom_2007)

    cosmoを用いたやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(cosmo)                         #パッケージの読み込み
    	

    解析 | chromosome conformation capture (3C) | について

    "chromosome conformation capture" (3C)は、DNAが細胞中でどのような立体的な配置(染色体の高次構造; chromosome conformation)をとっているか、 またどのような長距離ゲノム間相互作用(long-range genomic interactions)がなされているかを網羅的に調べるための実験技術です(Dekker et al., Science, 2002)。

    その後、circular "chromosome conformation capture" (4C; Zhao et al., Nat. Genet., 2006)、 "chromosome conformation capture" carbon copy (5C; Dostie et al., Genome Res., 2006)、 Hi-C (Lieberman-Aiden et al., Science, 2009)、 single-cell Hi-C (Nagano et al., Nature, 2013)などの関連手法が提案されています。

    ReviewとしてはDekker et al., Nat. Rev. Genet., 2013などが参考になると思います。 これらのクロマチン間の相互作用(chromatin interaction)を網羅的に検出すべく、NGSと組み合わされた"3C-seq"由来データが出てきています。 Rパッケージは、マップ後のBAM形式ファイルなどを入力として、統計的に有意な相互作用をレポートします。

    2014年2月に調査した結果をリストアップします。

    解析 | 3C | r3Cseq (Thongjuea_2013)

    r3Cseqを用いたやり方を示します。

    BAM形式ファイルを入力として、シス相互作用(cis-interaction; 同じ染色体上の異なる部位同士の相互作用)や トランス相互作用(trans-interaction; 異なる染色体間の相互作用)を統計解析結果として出力します。 出力は、シンプルテキストファイルとbedGraphファイル(Kent et al., Genome Res., 2002)のようです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(r3Cseq)                        #パッケージの読み込み
    	

    解析 | Bisulfite sequencing (BS-seq) | について

    Bisulfite sequencing (BS-seq; Bisulfite-seq)は、ゲノムDNAに対してbisulfite (重亜硫酸ナトリウム)処理を行った後にシーケンスを行う実験技術です。

    BS-seqは、メチル化状態を検出するためのものです。bisulfite処理すると、メチル化されていないシトシン(C)はウラシル(U)に変換されます。 しかし、メチル化シトシンはUに変換されません。この性質を利用して、bisulfite処理後のDNAを鋳型にしてsequenceすれば、 メチル化シトシンのみCとして読まれ、それ以外はTとして読まれるので、メチル化の有無を区別することができるというものです。 但し、一般にマイクログラム程度のDNA量を必要とするため、一連の処理はPCR増幅のステップを含みます。 その後、アダプター付加(adapter ligation)後にbisulfite処理を行うのではなく、bisulfite処理後にアダプター付加を行うことでPCR増幅のステップを省いた PBAT法(post-bisulfite adaptor tagging; Miura et al., Nucleic Acids Res., 2012)などの関連手法が開発されているようです。

    2014年2月に調査した結果をリストアップします。

    解析 | BS-seq | BiSeq (Hebestreit_2013)

    BiSeqを用いたやり方を示します。

    Bismark (Krueger et al., Bioinformatics, 2011)というBS-seq用マッピングプログラムの出力ファイルを入力として、 比較するグループ間でメチル化状態の異なる領域(Differentially Methylated Regions; DMRs)を出力します。

    一般に、検定に供されるCpGサイトは100万(one million)以上になります。そのため、多重比較補正(multiple testing correction)後には、 ごく一部の明らかに差のある個所しか有意と判定されない傾向にあります(Bock C., Nat Rev Genet., 2012)。

    BiSeqでは、階層的な検定手順(a hierarchical testing procedure; Benjamini and Heller, J Am Stat Assoc., 2007)を採用しています。 具体的には、最初のステップとして「領域(regions)」を単位として検定を行った後、検定の結果棄却された領域(rejected regions)内でより詳細な「個所(locations)」の検定を行う戦略を採用しています。 このように階層的に行うことで、検定数(number of hypothesis tests)を減らすことができ、ひいては検出力(statistical power)を上げることができるわけです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(BiSeq)                         #パッケージの読み込み
    	

    解析 | BS-seq | bsseq (Hansen_2012)

    bsseqを用いたやり方を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(bsseq)                         #パッケージの読み込み
    	

    解析 | 制限酵素切断部位(RECS)地図 | REDseq (Zhu_201X)

    制限酵素消化(restriction enzyme digestion; RED)でアプローチ可能なところと不可能なところを区別できるとうれしいようです。 この制限酵素認識部位を調べるためのRパッケージだそうです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(REDseq)                        #パッケージの読み込み
    	

    解析 | small RNA | segmentSeq (Hardcastle_2012)

    segmentSeqパッケージを用いたやり方を示します。 ゲノム上のsmall interfering RNAs (siRNAs)が結合?!する場所を探してくれるようです。 主な特徴としては、従来の発見的な方法(heuristic method)では、siRNAsの複数個所の"loci"としてレポートしてしまっていたものを、 提案手法の経験ベイズ(empirical Bayesian methods)を用いることで必要以上に分割してしまうことなく"locus"としてレポートしてくれるようです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(segmentSeq)                    #パッケージの読み込み
    	

    作図 | について

    ggplot2という美しい図を作成できるパッケージが存在します。私自身はまだ使ったことがありませんが、デフォルトの作図で気に入らない方は是非お試しください。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    library(ggplot2)                       #パッケージの読み込み
    	

    作図 | M-A plot(基本編)

    マイクロアレイ解析のときにもよく見かけましたが、NGSデータでもデータの分布を示す目的などで用いられます。

    解析 | 発現変動 | 2群間 | DESeq (Anders_2010)中でもM-A plotの描画法を示していますが、 ここではサンプルデータ2のSupplementaryTable2_changed.txtの 「G1群 5サンプル vs. G2群 5サンプル」の二群間比較データ(raw count; 特定の遺伝子領域にいくつリードがマップされたかをただカウントした数値データ)を用いていくつかの例を示します。

    また、ここでは各群の値の平均値を用いています。 M-A plotについてよくわからない方は私の「2010/12/28のセミナー@金沢」のスライドをごらんください。

    この入力データファイルはver.48のEnsembl Gene IDのものであり、 各IDに対応するGene symbol情報などはイントロ | NGS | アノテーション情報取得(BioMart and biomaRt)の3を行って得られたens_gene_48.txt中に存在します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. raw countのデータ:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #M-A plot本番
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    
    #以下は(こんなこともできますという)おまけ
    #縦軸の任意の位置に赤で水平線を引きたい
    param3 <- 1                            #縦軸の任意の値(つまりこの場合は2倍の発現量の差に相当)をparam3に格納
    abline(h=param3, col="red", lwd=1)     #param3で指定したy軸上の値で横線を引く(lwdの値を大きくするほど線が太くなる;横線を引きたいときはh=param3で、縦線を引きたいときはv=param3にするとよい)
    	

    2. raw countのデータ(サイズを指定してpng形式で保存したいとき):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge2.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #M-A plot本番
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid()                                 #grid線を追加している
    dev.off()                              #おまじない
    	

    3. raw countのデータ(2を基本としてy軸の範囲をparam5で指定したいとき):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge3.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    param5 <- c(-5, 5)                     #y軸の任意の範囲を指定
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #M-A plot本番
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1, ylim=param5)#MA-plotを描画
    dev.off()                              #おまじない
    	

    4. raw countのデータ(3を基本としてグリッドをparam6で指定した色およびparam7で指定した線のタイプで表示させたいとき):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge4.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    param5 <- c(-5, 5)                     #y軸の任意の範囲を指定
    param6 <- "gray"                       #グリッドの色(red, black, blue, and so on)を指定
    param7 <- "solid"                      #グリッド線のタイプ("dotted", "solid", ...)を指定
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #M-A plot本番
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1, ylim=param5)#MA-plotを描画
    grid(col=param6, lty=param7)           #param6, 7で指定したパラメータでグリッドを表示
    dev.off()                              #おまじない
    	

    5. raw countのデータ(4を基本としてparam8で指定した任意のIDがどのあたりにあるかをparam9で指定した色で表示):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge5.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    param5 <- c(-8, 8)                     #y軸の任意の範囲を指定
    param6 <- "gray"                       #グリッドの色(red, black, blue, and so on)を指定
    param7 <- "dotted"                     #グリッド線のタイプ("dotted", "solid", ...)を指定
    param8 <- c("ENSG00000004468","ENSG00000182325","ENSG00000110492","ENSG00000008516","ENSG00000100170","ENSG00000173698","ENSG00000171433")#任意のIDを指定
    param9 <- "red"                        #色を指定
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #M-A plot本番
    obj <- is.element(rownames(data), param8)#param8で指定したIDの位置情報をobjに格納
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    
    #ファイルに保存
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1, ylim=param5)#MA-plotを描画
    grid(col=param6, lty=param7)           #param6, 7で指定したパラメータでグリッドを表示
    points(x_axis[obj], y_axis[obj], col=param9)#param8で指定したGene symbolsに相当する点をparam9で指定した色で表示
    dev.off()                              #おまじない
    
    #以下は(こんなこともできますという)おまけ
    data[obj,]                             #param8で指定したIDの発現データを表示
    	

    6. raw countのデータ(4を基本としてparam8で指定した原著論文中でRT-PCRで発現変動が確認された7遺伝子のGene symbolsがどのあたりにあるかをparam9で指定した色で表示):

    一見ややこしくて回りくどい感じですが、以下のような事柄に対処するために、ここで記述しているような集合演算テクニック(intersect, is.element (or %in%))を駆使することは非常に大事です:

    1. 一つのgene symbolが複数のEnsembl Gene IDsに対応することがよくある。
    2. BioMartなどから取得したIDの対応関係情報を含むアノテーションファイル(ens_gene_48.txt)中に、原著論文で言及されparam8で指定したgene symbolsが存在しない。
    3. 読み込んだ発現データファイル中にはあるがアノテーションファイル中には存在しないIDがある。
    in_f1 <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_f1に格納
    in_f2 <- "ens_gene_48.txt"             #アノテーション情報ファイルを指定してin_f2に格納
    out_f <- "hoge6.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    param5 <- c(-8, 8)                     #y軸の任意の範囲を指定
    param6 <- "gray"                       #グリッドの色(red, black, blue, and so on)を指定
    param7 <- "dotted"                     #グリッド線のタイプ("dotted", "solid", ...)を指定
    param8 <- c("MMP25","SLC5A1","MDK","GPR64","CD38","GLOD5","FBXL6")#RT-PCRで発現変動が確認されたGene symbolsを指定
    param9 <- "red"                        #色を指定
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    tmp <- read.table(in_f2, header=TRUE, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    gs_annot <- tmp[,5]                    #5列目(HGNC symbol)の情報をgs_annotに格納
    names(gs_annot) <- tmp[,1]             #gs_annotとIDを対応づけている
    
    gs_annot_sub <- intersect(gs_annot, param8)#param8で指定したgene symbolsとアノテーションファイル中のgene symbolsの積集合をgs_annot_subに格納(結果としてparam8と同じ情報になるが、アノテーションファイル中にないものをparam8で指定する可能性もあるためです)
    obj_annot <- is.element(gs_annot, gs_annot_sub)#gs_annot_subで指定したgene symbolsのアノテーションファイル中における位置情報をobj_annotに格納(「obj_annot <- gs_annot %in% gs_annot_sub」と同じ意味)
    ensembl_annot_gs <- unique(names(gs_annot)[obj_annot])#アノテーションファイル中のobj_annotに対応する位置にあるEnsembl IDsをensembl_annot_gsに格納
    ensembl_data_gs <- intersect(rownames(data), ensembl_annot_gs)#ensembl_annot_gsで指定したEnsembl IDsと発現データファイル中のEnsembl IDsの積集合をensembl_data_gs
    obj <- is.element(rownames(data), ensembl_data_gs)#発現データファイル中のensembl_data_gsに対応する位置にあるEnsembl IDsをobjに格納 (「obj <- rownames(data) %in% ensembl_data_gs」と同じ意味)
    
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1, ylim=param5)#MA-plotを描画
    grid(col=param6, lty=param7)           #param6, 7で指定したパラメータでグリッドを表示
    points(x_axis[obj], y_axis[obj], col=param9)#param8で指定したGene symbolsに相当する点をparam9で指定した色で表示
    dev.off()                              #おまじない
    
    #以下は(こんなこともできますという)おまけ
    ensembl_data_gs                        #param8で指定したGene symbolsに対応するEnsembl Gene IDを表示
    data[obj,]                             #param8で指定したGene symbolsの発現データを表示
    	

    7. RPMデータ(library size normalizationを行ったデータでMA-plot)の場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge7.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param_fig <- c(600, 400)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #RPM補正とM-A plot本番
    RPM <- sweep(data, 2, 1000000/colSums(data), "*")#RPM補正した結果をRPMに格納
    data <- RPM                            #オブジェクトRPMの情報をdataに代入している
    mean_G1 <- log2(apply(as.matrix(data[,data.cl==1]), 1, mean))#遺伝子ごとにG1群の平均の対数を計算した結果をmean_G1に格納
    mean_G2 <- log2(apply(as.matrix(data[,data.cl==2]), 1, mean))#遺伝子ごとにG2群の平均の対数を計算した結果をmean_G2に格納
    x_axis <- (mean_G1 + mean_G2)/2        #「G1群の平均値」と「G2群の平均値」の平均をとったものがM-A plotのA(x軸の値)に相当するものなのでx_axisに格納)
    y_axis <- mean_G2 - mean_G1            #いわゆるlog比(logの世界での引き算)がM-A plotのM(y軸の値)に相当するものなのでy_axisに格納)
    
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(x_axis, y_axis, xlab="A = (log2(G2)+log2(G1))/2", ylab="M = log2(G2)-log2(G1)", pch=20, cex=.1)#MA-plotを描画
    grid()                                 #grid線を追加している
    dev.off()                              #おまじない
    	

    作図 | M-A plot(ggplot2編)

    ここではサンプルデータ2のSupplementaryTable2_changed.txtの 「G1群 5サンプル vs. G2群 5サンプル」の二群間比較データ(raw count; 特定の遺伝子領域にいくつリードがマップされたかをただカウントした数値データ) とTCCパッケージから生成したシミュレーションデータとを用いて2例を示します。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. raw countのデータ

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    out_f <- "hoge1.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_fig <- c(380, 420)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(ggplot2)
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    colSums(data)
    
    #前処理(データ正規化; 群ごとに総リード数の平均値を揃えている)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    hoge <- data[,data.cl==1]              #G1群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G1群の正規化係数を計算した結果をnfに格納
    G1 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG1に格納
    colSums(G1)                                                      #総リード数を表示
    hoge <- data[,data.cl==2]              #G2群のデータのみ抽出している
    nf <- mean(colSums(hoge))/colSums(hoge)#G2群の正規化係数を計算した結果をnfに格納
    G2 <- sweep(hoge, 2, nf, "*")          #正規化係数を各列に掛けた結果をG2に格納
    colSums(G2)                            #総リード数を表示
    
    #ggplot2用のデータを整形
    mean_G1 <- log2(apply(G1, 1, mean))
    mean_G2 <- log2(apply(G2, 1, mean))
    df <- data.frame(
        A = (mean_G1 + mean_G2) / 2,
        M = mean_G2 - mean_G1
    )
    head(df)
    
    #ggplot2の描画レイヤーを描く
    l <- ggplot(df, aes(x = A, y = M))     #x座標をdfのMEAN列に、y座標をdfのVARIANCEの列とする
    l <- l + geom_point(size = 2, pch = 20, na.rm = T)#マーカーの形ををpch=20、サイズをcex=2で指定する
    l <- l + xlab("A value")               #x軸ラベル
    l <- l + ylab("M value")               #y軸ラベル
    
    #本番(Mean-Variance plot; G1 and G2 両方)
    plot(l)
    
    #画像として保存する(Mean-Variance plot; G1 and G2 両方)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(l)                                #プロット
    dev.off()                              #おまじない
    	

    2. シミュレーションデータ

    TCCパッケージで生成される2群間比較用のシミュレーションデータを描きます。 シミュレーションデータの場合G1群で高発現しているDEGか、G2群で高発現しているDEGか、non-DEGかわかっいるため、それぞれ別々の色に塗ります。

    out_f <- "hoge2.png"                   #出力ファイル名を指定してout_fに格納
    param_G1 <- 5                          #G1群(kidney)のサンプル数を指定
    param_G2 <- 5                          #G2群(liver)のサンプル数を指定
    param_fig <- c(380, 420)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)
    library(ggplot2)
    
    #MAプロット用のデータを生成する
    tcc <- simulateReadCounts(replicates = c(param_G1, param_G2))#TCCパッケージの関数を利用してシミュレーションデータを生成する
    ma <- plot(tcc)                        #TCCパッケージ中のplot関数を利用してMAプロットの座標を求める
    
    #ggplot2用のデータを整形
    tag <- tcc$simulation$trueDEG
    tag[tag == 0] <- "non-DEG"
    tag[tag == 1] <- "DEG (G1)"
    tag[tag == 2] <- "DEG (G2)"
    df <- data.frame(
        A = ma$a.value,                    #横軸の値
        M = ma$m.value,                    #縦軸の値
        TYPE = as.factor(tag)              #DEGかnon-DEGか
    )
    
    #ggplot2の描画レイヤーを描く
    l <- ggplot(df, aes(x = A, y = M))     #x座標をdfのMEAN列に、y座標をdfのVARIANCEの列とする
    l <- l + geom_point(aes(colour = TYPE), size = 2, pch = 20, na.rm = T)#マーカーの形ををpch=20、サイズをcex=2で指定する
    l <- l + xlab("A value")               #x軸ラベル
    l <- l + ylab("M value")               #y軸ラベル
    
    #本番(Mean-Variance plot; G1 and G2 両方)
    plot(l)
    
    #画像として保存する(Mean-Variance plot; G1 and G2 両方)
    png(out_f, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(l)                                #プロット
    dev.off()                              #おまじない
    	

    作図 | ROC曲線

    私の2008,2009年の論文では、 主にRT-PCRで発現変動が確認された遺伝子を「真の発現変動遺伝子」とし、どの発現変動遺伝子のランキング法が「真の発現変動遺伝子」をより上位にすることができるかを示す指標として、 「ROC曲線の下部面積(Area Under the ROC curve; AUC)」で方法の比較を行っています(参考文献1,2)。

    このAUC値を計算するための基礎情報がROC曲線です。よって、

    ここではサンプルデータ2のSupplementaryTable2_changed.txtの 「G1群 5サンプル vs. G2群 5サンプル」の二群間比較データ(raw count; 特定の遺伝子領域にいくつリードがマップされたかをただカウントした数値データ)を用いていくつかの例を示します。

    必要な情報は二つのベクトルです。一つは何らかのランキング法を用いて発現変動の度合いで遺伝子をランキングした順位情報、そしてもう一つはどの遺伝子が「真の発現変動遺伝子」かを示す0 or 1の情報です。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. 「真の発現変動遺伝子」の情報をparam3で指定し、解析 | 発現変動 | 2群間 | baySeq (Hardcastle_2010)の「1.配列長情報なし」の順位情報を用いた場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- c("ENSG00000004468","ENSG00000182325","ENSG00000110492","ENSG00000008516","ENSG00000100170","ENSG00000173698","ENSG00000171433")#任意のIDを指定
    param4 <- "False Positive Rate (FPR)"  #ROC曲線の図のx軸ラベルを指定
    param5 <- "True Positive Rate (TPR)"   #ROC曲線の図のy軸ラベルを指定
    param6 <- "ROC curves for raw count data"#図のタイトルを指定
    
    #必要なパッケージをロード
    library(ROC)                           #パッケージの読み込み
    library(baySeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Step1: 任意のランキング法を用いて順位情報を取得
    groups <- list(NDE=rep(1, (param_G1+param_G2)), DE=data.cl)#このデータセット中には発現変動遺伝子群(DE)とそうでないもの(NDE)が含まれているという情報をgroupsオブジェクトに格納
    data1 <- new("countData", data=as.matrix(data), replicates=data.cl, libsizes=as.integer(colSums(data)), groups=groups)#countDataオブジェクト形式にしてdata1に格納
    data1P.NB <- getPriors.NB(data1, samplesize=1000, estimation="QL", cl=NULL)#事前パラメータの推定
    out <- getLikelihoods.NB(data1P.NB, pET="BIC", cl=NULL)#事後確率を計算
    out@estProps                           #発現変動(DE)遺伝子がデータの中にどの程度含まれていたかを表示(右側の数値;ちなみに左側の数値はNDEの割合を示す)
    stat_bayseq <- out@posteriors[,2]      #DEのposterior likelihoodをstat_bayseqに格納
    rank_bayseq <- rank(-stat_bayseq, ties.method="min")#stat_bayseqでランキングした結果をrank_bayseqに格納
    
    #Step2: 「真の発現変動遺伝子」に相当する行に1を、それ以外を0としたベクトルを作成
    obj <- is.element(rownames(data), param3)#param3で指定したIDの位置情報をobjに格納
    obj[obj == "TRUE"] <- 1                #TRUE or FALSEの情報から1 or 0の情報に変換
    
    #Step3: ROC曲線描画
    out <- rocdemo.sca(truth = obj, data  =-rank_bayseq)#ROC曲線描画用の形式にしてoutに格納
    plot(out, xlab=param4, ylab=param5, main=param6)#描画
    
    #以下は(こんなこともできますという)おまけ
    AUC(out)                               #AUC値を計算
    	

    2. 「1.を基本としつつ、さらにもう一つのランキング法を実行して、二つのROC曲線を重ね書きしたい」場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- c("ENSG00000004468","ENSG00000182325","ENSG00000110492","ENSG00000008516","ENSG00000100170","ENSG00000173698","ENSG00000171433")#任意のIDを指定
    param4 <- "False Positive Rate (FPR)"  #ROC曲線の図のx軸ラベルを指定
    param5 <- "True Positive Rate (TPR)"   #ROC曲線の図のy軸ラベルを指定
    param6 <- "ROC curves for raw count data"#図のタイトルを指定
    
    #必要なパッケージをロード
    source("http://www.iu.a.u-tokyo.ac.jp/~kadota/R/R_functions.R")#おまじない(関数ADの呼び出しのため)
    library(ROC)                           #パッケージの読み込み
    library(baySeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Step1-1: 任意のランキング法1(baySeq)を用いて順位情報を取得
    groups <- list(NDE=rep(1, (param_G1+param_G2)), DE=data.cl)#このデータセット中には発現変動遺伝子群(DE)とそうでないもの(NDE)が含まれているという情報をgroupsオブジェクトに格納
    data1 <- new("countData", data=as.matrix(data), replicates=data.cl, libsizes=as.integer(colSums(data)), groups=groups)#countDataオブジェクト形式にしてdata1に格納
    data1P.NB <- getPriors.NB(data1, samplesize=1000, estimation="QL", cl=NULL)#事前パラメータの推定
    out <- getLikelihoods.NB(data1P.NB, pET="BIC", cl=NULL)#事後確率を計算
    out@estProps                           #発現変動(DE)遺伝子がデータの中にどの程度含まれていたかを表示(右側の数値;ちなみに左側の数値はNDEの割合を示す)
    stat_bayseq <- out@posteriors[,2]      #DEのposterior likelihoodをstat_bayseqに格納
    rank_bayseq <- rank(-stat_bayseq, ties.method="min")#stat_bayseqでランキングした結果をrank_bayseqに格納
    
    #Step1-2: 任意のランキング法2(AD; logratio)を用いて順位情報を取得
    datalog <- log2(data + 1)              #生データに1足してlogをとったものをdatalogに格納
    stat_AD <- AD(data=datalog, data.cl=data.cl)#AD統計量(ただのlogの世界でのAverage Difference)を計算して結果をstat_ADに格納
    rank_AD <- rank(-abs(stat_AD), ties.method="min")#stat_ADでランキングした結果をrank_ADに格納
    
    #Step2: 「真の発現変動遺伝子」に相当する行に1を、それ以外を0としたベクトルを作成
    obj <- is.element(rownames(data), param3)#param3で指定したIDの位置情報をobjに格納
    obj[obj == "TRUE"] <- 1                #TRUE or FALSEの情報から1 or 0の情報に変換
    
    #Step3: ROC曲線描画
    out1 <- rocdemo.sca(truth = obj, data  =-rank_bayseq)#ランキング法1の結果をROC曲線描画用の形式にしてout1に格納
    plot(out1, axes=F, ann=F)              #軸の数値情報およびラベル情報を描画しない(axes=Fとann=F)設定にして描画
    par(new=T)                             #上書きします、という宣言
    out2 <- rocdemo.sca(truth = obj, data  =-rank_AD)#ランキング法2の結果をROC曲線描画用の形式にしてout2に格納
    plot(out2, xlab=param4, ylab=param5, main=param6)#描画
    
    #以下は(こんなこともできますという)おまけ
    AUC(out)                               #AUC値を計算
    	

    3. 「2.を基本としつつ、ランキング法ごとに指定した色にしたい」場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- c("ENSG00000004468","ENSG00000182325","ENSG00000110492","ENSG00000008516","ENSG00000100170","ENSG00000173698","ENSG00000171433")#任意のIDを指定
    param4 <- "False Positive Rate (FPR)"  #ROC曲線の図のx軸ラベルを指定
    param5 <- "True Positive Rate (TPR)"   #ROC曲線の図のy軸ラベルを指定
    param6 <- "ROC curves for raw count data"#図のタイトルを指定
    param7 <- c(  0,  0,  0)               #ランキング法1の色をRGBで指定
    param8 <- c(255,  0,  0)               #ランキング法2の色をRGBで指定
    
    #必要なパッケージをロード
    source("http://www.iu.a.u-tokyo.ac.jp/~kadota/R/R_functions.R")#おまじない(関数ADの呼び出しのため)
    library(ROC)                           #パッケージの読み込み
    library(baySeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Step1-1: 任意のランキング法1(baySeq)を用いて順位情報を取得
    groups <- list(NDE=rep(1, (param_G1+param_G2)), DE=data.cl)#このデータセット中には発現変動遺伝子群(DE)とそうでないもの(NDE)が含まれているという情報をgroupsオブジェクトに格納
    data1 <- new("countData", data=as.matrix(data), replicates=data.cl, libsizes=as.integer(colSums(data)), groups=groups)#countDataオブジェクト形式にしてdata1に格納
    data1P.NB <- getPriors.NB(data1, samplesize=1000, estimation="QL", cl=NULL)#事前パラメータの推定
    out <- getLikelihoods.NB(data1P.NB, pET="BIC", cl=NULL)#事後確率を計算
    out@estProps                           #発現変動(DE)遺伝子がデータの中にどの程度含まれていたかを表示(右側の数値;ちなみに左側の数値はNDEの割合を示す)
    stat_bayseq <- out@posteriors[,2]      #DEのposterior likelihoodをstat_bayseqに格納
    rank_bayseq <- rank(-stat_bayseq, ties.method="min")#stat_bayseqでランキングした結果をrank_bayseqに格納
    
    #Step1-2: 任意のランキング法2(AD; logratio)を用いて順位情報を取得
    datalog <- log2(data + 1)              #生データに1足してlogをとったものをdatalogに格納
    stat_AD <- AD(data=datalog, data.cl=data.cl)#AD統計量(ただのlogの世界でのAverage Difference)を計算して結果をstat_ADに格納
    rank_AD <- rank(-abs(stat_AD), ties.method="min")#stat_ADでランキングした結果をrank_ADに格納
    
    #Step2: 「真の発現変動遺伝子」に相当する行に1を、それ以外を0としたベクトルを作成
    obj <- is.element(rownames(data), param3)#param3で指定したIDの位置情報をobjに格納
    obj[obj == "TRUE"] <- 1                #TRUE or FALSEの情報から1 or 0の情報に変換
    
    #Step3: ROC曲線描画
    out1 <- rocdemo.sca(truth = obj, data  =-rank_bayseq)#ランキング法1の結果をROC曲線描画用の形式にしてout1に格納
    plot(out1, axes=F, ann=F, col=rgb(param7[1], param7[2], param7[3], max=255))#軸の数値情報およびラベル情報を描画しない(axes=Fとann=F)設定にして描画
    par(new=T)                             #上書きします、という宣言
    out2 <- rocdemo.sca(truth = obj, data  =-rank_AD)#ランキング法2の結果をROC曲線描画用の形式にしてout2に格納
    plot(out2, xlab=param4, ylab=param5, main=param6, col=rgb(param8[1], param8[2], param8[3], max=255))#描画
    
    #以下は(こんなこともできますという)おまけ
    AUC(out1)                              #ランキング法1のAUC値を計算
    AUC(out2)                              #ランキング法2のAUC値を計算
    	

    4. 「3.を基本としつつ、legendも追加したい(ここではとりあえず「lwd=1」としてますが線分の形式をいろいろ変えることができます(詳細はこちら))」場合:

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- c("ENSG00000004468","ENSG00000182325","ENSG00000110492","ENSG00000008516","ENSG00000100170","ENSG00000173698","ENSG00000171433")#任意のIDを指定
    param4 <- "False Positive Rate (FPR)"  #ROC曲線の図のx軸ラベルを指定
    param5 <- "True Positive Rate (TPR)"   #ROC曲線の図のy軸ラベルを指定
    param6 <- "ROC curves for raw count data"#図のタイトルを指定
    param7 <- c(  0,  0,  0)               #ランキング法1の色をRGBで指定
    param8 <- c(255,  0,  0)               #ランキング法2の色をRGBで指定
    param9 <- "baySeq"                     #legend用のランキング法1の名前を指定
    param10 <- "AD"                        #legend用のランキング法2の名前を指定
    
    #必要なパッケージをロード
    source("http://www.iu.a.u-tokyo.ac.jp/~kadota/R/R_functions.R")#おまじない(関数ADの呼び出しのため)
    library(ROC)                           #パッケージの読み込み
    library(baySeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Step1-1: 任意のランキング法1(baySeq)を用いて順位情報を取得
    groups <- list(NDE=rep(1, (param_G1+param_G2)), DE=data.cl)#このデータセット中には発現変動遺伝子群(DE)とそうでないもの(NDE)が含まれているという情報をgroupsオブジェクトに格納
    data1 <- new("countData", data=as.matrix(data), replicates=data.cl, libsizes=as.integer(colSums(data)), groups=groups)#countDataオブジェクト形式にしてdata1に格納
    data1P.NB <- getPriors.NB(data1, samplesize=1000, estimation="QL", cl=NULL)#事前パラメータの推定
    out <- getLikelihoods.NB(data1P.NB, pET="BIC", cl=NULL)#事後確率を計算
    out@estProps                           #発現変動(DE)遺伝子がデータの中にどの程度含まれていたかを表示(右側の数値;ちなみに左側の数値はNDEの割合を示す)
    stat_bayseq <- out@posteriors[,2]      #DEのposterior likelihoodをstat_bayseqに格納
    rank_bayseq <- rank(-stat_bayseq, ties.method="min")#stat_bayseqでランキングした結果をrank_bayseqに格納
    
    #Step1-2: 任意のランキング法2(AD; logratio)を用いて順位情報を取得
    datalog <- log2(data + 1)              #生データに1足してlogをとったものをdatalogに格納
    stat_AD <- AD(data=datalog, data.cl=data.cl)#AD統計量(ただのlogの世界でのAverage Difference)を計算して結果をstat_ADに格納
    rank_AD <- rank(-abs(stat_AD), ties.method="min")#stat_ADでランキングした結果をrank_ADに格納
    
    #Step2: 「真の発現変動遺伝子」に相当する行に1を、それ以外を0としたベクトルを作成
    obj <- is.element(rownames(data), param3)#param3で指定したIDの位置情報をobjに格納
    obj[obj == "TRUE"] <- 1                #TRUE or FALSEの情報から1 or 0の情報に変換
    
    #Step3: ROC曲線描画
    out1 <- rocdemo.sca(truth = obj, data  =-rank_bayseq)#ランキング法1の結果をROC曲線描画用の形式にしてout1に格納
    plot(out1, axes=F, ann=F, col=rgb(param7[1], param7[2], param7[3], max=255))#軸の数値情報およびラベル情報を描画しない(axes=Fとann=F)設定にして描画
    par(new=T)                             #上書きします、という宣言
    out2 <- rocdemo.sca(truth = obj, data  =-rank_AD)#ランキング法2の結果をROC曲線描画用の形式にしてout2に格納
    plot(out2, xlab=param4, ylab=param5, main=param6, col=rgb(param8[1], param8[2], param8[3], max=255))#描画
    legend(0.6, 0.3,                       #legendの左上の開始点がx軸0.6y軸0.3の座標となるようにしてlegendを描画
        c(param9, param10),                #param9, 10で指定した方法名を描画
        col=c(rgb(param7[1], param7[2], param7[3], max=255),#param7指定した方法の色を描画
              rgb(param8[1], param8[2], param8[3], max=255)#param8指定した方法の色を描画
        ),                                 #色指定のところは終了
        lwd=1,                             #線の幅を指定(大きな値-->太い線)
        merge=TRUE                         #TRUEにすると図の右端の線にかぶらない
    )                                                                #legendの各種パラメータ指定終了
    
    #以下は(こんなこともできますという)おまけ
    AUC(out1)                              #ランキング法1のAUC値を計算
    AUC(out2)                              #ランキング法2のAUC値を計算
    	

    5. 「4」と同じ結果だがパラメータの指定法が違う場合(多数の方法を一度に描画するときに便利です):

    in_f <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_fに格納
    param_G1 <- 5                          #G1群のサンプル数を指定
    param_G2 <- 5                          #G2群のサンプル数を指定
    param3 <- c("ENSG00000004468","ENSG00000182325","ENSG00000110492","ENSG00000008516","ENSG00000100170","ENSG00000173698","ENSG00000171433")#任意のIDを指定
    param4 <- "False Positive Rate (FPR)"  #ROC曲線の図のx軸ラベルを指定
    param5 <- "True Positive Rate (TPR)"   #ROC曲線の図のy軸ラベルを指定
    param6 <- "ROC curves for raw count data"#図のタイトルを指定
    param7 <- list("baySeq", c(  0,  0,  0))#ランキング法1の「方法名」と「色をRGB」で指定
    param8 <- list("AD", c(255,  0,  0))   #ランキング法2の「方法名」と「色をRGB」で指定
    
    #必要なパッケージをロード
    source("http://www.iu.a.u-tokyo.ac.jp/~kadota/R/R_functions.R")#おまじない(関数ADの呼び出しのため)
    library(ROC)                           #パッケージの読み込み
    library(baySeq)                        #パッケージの読み込み
    
    #入力ファイルの読み込みとラベル情報の作成
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    
    #Step1-1: 任意のランキング法1(baySeq)を用いて順位情報を取得
    groups <- list(NDE=rep(1, (param_G1+param_G2)), DE=data.cl)#このデータセット中には発現変動遺伝子群(DE)とそうでないもの(NDE)が含まれているという情報をgroupsオブジェクトに格納
    data1 <- new("countData", data=as.matrix(data), replicates=data.cl, libsizes=as.integer(colSums(data)), groups=groups)#countDataオブジェクト形式にしてdata1に格納
    data1P.NB <- getPriors.NB(data1, samplesize=1000, estimation="QL", cl=NULL)#事前パラメータの推定
    out <- getLikelihoods.NB(data1P.NB, pET="BIC", cl=NULL)#事後確率を計算
    out@estProps                           #発現変動(DE)遺伝子がデータの中にどの程度含まれていたかを表示(右側の数値;ちなみに左側の数値はNDEの割合を示す)
    stat_bayseq <- out@posteriors[,2]      #DEのposterior likelihoodをstat_bayseqに格納
    rank_bayseq <- rank(-stat_bayseq, ties.method="min")#stat_bayseqでランキングした結果をrank_bayseqに格納
    
    #Step1-2: 任意のランキング法2(AD; logratio)を用いて順位情報を取得
    datalog <- log2(data + 1)              #生データに1足してlogをとったものをdatalogに格納
    stat_AD <- AD(data=datalog, data.cl=data.cl)#AD統計量(ただのlogの世界でのAverage Difference)を計算して結果をstat_ADに格納
    rank_AD <- rank(-abs(stat_AD), ties.method="min")#stat_ADでランキングした結果をrank_ADに格納
    
    #Step2: 「真の発現変動遺伝子」に相当する行に1を、それ以外を0としたベクトルを作成
    obj <- is.element(rownames(data), param3)#param3で指定したIDの位置情報をobjに格納
    obj[obj == "TRUE"] <- 1                #TRUE or FALSEの情報から1 or 0の情報に変換
    
    #Step3: ROC曲線描画
    out1 <- rocdemo.sca(truth = obj, data  =-rank_bayseq)#ランキング法1の結果をROC曲線描画用の形式にしてout1に格納
    plot(out1, axes=F, ann=F, col=rgb(param7[[2]][1], param7[[2]][2], param7[[2]][3], max=255))#軸の数値情報およびラベル情報を描画しない(axes=Fとann=F)設定にして描画
    par(new=T)                             #上書きします、という宣言
    out2 <- rocdemo.sca(truth = obj, data  =-rank_AD)#ランキング法2の結果をROC曲線描画用の形式にしてout2に格納
    plot(out2, xlab=param4, ylab=param5, main=param6, col=rgb(param8[[2]][1], param8[[2]][2], param8[[2]][3], max=255))#描画
    legend(0.6, 0.3,                       #legendの左上の開始点がx軸0.6y軸0.3の座標となるようにしてlegendを描画
        c(param7[[1]], param8[[1]]),       #param9, 10で指定した方法名を描画
        col=c(rgb(param7[[2]][1], param7[[2]][2], param7[[2]][3], max=255),#param7指定した方法の色を描画
              rgb(param8[[2]][1], param8[[2]][2], param8[[2]][3], max=255)#param8指定した方法の色を描画
        ),                                 #色指定のところは終了
        lwd=1,                             #線の幅を指定(大きな値-->太い線)
        merge=TRUE                         #TRUEにすると図の右端の線にかぶらない
    )                                                                #legendの各種パラメータして終了
    
    #以下は(こんなこともできますという)おまけ
    AUC(out1)                              #ランキング法1のAUC値を計算
    AUC(out2)                              #ランキング法2のAUC値を計算
    	

    作図 | SplicingGraphs

    選択的スプライシング(Alternative Splicing; AS)はグラフで表現可能です(Sammeth, 2009)。 SplicingGraphsというパッケージはそれをうまく作成できるようです。

    「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

    1. ...の場合:

    library(SplicingGraphs)                #パッケージの読み込み
    	

    パイプライン | について

    ここの項目では、公共DBからのRNA-seqデータ取得から、マッピング、カウントデータ取得、発現変動解析までの一連のコマンドを示します。 2013年秋頃にRのみで一通り行えるようにしたので記述内容を大幅に変更しています。

    パイプライン | ゲノム | 発現変動 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)

    Neyret-Kahn et al., Genome Res., 2013の2群間比較用ヒトRNA-seqデータ (3 proliferative samples vs. 3 Ras samples)が GSE42213に登録されています。 ここでは、SRAdbパッケージを用いたそのFASTQ形式ファイルのダウンロードから、 QuasRパッケージを用いたマッピングおよびカウントデータ取得、 そしてTCCパッケージを用いた発現変動遺伝子(DEG)検出までを行う一連の手順を示します。

    原著論文(Neyret-Kahn et al., Genome Res., 2013)では72-baseと書いてますが、取得ファイルは54-baseしかありません。 また、ヒトサンプルなのになぜかマウスゲノム("mm9")にマップしたと書いているのも意味不明です。 ちなみ54 bpと比較的長いリードであり、原著論文中でもsplice-aware alignerの一つであるTopHat (Trapnell et al., Bioinformatics, 2009)を用いてマッピングを行ったと記述していますが、 ここでは、(計算時間短縮のため)basic alignerの一つであるBowtieをQuasRの内部で用いています。

    多数のファイルが作成されるので、ここでは「デスクトップ」上に「SRP017142」というフォルダを作成しておき、そこで作業を行うことにします。

    Step1. RNA-seqデータのgzip圧縮済みのFASTQファイルをダウンロード:

    論文中の記述からGSE42213を頼りに、 RNA-seqデータがGSE42212として収められていることを見出し、 その情報からSRP017142にたどり着いています。 したがって、ここで指定するのは"SRP017142"となります。 計6ファイル、合計6Gb程度の容量のファイルがダウンロードされます。東大の有線LANで一時間弱程度かかります。 早く終わらせたい場合は、最後のgetFASTQfile関数のオプションを'ftp'から'fasp'に変更すると時間短縮可能です。 イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の記述内容と基本的に同じです。

    param <- "SRP017142"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(in_acc=hoge$run)     #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    無事ダウンロードが終了すると、作業ディレクトリ(「デスクトップ」上の「SRP017142」フォルダ)中に7つのファイルが存在するはずです。 4Gb程度ある"SRAmetadb.sqlite"ファイルは無視して構いません。残りの"SRR"からはじまる6つのファイルがダウンロードしたRNA-seqデータです。 オリジナルのサンプル名(の略称)で対応関係を表すとsrp017142_samplename.txtのようになっていることがわかります。 尚このファイルはマッピング時の入力ファイルとしても用います。

    Step2. ヒトゲノムへのマッピングおよびカウントデータ取得:

    マップしたいFASTQファイルリストおよびそのサンプル名を記述したsrp017142_samplename.txtを作業ディレクトリに保存したうえで、下記を実行します。 BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19へマッピングしています。 名前から推測できるように"UCSC"の"hg19"にマップしているのと同じです。basic alignerの一つであるBowtieを内部的に用いており、ここではマッピング時のオプションをデフォルトにしています。 原著論文中で用いられたTopHatと同じsplice-aware alignerののカテゴリに含まれるSpliceMap (Au et al., Nucleic Acids Res., 2010) を利用したい場合は、qAlign関数実行のところでsplicedAlignmentオプションをBowtieに対応する"F"からSpliceMapに対応する"T"に変更してください。hg19にマップした結果であり、TranscriptDbオブジェクト取得時のゲノム情報もそれを基本として Ensembl Genes ("ensGene")を指定しているので、Ensembl Gene IDに対するカウントデータ取得になっています。 マシンパワーにもよりますが、ノートPCでも10時間程度で終わると思います。 マップ後 | カウント情報取得 | ゲノム | アノテーション有 | QuasR(Lerch_XXX)の記述内容と基本的に同じです。

    in_f1 <- "srp017142_samplename.txt"    #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f1 <- "srp017142_QC_bowtie.pdf"    #出力ファイル名を指定してout_f1に格納
    out_f2 <- "srp017142_count_bowtie.txt" #出力ファイル名を指定してout_f2に格納
    out_f3 <- "srp017142_genelength.txt"   #出力ファイル名を指定してout_f3に格納
    out_f4 <- "srp017142_RPKM_bowtie.txt"  #出力ファイル名を指定してout_f4に格納
    out_f5 <- "srp017142_transcript_seq.fa"#出力ファイル名を指定してout_f5に格納
    out_f6 <- "srp017142_other_info1.txt"  #出力ファイル名を指定してout_f6に格納
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #マッピングおよびQCレポート用ファイル作成
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=F)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    qQCReport(out, pdfFilename=out_f1)     #QCレポート結果をファイルに保存
    palette("default")                     #おまじない
    
    #カウントデータ取得およびファイル保存
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    data <- count[,-1]                     #カウント情報をdataに格納
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #遺伝子配列長情報取得およびファイル保存
    genelength <- count[,1]                #遺伝子配列長情報をgenelengthに格納
    tmp <- cbind(names(genelength), genelength)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPKM取得およびファイル保存
    nf_RPM <- 1000000/colSums(data)        #正規化係数(RPM補正用)を計算した結果をnf_RPMに格納
    RPM <- sweep(data, 2, nf_RPM, "*")     #正規化係数を各列に掛けた結果をRPMに格納
    nf_RPK <- 1000/genelength              #正規化係数(RPK補正用)を計算した結果をnf_RPKに格納
    RPKM <- sweep(RPM, 1, nf_RPK, "*")     #正規化係数を各行に掛けた結果をRPKMに格納
    tmp <- cbind(rownames(RPKM), RPKM)     #保存したい情報をtmpに格納
    write.table(tmp, out_f4, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #転写物配列情報取得およびファイル保存
    library(in_f2, character.only=T)       #指定したパッケージの読み込み
    tmp <- ls(paste("package", in_f2, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    fasta <- extractTranscriptsFromGenome(genome, txdb)#転写物塩基配列情報を取得した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f5, format="fasta", width=50)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(各種情報)
    sink(out_f6)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Computation time for mapping (in second).\n")#計算時間を表示(一番右側の数字。単位はsecond)
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    cat("\n\n2. Options used for mapping.\n")#マッピングに用いたオプション情報を表示
    out@alignmentParameter                 #マッピングに用いたオプション情報を表示
    cat("\n\n3. Alignment statistics.\n")  #マッピング結果(alignment statistics)の表示。
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    cat("\n\n4. Gene annotation info.\n")  #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    txdb                                   #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    cat("\n\n5. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事マッピングが終了すると、指定した5つのファイルが生成されているはずです。

    1. QCレポートファイル(srp017142_QC_bowtie.pdf):Quality Controlレポートです。よく利用されるFastQCのようなものです。
    2. カウントデータファイル(srp017142_count_bowtie.txt):グループ(サンプル)間での発現変動遺伝子同定に用います。
    3. 遺伝子配列長情報ファイル(srp017142_genelength.txt):配列長とカウント数の関係を調べたいときなどに用います。これはおまけです。
    4. RPKM補正後のファイル(srp017142_RPKM_bowtie.txt):同一サンプル内での発現レベルの大小関係を知りたいときなどに用います。
    5. 転写物塩基配列ファイル(srp017142_transcript_seq.fa):(遺伝子ではなく)転写物の塩基配列のmulti-FASTAファイルです。参考まで。
    6. その他の各種情報ファイル(srp017142_other_info1.txt):論文作成時に必要な、マッピング時に用いたオプション情報、マップされたリード数、Rおよび用いたパッケージのバージョン情報などを含みます。

    Step3. サンプル間クラスタリング:

    カウントデータ(srp017142_count_bowtie.txt)を用いてサンプル間の全体的な類似度を眺めることを目的として、サンプル間クラスタリングを行います。

    類似度は「1-Spearman相関係数」、方法は平均連結法で行っています。 TCC論文(Sun et al., 2013)のFig.3でも同じ枠組みでクラスタリングを行った結果を示していますので、英語論文執筆時の参考にどうぞ。 PearsonではなくSpearmanで行っているのは、ダイナミックレンジが広いので、順序尺度程度にしておいたほうがいいだろうという思想が一番大きいです。 log2変換してダイナミックレンジを圧縮してPearsonにするのも一般的には「アリ」だとは思いますが、マップされたリード数が100万以上あるにも関わらずRPKMデータを用いると、RPKM補正後の値が1未満のものがかなり存在すること、 そしてlogをとれるようにゼロカウントデータの処理が必要ですがやりかた次第で結果がころころかわりうるという状況が嫌なので、RNA-seqデータの場合には私はSpearman相関係数にしています。 また、ベクトルの要素間の差を基本とするdistance metrics (例:ユークリッド距離やマンハッタン距離など)は、比較的最近のRNA-seqデータ正規化法 (TMM: Robinson and Oshlack, 2010, TbT: Kadota et al., 2012, TCC; Sun et al., 2013)論文の重要性が理解できれば、その類似度は少なくともfirst choiceにならないと思われます。 つまり、サンプルごとに転写物の組成比が異なるため、RPMやCPMのような総リード数を補正しただけのデータを用いて「サンプル間の数値の差」に基づいて距離を定めるのはいかがなものか?という思想です。 逆に、ユークリッド距離などを用いてクラスタリングを行った結果と比較することで、転写物の組成比に関する知見が得られるのかもしれません。 さらに、全体的な発現レベルが低いものを予めフィルタリングしておく必要もあるのだろうとは思います。このあたりは、真の回答はありませんので、 (手持ちのデータにこの類似度を適用したときの理論上の短所をきちんと理解したうえで)いろいろ試すというのは重要だとは思います。 ここではカウントデータでクラスタリングをしていますが、おそらく配列長補正後のRPKMデータ(srp017142_RPKM_bowtie.txt) でも得られる樹形図のトポロジー(相対的な位置関係)はほぼ同じになるのではないかと思っています。配列長補正の有無で、サンプル間の相関係数の値自体は変わりますが、 同じグループに属するサンプルであれば反復実験間でそれほど違わないので、多少順位に変動があっても全体としては相殺されるはずです...が確証はありません。

    in_f3 <- "srp017142_count_bowtie.txt"  #入力ファイル名を指定してin_f3に格納
    out_f6 <- "srp017142_count_cluster.png"#出力ファイル名を指定してout_f6に格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f3, header=TRUE, row.names=1, sep="\t", quote="")#指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #クラスタリングおよび結果の保存
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f6, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    無事計算が終了すると、指定したファイル(srp017142_count_cluster.png)が生成されているはずです。

    Step4. 発現変動遺伝子(DEG)同定:

    カウントデータファイル(srp017142_count_bowtie.txt)を入力として2群間で発現の異なる遺伝子の検出を行います。 このデータはbiological replicatesありのデータなので、TCCパッケージ(Sun et al., 2013)の推奨ガイドラインに従って、 iDEGES/edgeR正規化(Sun et al., 2013; Robinson et al., 2010; Robinson and Oshlack, 2010; Robinson and Smyth, 2008)を行ったのち、 edgeRパッケージ中のan exact test (Robinson and Smyth, 2008)を行って、DEG検出を行っています。 解析 | 発現変動 | 2群間 | 対応なし | 複製あり | iDEGES/edgeR-edgeR(Sun_2013)および 正規化 | サンプル間 | 2群間 | 複製あり | iDEGES/edgeR(Sun_2013)の記述内容と基本的に同じです。

    in_f4 <- "srp017142_count_bowtie.txt"  #入力ファイル名を指定してin_f4に格納
    out_f7 <- "srp017142_DEG_bowtie.txt"   #出力ファイル名を指定してout_f7に格納
    out_f8 <- "srp017142_MAplot_bowtie.png"#出力ファイル名を指定してout_f8に格納
    out_f9 <- "srp017142_other_info2.txt"  #出力ファイル名を指定してout_f9に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(430, 390)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f4, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    tmp <- cbind(rownames(tcc$count), normalized, result)#正規化後のデータの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f7, sep="\t", append=F, quote=F, row.names=F)#tmpの中身をout_f7で指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f8, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    
    #ファイルに保存(各種情報)
    sink(out_f9)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Numbers of DEGs satisfying several FDR thresholds.\n")#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.05:");print(sum(tcc$stat$q.value < 0.05))#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.10:");print(sum(tcc$stat$q.value < 0.10))#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.20:");print(sum(tcc$stat$q.value < 0.20))#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.30:");print(sum(tcc$stat$q.value < 0.30))#任意のFDR閾値を満たす遺伝子数を表示
    cat("\n\n2. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事計算が終了すると、指定した3つのファイルが生成されているはずです。

    1. 発現変動解析結果ファイル(srp017142_DEG_bowtie.txt):iDEGES/edgeR-edgeRパイプラインによるDEG同定結果です。 "rank"列でソートすると発現変動の度合い順になります。"q.value"列の情報は任意のFDR閾値を満たす遺伝子数を調べるときに用います。 尚、左側の実数の数値データはiDEGES/edgeR正規化後のデータです。M-A plotはこの数値データに基づいて作成されています。尚、配列長補正は掛かっておりませんのでご注意ください。
    2. M-A plotファイル(srp017142_MAplot_bowtie.png):M versus A plotです。横軸が平均発現レベル(右側が高発現、左側が低発現)。縦軸がlog(G2/G1)で、0より下がG1群で高発現、0より上がG2群で高発現です。
    3. その他の各種情報ファイル(srp017142_other_info2.txt):FDR < 0.05, 0.1, 0.2, 0.3を満たす遺伝子数、論文作成時に必要な、Rおよび用いたパッケージのバージョン情報(特にTCC)などを含みます。

    Step5. iDEGES/edgeR正規化後のデータに配列長補正を実行:

    カウントデータファイル(srp017142_count_bowtie.txt)と遺伝子配列長情報ファイル(srp017142_genelength.txt)を入力として TCCパッケージ(Sun et al., 2013)の推奨ガイドラインに従って、 iDEGES/edgeR正規化(Sun et al., 2013; Robinson et al., 2010; Robinson and Oshlack, 2010; Robinson and Smyth, 2008)を行ったのち、 配列長補正(Reads per kilobase (RPK) or Counts per kilobase (CPK))を実行した結果を返します。

    そろそろ誰かが論文で公式に言い出すかもしれません(既にどこかで書かれているかも...)が、RPM (Reads per million)が提唱されたのは、総リード数が100万程度だった時代です。 今はマップされた総リード数が数千万リードという時代ですので、RPM or RPKMのような100万にするような補正後のデータだと、 (細かい点をすっとばすと)せっかく読んだ総リード数の桁が増えてもダイナミックレンジが広くなりようがありません。 iDEGES/edgeR正規化後のデータは、マップされた総リード数の中央値(median)に合わせているので、リード数が増えるほどダイナミックレンジは広くなります。 しかし、これ自体は配列長補正がかかっていないため、RPKMデータと似たような「配列長補正まで行った後のiDEGES/edgeR正規化データ」があったほうが嬉しいヒトがいるのかな、ということで提供しています。 利用法としては、サンプル間クラスタリングを行う際に、順位相関係数以外のサンプルベクトル中の要素間の差に基づくユークリッド距離やマンハッタン距離をどうしても使いたい場合には RPKMのようなデータを使うよりはこちらの正規化データのほうがnon-DEG間の距離がより0に近い値になるから直感的にはいいのではと思っています。 ただし、iDEGES/edgeR正規化を行うときにサンプルのラベル情報を用いていながら(supervised learningみたいなことを行っている)、 unsupervised learningの一種であるクラスタリングを行う、ということの妥当性についてはよくわかりません。

    正規化 | サンプル間 | 2群間 | 複製あり | iDEGES/edgeR(Sun_2013)正規化 | 基礎 | RPK or CPK (配列長補正)の記述内容と基本的に同じです。

    in_f4 <- "srp017142_count_bowtie.txt"  #入力ファイル名を指定してin_f4に格納
    in_f5 <- "srp017142_genelength.txt"    #入力ファイル名を指定してin_f5に格納
    out_f10 <- "srp017142_normalized_bowtie.txt"#出力ファイル名を指定してout_f10に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f4, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    len <- read.table(in_f5, header=TRUE, row.names=1, sep="\t", quote="")#in_f5で指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化 --> 配列長補正)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    nf <- 1000/len[,1]                     #正規化係数(RPK補正用)を計算した結果をnfに格納
    normalizedK <- sweep(normalized, 1, nf, "*")#正規化係数を各行に掛けた結果をnormalizedKに格納
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), normalizedK)#「rownames情報」、「正規化後のカウントデータ」を列方向で結合した結果をtmpに格納
    write.table(tmp, out_f10, sep="\t", append=F, quote=F, row.names=F)#tmpの中身をout_f10で指定したファイル名で保存
    	

    無事計算が終了すると、配列長補正まで行った後のiDEGES/edgeR正規化データファイル(srp017142_normalized_bowtie.txt)が生成されているはずです。

    パイプライン | ゲノム | 機能解析 | 2群間 | 対応なし | 複製あり | SRP017142(Neyret-Kahn_2013)

    Neyret-Kahn et al., Genome Res., 2013の2群間比較用ヒトRNA-seqデータ (3 proliferative samples vs. 3 Ras samples)が GSE42213に登録されています。 ここでは、ファイルのダウンロードから、マッピング、カウントデータ取得、機能解析までを行う一連の手順を示します。 SRAdbパッケージを用いたFASTQ形式ファイルのダウンロードがうまくいかない現象を2014/03/27に確認した(2014/04/01に復旧確認済み)ので、 それを使わずに行っています。

    多数のファイルが作成されるので、ここでは「デスクトップ」上に「SRP017142」というフォルダを作成しておき、そこで作業を行うことにします。

    Step1. RNA-seqデータのbzip2圧縮済みのFASTQファイルをダウンロード:

    論文中の記述からGSE42213を頼りに、 RNA-seqデータがGSE42212として収められていることを見出し、 その情報からSRP017142にたどり着きます。

    ダウンロードはDDBJ Sequence Read Archive (DRA)のサイトからbzip2圧縮されたFASTQ形式ファイル (SRR616151.fastq.bz2, ..., SRR616156.fastq.bz2)として行います。

    無事ダウンロードが終了すると、作業ディレクトリ(「デスクトップ」上の「SRP017142」フォルダ)中に6つのファイルが存在するはずです。 オリジナルのサンプル名(の略称)で対応関係を表すとsrp017142_samplename2.txtのようになっていることがわかります。 尚このファイルはマッピング時の入力ファイルとしても用います。

    Step2. ヒトゲノムへのマッピングおよびカウントデータ取得:

    マップしたいFASTQファイルリストおよびそのサンプル名を記述したsrp017142_samplename2.txtを作業ディレクトリに保存したうえで、下記を実行します。

    BSgenomeパッケージで利用可能なBSgenome.Hsapiens.UCSC.hg19へマッピングしています。 名前から推測できるように"UCSC"の"hg19"にマップしているのと同じです。

    basic alignerの一つであるBowtieを内部的に用いており、 ここではマッピング時のオプションを"-m 1 --best --strata -v 2"にしています。

    hg19にマップした結果なので、TranscriptDbオブジェクト取得時のゲノム情報もそれを基本として Ensembl Genes ("ensGene")を指定しているので、Ensembl Gene IDに対するカウントデータ取得になっています。 但し、機能解析で用いるSeqGSEAパッケージの入力に合わせて、exonレベルのカウントデータとして取得しています。

    マシンパワーにもよりますが、ノートPCでも10時間程度で終わると思います。

    マップ後 | カウント情報取得 | ゲノム | アノテーション有 | QuasR(Lerch_XXX)の記述内容と基本的に同じです。

    in_f1 <- "srp017142_samplename2.txt"   #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f1 <- "srp017142_QC_bowtie2.pdf"   #出力ファイル名を指定してout_f1に格納
    out_f2 <- "srp017142_count_bowtie2.txt"#出力ファイル名を指定してout_f2に格納
    out_f3 <- "srp017142_genelength2.txt"  #出力ファイル名を指定してout_f3に格納
    out_f4 <- "srp017142_RPKM_bowtie2.txt" #出力ファイル名を指定してout_f4に格納
    out_f5 <- "srp017142_transcript_seq2.fa"#出力ファイル名を指定してout_f5に格納
    out_f6 <- "srp017142_other_info1_2.txt" #出力ファイル名を指定してout_f6に格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    param3 <- "exon"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #マッピングおよびQCレポート用ファイル作成
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    qQCReport(out, pdfFilename=out_f1)     #QCレポート結果をファイルに保存
    palette("default")                     #おまじない
    
    #カウントデータ取得およびファイル保存
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    data <- count[,-1]                     #カウント情報をdataに格納
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #配列長情報取得およびファイル保存
    genelength <- count[,1]                #遺伝子配列長情報をgenelengthに格納
    tmp <- cbind(names(genelength), genelength)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPKM取得およびファイル保存
    nf_RPM <- 1000000/colSums(data)        #正規化係数(RPM補正用)を計算した結果をnf_RPMに格納
    RPM <- sweep(data, 2, nf_RPM, "*")     #正規化係数を各列に掛けた結果をRPMに格納
    nf_RPK <- 1000/genelength              #正規化係数(RPK補正用)を計算した結果をnf_RPKに格納
    RPKM <- sweep(RPM, 1, nf_RPK, "*")     #正規化係数を各行に掛けた結果をRPKMに格納
    tmp <- cbind(rownames(RPKM), RPKM)     #保存したい情報をtmpに格納
    write.table(tmp, out_f4, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #塩基配列情報取得およびファイル保存
    library(in_f2, character.only=T)       #指定したパッケージの読み込み
    tmp <- ls(paste("package", in_f2, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    fasta <- extractTranscriptsFromGenome(genome, txdb)#転写物塩基配列情報を取得した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f5, format="fasta", width=50)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(各種情報)
    sink(out_f6)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Computation time for mapping (in second).\n")#計算時間を表示(一番右側の数字。単位はsecond)
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    cat("\n\n2. Options used for mapping.\n")#マッピングに用いたオプション情報を表示
    out@alignmentParameter                 #マッピングに用いたオプション情報を表示
    cat("\n\n3. Alignment statistics.\n")  #マッピング結果(alignment statistics)の表示。
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    cat("\n\n4. Gene annotation info.\n")  #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    txdb                                   #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    cat("\n\n5. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事マッピングが終了すると、指定した6つのファイルが生成されているはずです。

    1. QCレポートファイル(srp017142_QC_bowtie2.pdf):Quality Controlレポートです。よく利用されるFastQCのようなものです。
    2. カウントデータファイル(srp017142_count_bowtie2.txt):グループ(サンプル)間での発現変動遺伝子同定に用います。
    3. 遺伝子配列長情報ファイル(srp017142_genelength2.txt):配列長とカウント数の関係を調べたいときなどに用います。これはおまけです。
    4. RPKM補正後のファイル(srp017142_RPKM_bowtie2.txt):同一サンプル内での発現レベルの大小関係を知りたいときなどに用います。
    5. 転写物塩基配列ファイル(srp017142_transcript_seq2.fa):(遺伝子ではなく)転写物の塩基配列のmulti-FASTAファイルです。参考まで。
    6. その他の各種情報ファイル(srp017142_other_info1_2.txt):論文作成時に必要な、マッピング時に用いたオプション情報、マップされたリード数、Rおよび用いたパッケージのバージョン情報などを含みます。

    Step3. 機能解析:

    カウントデータファイル(srp017142_count_bowtie2.txt)を入力として SeqGSEAを用いて機能解析を行います。 このパッケージは基本的にexonレベルのカウントデータを入力とするので、その前提で行っています。 また、統計的有意性の評価にサンプルラベル情報の並べ替え(permutation)戦略を採用しているため、 各グループあたりの反復数が5以上のデータを想定しているようです。また、計算時間を半端なく要します(10時間とか)。 それゆえ、本来このデータセットはグループあたりの反復数が3しかないので、適用外ということになります。

    Step2に引き続いて行う場合には、dataとtxdbオブジェクトの構築を行う必要は本来ありません。 同様の理由でtxdbオブジェクトの作成に必要なparam1とparam2も必要ありませんが、 これらのアノテーション情報を利用していることが既知であるという前提のもとで行っています。

    最終的に欲しいReadCountSetクラスオブジェクトは、「カウントデータ、gene ID、exon ID」の3つの情報から構築されます。 しかし、txdbオブジェクトから得られるgene IDとexon IDはshared exonを含むので、曖昧性を排除するためこれらを除去する必要があります。 それゆえ、hoge2中のexon IDを抽出して一回しか出現しなかったIDをhoge4として取得し、 もとのhoge2オブジェクトの並びで取得しなおしたものがexonIDsとgeneIDsオブジェクトです。

    exonレベルカウントデータもshared exonの情報を含むので、それらを除いたものを取得しています。

    SeqGSEAでの機能解析の基本はexonレベルとgeneレベルの発現変動解析結果を組み合わせてGSEAを行うというものです(Wang and Cairns, 2013)。 SeqGSEA著者たちは、exonレベルの発現変動解析のことをDifferential splicing (DS) analysisと呼んでいて、 おそらくDSGseqはSeqGSEA中に組み込まれていると思います。 そしてgeneレベルの発現変動解析をdifferential expression (DE) analysisとして、SeqGSEA中では DESeqを利用しています。

    GSEAに代表される発現変動遺伝子セット解析は、基本的にGSEAの開発者らが作成した様々な遺伝子セット情報を収めたMolecular Signatures Database (MSigDB)からダウンロードした.gmt形式ファイルを読み込んで解析を行います。

    *gmt形式ファイルのダウンロード方法は、基本的に以下の通りです:

    1. Molecular Signatures Database (MSigDB)
      register」のページで登録し、遺伝子セットをダウンロード可能な状態にする。
    2. Molecular Signatures Database (MSigDB)
      「Download gene sets」の"Download"のところをクリックし、Loginページで登録したe-mail addressを入力。
    3. これでMSigDBのダウンロードページに行けるので、
      「c5: gene ontology gene sets」の「BP: biological process」を解析したい場合はc5.bp.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c2: curated gene sets」の「KEGG gene sets」を解析したい場合はc2.cp.kegg.v4.0.symbols.gmtファイルをダウンロードしておく。
      「c3: motif gene sets」を解析したい場合はc3.all.v4.0.symbols.gmtファイルをダウンロードしておく。

    以下ではc5.bp.v4.0.symbols.gmtの解析を行っています。 また、並べ替え回数がたったの20回でも2時間ちょっとかかります(Panasonic Let's note CF-SX3本郷モデルの場合)のでご注意ください。 推奨は1000回以上と書いてますが、個人的にはアリエナイですね。。。

    in_f4 <- "srp017142_count_bowtie2.txt" #入力ファイル名を指定してin_f4に格納
    in_f5 <- "c5.bp.v4.0.symbols.gmt"      #入力ファイル名を指定してin_f5に格納
    out_f7 <- "srp017142_SeqGSEA_c5bp.txt" #出力ファイル名を指定してout_f7に格納
    param_G1 <- 3                          #G1群のサンプル数を指定
    param_G2 <- 3                          #G2群のサンプル数を指定
    param_perm <- 20                       #並べ替え回数を指定(数値が大きいほどより正確だがその分だけ時間がかかる。実際の解析ではサンプル数にもよるが最低でも1000以上を推奨)
    param1 <- "hg19"                       #TranscriptDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
    param2 <- "ensGene"                    #TranscriptDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
    
    #必要なパッケージをロード
    library(SeqGSEA)                       #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f4, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    dim(data)                              #確認してるだけです
    tmp_colname <- colnames(data)          #SeqGSEAが判別可能なサンブルラベル情報に変更
    colnames(data) <- c(paste("E", 1:param_G1, sep=""), paste("C", 1:param_G2, sep=""))#SeqGSEAが判別可能なサンブルラベル情報に変更
    
    #前処理(ReadCountSetクラスオブジェクトの作成)
    txdb <- makeTranscriptDbFromUCSC(genome=param1, tablename=param2)#TranscriptDbオブジェクトを取得してtxdbに格納
    hoge1 <- exonsBy(txdb, by=c("gene"))   #Ensembl Gene IDごとに構成するexonの座標情報を格納したGRangesListオブジェクトをhoge1に格納
    hoge2 <- unlist(hoge1)                 #GRangesListからGRanges形式オブジェクトに変換
    hoge2                                  #確認してるだけです
    hoge3 <- table(hoge2$exon_id)          #exon IDごとの出現回数を取得
    hoge4 <- names(hoge3)[hoge3 == 1]      #出現回数が1回だったもののexon ID情報を取得
    obj <- is.element(as.character(hoge2$exon_id), hoge4)#元のhoge2オブジェクト上での位置情報を取得
    exonIDs <- as.character(hoge2$exon_id)[obj]#shared exon以外のexon IDを取得
    geneIDs <- names(hoge2)[obj]           #shared exon以外のgene IDを取得
    data <- data[exonIDs,]                 #shared exon以外のexon IDの並びでカウントデータのサブセットを取得
    #rownames(data) <- paste(geneIDs, exonIDs, sep=":")#行名を変更
    dim(data)                              #確認してるだけです
    exonIDs <- paste("E", exonIDs, sep="") #exon IDの最初に"E"を追加
    RCS <- newReadCountSet(data, exonIDs, geneIDs)#ReadCountSetオブジェクトを作成
    RCS                                    #確認してるだけです
    
    #前処理(低発現exonのフィルタリング)
    RCS <- exonTestability(RCS, cutoff = 5)#exonレベルでの総リードカウント数が5未満のリードを除去
    geneTestable <- geneTestability(RCS)   #geneレベルでのフィルタリングの有無情報を取得
    RCS <- subsetByGenes(RCS, unique(geneID(RCS))[geneTestable])#フィルタリング実行
    RCS                                    #確認してるだけです
    
    #本番(Differential splicing (DS) analysis; Wang et al., Gene, 2013)
    time_DS_s <- proc.time()               #計算時間を計測するため
    RCS <- estiExonNBstat(RCS)             #DS解析(exon DS NB-statistics算出)
    RCS <- estiGeneNBstat(RCS)             #DS解析(gene DS NB-statistics算出)
    head(fData(RCS)[, c("exonIDs", "geneIDs", "testable", "NBstat")])#確認してるだけです
    permuteMat <- genpermuteMat(RCS, times=param_perm)#DS解析(permutation testのところ)
    RCS <- DSpermute4GSEA(RCS, permuteMat) #DS解析(permutation testのところ)
    DSscore.normFac <- normFactor(RCS@permute_NBstat_gene) #DS解析(NB統計量の正規化によるDSスコアの算出)
    DSscore <- scoreNormalization(RCS@featureData_gene$NBstat, DSscore.normFac)#DS解析(NB統計量の正規化によるDSスコアの算出)
    DSscore.perm <- scoreNormalization(RCS@permute_NBstat_gene, DSscore.normFac)#DS解析(NB統計量の正規化によるDSスコアの算出)
    RCS <- DSpermutePval(RCS, permuteMat)  #DS解析(p値の算出)
    head(DSresultGeneTable(RCS))           #確認してるだけです
    time_DS_e <- proc.time()               #計算時間を計測するため
    time_DS_e - time_DS_s                  #計算時間を表示(単位は秒)
    
    #本番(Differential expression (DE) analysis; Anders and Huber, Genome Biol., 2010)
    time_DE_s <- proc.time()               #計算時間を計測するため
    geneCounts <- getGeneCount(RCS)        #DE解析(geneレベルのカウントデータ取得)
    head(geneCounts)                       #確認してるだけです
    DEG <- runDESeq(geneCounts, label(RCS))#DE解析(DESeqの実行)
    DEGres <- DENBStat4GSEA(DEG)           #DE解析(NB統計量情報の取得)
    DEpermNBstat <- DENBStatPermut4GSEA(DEG, permuteMat)#DE解析(permutation testのところ)
    DEscore.normFac <- normFactor(DEpermNBstat)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore <- scoreNormalization(DEGres$NBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEscore.perm <- scoreNormalization(DEpermNBstat, DEscore.normFac)#DE解析(NB統計量の正規化によるDEスコアの算出)
    DEGres <- DEpermutePval(DEGres, DEpermNBstat)#DE解析(p値の算出)
    head(DEGres)                           #確認してるだけです
    time_DE_e <- proc.time()               #計算時間を計測するため
    time_DE_e - time_DE_s                  #計算時間を表示(単位は秒)
    
    #本番(Integrative GSEA; Wang and Cairns, BMC Bioinformatics, 2013)
    combine <- rankCombine(DEscore, DSscore, DEscore.perm, DSscore.perm, DEweight = 0.3)#DS scoreとDE scoreの統合
    gene.score <- combine$geneScore        #integrated score情報取得
    gene.score.perm <- combine$genePermuteScore#permutationデータセットのintegrated average score情報取得
    GS <- loadGenesets(in_f5, unique(geneID(RCS)), geneID.type = "ensembl")#gmtファイルの読み込みおよびSeqGeneSetオブジェクトの作成
    GS <- GSEnrichAnalyze(GS, gene.score, gene.score.perm)#SeqGSEAの実行
    
    #ファイルに保存
    #tmp <- GSEAresultTable(GS, GSDesc = TRUE)#SeqGSEA実行結果をtmpに格納(この関数はソート機能がないので非推奨)
    tmp <- topGeneSets(GS, n=length(GS@GSNames), sortBy="FDR")#SeqGSEA実行結果をtmpに格納
    write.table(tmp, out_f7, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

    無事計算が終了すると、指定したファイル(srp017142_SeqGSEA_c5bp.txt)が生成されているはずです。 このファイルは並べ替え回数を30回(param_perm <- 30)にして実行した結果です。 permutation p-valueに基づく結果であり並べ替え回数が少ないので、同じ数値を指定した計算結果でも、全く同じ数値や並びになっているとは限りませんのでご注意ください。 例えば、このファイルの場合は、FDR < 0.05未満のものが22個(遺伝子セット名が"CYTOKINESIS"から"INNATE_IMMUNE_RESPONSE"まで)あると解釈します。

    パイプライン | ゲノム | 機能解析 | 2群間 | 対応なし | 複製あり | SRP011435(Huang_2012)

    Huang et al., Development, 2012の2群間比較用シロイヌナズナRNA-seqデータ (4 DEX-treated vs. 4 mock-treated)が GSE36469に登録されています。 ここでは、SRAdbパッケージを用いたそのFASTQ形式ファイルのダウンロードから、 QuasRパッケージを用いたマッピングおよびカウントデータ取得、 そしてTCCパッケージを用いた発現変動遺伝子(DEG)検出までを行う一連の手順を示します。

    多数のファイルが作成されるので、ここでは「デスクトップ」上に「SRP011435」というフォルダを作成しておき、そこで作業を行うことにします。

    Step1. RNA-seqデータのgzip圧縮済みのFASTQファイルをダウンロード:

    論文中の記述からGSE36469を頼りに、 RNA-seqデータがGSE36469として収められていることを見出し、 その情報からSRP011435にたどり着いています。 したがって、ここで指定するのは"SRP011435"となります。

    計8ファイル、合計10Gb程度の容量のファイルがダウンロードされます。東大の有線LANで2時間程度かかります。 早く終わらせたい場合は、最後のgetFASTQfile関数のオプションを'ftp'から'fasp'に変更すると時間短縮可能です。

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の記述内容と基本的に同じです。

    param <- "SRP011435"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(in_acc=hoge$run)     #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    無事ダウンロードが終了すると、作業ディレクトリ(「デスクトップ」上の「SRP011435」フォルダ)中に9つのファイルが存在するはずです。 4Gb程度ある"SRAmetadb.sqlite"ファイルは無視して構いません。残りの"SRR"からはじまる8つのファイルがダウンロードしたRNA-seqデータです。 オリジナルのサンプル名(の略称)で対応関係を表すとsrp011435_samplename.txtのようになっていることがわかります。 尚このファイルはマッピング時の入力ファイルとしても用います。

    Step2. シロイヌナズナ(A. thaliana)ゲノムへのマッピングおよびカウントデータ取得:

    マップしたいFASTQファイルリストおよびそのサンプル名を記述したsrp011435_samplename.txtを作業ディレクトリに保存したうえで、下記を実行します。

    BSgenomeパッケージで利用可能なBSgenome.Athaliana.TAIR.TAIR9へマッピングしています。 名前から推測できるように"TAIR"の"TAIR9"にマップしているのと同じです。BSgenome.Athaliana.TAIR.TAIR9パッケージインストールされていない場合は自動でインストールしてくれるので特に気にする必要はありません。

    basic alignerの一つであるBowtieを内部的に用いており、ここではマッピング時のオプションをデフォルトにしています。 原著論文中で用いられたTopHatと同じsplice-aware alignerののカテゴリに含まれるSpliceMap (Au et al., Nucleic Acids Res., 2010) を利用したい場合は、qAlign関数実行のところでsplicedAlignmentオプションをBowtieに対応する"F"からSpliceMapに対応する"T"に変更してください。

    TAIR9にマップした結果であり、UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、makeTranscriptDbFromGFF関数を用いてTranscriptDbオブジェクトを作成しています。

    マシンパワーにもよりますが、ノートPCでも10時間程度で終わると思います。

    マップ後 | カウント情報取得 | ゲノム | アノテーション有 | QuasR(Lerch_XXX)の記述内容と基本的に同じです。

    in_f1 <- "srp011435_samplename.txt"    #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "BSgenome.Athaliana.TAIR.TAIR9"#入力ファイル名を指定してin_f2に格納(リファレンス配列)
    in_f3 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f3に格納(GFF3またはGTF形式のアノテーションファイル)
    out_f1 <- "srp011435_QC_bowtie.pdf"    #出力ファイル名を指定してout_f1に格納
    out_f2 <- "srp011435_count_bowtie.txt" #出力ファイル名を指定してout_f2に格納
    out_f3 <- "srp011435_genelength.txt"   #出力ファイル名を指定してout_f3に格納
    out_f4 <- "srp011435_RPKM_bowtie.txt"  #出力ファイル名を指定してout_f4に格納
    out_f5 <- "srp011435_transcript_seq.fa"#出力ファイル名を指定してout_f5に格納
    out_f6 <- "srp011435_other_info1.txt"  #出力ファイル名を指定してout_f6に格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    
    #マッピングおよびQCレポート用ファイル作成
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping,#マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=F)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    qQCReport(out, pdfFilename=out_f1)     #QCレポート結果をファイルに保存
    palette("default")                     #おまじない
    time_e - time_s                        #計算時間を表示(単位は秒)
    
    #カウントデータ取得およびファイル保存
    txdb <- makeTranscriptDbFromGFF(in_f3) #TranscriptDbオブジェクトを取得してtxdbに格納
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    data <- count[,-1]                     #カウント情報をdataに格納
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #遺伝子配列長情報取得およびファイル保存
    genelength <- count[,1]                #遺伝子配列長情報をgenelengthに格納
    tmp <- cbind(names(genelength), genelength)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPKM取得およびファイル保存
    nf_RPM <- 1000000/colSums(data)        #正規化係数(RPM補正用)を計算した結果をnf_RPMに格納
    RPM <- sweep(data, 2, nf_RPM, "*")     #正規化係数を各列に掛けた結果をRPMに格納
    nf_RPK <- 1000/genelength              #正規化係数(RPK補正用)を計算した結果をnf_RPKに格納
    RPKM <- sweep(RPM, 1, nf_RPK, "*")     #正規化係数を各行に掛けた結果をRPKMに格納
    tmp <- cbind(rownames(RPKM), RPKM)     #保存したい情報をtmpに格納
    write.table(tmp, out_f4, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #転写物配列情報取得およびファイル保存
    library(in_f2, character.only=T)       #指定したパッケージの読み込み
    tmp <- ls(paste("package", in_f2, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
    fasta <- extractTranscriptsFromGenome(genome, txdb)#転写物塩基配列情報を取得した結果をfastaに格納
    fasta                                  #確認してるだけです
    writeXStringSet(fasta, file=out_f5, format="fasta", width=50)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(各種情報)
    sink(out_f6)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Computation time for mapping (in second).\n")#計算時間を表示(一番右側の数字。単位はsecond)
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    cat("\n\n2. Options used for mapping.\n")#マッピングに用いたオプション情報を表示
    out@alignmentParameter                 #マッピングに用いたオプション情報を表示
    cat("\n\n3. Alignment statistics.\n")  #マッピング結果(alignment statistics)の表示。
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    cat("\n\n4. Gene annotation info.\n")  #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    txdb                                   #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    cat("\n\n5. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事マッピングが終了すると、指定した6つのファイルが生成されているはずです。

    1. QCレポートファイル(srp011435_QC_bowtie.pdf):Quality Controlレポートです。よく利用されるFastQCのようなものです。
    2. カウントデータファイル(srp011435_count_bowtie.txt):グループ(サンプル)間での発現変動遺伝子同定に用います。
    3. 遺伝子配列長情報ファイル(srp011435_genelength.txt):配列長とカウント数の関係を調べたいときなどに用います。これはおまけです。
    4. RPKM補正後のファイル(srp011435_RPKM_bowtie.txt):同一サンプル内での発現レベルの大小関係を知りたいときなどに用います。
    5. 転写物塩基配列ファイル(srp011435_transcript_seq.fa):(遺伝子ではなく)転写物の塩基配列のmulti-FASTAファイルです。参考まで。
    6. その他の各種情報ファイル(srp011435_other_info1.txt):論文作成時に必要な、マッピング時に用いたオプション情報、マップされたリード数、Rおよび用いたパッケージのバージョン情報などを含みます。

    Step2. シロイヌナズナ(A. thaliana)ゲノムへのマッピングおよびカウントデータ取得(リファレンスがmulti-FASTAファイルの場合):

    マップしたいFASTQファイルリストおよびそのサンプル名を記述したsrp011435_samplename.txtを作業ディレクトリに保存したうえで、下記を実行します。 シロイヌナズナのゲノム配列ファイル(TAIR10_chr_all.fas)へマッピングしています。 但し、マッピングに用いるQuasRパッケージ中のqAlign関数がリファレンス配列ファイルの拡張子として"*.fasta", "*.fa", "*.fna"しか認識してくれません。 また、カウントデータを取得するために遺伝子アノテーションファイル(TAIR10_GFF3_genes.gff)を利用する必要がありますが、 このファイル中の染色体名と揃える必要があるため、TAIR10_chr_all.fasファイル中のdescription部分をparamで指定した文字列に置換したファイル(tmp_genome.fasta)を中間ファイルとして作成しています。 TAIR10_GFF3_genes.gffを予めダウンロードしておき、makeTranscriptDbFromGFF関数を用いてTranscriptDbオブジェクトを作成しています。 マシンパワーにもよりますが、ノートPCでも10時間程度で終わると思います。マップ後 | カウント情報取得 | ゲノム | アノテーション有 | QuasR(Lerch_XXX)の記述内容と基本的に同じです。 2014年5月2日までextractTranscriptsFromGenome関数を用いて転写物配列情報を取得していましたが、「'extractTranscriptsFromGenome' is deprecated. Use 'extractTranscriptSeqs' instead.」 という警告メッセージが出たので、extractTranscriptSeqs関数に変更しています。尚、Step2のトータル計算時間はノートPCで7時間程度です。

    in_f <- "TAIR10_chr_all.fas"           #入力ファイル名を指定してin_fに格納
    out_f <- "tmp_genome.fasta"            #出力ファイル名を指定してout_fに格納
    param <- c("Chr1","Chr2","Chr3","Chr4","Chr5","ChrM","ChrC")#置換したい文字列を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    names(fasta) <- param                  #names(fasta)の中身をparamで置換
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
    in_f1 <- "srp011435_samplename.txt"    #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "tmp_genome.fasta"            #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    in_f3 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f3に格納(GFF3またはGTF形式のアノテーションファイル)
    out_f1 <- "srp011435_QC_bowtie_2.pdf"  #出力ファイル名を指定してout_f1に格納
    out_f2 <- "srp011435_count_bowtie_2.txt"#出力ファイル名を指定してout_f2に格納
    out_f3 <- "srp011435_genelength_2.txt" #出力ファイル名を指定してout_f3に格納
    out_f4 <- "srp011435_RPKM_bowtie_2.txt"#出力ファイル名を指定してout_f4に格納
    #out_f5 <- "srp011435_transcript_seq_2.fa"#出力ファイル名を指定してout_f5に格納
    out_f6 <- "srp011435_other_info1_2.txt"#出力ファイル名を指定してout_f6に格納
    param_mapping <- "-m 1 --best --strata -v 2"#マッピング時のオプションを指定
    param3 <- "gene"                       #カウントデータ取得時のレベルを指定:"gene", "exon", "promoter", "junction"のいずれかを指定可能
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicFeatures)               #パッケージの読み込み
    #library(Rsamtools)                     #パッケージの読み込み
    
    #マッピングおよびQCレポート用ファイル作成
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2, alignmentParameter=param_mapping,#マッピングを行うqAlign関数を実行した結果をoutに格納
                  splicedAlignment=F)      #マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    qQCReport(out, pdfFilename=out_f1)     #QCレポート結果をファイルに保存
    palette("default")                     #おまじない
    time_e - time_s                        #計算時間を表示(単位は秒)
    
    #カウントデータ取得およびファイル保存
    txdb <- makeTranscriptDbFromGFF(in_f3) #TranscriptDbオブジェクトを取得してtxdbに格納
    count <- qCount(out, txdb, reportLevel=param3)#カウントデータ行列を取得してcountに格納
    data <- count[,-1]                     #カウント情報をdataに格納
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f2, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #遺伝子配列長情報取得およびファイル保存
    genelength <- count[,1]                #遺伝子配列長情報をgenelengthに格納
    tmp <- cbind(names(genelength), genelength)#保存したい情報をtmpに格納
    write.table(tmp, out_f3, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #RPKM取得およびファイル保存
    nf_RPM <- 1000000/colSums(data)        #正規化係数(RPM補正用)を計算した結果をnf_RPMに格納
    RPM <- sweep(data, 2, nf_RPM, "*")     #正規化係数を各列に掛けた結果をRPMに格納
    nf_RPK <- 1000/genelength              #正規化係数(RPK補正用)を計算した結果をnf_RPKに格納
    RPKM <- sweep(RPM, 1, nf_RPK, "*")     #正規化係数を各行に掛けた結果をRPKMに格納
    tmp <- cbind(rownames(RPKM), RPKM)     #保存したい情報をtmpに格納
    write.table(tmp, out_f4, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    
    #転写物配列情報取得およびファイル保存はエラーが出るので実行しないようにしています。
    #fasta_trans <- extractTranscriptSeqs(FaFile(in_f2), txdb)#転写物塩基配列情報を取得した結果をfasta_transに格納
    #fasta_trans <- extractTranscriptSeqs(FaFile(in_f2), exonsBy(txdb, by="tx", use.names=TRUE))#転写物塩基配列情報を取得した結果をfasta_transに格納
    #fasta_trans <- extractTranscriptSeqs(FaFile(in_f2), cdsBy(txdb, by="tx", use.names=TRUE))#転写物塩基配列情報を取得した結果をfasta_transに格納
    #fasta_trans <- extractTranscriptSeqs(fasta, txdb)#転写物塩基配列情報を取得した結果をfasta_transに格納
    #fasta_trans <- extractTranscriptSeqs(fasta, exonsBy(txdb, by="tx", use.names=TRUE))#転写物塩基配列情報を取得した結果をfasta_transに格納
    #fasta_trans                            #確認してるだけです
    #writeXStringSet(fasta_trans, file=out_f5, format="fasta", width=50)#tmpの中身を指定したファイル名で保存
    
    #ファイルに保存(各種情報)
    sink(out_f6)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Computation time for mapping (in second).\n")#計算時間を表示(一番右側の数字。単位はsecond)
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    cat("\n\n2. Options used for mapping.\n")#マッピングに用いたオプション情報を表示
    out@alignmentParameter                 #マッピングに用いたオプション情報を表示
    cat("\n\n3. Alignment statistics.\n")  #マッピング結果(alignment statistics)の表示。
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    cat("\n\n4. Gene annotation info.\n")  #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    txdb                                   #UCSCからの遺伝子アノテーション情報取得時のバージョン情報などを表示
    cat("\n\n5. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事マッピングが終了すると、指定した6つのファイルが生成されているはずです。

    1. QCレポートファイル(srp011435_QC_bowtie_2.pdf):Quality Controlレポートです。よく利用されるFastQCのようなものです。
    2. カウントデータファイル(srp011435_count_bowtie_2.txt):グループ(サンプル)間での発現変動遺伝子同定に用います。
    3. 遺伝子配列長情報ファイル(srp011435_genelength_2.txt):配列長とカウント数の関係を調べたいときなどに用います。これはおまけです。
    4. RPKM補正後のファイル(srp011435_RPKM_bowtie_2.txt):同一サンプル内での発現レベルの大小関係を知りたいときなどに用います。
    5. その他の各種情報ファイル(srp011435_other_info1_2.txt):論文作成時に必要な、マッピング時に用いたオプション情報、マップされたリード数、Rおよび用いたパッケージのバージョン情報などを含みます。

    Step3. サンプル間クラスタリング:

    カウントデータ(srp011435_count_bowtie_2.txt)を用いてサンプル間の全体的な類似度を眺めることを目的として、サンプル間クラスタリングを行います。

    類似度は「1-Spearman相関係数」、方法は平均連結法で行っています。 TCC論文(Sun et al., 2013)のFig.3でも同じ枠組みでクラスタリングを行った結果を示していますので、英語論文執筆時の参考にどうぞ。 PearsonではなくSpearmanで行っているのは、ダイナミックレンジが広いので、順序尺度程度にしておいたほうがいいだろうという思想が一番大きいです。 log2変換してダイナミックレンジを圧縮してPearsonにするのも一般的には「アリ」だとは思いますが、マップされたリード数が100万以上あるにも関わらずRPKMデータを用いると、RPKM補正後の値が1未満のものがかなり存在すること、 そしてlogをとれるようにゼロカウントデータの処理が必要ですがやりかた次第で結果がころころかわりうるという状況が嫌なので、RNA-seqデータの場合には私はSpearman相関係数にしています。 また、ベクトルの要素間の差を基本とするdistance metrics (例:ユークリッド距離やマンハッタン距離など)は、比較的最近のRNA-seqデータ正規化法 (TMM: Robinson and Oshlack, 2010, TbT: Kadota et al., 2012, TCC; Sun et al., 2013)論文の重要性が理解できれば、その類似度は少なくともfirst choiceにならないと思われます。 つまり、サンプルごとに転写物の組成比が異なるため、RPMやCPMのような総リード数を補正しただけのデータを用いて「サンプル間の数値の差」に基づいて距離を定めるのはいかがなものか?という思想です。 逆に、ユークリッド距離などを用いてクラスタリングを行った結果と比較することで、転写物の組成比に関する知見が得られるのかもしれません。 さらに、全体的な発現レベルが低いものを予めフィルタリングしておく必要もあるのだろうとは思います。このあたりは、真の回答はありませんので、 (手持ちのデータにこの類似度を適用したときの理論上の短所をきちんと理解したうえで)いろいろ試すというのは重要だとは思います。

    ここではカウントデータでクラスタリングをしていますが、おそらく配列長補正後のRPKMデータ(srp011435_RPKM_bowtie_2.txt) でも得られる樹形図のトポロジー(相対的な位置関係)はほぼ同じになるのではないかと思っています。配列長補正の有無で、サンプル間の相関係数の値自体は変わりますが、 同じグループに属するサンプルであれば反復実験間でそれほど違わないので、多少順位に変動があっても全体としては相殺されるはずです...が確証はありません。

    in_f3 <- "srp011435_count_bowtie_2.txt"#入力ファイル名を指定してin_f3に格納
    out_f6 <- "srp011435_count_cluster.png"#出力ファイル名を指定してout_f6に格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #入力ファイルの読み込み
    data <- read.table(in_f3, header=TRUE, row.names=1, sep="\t", quote="")#指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(フィルタリング)
    obj <- as.logical(rowSums(data) > 0)   #条件を満たすかどうかを判定した結果をobjに格納
    data <- unique(data[obj,])             #objがTRUEとなる行のみ抽出し、ユニークパターンのみにした結果をdataに格納
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #クラスタリングおよび結果の保存
    data.dist <- as.dist(1 - cor(data, method="spearman"))#サンプル間の距離を計算し、結果をdata.distに格納
    out <- hclust(data.dist, method="average")#階層的クラスタリングを実行し、結果をoutに格納
    png(out_f6, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    上と同じ結果は、TCC ver. 1.4.0以降で clusterSample関数を用いて得ることができます。

    in_f3 <- "srp011435_count_bowtie_2.txt"#入力ファイル名を指定してin_f3に格納
    out_f6 <- "hoge.png"                   #出力ファイル名を指定してout_f6に格納
    param_fig <- c(500, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f3, header=TRUE, row.names=1, sep="\t", quote="")#指定したファイルの読み込み
    
    #クラスタリングおよび結果の保存
    out <- clusterSample(data, dist.method="spearman",
                            hclust.method="average", unique.pattern=TRUE)
    png(out_f6, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(out)                              #樹形図(デンドログラム)の表示
    dev.off()                              #おまじない
    	

    無事計算が終了すると、指定したファイル(srp011435_count_cluster.png)が生成されているはずです。

    Step4. 発現変動遺伝子(DEG)同定:

    カウントデータファイル(srp011435_count_bowtie_2.txt)を入力として2群間で発現の異なる遺伝子の検出を行います。

    このデータはtechnical replicatesを含むので、それをマージしたのちbiological replicatesのデータにしてからTCCパッケージ(Sun et al., 2013)の推奨ガイドラインに従って、 iDEGES/edgeR正規化(Sun et al., 2013; Robinson et al., 2010; Robinson and Oshlack, 2010; Robinson and Smyth, 2008)を行ったのち、 edgeRパッケージ中のan exact test (Robinson and Smyth, 2008)を行って、DEG検出を行っています。

    解析 | 発現変動 | 2群間 | 対応なし | 複製あり | iDEGES/edgeR-edgeR(Sun_2013)の記述内容と基本的に同じです。

    technical replicatesデータのマージ。ここでは、アドホックに2列分ごとのサブセットを抽出し、行の総和を計算したのち、結合しています。

    in_f <- "srp011435_count_bowtie_2.txt" #入力ファイル名を指定してin_fに格納
    out_f <- "srp011435_count_bowtie_3.txt"#出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    head(data)                             #確認してるだけです
    
    #本番(technical replicatesをマージ)
    DEX_bio1 <- rowSums(data[,1:2])        #サブセットを抽出し、行の総和を計算
    DEX_bio2 <- rowSums(data[,3:4])        #サブセットを抽出し、行の総和を計算
    mock_bio1 <- rowSums(data[,5:6])       #サブセットを抽出し、行の総和を計算
    mock_bio2 <- rowSums(data[,7:8])       #サブセットを抽出し、行の総和を計算
    out <- cbind(DEX_bio1, DEX_bio2, mock_bio1, mock_bio2)#列方向で結合した結果をoutに格納
    head(out)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(out), out)#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身をout_fで指定したファイル名で保存
    	
    in_f4 <- "srp011435_count_bowtie_3.txt"#入力ファイル名を指定してin_f4に格納
    out_f7 <- "srp011435_DEG_bowtie.txt"   #出力ファイル名を指定してout_f7に格納
    out_f8 <- "srp011435_MAplot_bowtie.png"#出力ファイル名を指定してout_f8に格納
    out_f9 <- "srp011435_other_info2.txt"  #出力ファイル名を指定してout_f9に格納
    param_G1 <- 2                          #G1群のサンプル数を指定
    param_G2 <- 2                          #G2群のサンプル数を指定
    param_FDR <- 0.05                      #DEG検出時のfalse discovery rate (FDR)閾値を指定
    param_fig <- c(430, 390)               #MA-plot描画時の横幅と縦幅を指定(単位はピクセル)
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #入力ファイルの読み込み
    data <- read.table(in_f4, header=TRUE, row.names=1, sep="\t", quote="")#in_f4で指定したファイルの読み込み
    
    #前処理(TCCクラスオブジェクトの作成)
    data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
    tcc <- new("TCC", data, data.cl)       #TCCクラスオブジェクトtccを作成
    
    #本番(正規化)
    tcc <- calcNormFactors(tcc, norm.method="tmm", test.method="edger",#正規化を実行した結果をtccに格納
                           iteration=3, FDR=0.1, floorPDEG=0.05)#正規化を実行した結果をtccに格納
    
    #本番(DEG検出)
    tcc <- estimateDE(tcc, test.method="edger", FDR=param_FDR)#DEG検出を実行した結果をtccに格納
    result <- getResult(tcc, sort=FALSE)   #p値などの結果を抽出してをresultに格納
    sum(tcc$stat$q.value < param_FDR)      #FDR < param_FDRを満たす遺伝子数を表示
    
    #ファイルに保存(テキストファイル)
    normalized <- getNormalizedData(tcc)   #正規化後のデータを取り出してnormalizedに格納
    tmp <- cbind(rownames(tcc$count), normalized, result)#正規化後のデータの右側にDEG検出結果を結合したものをtmpに格納
    write.table(tmp, out_f7, sep="\t", append=F, quote=F, row.names=F)#tmpの中身をout_f7で指定したファイル名で保存
    
    #ファイルに保存(M-A plot)
    png(out_f8, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
    plot(tcc, FDR=param_FDR)               #param_FDRで指定した閾値を満たすDEGをマゼンタ色にしてM-A plotを描画
    legend("topright", c(paste("DEG(FDR<", param_FDR, ")", sep=""), "non-DEG"),#凡例を作成している
           col=c("magenta", "black"), pch=20)#凡例を作成している
    dev.off()                              #おまじない
    
    #ファイルに保存(各種情報)
    sink(out_f9)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Numbers of DEGs satisfying several FDR thresholds.\n")#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.05:");print(sum(tcc$stat$q.value < 0.05))#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.10:");print(sum(tcc$stat$q.value < 0.10))#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.20:");print(sum(tcc$stat$q.value < 0.20))#任意のFDR閾値を満たす遺伝子数を表示
    cat("FDR < 0.30:");print(sum(tcc$stat$q.value < 0.30))#任意のFDR閾値を満たす遺伝子数を表示
    cat("\n\n2. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事計算が終了すると、指定した3つのファイルが生成されているはずです。

    1. 発現変動解析結果ファイル(srp011435_DEG_bowtie.txt):iDEGES/edgeR-edgeRパイプラインによるDEG同定結果です。 "rank"列でソートすると発現変動の度合い順になります。"q.value"列の情報は任意のFDR閾値を満たす遺伝子数を調べるときに用います。 尚、左側の実数の数値データはiDEGES/edgeR正規化後のデータです。M-A plotはこの数値データに基づいて作成されています。尚、配列長補正は掛かっておりませんのでご注意ください。
    2. M-A plotファイル(srp011435_MAplot_bowtie.png):M versus A plotです。横軸が平均発現レベル(右側が高発現、左側が低発現)。縦軸がlog(G2/G1)で、0より下がG1群で高発現、0より上がG2群で高発現です。
    3. その他の各種情報ファイル(srp011435_other_info2.txt):FDR < 0.05, 0.1, 0.2, 0.3を満たす遺伝子数、論文作成時に必要な、Rおよび用いたパッケージのバージョン情報(特にTCC)などを含みます。

    パイプライン | ゲノム | small RNA | SRP016842(Nie_2013)

    Nie et al., BMC Genomics, 2013のカイコ (Bombyx mori) small RNA-seqデータが GSE41841に登録されています。 (そしてリンク先のGSM1025527からも様々な情報を得ることができます。) ここでは、SRAdbパッケージを用いたそのFASTQ形式ファイルのダウンロードから、 QuasRパッケージを用いたマッピングまでを行う一連の手順を示します。

    basic alignerの一つであるBowtieをQuasRの内部で用いています。

    ここでは「デスクトップ」上に「SRP016842」というフォルダを作成しておき、そこで作業を行うことにします。

    Step1. RNA-seqデータのgzip圧縮済みのFASTQファイルをダウンロード:

    論文中の記述からGSE41841を頼りに、 SRP016842にたどり着いています。 したがって、ここで指定するのは"SRP016842"となります。

    以下を実行して得られるsmall RNA-seqファイルは一つ(SRR609266.fastq.gz)で、ファイルサイズは400Mb弱、11928428リードであることがわかります。

    イントロ | NGS | 配列取得 | FASTQ or SRALite | SRAdb(Zhu_2013)の記述内容と基本的に同じです。

    param <- "SRP016842"                   #取得したいSRA IDを指定
    
    #必要なパッケージをロード
    library(SRAdb)                         #パッケージの読み込み
    
    #前処理
    #sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
    sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で300Mbほどありますので注意!)
    sra_con <- dbConnect(SQLite(), sqlfile)#おまじない
    
    #前処理(実験デザインの全体像を表示)
    hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
    hoge                                   #hogeの中身を表示
    
    #前処理(FASTQファイルサイズを表示)
    k <- getFASTQinfo(hoge$run)            #「hoge$run」で指定したSRRから始まるIDのFASTQファイルサイズ情報などを取得してkに格納
    k                                      #kの中身を表示
    hoge2 <- cbind(k$library.name,         #ライブラリ名と、
                      k$run.read.count,    #総リード数と、
                      k$file.name,         #ファイル名と、
                      k$file.size)         #ファイルサイズ、の順番で列方向で結合した結果をhoge2に格納
    hoge2                                  #hoge2の中身を表示(表示される情報を限定しているだけです)
    
    #本番(FASTQファイルのダウンロード)
    getFASTQfile(hoge$run, srcType='ftp')  #「hoge$run」で指定したSRRから始まるIDのFASTQファイルのダウンロード
    	

    無事ダウンロードが終了すると、作業ディレクトリ(「デスクトップ」上の「SRP016842」フォルダ)中に2つのファイルが存在するはずです。 4Gb程度ある"SRAmetadb.sqlite"ファイルは無視して構いません。残りの"SRR"からはじまるファイル(SRR609266.fastq.gz)がダウンロードしたsRNA-seqデータです。 オリジナルのサンプル名(の略称)で対応関係を表すとsrp016842_samplename.txtのようになっていることがわかります。 尚このファイルはマッピング時の入力ファイルとしても用います。

    Step2. カイコゲノム配列をダウンロード:

    カイコゲノム配列はBSgenomeパッケージとして提供されていないため、自力で入手する必要があります。 手順としては、農業生物資源研究所(NIAS)が提供しているカイコゲノム配列のウェブページからIntegrated sequences (integretedseq.txt.gz) をダウンロードし、解凍します。解凍後のファイル名は"integretedseq.txt"となりますが、拡張子を".txt"から".fa"に変更して、"integretedseq.fa"としたものを作業ディレクトリ(「デスクトップ」上の「SRP016842」フォルダ)上にコピーしておきます。

    Step3. small RNA-seqデータの前処理:

    原著論文(Nie et al., 2013)中では、アダプター配列やクオリティの低いリードを除去したのち、ゲノムにマッピングしたと書いてあります。 アダプター配列情報はどこにも書かれていませんでしたが、Table S2中のアダプター配列除去後の最も短いリードが18 nt (例:"GCAGTCGTGGCCGAGCGG")であり、 「この18 nt」と「この配列を含む生リード配列の差分」がアダプター配列ということになります。 詳細な情報は書かれていませんでしたが、おそらくアダプター配列は"TGGAATTCTCGGGTGCCAAGGAACTCCAGTC..."という感じだろうと推測できます。

    ここでは、ダウンロードした"SRR609266.fastq.gz"ファイルを入力として、 1塩基ミスマッチまで許容して(推定)アダプター配列除去を行ったのち、"ACGT"のみからなる配列(許容するN数が0)で、 配列長が18nt以上のものをフィルタリングして出力しています。

    in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納(RNA-seqファイル)
    out_f <- "SRR609266_p.fastq.gz"        #出力ファイル名を指定してout_fに格納
    param_adapter <- "TGGAATTCTCGGGTGCCAAGGAACTCCAGTC"#アダプター配列を指定
    param_mismatch <- 1                    #許容するミスマッチ数を指定
    param_nBases <- 0                      #許容するNの数を指定
    param_minLength <- 18                  #アダプター配列除去後の許容する最低配列長を指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    
    #本番(前処理)
    res <- preprocessReads(filename=in_f,  #前処理を実行
                 outputFilename=out_f,     #前処理を実行
                 Rpattern=param_adapter,   #前処理を実行
                 max.Rmismatch=rep(param_mismatch, nchar(param_adapter)),#前処理を実行
                 nBases=param_nBases,      #前処理を実行
                 minLength=param_minLength)#前処理を実行
    res                                    #確認してるだけです
    	

    前処理実行後のresオブジェクトを眺めると、入力ファイルのリード数が11928428であり、 アダプター配列除去後に18nt未満の長さになってしまったためにフィルタリングされたリード数が157229、 "N"を1つ以上含むためにフィルタリングされたリード数が21422あったことがわかります。ここでは配列長分布は得ておりませんが、 出力ファイルを解凍して配列長分布を調べると原著論文中のTable S1と似た結果になっていることから、ここでの処理が妥当であることがわかります。

    Step4. カイコゲノムへのマッピングおよびカウントデータ取得:

    マップしたい前処理後のFASTQファイル名("SRR609266_p.fastq.gz")およびその任意のサンプル名を記述したsrp016842_samplename.txtを作業ディレクトリに保存したうえで、下記を実行します。

    Step2でダウンロードしたintegretedseq.faへマッピングしています。

    basic alignerの一つであるBowtieを内部的に用いており、 ここではマッピング時のオプションを"-m 1 -v 0"とし、「ミスマッチを許容せず1ヶ所にのみマップされるもの」をレポートしています。 ミスマッチを許容していないため、--best --strataというオプションは事実上意味をなさないためにつけていません。 QuasRのマニュアル中のようにalignmentParameterオプションは特に指定せず(デフォルト)、50ヶ所にマップされるリードまでをレポートする "maxHits=50"オプションをつけるという思想もあります。

    マシンパワーにもよりますが、20分程度で終わると思います。

    マップ後 | カウント情報取得 | ゲノム | アノテーション有 | QuasR(Lerch_XXX)の記述内容と基本的に同じです。

    in_f1 <- "srp016842_samplename.txt"    #入力ファイル名を指定してin_f1に格納(RNA-seqファイル)
    in_f2 <- "integretedseq.fa"            #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f1 <- "srp016842_QC.pdf"           #出力ファイル名を指定してout_f1に格納
    out_f2 <- "srp016842_other_info1.txt"  #出力ファイル名を指定してout_f2に格納
    param_mapping <- "-m 1 -v 0"           #マッピング時のオプションを指定
    
    #必要なパッケージをロード
    library(QuasR)                         #パッケージの読み込み
    library(GenomicAlignments)             #パッケージの読み込み
    library(Rsamtools)                     #パッケージの読み込み
    
    #マッピングおよびQCレポート用ファイル作成
    time_s <- proc.time()                  #計算時間を計測するため
    out <- qAlign(in_f1, in_f2,            #マッピングを行うqAlign関数を実行した結果をoutに格納
          alignmentParameter=param_mapping)#マッピングを行うqAlign関数を実行した結果をoutに格納
    time_e <- proc.time()                  #計算時間を計測するため
    qQCReport(out, pdfFilename=out_f1)     #QCレポート結果をファイルに保存
    
    #本番(マップされたリードの和集合領域およびその領域に対するカウント情報取得)
    tmpfname <- out@alignments[,1]         #ファイル名(in_f1の1列目に相当)をtmpfnameとして取り扱いたいだけです
    tmpsname <- out@alignments[,2]         #サンプル名(in_f1の2列目に相当)をtmpsnameとして取り扱いたいだけです
    for(i in 1:length(tmpfname)){          #サンプル数(ファイル数)分だけループを回す
      k <- readGAlignments(tmpfname[i])    #BAM形式ファイルを読み込んだ結果をkに格納(これはGAlignmentsオブジェクト)
      m <- reduce(granges(k))              #GRangesオブジェクトへの変換および和集合領域情報を得た結果のGRangesオブジェクトをmに格納
      tmpcount <- summarizeOverlaps(m, tmpfname[i])#GRangesオブジェクトmに対するBAMファイルのマップ結果のカウント情報取得結果をtmpcountに格納
      count <- assays(tmpcount)$counts     #SummarizedExperimentクラスオブジェクトのtmpcountからカウントデータ行列部分を抽出した結果をcountに格納
      colnames(count) <- tmpsname[i]       #列名を付与
      tmp <- cbind(as.data.frame(m), count)#和集合領域情報とカウント情報を結合した結果をtmpに格納
      out_f <- sub(".bam", "_range.txt", tmpfname[i])#変更したファイル名を作成した結果をout_fに格納
      write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
      #和集合領域の塩基配列情報取得
      out_f <- sub(".bam", "_range.fa", tmpfname[i])#変更したファイル名を作成した結果をout_fに格納
      fasta <- getSeq(FaFile(in_f2), m)    #塩基配列情報取得結果をfastaに格納
      h <- as.data.frame(m)                #description行情報の作成
      names(fasta) <- paste(h[,1],h[,2],h[,3],h[,4],h[,5], sep="_")#description行情報の作成
      writeXStringSet(fasta, file=out_f, format="fasta", width=50)#description行情報の作成
    }
    
    #ファイルに保存(各種情報)
    sink(out_f2)                           #指定したファイルへの書き込み指令(表示結果がファイルに保存される)
    cat("1. Computation time for mapping (in second).\n")#計算時間を表示(一番右側の数字。単位はsecond)
    time_e - time_s                        #計算時間を表示(一番右側の数字。単位はsecond)
    cat("\n\n2. Options used for mapping.\n")#マッピングに用いたオプション情報を表示
    out@alignmentParameter                 #マッピングに用いたオプション情報を表示
    cat("\n\n3. Alignment statistics.\n")  #マッピング結果(alignment statistics)の表示。
    alignmentStats(out)                    #マッピング結果(alignment statistics)の表示。seqlength:リファレンス配列の総塩基数、mappedとunmappedは対応するリード数
    cat("\n\n4. Session info.\n")          #解析に用いたRや各種パッケージのバージョン情報を表示
    sessionInfo()                          #解析に用いたRや各種パッケージのバージョン情報を表示
    sink()                                 #書き込み終了の指令
    	

    無事マッピングが終了すると、指定した2つのファイルが生成されているはずです。

    1. QCレポートファイル(srp016842_QC.pdf):Quality Controlレポートです。よく利用されるFastQCのようなものです。
    2. その他の各種情報ファイル(srp016842_other_info1.txt):論文作成時に必要な、マッピング時に用いたオプション情報、マップされたリード数、Rおよび用いたパッケージのバージョン情報などを含みます。

    この他にも以下に示すような形式のファイルがサンプルごとに自動生成されます。以下に示すファイル名中の"fa03ced5b37"に相当する部分はランダムな文字列からなり、サンプルごと、そして実行するたびに異なります。 理由は、同じ入力ファイルを異なるパラメータやリファレンス配列にマッピングしたときに、間違って上書きしてしまうのを防ぐためです。

    • "*.bam"ファイル(例:SRR609266_p_fa03ced5b37.bam; 約200Mb):BAM形式のサンプルごとのマッピング結果ファイルです。
    • "*_range.txt"ファイル(例:SRR609266_p_fa03ced5b37_range.txt):マップされたリードの和集合領域(オーバーラップ領域をまとめたもの)をリストアップし、その領域に基づいてカウント情報を取得したものです。BEDTools(Quinlan and Hall, Bioinformatics, 2010) のmergeBEDというプログラムと同じような結果を得ているという理解でかまいません。
    • "*_range.fa"ファイル(例:SRR609266_p_fa03ced5b37_range.fa):マップされたリードの和集合領域(オーバーラップ領域をまとめたもの)の塩基配列を格納したファイルです。