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
Example #2
0
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;
Example #7
0
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);