Como realizar um teste shapiro-wilk em r (com exemplos)
O teste Shapiro-Wilk é um teste de normalidade. É usado para determinar se uma amostra vem ou não de uma distribuição normal .
Este tipo de teste é útil para determinar se um determinado conjunto de dados vem ou não de uma distribuição normal, que é uma suposição comumente usada em muitos testes estatísticos, incluindo regressão , ANOVA , testes t e muitos outros. ‘outros.
Podemos facilmente realizar um teste de Shapiro-Wilk em um determinado conjunto de dados usando a seguinte função integrada em R:
shapiro.teste(x)
Ouro:
- x: um vetor numérico de valores de dados.
Esta função produz uma estatística de teste W junto com um valor p correspondente. Se o valor p for inferior a α = 0,05, há evidências suficientes para dizer que a amostra não pertence a uma população normalmente distribuída.
Nota: O tamanho da amostra deve estar entre 3 e 5.000 para usar a função shapiro.test().
Este tutorial mostra vários exemplos de uso prático desta função.
Exemplo 1: teste de Shapiro-Wilk em dados normais
O código a seguir mostra como realizar um teste de Shapiro-Wilk em um conjunto de dados com tamanho de amostra n=100:
#make this example reproducible set.seed(0) #create dataset of 100 random values generated from a normal distribution data <- rnorm(100) #perform Shapiro-Wilk test for normality shapiro.test(data) Shapiro-Wilk normality test data:data W = 0.98957, p-value = 0.6303
O valor p do teste acabou sendo 0,6303 . Como este valor não é inferior a 0,05, podemos assumir que os dados amostrais provêm de uma população normalmente distribuída.
Este resultado não deve surpreender, pois geramos os dados amostrais usando a função rnorm(), que gera valores aleatórios a partir de uma distribuição normal com média = 0 e desvio padrão = 1.
Relacionado: Um guia para dnorm, pnorm, qnorm e rnorm em R
Também podemos produzir um histograma para verificar visualmente se os dados da amostra estão normalmente distribuídos:
hist(data, col=' steelblue ')
Podemos ver que a distribuição tem formato de sino com um pico no centro da distribuição, o que é típico de dados normalmente distribuídos.
Exemplo 2: Teste de Shapiro-Wilk em dados não normais
O código a seguir mostra como realizar um teste de Shapiro-Wilk em um conjunto de dados com tamanho de amostra n=100 em que os valores são gerados aleatoriamente a partir de uma distribuição de Poisson :
#make this example reproducible set.seed(0) #create dataset of 100 random values generated from a Poisson distribution data <- rpois(n=100, lambda=3) #perform Shapiro-Wilk test for normality shapiro.test(data) Shapiro-Wilk normality test data:data W = 0.94397, p-value = 0.0003393
O valor p do teste acabou sendo 0,0003393 . Como este valor é inferior a 0,05, temos evidências suficientes para dizer que os dados amostrais não provêm de uma população normalmente distribuída.
Este resultado não deve ser surpreendente, uma vez que geramos os dados amostrais usando a função rpois(), que gera valores aleatórios a partir de uma distribuição de Poisson.
Relacionado: Um guia para dpois, ppois, qpois e rpois em R
Também podemos produzir um histograma para ver visualmente que os dados da amostra não estão normalmente distribuídos:
hist(data, col=' coral2 ')
Podemos ver que a distribuição é assimétrica à direita e não possui o típico “formato de sino” associado a uma distribuição normal. Assim, nosso histograma corresponde aos resultados do teste Shapiro-Wilk e confirma que nossos dados amostrais não provêm de uma distribuição normal.
O que fazer com dados não normais
Se um determinado conjunto de dados não for distribuído normalmente, muitas vezes podemos realizar uma das seguintes transformações para torná-lo mais normal:
1. Transformação de log: transforme a variável de resposta de y em log(y) .
2. Transformação de raiz quadrada: Transforme a variável de resposta de y em √y .
3. Transformação da raiz cúbica: transforme a variável de resposta de y em y 1/3 .
Ao realizar essas transformações, a variável resposta geralmente se aproxima da distribuição normal.
Confira este tutorial para ver como realizar essas transformações na prática.
Recursos adicionais
Como realizar um teste de Anderson-Darling em R
Como realizar um teste de Kolmogorov-Smirnov em R
Como realizar um teste Shapiro-Wilk em Python