Changes from EBarrays_1.0: Two major changes were planned -- 1. To make it work with bioconductor 2. To make it faster This file is a rough log of changes of the SECOND type: o data$int.data is made a matrix instead of a data frame (as.matrix.data.frame was taking a lot of time) o subset data$int.data[data$all.pos, ] taken at the very beginning in em, since the repeated subsetting inside complete.loglik was taking time o In the f0 functions, not all the data are passed. A list of the required data-based quantities are made at the beginning (there are as many sets as the total number of patterns). These are passed to the f0 function. This takes a bit more memory. Maybe we should eventually allow a 'optimize.memory' option and compare speed. o The f0 function reimplemented from scratch for the LNN case. In particular, for variance matrix \Sigma = \sigma^2 I_n + \tao^2 M_n the determinant has an explicit form, allowing us to avoid svd() etc. o in the E-step, zhat[i,] -> p * exp(zhat[i]) -> normalize (so that sums to 1) --- this process was sometimes not working well because sometimes all zhat's in a row were very small, hence exp(z) == 0, hence sum 0, hence NaN's. Worked around this by something like exp(z_ij) / \Sum_k exp(z_ik) = 1 / \Sum_k exp(z_ik - z_ij) (this part implemented in C, as otherwise there would have been an unnecessary speed penalty)