====== Proposta de Trabalho Final ====== ---- ===== Plano A ===== Objetivo: Montar uma função no R que retorne análises básicas de um estudo genético de associação. O estudo genético de associação por caso-controle é uma das abordagens mais utilizadas para testar se uma variante genética está associada à ocorrência de um fenótipo. Nessa abordagem, pacientes e controles são genotipados para polimorfismos (variantes de um mesmo locus gênico comuns na população) de interesse. Frequências estatisticamente diferentes dos polimorfismos entre pacientes e controles indicam que o polimorfismo testado está em uma região do genoma associada com o fenótipo estudado. Plano de execução: a partir de um arquivo de entrada dos dados (arquivo em formato csv, com indivíduos em linhas e genótipos dos polimorfismos em colunas), as funções deverão retornar: a) Frequências alélicas (2 classes esperadas, ex: A, a) de cada polimorfismo. b) Frequências genotípicas (3 classes esperadas, ex: AA, Aa, aa) para cada polimorfismo. c) Construção de histograma com a distribuição das frequências genotípicas observadas. d) Teste qui-quadrado para verificar se a distribuição dos genótipos está de acordo com o equilíbrio de Hardy-Weinberg (a partir das frequências genotípicas obtidas) e) Teste qui-quadrado para diferenças de frequências dos polimorfismos entre casos e controles f) Cálculo de odds ratio para cada polimorfismo (no caso, mede o tamanho do efeito de cada genótipo na determinação do fenótipo) g) Construção de Q-Q plot para representar os resultados do item e para todos os polimorfismos testados. ---- ===== Plano B ===== Outra abordagem bastante utilizada para investigar a relação genótipo-fenótipo é a análise de correlação entre genótipos de um polimorfismo e níveis de expressão gênica (medidos pela quantidade de RNA transcrita pelo gene de interesse). Em outras palavras, investiga-se se variantes de um polimorfismo podem ter relação com níveis maiores ou menores dos produtos dos genes. Proposta: A partir de uma tabela contendo genótipos de diferentes polimorfismos (3 classes de genótipo esperadas para cada polimorfismo, ex: AA, Aa, aa), e níveis de expressão gênica (em unidades relativas) de diferentes genes, montar um função que retorne o coeficiente de correlação de Spearman entre polimorfismos e níveis de expressão gênica. A função deve retornar também um scatter plot com linha de tendência, com níveis de expressão nas ordenadas e classes genotípicas nas abscissas. ---- ===== Comentários ===== ==== PI ==== Me parecem boas propostas, com generalidade e factíveis. Vc teve o cuidado de definir claramente entradas e saídas, que é mesmo o primeiro passo para construir funções, ótimo! Como não sou da área, vou pedir ao nosso monitor Diogo que tb dê uma olhada. ==== Diogo ==== Também achei tranquilo. Se der tempo, pense na eficiencia das contas. é facil fazer isso ai com um monte de for, mas dependendo do tamanho do seu conjunto de dados pode ser sacal. Tente pensar vetorialmente para aumentar a eficiencia da função. O plano B tb é interessante, principalmente se vc pensar em formas de obter matrizes de correlação robustas ao pequeno numero amostral e grande numero de parametros estimados. Veja esse artigo: Schäfer, Juliane, and Korbinian Strimmer. 2005. “A Shrinkage Approach to Large-Scale Covariance Matrix Estimation and Implications for Functional Genomics.” Statistical Applications in Genetics and Molecular Biology 4 (1): 32. ====== Apresentação do Trabalho Final ====== ==Página de ajuda== alleLu package:nenhum R Documentation Teste genético de associação por caso-controle Description: Calcula frequências alélicas e genotípicas, e testa as variantes para equilíbrio de Hardy-Weinberg e associação alélica com as classes dos individuos. Produz um quantile-quantile plot para o teste de associação. Usage: alleLu(x, ...) Arguments: x: input file (.csv) allele.table: data frame produzido a partir do arquivo input. classes.col: número de classes da coluna "disease.status". Default=2 Details: A partir de um input .csv contendo genótipos de n loci para diferentes classes especificadas (ex: pacientes e controles), produz uma tabela contendo frequências alélicas e genotípicas, p-valor para teste de equilíbrio de Hardy-Weinberg e p-valor para teste alélico de associação. Value: É criada uma matriz na worktable detalhando cada parâmetro separadamente para cada combinação de variante analisada e classe disease.status definida. Warning: O arquivo input deve estar em formato csv. Note: A opção "Construção de histograma com a distribuição das frequências genotípicas observadas" foi descontinuada da função, pois mostrou-se sem utilidade alguma para a análise e interpretação dos dados. A função ainda necessita de correção para múltiplos testes (para os testes de associação). Author(s): Luciano Abreu Brito (luciano.brito@usp.br) References: Hatterslet AT, McCarthy MI. What makes a good genetic association study? Lancet. 2005 Oct 8;366(9493):1315-23. Review. Example of input file: project<-read.csv("projteste1.csv", header=TRUE, na.strings="NA", as.is=TRUE, sep=";") alleLu<-project ==Código da função== ###################################### ########## Trabalho final ############ ###################################### #Chamando o arquivo project<-read.csv("projteste1.csv", header=TRUE, na.strings="NA", as.is=TRUE, sep=";") #Explorando alguns dados: head(project) is.na(project[,-c(1:2)]) #para ver se tem NA nos genótipos genotipos=project[,-c(1:2)] #indexando: só ficam as colunas dos genotipos genotipos #############função############# alleLu<-function(allele.table, classes.col=2) { { genotypes.freq<-NULL classes<-levels(as.factor(allele.table[,classes.col])) for (j in 1:length(classes)){ allele.subset=allele.table[allele.table[,classes.col]==classes[j],] tab.freqs<-NULL for(i in 3:length(allele.subset)){ freq.abs<-table(allele.subset[,i]) freq.rel<-freq.abs/sum(freq.abs) tab.freqs<-rbind(tab.freqs,c(freq.abs,freq.rel)) } rownames(tab.freqs)<-paste(classes[j],colnames(allele.table[,3:length(allele.table)]),sep=".") genotypes.freq<-rbind(genotypes.freq,tab.freqs) } freqs<-cbind(genotypes.freq,genotypes.freq[,4]+genotypes.freq[,5]/2,genotypes.freq[,6]+genotypes.freq[,5]/2) colnames(freqs)[1:3]<-paste("Abs",colnames(freqs)[1:3],sep=".") colnames(freqs)[4:6]<-paste("Rel",colnames(freqs)[4:6],sep=".") colnames(freqs)[7:8]<-c(1,2) colnames(freqs)[7:8]<-paste("Rel",colnames(freqs)[7:8],sep=".") loci.number<-length(freqs[,1])/2 # Cria objeto com o número de loci analisados control.set<-1:loci.number # Controls subset test.set<-loci.number+control.set # Tests subset Exp11=freqs[,7]^2*sum(freqs[1:3]) Exp12=2*freqs[,7]*freqs[,8]*sum(freqs[1:3]) Exp22=freqs[,8]^2*sum(freqs[1:3]) Genexp=cbind(Exp11, Exp12, Exp22) Chisq_HW<-rowSums(((freqs[,1:3]-Genexp[,1:3])^2)/Genexp[,1:3]) Pvalue_HW<-1-pchisq(Chisq_HW,1) locus<-as.factor(colnames(allele.table[,3:length(allele.table)])) Obs1=freqs[,1]*2+freqs[,2] Obs2=freqs[,3]*2+freqs[,2] Obs=cbind(Obs1,Obs2) freqs<-cbind(freqs,Pvalue_HW,locus,Obs) Exp1<-(freqs[control.set,11]+freqs[test.set,11])/2 Exp2<-(freqs[control.set,12]+freqs[test.set,12])/2 freqs<-cbind(freqs,Exp1,Exp2) # Teste de associação e QQplot Chisq_assoc<-rowSums(((freqs[control.set,11:12]-freqs[control.set,13:14])^2)/freqs[control.set,13:14]+((freqs[test.set,11:12]-freqs[test.set,13:14])^2)/freqs[test.set,13:14]) Pvalue_assoc<-1-pchisq(Chisq_assoc,1) freqs<-cbind(freqs,Genexp,Chisq_assoc,Pvalue_assoc) qqnorm(freqs[,19], col="red", main="QQ plot",xlab="Esp",ylab="Obs") QQ=qqline(freqs[,19]) print(freqs) } } alleLu(project) == Modelo input file == {{:bie5782:01_curso_atual:alunos:trabalho_final:luciano.brito:projteste1.csv|}} == Código da Função == {{:bie5782:01_curso_atual:alunos:trabalho_final:luciano.brito:trabalho_final_luciano.r|}}