ourMELONS/R/laskeMuutokset4.R

39 lines
1.5 KiB
R
Raw Normal View History

2020-01-15 16:22:21 +01:00
#' @title Calculate changes?
2020-01-14 11:25:16 +01:00
#' @description Palauttaa npops*npops taulun, jonka alkio (i,j) kertoo, mik?on
#' muutos logml:ss? mikäli populaatiosta i siirretään osuuden verran
#' todennäköisyysmassaa populaatioon j. Mikäli populaatiossa i ei ole mitään
#' siirrettävää, on vastaavassa kohdassa rivi nollia.
#' @param osuus Percentages?
#' @param omaFreqs own Freqs?
#' @param osuusTaulu Percentage table?
#' @param logml log maximum likelihood
2020-01-14 11:25:16 +01:00
#' @param COUNTS COUNTS
#' @export
2020-01-14 13:44:18 +01:00
laskeMuutokset4 <- function (osuus, osuusTaulu, omaFreqs, logml,
COUNTS = matrix(0)) {
npops <- ifelse(is.na(dim(COUNTS)[3]), 1, dim(COUNTS)[3])
2020-01-15 16:22:21 +01:00
notEmpty <- which(osuusTaulu > 0.005)
2020-01-14 11:25:16 +01:00
muutokset <- zeros(npops)
empties <- !notEmpty
for (i1 in notEmpty) {
osuusTaulu[i1] <- osuusTaulu[i1] - osuus
2020-01-15 16:22:21 +01:00
for (i2 in c(colon(1, i1 - 1), colon(i1 + 1, npops))) {
2020-01-14 11:25:16 +01:00
osuusTaulu[i2] <- osuusTaulu[i2] + osuus
loggis <- computeIndLogml(omaFreqs, osuusTaulu)
2020-01-15 16:22:21 +01:00
# Work around Matlab OOB bug
if (i1 > nrow(muutokset)) {
muutokset <- rbind(muutokset, muutokset * 0)
}
if (i2 > ncol(muutokset)) {
muutokset <- cbind(muutokset, muutokset * 0)
}
2020-01-14 11:25:16 +01:00
muutokset[i1, i2] <- loggis - logml
osuusTaulu[i2] <- osuusTaulu[i2] - osuus
}
osuusTaulu[i1] <- osuusTaulu[i1] + osuus
}
return (muutokset)
}