R tidyverse:データの累積和cumsum()の使い方

スポンサーリンク

バイオインフォマティクスのデータ解析では、大量の数値データを扱うことが一般的です。特に、遺伝子発現データやDNA配列解析の結果を効率的に処理するために、tidyverseパッケージ群の一部であるdplyrが非常に役立ちます。

今回は、データの累積和(cumulative sum)を求める関数 cumsum() について解説します。cumsum()は、例えば時間経過に伴う発現レベルの変化や、累積的な統計値の計算など、バイオデータの解析において幅広く利用できます。


cumsum()とは?

基本の概念

cumsum() は、ベクトル内の要素を順番に累積して和を計算する関数です。
例えば、以下のような数列があったとします:

x <- c(2, 4, 6, 8)

この数列に cumsum() を適用すると、次のようになります。

cumsum(x)
# 出力: 2  6  12  20

計算の流れ:

  • 1つ目の値:2
  • 1つ目+2つ目:2 + 4 = 6
  • これまでの合計 + 3つ目:6 + 6 = 12
  • これまでの合計 + 4つ目:12 + 8 = 20

このように、cumsum() はデータの累積的な変化を可視化する際に非常に便利です。


dplyrと組み合わせて活用する

バイオインフォマティクスでは、データフレームを扱うことが多いため、dplyr を使って cumsum() を活用する方法を見ていきましょう。

サンプルデータ

以下のような遺伝子発現データがあるとします。

library(tidyverse)

# 遺伝子発現データのサンプル
gene_expression <- tibble(
  sample_id = c("S1", "S2", "S3", "S4", "S5"),
  expression_level = c(10, 15, 7, 20, 12)
)

gene_expression

出力

# A tibble: 5 × 2
  sample_id expression_level
  <chr>              <dbl>
1 S1                 10
2 S2                 15
3 S3                 7
4 S4                 20
5 S5                 12

このデータの expression_level の累積和を求めるには、mutate() を使って新しい列を追加します。

gene_expression <- gene_expression %>%
  mutate(cumulative_expression = cumsum(expression_level))

gene_expression

出力

# A tibble: 5 × 3
  sample_id expression_level cumulative_expression
  <chr>              <dbl>                   <dbl>
1 S1                 10                        10
2 S2                 15                        25
3 S3                 7                         32
4 S4                 20                        52
5 S5                 12                        64

各サンプルの累積的な遺伝子発現レベルを確認できました。


グループごとの累積和を計算する

バイオデータ解析では、実験条件や細胞株ごとにグループ化されたデータを扱うことが多いです。例えば、異なる処理条件(condition)がある場合、それぞれの条件ごとに累積和を計算したいことがあります。

サンプルデータ

gene_expression_grouped <- tibble(
  sample_id = c("S1", "S2", "S3", "S4", "S5", "S6"),
  condition = c("A", "A", "A", "B", "B", "B"),
  expression_level = c(10, 15, 7, 20, 12, 5)
)

このデータでは、condition が「A」と「B」の2つのグループに分かれています。

グループごとの累積和

group_by() を使い、condition ごとに cumsum() を適用します。

gene_expression_grouped <- gene_expression_grouped %>%
  group_by(condition) %>%
  mutate(cumulative_expression = cumsum(expression_level))

gene_expression_grouped

出力

# A tibble: 6 × 4
# Groups:   condition [2]
  sample_id condition expression_level cumulative_expression
  <chr>     <chr>               <dbl>                   <dbl>
1 S1        A                    10                        10
2 S2        A                    15                        25
3 S3        A                     7                        32
4 S4        B                    20                        20
5 S5        B                    12                        32
6 S6        B                     5                        37

condition ごとに累積和が計算されていることが分かります。


累積和を可視化する

累積和の計算結果をプロットすると、データの変化を視覚的に捉えやすくなります。ggplot2 を使って、累積発現レベルの推移をプロットしてみましょう。

library(ggplot2)

ggplot(gene_expression_grouped, aes(x = sample_id, y = cumulative_expression, group = condition, color = condition)) +
  geom_line() +
  geom_point() +
  labs(title = "累積遺伝子発現レベルの推移", x = "サンプルID", y = "累積発現レベル") +
  theme_minimal()

このプロットにより、condition ごとに累積発現レベルがどのように推移するのかを視覚的に確認できます。


応用例:遺伝子発現の時間推移解析

遺伝子発現データは、時間経過とともに変化することが多いため、cumsum() を用いた解析は有用です。例えば、以下のようなデータを考えます。

time_series_data <- tibble(
  time_point = 1:10,
  expression_level = c(2, 5, 3, 8, 10, 6, 9, 4, 7, 5)
) %>%
  mutate(cumulative_expression = cumsum(expression_level))

ggplot(time_series_data, aes(x = time_point, y = cumulative_expression)) +
  geom_line() +
  geom_point() +
  labs(title = "時間経過による累積発現レベル", x = "時間ポイント", y = "累積発現レベル") +
  theme_minimal()

このように cumsum() を活用すると、時間とともに遺伝子発現がどのように増加するかを簡単に把握できます。


まとめ

  • cumsum() はベクトル内の値の累積和を計算する関数。
  • mutate() と組み合わせてデータフレームに累積和を追加できる。
  • group_by() を使えば、条件ごとの累積和を計算可能。
  • ggplot2 で可視化すると、データの変化をより直感的に理解できる。

バイオインフォマティクスにおいて、cumsum() はデータ解析や可視化において非常に有用です!!

ぜひ活用して、遺伝子発現解析などの実践に役立ててくださいね〜!

タイトルとURLをコピーしました