Análise estatística

Jacques Wainer (wainer@ic.unicamp.br)

Março 2018

1) Testes estatísticos de significância

  • O papel de testes estatísticos é dar evidencias que dois (ou mais) conjuntos de dados não vieram da mesma fonte.
  • Você rodou 2 versões de um programa em vários dados,
    • programa 1 demorou 10.30, 12.08, 9.33, 9.62, 9.88 (segundos) em 5 exemplos
    • programa 2 demorou 9.23, 9.84, 8.55, 10.42 em outros 4 exemplos.
  • Há dois conjuntos de dados. Não existe teste para 2 números, só para 2 ou mais conjuntos de dados
  • Dizer que os dois conjuntos de dados são "diferentes" é numa primeira aproximação dizer que esses dados vieram de duas fontes de dados ("populações") diferentes.
  • Ou melhor, dizer que dois conjuntos são "diferentes" é dizer que é bem improvável que os dados vieram da mesma fonte.

Erros de amostragem (ou diferenças devido a sorte apenas)

Dados retirados (amostrados) de uma mesma fonte podem ter médias diferentes. A diferença é apenas por causa da sorte ou do azar. Isso é chamado de "erro de amostragem"

a=runif(6)
b=runif(4)

runif(6) gera 6 dados de uma distribuição uniforme entre 0.0 e 1.0

mean(a)
mean(b)

tira a média dos dois conjuntos. Não são iguais, um deles é "melhor"! Mas eles são basicamente iguais - são duas amostragens de uma mesma fonte, e a diferença entre os dois conjuntos é apenas devido a "sorte"

  • O papel de testes estatísticos é dar evidencias que a diferença entre a média de dois (ou mais) conjuntos de dados não é devido apenas a sorte

Quando você precisa de testes estatísticos?

Se não há custos para tomar a decisão

  • Média de execução do primeiro programa é 10.242 e a do segundo programa 9.648
  • Portanto o segundo programa é mais rápido. Escolha o segundo programa.
  • Se não há custos diferentes para escolher um ou outro programa, então você precisa de pouca evidência para decidir, escolha o com menor média (ou mediana), e pronto.

Se há custos diferentes para a decisão, é preciso mais evidência

  • Vamos dizer que o programa 1 já esta em uso e o segundo terá que ser posto em produção. Há um custo em tomar esta decisão, e você precisa de mais evidencias que o programa 2 é realmente mais rápido.
  • Ou o programa 1 foi publicado num artigo e você que dizer para a comunidade científica que seu programa é melhor/mais rápido. Você precisa de um muita evidencia que ele realmente é o melhor.
  • Nestes casos você usará testes estatísticos.

O que testes estatísticos não fazem

  • Testes estatísticos não dizem quando a diferença entre os 2 conjuntos é grande, ou importante.
  • Testes estatísticos não dizem quando não há diferença entre os 2 conjuntos.

O ponto central de um teste estatístico

  • Você tem dois conjuntos de dados A e B.
  • Assuma que eles vieram de uma mesma fonte de dados F (cujos detalhes você não sabe). Isso é chamado de hipótese nula
  • Calcule a probabilidade que 2 amostras dessa fonte F tenham as médias tão diferentes quanto as médias de A e B. Essa probabilidade é chamada de p-valor
  • Se o p-valor é alto, então é mais provável que A e B venham dessa mesma fonte e a diferença nas médias é apenas devido a "sorte"
  • Se o p-valor for baixo então há baixa chance que dados tão diferentes quanto os de A e B tenham vindo desta mesma fonte F. Se eles vieram de "fontes diferentes" então a diferença entre eles não é apenas por causa da sorte.
  • Em Ciência em geral, assume-se que p-valores menores que 0.05 (ou 95% de confiança) são evidência suficiente que os dados não vieram de uma mesma fonte.
  • Assim, se o p-valor é baixo (< 0.05), você tem alguma evidência que os conjuntos de dados são realmente diferentes (não vieram da mesma fonte) e diz-se que a diferença é "estatisticamente significante" (com 95% de confiança)
  • Se o p-valor é alto (> 0.05) não há nada que você pode dizer. Você não mostrou que os dados são semelhantes ou iguais. Você apenas não conseguiu mostrar que eles são diferentes!!!
  • Assim normalmente você quer um p-valor baixo

