R tidyverse 活用: 累積積 を計算するcumprod() の使い方

スポンサーリンク

はじめに

バイオインフォマティクスでは、大量のデータを扱うことが一般的です。遺伝子発現データやゲノム解析データを効率的に処理するために、R の tidyverse パッケージは非常に便利なツールとなります。特に dplyr はデータの加工や集計を直感的に行うことができ、多くのバイオインフォマティシャンに利用されています。

本記事では、dplyr の関数の一つである cumprod() について解説し、その基本的な使い方を紹介します。


cumprod() とは?

cumprod() は、累積積(Cumulative Product) を計算する関数です。すなわち、ベクトルの各要素に対して、前の要素との積を計算しながら結果を出力します。

数学的には、以下のように表されます: cumprod(x)=(x1,x1×x2,x1×x2×x3,…,x1×x2×…×xn)\text{cumprod}(x) = (x_1, x_1 \times x_2, x_1 \times x_2 \times x_3, \dots, x_1 \times x_2 \times … \times x_n)

これは、指数関数的な変化を解析する場合や、特定の累積比率を計算する場合に役立ちます。


基本的な cumprod() の使い方

まずは、cumprod() をシンプルなベクトルに適用する例を見てみましょう。

基本例

# tidyverseの読み込み
library(tidyverse)

# ベクトルを作成
x <- c(1, 2, 3, 4, 5)

# 累積積を計算
cumprod(x)

出力

[1]   1   2   6  24 120

各要素に対して、前の要素との積が計算されていることがわかります。


データフレームに適用する

バイオインフォマティクスでは、通常、データフレーム(表形式のデータ)を扱うことが多いため、mutate() と組み合わせて cumprod() を適用する方法を紹介します。

データフレームでの使用

# サンプルデータを作成
df <- tibble(
  sample_id = c("A", "B", "C", "D", "E"),
  value = c(1.2, 0.8, 1.5, 1.1, 0.9) # 遺伝子発現量の変化率を想定
)

# 累積積を計算
df <- df %>%
  mutate(cumulative_product = cumprod(value))

# 結果の表示
print(df)

出力

# A tibble: 5 × 3
  sample_id value cumulative_product
  <chr>     <dbl>              <dbl>
1 A          1.2                1.2
2 B          0.8                0.96
3 C          1.5                1.44
4 D          1.1                1.584
5 E          0.9                1.4256

このように、各行の value を順に掛け合わせた結果が cumulative_product に格納されます。


バイオインフォマティクスでの活用例

1. 遺伝子発現の累積変化

例えば、ある遺伝子の発現量が時間とともに変化する場合、その累積変化を cumprod() で計算できます。以下は、RNA-seq の発現データの一部を想定した例です。

# 仮の発現データ
gene_expression <- tibble(
  time = c(0, 1, 2, 3, 4),  # 時間 (時間単位)
  fold_change = c(1, 1.2, 0.8, 1.5, 0.9) # 発現量の変化率
)

# 累積発現変化を計算
gene_expression <- gene_expression %>%
  mutate(cumulative_expression = cumprod(fold_change))

# 結果を表示
print(gene_expression)

出力

# A tibble: 5 × 3
   time fold_change cumulative_expression
  <dbl>       <dbl>                 <dbl>
1     0        1.0                   1.0
2     1        1.2                   1.2
3     2        0.8                   0.96
4     3        1.5                   1.44
5     4        0.9                   1.296

このように、遺伝子の発現変化率を累積的に掛け合わせることで、時間経過に伴う全体的な変化を把握することができます。


2. 累積生存率の計算

生存解析(Survival Analysis)では、時間ごとの生存率を掛け合わせて累積生存率を計算する場面があります。これにも cumprod() を利用できます。

# 仮の生存データ
survival_data <- tibble(
  time = c(1, 2, 3, 4, 5),  # 時間 (月単位)
  survival_rate = c(0.95, 0.90, 0.85, 0.80, 0.75) # 月ごとの生存確率
)

# 累積生存率を計算
survival_data <- survival_data %>%
  mutate(cumulative_survival = cumprod(survival_rate))

# 結果を表示
print(survival_data)

出力

# A tibble: 5 × 3
   time survival_rate cumulative_survival
  <dbl>        <dbl>                <dbl>
1     1         0.95                 0.95
2     2         0.90                 0.855
3     3         0.85                 0.72675
4     4         0.80                 0.5814
5     5         0.75                 0.43605

このように cumprod() を用いることで、時間経過に伴う累積生存率を求めることができます。


まとめ

cumprod() はシンプルながら、累積的な積を計算する強力な関数です。バイオインフォマティクスでは、以下のような用途で活用できます。

  • 遺伝子発現データの累積変化の計算
  • 生存解析における累積生存率の計算
  • その他、時間依存データの累積的な増減の解析

dplyr と組み合わせることで、データフレームに対して簡単に適用できるため、大規模なデータ解析にも役立ちます!!

今後のデータ解析にぜひ活用してみてくださいね〜!

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