Merge branch 'issue-3' into develop

This commit is contained in:
Waldir Leoncio 2022-09-15 14:54:17 +02:00
commit 4b0f4acf36
5 changed files with 421 additions and 2 deletions

View file

@ -48,6 +48,7 @@ importFrom(ape,read.FASTA)
importFrom(matlab2r,blanks) importFrom(matlab2r,blanks)
importFrom(matlab2r,cell) importFrom(matlab2r,cell)
importFrom(matlab2r,colon) importFrom(matlab2r,colon)
importFrom(matlab2r,disp)
importFrom(matlab2r,find) importFrom(matlab2r,find)
importFrom(matlab2r,inputdlg) importFrom(matlab2r,inputdlg)
importFrom(matlab2r,isempty) importFrom(matlab2r,isempty)

27
R/checkLogml.R Normal file
View file

@ -0,0 +1,27 @@
checkLogml <- function(priorTerm, adjprior, cliques, separators) {
# tarkistaa logml:n
# global CLIQCOUNTS
# global SEPCOUNTS
# global PARTITION
npops <- length(unique(PARTITION))
cliqcounts <- computeCounts(cliques, separators, npops)$cliqcounts
sepcounts <- computeCounts(cliques, separators, npops)$sepcounts
CLIQCOUNTS <- cliqcounts
SEPCOUNTS <- sepcounts
logml <- computeLogml(adjprior, priorTerm)$logml
spatialPrior <- computeLogml(adjprior, priorTerm)$spatialPrior
disp(
c(
'logml: ',
logml2String(logml),
', spatial prior: ',
logml2String(spatialPrior)
)
)
return(logml)
}

View file

