R/gradchol.ml.R

Defines functions gradchol.ml

###
### R routines for the R package mixmeta (c)
#
gradchol.ml <-
function(par,U,ind1,ind2,invSigmalist,reslist,nalist,k) {
#
################################################################################
# FUNCTION TO COMPUTE THE MATRIX DERIVATIVES IN TERMS OF PARAMETERS OF
  # THE CHOLESKY DECOMPOSITION (ONLY FOR SINGLE-LEVEL AND UNSTRUCTURED RANDOM)
#
  grad <- sapply(seq_along(par),function(i) {
    # COMPUTE THE DERIVATIVE OF Psi IN TERMS OF ITS CHOLESKY DECOMPOSITION U
    A <- B <- C <- diag(0,k)
    A[ind2[i],] <- B[,ind2[i]] <- U[ind1[i],]
    C[ind2[i],] <- C[,ind2[i]] <- 1
    D <- C*A+C*B
    # COMPUTE THE GRADIENT
    gr <- sum(mapply(function(invSigma,res,na) {
      E <- crossprod(res,invSigma)%*%D[!na,!na]%*%invSigma%*%res
      F <- sum(diag(invSigma%*%D[!na,!na]))
      return(as.numeric(0.5*(E-F)))},invSigmalist,reslist,nalist))
  })
#
  grad
}
gasparrini/mixmeta documentation built on Oct. 17, 2021, 11 a.m.