Uma babel de testes estatísticos

  • Um teste estatístico tem que:
    • definir como construir a fonte F dos dados de A e B
    • derivar uma formula que permite calcular o p-valor dado o F e as diferenças das médias (ou outra medida) de A e B
  • É preciso fazer pressuposições sobre o F e sobre A e B
  • É preciso fazer aproximações de como calcular o p-valor. Cada um que fez isso colocou o seu nome no teste! (Ou outros colocaram em homenagem).
    • Student t-test
    • Welch t-test
    • Wilcoxon signed rank, sum rank
    • Friedman test
    • Kruskal–Wallis
    • etc

Poder de um teste

  • Um teste T1 é mais poderoso que T2 se o cálculo do p-valor de T1 resulta num número menor que o p-valor de T2. Já que você quase sempre quer p-valores mais baixos, você quer usar o teste mais poderoso.
  • Testes mais poderosos fazem mais pressuposições sobre os dados, o que pode não ser verdade num caso particular. O teste T assume que os dados são normais (gaussianos). Isso provavelmente não é verdade para tempo de execução, para taxa de acerto, etc

Testes pareados e não pareados

  • Testes pareados são usados se há uma relação entre cada dado de um conjunto com um dado do outro conjunto (ou conjuntos).
    • tempo de execução dos 2 programas com o mesmo teste!
    • tempo de execução de uma tarefa pela mesma pessoa com e sem a modificação na interface
  • Testes não pareados (para dados "independentes") não há essa relação. E os dois conjuntos podem ter um número diferente de dados.
  • Testes pareados são mais poderosos que os não pareados.

Tabela (parcial) de testes

  • paramétrico = os dados A e B são normalmente distribuídos (e n>30)

2 conjuntos de dados

  pareado não pareado
paramétrico teste T pareado teste T nao pareado
não paramétrico Wilcoxon signed rank Wilcoxon sum rank

Mais de 2 conjuntos de dados

  pareado não pareado
paramétrico repeated ANOVA ANOVA
não paramétrico Friedman Kruskal-Wallis

outros tipos de dados

Há outros testes para outras situações (dados não numéricos, dados 0/1 pareados e não pareados, etc).

Exemplos

a=rnorm(6,10)
b=rnorm(4,10)
wilcox.test(a,b)

wilcox.test roda o sum rank (dados não pareados), que é um teste não paramétrico

x=rnorm(35,10)
y=rnorm(30,10.3)
wilcox.test(x,y)
t.test(x,y)

veja que o teste T deu um p-valor menor, e confirma o que foi dito que teste T é mais poderoso. Mas veja:

wilcox.test(a,b)
t.test(a,b)

a e b não satisfazem as pressuposições do teste T (n>30) e então o teste não da o menor p-valor.

Testes estatísticos em computação

  • Em computação, a quantidade de dados em cada conjunto não é usualmente um problema. O problema é que a maioria dos dados não são normais, o que é uma violação seria do teste T (e ANOVA).
  • Considere sempre usar os testes não paramétricos (Wilcoxon, Friedman e Kruskal-Wallis, e outros). Mesmos que os dados sejam normais, os testes não paramétricos dão resultados parecidos (mas maiores) que os testes paramétricos.
  • Para dados não normais, usualmente usa-se a mediana e não a média para comparar quem é melhor: o programa com menor mediana do tempo de execução é o melhor
  • Em muitos casos, os experimentos são pareados: mesmos dados de teste para os dois programas, mesma pessoa antes e depois de um sistema, etc.

