A method allocates data rates to layers to be transmitted in a multiple input, multiple output communications system. An input data stream is demultiplexed into multiple layers. For each layer, determine statistics representing a capacity of the layer based on past observations of transmitting the layer through a channel. For each layer, determine an optimum data rate based on the statistics. For each layer, determine if the optimum data rate is less than a minimum data rate of a set of available bit rates, and, if true, selecting, for a particular layer, the minimum data rate from the set of available data rates, and otherwise, if false, selecting, for the particular layer, a closest data rate from the set of available data rates that is less than the optimum data rate.