Ballgown

Ballgown は主に StringTie で定量した遺伝子(トランスクリプト)発現量を利用して、発現変動解析を行う R/Bioconductor のパッケージである。Ballgown を利用するには、StringTie で定量した結果をすべて同じフォルダにまとめておと便利である。例えば、StringTie の結果をすべて ballgown フォルダにまとめてあったとして、Ballgown では次のようにデータを読み込むことができる。なお、デフォルトでは、各々の結果のフォルダ名がサンプル名として読み込まれるため、必要であれば pData 関数で書き換えることも可能である。

b <- ballgown(dataDir = 'ballgown', samplePattern = 'SRR')

pData(b) <- data.frame(id =  c('ctrl_1', 'ctrl_2', 'ctrl_3', 'cold_1', 'cold_2', 'cold_3'),
                       group = c('ctrl', 'ctrl', 'ctrl', 'cold', 'cold', 'cold'))

転写産物の発現量 FPKM を取得したい場合は texpr 関数を利用する。

head(texpr(b))
##   FPKM.SRR1792924 FPKM.SRR1792925 FPKM.SRR1792926 FPKM.SRR1792927
## 1        4.125814        3.844283        4.593955        4.123420
## 2        2.796588        2.798470        3.924363        3.454246
## 3        0.534306        0.282695        0.668188        0.766483
## 4        0.725205        1.565021        1.152122        1.377866
## 5        0.619181        0.664552        0.453376        0.846209
## 6        1.171823        1.892226        0.772719        0.946749
##   FPKM.SRR1792928 FPKM.SRR1792929
## 1        3.694850        3.848086
## 2        3.479400        3.589532
## 3        0.444744        0.635831
## 4        1.048007        0.984064
## 5        0.533180        0.154207
## 6        1.959617        1.625064

遺伝子ごとの発現量を取得する場合は gexpr 関数を使用する。

head(gexpr(b))
##           FPKM.SRR1792924 FPKM.SRR1792925 FPKM.SRR1792926 FPKM.SRR1792927
## AT1G01030      1.25360604      1.22689400      1.29295800      1.31943000
## AT1G01110      1.66181793      1.92547586      1.80818711      1.90685011
## AT1G01130      2.27273100      4.40685400      3.13476900      3.65375300
## AT1G01150      0.06257279      0.04701473      0.08466496      0.08402109
## AT1G01270      0.00000000      0.00000000      0.00000000      0.00000000
## AT1G01280      0.00000000      0.00000000      0.00000000      0.00000000
##           FPKM.SRR1792928 FPKM.SRR1792929
## AT1G01030      1.48861482       1.3497740
## AT1G01110      1.79535574       1.6217058
## AT1G01130      3.83300400       3.7215440
## AT1G01150      0.08348642       0.0971909
## AT1G01270      0.00000000       0.0000000
## AT1G01280      0.00000000       0.0000000

解析に先立ち、各サンプルの FPKM の分布状況を確認する。

fig_countdist <- as.data.frame(texpr(b)) %>%
                    pivot_longer(everything(), names_to = 'library') %>%
                    mutate(value = value + 1) %>%
                    ggplot(aes(x = value)) +
                    geom_histogram(bins = 50) +
                    scale_x_log10() +
                    facet_wrap(~ library, nrow = 2)
print(fig_countdist)
StringTie で定量した発現量 FPKM の分布をヒストグラムで可視化する。

次に、発現量量の分散がある程度大きい遺伝子を抽出して、主成分分析を行ってみる。この際に、FPKM のスケールが大きいので対数化しておく。

b_highexp <- subset(b, 'rowVars(texpr(b)) > 1', genomesubset = TRUE)
tx_highexp <- texpr(b_highexp)

x_pca <- prcomp(t(log10(tx_highexp + 1)), scale = FALSE)

fig_pca <- as.data.frame(x_pca$x) %>%
            mutate(libname = rownames(x_pca$x)) %>%
            ggplot(aes(x = PC1, y = PC2, label = libname)) +
            geom_label()
print(fig_pca)
StringTie で定量した FPKM に対して主成分分析を行う。

サンプル同士の関係を確認してから、発現変動遺伝子(トランスクリプト)を検出する。検定は Ballgown の statetest 関数を使用する。比較する際のグループ情報は covariate オプションで指定する。このオプションに pData 関数に代入した実験デザインの列名を指定する。

det_table <- stattest(b_highexp, feature = 'transcript', covariate = 'group', getFC = TRUE, meas = 'FPKM')

det_table <- data.frame(gene = geneNames(b_highexp),
                        gene_id = geneIDs(b_highexp),
                        log_mean = log10(rowMeans(texpr(b_highexp))),
                        det_table)
head(det_table)
##      gene   gene_id     log_mean  feature        id        fc           pva       qval
##     <chr>     <chr>        <dbl>       <chr>  <dbl>      <dbl>        <dbl>      <dbl>
## 30      .   MSTRG.9   1.26729358  transcript     30  0.8769386  0.455128749  0.7547076
## 34      .  MSTRG.11   2.07281850  transcript     34  1.2155198  0.651011430  0.8625935
## 35      .  MSTRG.11   0.68589443  transcript     35  0.6007765  0.780760395  0.9188453
## 36      .  MSTRG.11   1.34838370  transcript     36  0.1875270  0.689512569  0.8807716
## 37      .  MSTRG.11  -0.09451057  transcript     37  2.4095289  0.636693122  0.8543992
## 40      .  MSTRG.12   1.61330432  transcript     40  1.2792621  0.009098968  0.1227936

MA プロットを描く場合は、平均と foldchange を検定結果から抽出して描けばよい。発現量に有意差のあるトランスクリプトを赤色(#d62728)の点で示した。

fig_ma <- ggplot(det_table, aes(x = log_mean, y = log2(fc), color = qval < 0.1)) +
              geom_point() +
              scale_color_manual(values = c('#666666', '#d62728'))
print(fig_ma)
Ballgownの検定結果を利用してMAプロットを描く