library(tidyverse)
library(patchwork)Evidenciando normalidade nos dados
0 Pacotes necessários
1 Leitura dos dados (simulados)
Um estudo hidrológico foi conduzido em uma bacia hidrográfica para analisar o comportamento diário de um rio ao longo de dois anos. Diversas variáveis foram observadas e registradas para entender melhor a dinâmica da bacia hidrográfica. São elas:
precipitação: quantidade de chuva, em milímetros.vazão: vazão do rio, em m³/s.nivel: nível do rio, em centímetros.temperatura: temperatura máxima, em º Celsius.sedicao: quantidade de sedimentos em suspensão na água do rio, em g/L.qualidade: qualidade da água, um escore que varia com os valores 0, 1, …, 10.
# Leitura dos dados
## Endereço:
path <- paste0("G:/Outros computadores/Meu laptop/Notas de aula/0 - Turmas/2023.2/4 - EST0114 - Métodos estatísticos/5 - Evidenciando normalidade nos dados/dados.txt")
# OBS: Coloque o endereço no qual se encontram os dados no seu computador.
# Leitura
dados <- read.table(path, header = TRUE)
head(dados) precipitacao vazao nivel temperatura sedicao qualidade
1 3.166816 8.151199 121.6691 21.50232 8.237985 9
2 4.244246 9.478704 162.8197 23.44434 8.953188 9
3 2.888614 13.233271 171.0115 23.07603 7.402970 7
4 6.121723 8.340568 164.2116 21.86115 7.654860 8
5 4.438245 6.444171 161.9023 21.83808 6.219035 4
6 2.908777 8.035518 136.8973 22.63912 5.860561 7
# Disponibilização das colunas
attach(dados)2 A distribuição normal
Recorde que a distribuição normal é um modelo de probabilidade contínuo, que é especificado por uma função densidade de probabilidade.
Se \(X\) é uma variável aleatória com média \(\mu \in \mathbb{R}\) e variância \(\sigma^2 > 0\), então a função densidade de probabilidade de \(X\) é dada por
\[ f(x) = \dfrac{1}{\sqrt{2\pi \sigma^2 }}\exp\left\{-\dfrac{(x-\mu)^2}{2\sigma^2 }\right\}, \quad x \in \mathbb{R}. \]
A densidade da distribuição normal é caracterizada por ser uma distribuição simétrica em torno de \(\mu\). O gráfico abaixo apresenta a função \(f(x)\) para algumas combinações dos valores dos parâmetros \(\mu\) e \(\sigma\).
g1 <- tibble(x = seq(-10, 10, 0.01)) %>%
expand(x, mu = seq(-3, 3, length.out = 10)) %>%
mutate(fx1 = map2(x, mu, dnorm)) %>%
unnest(fx1) %>%
ggplot(aes(x = x, y = fx1, group = mu, color = mu)) +
theme_classic() +
geom_line() +
scale_color_gradient(low = "#56B1F7",
high = "#132B43") +
labs(y = expression(f(x)), x = "x",
color = expression(mu * " "))
f <- function(x, sigma) dnorm(x, 0, sigma)
g2 <- tibble(x = seq(-10, 10, 0.01)) %>%
expand(x, sigma = seq(1, 3, length.out = 10)) %>%
mutate(fx1 = map2(x, sigma, f)) %>%
unnest(fx1) %>%
ggplot(aes(x = x, y = fx1, group = sigma, color = sigma)) +
theme_classic() +
geom_line() +
scale_color_gradient(low = "#56B1F7",
high = "#132B43") +
labs(y = expression(f(x)), x = "x",
color = expression(sigma * " "))
g1 + g2Note que, o aumento dos valores de \(\mu\), para \(\sigma\) fixado, causa um deslocamento na distribuição sem alterações na dispersão. Parâmetros com esse comportamento são denominados de parâmetros de localização. Por outro lado, o aumento dos valores de \(\sigma\), para \(\mu\) fixado, causa um aumento na variabilidade da distribuição. Parâmetros com esse comportamento são chamados de parâmetros de dispersão.
O valor esperado e a variância de \(X \sim \textrm{N} (\mu, \sigma^2)\) são dados por:
\[ \textrm{E}(X)= \mu, \quad \textrm{e} \quad \textrm{Var}(X)= \sigma^2 \]
2.1 A distribuição normal no R
No R, as distribuições de probabilidade são implementadas com base em quatro funções:
função densidade (caso contínuo) ou função de probabilidade (caso discreto);
função de distribuição acumulada;
função quantílica (quantis);
gerador de números aleatórios.
Cada distribuição possui uma abreviação particular e as quatro funções mencionadas acima são chamadas, respectivamente: utilizando os prefixos “d”, “p”, “q” e “r” juntamente com a abreviação.
No R, a distribuição normal possui a abreviação norm. Assim, a função densidade de probabilidade é acessada através da função dnorm(x, mean, sd); a função de distribuição acumulada pela pnorm(q, mean, sd); a função quantílica pela qnorm(p, mean, sd) e o gerador de números aleatórios pela função rnorm(n, mean, sd). Os argumentos mean e sd são os valores de \(\mu\) e \(\sigma\) (não confundir com a variância). Para mais detalhes, veja a documentação com ?dnorm.
A figura abaixo mostra três amostras simuladas da distribuição normal com médias 0, mas com desvios padrão variando em 0,5; 1 e 2. Também é comparado o histograma (em escala de densidade!) com a densidade da qual os dados foram gerados.
par(mfrow = c(1, 3))
x1 <- rnorm (1000, 0, 0.5)
hist(x1, prob = TRUE, main = expression(sigma == 0.5),
xlim = c(-5, 5), ylim = c(0, 0.8), col = "white")
curve(dnorm(x, 0, 0.5), add = TRUE, col = "blue", lwd = 2)
x2 <- rnorm (1000, 0, 1)
hist(x2, prob = TRUE, main = expression(sigma == 1),
xlim = c(-5, 5), ylim = c(0, 0.8), col = "white")
curve(dnorm(x, 0, 1), add = TRUE, col = "blue", lwd = 2)
x3 <- rnorm (1000, 0, 2)
hist(x3, prob = TRUE, main = expression(sigma == 2),
xlim = c(-5, 5), ylim = c(0, 0.8), col = "white")
curve(dnorm(x, 0, 2), add = TRUE, col = "blue", lwd = 2)par(mfrow = c(1, 1))2.2 Ajuste de um modelo normal
De forma geral, o termo ``ajustar um modelo aos dados’’ se refere ao procedimento de assumir um modelo estatístico e estimar os seus parâmetros com base na amostra coletada. Os modelos estatísticos descrevem (modelam) fenômenos aleatórios, e podem ser utilizados para calcular probabilidades, fazer previsões, evidenciar relações entre variáveis, etc.
Em particular, assumir normalidade para uma variável (quantitativa) em um banco de dados, implicitamente definine uma variável aleatória \(X\) que irá descrever o experimento aleatório de observar a variável de interesse, de modo que
\[ X\sim N(\mu, \sigma^2), \]
sendo \(\mu\) e \(\sigma\) parâmetros do modelo normal que devem ser estimados com base na amostra.
Assumimos então que temos uma amostra aleatória (a.a.) de tamanho \(n\) de \(X\), isto é,
\[ X_1, \ldots, X_n \textrm{ a.a. de } X \sim N(\mu,\sigma^2). \]
Lembre que o conceito de amostra aleatória implica necessariamente em supor que os dados são independentes e que cada \(X_i\) possui a mesma distribuição de \(X\) (i.e., assume-se que a variável não depende de nenhum outro fator externo).
Existem diferentes métodos de estimação de parâmetros na literatura estatística, como o método dos momentos, máxima verossimilhança, estimador de Bayes, estimador minimax, entre outros. Sem mencionar métodos gerais de estimação, é natural pensar que os estimadores para \(\mu\) (média de \(X\)) e \(\sigma\) (desvio padrão de \(X\)) são dados pela média e desvio padrão amostral:
\[ \overline{X}=\dfrac{1}{n}\sum_{i=1}^n X_i \quad \textrm{e} \quad S=\sqrt{\dfrac{1}{n-1}\sum_{i=1}^n(X_i - \overline{X})^2}. \]
OBS: No R, a média amostral está implementada na função mean() e o desvio padrão amostral na função sd().
2.2 Ajuste de um modelo normal
De forma geral, o termo ``ajustar um modelo aos dados’’ se refere ao procedimento de assumir um modelo estatístico e estimar os seus parâmetros com base na amostra coletada. Os modelos estatísticos descrevem (modelam) fenômenos aleatórios, e podem ser utilizados para calcular probabilidades, fazer previsões, evidenciar relações entre variáveis, etc.
Em particular, assumir normalidade para uma variável (quantitativa) em um banco de dados, implicitamente definine uma variável aleatória \(X\) que irá descrever o experimento aleatório de observar a variável de interesse, de modo que
\[ X\sim N(\mu, \sigma^2), \]
sendo \(\mu\) e \(\sigma\) parâmetros do modelo normal que devem ser estimados com base na amostra.
Assumimos então que temos uma amostra aleatória (a.a.) de tamanho \(n\) de \(X\), isto é,
\[ X_1, \ldots, X_n \textrm{ a.a. de } X \sim N(\mu,\sigma^2). \]
Lembre que o conceito de amostra aleatória implica necessariamente em supor que os dados são independentes e que cada \(X_i\) possui a mesma distribuição de \(X\) (i.e., assume-se que a variável não depende de nenhum outro fator externo).
Existem diferentes métodos de estimação de parâmetros na literatura estatística, como o método dos momentos, máxima verossimilhança, estimador de Bayes, estimador minimax, entre outros. Sem mencionar métodos gerais de estimação, é natural pensar que os estimadores para \(\mu\) (média de \(X\)) e \(\sigma\) (desvio padrão de \(X\)) são dados pela média e desvio padrão amostral:
\[ \overline{X}=\dfrac{1}{n}\sum_{i=1}^n X_i \quad \textrm{e} \quad S=\sqrt{\dfrac{1}{n-1}\sum_{i=1}^n(X_i - \overline{X})^2}. \]
OBS: No R, a média amostral está implementada na função mean() e o desvio padrão amostral na função sd().
3 Evidenciando normalidade por meio de gráficos
3.1 Histograma
Uma primeira opção para evidenciar normalidade nos dados é fazer o histograma. É esperado que o histograma reflita o comportamento da variável na população. Portanto, se os dados possuem distribuição normal, é esperado que o histograma seja aproximadamente simétrico em torno da média amostral, com decaimento das caudas compatível com o modelo Gaussiano (sim, podemos ter distribuições simétricas com decaimento de caudas diferentes dos da distribuição normal, e essa característica está relacionada com o conceito de curtose).
A figura abaixo mostra os histogramas (em escala da densidade!!) para as variáveis contínuas observadas e o gráfico de barras para a variável discreta.
par(mfrow = c(2, 3))
hist(precipitacao, prob = TRUE, xlab = "Precipitação (mm)",
ylab = "Densidade", main = " ", col = "white")
hist(vazao, prob = TRUE, xlab = "Vazão (m³/s)",
ylab = "Densidade", main = " ", col = "white")
hist(nivel, prob = TRUE, xlab = "Nível (cm)",
ylab = "Densidade", main = " ", col = "white")
hist(temperatura, prob = TRUE, xlab = "Temperatura (°C)",
ylab = "Densidade", main = " ", col = "white")
hist(sedicao, prob = TRUE, xlab = "Sedição (g/L)",
ylab = "Densidade", main = " ", col = "white")
barplot(prop.table(table(qualidade)), col = "white",
xlab = "Qualidade", ylab = "Proporção")par(mfrow = c(1, 1))Comente sobre o tipo de assimetria de cada uma das seguintes variáveis:
Precipitação:
Vazão:
Nível:
Temperatura:
Sedição:
Podemos dizer que todas as variáveis coletadas são normalmente distribuídas? Justifique.
Para uma melhor comparação, podemos ajustar um modelo normal a cada variável e comparar o ajuste com o histograma. Em nosso contexto, vamos assumir normalidade para cada uma das variáveis no banco de dados.
Considere as seguintes variáveis aleatórias:
\[\begin{align*} P & \sim N(\mu_p, \sigma^2_p) \quad & V & \sim N(\mu_v, \sigma^2_v) \\ N & \sim N(\mu_n, \sigma^2_n) \quad & T & \sim N(\mu_t, \sigma^2_t)\\ S & \sim N(\mu_s, \sigma^2_s) \quad & Q & \sim N(\mu_q, \sigma^2_q) \end{align*}\]Os parâmetros de cada modelo devem ser estimados com base na amostra coletada. Assumimos então que temos uma a.a. de cada variável aleatória definida, isto é,
\[\begin{align*} P_1, \ldots, P_{730} & \textrm{ a.a. de } P\\ V_1, \ldots, V_{730} & \textrm{ a.a. de } V\\ N_1, \ldots, N_{730} & \textrm{ a.a. de } N\\ T_1, \ldots, T_{730} & \textrm{ a.a. de } T\\ S_1, \ldots, S_{730} & \textrm{ a.a. de } S\\ Q_1, \ldots, Q_{730} & \textrm{ a.a. de } Q \end{align*}\]A figura abaixo mostra a comparação dos histogramas amostrais e as densidades ajustadas.
par(mfrow = c(2, 3))
# Precipitação -------------------------------------------------------------------
## Estimativas
mp.h <- mean(precipitacao)
sp.h <- sd(precipitacao)
## Comparação
hist(precipitacao, prob = TRUE, main = " ", col = "white",
xlab = "Precipitação (mm)", ylab = "Densidade")
curve(dnorm(x, mp.h, sp.h), col = "blue", add = TRUE, lwd = 2)
# Vazão --------------------------------------------------------------------------
## Estimativas
mv.h <- mean(vazao)
sv.h <- sd(vazao)
## Comparação
hist(vazao, prob = TRUE, main = " ", col = "white",
xlab = "Vazão (m³/s)", ylab = "Densidade", xlim = c(0, 20))
curve(dnorm(x, mv.h, sv.h), col = "blue", add = TRUE, lwd = 2)
# Nível --------------------------------------------------------------------------
## Estimativas
mn.h <- mean(nivel)
sn.h <- sd(nivel)
## Comparação
hist(nivel, prob = TRUE, main = " ", col = "white",
xlab = "Nível (cm)", ylab = "Densidade")
curve(dnorm(x, mn.h, sn.h), col = "blue", add = TRUE, lwd = 2)
# Temperatura --------------------------------------------------------------------
## Estimativas
mt.h <- mean(temperatura)
st.h <- sd(temperatura)
## Comparação
hist(temperatura, prob = TRUE, main = " ", col = "white",
xlab = "Temperatura (°C)", ylab = "Densidade", xlim = c(18, 26))
curve(dnorm(x, mt.h, st.h), col = "blue", add = TRUE, lwd = 2)
# Sedição ------------------------------------------------------------------------
## Estimativas
ms.h <- mean(sedicao)
ss.h <- sd(sedicao)
## Comparação
hist(sedicao, prob = TRUE, main = " ", col = "white",
xlab = "Sedição (g/L)", ylab = "Densidade", xlim = c(0, 12))
curve(dnorm(x, ms.h, ss.h), col = "blue", add = TRUE, lwd = 2)
# Qualidade ----------------------------------------------------------------------
## Estimativas
mq.h <- mean(qualidade)
sq.h <- sd(qualidade)
## Comparação
hist(qualidade, prob = TRUE, main = " ", col = "white",
xlab = "Qualidade da água", ylab = "Densidade", xlim = c(1, 13))
curve(dnorm(x, mq.h, sq.h), col = "blue", add = TRUE, lwd = 2)par(mfrow = c(1, 1))Os modelos normais ajustados parecem ser adequados para todas as variáveis observadas?
Caso não se adeque bem a todas, na sua opinião, em quais variáveis o modelo normal se ajusta bem?
3.2 Função de distribuição acumulada empírica
Outro gráfico que podemos utilizar para evidenciar normalidade dos dados é o gráfico da função de distribuição acumulada empírica.
Para observações \(x_1, x_2, \ldots, x_n\), a função de distribuição acumulada empírica \(F_n\) é a proporção de observações menores do que ou iguais a \(t \in \mathbb{R}\), isto é, \[ F_n(t) = \dfrac{\#\{x_i \leqslant t \}}{n} = \dfrac{1}{n} \sum_{i=1}^n I(x_i \leqslant t), \quad t \in \mathbb{R}. \] No R, \(F_n\) está implementada na função ecdf() (veja a documentação com ?ecdf).
É esperado que a função de distribuição acumulada empírica reflita o comportamento da função de distribuição acumulada da variável observada na população (de forma análoga ao que vimos com o histograma). Portanto, se assumimos normalidade para os dados, podemos comparar as funções de distribuição acumulada empírica e ajustada para avaliar a qualidade do ajuste.
Os gráficos abaixo mostram essa comparação para os dados de hidrologia:
par(mfrow = c(2, 3))
# Precipitação -------------------------------------------------------------------
plot(ecdf(precipitacao), xlab = "Precipitação (mm)", main = " ")
curve(pnorm(x, mp.h, sp.h), col = "blue", add = TRUE, lwd = 2)
# Vazão --------------------------------------------------------------------------
plot(ecdf(vazao), xlab = "Vazão (m³/s)", main = " ")
curve(pnorm(x, mv.h, sv.h), col = "blue", add = TRUE, lwd = 2)
# Nível --------------------------------------------------------------------------
plot(ecdf(nivel), xlab = "Nível (cm)", main = " ")
curve(pnorm(x, mn.h, sn.h), col = "blue", add = TRUE, lwd = 2)
# Temperatura --------------------------------------------------------------------
plot(ecdf(temperatura), xlab = "Temperatura (°C)", main = " ")
curve(pnorm(x, mt.h, st.h), col = "blue", add = TRUE, lwd = 2)
# Sedição ------------------------------------------------------------------------
plot(ecdf(sedicao), xlab = "Sedição (g/L)", main = " ")
curve(pnorm(x, ms.h, ss.h), col = "blue", add = TRUE, lwd = 2)
# Qualidade ----------------------------------------------------------------------
plot(ecdf(qualidade), xlab = "Qualidade", main = "")
curve(pnorm(x, mq.h, sq.h), col = "blue", add = TRUE, lwd = 2)par(mfrow = c(1, 1))Os modelos normais ajustados parecem ser adequados para todas as variáveis observadas?
Caso não se adeque bem a todas, na sua opinião, em quais variáveis o modelo normal se ajusta bem?
3.3 Gráfico quantil-quantil (QQ plot)
O gráfico quantil-quantil (QQ plot ou gráfico QQ) é uma ferramenta útil e bastante utilizada para verificar o ajuste de uma distribuição aos dados observados. Ele é o gráfico mais indicado para verificar o ajuste de uma distribuição em um conjunto de dados (mais indicado do que o histograma e função de distribuição acumulada empírica), principalmente quando o tamanho da amostra não é muito grande.
Apesar de muito usado, poucos usuários conhecem o procedimento para fazê-lo e interpretá-lo. O procedimento é simples e pode ser estendido para outras distribuições de probabilidade, não apenas para a distribuição normal.
De forma geral, sejam \(x_1, x_2, \ldots, x_n\) uma amostra de tamanho \(n\) de uma variável de interesse. Seja \(X\) a variável aleatória que descreve esses dados, em que assumimos que \(X\) segue uma determinada distribuição de probabilidade com função de distribuição acumulada \(F\).
Os passos para a construção do QQ plot são
Obter os quantis empíricos (amostrais):
Os quantis empíricos (amostrais), digamos \(qe_1, qe_2, \ldots, qe_n\) são os próprios dados ordenados\(x_{(1)}, x_{(2)}, \ldots, x_{(n)}\), isto é,
\[ qe_i = x_{(i)}, \quad i = 1,2,\ldots,n. \]
Obter os quantis teóricos (ajustados):
Os quantis ``teóricos’’ (no nosso caso, quantis ajustados) são obtidos como\[ qt_i=F^{-1}\left(\dfrac{i-0,5}{n}\right), \quad i = 1,2,\ldots,n. \]
OBS: Se \(F\) depender de parâmetros desconhecidos, eles devem ser estimados com base na amostra.A expressão
\[ \dfrac{i-0,5}{n} \]
é uma das formas de calcular a posição do quantil em um banco de dados de tamanho \(n\) que deixa \(100 \times i/n \%\) dos dados abaixo dele. Não existe uma fórmula única para obter essas posições. Por exemplo, algumas outras opções são
\(\dfrac{i}{n}\)
\(\dfrac{i}{n+1}\)
\(\dfrac{i-0,3}{n + 0,4}\)
\(\dfrac{i - 1/3}{n + 1/3}\)
entre outras.
Fazer o gráfico:
É feito um gráfico de dispersão entre \(qt_i\) e \(qe_i\), e uma reta de referência é criada Essa reta pode ser a reta \(f(x)=x\) ou a reta que passa pelo primeiro e terceiro quartil dos dados observados.
Manualmente:
qe <- sort(precipitacao)
qt <- qnorm( (1:730 - 0.5) / 730, mean = mp.h, sd = sp.h)
plot(qt, qe, pch = 16, cex = 0.8,
xlab = "Quantil teórico", ylab = "Quantil empírico")
abline(0, 1, col = 4, lwd = 2) # Reta f(x) = xSe o modelo assumido se ajusta bem aos dados, é esperado que os pontos no gráfico estejam próximos da reta de referência.
No R, o QQ plot, especificamente para evidenciar normalidade, está implementado na função qqnorm() (veja a documentação com ?qqnorm). Entretanto, essa função assume que os dados seguem uma distribuição normal padrão.
Na prática, ela é utilizada indiscriminadamente para outras distribuições normais, o que não deveria ser feito, mas é aceitável pois qualquer distribuição normal pode ser obtida da normal padrão por transformações lineares. Neste caso, a reta de referência necessariamente deve ser a que passa pelo primeiro e terceiro quartis dos dados, que é a qqline().
qqnorm(precipitacao, pch = 16, cex = 0.8)
qqline(precipitacao, col = 4, lwd = 2)Os QQ-plot’s para os dados de hidrologia podem ser visualizados abaixo:
par(mfrow = c(2, 3))
# Precipitação -------------------------------------------------------------------
qqnorm(precipitacao, pch = 16)
qqline(precipitacao, lwd = 2, col = 4)
# Vazão --------------------------------------------------------------------------
qqnorm(vazao, pch = 16)
qqline(vazao, lwd = 2, col = 4)
# Nível --------------------------------------------------------------------------
qqnorm(nivel, pch = 16)
qqline(nivel, lwd = 2, col = 4)
# Temperatura --------------------------------------------------------------------
qqnorm(temperatura, pch = 16)
qqline(temperatura, lwd = 2, col = 4)
# Sedição ------------------------------------------------------------------------
qqnorm(sedicao, pch = 16)
qqline(sedicao, lwd = 2, col = 4)
# Qualidade ----------------------------------------------------------------------
qqnorm(qualidade, pch = 16)
qqline(qualidade, lwd = 2, col = 4)par(mfrow = c(1, 1))Os modelos normais ajustados parecem se adequar bem a todas as variáveis observadas?
Compare o comportamento do QQ plot de acordo com tipo de assimetria visto nos histogramas.
4 Testes não paramétricos de normalidade
Muitos usuários preferem realizar um teste de normalidade ao invés vez de examinar o QQ plot. Em geral, isso ocorre por duas razões:
Hábito: Os usuários estão acostumados a utilizar aplicativos de análise de dados que não oferecem recursos gráficos e conduzem suas análises sem visualizar os dados em um gráfico.
Subjetividade da análise gráfica: A interpretação dos QQ plot pode ser subjetiva, e nem todos os QQ plots são fáceis de analisar.
A seguir, apresentaremos alguns testes não paramétricos de normalidade.
Em geral, os testes não paramétricos são procedimentos de teste de hipóteses estatísticas que não assumem um modelo paramétrico para os dados observados para a sua construção. Em particular, os testes de normalidade têm como objetivo testar as seguintes hipóteses:
\[\begin{align*} H_0: & \textrm{ os dados seguem uma distribuição normal}\\ H_1: & \textrm{ os dados não seguem uma distribuição normal} \end{align*}\]4.1 O teste de Kolmogorov-Smirnov
O Teste de Kolmogorov-Smirnov é um dos testes não paramétricos mais comuns para avaliar a normalidade dos dados. A estatística do teste é baseada na comparação entre as funções de distribuição empírica e ajustada:
\[ D = \max_i \left[ \max \left( F(x_{(i)}) - \frac{i}{n}, \frac{i}{n} - F(x_{(i-1)}) \right) \right]. \]
Note que \(D\) representa a maior diferença absoluta entre a função de distribuição empírica e a função de distribuição ajustada. Quanto maior o valor de \(D\), maior a evidência contra a hipótese nula.
No R, a função para realizar o teste de normalidade de Kolmogorov-Smirnov é a função ks.test(). Nela, ainda é necessário especificar qual o modelo ajustado. Veja a documentação em ?ks.test.
O teste de Kolmogorov-Smirnov para cada uma das variáveis do banco de dados de hidrologia pode ser visualizado abaixo:
# Precipitação -------------------------------------------------------------------
ks.test(precipitacao, "pnorm", mean = mp.h, sd = sp.h)
Asymptotic one-sample Kolmogorov-Smirnov test
data: precipitacao
D = 0.028653, p-value = 0.5867
alternative hypothesis: two-sided
# Vazão --------------------------------------------------------------------------
ks.test(vazao, "pnorm", mean = mv.h, sd = sv.h)
Asymptotic one-sample Kolmogorov-Smirnov test
data: vazao
D = 0.070764, p-value = 0.001336
alternative hypothesis: two-sided
# Nível --------------------------------------------------------------------------
ks.test(nivel, "pnorm", mean = mn.h, sd = sn.h)
Asymptotic one-sample Kolmogorov-Smirnov test
data: nivel
D = 0.045832, p-value = 0.09313
alternative hypothesis: two-sided
# Temperatura --------------------------------------------------------------------
ks.test(temperatura, "pnorm", mean = mt.h, sd = st.h)
Asymptotic one-sample Kolmogorov-Smirnov test
data: temperatura
D = 0.086533, p-value = 3.573e-05
alternative hypothesis: two-sided
# Sedição ------------------------------------------------------------------------
ks.test(sedicao, "pnorm", mean = ms.h, sd = ss.h)
Asymptotic one-sample Kolmogorov-Smirnov test
data: sedicao
D = 0.066912, p-value = 0.002898
alternative hypothesis: two-sided
# Qualidade ----------------------------------------------------------------------
ks.test(qualidade, "pnorm", mean = mq.h, sd = sq.h)
Asymptotic one-sample Kolmogorov-Smirnov test
data: qualidade
D = 0.18368, p-value < 2.2e-16
alternative hypothesis: two-sided
- Quais as conclusões de cada teste? Considere um nível de significância de 5%.
OBS: O Teste de Kolmogorov-Smirnov é amplamente utilizado, mas é sensível ao tamanho da amostra. Para amostras pequenas, pode ser menos poderoso na detecção de desvios da normalidade.
4.2 O teste de Shapiro-Wilk
O teste de Shapiro-Wilk é outro teste amplamente utilizado para avaliar a normalidade dos dados. Ao contrário do teste de Kolmogorov-Smirnov, o teste de Shapiro-Wilk é adequado para amostras de tamanho pequeno a moderado. A estatística do teste é baseada na comparação entre os valores observados e as estimativas dos parâmetros de uma distribuição normal.
A estatística de teste de Shapiro-Wilk é definida da seguinte forma:
\[ W = \dfrac{\left(\sum_{i=1}^n a_i x_{(i)}\right)^2}{\sum_{i=1}^n (x_{(i)} - \overline{x})^2}, \]em que \(x_{(1)}, x_{(2)}, \ldots, x_{(n)}\) são os dados observados ordenados, \(\overline{x}\) é a média amostral, e \(a_i\) são coeficientes de ponderação.
Os coeficientes de ponderação \(a_i\) são usados para ajustar a estatística do teste de forma que ela seja sensível a desvios da normalidade em diferentes partes da distribuição dos dados. A ideia por trás desses coeficientes é considerar que as violações da normalidade podem ocorrer em diferentes regiões da distribuição e, portanto, os desvios em áreas mais distantes da média podem ser mais relevantes.
É possível mostrar que \(W\) é um valor entre \(0\) e \(1\), em que quanto mais próximo zero, maior é a evidência contra a hipótese nula de normalidade.
No R, a função para realizar o teste de normalidade de Shapiro-Wilk é a função shapiro.test(). Veja a documentação em ?shapiro.test.
O teste de Shapiro-Wilk para cada uma das variáveis do banco de dados de hidrologia pode ser visualizado abaixo:
# Precipitação -------------------------------------------------------------------
shapiro.test(precipitacao)
Shapiro-Wilk normality test
data: precipitacao
W = 0.99837, p-value = 0.7365
# Vazão --------------------------------------------------------------------------
shapiro.test(vazao)
Shapiro-Wilk normality test
data: vazao
W = 0.97, p-value = 4.38e-11
# Nível --------------------------------------------------------------------------
shapiro.test(nivel)
Shapiro-Wilk normality test
data: nivel
W = 0.95824, p-value = 1.494e-13
# Temperatura --------------------------------------------------------------------
shapiro.test(temperatura)
Shapiro-Wilk normality test
data: temperatura
W = 0.95514, p-value = 4.007e-14
# Sedição ------------------------------------------------------------------------
shapiro.test(sedicao)
Shapiro-Wilk normality test
data: sedicao
W = 0.96235, p-value = 9.465e-13
# Qualidade ----------------------------------------------------------------------
shapiro.test(qualidade)
Shapiro-Wilk normality test
data: qualidade
W = 0.89732, p-value < 2.2e-16
- Quais as conclusões de cada teste, ao nível de significância de 5%? São as mesmas do teste de Kolmogorov-Smirnov?