¡¡Hola!! Soy estudiante de ing. biológica, y actualmente curso la asignatura de bioinformática, debía crear una rutina para que dada la secuencia de un péptido el programa me identifique si dicho péptido es o no un péptido antimicrobiano.
La idea general es: Los péptidos antimicrobianos de mi trabajo, son péptidos con características especificas que los diferencian de los demás péptidos. Tienen varios aminoácidos que se conservan en posiciones muy especificas (motivos). Entonces, usando el modelo estadístico de
cadenas ocultas de Márkov, yo le asigno una probabilidad de ocurrencia a cada aminoácido en cada posición de la secuencia.
Dada una secuencia, el programa debe tomarla reconociendo las posiciones, e ir leyendo posición por posición, leer el aminoácido de la secuencia, y compararlo con las probabilidades de que realmente ese aminoácido esté en esa posición (probabilidades tomadas de una matriz (aminoácido X posición), tomar el dato de probabilidad de cada posición y sumarlo, y al final entregar la sumatoria de dichas probabilidades.
Lo anterior debe repetirse para un número X de secuencias que el programa debe leer de un archivo en formato fasta. Luego, usando la suma de cada secuencia, arrojar finalmente como salida, las secuencias cuya probabilidad se encuentre en un intervalo suministrado y así puedo concluir que dichas secuencias son o no un péptido antimicrobiano.
Ya es complicado decirlo en palabras, ¿¿no?? ¡je,je,je!, bueno mis conocimientos son bastante básicos en el tema. Inicialmente la rutina que quería armar, era haciendo un ciclo for() que me leyera cada posición y de acuerdo al aminoácido que encontrara, asignara el valor que requiero tomándolo de una matriz diseñada en Excel u otro formato, pero no tengo idea de cómo implementar la matriz con los valores a asignar
. Luego encontré una rutina ya hecha que ejecuta el proceso de las cadenas ocultas de Márkov, pero aplicado al procesamiento de textos.
Espero, puedan ayudarme a que esa rutina, en vez de identificarme palabras en un texto, me identifique los aminoácidos que quiero.
Llevo más de dos semanas intentando de todo, tratando de hacer la rutina yo mismo, y luego tratando de editar la que encontré, pero nada me funciona
Les agradezco cualquier ayuda o explicación que me puedan brindar Uds. que son bastante conocedores sobre programación.
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
my @words; # words on a line
my %wordlist; # key: prefix, value: anon hash (k: suffix,
# v: frequency)
my $pref_len = shift @ARGV || 2;
my $maxwords = shift @ARGV || 100;
my $entries = 0;
# build word list
#
# 'Blessed is the man that walketh not in the counsel'
# %wordlist = ( 'blessed is' => { 'the' => 1, },
# 'is the' => { 'man' => 1, },
# 'the man' => { 'that'=> 1, },
# );
#
while (<>) {
my $suf;
push @words, split;
while ( @words > $pref_len ) {
# build prefix of $pref_len words
# join(' ', @array) is faster than qq(@array) or "@array"
#
my $pref = join(' ', @words[0..($pref_len-1)]);
# add suffix to list
#
$suf = $words[$pref_len];
$wordlist{$pref}{$suf}++;
shift @words; # next word on this line
$entries++;
}
}
# change frequency count to a percentage
# (with help from pcb, recipe 2.10)
#
foreach my $href ( values %wordlist ) {
foreach ( values %$href ) {
$_ /= $entries;
}
}
# starting point
#
my $pref = (keys %wordlist)[rand keys %wordlist];
print "$pref";
# dump out listings
#
for (0..($maxwords-1)) {
last unless (exists $wordlist{$pref});
my $suf = weighted_suffix();
print ' '. $suf;
print "\n" if ( $_ % 10 == 0);
# skip past first word in prefix
#
$pref =~ s/^[^ ]+ (.+)$/$1 $suf/;
}
exit;
# from pcb (recipe 2.10)
#
sub weighted_suffix {
my ($suf,$weight,$rand);
while (1) {
$rand = rand;
while ( ($suf,$weight) = each %{ $wordlist{$pref} } ) {
return $suf if ($rand -= $weight) < 0;
}
}
}
Coloreado en 0.007 segundos, usando
GeSHi 1.0.8.4