1 |
p |
|
k |
|
proc |
|
rawp |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | ##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (p, k = 1, proc = c("Holm"), rawp = p)
{
D1 <- function(k = 1, s = 1000) {
alpha <- NULL
for (i in 1:s) {
if (i <= k)
alpha[i] = k/s
else alpha[i] = k/(s + k - i)
}
S <- NULL
S[1:k] <- 0
for (I in (k + 1):s) {
tmp <- NULL
tmp[1:(k - 1)] <- 0
tmp[k] = I * alpha[s - I + k]/k
for (j in (k + 1):I) tmp[j] = I * (alpha[s - I +
j] - alpha[s - I + j - 1])/j
S[I] <- sum(tmp)
if (S[I] < S[I - 1])
break
maxI <- I
maxS <- round(S[I], 4)
}
return(list(S = S, maxI = maxI, maxS = maxS))
}
m <- length(rawp)
n <- length(proc)
index <- order(rawp)
spval <- rawp[index]
adjp <- matrix(0, m, n + 1)
dimnames(adjp) <- list(NULL, c("rawp", proc))
adjp[, 1] <- spval
if (is.element("Holm", proc)) {
crit <- sapply(c(rep(k, k - 1), k:m), function(i) k/(m -
i + k))
tmp <- 1/crit * spval
tmp[tmp > 1] <- 1
for (i in 2:m) tmp[i] <- max(tmp[i - 1], tmp[i])
adjp[, "Holm"] <- tmp
}
if (is.element("Hochberg", proc)) {
crit <- sapply(c(rep(k, k - 1), k:m), function(i) k/(m -
i + k))
tmp <- 1/crit * spval
tmp[tmp > 1] <- 1
for (i in (m - 1):1) tmp[i] <- min(tmp[i + 1], tmp[i])
adjp[, "Hochberg"] <- tmp
}
if (is.element("RS", proc)) {
d <- D1(k, m)$maxS
crit <- sapply(c(rep(k, k - 1), k:m), function(i) k/(m -
i + k)/d)
tmp <- 1/crit * spval
tmp[tmp > 1] <- 1
for (i in (m - 1):1) tmp[i] <- min(tmp[i + 1], tmp[i])
adjp[, "RS"] <- tmp
}
if (is.element("Sarkar", proc)) {
crit <- sapply(c(rep(k, k - 1), k:m), function(i) (prod((1:k)/(m -
i + (1:k)))))
tmp <- 1/crit * (spval^k)
tmp[tmp > 1] <- 1
for (i in (m - 1):1) tmp[i] <- min(tmp[i + 1], tmp[i])
tmp <- pmax(tmp, spval)
adjp[, "Sarkar"] <- tmp
}
if (is.element("BH", proc)) {
crit <- sapply(c(1:m), function(i) i/m)
tmp <- 1/crit * spval
tmp[tmp > 1] <- 1
for (i in (m - 1):1) tmp[i] <- min(tmp[i + 1], tmp[i])
adjp[, "BH"] <- tmp
}
adjp <- adjp[order(index), ]
return(adjp)
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.