"Normalize.invariantset" in package "affy" is:
## The 'common-to-all' part of the algorithm. Operates on two vectors of numeric data
##
normalize.invariantset <- function(data, ref, prd.td=c(0.003,0.007)) {
np <- length(data)
r.ref <- rank(ref)
r.array <- rank(data)
## init
prd.td.adj <- prd.td*10 # adjusted threshold things
i.set <- rep(TRUE, np) # index all the PM probes as being in the invariant set
ns <- sum(i.set) # number of probes in the invariant set
ns.old <- ns+50+1 # number of probes previously in the invariant set
## iterate while the number of genes in the invariant set (ns) still varies...
while ( (ns.old-ns) > 50 ) {
air <- (r.ref[i.set] + r.array[i.set]) / (2*ns) # average intensity rank for the probe intensities
prd <- abs(r.ref[i.set] - r.array[i.set]) / ns
threshold <- (prd.td.adj[2]-prd.td[1]) * air + prd.td.adj[1]
i.set[i.set] <- (prd < threshold)
ns.old <- ns
ns <- sum(i.set)
if (prd.td.adj[1] > prd.td[1])
prd.td.adj <- prd.td.adj * 0.9 # update the adjusted threshold parameters
}
Does anybody know that why should the prd.td be multiplied by 10 first?