Jacques Wainer
24/3/20
O papel de testes estatísticos é dar evidencias que dois (ou mais) conjuntos de dados não vieram da mesma fonte.
Ou melhor, dizer que dois conjuntos são “diferentes” é dizer que é bem improvável que os dados vieram da mesma fonte.
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”. O nome erro não é um bom nome, pense como “ruído de amostragem”
set.seed(1234)
fonte=rnorm(10000,100,30)
O set.seed é para fixar o gerador de números aleatórios e portanto o exemplo será reprodutível.
a variável fonte contem 10000 dados amostrados de uma normal de media 100 e desvio padrão 30
Vamos ver que os dados em fonte parecem realmente vir de uma normal
hist(fonte,breaks=30)
Vamos tirar duas amostras aleatórias da fonte. a terá 7 dados e b terá 12 dados (escolhidos aleatoriamente da fonte)
a=fonte[sample(1:10000,7)]
b=fonte[sample(1:10000,12)]
Embora a e b são amostras da mesma fonte, eles tem médias diferentes
> mean(a)
[1] 110.6293
> mean(b)
[1] 95.70708
Vamos assumir que b são os tempos de execução do seu programa e a são os tempos de execução de um programa conhecido publicado na literatura, e seu mestrado é fazer uma implementação mais rápida do programa a
Voce pode dizer a sua orientadora que vc terminou o mestrado ja que voce criou um programa que é 13% mais rápido que o estado da arte?
Um teste estatístico informa a probabilidade de que os dados sejam tão (ou mais) diferentes quanto eles são tendo em vista que eles vieram da mesma fonte de dados. Esse valor é chamado de p-valor ou p-value
Se a probabilidade é alta então é provável que a diferença que voce encontrou na média (ou outras medidas - mais abaixo) é apenas devido a sorte.
Se a probabilidade é baixa então voce pode dizer que é pouco provável que os dados vieram de uma mesma fonte e que a diferença é apenas por causa do ruído de amostragem.
Se a probabilidade é baixa voce pode dizer que é bem provável que os dados realmente vieram de 2 fontes diferentes.
O termo oficial para dizer que “é bem provável que os dados realmente vieram de 2 fontes diferente” é a diferença é estatisticamente significante ou a diferença é estatisticamente significativa
> t.test(a,b)
Welch Two Sample t-test
data: a and b
t = 0.78595, df = 8.0367, p-value = 0.4544
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-28.82529 58.66978
sample estimates:
mean of x mean of y
110.62933 95.70708
Veja o p-value
> d = rnorm(12,150,30)
> mean(d)
[1] 159.3009
> t.test(a,d)
Welch Two Sample t-test
data: a and d
t = -2.5849, df = 7.7994, p-value = 0.03305
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-92.287107 -5.055969
sample estimates:
mean of x mean of y
110.6293 159.3009
No segundo caso nós geramos dados que realmente vieram de uma outra fonte bem diferente da original (media = 150 em vez de media = 100) e o teste estatístico mostra que o p-value é bem menor no segundo caso.
Tradicionalmente, na maioria das Ciências e em particular em Comutação usa-se o valor de 0.05 de p-valor para afirmar que a diferença é estatisticamente significante
Na prática, se o p-valor do seu teste der 0.051 vc não tem um paper para publicar!!! Há criticas mais modernas sobre usar o p-valor como decisão, e veremos isso numa próxima aula, mas tradicionalmente essa é a prática.
Assim normalmente você quer um p-valor baixo
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 (ou ao ruído de amostragem)
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.
mas talvez a média menor do 2o programa foi apenas “sorte”! E dai? No pior caso, a vantagem do 2o programa é “falsa” e ambos são iguais - mas ai não há problema em usar o 2o programa!!
mas talvez o teste estatístico vai mostrar que realmente o 1o programa é o melhor. Isso nunca vai acontecer - o teste estatístico mostra no máximo que é improvável que a diferença entre o de menor média e o outro é seja apenas por sorte - o teste nunca vai mostrar que o que tem maior média (ou mediana) é “de verdade” mais rápido!
pareado | não pareado | |
---|---|---|
paramétrico | teste T pareado | teste T não pareado |
não paramétrico | Wilcoxon signed rank | Wilcoxon sum rank |
pareado | não pareado | |
---|---|---|
paramétrico | repeated ANOVA | ANOVA |
não paramétrico | Friedman | Kruskal-Wallis |
Testes para mais de um conjunto de dados são um pouco complicados. Os testes acima se baseiam não hipótese nula que todos os grupos vieram da mesma fonte. E portanto um p-valor pequeno apenas indica que não é provável que todas as médias sejam iguais. Mas o teste não diz quais grupos são estatisticamente diferentes dos outros.
Para determinar isso é preciso fazer testes post hoc Este blog tem alguma explicação sobre post hoc tests mas não vai muito a fundo. Na aula de problemas com o p-value veremos porque isso testes post hoc não são tão simples. Se voce precisa usar post hoc tests me procure.
Há outros testes para outras situações (dados não numéricos, dados 0/1 pareados e não pareados, etc), e
Há testes para outras perguntas: os dois conjuntos de dados tem a mesma variância? Os dados de um conjunto estão distribuídos segundo uma Gaussiana? etc
> t.test(a,b)
Welch Two Sample t-test
data: a and b
t = 0.78595, df = 8.0367, p-value = 0.4544
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-28.82529 58.66978
sample estimates:
mean of x mean of y
110.62933 95.70708
> wilcox.test(a,b)
Wilcoxon rank sum test
data: a and b
W = 51, p-value = 0.4824
alternative hypothesis: true location shift is not equal to 0
wilcox.test
roda o sum rank (dados não pareados), que é um teste não paramétrico
veja que o teste T deu um p-valor menor, e confirma o que foi dito que teste T é mais poderoso. Mas veja:
> t.test(a,d)
Welch Two Sample t-test
data: a and d
t = -2.5849, df = 7.7994, p-value = 0.03305
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-92.287107 -5.055969
sample estimates:
mean of x mean of y
110.6293 159.3009
> wilcox.test(a,d)
Wilcoxon rank sum test
data: a and d
W = 12, p-value = 0.009764
alternative hypothesis: true location shift is not equal to 0
Na verdade a
,b
, e d
não satisfazem as pressuposições do teste T (\(n>30\)) e então não deveríamos ter usado e teste T em nenhum dos exemplos.
?t.test
Note o parâmetro mu
teste T - pareado e não pareado [https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/t.test] (https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/t.test)
Wilcoxon sum rank (não pareado) e signed rank (pareado) https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/wilcox.test
ANOVA (também chamado de 1-way anova) veja esse blog
Repeated ANOVA (também chamado de within-subject ANOVA) veja esse blog (Note que não é tão fácil fazer repeated ANOVA em R
Kruskal (ANOVA não paramétrico) https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/kruskal.test
Friedman (repeated ANOVA não paramétrico) https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/friedman.test
A maioria das aulas de estatistica no Youtube que eu conheco nao segue a minha abordagem de fonte de dados que eu usei acima. Eles usam mais frequentemente a ideia de comparar um conjunto de medidas com 1 valor apenas (que eu menciono apenas brevemente). Mas ha varios vides sobre isso e voce certamente aprenderá algo útil neles.
Um canal do Youtube sobre estatistica e aprendizado de maquina
Uma aula que usa as tableas de testes como as minhas mas inclui uma linha a mais (dados binarios). Mas o sotaque do apresentador é bem forte.