Testes para um só conjunto de dados

  • A ênfase que eu dei para testes estatísticos é na comparação de 2 ou mais conjunto de dados.
  • Mas é possível fazer um teste para apenas 1 conjunto de dados (A), e normalmente estamos tentando obter evidencias que a média do conjunto é diferente de 0
  • O teste estatístico assume que os dados vieram de uma fonte F cuja a média é 0 (ou o valor que estamos testando). Os outros detalhes da fonte são desconhecidos, e cada teste faz diferentes pressuposições sobre os outros detalhes de F. O teste calcula a probabilidade de uma amostra do F tenha a média igual ou maior a que obtivemos para o conjunto A.
  • Normalmente todos os testes que comparam 2 conjuntos podem ser usados para um só conjunto
?t.test

Problemas com testes estatísticos

  • múltiplos testes
  • múltiplos testes como analise de multiplas variáveis
  • múltiplos testes como análise de subgrupos
  • múltiplos testes como múltiplos experimentos
  • múltiplos testes em múltiplas comparações
  • uso do teste errado para o seus dados
  • p-valor<0.05 não é um mandamento divino
  • p-valor muito baixo não significa que os dois conjuntos são muito diferentes
  • p-valor alto não significa que os conjuntos são iguais

Múltiplos testes - o grande problema

  • Se você repetir 20 vezes um teste que dá uma resposta errada com probabilidade 1/20, você terá em média 1 resposta errada!
for (i in 1:20){
   tt=t.test(rnorm(20),rnorm(30))
   print(paste("i:",round(tt$p.value,3)))
}

Múltiplos testes disfarçado de múltiplas variáveis

  • Se você medir 20 variáveis, provavelmente uma delas "vai dar" uma diferença significativa.
  • "Já que nos vamos fazer esse experimento caro/demorado, vamos também medir A, B, C, D …"
a=matrix(rnorm(300),ncol=20)
b=matrix(rnorm(400),ncol=20)
for (i in 1:20){
   teste=t.test(a[,i],b[,i])
   print(paste(i,":",  round(teste$p.value,3)))
}

Múltiplos testes disfarçado de análise de subgrupos

  • O teste para todos não deu \(p<0.05\)
  • vamos testar apenas no subgrupo A, agora testar apenas o subgrupo B, agora apenas A e B
a=rnorm(20,10)
b=rnorm(30,10)
t.test(a,b)
t.test(a[1;10],b[1:15])
t.test(a[10;20],b[15:30])
t.test(a[seq(1,20,2)],b[seq(1,30,2)])
t.test(a[seq(2,20,2)],b[seq(2,30,2)])
  • analise de subgrupo é comumente uma técnica para encontrar alguma diferença significativa um professor de nutricao de Cornell com uma pesquisa (possivelmente) fraudulenta
  • por outro lado, descobrir que algo só funciona para um subgrupo é uma parte importante de pesquisa exploratória uma discussao sobre isso

Múltiplos testes disfarçado de múltiplos experimentos

  • Vários experimentos com diferentes conjuntos de dados (da mesma "fonte")
  • p. exemplo: "Vamos trocar o nome dessa variável do programa e gerar novos dados"

Múltiplos testes quando comparando vários conjuntos de dados: múltiplas comparações

  • Testes como o ANOVA, Kruskal-Wallis só dão um p-valor para a hipótese nula: todos os conjuntos de dados vieram da mesma fonte.
  • Se p<0.05, quais entre eles são significativamente diferentes e quais não? Isso é chamado de análise post hoc. Uma idéia é fazer testes entre pares de conjuntos, e isso é chamado do problema das múltiplas comparações (veja este cartoon do xkcd)
  • Há vários métodos para corrigir o valor dos p-valores de cada comparação (para valores mais altos).

Outros problemas

  • p-valor<0.05 não é um mandamento divino - resultados úteis não foram publicados pois p-valor=0.06
  • p-valor é uma função da "tamanho da diferença" entre os dois conjuntos e do número de dados:
    • p-valor muito baixo não significa que os dois conjuntos são muito diferentes. Para n → ∞, p-valor vai para 0 ou 1.
    • p-valor alto não significa que os conjuntos são iguais, pode significar que você tem poucos dados.

