« SOP、SSOPのはんだ付け | Home | 箱庭 »

Rでfalse discovery rate (FDR)を計算する

By kmgs | 1 月 27, 2009

マイクロアレイ解析で多重比較の補正を行いたいとき、定番はFDRでしょう。Rでは、

> p <- runif(100, 0, 0.3) # p値もどき
> p.adjust(p, "fdr") # Benjamini-Hochberg (BH)法
> p.adjust(p, "BH") # これもBH法
といった感じで、一撃でできます。
あえて自分で書けば
fdr <- function(p) {
	# 大きい順でインデックスを取得
	o <- rev(order(p))

	# 比較回数による補正
	n <- length(p) / (length(p):1)

	# 補正の適用
	f <- p[o] * n

	# 比較したもののなかで、最小のFDRを保持
	# また、FDRが1を超えないよう細工
	val <- sapply(1:length(p), function(x) min(f[1:x], 1))

	# 元のベクトルに格納 (名前の保持)
	p[o] <- val
	p
}

みたいにして、

> sum(p.adjust(p, "fdr") == fdr(p)) # すべて一致することを確認
[1] 100
となります。
計算イメージは以下の通りです。


ほかにも、Benjamini-Yekutieli (BY)法や、ブートストラップ法でp値の分布を推定するqvalueパッケージ、fdrtoolパッケージなどといったものがあります。

Topics: R, マイクロアレイ |

Comments

*
画像に書かれた文字を入力してください

スパム対策用画像
ログインすると画像認証なしで投稿できます

ホットワード 計算 padding margin 統計 処理
割引クーポンまとめ情報 - クー割