"svdfcPE" <- function(data, U, start=1, end=100, verbose=TRUE, global=TRUE, design, ...) { # Init nperm <- end-start+1 # Calculate original svdfc statistic t <- abs(svdfc(data=data, U=U, design=design, ...)) # Generate random svdfc statistics combinats <- combn(nrow(design), sum(design[,2])) combinats <- apply(combinats, 2, function(x) c(x, c(1:nrow(design))[-x])) t.rand <- matrix(nrow=nrow(data), ncol=nperm) for(i in start:end) { data.rand <- data[,combinats[,i]] t.rand[,(i-start+1)] <- abs(svdfc(data=data.rand, U=U, design=design, ...)) if(verbose && !(i %% 10)) cat(paste(i, " ", sep="")) } if(verbose) cat("\n") # Compute p-values t.pvalues <- rep(NA,nrow(data)) for(j in 1:nrow(data)) { if(global) t.pvalues[j] <- min(1, sum(t.rand >= t[j])/nperm) else t.pvalues[j] <- sum(t.rand[j,] >= t[j])/nperm if(verbose && !(j %% 100)) cat(paste(j, " ", sep="")) } if(verbose) cat("\n") return(t.pvalues) }