June 2, 2020

GSEA解析 (データのフィルタリング; 半数が閾値より大きい)

GSEAでフィルタリングしたデータを用意するコードを作成したので共有する。
今回の条件は、「半数以上のサンプルにおける発現が閾値 (min.thrd)より大きい遺伝子を残す」というもの。

実行したら以下が生成される
・フィルタリング無しの発現ファイル(XX.txt)
・フィルタリング有りの発現ファイル(XX_HalfisLarger_(min.thrd).txt)
・表現型ファイルのひな型(XX.cls) ※要編集

このプログラムにおいても、Working directoryがCELファイルと同じ場所になっていることが前提になっている。
主な変更点に関する注釈をマゼンタ色で表示している。


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# !!!設定項目!!!
output_txt_filename <- "HGU133plus2_XX.txt"
output_cls_filename <- "HGU133plus2_XX.cls"
cls_name <- c("WT", "MUT")
min.thrd <- 50
# ***終わり***

# ライブラリの確認
require(affy) || stop("Library affy is NOT available")
require(stringr) || stop("Library stringr is NOT available")

# RMAで正規化し、logスケール化されているのを戻す
rma_data <- justRMA()
exprs(rma_data) <- 2 ^ exprs(rma_data)
rma_mat <- exprs(rma_data)

# サンプル名に.CELが含まれていると動作不良になるため外す
colnames(rma_mat) <- str_sub(colnames(rma_mat), end = -5)
mstr_data <- rma_mat
filtered_data <- mstr_data

# しきい値以下の場合に、閾値を代入
filtered_data[filtered_data <= min.thrd] <- min.thrd
# 半数以上が閾値を越えている行を残す
filtered_data <- filtered_data[which(rowMeans(filtered_data > min.thrd) >= 0.5),]

# txtファイルの整形
# descriptionは"na"だとなぜか動作不良
# 行列を引数にできないようなので、繰り返し、、
name_col <- matrix(data = rownames(mstr_data), nrow = nrow(mstr_data), ncol = 1)
colnames(name_col) <- "NAME"
dcrp_col <- matrix(data = 1, nrow = nrow(mstr_data), ncol = 1)
colnames(dcrp_col) <- "Description"
mstr_data <- cbind(name_col, dcrp_col, mstr_data)

name_col <- matrix(data = rownames(filtered_data), nrow = nrow(filtered_data), ncol = 1)
colnames(name_col) <- "NAME"
dcrp_col <- matrix(data = 1, nrow = nrow(filtered_data), ncol = 1)
colnames(dcrp_col) <- "Description"
filtered_data <- cbind(name_col, dcrp_col, filtered_data)

# 処理データのファイル名編集
output_filtered_filename <- output_txt_filename
str_sub(output_filtered_filename, -4, -5) <- paste("_HalfisLarger_", min.thrd, sep = "")

# txtファイルの出力(全データ)
write.table(mstr_data, file = output_txt_filename,
           col.names = TRUE, row.names = FALSE, sep = "\t", na = "", quote = FALSE)
# txtファイの出力(編集データ)
write.table(filtered_data, output_filtered_filename,
            col.names = TRUE, row.names = FALSE, sep = "\t", na = "", quote = FALSE)

# clsファイルを作成
cls_file <- matrix(nrow = 3, ncol = ncol(rma_mat))
cls_file[1,1] <- paste(as.character(ncol(rma_mat)), 
                       as.character(length(cls_name)), "1", sep = " ")
cls_file[2,1] <- paste("#", paste(cls_name, collapse = " "), sep = " ")
cls_file[3,] <- colnames(rma_mat)

# clsファイルの出力
write.table(cls_file, file = as.character(output_cls_filename),
            col.names = FALSE, row.names = FALSE, sep = "\t", na = "")

No comments:

Post a Comment