Python - Calcular los coeficientes de Pearson

 
Vista:

Calcular los coeficientes de Pearson

Publicado por Lucía (1 intervención) el 22/04/2023 13:16:28
En el siguiente ejercicio:
La frecuencia de tetranucleotidos en una secuencia de ADN puede emplearse para
construir un indice aproximado de la relacion filogenetica entre dos genomas,
consistente en calcular el coeficiente de correlacion de Pearson de las
frecuencias de los tetranucleotidos correspondientes a dichos genomas.
Dados tres fragmentos de ADN genomicos que se adjuntan en archivos .txt,
se pide escribir un programa en Python 3 que permita realizar
esta comparacion (Se subira a Moodle como nombre_alumno_practica1.txt)
En concreto, se pide:

1) Una funcion que abra un archivo el archivo de texto y devuelva
una cadena con la secuencia completa sin espacios: open_dna(file)
2) Una funcíon que dada una secuencia de ADN devuelva un diccionario
con keys=tetranucleoticos y values=frecuencias de los mismos en la
cadena: count_tetra_freq(dna)
3)En el programa principal debe realizarse el calculo de los coeficientes
de correlacion de Pearson para todas las comparaciones posibles por pares.
4) El programa debe escribir el resultado en un archivo nombre_alumno_out.txt
en el que se indique:
a)los coeficientes de correlacion obtenidos en todas las comparaciones
b)deducir cuales serian los dos genomas mas proximos
5) En un archivo de texto a parte (nombre_alumno_comentatios.txt) se debe
comentar el posible significado biologico de el resultado obtenido
Nota 1: se recomienda emplear los modulos numpy y scipy
Nota 2: por nombre_alumno se entiende: primer_apellido_nombre
Nota 3: se supone que los tetranucleotidos se calculan CON superposicion.

El siguiente código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def open_dna(file):
    mi_archivo=open(file,"r")
    secuencia=mi_archivo.read().rstrip("\n")
    mi_archivo.close()
    return secuencia
 
#Dada una secuencia de ADN, devuelve un diccionario con keys=tetranucleótidos y
#values=frecuencias de los mismos en la cadena
def count_tetra_freq(dna):
    dic_frecuencias = {}
    for base1 in ["A","T","G","C"]:
        for base2 in ["A","T","G","C"]:
            for base3 in ["A","T","G","C"]:
                for base4 in ["A","T","G","C"]:
                    tetranucleotido = base1 + base2 + base3 + base4
                    frecuencia= dna.count(tetranucleotido)
                    dic_frecuencias[tetranucleotido] = frecuencia
    return dic_frecuencias
 
dna_files = ["Ccadaveris.txt", "Dsolani.txt", "Efergusonii.txt"]
genomes = []
 
 
# Abrir los archivos y almacenar la secuencia de ADN en una lista
for file in dna_files:
    dna = open_dna(file)
    genomes.append(dna)
 
# Calcular las frecuencias de tetranucleótidos para cada genoma
tetra_freqs = []
for genome in genomes:
    freqs = count_tetra_freq(genome)
    tetra_freqs.append(freqs)

Es hasta donde he llegado pero no entiendo como puedo calcular los coeficientes de relación de Pearson he intentando con el siguiente código que he encontrado
1
2
3
4
5
6
for i in range(len(tetra_freqs)):
    for j in range(i+1, len(tetra_freqs)):
        freqs1 = list(tetra_freqs[i].values())
        freqs2 = list(tetra_freqs[j].values())
        corr, _ = pearsonr(freqs1, freqs2)
        print(f"Pearson correlation between genome{i+1} and genome{j+1}: {corr}")
Pero no entiendo nada y ademas me sale error.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder