use of ubic.basecode.math.distribution.Histogram in project Gemma by PavlidisLab.
the class DifferentialExpressionAnalyzerServiceImpl method addPvalueDistribution.
private void addPvalueDistribution(ExpressionAnalysisResultSet resultSet) {
Histogram pvalHist = new Histogram("", 100, 0.0, 1.0);
for (DifferentialExpressionAnalysisResult result : resultSet.getResults()) {
Double pvalue = result.getPvalue();
if (pvalue != null)
pvalHist.fill(pvalue);
}
PvalueDistribution pvd = PvalueDistribution.Factory.newInstance();
pvd.setNumBins(100);
ByteArrayConverter bac = new ByteArrayConverter();
pvd.setBinCounts(bac.doubleArrayToBytes(pvalHist.getArray()));
// do not save yet.
resultSet.setPvalueDistribution(pvd);
}
use of ubic.basecode.math.distribution.Histogram in project Gemma by PavlidisLab.
the class ExpressionExperimentQCController method getDiffExPvalueHistXYSeries.
/**
* @return JFreeChart XYSeries representing the histogram for the requested result set
*/
private XYSeries getDiffExPvalueHistXYSeries(ExpressionExperiment ee, Long analysisId, Long rsId, String factorName) {
if (ee == null || analysisId == null || rsId == null) {
log.warn("Got invalid values: " + ee + " " + analysisId + " " + rsId + " " + factorName);
return null;
}
Histogram hist = differentialExpressionResultService.loadPvalueDistribution(rsId);
XYSeries xySeries;
if (hist != null) {
xySeries = new XYSeries(rsId, true, true);
Double[] binEdges = hist.getBinEdges();
double[] counts = hist.getArray();
assert binEdges.length == counts.length;
for (int i = 0; i < binEdges.length; i++) {
xySeries.add(binEdges[i].doubleValue(), counts[i]);
}
return xySeries;
}
return null;
}
use of ubic.basecode.math.distribution.Histogram in project Gemma by PavlidisLab.
the class TwoChannelMissingValuesImpl method computeSignalThreshold.
/**
* Determine a threshold based on the data.
*/
private Double computeSignalThreshold(ExpressionDataDoubleMatrix preferred, ExpressionDataDoubleMatrix signalChannelA, ExpressionDataDoubleMatrix signalChannelB, ExpressionDataDoubleMatrix baseChannel) {
Double min = Double.MAX_VALUE;
Double max = Double.MIN_VALUE;
for (ExpressionDataMatrixRowElement element : baseChannel.getRowElements()) {
CompositeSequence designElement = element.getDesignElement();
int numCols = preferred.columns(designElement);
for (int col = 0; col < numCols; col++) {
Double[] signalA = null;
if (signalChannelA != null) {
signalA = signalChannelA.getRow(designElement);
}
Double[] signalB = null;
if (signalChannelB != null) {
signalB = signalChannelB.getRow(designElement);
}
Double sigAV = (signalA == null || signalA[col] == null) ? Double.NaN : signalA[col];
Double sigBV = (signalB == null || signalB[col] == null) ? Double.NaN : signalB[col];
if (!sigAV.isNaN() && sigAV < min) {
min = sigAV;
} else if (!sigBV.isNaN() && sigBV < min) {
min = sigBV;
} else if (!sigAV.isNaN() && sigAV > max) {
max = sigAV;
} else if (!sigBV.isNaN() && sigBV > max) {
max = sigBV;
}
}
}
Histogram h = new Histogram("range", 100, min, max);
for (ExpressionDataMatrixRowElement element : baseChannel.getRowElements()) {
CompositeSequence designElement = element.getDesignElement();
int numCols = preferred.columns(designElement);
for (int col = 0; col < numCols; col++) {
Double[] signalA = null;
if (signalChannelA != null) {
signalA = signalChannelA.getRow(designElement);
}
Double[] signalB = null;
if (signalChannelB != null) {
signalB = signalChannelB.getRow(designElement);
}
Double sigAV = (signalA == null || signalA[col] == null) ? Double.NaN : signalA[col];
Double sigBV = (signalB == null || signalB[col] == null) ? Double.NaN : signalB[col];
if (!sigAV.isNaN())
h.fill(sigAV);
if (!sigBV.isNaN())
h.fill(sigBV);
}
}
Double thresh = h.getApproximateQuantile(TwoChannelMissingValuesImpl.QUANTILE_OF_SIGNAL_TO_USE_IF_NO_BKG_AVAILABLE);
TwoChannelMissingValuesImpl.log.info("Threshold based on signal=" + thresh);
return thresh;
}
use of ubic.basecode.math.distribution.Histogram in project Gemma by PavlidisLab.
the class ComBat method plot.
/**
* Make diagnostic plots.
* FIXME: As in the original ComBat, this only graphs the first batch's statistics. In principle we can (and perhaps
* should) examine these plots for all the batches.
*
* @param filePrefix file prefix
*/
public void plot(String filePrefix) {
if (this.gammaHat == null)
throw new IllegalArgumentException("You must call 'run' first");
/*
* View the distribution of gammaHat, which we assume will have a normal distribution
*/
DoubleMatrix1D ghr = gammaHat.viewRow(0);
int NUM_HIST_BINS = 100;
Histogram gammaHatHist = new Histogram("GammaHat", NUM_HIST_BINS, ghr);
XYSeries ghplot = gammaHatHist.plot();
Normal rn = new Normal(this.gammaBar.get(0), Math.sqrt(this.t2.get(0)), new MersenneTwister());
Histogram ghtheoryT = new Histogram("Gamma", NUM_HIST_BINS, gammaHatHist.min(), gammaHatHist.max());
for (int i = 0; i < 10000; i++) {
double n = rn.nextDouble();
ghtheoryT.fill(n);
}
XYSeries ghtheory = ghtheoryT.plot();
File tmpfile;
try {
tmpfile = File.createTempFile(filePrefix + ".gammahat.histogram.", ".png");
ComBat.log.info(tmpfile);
} catch (IOException e) {
throw new RuntimeException(e);
}
try (OutputStream os = new FileOutputStream(tmpfile)) {
this.writePlot(os, ghplot, ghtheory);
/*
* View the distribution of deltaHat, which we assume has an inverse gamma distribution
*/
DoubleMatrix1D dhr = deltaHat.viewRow(0);
Histogram deltaHatHist = new Histogram("DeltaHat", NUM_HIST_BINS, dhr);
XYSeries dhplot = deltaHatHist.plot();
Gamma g = new Gamma(aPrior.get(0), bPrior.get(0), new MersenneTwister());
Histogram deltaHatT = new Histogram("Delta", NUM_HIST_BINS, deltaHatHist.min(), deltaHatHist.max());
for (int i = 0; i < 10000; i++) {
double invg = 1.0 / g.nextDouble();
deltaHatT.fill(invg);
}
XYSeries dhtheory = deltaHatT.plot();
tmpfile = File.createTempFile(filePrefix + ".deltahat.histogram.", ".png");
ComBat.log.info(tmpfile);
try (OutputStream os2 = new FileOutputStream(tmpfile)) {
this.writePlot(os2, dhplot, dhtheory);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
use of ubic.basecode.math.distribution.Histogram in project Gemma by PavlidisLab.
the class DifferentialExpressionAnalyzerServiceTest method testWritePValuesHistogram.
@Test
public void testWritePValuesHistogram() {
DifferentialExpressionAnalysisConfig config = new DifferentialExpressionAnalysisConfig();
Collection<ExperimentalFactor> factors = ee.getExperimentalDesign().getExperimentalFactors();
config.setFactorsToInclude(factors);
Collection<DifferentialExpressionAnalysis> analyses = differentialExpressionAnalyzerService.runDifferentialExpressionAnalyses(ee, config);
for (DifferentialExpressionAnalysis analysis : analyses) {
differentialExpressionAnalysisService.thaw(analysis);
for (ExpressionAnalysisResultSet resultSet : analysis.getResultSets()) {
Histogram hist = resultService.loadPvalueDistribution(resultSet.getId());
assertNotNull(hist);
}
}
}
Aggregations