O que isso significa?

  • Variações do problema de múltiplos testes geram falsos positivos: afirmações que um fenômeno existe quando ele de fato não existe.
  • De vez em quando isso é chamado de p-hacking mas o problema existe mesmo quando o pesquisador não tem más intenções
  • É por isso que para coisas importantes como saúde você deve duvidar que todo resultado que saiu em um só artigo - pode ser um falso positivo.

2) Além de testes de significância

Intervalo de confiança

  • Intervalo de confiança mostra a incerteza do valor da média da fonte de um conjunto de dado (Não há incerteza na média do conjunto)
  • Qual é o intervalo de valores para a média da fonte de tal forma que haja no minimo 5% de probabilidade da amostra ter saído da fonte.
  • É o dual de um teste estatístico de uma só amostra: qual o intervalo de valores para a média da fonte F que daria um p-valor maior que 0.05.
  • Da mesma forma que testes de uma só amostra, o intervalo de confiança faz pressuposições sobre as outras características de fonte F (menos a média). Na verdade cada teste de uma só amostra pode gerar (e em R gera) um intervalo de confiança para a média (ou mediana) da fonte.
  • Testes estatísticos podem gerar o intervalo de confiança, mas há uma outra técnica (bootstrap) que faz menos pressuposições sobre a fonte.
a=rnorm(6,10)
t.test(a)
wilcox.test(a,conf.int=T)

Intervalos de confiança como testes estatísticos de 2 amostras

  • Se o intervalo de confiança de dois conjunto de dados tem interceção então não há diferença significativa entre eles. (Ou melhor o p-valor do teste estatístico de 2 conjuntos dará um p-valor > 0.05)
  • Se o intervalo de confiança de dois conjuntos não tem interceção, então a diferença entre os conjuntos é estatisticamente significativa.
a=rnorm(6,10)
b=rnorm(8,10.3)
x=rnorm(8,12)
t.test(a,b)
t.test(a)$conf.int
t.test(b)$conf.int
t.test(a,x)
t.test(x)$conf.int

Por que intervalos de confiança?

  • Intervalos de confiança indicam a incerteza que se tem sobre a média (ou mediana) da fonte que gerou os dados.
  • Este artigo que argumenta a favor de intervalos de confiança em vez de testes estatísticos.

Tamanho do efeito

  • Testes estatísticos medem a confiança que existe uma diferença entre os 2 conjuntos de dados.
  • Infelizmente, o nome "significante" parece indicar que a diferença é grande, ou importante.
  • Isso não é verdade: um p-valor baixo apenas indica que voce tem bastante certeza que a diferença existe, não que ela é importante ou significante no sentido tradicional da palavra.
  • Tamanho do efeito é uma família de medidas que medem o tamanho da diferença entre os dois conjuntos.
  • São medidas adimensionais.
  • Tamanho de efeito é comparável através de diferentes experimentos

Cohen D

  • Tamanho de efeito para medidas numéricas.
  • diferença das médias de A e B dividido por uma média ponderada dos desvios padrão (adimensional)
  • mede quão separado são as distribuições de dados de A e B: animação e um figura
  • um D=0.2 significa que a diferença das médias de A e B é 0.2 o desvio padrão delas.

Comparável através de experimentos

  • Tamanho de efeito é comparável através de diferentes experimentos
  • Combinar tamanho de efeito é o que meta-analises fazem!
  • Cohen falou que um tamanho de efeito de 0.2 é pequeno. Na prática não é.
  • Há algumas meta-meta-analises que mostram quais são valores razoáveis em diferentes áreas: Engenharia de Software e Educação
  • 0.25 é a média de tamanhos de efeito para intervenções em educação básica.

