我一直在从事我的生物技术项目,我已经被困在这个很长一段时间。
想法-从一组概率中产生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()生成随机字符串,但还没有成功。
任何帮助都将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!