|
for (k in 1:n_groups) { # group index |
|
|
|
idx <- rep(NA, n) |
|
for (j in 1:n) { |
|
idx[j] <- names(myList[j]) %in% |
|
custom.set[custom.set$group == groups[k], 1] |
|
} |
|
if (sum(idx)) { |
|
F1 <- cumsum(abs(myList)^alpha * as.numeric(idx)) / |
|
sum(abs(myList)^alpha * as.numeric(idx)) |
|
F2 <- cumsum(as.numeric(!idx)) / |
|
(n - sum(custom.set$group == groups[k] & |
|
features %in% names(myList))) |
|
|
|
S[i, k] <- max(F1 - F2, na.rm = TRUE) |
|
} else { |
|
S[i, k] <- NA |
|
} |
|
|
|
# permutation test |
|
permute_S <- rep(NA, permute.n) |
|
for (permute_i in 1:permute.n) { |
|
permutationIdx <- sample(1:n, n) # n removes missing spearman's x |
|
myList_permute <- myList |
|
names(myList_permute) <- names(myList)[permutationIdx] |
|
for (j in 1:n) { |
|
idx[j] <- names(myList_permute[j]) %in% |
|
custom.set[custom.set$group == groups[k], 1] |
|
} |
|
if (sum(idx)) { |
|
F1 <- cumsum(abs(myList_permute)^alpha * as.numeric(idx)) / |
|
sum(abs(myList_permute)^alpha * as.numeric(idx)) |
|
F2 <- cumsum(as.numeric(!idx)) / |
|
(n - sum(custom.set$group == groups[k] & |
|
features %in% names(myList))) |
|
|
|
permute_S[permute_i] <- max(F1 - F2, na.rm = TRUE) |
|
} |
|
} |
|
## i) p-value for enrichment score |
|
pvalue[i, k] <- sum(permute_S >= S[i, k], na.rm = TRUE) / |
|
(permute.n - sum(is.na(permute_S))) |
|
|
|
|
|
## ii) normalized enrichment score |
|
if (normalize) { |
|
S_norm <- S |
|
if (!is.na(S[i, k])) { |
|
if (S[i, k] >= 0) { |
|
S_norm[i, k] <- |
|
S[i, k] / mean(permute_S[permute_S >= 0], na.rm = TRUE) |
|
} else { |
|
S_norm[i, k] <- |
|
S[i, k] / mean(permute_S[permute_S < 0], na.rm = TRUE) |
|
} |
|
} |
|
S <- S_norm |
|
permute_S_norm <- rep(NA, permute.n) |
|
for (permute_i in 1:permute.n) { |
|
if (!is.na(permute_S[permute_i])) { |
|
if (permute_S[permute_i] >= 0) { |
|
permute_S_norm[permute_i] <- permute_S[permute_i] / |
|
mean(permute_S[permute_S >= 0], na.rm = TRUE) |
|
} else { |
|
permute_S_norm[permute_i] <- permute_S[permute_i] / |
|
mean(permute_S[permute_S < 0], na.rm = TRUE) |
|
} |
|
} |
|
} |
|
pvalue[i, k] <- sum(permute_S_norm >= S_norm[i, k], na.rm = TRUE) / |
|
(permute.n - sum(is.na(permute_S_norm))) |
|
} |
|
} |
This loop, specifically:
EnrichIntersect/R/enrichment.R
Lines 110 to 182 in 988c05e