Intervalos de confiança para tamanho de efeito

  • Tamanho do efeito é apenas 1 número. Assim como a média de um conjunto é apenas 1 número.
  • Mas é possível definir um intervalo de incerteza para a média de um conjunto (fazendo pressuposições sobre a fonte F dos dados do conjunto).
  • Da mesma forma é possível calcular um intervalo de confiança para tamanho de efeito
  • Talvez esse seja o futuro.
  • Isso resume tudo que é importante: se o intervalo de confiança cruza o 0 então tradicionalmente a diferença não é significativa.

Testes de equivalência

  • Em farmacologia é muito importante mostrar que uma nova formulação de um remédio (genérico) é tão bom quanto a velha formulação.
  • Mas testes estatísticos tradicionais não mostra que dois conjuntos são iguais. p>0.05 apenas mostra que você não conseguiu mostrar que eles são "diferentes".
  • Não dá para mostrar evidencias que 2 conjuntos são iguais. Dá apenas para mostrar que a diferença entre eles é menor que um limite, abaixo do qual você diz que não há "diferença importante"
  • é preciso definir um tamanho de efeito para a diferenças irrelevantes (super dependente da área)
  • testes de equivalência que permitem calcular um p-valor para a hipótese nula que os dados tem um tamanho de efeito maior que o limite de irrelevância. Assim um p-valor baixo indica que é improvável que os dados tenham vindo de fontes mais separadas que o limite.
  • Em principio em computação nós poderíamos querer mostrar que um programa é equivalente a outro (sob algum aspecto mais importante) mas é melhor num aspecto secundário (custo, tempo de execução, etc).
  • Na prática eu nunca vi resultados deste tipo em computação.

Análise Bayesiana

  • Os resultados de testes estatísticos de significancia e intervalo de confiança não são exatamente o que a gente quer
  • p-valor é a P(dados|hipo-nula). Se esse número é baixo então é improvável que os dados tenham vindo "da hipotese nula"
  • mas o que a gente realmente quer é P(hipo-nula|dados)! Qual a probabilidade da hipotese nula ser verdadeira, tendo em vista os dados que a gente tem!

  • Para intervalo de confiança, o que queremos é:
    • qual é o intervalo para o valores de tal forma que a probabilidade da média da população estar dentro desse intervalo é de 95%
    • mas o que intervalo de confiança realmente significa é que se eu repetir meu experimento 100 vezes, em 5% deles a média da população não vai estar dentro do intervalo calculado para cada experimento!
  • Nas analises que vimos até agora, chamada frequentista, a média da população é fixa (mas desconhecida) - não é possível fazer afirmações probabilísticas sobre ela. A única coisa que é aleatoria e sobre as quais se pode falar de probabilidade é a amostragem (o seu experimento).

Ideia central da analise bayesiana

  • a versão não-frequentista, chamada de bayesiana, assume que voce pode fazer afirmações probabilísticas sobre coisas que voce não sabe, e que probabilidade é uma medida do seu desconhecimento.
  • com isso eu posso usar o teorema de Bayes para obter as probabilidades que queremos

\[ p(h|d) = \frac{P(d|h) P(h)}{P(d)} \]

  • P(d|h) é o p-valor
  • p(h) é o prior - quanto eu acredito na hipotese nula antes de começar o experimento
  • p(d) é um termo menos complicado que parece. O papel dele é garantir que P(-h|d) e p(h|d) somem 1.
  • o prior não precisa ser um número, mas uma distribuição de probabilidade
  • imagem notem que alguém propos esse modelo (da mesma forma que Wilcoxon propos um modelo) mas com poucas semanas/meses de estudo voce pode propor um model especifico para o seu problema.
  • técnicas atuais usam simulação para gerar pontos com a distribuição P(h|d). Há alguns programas para gerar simulações de models (Stan, Jags, PyMC3)
  • uma vez que voce tem esses pontos, voce pode fazer outras medidas, e obter distribuições sobre essas medidas. Ver imagem acima.
  • Analise Bayesiana resolve vários problemas dos testes tradicionais. Em particular o problema de múltiplas comparações (mas não sei se o problema de múltiplos testes)
  • Este livro é uma excelente introdução