从条件概率生成dna序列

egmofgnx  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(289)

我一直在从事我的生物技术项目,我已经被困在这个很长一段时间。
想法-从一组概率中产生dna序列。
-对于一个样本,我取了一个长度为128的dna字符串,计算出条件概率——c跟在a后面的概率,依此类推。
我已经为所有可能的组合生成了概率,现在我必须根据这些概率重建一个dna序列。为了清楚起见,下面是我用java编写的代码:

public class Generator {
    static HashMap<String, Integer> countMap = new HashMap<>();
    static int totalA = 0;
    static int totalC = 0;
    static int totalG = 0;
    static int totalT = 0;

    public static void learnChains(String sequence) {
        // A followed by *
        countMap.put("AT", sequence.split(Pattern.quote("AT"), -1).length - 1);
        countMap.put("AA", sequence.split(Pattern.quote("AA"), -1).length - 1);
        countMap.put("AG", sequence.split(Pattern.quote("AG"), -1).length - 1);
        countMap.put("AC", sequence.split(Pattern.quote("AC"), -1).length - 1);

        // C followed by *
        countMap.put("CT", sequence.split(Pattern.quote("CT"), -1).length - 1);
        countMap.put("CA", sequence.split(Pattern.quote("CA"), -1).length - 1);
        countMap.put("CG", sequence.split(Pattern.quote("CG"), -1).length - 1);
        countMap.put("CC", sequence.split(Pattern.quote("CC"), -1).length - 1);

        // G followed by *
        countMap.put("GT", sequence.split(Pattern.quote("GT"), -1).length - 1);
        countMap.put("GA", sequence.split(Pattern.quote("GA"), -1).length - 1);
        countMap.put("GG", sequence.split(Pattern.quote("GG"), -1).length - 1);
        countMap.put("GC", sequence.split(Pattern.quote("GC"), -1).length - 1);

        // T followed by *
        countMap.put("TT", sequence.split(Pattern.quote("TT"), -1).length - 1);
        countMap.put("TA", sequence.split(Pattern.quote("TA"), -1).length - 1);
        countMap.put("TG", sequence.split(Pattern.quote("TG"), -1).length - 1);
        countMap.put("TC", sequence.split(Pattern.quote("TC"), -1).length - 1);

        // Print the map.
        System.out.println(countMap);

        for (Map.Entry<String, Integer> e : countMap.entrySet()) {
            if (e.getKey().startsWith("A")) {
                totalA += e.getValue(); // Let total[A] = count[AA] + count[AC] + count[AG] + count[AT]
            }
            if (e.getKey().startsWith("C")) {
                totalC += e.getValue();
            }
            if (e.getKey().startsWith("G")) {
                totalG += e.getValue();
            }
            if (e.getKey().startsWith("T")) {
                totalT += e.getValue();
            }
        }
        System.out.println(totalA);
        System.out.println(totalC);
        System.out.println(totalG);
        System.out.println(totalT);

其输出如下:

{AA=7, CC=9, GG=8, TT=3, AC=10, CG=10, AG=7, GT=8, TA=8, TC=5, CT=5, AT=9, TG=9, GA=12, GC=6, CA=5}
33
29
34
25

我被卡住了:
我必须一次生成一个随机字符串。从随机字符开始。假设它是“a”。生成下一个字符,如下所示:
用概率计数[aa]/total[a]选择下一个字符“a”
用概率计数[ac]/total[a]选择下一个字符“c”
用概率计数[ag]/total[a]选择下一个字符“g”
用概率计数[at]/total[a]选择下一个字符“t”
如果下一个字符是“t”,则使用count[t**]/total[t]作为生成字符**next的概率,依此类推
我一直在尝试使用math.random()生成随机字符串,但还没有成功。
任何帮助都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题