def test_regress_mutation_probability_endpoint_conditioning(self): ngenerations = 10 selection = 2.0 mutation = 0.0001 recombination = 0.001 nchromosomes = 2 npositions = 4 K_initial = np.array([ [1,1,1,1], [0,0,0,0]], dtype=np.int8) K_final = np.array([ [1,1,0,0], [0,0,1,1]], dtype=np.int8) # ngenboundaries = ngenerations - 1 no_mutation_prior = (1 - mutation)**( npositions*ngenboundaries*nchromosomes) # initial_long = popgenmarkov.bin2d_to_int(K_initial) final_long = popgenmarkov.bin2d_to_int(K_final) ci_to_short, short_to_count, sorted_chrom_lists = get_state_space_info( nchromosomes, npositions) initial_ci = chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in K_initial), npositions) initial_short = ci_to_short[initial_ci] final_ci = chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in K_final), npositions) final_short = ci_to_short[final_ci] # get an answer using the less efficient methods P_sr = popgenmarkov.get_selection_recombination_transition_matrix( selection, recombination, nchromosomes, npositions) P_m = popgenmarkov.get_mutation_transition_matrix( mutation, nchromosomes, npositions) p_b_given_a = linalg.matrix_power(np.dot(P_sr, P_m), ngenerations-1)[ initial_long, final_long] p_b_given_a_no_mutation = linalg.matrix_power(P_sr, ngenerations-1)[ initial_long, final_long] no_mutation_posterior = ( no_mutation_prior * p_b_given_a_no_mutation) / p_b_given_a # get an answer using the more efficient methods P_sr_s = get_selection_recombination_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, recombination, nchromosomes, npositions) P_m_s = get_mutation_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, mutation, nchromosomes, npositions) p_b_given_a_s = linalg.matrix_power( np.dot(P_sr_s, P_m_s), ngenerations-1)[ initial_short, final_short] p_b_given_a_no_mutation_s = linalg.matrix_power( P_sr_s, ngenerations-1)[ initial_short, final_short] no_mutation_posterior_s = ( no_mutation_prior * p_b_given_a_no_mutation_s) / p_b_given_a_s # self.assertTrue( np.allclose(no_mutation_posterior, no_mutation_posterior_s))
def test_regress_mutation_probability_endpoint_conditioning(self): ngenerations = 10 selection = 2.0 mutation = 0.0001 recombination = 0.001 nchromosomes = 2 npositions = 4 K_initial = np.array([[1, 1, 1, 1], [0, 0, 0, 0]], dtype=np.int8) K_final = np.array([[1, 1, 0, 0], [0, 0, 1, 1]], dtype=np.int8) # ngenboundaries = ngenerations - 1 no_mutation_prior = (1 - mutation)**(npositions * ngenboundaries * nchromosomes) # initial_long = popgenmarkov.bin2d_to_int(K_initial) final_long = popgenmarkov.bin2d_to_int(K_final) ci_to_short, short_to_count, sorted_chrom_lists = get_state_space_info( nchromosomes, npositions) initial_ci = chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in K_initial), npositions) initial_short = ci_to_short[initial_ci] final_ci = chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in K_final), npositions) final_short = ci_to_short[final_ci] # get an answer using the less efficient methods P_sr = popgenmarkov.get_selection_recombination_transition_matrix( selection, recombination, nchromosomes, npositions) P_m = popgenmarkov.get_mutation_transition_matrix( mutation, nchromosomes, npositions) p_b_given_a = linalg.matrix_power(np.dot(P_sr, P_m), ngenerations - 1)[initial_long, final_long] p_b_given_a_no_mutation = linalg.matrix_power( P_sr, ngenerations - 1)[initial_long, final_long] no_mutation_posterior = (no_mutation_prior * p_b_given_a_no_mutation) / p_b_given_a # get an answer using the more efficient methods P_sr_s = get_selection_recombination_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, recombination, nchromosomes, npositions) P_m_s = get_mutation_transition_matrix_s(ci_to_short, short_to_count, sorted_chrom_lists, mutation, nchromosomes, npositions) p_b_given_a_s = linalg.matrix_power(np.dot(P_sr_s, P_m_s), ngenerations - 1)[initial_short, final_short] p_b_given_a_no_mutation_s = linalg.matrix_power( P_sr_s, ngenerations - 1)[initial_short, final_short] no_mutation_posterior_s = (no_mutation_prior * p_b_given_a_no_mutation_s) / p_b_given_a_s # self.assertTrue( np.allclose(no_mutation_posterior, no_mutation_posterior_s))
def get_response_content(fs): initial_state = multiline_state_to_ndarray(fs.initial_state) final_state = multiline_state_to_ndarray(fs.final_state) if initial_state.shape != final_state.shape: raise ValueError( 'initial and final states do not have the same dimensions') nchromosomes, npositions = initial_state.shape ndimcap = 12 if nchromosomes * npositions > ndimcap: raise ValueError('at most 2^%d states are allowed per generation' % ndimcap) # mutation = 0.5 * fs.mutation_param recombination = 0.5 * fs.recombination_param selection = fs.selection_param # out = StringIO() print >> out, 'number of chromosomes:' print >> out, nchromosomes print >> out print >> out, 'number of positions per chromosome:' print >> out, npositions print >> out # define the transition matrix results = pgmfancy.get_state_space_info(nchromosomes, npositions) ci_to_short, short_to_count, sorted_chrom_lists = results initial_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in initial_state), npositions) initial_short = ci_to_short[initial_ci] final_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in final_state), npositions) final_short = ci_to_short[final_ci] P_sr_s = pgmfancy.get_selection_recombination_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, recombination, nchromosomes, npositions) P_m_s = pgmfancy.get_mutation_transition_matrix_s(ci_to_short, short_to_count, sorted_chrom_lists, mutation, nchromosomes, npositions) P = np.dot(P_sr_s, P_m_s) # sample the endpoint conditioned path path = PathSampler.sample_endpoint_conditioned_path( initial_short, final_short, fs.ngenerations, P) print >> out, 'sampled endpoint conditioned path, including endpoints:' print >> out # print the initial state without shuffling of individuals print >> out, ndarray_to_multiline_state(initial_state) print >> out # print the intermediate states with randomly permuted individuals for short_index in path[1:-1]: chroms = sorted_chrom_lists[short_index] random.shuffle(chroms) K = np.array([popgenmarkov.int_to_bin(x, npositions) for x in chroms]) print >> out, ndarray_to_multiline_state(K) print >> out # print the final state without shuffling of individuals print >> out, ndarray_to_multiline_state(final_state) print >> out return out.getvalue()
def get_response_content(fs): initial_state = multiline_state_to_ndarray(fs.initial_state) final_state = multiline_state_to_ndarray(fs.final_state) if initial_state.shape != final_state.shape: raise ValueError( 'initial and final states do not have the same dimensions') nchromosomes, npositions = initial_state.shape if nchromosomes < 2: raise ValueError( 'please use a population of more than one chromosome') if npositions < 2: raise ValueError( 'please use chromosomes longer than one position') ndimcap = 12 if nchromosomes * npositions > ndimcap: raise ValueError( 'at most 2^%d states are allowed per generation' % ndimcap) # results = pgmfancy.get_state_space_info(nchromosomes, npositions) ci_to_short, short_to_count, sorted_chrom_lists = results initial_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in initial_state), npositions) initial_short = ci_to_short[initial_ci] final_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in final_state), npositions) final_short = ci_to_short[final_ci] # mutation = fs.mutation_param recombination = fs.recombination_param selection = fs.selection_param # define the prior probabilities of properties of the history nsiteboundaries = npositions - 1 ngenboundaries = fs.ngenerations - 1 no_mutation_prior = (1 - mutation)**( npositions*ngenboundaries*nchromosomes) no_recombination_prior = (1 - recombination)**( nsiteboundaries*ngenboundaries*nchromosomes) # get the transition matrices P_sr_s = pgmfancy.get_selection_recombination_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, recombination, nchromosomes, npositions) P_s_s = pgmfancy.get_selection_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, nchromosomes, npositions) P_m_s = pgmfancy.get_mutation_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, mutation, nchromosomes, npositions) # define some conditional probabilities p_b_given_a_s = linalg.matrix_power( np.dot(P_sr_s, P_m_s), fs.ngenerations-1)[ initial_short, final_short] p_b_given_a_no_mutation_s = linalg.matrix_power( P_sr_s, fs.ngenerations-1)[ initial_short, final_short] p_b_given_a_no_recombination_s = linalg.matrix_power( np.dot(P_s_s, P_m_s), fs.ngenerations-1)[ initial_short, final_short] # define the conditional properties of properties of the history no_mutation_posterior = ( no_mutation_prior * p_b_given_a_no_mutation_s) / ( p_b_given_a_s) no_recombination_posterior = ( no_recombination_prior * p_b_given_a_no_recombination_s) / ( p_b_given_a_s) # out = StringIO() print >> out, 'probability of no mutation in the path history:' print >> out, 'unconditional: %s' % no_mutation_prior print >> out, 'endpoint-conditioned: %s' % no_mutation_posterior print >> out print >> out, 'probability of no recombination in the path history:' print >> out, 'unconditional: %s' % no_recombination_prior print >> out, 'endpoint-conditioned: %s' % no_recombination_posterior print >> out return out.getvalue()
def get_response_content(fs): initial_state = multiline_state_to_ndarray(fs.initial_state) final_state = multiline_state_to_ndarray(fs.final_state) if initial_state.shape != final_state.shape: raise ValueError( 'initial and final states do not have the same dimensions') nchromosomes, npositions = initial_state.shape ndimcap = 12 if nchromosomes * npositions > ndimcap: raise ValueError( 'at most 2^%d states are allowed per generation' % ndimcap) # mutation = 0.5 * fs.mutation_param recombination = 0.5 * fs.recombination_param selection = fs.selection_param # out = StringIO() print >> out, 'number of chromosomes:' print >> out, nchromosomes print >> out print >> out, 'number of positions per chromosome:' print >> out, npositions print >> out # define the transition matrix results = pgmfancy.get_state_space_info(nchromosomes, npositions) ci_to_short, short_to_count, sorted_chrom_lists = results initial_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in initial_state), npositions) initial_short = ci_to_short[initial_ci] final_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in final_state), npositions) final_short = ci_to_short[final_ci] P_sr_s = pgmfancy.get_selection_recombination_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, recombination, nchromosomes, npositions) P_m_s = pgmfancy.get_mutation_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, mutation, nchromosomes, npositions) P = np.dot(P_sr_s, P_m_s) # sample the endpoint conditioned path path = PathSampler.sample_endpoint_conditioned_path( initial_short, final_short, fs.ngenerations, P) print >> out, 'sampled endpoint conditioned path, including endpoints:' print >> out # print the initial state without shuffling of individuals print >> out, ndarray_to_multiline_state(initial_state) print >> out # print the intermediate states with randomly permuted individuals for short_index in path[1:-1]: chroms = sorted_chrom_lists[short_index] random.shuffle(chroms) K = np.array([popgenmarkov.int_to_bin(x, npositions) for x in chroms]) print >> out, ndarray_to_multiline_state(K) print >> out # print the final state without shuffling of individuals print >> out, ndarray_to_multiline_state(final_state) print >> out return out.getvalue()
def get_response_content(fs): initial_state = multiline_state_to_ndarray(fs.initial_state) final_state = multiline_state_to_ndarray(fs.final_state) if initial_state.shape != final_state.shape: raise ValueError( 'initial and final states do not have the same dimensions') nchromosomes, npositions = initial_state.shape if nchromosomes < 2: raise ValueError('please use a population of more than one chromosome') if npositions < 2: raise ValueError('please use chromosomes longer than one position') ndimcap = 12 if nchromosomes * npositions > ndimcap: raise ValueError('at most 2^%d states are allowed per generation' % ndimcap) # results = pgmfancy.get_state_space_info(nchromosomes, npositions) ci_to_short, short_to_count, sorted_chrom_lists = results initial_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in initial_state), npositions) initial_short = ci_to_short[initial_ci] final_ci = pgmfancy.chroms_to_index( sorted(popgenmarkov.bin_to_int(row) for row in final_state), npositions) final_short = ci_to_short[final_ci] # mutation = fs.mutation_param recombination = fs.recombination_param selection = fs.selection_param # define the prior probabilities of properties of the history nsiteboundaries = npositions - 1 ngenboundaries = fs.ngenerations - 1 no_mutation_prior = (1 - mutation)**(npositions * ngenboundaries * nchromosomes) no_recombination_prior = (1 - recombination)**(nsiteboundaries * ngenboundaries * nchromosomes) # get the transition matrices P_sr_s = pgmfancy.get_selection_recombination_transition_matrix_s( ci_to_short, short_to_count, sorted_chrom_lists, selection, recombination, nchromosomes, npositions) P_s_s = pgmfancy.get_selection_transition_matrix_s(ci_to_short, short_to_count, sorted_chrom_lists, selection, nchromosomes, npositions) P_m_s = pgmfancy.get_mutation_transition_matrix_s(ci_to_short, short_to_count, sorted_chrom_lists, mutation, nchromosomes, npositions) # define some conditional probabilities p_b_given_a_s = linalg.matrix_power(np.dot(P_sr_s, P_m_s), fs.ngenerations - 1)[initial_short, final_short] p_b_given_a_no_mutation_s = linalg.matrix_power( P_sr_s, fs.ngenerations - 1)[initial_short, final_short] p_b_given_a_no_recombination_s = linalg.matrix_power( np.dot(P_s_s, P_m_s), fs.ngenerations - 1)[initial_short, final_short] # define the conditional properties of properties of the history no_mutation_posterior = (no_mutation_prior * p_b_given_a_no_mutation_s) / (p_b_given_a_s) no_recombination_posterior = (no_recombination_prior * p_b_given_a_no_recombination_s) / ( p_b_given_a_s) # out = StringIO() print >> out, 'probability of no mutation in the path history:' print >> out, 'unconditional: %s' % no_mutation_prior print >> out, 'endpoint-conditioned: %s' % no_mutation_posterior print >> out print >> out, 'probability of no recombination in the path history:' print >> out, 'unconditional: %s' % no_recombination_prior print >> out, 'endpoint-conditioned: %s' % no_recombination_posterior print >> out return out.getvalue()