Skip to content
Optimization algorithms for computing maximum-likelihood estimates of mixture proportions.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
code Revised code generating plots for Fig. 7 based on discussion with You… Feb 28, 2019

mix-SQP: sequential quadratic programming for fast maximum-likelihood estimation of mixture proportions

This repository contains code resources to accompany our research paper,

Youngseok Kim, Peter Carbonetto, Matthew Stephens and Mihai Anitescu (2018). A fast algorithm for maximum likelihood estimation of mixture proportions using sequential quadratic programming. arXiv:1806.01412.

We provide code implementing optimization method for maximum-likelihood estimation of mixture proportions, including a fast algorithm based on sequential quadratic programming, which we call "mix-SQP".

All methods and demonstrations are implemented in Julia, aside from the interior point solver based on MOSEK, which is implemented in R. See also the please see the mixsqp R package.

For demos of the mix-SQP algorithm and comparisons with other optimization approaches, see here.

If you find a bug, or you have a question or feedback on our work, please post an issue.


Copyright (c) 2017-2018, Youngseok Kim, Peter Carbonetto, Matthew Stephens and Mihai Anitescu.

All source code and software in this repository are made available under the terms of the MIT license. See the LICENSE file for the full text of the license.

Citing this work

If you find any of the source code in this repository useful for your work, please cite our paper. The full citation is given above.

Setup instructions (part 1)

To run the first two demos listed here, follow these steps.

Note: If you encounter a problem running the demos, or installing any of the programs, you want to try replicating our computing setup as closely as possible. At the bottom of each Jupyter notebook and webpage included here, we have recorded information about the setup used to run the Julia code.

  1. Install Julia.

  2. Install the Distributions and LowRankApprox Julia packages:

  3. Restart Julia, then precompile the packages and load them to make sure that they work:

    using Distributions
    using LowRankApprox
  4. Clone or download this git repository on your computer.

  5. Work through the first and second demos here. To do this, start up Julia, making sure that the working directory is set to the analysis directory inside the git repository. To verify, run pwd() in Julia; it should return a directory with mixsqp-paper/analysis at the end.

    Alternatively, you may open the mixsqp_example notebook in Jupyter (e.g., Jupyter notebook), and run the code inside Jupyter. This requires that you have already installed the Jupyter kernel for Julia.

Setup instructions (part 2)

The simple setup instructions above will allow you to run the first two examples. If you have successfully run the first two examples, and you would like to try the other demos, follow these additional setup instructions. These additional examples compare performance of different methods, and require additional programs and Julia packages to run.

  1. Install R. Note that version 3.4.0 or later is required.

  2. Install MOSEK.

  3. Install the Rmosek package in R (see here for installation instructions).

  4. Run this example in R to verify that MOSEK and Rmosek are correctly installed.

  5. Install the R package REBayes from CRAN:

  6. Install the Mosek, JuMP and RCall Julia packages:

  7. Restart Julia, then precompile the packages and load them to make sure that they work:

    using Mosek
    using JuMP
    using RCall

What's included

├── analysis
├── code
├── data
├── docs
├── misc
└── output
  • The analysis directory contains Jupyter notebooks illustrating the optimization methods in simulated data sets, and R code to generate the plots for the manuscript.

  • The code directory contains Julia code implementing the optimization algorithms, as well as other code used in the numerical experiments.

  • The data directory is where all raw and processed data are stored.

  • The docs directory contains webpages generated from the Jupyter notebooks.

  • Results of the demos and numerical experiments are stored in the output directory.

Developer notes

Run these commands from the analysis directory to rebuild the website from the Jupyter notebooks.

jupyter nbconvert --template=../docs/nbconvert.tpl index.ipynb \
  mixSQP_example.ipynb low_rank_approximation.ipynb \
  mixSQP_REBayes_EM.ipynb ash_computation_time.ipynb \
  QPsubproblem.ipynb --output-dir=../docs


This project was developed by Youngseok Kim, Peter Carbonetto, Matthew Stephens and Mihai Anitescu at the University of Chicago.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.