@ -13,7 +13,266 @@ spatialMixture_muutokset <- R6Class(
laskeMuutokset = function( laskeMuutokset = function(
ind, rowsFromInd, data, adjprior, priorTerm, logml, cliques, separators ind, rowsFromInd, data, adjprior, priorTerm, logml, cliques, separators
) { ) {
stop("Not yet implemented") # TODO: implement # 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.
npops <- size(COUNTS, 3)
muutokset <- zeros(npops, 1)
emptyPop_pops <- findEmptyPop(npops)
emptyPop <- emptyPop_pops$emptyPop
pops <- emptyPop_pops$pops
rm(emptyPop_pops)
i1 <- PARTITION(ind)
i2 <- pops[find(pops != i1)]
if (emptyPop > 0) {
i2 <- c(i2, emptyPop)
}
rows <- ((ind - 1) * rowsFromInd + 1):(ind * rowsFromInd)
diffInCounts <- computeDiffInCounts(rows, size(COUNTS, 1), size(COUNTS, 2), data)
diffInSumCounts <- sum(diffInCounts)
diffInCliqCounts <- computeDiffInCliqCounts(cliques, ind)
diffInSepCounts <- computeDiffInCliqCounts(separators, ind)
COUNTS[, ,i1] <- COUNTS[, , i1] - diffInCounts
SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] - diffInSumCounts
CLIQCOUNTS[, i1] <- CLIQCOUNTS[, i1] - diffInCliqCounts
SEPCOUNTS[, i1] <- SEPCOUNTS[, i1] - diffInSepCounts
for (i in i2) {
CLIQCOUNTS[, i] <- CLIQCOUNTS[, i] + diffInCliqCounts
SEPCOUNTS[, i] <- SEPCOUNTS[, i] + diffInSepCounts
COUNTS[, ,i] <- COUNTS[, , i] + diffInCounts
SUMCOUNTS[i, ] <- SUMCOUNTS[i, ] + diffInSumCounts
muutokset[i] <- computeLogml(adjprior, priorTerm) - logml
CLIQCOUNTS[, i] <- CLIQCOUNTS[, i] - diffInCliqCounts
SEPCOUNTS[, i] <- SEPCOUNTS[, i] - diffInSepCounts
COUNTS[, , i] <- COUNTS[, , i] - diffInCounts
SUMCOUNTS[i, ] <- SUMCOUNTS[i, ] - diffInSumCounts
}
COUNTS[, , i1] <- COUNTS[, , i1] + diffInCounts
SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] + diffInSumCounts
CLIQCOUNTS[, i1] <- CLIQCOUNTS[, i1] + diffInCliqCounts
SEPCOUNTS[, i1] <- SEPCOUNTS[, i1] + diffInSepCounts
# Asetetaan muillekin tyhjille populaatioille sama muutos, kuin
# emptyPop:lle
if (emptyPop > 0) {
empties <- mysetdiff(1:npops, c(i2, i1))
muutokset[empties] <- muutokset(emptyPop)
}
return(list(muutokset = muutokset, diffInCounts = diffInCounts))
},
#' @param i1 i1
#' @param rowsFromInd rowsFromInd
#' @param data data
#' @param adjprior adjprior
#' @param priorTerm priorTerm
#' @param logml logml
#' @param cliques cliques
#' @param separators separators
laskeMuutokset2 = function(
i1, rowsFromInd, data, adjprior, priorTerm, logml, cliques, separators
) {
# Palauttaa npops * 1 taulun, jossa i:s alkio kertoo, mik?olisi
# muutos logml:ss? mikהli korin i1 kaikki yksilצt siirretההn
# koriin i.
# Laskee muutokset vain yhdelle tyhjהlle populaatiolle, muille tulee
# muutokseksi 0.
# global COUNTS # global SUMCOUNTS
# global PARTITION # global POP_LOGML
# global CLIQCOUNTS # global SEPCOUNTS
npops <- size(COUNTS, 3)
muutokset <- zeros(npops, 1)
emptyPop <- findEmptyPop(npops)$emptyPop
pops <- findEmptyPop(npops)$npops
i2 <- pops[find(pops != i1)]
if (emptyPop > 0) {
i2 <- c(i2, emptyPop)
}
inds <- find(PARTITION == i1)
rows <- computeRows(rowsFromInd, inds, length(inds))
diffInCounts <- computeDiffInCounts(rows, size(COUNTS, 1), size(COUNTS, 2), data)
diffInSumCounts <- sum(diffInCounts)
diffInCliqCounts <- computeDiffInCliqCounts(cliques, inds)
diffInSepCounts <- computeDiffInCliqCounts(separators, inds)
COUNTS[, ,i1] <- COUNTS[, , i1] - diffInCounts
SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] - diffInSumCounts
CLIQCOUNTS[, i1] <- 0
SEPCOUNTS[, i1] <- 0
for (i in i2) {
CLIQCOUNTS[, i] <- CLIQCOUNTS[, i] + diffInCliqCounts
SEPCOUNTS[, i] <- SEPCOUNTS[, i] + diffInSepCounts
COUNTS[, ,i] <- COUNTS[, , i] + diffInCounts
SUMCOUNTS[i, ] <- SUMCOUNTS[i, ] + diffInSumCounts
muutokset[i] <- computeLogml(adjprior, priorTerm) - logml
CLIQCOUNTS[, i] <- CLIQCOUNTS[, i] - diffInCliqCounts
SEPCOUNTS[, i] <- SEPCOUNTS[, i] - diffInSepCounts
COUNTS[, ,i] <- COUNTS[, , i] - diffInCounts
SUMCOUNTS[i, ] <- SUMCOUNTS[i, ] - diffInSumCounts
}
COUNTS[, ,i1] <- COUNTS[, , i1] + diffInCounts
SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] + diffInSumCounts
CLIQCOUNTS[, i1] <- diffInCliqCounts
SEPCOUNTS[, i1] <- diffInSepCounts
return(list(muutokset = muutokset, diffInCounts = diffInCounts))
},
#' @param T2 T2
#' @param inds2 inds2
#' @param rowsFromInd rowsFromInd
#' @param data data
#' @param adjprior adjprior
#' @param priorTerm priorTerm
#' @param i1 i1
#' @param logml logml
#' @param cliques cliques
#' @param separators separators
laskeMuutokset3 = function(
T2, inds2, rowsFromInd, data, adjprior, priorTerm, i1, logml, cliques,
separators
) {
# Palauttaa length(unique(T2)) * npops taulun, jossa (i, j):s alkio
# kertoo, mik?olisi muutos logml:ss? jos populaation i1 osapopulaatio
# inds2(find(T2 == i)) siirretההn koriin j.
# Laskee vain yhden tyhjהn populaation, muita kohden muutokseksi jהה 0.
# global COUNTS # global SUMCOUNTS
# global PARTITION # global POP_LOGML
# global CLIQCOUNTS # global SEPCOUNTS
npops <- size(COUNTS, 3)
npops2 <- length(unique(T2))
muutokset <- zeros(npops2, npops)
for (pop2 in 1:npops2) {
inds <- inds2[find(T2 == pop2)]
ninds <- length(inds)
if (ninds > 0) {
rows <- computeRows(rowsFromInd, inds, ninds)
diffInCounts <- computeDiffInCounts(rows, size(COUNTS, 1), size(COUNTS, 2), data)
diffInSumCounts <- sum(diffInCounts)
diffInCliqCounts <- computeDiffInCliqCounts(cliques, inds)
diffInSepCounts <- computeDiffInCliqCounts(separators, inds)
COUNTS[, ,i1] <- COUNTS[, , i1] - diffInCounts
SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] - diffInSumCounts
CLIQCOUNTS[, i1] <- CLIQCOUNTS[, i1] - diffInCliqCounts
SEPCOUNTS[, i1] <- SEPCOUNTS[, i1] - diffInSepCounts
emptyPop <- findEmptyPop(npops)$emptyPop
pops <- findEmptyPop(npops)$pops
i2 <- pops[find(pops != i1)]
if (emptyPop > 0) {
i2 <- c(i2, emptyPop)
}
for (i in i2) {
CLIQCOUNTS[, i] <- CLIQCOUNTS[, i] + diffInCliqCounts
SEPCOUNTS[, i] <- SEPCOUNTS[, i] + diffInSepCounts
COUNTS[, ,i] <- COUNTS[, , i] + diffInCounts
SUMCOUNTS[i, ] <- SUMCOUNTS[i, ] + diffInSumCounts
muutokset[pop2, i] <- computeLogml(adjprior, priorTerm) - logml
CLIQCOUNTS[, i] <- CLIQCOUNTS[, i] - diffInCliqCounts
SEPCOUNTS[, i] <- SEPCOUNTS[, i] - diffInSepCounts
COUNTS[, ,i] <- COUNTS[, , i] - diffInCounts
SUMCOUNTS[i, ] <- SUMCOUNTS[i, ] - diffInSumCounts
}
COUNTS[, ,i1] <- COUNTS[, , i1] + diffInCounts
SUMCOUNTS[i1, ] <- SUMCOUNTS[i1, ] + diffInSumCounts
CLIQCOUNTS[, i1] <- CLIQCOUNTS[, i1] + diffInCliqCounts
SEPCOUNTS[, i1] <- SEPCOUNTS[, i1] + diffInSepCounts
}
}
return(muutokset)
},
#' @param inds inds
#' @param rowsFromInd rowsFromInd
#' @param data data
#' @param adjprior adjprior
#' @param priorTerm priorTerm
#' @param logml logml
#' @param cliques cliques
#' @param separators separators
#' @param i1 i1
#' @param i2 i2
laskeMuutokset5 = function(
inds, rowsFromInd, data, adjprior, priorTerm, logml, cliques, separators,
i1, i2
) {
# Palauttaa length(inds) * 1 taulun, jossa i:s alkio kertoo, mik?olisi
# muutos logml:ss? mikהli yksil?i vaihtaisi koria i1:n ja i2:n vהlill?
# global COUNTS # global SUMCOUNTS
# global PARTITION
# global CLIQCOUNTS # global SEPCOUNTS
ninds <- length(inds)
muutokset <- zeros(ninds, 1)
cliqsize <- size(CLIQCOUNTS, 2)
sepsize <- size(SEPCOUNTS, 2)
for (i in 1:ninds) {
ind <- inds[i]
if (PARTITION[ind] == i1) {
pop1 <- i1 # mist?
pop2 <- i2 # mihin
} else {
pop1 <- i2
pop2 <- i1
}
rows <- ((ind - 1) * rowsFromInd + 1):(ind * rowsFromInd)
diffInCounts <- computeDiffInCounts(rows, size(COUNTS, 1), size(COUNTS, 2), data)
diffInSumCounts <- sum(diffInCounts)
diffInCliqCounts <- computeDiffInCliqCounts(cliques, ind)
diffInSepCounts <- computeDiffInCliqCounts(separators, ind)
COUNTS[, ,pop1] <- COUNTS[, , pop1] - diffInCounts
SUMCOUNTS[pop1, ] <- SUMCOUNTS[pop1, ] - diffInSumCounts
COUNTS[, ,pop2] <- COUNTS[, , pop2] + diffInCounts
SUMCOUNTS[pop2, ] <- SUMCOUNTS[pop2, ] + diffInSumCounts
CLIQCOUNTS[, pop1] <- CLIQCOUNTS[, pop1] - diffInCliqCounts
CLIQCOUNTS[, pop2] <- CLIQCOUNTS[, pop2] + diffInCliqCounts
SEPCOUNTS[, pop1] <- SEPCOUNTS[, pop1] - diffInSepCounts
SEPCOUNTS[, pop2] <- SEPCOUNTS[, pop2] + diffInSepCounts
muutokset[i] <- computeLogml(adjprior, priorTerm) - logml
COUNTS[, ,pop1] <- COUNTS[, , pop1] + diffInCounts
SUMCOUNTS[pop1, ] <- SUMCOUNTS[pop1, ] + diffInSumCounts
COUNTS[, ,pop2] <- COUNTS[, , pop2] - diffInCounts
SUMCOUNTS[pop2, ] <- SUMCOUNTS[pop2, ] - diffInSumCounts
CLIQCOUNTS[, pop1] <- CLIQCOUNTS[, pop1] + diffInCliqCounts
CLIQCOUNTS[, pop2] <- CLIQCOUNTS[, pop2] - diffInCliqCounts
SEPCOUNTS[, pop1] <- SEPCOUNTS[, pop1] + diffInSepCounts
SEPCOUNTS[, pop2] <- SEPCOUNTS[, pop2] - diffInSepCounts
}
return(muutokset)
} }
) )
) )

