Jeg håper noen kan låne tankene sine om koden nedenfor for å generere DNA-sekvenser under Kimura-2-Parameter-modellen for DNA-erstatning.
Problemet er at hver gang koden kjøres og haplotypen distribusjon blir undersøkt, det er alltid en veldig skjev fordeling.
Det jeg ønsker er at det genereres en annen distribusjon hver gang koden kjøres. det vil si at det skal være flere eksemplarer som deler den samme haplotypen (i stedet for at de fleste deler den vanligste haplotypen).
Her er koden min:
bibliotek (pegas) set.seed (17) sim.seqs <- TRUElength.seqs <- 500num.seqs <- 100 # nummer av DNA sequencessubst.model <- "K80" # nucleotide substitution modeltransi.rate <- 1e-4 # transition ratetransv.rate <- transi.rate / 2 # transversion rateif (sim.seqs == TRUE) {nucl <- as. DNAbin (c ('a', 'c', 'g', 't')) res <- prøve (nucl, size = length.seqs, erstatt = TRUE, prob = rep (0,25, 4)) if (subst .modell == "K80") {transi.set <- list ('a' = as.DNAbin ('g'), 'c' = as.DNAbin ('t'), 'g' = as.DNAbin ( 'a'), 't' = as.DNAbin ('c')) transv.set <- liste ('a' = as.DNAbin (c ('c', 't')), 'c' = as .DNAbin (c ('a', 'g')), 'g' = as.DNAbin (c ('c', 't')), 't' = as.DNAbin (c ('a', ' g '))) transi <- funksjon (res) {unlist (transi. set [as.character (res)])} transv <- function (res) {sapply (transv.set [as.character (res)], sample, 1)} duplicate.seq <- function (res) {num. transi <- rbinom (n = 1, størrelse = lengde.seqs, prob = transi.rate) # totalt antall overganger hvis (num.transi > 0) {idx <- prøve (lengde.seqs, størrelse = num.transi, erstatt = FALSE) res [idx] <- transi (res [idx])}
num.transv <- rbinom (n = 1, størrelse = length.seqs, prob = transv.rate) # totalt antall transversjoner hvis (num.transv > 0) {idx <- sample (length.seqs, size = num. transv, erstatt = FALSE) res [idx] <- transv (res [idx])} res}} res <- matrix (replikere (num.seqs, duplicate.seq (res)), byrow = TRUE, nrow = num. seqs) klasse (res) <- "DNAbin" # write.dna (res, file = "seqs.fas", format = "fasta") h <- sort (haplotype (res), avtagende = SANT, hva = "frekvenser ") navn (h) <- 1: nrow (h)}
Output
hHaplotypes extracted from: resAntall haplotyper: 5 Sekvenslengde: 500Haplotype etiketter og frekvenser: 1 2 3 4596 1 1 1 1
Hvis koden kjøres flere ganger (uten frøet), vises det samme mønsteret: h er alltid skjev mot den mest dominerende haplotype.
Jeg vil for eksempel kunne kjøre koden (uten seed) og få noe sånt som
hHaplotypes ekstrahert fra: resAntall haplotyper: 5 Sekvenslengde: 500Haplotype-etiketter og frekvenser: 1 2 3 4 5 35 25 20 15 5
jeg tror jeg må spesifisere en fordeling for haplotypene, men antall haplotyper generert av mutasjonsprosessen er ikke kjent på forhånd.
Noen tanker?