Archive de la catégorie «repartition aleatoire»

26 mars 2008 – répartition aleatoire de sage sur le génome

mars 26, 2008

17h18 :
Je veux savoir si une répartition des sage aléatoire sur le génome produirait les memes résultats en terme de segments.
l’idée est de répartir sur les 24 million de position possible les 267000 tags de façon aleatoire, puis de rechercher les segments de la meme manière qu’avec les vraies données et ensuite de regarder la tailles des segments produites.
1- je pars des valeurs suivante
genome : 24 313 356 bases
tag, après filtration (juste tag unique et correct) 267023 tag
2- dans matlab je fait une répartition random de ces tags.
pour cela je genere 267023 valeurs aléatoire que je multiplie par la taille du génome
j’ai alors 267023 valeurs comprise entre 0 et 24313356

rand_tag=zeros(267023,1);for i=1:267023rand_tag(i,1)=gen*rand();end

on reparti dans une matrice de la taille du genome ces différents tag

g=zeros(24313356,1);for i=1:267023g(ceil(rand_tag(i,1)))=g(ceil(rand_tag(i,1))) + 1;end

je fait appelle ensuite à la fonction region_hit

cpt = region_hit(g, 1,1,1,1);

je recupère en sortie une matrice
–> cette méthode n’est pas la bonne car je vais etudier la répartition des segments sur une ditribution aléatoire. hors ce n’est pas exactement ce que je veux montrer.
je veux finalement montrer que c’est la distrivution des sage (ou le tirage) qui est ou pas aléatoire.
je suis parti sur l’idée d’un tirage aléatoire.
je ne le fait que sur les tag des manip 1 et 2.
ca en fait 77000
je fait un randperm sur une matrice de la taille du génome et je sélection les 77000 premie résultats.
ce seront les 77000 position aléatoire de mes tag

>> taille_gen=24313356;>> gen=[1:taille_gen];>> x=randperm(taille_gen);>> rand_tag_12=gen(x(1:77212));>> rand_tag_12=sort(rand_tag_12');>> dist_rand_tag12=diff(rand_tag_12);>> hist(dist_rand_tag12,100)

et je récupère en sortie

je fait la meme chose sur les tag des manip 1 & 2
j’utilise le fichier matlab ~/total/stats/tag_tot_genome.mat

n12 = sum(header01) + sum(header02);tag12=zeros(n12,1);j=1;for i=1:size(header01,1)t=header01(i,1);if (t>0)  for k=1:t     tag12(j,1)=i;     j=j+1;  endendendfor i=1:size(header02,1)t=header02(i,1);if (t>0)  for k=1:t     tag12(j,1)=i;     j=j+1;  endendendtag12=sort(tag12);dist_tag12=diff(tag12);hist(dist_tag12(find(dist_tag12<3500)),100)

et je récupère

on voit bien que les distributions sont différentes mais il faudrait une valeur numérique pour le prouver.
on a pour la distribution des tag 1 et 2 :

>>mean(dist_tag12)ans =306.8112>> median(dist_tag12)ans =0>> std(dist_tag12)ans =1.4071e+03

et pour la dsitribution aléatoire

>> mean(dist_rand_tag12)ans =314.8891>> median(dist_rand_tag12)ans =218>> std(dist_rand_tag12)ans =316.0702

on voit bien que la mediane est très différente.
mais ce n’est peut-etre pas un critère suffisant
le test du chi2 permet de voir si une distribution est aléatoire ou non
prennons la taille du génome totale -> 24313356
prennons le nb de tag 1 et 2 -> 77212
s’il sont répartis de façon homgène sur le génome ca fait 1 tag tout les 314 nucleotide environ.
imaginons qu’il soient réparti selon une distribution normal centrée autour de cette distance moyenne.

>> g2=randn(77212,1);>> g2=g2+abs(min(g2));>> mean(g2)ans =4.3959>> coeff = 314/4.3954coeff =71.4383>> g2=g2*coeff;>> hist(g2,100)>> [h,p]=chi2gof(g2)h =0p =0.7848

la distribution de ces distances est la suivante


avec une p-value sur le test de chi2 de 0.7848,
donc une proba très forte que cette distribution soit aléatoire.
Si je représente la distribution des distance entre tag des manip 1 et 2
(voir au-dessus), on voit que celle-ci est centrée sur 0, donc la plupart
des tag sont très proches entre eux

le test du chi2 sur cette distribution donne :

>> [h,p]=chi2gof(dist_tag12, 'nbins',32)h =1p =0

une p-value de 0, soit une proba nulle que ce soit une distribution aléatoire.
on calcule pour la distrib aléatoire

>> median(g2)ans =  314.8353>> mean(g2)ans =  314.8909>> std(g2)ans =   71.6086

et pour les manip

>>mean(dist_tag12)ans =306.8112>> median(dist_tag12)ans =0>> std(dist_tag12)ans =1.4071e+03

je fais ensuite la meme chose pour les tag des manip 7 et 8

n78 = sum(header07) + sum(header08);tag78=zeros(n78,1);j=1;for i=1:size(header07,1) t=header07(i,1); if (t>0)     for k=1:t         tag78(j,1)=i;         j=j+1;     end endendfor i=1:size(header08,1) t=header08(i,1); if (t>0)     for k=1:t         tag78(j,1)=i;         j=j+1;     end endendtag78=sort(tag78);dist_tag78=diff(tag78);

puis je fais une distribution aléatoire de tag équivalente

g=randn(69549,1);>> g=g+abs(min(g));>> mean(g)ans = 4.3684>> 24313356/69549ans =349.5860>> coeff = 349/4.3684coeff =79.8920>> g=g*coeff;>> hist(g,100)

j’obtiens pour la distribution aléatoire

>> [h,p]=chi2gof(g)h =   0p =  0.7109

soit une proba de 0.7 que ce soit une distrib aléatoire
avec la distrib suivante

et pour les tag

>> [h,p]=chi2gof(dist_tag78, 'nbins',25)h =   1p =   0

soit une proba nulle que ce soit aléatoire
avec la distrib suivante

pour cette distribution on a

>> mean(dist_tag78)ans =  348.9803>> median(dist_tag78)ans =     0>> std(dist_tag78)ans =   1.5912e+03

et pour la distrib aléatoire

>> median(g)ans =  348.9698>> mean(g)ans =  348.9981>> std(g)ans =   80.0903

les images sont dans ~/Desktop/screenshot/tags