BicSPAM
BicSPAM makes available a set of pattern-based approaches for order-preserving biclustering.BicSPAM approaches are proposed to perform flexible and exhaustive biclustering based on sequential patterns.
BicSPAM approaches are easily parameterizable, allowing the selection of different strategies with varying levels of noise and missing values, underlying SPM methods, pattern representations (simple, condensed and approximate), and discretization options. Flexible structures and quality criteria can be easily defined through extension-merging-filtering steps without the need to adapt the core task.
Finally, BicSPAM allows for order-preserving biclusters with symmetries, useful for instance to capture activation and regulatory mechanisms in biological processes.
Authors: Rui Henriques and Sara Madeira
@article{,
title={BicSPAM: Flexible Biclustering using Sequential Patterns},
booktitle={BMC Bioinformatics},
author={Rui Henriques and Sara Madeira},
year={2014},
volume={15},
pages={130},
publisher={BioMed Central Ltd},
doi={10.1186/1471-2105-15-130},
}
Synthetic datasets (non-exhaustive set of 6 data instances with background values following Uniform or Normal):
- 500x50 (no noise, no missings): dataset, hiddenBics
- 1000x75 (no noise, no missings): dataset, hiddenBics
- 2000x100 (no noise, no missings): dataset, hiddenBics
- Datasets with 2% of missing values (1000x75): dataset, hiddenBics
- Datasets with 5% of missing values (1000x75): dataset, hiddenBics
- Datasets with 2% of noisy values (1000x75): dataset, hiddenBics
- Datasets with 5% of noisy values (1000x75): dataset, hiddenBics
- dlblc.arff (180 conditions, 660 genes)
- gyeast.arff (6 conditions, 6142 genes)
- coloncancer.arff (62 conditions, 2000 genes)
- leukemia.arff (38 conditions, 7129 genes)
Software
Example on how to use BicSPAM:
public class SyntheticTests {
//mining methods
static FIM[] pminers = new FIM[]{new ClosedIndexSpan(), new IndexSpan(), new BIDEPlus(), new PrefixSpan()};
//mapping options
static Itemizer itemizer = new Itemizer(20, //nr of items
NormalizationCriteria.Overall,
DiscretizationCriteria.NormalDist,
FillingCriteria.Replace, //missings handler
OutlierizationCriteria.Overall);
//closing options
Biclusterizer bichandler = new Biclusterizer(
new BiclusterExtender(0.25,0.25), //criteria for the default extender
new BiclusterIntraFilter(0.8),
new BiclusterBicFilter(0.4),
new BiclusterMerger(0.7));
//Generator properties
static Background background = Background.Random;
static String distRowsBics = "Uniform", distColsBics = "Uniform";
static double noise = 0.05; //5% of noise
static double missings = 0.02; //2% of missing values
static int[] alphabets = new int[]{10,20,40};
static int[] numRows = new int[]{500,1000,2000};
static int[] numColumns = new int[]{50,75,100};
static int[] numBics = new int[]{4,7,10};
static int[] minRowsBics = new int[]{40,100,200}, maxRowsBics = new int[]{70,150,300};
static int[] minColsBics = new int[]{6,7,8}, maxColsBics = new int[]{8,9,10};
public static void main(String[] args) throws Exception{
for(int alphabet : alphabets){
for(int i = 0, l = numRows.length; i<l; i++){
BicGenerator generator = new BicGenerator(numRows[i],numColumns[i],numBics[i],background,alphabet);
Biclusters trueBics = generator.generateKBiclustersWithCoherentEvolutionOnColumns(type,
distRowsBics, minRowsBics[i], maxRowsBics[i], distColsBics, minColsBics[i], maxColsBics[i]);
int[][] dataset = generator.getSymbolicExpressionMatrix();
dataset = generator.putNoise(dataset,noise);
dataset = generator.putMissings(dataset,missings);
Dataset data = new Dataset(dataset,true);
for(FIM pminer : pminers){
double minRowsSup = findMinRowsSupExpectations(data);
double minColsSup = findMinColsSupExpectations(data);
pminer.inputParams(minColsSup,minRowsSup);
BiclusterMiner bicminer = new OrderPreservingBiclusterMiner(data,pminer,bichandler,itemizer);
core(bicminer,trueBics);
}
}
}
}
private static void core(BiclusterMiner bicminer, Biclusters trueBics) throws Exception {
Biclusters bics = bicminer.mineBiclusters();
System.out.println("True Bics: " + trueBics.toShortString());
System.out.println("Foung Bics: " + bics.toShortString());
System.out.println(MatchMetrics.run(bics, trueBics));
}
}