diff --git a/R/laskeMuutokset12345.R b/R/laskeMuutokset12345.R index 13c9196..410d6d0 100644 --- a/R/laskeMuutokset12345.R +++ b/R/laskeMuutokset12345.R @@ -40,51 +40,48 @@ laskeMuutokset4 <- function (osuus, osuusTaulu, omaFreqs, logml, laskeMuutokset <- function(ind, globalRows, data, adjprior, priorTerm) { - # % Palauttaa npops*1 taulun, jossa i:s alkio kertoo, mik� olisi - # % muutos logml:ss�, mik�li yksil� ind siirret��n koriin i. - # % diffInCounts on poistettava COUNTS:in siivusta i1 ja lis�tt�v� - # % COUNTS:in siivuun i2, mik�li muutos toteutetaan. - # % - # % Lis�ys 25.9.2007: - # % Otettu k�ytt��n globaali muuttuja LOGDIFF, johon on tallennettu muutokset - # % logml:ss� siirrett�ess� yksil�it� toisiin populaatioihin. + # Palauttaa npops*1 taulun, jossa i:s alkio kertoo, mik� olisi + # muutos logml:ss�, mik�li yksil� ind siirret��n koriin i. + # diffInCounts on poistettava COUNTS:in siivusta i1 ja lis�tt�v� + # COUNTS:in siivuun i2, mik�li muutos toteutetaan. + # + # Lis�ys 25.9.2007: + # Otettu k�ytt��n globaali muuttuja LOGDIFF, johon on tallennettu muutokset + # logml:ss� siirrett�ess� yksil�it� toisiin populaatioihin. - # global COUNTS; global SUMCOUNTS; - # global PARTITION; global POP_LOGML; - # global LOGDIFF; + npops <- size(COUNTS, 3) + muutokset <- LOGDIFF[ind, ] - # npops = size(COUNTS,3); - # muutokset = LOGDIFF(ind,:); + i1 <- PARTITION[ind] + i1_logml <- POP_LOGML[i1] + muutokset[i1] <- 0 - # i1 = PARTITION(ind); - # i1_logml = POP_LOGML(i1); - # muutokset(i1) = 0; + rows <- globalRows[ind, 1]:globalRows[ind, 2] + diffInCounts <- computeDiffInCounts( + rows, size(COUNTS, 1), size(COUNTS, 2), data + ) + diffInSumCounts <- sum(diffInCounts) - # rows = globalRows(ind,1):globalRows(ind,2); - # diffInCounts = computeDiffInCounts(rows, size(COUNTS,1), size(COUNTS,2), data); - # diffInSumCounts = sum(diffInCounts); + COUNTS[, , i1] <- COUNTS[, , i1] - diffInCounts + SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] - diffInSumCounts + new_i1_logml <- computePopulationLogml(i1, adjprior, priorTerm) + COUNTS[, , i1] <- COUNTS[, , i1] + diffInCounts + SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] + diffInSumCounts - # COUNTS(:,:,i1) = COUNTS(:,:,i1)-diffInCounts; - # SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)-diffInSumCounts; - # new_i1_logml = computePopulationLogml(i1, adjprior, priorTerm); - # COUNTS(:,:,i1) = COUNTS(:,:,i1)+diffInCounts; - # SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)+diffInSumCounts; + i2 <- find(muutokset == -Inf) # Etsit��n populaatiot jotka muuttuneet viime kerran j�lkeen. + i2 <- setdiff(i2, i1) + i2_logml <- POP_LOGML(i2) - # i2 = find(muutokset==-Inf); % Etsit��n populaatiot jotka muuttuneet viime kerran j�lkeen. - # i2 = setdiff(i2,i1); - # i2_logml = POP_LOGML(i2); + ni2 <- length(i2) - # ni2 = length(i2); + COUNTS[, , i2] <- COUNTS[, , i2] + repmat(diffInCounts, c(1, 1, ni2)) + SUMCOUNTS[i2, ] <- SUMCOUNTS[i2, ] + repmat(diffInSumCounts, c(ni2, 1)) + new_i2_logml <- computePopulationLogml(i2, adjprior, priorTerm) + COUNTS[, , i2] <- COUNTS[, , i2] - repmat(diffInCounts, c(1, 1, ni2)) + SUMCOUNTS[i2, ] <- SUMCOUNTS[i2, ] - repmat(diffInSumCounts, c(ni2, 1)) - # COUNTS(:,:,i2) = COUNTS(:,:,i2)+repmat(diffInCounts, [1 1 ni2]); - # SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)+repmat(diffInSumCounts,[ni2 1]); - # new_i2_logml = computePopulationLogml(i2, adjprior, priorTerm); - # COUNTS(:,:,i2) = COUNTS(:,:,i2)-repmat(diffInCounts, [1 1 ni2]); - # SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)-repmat(diffInSumCounts,[ni2 1]); - - # muutokset(i2) = new_i1_logml - i1_logml ... - # + new_i2_logml - i2_logml; - # LOGDIFF(ind,:) = muutokset; + muutokset[i2] <- new_i1_logml - i1_logml + new_i2_logml - i2_logml + LOGDIFF[ind, ] = muutokset return(list(muutokset = muutokset, diffInCounts = diffInCounts)) } diff --git a/R/laskeMuutokset4.R b/R/laskeMuutokset4.R deleted file mode 100644 index 56bcef3..0000000 --- a/R/laskeMuutokset4.R +++ /dev/null @@ -1,39 +0,0 @@ -#' @title Calculate changes? -#' @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 -#' @param COUNTS COUNTS -#' @export -laskeMuutokset4 <- function (osuus, osuusTaulu, omaFreqs, logml, - COUNTS = matrix(0)) { - npops <- ifelse(is.na(dim(COUNTS)[3]), 1, dim(COUNTS)[3]) - notEmpty <- which(osuusTaulu > 0.005) - muutokset <- zeros(npops) - empties <- !notEmpty - - for (i1 in notEmpty) { - osuusTaulu[i1] <- osuusTaulu[i1] - osuus - for (i2 in c(colon(1, i1 - 1), colon(i1 + 1, npops))) { - osuusTaulu[i2] <- osuusTaulu[i2] + osuus - loggis <- computeIndLogml(omaFreqs, osuusTaulu) - - # Work around Matlab OOB bug - if (i1 > nrow(muutokset)) { - muutokset <- rbind(muutokset, muutokset * 0) - } - if (i2 > ncol(muutokset)) { - muutokset <- cbind(muutokset, muutokset * 0) - } - - muutokset[i1, i2] <- loggis - logml - osuusTaulu[i2] <- osuusTaulu[i2] - osuus - } - osuusTaulu[i1] <- osuusTaulu[i1] + osuus - } - return (muutokset) -} \ No newline at end of file