Esempio n. 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="data"></param>
        /// <param name="mixturesDistribution"></param>
        /// <param name="haploidMeans"></param>
        public HiddenMarkovModel(List <List <double> > data, List <MultivariateNegativeBinomial> mixturesDistribution, List <double> haploidMeans)
        {
            // HMM set-up
            nStates             = mixturesDistribution.Count;
            length              = data.Count;
            _stateProbabilities = new double[nStates];
            _emission           = new NegativeBinomialMixture(mixturesDistribution, haploidMeans);
            _variances          = mixturesDistribution.Select(x => x.Variances).ToList();
            _transition         = CanvasCommon.Utilities.MatrixCreate(nStates, nStates);
            for (int i = 0; i < nStates; i++)
            {
                for (int j = 0; j < nStates; j++)
                {
                    if (i == j)
                    {
                        _transition[i][j] = selfTransition;
                    }
                    else
                    {
                        _transition[i][j] = (1.0 - selfTransition) / (nStates - 1);
                    }
                }
            }

            // alpha-beta algorithm
            _beta  = CanvasCommon.Utilities.MatrixCreate(length, nStates);
            _alpha = CanvasCommon.Utilities.MatrixCreate(length, nStates);
            // marginal posterior distibution
            _gamma = CanvasCommon.Utilities.MatrixCreate(nStates, length);
            // joint posterior distibution
            _epsilon = CanvasCommon.Utilities.MatrixCreate(length, nStates, nStates);
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="data"></param>
        /// <param name="mixturesDistribution"></param>
        /// <param name="haploidMeans"></param>
        public HiddenMarkovModel(List <List <double> > data, List <MultivariateNegativeBinomial> mixturesDistribution, List <double> haploidMeans, bool isPerSample)
        {
            // HMM set-up
            nStates             = mixturesDistribution.Count;
            length              = data.Count;
            _stateProbabilities = new double[nStates];
            _emission           = new NegativeBinomialMixture(mixturesDistribution, haploidMeans, isPerSample);
            _transition         = CanvasCommon.Utilities.MatrixCreate(nStates, nStates);
            for (int i = 0; i < nStates; i++)
            {
                for (int j = 0; j < nStates; j++)
                {
                    if (i == j)
                    {
                        _transition[i][j] = selfTransition;
                    }
                    else
                    {
                        _transition[i][j] = (1.0 - selfTransition) / (nStates - 1);
                    }
                }
                _stateProbabilities[i] = 1f / nStates;
            }

            // alpha-beta algorithm
            CanvasCommon.Utilities.MatrixCreate(length, nStates);
            CanvasCommon.Utilities.MatrixCreate(length, nStates);
            // marginal posterior distibution
            CanvasCommon.Utilities.MatrixCreate(nStates, length);
            // joint posterior distibution
            CanvasCommon.Utilities.MatrixCreate(length, nStates, nStates);
        }