a b/predict.voomDDA.R
1
predict.voomDDA = function(object, newdata){
2
  
3
  n = ncol(newdata)
4
  p = nrow(newdata)
5
  
6
  disc = matrix(0, n, object$nclass)  ## Discriminant scores for each class
7
  dimnames(disc) = list(colnames(newdata), object$classNames)
8
  vm = voomGSD(data.train = object$counts, data.test = newdata, group = object$conditions, norm.method = object$normalization)
9
  x = vm$TestExp
10
11
  x2 = t(x)
12
13
{
14
if (object$PooledVar) {
15
  vp = (object$weightedStats$weightedSD.pooled)^2
16
  if (any(i0 <- vp == 0)) 
17
    vp[i0] <- 1e-07 * min(vp[!i0])
18
    ivp <- rep(1/vp, each = n)
19
  for (k in 1:(object$nclass)) {
20
    y = x2 - rep(object$weightedStats$weightedMean.C[, k], each = n)
21
    disc[, k] = rowSums(y * y * ivp)
22
  }
23
}
24
25
else {
26
  if (FALSE) {
27
    for (k in 1:(object$nclass)) {
28
      x2 = x2 - rep(object$weightedStats$weightedMean.C[, k], each = n)
29
      vsd = (object$weightedStats$weightedSD.C)^2
30
      disc[, k] = rowSums((x2 * x2)/rep(vsd[, k], each = n)) + sum(log(vsd[, k]))
31
    }
32
  }
33
  else {
34
    vsd = (object$weightedStats$weightedSD.C)^2
35
    for (k in 1:(object$nclass)) {
36
      disc[, k] = apply(x2, 1, function(z) sum((z - object$weightedStats$weightedMean.C[, k])^2/vsd[, k])) + sum(log(vsd[, k]))
37
    }
38
  }
39
}
40
}
41
42
idx = apply(disc, 1, which.min)
43
pred = colnames(disc)[idx]
44
if (inherits(attr(x2, "na.action"), "exclude")) 
45
  pred = napredict(omit = attr(x2, "na.action"), pred)
46
pred
47
}