"kl.divergence" <- function(margs1) { nna <- !is.na(colSums(margs1)) margs0 <- 1-margs1 kld <- 0 if(all(!nna) || (nrow(margs1) < 2)) return(kld) for(i in 1:(nrow(margs1)-1)) { for(j in (i+1):nrow(margs1)) { kld <- kld + sum(margs1[i,nna]*log(margs1[i,nna]/margs1[j,nna])) + sum(margs0[i,nna]*log(margs0[i,nna]/margs0[j,nna])) } } return(kld) }