1 ## compar.lynch.R (2002-08-28)
3 ## Lynch's Comparative Method
5 ## Copyright 2002 Julien Claude
7 ## This file is part of the R-package `ape'.
8 ## See the file ../COPYING for licensing issues.
10 compar.lynch <- function(x, G, eps = 1e-4)
12 if (is.vector(x) || is.data.frame(x)) x <- as.matrix(x)
13 alea <- runif(1, 0, 1)
15 uz <- apply(x, 2, mean)
22 I <- matrix(0, nsp, nsp)
24 vara <- trvare <- matrix(NA, k, k)
28 vara <- A0 <- alea * vcvz
29 vare <- E0 <- (1 - alea) * vcvz
33 a0 <- e0 <- matrix(0, nsp, k)
34 a1 <- e1 <- matrix(1, nsp, k)
35 while (any(abs((rbind(a1, e1) - rbind(a0, e0))) > eps)) {
38 compteur <- compteur + 1
39 Rinv <- solve(E0 %x% I)
40 Dinv <- solve(A0 %x% G)
41 info <- solve(Rinv + Dinv)
42 newa <- solve(Rinv + Dinv) %*% Rinv %*% (z - X %*% u0)
43 newe <- z - X %*% u0 - newa
44 e0 <- mnewe <- matrix(newe, nsp, k)
45 a0 <- mnewa <- matrix(newa, nsp, k)
49 trvare[i, j] <- sum(diag(info[(((i - 1) * nsp) + 1):(i * nsp),
50 (((j - 1) * nsp) + 1):(j * nsp)]))}
52 vare <- ((nsp - 1) * var(mnewe) + trvare) / nsp
56 vara[i, j] <- (t(mnewa[, i]) %*% Ginv %*% mnewa[, j] +
58 info[(((i - 1) * nsp) + 1):(i * nsp),
59 (((j - 1) * nsp) + 1):(j * nsp)]))) / nsp
63 newu <- apply(x - mnewa, 2, mean)
64 V <- vara %x% G + vare %x% I
66 p <- (2 * pi)^(-nsp) * det(V)^(-0.5) *
67 exp(-0.5 * t(z - (X %*% newu)) %*% solve(V) %*% (z - (X %*% newu)))
72 dimnames(vare) <- dimnames(vara)
73 list(vare = vare, vara = vara, A = mnewa, E = mnewe, u = newu, lik = log(p))