def calculateFirstProbabilies(initialProbabilities, emissionI, emissionD, sequences): firstCol = [0,0,0,0] for i in range(4): initialProb = initialProbabilities[i] emissionValue = generateEmissionValue(0, i, sequences, emissionI, emissionD) firstCol[i] = initialProb* emissionValue return firstCol
def calculateBigADict(postTable, laplaceOffset,sequences, forwardTable, backwardTable, transitionTable, emissionI, emissionD, likelihood): tableLength = len(postTable) results = {} for i in range(4): for j in range(4): results[(i,j)] = laplaceOffset for t in range(0, tableLength-1): for i in range(4): for j in range(4): eValue = generateEmissionValue(t, j, sequences, emissionI, emissionD) numerator = forwardTable[t][i] numerator = numerator + math.log(transitionTable[i][j]) numerator = numerator + math.log(eValue) numerator = numerator + backwardTable[t+1][j] denominator = likelihood total = numerator - denominator prob = math.exp(total) if prob == 0: print "error in big A dict" exit(1) results[(i,j)] = results[(i,j)] + prob return results
def calculateForwardAlgoLog(initialProbabilities, transitionProbalities, emissionI, emissionD, sequences ): results = [[0,0,0,0]] results[0] = calculateFirstProbabiliesLog(initialProbabilities, emissionI, emissionD, sequences) endLength = len(sequences[0]) for t in range(1, endLength): currentCol = [0,0,0,0] for j in range(4): singleValues = [] emissionValue = generateEmissionValue(t, j, sequences, emissionI, emissionD) for i in range(4): singleValues.append(results[t-1][i] + math.log(transitionProbalities[i][j]) + math.log(emissionValue)) currentCol[j] = sumAllLogProbailities(singleValues) results.append(currentCol) return results;
def calculateForwardAlgo(initialProbabilities, transitionProbalities, emissionI, emissionD, sequences ): results = [[0,0,0,0]] results[0] = calculateFirstProbabilies(initialProbabilities, emissionI, emissionD, sequences) endLength = len(sequences[0]) for t in range(1, endLength): currentCol = [0,0,0,0] for j in range(4): singleValue = 0 emissionValue = generateEmissionValue(t, j, sequences, emissionI, emissionD) for i in range(4): singleValue = singleValue + (results[t-1][i]*transitionProbalities[i][j]) currentCol[j] = singleValue * emissionValue results.append(currentCol) return results;
def calculateBackwardsAlgo(transitionProbalities, emissionI, emissionD, sequences ): results = [[1,1,1,1]] endLength = len(sequences[0]) for t in range(1, endLength): currentCol = [0,0,0,0] for i in range(4): singleValue = 0 for j in range(4): indexInSequence = endLength - t; emissionValue = generateEmissionValue(indexInSequence, j, sequences, emissionI, emissionD) singleValue = singleValue + (results[0][j]*transitionProbalities[i][j]*emissionValue) currentCol[i] = singleValue results.insert(0,currentCol) return results;
def calculateBackwardsAlgoLog(transitionProbalities, emissionI, emissionD, sequences ): results = [[math.log(1),math.log(1),math.log(1),math.log(1)]] endLength = len(sequences[0]) for t in range(1, endLength): currentCol = [0,0,0,0] for i in range(4): singleValues = [] for j in range(4): indexInSequence = endLength - t; emissionValue = generateEmissionValue(indexInSequence, j, sequences, emissionI, emissionD) singleValues.append((results[0][j]) + math.log(transitionProbalities[i][j]) + math.log(emissionValue)) finalVal = sumAllLogProbailities(singleValues) if finalVal == float("inf") or finalVal == -float("inf") or finalVal == 0: print singleValues exit(0) currentCol[i] = finalVal results.insert(0,currentCol) return results;
def calculateVeterbiEncoding(initialProbabilities, transitionProbalities, emissionI, emissionD, sequences ): results = [[0,0,0,0]] results[0] = calculateFirstProbabilies(initialProbabilities, emissionI, emissionD, sequences) endLength = len(sequences[0]) backPointers = {} for t in range(1, endLength): currentCol = [0,0,0,0] for j in range(4): singleValue = 0 emissionValue = generateEmissionValue(t, j, sequences, emissionI, emissionD) backIndex = 0 for i in range(4): newValue = results[t-1][i]*transitionProbalities[i][j] if newValue > singleValue: backIndex = i singleValue = newValue backPointers[(t,j)] = backIndex currentCol[j] = singleValue * emissionValue results.append(currentCol) return (results, backPointers);