User Tools

Site Tools


genetica:preproc_models

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
genetica:preproc_models [2013/05/16 12:18]
osotolongo [Calculando los odds ratio y demas]
genetica:preproc_models [2020/08/04 10:58] (current)
Line 6: Line 6:
  
 <code> <code>
-plink plink --bfile archivo --model --allow-no-sex --out archivo+$ plink --bfile archivo --model --allow-no-sex --out archivo
 </code> </code>
  
Line 57: Line 57:
  
 my $ofile = $plist; my $ofile = $plist;
-$ofile =~ s/(.*)\.(.*)/$1\.$model\.recalc\.$2/; +$ofile =~ s/(.*)\.(.*)/$1\.$model\.recalc2\.$2/; 
- +# cambiar a clustering con (?:PATTERN) 
-my %input_data = reverse map {/^(.*\s+(rs\d+)\s+.*)$/} grep {/^(.*\s+$model\s+.*)$/} read_file $plist; +my %input_data = reverse map {/^(\s*\d+\s+(\S+)\s+[A,T,C,G]+\s+[A,T,C,G]+\s+$model\s+.*)$/} grep {/^(.*\s+$model\s+.*)$/} read_file $plist; 
-my %bim_data = map {/^\d+\s+(rs\d+)\s+\d+\.*\d*\s+(\d+)\s+[A,T,C,G]+\s+[A,T,C,G]+\s*$/} grep {/.*rs\d+.*/} read_file $bimfile;+my %bim_data = map {/^\d+\s+(.*)\s+\d+\.*\d*\s+(\d+)\s+[A,T,C,G]+\s+[A,T,C,G]+\s*$/} read_file $bimfile;
 my %cells; my %cells;
 foreach my $marker (sort keys %input_data){ foreach my $marker (sort keys %input_data){
- (@{$cells{$marker}} {qw/chr allele1 allele2 affa1 affa2 unaffa1 unaffa2 chi2 df pval0/}) = $input_data{$marker} =~ /^\s*(\d+)\s+rs\d+\s+([A,T,C,G])+\s+([A,T,C,G])+\s+$model\s+(\d+)\/(\d+)\s+(\d+)\/(\d+)\s+(\d+\.*\d*e*-*\d*|NA)\s+(\d+\.*\d*e*-*\d*|NA)\s+(\d+\.*\d*e*-*\d*|NA)\s*$/;+ (@{$cells{$marker}} {qw/chr allele1 allele2 affa1 affa2 unaffa1 unaffa2 chi2 df pval0/}) = $input_data{$marker} =~ /^\s*(\d+)\s+$marker\s+([A,T,C,G])+\s+([A,T,C,G])+\s+$model\s+(\d+)\/(\d+)\s+(\d+)\/(\d+)\s+(\d+\.*\d*e*-*\d*|NA)\s+(\d+\.*\d*e*-*\d*|NA)\s+(\d+\.*\d*e*-*\d*|NA)\s*$/;
  if(exists($cells{$marker}{affa1}) && exists($cells{$marker}{affa2}) && exists($cells{$marker}{unaffa1}) && exists($cells{$marker}{unaffa2})){  if(exists($cells{$marker}{affa1}) && exists($cells{$marker}{affa2}) && exists($cells{$marker}{unaffa1}) && exists($cells{$marker}{unaffa2})){
  my $affa1 = $cells{$marker}{affa1};  my $affa1 = $cells{$marker}{affa1};
Line 89: Line 89:
  
 foreach my $marker (sort {($cells{$a}->{chr} <=> $cells{$b}->{chr}) or ($a cmp $b)} keys %input_data){ foreach my $marker (sort {($cells{$a}->{chr} <=> $cells{$b}->{chr}) or ($a cmp $b)} keys %input_data){
- print ODF "$cells{$marker}{chr}\t$marker\t$bim_data{$marker}\t$cells{$marker}{allele1}\t$cells{$marker}{allele2}\t$cells{$marker}{afreq}\t$cells{$marker}{ufreq}\t$cells{$marker}{chi2}\t$cells{$marker}{df}\t$cells{$marker}{pval0}\t$cells{$marker}{oddsratio}\t$cells{$marker}{stderr}\t$cells{$marker}{pvalue}\n";+ if(exists($bim_data{$marker})){ 
 + print ODF "$cells{$marker}{chr}\t$marker\t$bim_data{$marker}\t$cells{$marker}{allele1}\t$cells{$marker}{allele2}\t$cells{$marker}{afreq}\t$cells{$marker}{ufreq}\t$cells{$marker}{chi2}\t$cells{$marker}{df}\t$cells{$marker}{pval0}\t$cells{$marker}{oddsratio}\t$cells{$marker}{stderr}\t$cells{$marker}{pvalue}\n"; 
 + }
 } }
  
Line 122: Line 124:
 $ a=$(ls *DOM*); plink --meta-analysis $a + study --out dominante $ a=$(ls *DOM*); plink --meta-analysis $a + study --out dominante
 </code> </code>
 +
 +Los resultados salen ordenados por cromosoma y SNP. Para ordenar por //p-value// puede hacerse,
 +
 +<code>
 +$ sort -g -k7,7 dominante.meta > dominante.meta.sorted
 +</code>
 +
 +para cortar por un valor especifico de //p-value//,
 +
 +<code>
 +$ awk {'if($7<5e-6 || $7=="P") print'} dominante.meta.sorted > dominante.meta.sorted.cut
 +</code>
 +
 +y si estamos interesados en algun SNP especifico,
 +
 +<code>
 +$ echo "DB `head -n 1 ADNIimpQC2.REC.recalc.model`" > 20p.rec.cool.txt
 +$ for x in *REC*; do echo "${x%.REC.recalc.model} `grep -w "rs714235" $x`" >> 20p.rec.cool.txt; done
 +</code>
 +
 +====== Alternativa a Fisher: Barnard Test ======
 +
 +Como al blandengue no le gusta el test de Fisher, he buscado como hacer que el script me calcule los test de Barnard. No he encontrado ningun modulo en Perl pero como todo ya esta inventado en esta vida hay un paquete en R que lo calcula. Asi que lo que he hecho es usar el modulo **Statistics::R** para calcular el test en R desde Perl. ;-)
 +
 +Esto es un poco enredado pero se resume en sustituir la llamada al test de Fisher con,
 +
 +<code perl>
 +my $shit = Statistics::R->new();
 +$shit->run(q`library(Barnard)`);
 +$shit->run(qq`barnardw.test($affa1, $affa2, $unaffa1, $unaffa2, verbose=FALSE)->bt`);
 +$shit->run(q`bt["p.value"][[1]][[2]] -> x`);
 +$cells{$marker}{pvalue} = shit->get('x');
 +</code>
 +
 +**OJO:** Esto demora muchisimo. Despues de 5 días de calculo sobre una base de datos y modelo dominate tuve que para la ejecucion. Lo lanzare cuando tenga tiempo y la base de datos a usar este definida.
genetica/preproc_models.1368706695.txt.gz · Last modified: 2020/08/04 10:48 (external edit)