View file

@ -7,6 +7,6 @@
#' Check the "BugReports" field on the package description for the URL. #' Check the "BugReports" field on the package description for the URL.
#' @importFrom matlab2r blanks cell colon find inputdlg #' @importFrom matlab2r blanks cell colon find inputdlg
#' isempty isfield isspace max min ones questdlg rand repmat reshape #' isempty isfield isspace max min ones questdlg rand repmat reshape
#' size sortrows squeeze strcmp times zeros #' size sortrows squeeze strcmp times zeros disp
#' @importFrom stats runif #' @importFrom stats runif
NULL NULL

View file

@ -12,6 +12,9 @@ Calculate changes (spatial mixture class)
\subsection{Public methods}{ \subsection{Public methods}{
\itemize{ \itemize{
\item \href{#method-spatialMixture_muutokset-laskeMuutokset}{\code{spatialMixture_muutokset$laskeMuutokset()}} \item \href{#method-spatialMixture_muutokset-laskeMuutokset}{\code{spatialMixture_muutokset$laskeMuutokset()}}
\item \href{#method-spatialMixture_muutokset-laskeMuutokset2}{\code{spatialMixture_muutokset$laskeMuutokset2()}}
\item \href{#method-spatialMixture_muutokset-laskeMuutokset3}{\code{spatialMixture_muutokset$laskeMuutokset3()}}
\item \href{#method-spatialMixture_muutokset-laskeMuutokset5}{\code{spatialMixture_muutokset$laskeMuutokset5()}}
\item \href{#method-spatialMixture_muutokset-clone}{\code{spatialMixture_muutokset$clone()}} \item \href{#method-spatialMixture_muutokset-clone}{\code{spatialMixture_muutokset$clone()}}
} }
} }
@ -55,6 +58,135 @@ Calculate changes (spatial mixture class)
} }
} }
\if{html}{\out{<hr>}} \if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-spatialMixture_muutokset-laskeMuutokset2"></a>}}
\if{latex}{\out{\hypertarget{method-spatialMixture_muutokset-laskeMuutokset2}{}}}
\subsection{Method \code{laskeMuutokset2()}}{
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{spatialMixture_muutokset$laskeMuutokset2(
i1,
rowsFromInd,
data,
adjprior,
priorTerm,
logml,
cliques,
separators
)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{i1}}{i1}
\item{\code{rowsFromInd}}{rowsFromInd}
\item{\code{data}}{data}
\item{\code{adjprior}}{adjprior}
\item{\code{priorTerm}}{priorTerm}
\item{\code{logml}}{logml}
\item{\code{cliques}}{cliques}
\item{\code{separators}}{separators}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-spatialMixture_muutokset-laskeMuutokset3"></a>}}
\if{latex}{\out{\hypertarget{method-spatialMixture_muutokset-laskeMuutokset3}{}}}
\subsection{Method \code{laskeMuutokset3()}}{
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{spatialMixture_muutokset$laskeMuutokset3(
T2,
inds2,
rowsFromInd,
data,
adjprior,
priorTerm,
i1,
logml,
cliques,
separators
)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{T2}}{T2}
\item{\code{inds2}}{inds2}
\item{\code{rowsFromInd}}{rowsFromInd}
\item{\code{data}}{data}
\item{\code{adjprior}}{adjprior}
\item{\code{priorTerm}}{priorTerm}
\item{\code{i1}}{i1}
\item{\code{logml}}{logml}
\item{\code{cliques}}{cliques}
\item{\code{separators}}{separators}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-spatialMixture_muutokset-laskeMuutokset5"></a>}}
\if{latex}{\out{\hypertarget{method-spatialMixture_muutokset-laskeMuutokset5}{}}}
\subsection{Method \code{laskeMuutokset5()}}{
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{spatialMixture_muutokset$laskeMuutokset5(
inds,
rowsFromInd,
data,
adjprior,
priorTerm,
logml,
cliques,
separators,
i1,
i2
)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{inds}}{inds}
\item{\code{rowsFromInd}}{rowsFromInd}
\item{\code{data}}{data}
\item{\code{adjprior}}{adjprior}
\item{\code{priorTerm}}{priorTerm}
\item{\code{logml}}{logml}
\item{\code{cliques}}{cliques}
\item{\code{separators}}{separators}
\item{\code{i1}}{i1}
\item{\code{i2}}{i2}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-spatialMixture_muutokset-clone"></a>}} \if{html}{\out{<a id="method-spatialMixture_muutokset-clone"></a>}}
\if{latex}{\out{\hypertarget{method-spatialMixture_muutokset-clone}{}}} \if{latex}{\out{\hypertarget{method-spatialMixture_muutokset-clone}{}}}
\subsection{Method \code{clone()}}{ \subsection{Method \code{clone()}}{