====== Ana Claudia Mancusi Valeije ====== {{:bie5782:01_curso_atual:alunos:trabalho_final:ana.valeije:dsc07848.jpg?200|}} Bacharel em Ciências Moleculares pela Universidade de São Paulo e mestranda em Bioinformática, também pela Universidade de São Paulo. Desenvolve pesquisa na área de predição de sítios de ligação de fatores de transcrição, utilizando como modelo alguns receptores nucleares (COUP-TF e ER). A pesquisa tem por objetivo desenvolver um método computacional capaz de analisar a probabilidade de uma sequência de DNA ser um sítio de ligação de um determinado fator de transcrição através do estudo de variáveis como energia de ligação do complexo DNA-fator de transcrição. Orientador: Paulo Sergio Lopes de Olievira, LNBio (Campinas -SP). ====== Meus Exercícios ====== Linque para [[.:Exercícios da Ana]] ====== Propostas de Trabalho Final ====== ===== Plano A ===== Uma função que varre uma sequência de caracteres (ou números) com uma janela de tamanho especificado e atribui a cada subsequência lida um valor. Este valor pode ser calculado através de uma função já existente no R ou através de um dataframe passado para a função, que atribua valores a todas as sequências possíveis com o tamanho da janela. Os argumentos da função seriam: um vetor com a sequência, um número com o tamanho da janela, um número com o tamanho do passo da leitura, um booleano dizendo se deve plotar ou não o vetor de resultados, um dataframe com a relação sequência-valor, uma função a ser aplicada na janela. A função deve receber todos os parâmetros, com exceção do dataframe e da função a ser aplicada: a função deve receber apenas um destes. Ela retorna um vetor com os resultados. Exemplos de aplicação: -> Em gráficos que apresentam muito ruído, como os de simulação computacional de moléculas, é interessante calcular a média dos pontos dentro de uma janela, o que diminui o ruído e facilita encontrar padrões nos dados. -> Com um dataframe que relacione códons e anti-códons ou códons e aminoácidos, seria possível por exemplo transcrever uma sequência de DNA ou traduzir uma de RNA. -> No caso do meu projeto, tenho um arquivo que relaciona cada sequência de DNA possível com 6 pares de base (46 = 4096 sequências) a uma energia (energia de ligação entre um fator de transcrição específico e aquela sequência de DNA). Seria possível passar uma sequência grande de DNA para essa função, junto deste arquivo de energias, para varrer a sequência em janelas de 6 nucleotídeos e criar um gráfico com o resultado. Este gráfico pode revelar padrões para sítios de ligação deste fator de transcrição. ===== Plano B ===== Fazer a mesma função acima, mas que só receba o dataframe de comparação, e não uma função a ser aplicada nas sequências varridas. ===== Comentários ===== Minha dica é começar com o plano e B e expandir caso haja tempo. Parece que a implementação não é tão simples, mas imagino que já tenha experiencia com programação já que vem da Moleculares. Pelo que entendi vc. no exemplo do seu trabalho terá uma janela de 6 pares de base... e cada uma deve ser relacionada a 4096. Imagino que queira fazer todas as possibilidades de janelas de 6, o que e o mesmo que quebrar de seis em seis todas a sequencia e depois, pular a primeira base e fazer o mesmo.. até a quinta! Essa quebra pode ser feita pelas funções de separar strings de caracteres como o substring(), em seguida pode usar match() para associar a sequencia observada com as sequencias do objeto onde há o valor da ligação... --- //[[adalardo@usp.br|Alexandre Adalardo de Oliveira]] 2012/04/03 15:28// ===== Página de Ajuda ===== scan.seq package:none R Documentation Varre uma sequência de caracteres ou números, atribuindo valores às janelas de leitura Descrição: Varre uma sequência de caracteres ou um vetor de números utilizando uma janela de leitura e um passo de varredura dados. Atribue valores às janelas a partir de um dataframe ou de uma função fornecidos. Uso: scan.seq(sequence, scores = NA, FUN = NA, step = 1, window = 1) Argumentos: sequence: Um vetor de caracteres ou de números scores: Um data frame atribuindo valores (de quaisquer tipos) às subsequências de sequence de tamanho window. Utilizado apenas quando "sequence" é um vetor de caracteres. Ou "scores" ou "FUN" deve ser fornecido. FUN: A função a ser aplicada às janelas. Pode ser usada tanto para vetores de caracteres quanto para vetores de números. Ou "scores" ou "FUN" deve ser fornecido. step: O passo (inteiro) com o qual a janela será movida na varredura da sequência. window: O tamanho da janela (inteiro) usada para varrer a sequência. ...: quaisquer argumentos a repassar para a função FUN Valor: Se "sequence" é um vetor de caracteres, retorna um data frame de duas variáveis: as janelas lidas e seus respectivos valores, calculados a partir de "scores" ou de "FUN". Se "sequence" é um vetor de números, retorna um vetor de números com os resultados das varreduras. Autor(es): Ana Claudia Mancusi Valeije ana.valeije@gmail.com Ver também: "sweep" Exemplos: # Tradução de uma sequência de mRNA nos 3 frames de leitura: sequencia.mrna = "AAUGGUAGCAAUCGAUCGUUGACU" # Sequência de mRNA com 24 bases bases = c("A", "C", "G", "U") codons = paste(rep(bases,each=4*length(bases)), rep(bases, each = length(bases)),bases,sep="") aminoacidos = c("K", "N", "K", "N", rep("T", 4), "R", "S", "R", "S", "I", "I", "M", "I", "Q", "H", "Q", "H", rep("P", 4), rep("R", 4), rep("L", 4), "E", "D", "E", "D", rep("A", 4), rep("G", 4), rep("V", 4), "Z", "Y", "Z", "Y", rep("S", 4), "Z", "C", "W", "C", "L", "F", "L", "F") tabela = data.frame(codons, aminoacidos, stringsAsFactors = FALSE) colnames(tabela) = c("codons", "aminoacidos") frame1 = scan.seq(sequencia.mrna, scores = tabela, step = 3, window = 3) frame1 frame2 = scan.seq(substr(sequencia.mrna, 2, 24), scores = tabela, step = 3, window = 3) frame2 frame3 = scan.seq(substr(sequencia.mrna, 3, 24), scores = tabela, step = 3, window = 3) frame3 # Retirada de ruído dados = 100:199 dados = jitter(dados, 50) # adicionando ruído par(mfrow = c(1,2)) plot(dados) dados.scan = scan.seq(dados, FUN=mean, step = 1, window = 10) plot(dados.scan) ===== Código da Função ===== scan.seq = function(sequence, scores = NA, FUN = NA, step = 1, window = 1, ...) { if (class(scores) == "logical" & class(FUN) == "logical") { stop("scores or FUN must be given") } if (class(sequence) == "character") { scan = vector() values = vector() len = 0 len.seq = nchar(sequence) for (i in seq(1, len.seq - (window - 1), step)) { len = len + 1 scan[len] = substr(sequence, i, i + window - 1) } len = 0 if (class(scores) == "logical") { for (i in 1:length(scan)) { len = len + 1 values[len] = FUN(scan[i], ...) } results = data.frame(scan, values) } else { for (i in 1:length(scan)) { len = len + 1 values[len] = scores[scores[,1] == scan[i], 2] } results = data.frame(scan, values) colnames(results) = colnames(scores) } return(results) } else if (class(sequence) == "numeric" | class(sequence) == "integer") { len.seq = length(sequence) scan = list() values = vector() len = 0 for (i in seq(1, len.seq - (window - 1), step)) { len = len + 1 scan[[len]] = sequence[i:(i + window - 1)] } len = 0 if (class(scores) == "logical") { for (i in 1:length(scan)) { len = len + 1 values[len] = FUN(scan[[i]], ...) } } return(values) } } ===== Arquivo da Função ===== {{:bie5782:01_curso_atual:alunos:trabalho_final:ana.valeije:scan.seq.r| scan.seq.r}}