Adde basic elements of simulateAllFreqs

This commit is contained in:
Waldir Leoncio 2020-01-30 17:19:10 +01:00
parent 94cf8b02c0
commit 1ac54301a6
4 changed files with 47 additions and 28 deletions

View file

@ -14,6 +14,7 @@ export(proportion2str)
export(rand) export(rand)
export(randdir) export(randdir)
export(repmat) export(repmat)
export(simulateAllFreqs)
export(simulateIndividuals) export(simulateIndividuals)
export(simuloiAlleeli) export(simuloiAlleeli)
export(suoritaMuutos) export(suoritaMuutos)

View file

@ -427,30 +427,3 @@ admix1 <- function(tietue) {
# prioriAlleelit = repmat(prioriAlleelit, [1,1,npops]); # prioriAlleelit = repmat(prioriAlleelit, [1,1,npops]);
# counts = COUNTS + prioriAlleelit; # counts = COUNTS + prioriAlleelit;
# allFreqs = counts./sumCounts; # allFreqs = counts./sumCounts;
# function allfreqs = simulateAllFreqs(noalle)
# % Lisää jokaista alleelia joka populaation joka lokukseen j 1/noalle(j)
# % verran. Näin saatuja counts:eja vastaavista Dirichlet-jakaumista
# % simuloidaan arvot populaatioiden alleelifrekvensseille.
# global COUNTS;
# max_noalle = size(COUNTS,1);
# nloci = size(COUNTS,2);
# npops = size(COUNTS,3);
# prioriAlleelit = zeros(max_noalle,nloci);
# for j=1:nloci
# prioriAlleelit(1:noalle(j),j) = 1/noalle(j);
# end
# prioriAlleelit = repmat(prioriAlleelit, [1,1,npops]);
# counts = COUNTS + prioriAlleelit;
# allfreqs = zeros(size(counts));
# for i=1:npops
# for j=1:nloci
# simuloidut = randdir(counts(1:noalle(j),j,i) , noalle(j));
# allfreqs(1:noalle(j),j,i) = simuloidut;
# end
# end

28
R/simulateAllFreqs.R Normal file
View file

@ -0,0 +1,28 @@
#' @title Simulate All Frequencies
#' @description Lisää jokaista alleelia joka populaation joka lokukseen j1/noalle(j) verran. Näin saatuja counts:eja vastaavista Dirichlet-jakaumista simuloidaan arvot populaatioiden alleelifrekvensseille.
#' Add each allele to each locus in each population by j 1 / noalle(j). The Dirichlet distributions corresponding to the counts thus obtained simulate values for the allele frequencies of the populations.
#' @param noalle noalle
#' @param COUNTS COUNTS
#' @export
simulateAllFreqs <- function(noalle, COUNTS = matrix(0)) {
max_noalle <- size(COUNTS, 1)
nloci <- size(COUNTS, 2)
npops <- size(COUNTS, 3)
prioriAlleelit <- zeros(max_noalle, nloci)
for (j in 1:nloci) {
prioriAlleelit[1:noalle[j], j] <- 1 / noalle[j]
}
prioriAlleelit <- repmat(prioriAlleelit, matrix(c(1, 1, npops), ncol = 1))
counts <- COUNTS + prioriAlleelit
allfreqs <- zeros(size(counts))
for (i in 1:npops) {
for (j in 1:nloci) {
simuloidut <- randdir(counts[1:noalle[j], j, i] , noalle[j])
allfreqs[1:noalle[j], j, i] <- simuloidut
}
}
return(allfreqs)
}

17
man/simulateAllFreqs.Rd Normal file
View file

@ -0,0 +1,17 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/simulateAllFreqs.R
\name{simulateAllFreqs}
\alias{simulateAllFreqs}
\title{Simulate All Frequencies}
\usage{
simulateAllFreqs(noalle, COUNTS = matrix(0))
}
\arguments{
\item{noalle}{noalle}
\item{COUNTS}{COUNTS}
}
\description{
Lisää jokaista alleelia joka populaation joka lokukseen j1/noalle(j) verran. Näin saatuja counts:eja vastaavista Dirichlet-jakaumista simuloidaan arvot populaatioiden alleelifrekvensseille.
Add each allele to each locus in each population by j 1 / noalle(j). The Dirichlet distributions corresponding to the counts thus obtained simulate values for the allele frequencies of the populations.
}