Considerações estatísticas em Considerações estatísticas em estudos de microarranjos e afinsestudos de microarranjos e afins
Parte IIIParte III
Antonio Guilherme F PachecoAntonio Guilherme F Pacheco
Na conversa de hojeNa conversa de hoje
Discussão do Discussão do paperpaper sobre q-valor sobre q-valor Testes de permutaçãoTestes de permutação FDRFDR Outras questõesOutras questões
Exemplo práticoExemplo prático Usando o RUsando o R Programação (S)Programação (S)
Testes de permutaçãoTestes de permutação Antes de entrarmos no Antes de entrarmos no paper paper propriamente dito, propriamente dito,
vamos ver como funciona um teste de vamos ver como funciona um teste de permutaçãopermutação
Vamos demonstrar como podemos obter uma Vamos demonstrar como podemos obter uma curva de distribuições de médias amostrais curva de distribuições de médias amostrais empírica empírica para ser usada no lugar da nossa curva para ser usada no lugar da nossa curva teóricateórica Nesse caso, sob a Nesse caso, sob a HH00
Isso é feito a partir dos nossos próprios dadosIsso é feito a partir dos nossos próprios dados Para facilitar, vamos usar um exemplo com duas Para facilitar, vamos usar um exemplo com duas
amostras (mas pode ser estendido para mais amostras (mas pode ser estendido para mais amostras)amostras)
Testes de permutaçãoTestes de permutação A idéia é simplesA idéia é simples
Sob Sob HH00, qualquer valor que seja achado, muito , qualquer valor que seja achado, muito afastado do valor de afastado do valor de HH00 ou não serão meramente ou não serão meramente uma questão de termos selecionado determinada uma questão de termos selecionado determinada amostraamostra
Mesma idéia que já vimos anteriormenteMesma idéia que já vimos anteriormente Mas se isso representa apenas um erro aleatório, Mas se isso representa apenas um erro aleatório,
e na verdade ambas as amostras representam e na verdade ambas as amostras representam uma mesma população (i.e. a diferença de suas uma mesma população (i.e. a diferença de suas médias é zero)…médias é zero)…
Posso construir uma curva de diferenças de Posso construir uma curva de diferenças de médias apenas “embaralhando” aleatoriamente médias apenas “embaralhando” aleatoriamente os valores das duas amostras muitas vezesos valores das duas amostras muitas vezes
Testes de permutaçãoTestes de permutação Sem entrar em detalhes por enquanto, Sem entrar em detalhes por enquanto,
vamos ver como ficaria uma distribuição vamos ver como ficaria uma distribuição teórica (que já vimos como se faz) com uma teórica (que já vimos como se faz) com uma empírica obtidas dessa formaempírica obtidas dessa forma
Em vez da diferença das médias Em vez da diferença das médias propriamente ditas, podemos fazer a mesma propriamente ditas, podemos fazer a mesma coisa para uma transformação qualquer coisa para uma transformação qualquer dessas diferenças, como a estatística Tdessas diferenças, como a estatística T
Esse procedimento incorpora de maneira Esse procedimento incorpora de maneira correta a variabilidade que seria estimada a correta a variabilidade que seria estimada a partir da amostrapartir da amostra
Testes de permutaçãoTestes de permutação
-4 -2 0 2 4
0.0
0.1
0.2
0.3
0.4
t
Den
sity
-4 -2 0 2 4
0.0
0.2
0.4
0.6
0.8
1.0
CDF
t
P(t<
=T)
Testes de permutaçãoTestes de permutação Uma vez tendo essa distribuição empírica, Uma vez tendo essa distribuição empírica,
podemos calcular um p-valor empírico, podemos calcular um p-valor empírico, baseado nessa distribuiçãobaseado nessa distribuição
No nosso caso, existe uma vantagem nesse No nosso caso, existe uma vantagem nesse procedimento que é incorporar os testes de procedimento que é incorporar os testes de todas as comparações ao mesmo tempo, o todas as comparações ao mesmo tempo, o que nos permite incorporar a variabilidade que nos permite incorporar a variabilidade total do sistema nessa distribuição, dando total do sistema nessa distribuição, dando conta, pelo menos em parte, do problema da conta, pelo menos em parte, do problema da correlação entre os testescorrelação entre os testes
Veremos isso melhor depoisVeremos isso melhor depois
O artigoO artigo É mais um resumão de um trabalho É mais um resumão de um trabalho
teórico anterior com uma aplicação teórico anterior com uma aplicação práticaprática
Explica o conceito de FDR e as Explica o conceito de FDR e as dificuldadesdificuldades
Propõe o q-valor como uma medida Propõe o q-valor como uma medida interessante para a FDR para muitas interessante para a FDR para muitas comparações simultâneascomparações simultâneas
O artigoO artigo Quatro exemplos de possíveis usosQuatro exemplos de possíveis usos
Só para mostrar a aplicabilidade ampla do Só para mostrar a aplicabilidade ampla do métodométodo
Eles acabam trabalhando mesmo com o Eles acabam trabalhando mesmo com o Exemplo 1Exemplo 1
Esse exemplo é bem parecido com o Esse exemplo é bem parecido com o que vamos ver adianteque vamos ver adiante
Vamos ver agora os conceitos com Vamos ver agora os conceitos com calma, começando pela FDRcalma, começando pela FDR
FDRFDR Agora, vamos ver um pouco melhor a idéia Agora, vamos ver um pouco melhor a idéia
da FDRda FDR
Vamos ver a tabela do artigoVamos ver a tabela do artigo Parece com a que nós vimos para o Erro Tipo IParece com a que nós vimos para o Erro Tipo I Só que aqui será para Só que aqui será para mm testes diferentes testes diferentes
O principal é entender a diferença entre o O principal é entender a diferença entre o e e a FDRa FDR Vamos usar a notação do artigoVamos usar a notação do artigo
FDRFDR
Não é difícil ver a diferença nesse casoNão é difícil ver a diferença nesse caso Só muda o denominadorSó muda o denominador
SFEFDR
mFE
PNAS 2003, 100(16) 9440-5PNAS 2003, 100(16) 9440-5
FDRFDR Mas o ‘pulo do gato’ da FDR não é esse Mas o ‘pulo do gato’ da FDR não é esse
apenasapenas Se fosse só isso não faria diferença para o ajuste Se fosse só isso não faria diferença para o ajuste
clássico de Bonferroniclássico de Bonferroni
A FDR é na verdade um relaxamento da A FDR é na verdade um relaxamento da idéia que nós vimos de que todos são idéia que nós vimos de que todos são inocentes até que se prove o contrárioinocentes até que se prove o contrário
Não só vamos partir do princípio que alguns Não só vamos partir do princípio que alguns são ‘culpados’ (são realmente diferentes), são ‘culpados’ (são realmente diferentes), como vamos fazer as contas baseadas nos como vamos fazer as contas baseadas nos dados – dados – data drivendata driven
Recordando...Recordando...
Já tínhamos visto as características de uma Binomial e Já tínhamos visto as características de uma Binomial e que o conjunto de testes falsamente positivos poderia que o conjunto de testes falsamente positivos poderia ser descrito por elaser descrito por ela
Recordando, em geral...Recordando, em geral...
npXE
ppxn
xXP
pnBX
xnx
)(
)1()(
),(~
Já tínhamos visto isso Já tínhamos visto isso para o Bonferronipara o Bonferroni
Fazendo com a notação Fazendo com a notação do artigodo artigo
Então, de maneira geral, Então, de maneira geral, com o rigor anterior, com o rigor anterior, com com de 0.05, de 0.05, queremos acharqueremos achar
E o número esperado de E o número esperado de testes errados será…testes errados será…
mFExm
xFP
mBF
xmx
)(
)1()(
),(~
mmFP )95.0(05.0
0)0( 0
FDRFDR
mFEmFE )(
FDRFDR Só que agora, eu não vou mais assumir Só que agora, eu não vou mais assumir
que todos as que todos as HH00 são verdadeiras são verdadeiras
Algumas não são, mas não sei Algumas não são, mas não sei exatamente quantasexatamente quantas
Então, é preciso Então, é preciso estimarestimar EE((FF))
Como no artigo ele está interessado em Como no artigo ele está interessado em demonstrar o q-valor, um ponto de corte demonstrar o q-valor, um ponto de corte ((tt) é introduzido na notação) é introduzido na notação
FDRFDR
O denominador é observável, pois são os testes O denominador é observável, pois são os testes que são de fato rejeitadosque são de fato rejeitados
O problema é o numerador, já que agora eu não O problema é o numerador, já que agora eu não assumo mais que todos os testes são nulosassumo mais que todos os testes são nulos
Então, é preciso Então, é preciso estimarestimar EE((FF)) E isso pode ser feito estimando-se E isso pode ser feito estimando-se
)(
)()()()(
tSEtFE
tStFEtFDR
mm0
0
FDRFDR Agora, notem que se Agora, notem que se 00 = 1, = 1, mm00 = = mm
Recaímos então no nosso caso clássico!!!Recaímos então no nosso caso clássico!!! É por isso que é dito no artigo que essa situação É por isso que é dito no artigo que essa situação
é mais conservadoraé mais conservadora A questão então é estimar essa quantia, A questão então é estimar essa quantia,
balanceando viés e variabilidadebalanceando viés e variabilidade Não vamos entrar em detalhes, mas eles Não vamos entrar em detalhes, mas eles
propõem usar um alisamento com propõem usar um alisamento com splinessplines para essa estimativapara essa estimativa Na verdade existem outras maneiras de estimarNa verdade existem outras maneiras de estimar
Vamos olhar rapidamente como funciona Vamos olhar rapidamente como funciona essa escolha do essa escolha do
FDRFDR
PNAS 2003, 100(16) 9440-5PNAS 2003, 100(16) 9440-5
FDRFDR
PNAS 2003, 100(16) 9440-5PNAS 2003, 100(16) 9440-5
FDRFDR Um ponto importante é que Um ponto importante é que não importa o não importa o
teste a ser usadoteste a ser usado – desde que seja o mesmo – desde que seja o mesmo O q-valor então será um valor associado a O q-valor então será um valor associado a
um determinado p-valor de um teste feito, um determinado p-valor de um teste feito, sendo que dentre todos os testes que sendo que dentre todos os testes que tiveram esse p-valor tiveram esse p-valor ou menorou menor, (, (q q x 100)% x 100)% serão falso-positivosserão falso-positivos
Esse procedimento está implementado no R, Esse procedimento está implementado no R, em um pacote chamado “q-value”em um pacote chamado “q-value”
Ele apenas exige um vetor com os p-valores Ele apenas exige um vetor com os p-valores encontradosencontrados
RR Antes de entrar na parte de análise Antes de entrar na parte de análise
propriamente dita, vamos ver alguns propriamente dita, vamos ver alguns conceitos básicos sobre o Rconceitos básicos sobre o R
Como ele é um pouco diferente dos pacotes Como ele é um pouco diferente dos pacotes estatísticos tradicionais, é melhor ver estatísticos tradicionais, é melhor ver rapidamente como ele funciona, só para não rapidamente como ele funciona, só para não ficar boiando nos exemplosficar boiando nos exemplos
Vamos ver um resumo rápido do material Vamos ver um resumo rápido do material que vocês leram...que vocês leram...
IntroduçãoIntrodução
O que é o R?O que é o R? O R utiliza menus para fazer análises O R utiliza menus para fazer análises
estatísticas? Isso é uma vantagem ou uma estatísticas? Isso é uma vantagem ou uma desvantagem?desvantagem?
Mesmo sendo um software gratuito, o R é Mesmo sendo um software gratuito, o R é confiável?confiável?
O que são os módulos adicionais do R?O que são os módulos adicionais do R? Quais as vantagens de usar o R para análise Quais as vantagens de usar o R para análise
de dados genéticos?de dados genéticos?
Como acessar a ajuda?Como acessar a ajuda? Tipos de ajuda no RTipos de ajuda no R Como realizar uma consulta?Como realizar uma consulta? Entendendo o resultado da consulta: Uma janela Entendendo o resultado da consulta: Uma janela
será aberta com os seguintes itens:será aberta com os seguintes itens:
1. Description (Descrição)1. Description (Descrição) 5. Value (Valores)5. Value (Valores)2. Usage (Sintaxe)2. Usage (Sintaxe) 6. See Also (Ver também)6. See Also (Ver também)3. Arguments (Argumentos)3. Arguments (Argumentos) 7. Examples (Exemplos)7. Examples (Exemplos)4. Details (Detalhes)4. Details (Detalhes)
Entendendo a ajuda do REntendendo a ajuda do R
Cálculos e FunçõesCálculos e Funções
O R pode ser usado como uma simples O R pode ser usado como uma simples calculadora onde os operadores calculadora onde os operadores matemáticos são matemáticos são ++ , , -- , , ** , , // e e ^̂ ; ;
FunçãoFunção: É uma expressão (programa) : É uma expressão (programa) que retorna um valor ou uma lista de que retorna um valor ou uma lista de valores,usualmente depois de realizar valores,usualmente depois de realizar algumas operações.algumas operações.
Cálculos e FunçõesCálculos e Funções
Características básicas das funções Características básicas das funções disponíveis no R:disponíveis no R:
> função (argumento(s) obrigatório(s), > função (argumento(s) obrigatório(s), argumento(s) opcional(is))argumento(s) opcional(is))
ExemplosExemplos::> log (2187, base=3)> log (2187, base=3)> log ( , base=3) > log ( , base=3) > log (2187, ) > log (2187, )
Para entender os argumentos da função,
busque na ajuda: >?log>?log
ObjetosObjetos
ObjetoObjeto: toda e qualquer informação : toda e qualquer informação armazenada no R, tal como: funções, armazenada no R, tal como: funções, vetores, matrizes, listas, vetores, matrizes, listas, ddata framesata frames;;
Para criar um objeto, deve-se usar sempre o Para criar um objeto, deve-se usar sempre o operador operador assignment assignment ((<-<-););
ExemploExemplo:: > x <- 3 > x <- 3 > x> x[1] 3[1] 3
Além disso, para visualizar todos os objetos existentes, basta fazer:
>ls( )
ObjetosObjetos
O R salva todos os objetos num mesmo O R salva todos os objetos num mesmo arquivo com extensão “.Rdata”;arquivo com extensão “.Rdata”;
Assim, o R salva apenas os OBJETOS, não Assim, o R salva apenas os OBJETOS, não recuperando dessa maneira os resultados recuperando dessa maneira os resultados de funções e saídas gráficas (mais tarde de funções e saídas gráficas (mais tarde veremos como salvar essas saídas);veremos como salvar essas saídas);
Podemos também, salvar um histórico com Podemos também, salvar um histórico com os comandos que usados anteriormente;os comandos que usados anteriormente;
VetoresVetores VetorVetor: É uma seqüência, em uma ordem : É uma seqüência, em uma ordem
específica de valores de um mesmo tipo de específica de valores de um mesmo tipo de dados;dados;
Esses valores podem ser: numéricos, lógicos, Esses valores podem ser: numéricos, lógicos, caracteres ou complexos;caracteres ou complexos;
ExemplosExemplos::
> z<-alho> z<-alhoError: Object "alho" not foundError: Object "alho" not found
> z<-"alho"> z<-"alho"> z> z[1] "alho"[1] "alho"
> Y<-25> Y<-25> Y> Y[1] 25[1] 25
> y> yError: Object "y" not foundError: Object "y" not found
VetoresVetores
ATENÇÃO!ATENÇÃO!
> x <- “aluno”> x <- “aluno”> x> x[1] aluno[1] aluno> x <- 25> x <- 25> x> x[1] 25[1] 25
Repare que o R faz todas as substituições que pedimos, sem nos notificar de que estamos substituindo o conteúdo de um objeto. Por isso, devemos ficar sempre atentos aos ‘nomes’ dos objetos que estamos trabalhando...
VetoresVetores
Para entrar com seqüências que tenham mais Para entrar com seqüências que tenham mais de um valor, basta usar a função de um valor, basta usar a função c()c()::
> vec1 <- c(1, 2, 3, 4, 5)> vec1 <- c(1, 2, 3, 4, 5)> vec1> vec1[1] 1 2 3 4 5[1] 1 2 3 4 5
> vec2 <- c("Ana", "Pedro", "Léo", "Joana", NA)> vec2 <- c("Ana", "Pedro", "Léo", "Joana", NA)> vec2> vec2[1] "Ana" "Pedro" "Léo" "Joana" NA[1] "Ana" "Pedro" "Léo" "Joana" NA
VetoresVetores
Outras maneiras de se gerar uma Outras maneiras de se gerar uma seqüência:seqüência: Função Função seq()seq() Função Função rep()rep()
Seleção de partes de um vetorSeleção de partes de um vetor Operações básicas apenasOperações básicas apenas Mais detalhes no decorrer do cursoMais detalhes no decorrer do curso
Operações com VetoresOperações com Vetores Podemos fazer operações vetoriais no RPodemos fazer operações vetoriais no R Evitando errosEvitando erros
devem ter o mesmo tamanho (mas pode não ter devem ter o mesmo tamanho (mas pode não ter – lei da reciclagem)– lei da reciclagem)
> x <- 1:10> y <- c(1,2)> x+y[1] 2 4 4 6 6 8 8 10 10 12
x : 1 2 3 4 5 6 7 8 9 10 y : 1 2 1 2 1 2 1 2 1 2 (note como foi repetido)-----------------------------------x+y : 2 4 4 6 6 8 8 10 10 12
Operações com VetoresOperações com Vetores
Evitando errosEvitando erros respeite a precedência aprendida no respeite a precedência aprendida no
ensino fundamentalensino fundamental> peso <- c(62, 70, 52, 98, 90, 70)> altura <- c(1.70, 1.82, 1.75, 1.94, 1.84, 1.61)
> (peso/altura)^2 # Errado[1] 1330.1038 1479.2899 882.9388 2551.8121 2392.4858
1890.3592
> peso/(altura^2) # Certo[1] 21.45329 21.13271 16.97959 26.03890 26.58318 27.00513
Operações com VetoresOperações com Vetores
Operações lógicasOperações lógicas> x <- 1:10> x[x > 5][1] 6 7 8 9 10> x <- c(3, 5, 3, 2, 5, 7, 5)> y <- c(23, 21, 20, 12, 20, 30, 29)> x == 5[1] FALSE TRUE FALSE FALSE TRUE FALSE TRUE> y[x == 5][1] 21 20 29
FatoresFatores Armazenamento de dados categóricosArmazenamento de dados categóricos Possuem níveis (Possuem níveis (levelslevels))> c5 <- c('M','F','F','F','M','M')> c5[1] "M" "F" "F" "F" "M" "M"> f5 <- as.factor(c5)> f5[1] M F F F M MLevels: F M
Podem ser modificadosPodem ser modificados> levels(f5) <- c("Female","Male")> f5[1] Male Female Female Female Male MaleLevels: Female Male
Gerando Distribuições e GráficosGerando Distribuições e Gráficos No R, podemos gerar valores aleatórios No R, podemos gerar valores aleatórios
vindos de uma distribuição de probabilidade vindos de uma distribuição de probabilidade específica, por exemplo específica, por exemplo rrandom andom normnormalal::
> x <- rnorm (100, mean=10, sd=sqrt(4))> x <- rnorm (100, mean=10, sd=sqrt(4))
Mas será que há um Mas será que há um defaultdefault para essa para essa função?função?
> y <- rnorm (100)> y <- rnorm (100)> mean (y)> mean (y)> sd(y)> sd(y)
MédiaTamanho do vetor Desvio Padrão
Sim, a Normal Padrão com média 0 e variância 1
Gerando Distribuições e GráficosGerando Distribuições e Gráficos
A função genérica A função genérica plot()plot() Outras funções gráficasOutras funções gráficas
hist()hist() boxplot()boxplot() stem()stem() par()par()
Outras distribuiçõesOutras distribuições rbinom()rbinom()
Gerando Distribuições e GráficosGerando Distribuições e Gráficos Outras características de gráficosOutras características de gráficos
Tipos de gráficosTipos de gráficos SímbolosSímbolos Tipos de linhaTipos de linha TextosTextos
MatrizesMatrizes
Somente numéricasSomente numéricas Seleção de linhas e colunasSeleção de linhas e colunas> x[1:2,]> x[1:2,] [,1] [,2] [,3][,1] [,2] [,3][1,] 1 5 9[1,] 1 5 9[2,] 2 6 10[2,] 2 6 10
Outras operações com matrizesOutras operações com matrizes
Lendo dados no RLendo dados no R Entrada de dadosEntrada de dados
A função A função read.table()read.table()• Função genéricaFunção genérica
A função A função read.csv()read.csv()• Problema com a versão do ExcelProblema com a versão do Excel
Importanto com a biblioteca Importanto com a biblioteca foreignforeign A função A função read.spss()read.spss() Outras funçõesOutras funções
Data frames Data frames e listase listas
Data FramesData Frames Bancos de dadosBancos de dados Selecionando variáveisSelecionando variáveis Anexando um banco de dadosAnexando um banco de dados
ListasListas Objeto mais complexoObjeto mais complexo
Gerenciamento de dados no RGerenciamento de dados no R
Não é adequado, mas muitas vezes Não é adequado, mas muitas vezes necessárionecessário Troca de tipo de variávelTroca de tipo de variável RecodificaçãoRecodificação
Funções ajudamFunções ajudam summary()summary() table()table()
LoopsLoops LoopsLoops são uma parte importante de qualquer são uma parte importante de qualquer
linguagem de programaçãolinguagem de programação Permite realizar tarefas de maneira repetidaPermite realizar tarefas de maneira repetida Existem várias formas de Existem várias formas de LoopLoop
Vamos ver apenas uma: Vamos ver apenas uma: forfor Funciona com índice (mais comum)Funciona com índice (mais comum)
> for (i in 1:10)> for (i in 1:10){{do somethingdo something
}} Vai fazer alguma coisa 10 vezes nesse casoVai fazer alguma coisa 10 vezes nesse caso
CondicionaisCondicionais Permite realizar tarefas de maneira condicionalPermite realizar tarefas de maneira condicional Funciona com valores lógicosFunciona com valores lógicos
> if (x == y)> if (x == y){{do somethingdo something
}} elseelse
{{do something elsedo something else
}} Vai fazer alguma coisa se x=y e outra caso Vai fazer alguma coisa se x=y e outra caso
contráriocontrário
O teste de permutaçãoO teste de permutação Vamos ver agora então como foi feito Vamos ver agora então como foi feito
aquele teste de permutação simples que aquele teste de permutação simples que vimos no início da aulavimos no início da aula
Primeiro, vamos escrever uma função Primeiro, vamos escrever uma função para calcular um teste Tpara calcular um teste T
t.test.antonio<-function(x,y){ m1<-mean(x) m2<-mean(y) sn1<-var(x)/length(x) sn2<-var(y)/length(y) tstat<-(m1-m2)/sqrt(sn1+sn2) tstat}
O teste de permutaçãoO teste de permutação Agora vamos fazer uma função com um Agora vamos fazer uma função com um
looploop para que possamos fazer uma para que possamos fazer uma simulação muitas vezessimulação muitas vezes
t.test.permuta<-function (x,y, B=1000){ tstat<-NULL z<-c(x,y) for (i in 1:B){ mn<-sample(1:length(z),length(x),replace=F) x1<-z[mn] y1<-z[-mn] tstat[i]<-t.test.antonio(x1,y1) } tstat}
A análiseA análise Agora, vamos ver como foi feita a análise Agora, vamos ver como foi feita a análise
com os dados do Richardcom os dados do Richard As funções são um pouco mais complexas As funções são um pouco mais complexas
porque os dados exigem algumas porque os dados exigem algumas adaptaçõesadaptações
Vamos usar praticamente tudo o que Vamos usar praticamente tudo o que vimos nessas noções de Rvimos nessas noções de R
Vamos ver na prática…Vamos ver na prática…