示例#1
0
def runEmma(phed, p_i, k, snps):
    # Assume that the accessions are ordered.
    i = phed.getPhenIndex(p_i)
    r.library("emma")
    phenValues = []
    for vals in phed.phenotypeValues:
        phenValues.append(float(vals[i]))
    phenArray = array([phenValues])
    snpsArray = array(snps)
    res = r.emma_REML_t(phenArray, snpsArray, k)
    # print res
    return res
示例#2
0
def runEmma(phed, p_i, k, snps):
    #Assume that the accessions are ordered.
    i = phed.getPhenIndex(p_i)
    #r.library("emma")
    r.source("emma.R")
    phenValues = []
    for vals in phed.phenotypeValues:
        phenValues.append(float(vals[i]))
    phenArray = array([phenValues])
    snpsArray = array(snps)
    res = r.emma_REML_t(phenArray, snpsArray, k)
    #print res
    return res
示例#3
0
def run_emma_w_missing_data(snpsd, phed, p_i, chromosome, k, missing_val='NA'):
    """
	Runs Emma w. missing data.
	"""
    #Assume that the accessions are ordered.
    snps = snpsd.snps
    r.source("emma.R")
    phen_vals = phed.getPhenVals(p_i, noNAs=False)
    if phen_vals.count('NA'):
        print "Coordinating SNPs and phenotypes, removing %d accessions which were missing phenotypic values." % phen_vals.count(
            'NA')
        ai_to_keep = [i for i in range(len(phen_vals)) if phen_vals[i] != 'NA']
        #print ai_to_keep
        new_snps = []
        for snp in snps:
            new_snps.append([snp[i] for i in ai_to_keep])
        snps = new_snps
        #print snps[0]
        phen_vals = [phen_vals[i] for i in ai_to_keep]
        #print phen_vals
        new_k = zeros((len(ai_to_keep), len(ai_to_keep)))
        for j1 in range(len(ai_to_keep)):
            for j2 in range(len(ai_to_keep)):
                new_k[j1, j2] = k[ai_to_keep[j1], ai_to_keep[j2]]
        k = new_k

    p_vals = []
    for snp in snps:

        if snp.count(missing_val):
            acc_to_keep = []
            new_snp = []
            for j, nt in enumerate(snp):
                if not nt == missing_val:
                    acc_to_keep.append(j)
                    new_snp.append(nt)
            new_k = zeros((len(acc_to_keep), len(acc_to_keep)))
            new_phen_vals = []
            for j1 in range(len(acc_to_keep)):
                for j2 in range(len(acc_to_keep)):
                    new_k[j1, j2] = k[acc_to_keep[j1], acc_to_keep[j2]]
                new_phen_vals.append(phen_vals[acc_to_keep[j1]])

            if len(set(snp)) == 1:
                p_vals.append(1)
                print phenArray
                print snpsArray
                print new_k
            else:
                phenArray = array([new_phen_vals])
                snpsArray = array([new_snp])
                #print "Running EMMA w. missing data."
                try:
                    p_vals.extend(
                        r.emma_REML_t(phenArray, snpsArray, new_k)['ps'])
                except Exception, err_str:
                    print err_str
                    print phenArray
                    print snpsArray
                    print new_k

        else:
            phenArray = array([phen_vals])
            snpsArray = array([snp])
            #print "Running EMMA w.o. missing data."
            try:
                p_vals.extend(r.emma_REML_t(phenArray, snpsArray, k)['ps'])
            except Exception, err_str:
                print err_str
                print phenArray
                print snpsArray
                print k
示例#4
0
def _runEmma_(snps, phenValues, k):
    phenArray = array([phenValues])
    snpsArray = array(snps)
    res = r.emma_REML_t(phenArray, snpsArray, k)
    #print res
    return res
示例#5
0
def _runEmma_(snps,phenValues,k):
	phenArray = array([phenValues])
	snpsArray = array(snps)
	res = r.emma_REML_t(phenArray,snpsArray,k)
	#print res
	return res