La semaine dernière le choix de la solution (pednode.idx) c’est avéré mauvais. La solution a implémenter est: l’utilisation d’un Dictionnaire ‘indiv’->‘index’ présent dans le Pedigree
Classe Family est un objet itératif qui permet d’obtenir efficacement chaque enfants d’un couple donné.
les objets familles sont stocker dans un tenseur dont la premiere dimension correspond a: id mâle, id femelle, idx family.
⚠️ suite aux modifications fam.parents_id renvoie des ‘str’ et pas des ‘int’.
Cette fonction n’a pas encore été implémenter, mais elle permatrais un gain d’efficacitée.
def update_conditional_probabilities(self):
self.d.pi_Pfj_minusfam[..., self.d.ind_to_fam[..., 2]] = (
self.d.pi_Pij[..., self.d.ind_to_fam[:, MALE]]
- self.d.Pij[..., self.d.ind_to_fam[..., 2], MALE]
)
self.pi_Pmj_minusfam[..., self.d.ind_to_fam[..., 2]] = (
self.d.pi_Pij[..., self.d.ind_to_fam[:, FEMALE]]
- self.d.Pij[..., self.d.ind_to_fam[..., 2], FEMALE]
)When one parent is “0” in fam -> set to None, cannot impute in peeling.
@classmethod
def from_fam_file(cls,path,parent_from_FID=False,
default_parent=MALE,UnknownParentPrefix="peel_unk_",):
[...]
if (fa is None) ^ (mo is None): # <- xor
# If only one parents is missing then we create it
c += 1
if fa is None:
fa = UnknownParentPrefix + "fa_" + str(c)
else:
mo = UnknownParentPrefix + "mo_" + str(c)
relations.append((ind, fa, mo))Pour tester si les indexes sont bien attribuer on charge des fichier de génotypages avec des lignes mélangées, et on les charges a partir du meme pédigrée.
L’ordre des deux génotypage doivent etre identique car basé sur les indexes du Pedigree.
geno_ctrl = pl.LoadGenotypes(genfile,ped,',')
geno_shuff = pl.LoadGenotypes(genfile_shuffled,ped,',')
test = np.array(geno_ctrl == geno_shuff)
if np.prod(test) != 0:
#si les deux lectures matches ( en booléen * = And , + = Or)
print ("test de chargement de génotype: validé")
else:
print ("test de chargement de génotype: échec ")ip = pl.buildIterativePeeling(pedfile,genfile) # création de l'objet
founderList = [i.indiv for i in ped.founders]
founderIDX_List = [ped.idx_dict[i] for i in founderList]
antdeb = ip.d.anterior
antFoundersDEB = [antdeb[:,:,i] for i in founderIDX_List]
ip.RunPeeling()
test = np.array(antFoundersDEB == ip.d.pop_freq)
if np.prod(test) != 0:
print ("test de founders's anterior: échec")
else:
print ("test de founders's anterior: validé")On a un génotype mal imputer pour un locus, si on regarde plus précisément le likelyhood générer pour ce dernier locus on a alors:
le bon génotype est 2 mais le génotype le plus probable est 1
Un bug a été identifier quand on lance le peeling: les valeurs des anteriors des fondateurs ne sont jamais mises a jours. Aussi les fréquence allélique dans la population ne sont calculer qu’une fois au début du Peeling.
La création de l’issue 10 a refait émerger la question de la création d’une blacklist. Cette blacklist d’individus a ne pas mettre a jours permet de ne pas calculer de likelyhood de certains individus dont l’imputation est impossible faute d’information.
Les individus a blacklister serait:
Point hébdomadaire du stage.

Pied de page