--- a +++ b/predict.voomDDA.R @@ -0,0 +1,47 @@ +predict.voomDDA = function(object, newdata){ + + n = ncol(newdata) + p = nrow(newdata) + + disc = matrix(0, n, object$nclass) ## Discriminant scores for each class + dimnames(disc) = list(colnames(newdata), object$classNames) + vm = voomGSD(data.train = object$counts, data.test = newdata, group = object$conditions, norm.method = object$normalization) + x = vm$TestExp + + x2 = t(x) + +{ +if (object$PooledVar) { + vp = (object$weightedStats$weightedSD.pooled)^2 + if (any(i0 <- vp == 0)) + vp[i0] <- 1e-07 * min(vp[!i0]) + ivp <- rep(1/vp, each = n) + for (k in 1:(object$nclass)) { + y = x2 - rep(object$weightedStats$weightedMean.C[, k], each = n) + disc[, k] = rowSums(y * y * ivp) + } +} + +else { + if (FALSE) { + for (k in 1:(object$nclass)) { + x2 = x2 - rep(object$weightedStats$weightedMean.C[, k], each = n) + vsd = (object$weightedStats$weightedSD.C)^2 + disc[, k] = rowSums((x2 * x2)/rep(vsd[, k], each = n)) + sum(log(vsd[, k])) + } + } + else { + vsd = (object$weightedStats$weightedSD.C)^2 + for (k in 1:(object$nclass)) { + disc[, k] = apply(x2, 1, function(z) sum((z - object$weightedStats$weightedMean.C[, k])^2/vsd[, k])) + sum(log(vsd[, k])) + } + } +} +} + +idx = apply(disc, 1, which.min) +pred = colnames(disc)[idx] +if (inherits(attr(x2, "na.action"), "exclude")) + pred = napredict(omit = attr(x2, "na.action"), pred) +pred +} \ No newline at end of file