java cmos_Java PoissonDistribution.sample方法代码示例

这段代码展示了如何在Java中使用Apache Commons Math库的PoissonDistribution类生成样本。通过对泊松分布的采样,模拟了不同段的杂合率和读取深度,同时还涉及了其他随机数生成,如均匀分布和伽马分布,用于模拟生物信息学中的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import org.apache.commons.math3.distribution.PoissonDistribution; //导入方法依赖的package包/类

AlleleFractionSimulatedData(final SampleLocatableMetadata metadata,

final AlleleFractionGlobalParameters globalParameters,

final int numSegments,

final double averageHetsPerSegment,

final double averageDepth,

final RandomGenerator rng) {

final AlleleFractionState.MinorFractions minorFractions = new AlleleFractionState.MinorFractions(numSegments);

final List allelicCounts = new ArrayList<>();

final List segments = new ArrayList<>();

final PoissonDistribution segmentLengthGenerator = makePoisson(rng, averageHetsPerSegment);

final PoissonDistribution readDepthGenerator = makePoisson(rng, averageDepth);

final UniformRealDistribution minorFractionGenerator = new UniformRealDistribution(rng, 0.0, 0.5);

final double meanBias = globalParameters.getMeanBias();

final double biasVariance = globalParameters.getBiasVariance();

final double outlierProbability = globalParameters.getOutlierProbability();

//translate to ApacheCommons' parametrization of the gamma distribution

final double gammaShape = meanBias * meanBias / biasVariance;

final double gammaScale = biasVariance / meanBias;

final GammaDistribution biasGenerator = new GammaDistribution(rng, gammaShape, gammaScale);

//put each segment on its own chromosome and sort in sequence-dictionary order

final List chromosomes = IntStream.range(0, numSegments)

.mapToObj(i -> metadata.getSequenceDictionary().getSequence(i).getSequenceName())

.collect(Collectors.toList());

for (final String chromosome : chromosomes) {

// calculate the range of het indices for this segment

final int numHetsInSegment = Math.max(MIN_HETS_PER_SEGMENT, segmentLengthGenerator.sample());

final double minorFraction = minorFractionGenerator.sample();

minorFractions.add(minorFraction);

//we will put all the hets in this segment/chromosome at loci 1, 2, 3 etc

segments.add(new SimpleInterval(chromosome, 1, numHetsInSegment));

for (int het = 1; het < numHetsInSegment + 1; het++) {

final double bias = biasGenerator.sample();

//flip a coin to decide alt minor (alt fraction = minor fraction) or ref minor (alt fraction = 1 - minor fraction)

final boolean isAltMinor = rng.nextDouble() < 0.5;

final double altFraction = isAltMinor ? minorFraction : 1 - minorFraction;

//the probability of an alt read is the alt fraction modified by the bias or, in the case of an outlier, random

final double pAlt;

if (rng.nextDouble() < outlierProbability) {

pAlt = rng.nextDouble();

} else {

pAlt = altFraction / (altFraction + (1 - altFraction) * bias);

}

final int numReads = readDepthGenerator.sample();

final int numAltReads = new BinomialDistribution(rng, numReads, pAlt).sample();

final int numRefReads = numReads - numAltReads;

allelicCounts.add(new AllelicCount(new SimpleInterval(chromosome, het, het), numRefReads, numAltReads));

}

}

data = new AlleleFractionSegmentedData(

new AllelicCountCollection(metadata, allelicCounts),

new SimpleIntervalCollection(metadata, segments));

trueState = new AlleleFractionState(meanBias, biasVariance, outlierProbability, minorFractions);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值