Skip to main content
Dryad

Data from: Interpreting the FLOCK algorithm from a statistical perspective

Cite this dataset

Anderson, Eric C.; Barry, Patrick D. (2015). Data from: Interpreting the FLOCK algorithm from a statistical perspective [Dataset]. Dryad. https://doi.org/10.5061/dryad.b2038

Abstract

We show that the algorithm in the program FLOCK (Duchesne & Turgeon 2009) can be interpreted as an estimation procedure based on a model essentially identical to the STRUCTURE (Pritchard et al. 2000) model with no admixture and non-correlated allele frequency priors. Rather than using MCMC, the FLOCK algorithm searches for the maximum-a-posteriori estimate of this STRUCTURE model via a simulated annealing algorithm with a rapid cooling schedule (namely, the exponent on the objective function --> ∞). We demonstrate the similarities between the two programs in a two step approach. First, to enable rapid batch processing of many simulated data sets, we modified the source code of STRUCTURE to use the FLOCK algorithm, producing the program FLOCKTURE. With simulated data we confirmed that results obtained with FLOCK and FLOCKTURE are very similar (though ockture is some 200 times faster). Second, we simulated multiple large data sets under varying levels of population differentiation for both microsatellite and SNP genotypes. We analyzed them with FLOCKTURE and STRUCTURE and assessed each program on its ability to cluster individuals to their correct subpopulation. We show that FLOCKTURE yields results similar to STRUCTURE albeit with greater variability from run to run. FLOCKTURE did perform better than STRUCTURE when genotypes were composed of SNPs and differentiation was moderate (FST = 0.022 - 0.032). When differentiation was low, STRUCTURE outperformed FLOCKTURE for both marker types. On large data sets like those we simulated, it appears that FLOCK's reliance on inference rules regarding its “plateau record” are not helpful. Interpreting FLOCK's algorithm as a special case of the model in STRUCTURE should aid in understanding the program's output and behavior.

Usage notes