Description Usage Arguments Details Value Author(s) Examples
The function EM is called multiple times, each time with a random starting value
1 2 |
pvec |
vector of length k-1 |
precision |
positive integer to determine the variance of the multinomial draws (see details). |
nstart |
Integer. Number of random starting values |
parallel |
Logical. If true, the function mclapply is used for parallelization. Only makes sense when multiple cores are available. The other parameters are the same as in |
The starting values for the parameters alpha and beta are drawn from a uniform distribution on two user-defined intervals. The starting values for p1, ..., pk-1 are drawn from a multinomial distribution. The variance of the multinomial distribution is determined by the parameter precision: a multinomial sample of the size precision is drawn with the function rmultinom, afterwards the multinomial sample is scaled to sum up to one. The larger precision, the smaller the variance. To make sure that no entry of the vector is zero, a pseudo count of 0.05 is added to each component before scaling.
A list consisting of nstart objects, each one a list just like the output of EM (trajectory of theta, Q and convergence code), see rnegbinmix::EM.
Johanna Bertl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # Simulate dataset of synonymous and non-synonymous mutations
c1 = 0.5; c2 = 10
p1 = 0.2; p2 = 0.8
alpha = 10
beta = 5
mutations = rnegbinmix_syn_nonsyn(n=3000, alpha=alpha, beta=beta, c=c(c1, c2), p = c(p1, p2))
# EM algorithm
# Constraints: ui %*% theta - ci >= 0
# alpha > 0, beta > 0, 0 <= p1 <=1
ui = rbind(c(1, 0, 0), c(0, 1, 0), c(0, 0, 1), c(0, 0, -1))
ci = c(0, 0, 0, -1)
# Starting values
alpha.interval = c(1, 20)
beta.interval = c(1, 10)
pvec = p1
precision=20
nstart = 5
# Run EM algorithm
EMres = EM_random(alpha.interval = alpha.interval, beta.interval = beta.interval, pvec = pvec, precision = precision, nstart=nstart, x.syn = mutations$Syn, x.non = mutations$Non, cvec=c(c1, c2), iter=25, ui = ui, ci=ci, parallel=T)
# Plot results
par(mfrow=c(3,2))
for(i in 1:5) matplot(EMres[[i]]$theta, t="l")
par(mfrow=c(1,1))
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.