Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从条件概率生成DNA序列_Java_Sequence_Probability_Markov - Fatal编程技术网

Java 从条件概率生成DNA序列

Java 从条件概率生成DNA序列,java,sequence,probability,markov,Java,Sequence,Probability,Markov,我一直在从事我的生物技术项目,我已经在这方面坚持了很长时间。 Idea-从一组概率生成DNA序列。 -对于一个样本,我取了一个长度为128的给定DNA字符串,计算出条件概率——C跟随a的概率,依此类推。 我已经生成了所有可能组合的概率,现在我必须根据这些概率重建DNA序列。 为了清楚起见,下面是我用Java编写的代码: public class Generator { static HashMap<String, Integer> countMap = new HashMap

我一直在从事我的生物技术项目,我已经在这方面坚持了很长时间。
Idea-从一组概率生成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);

我被卡住了:
我必须一次生成一个随机字符串,一个字符。从一个随机字符开始。假设它是“A”。生成下一个字符,如下所示:


选择下一个具有概率计数[AA]/total[A]的字符“A”
选择下一个字符“C”,其概率计数为[AC]/total[A]
选择下一个字符“G”,概率计数为[AG]/total[A]
选择概率计数为[AT]/total[A]的下一个字符“T”

如果下一个字符是“T”,则使用count[T**]/total[T]作为生成字符**next的概率,依此类推


我一直在尝试使用Math.random()生成随机字符串,但尚未成功。

非常感谢您的帮助。

为了清楚起见,计数[AC]'选择下一个字符“C”和概率计数[AC]/total[A]”表示我们正在构建的当前字符串中的子字符串AC的数量?是的。我们正在学习的当前字符串有子字符串AC,正如您在输出中看到的,hashmap有AC按顺序出现的计数数。现在要生成一个新的随机字符串,如果第一个字符是a,那么我们必须使用与a相关联的条件概率,即AT、AC、AG、AA并生成下一个字符。您的符号不清楚。你能解释一下这意味着什么吗?例如:“选择下一个字符“A”,其概率计数为[AA]/total[A]?@Cenfracee我在代码和描述中都清楚地提到了计数[AA]是子字符串AA在序列中出现的次数,总A是countAA+AC+AT+AG之和,即所有以A开头的子字符串,后跟其余4个字符。
{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