Relatório de Análise de Dados – EST 128

Autor

Grupo 6

library(dplyr)
library(ggplot2)
library(plotly)
library(fdth)
library(boot)

1 Identificação do grupo

  • Disciplina: EST 128 – Pacotes Estatísticos II
  • Grupo: 6
  • Integrantes: Ana Luiza, João Manuel, Luciano Gomes e Kênia Souza
  • Base de dados utilizada: grupo6_monitoramento_ambiental.csv

2 1. Introdução

A qualidade da água em bacias hidrográficas é influenciada por fatores climáticos e pelo uso do solo em seu entorno. Este relatório analisa uma base de dados de monitoramento ambiental contendo 100 amostras coletadas em três bacias hidrográficas (B1, B2 e B3), durante os períodos seco e chuvoso, e em diferentes tipos de uso do solo (floresta, agropecuária e urbano).

Foram registradas, em cada amostra, volume de chuva acumulada nos 7 dias anteriores, turbidez, pH, oxigênio dissolvido, condutividade e a classificação da água como crítica ou adequada.

O objetivo desta análise é descrever os dados, identificar padrões e relações entre as variáveis ambientais e aplicar métodos estatísticos adequados para avaliar a qualidade da água em diferentes condições.

3 2. Leitura e inspeção inicial da base

library(dplyr)
library(ggplot2)

dados <- read.csv("grupo6_monitoramento_ambiental.csv", stringsAsFactors = FALSE)

head(dados)
  id_amostra bacia estacao     uso_solo chuva_7dias_mm turbidez_ntu   ph
1          1    B2 Chuvosa       Urbano           98.0         29.3 6.87
2          2    B2 Chuvosa Agropecuaria          176.5         38.7 6.97
3          3    B1 Chuvosa       Urbano           95.9         44.6 6.93
4          4    B3 Chuvosa Agropecuaria          117.0         30.2 7.41
5          5    B1    Seca     Floresta           12.4          4.2 7.20
6          6    B2    Seca     Floresta           82.0         16.2 6.63
  oxigenio_dissolvido condutividade qualidade_agua
1                6.86          89.8        Critica
2                6.42          91.8        Critica
3                6.38          92.8        Critica
4                5.95          88.5        Critica
5                8.70         107.6       Adequada
6                7.97          68.8       Adequada
dim(dados)
[1] 100  10
names(dados)
 [1] "id_amostra"          "bacia"               "estacao"            
 [4] "uso_solo"            "chuva_7dias_mm"      "turbidez_ntu"       
 [7] "ph"                  "oxigenio_dissolvido" "condutividade"      
[10] "qualidade_agua"     
str(dados)
'data.frame':   100 obs. of  10 variables:
 $ id_amostra         : int  1 2 3 4 5 6 7 8 9 10 ...
 $ bacia              : chr  "B2" "B2" "B1" "B3" ...
 $ estacao            : chr  "Chuvosa" "Chuvosa" "Chuvosa" "Chuvosa" ...
 $ uso_solo           : chr  "Urbano" "Agropecuaria" "Urbano" "Agropecuaria" ...
 $ chuva_7dias_mm     : num  98 176.5 95.9 117 12.4 ...
 $ turbidez_ntu       : num  29.3 38.7 44.6 30.2 4.2 16.2 30.7 37.6 11.4 10 ...
 $ ph                 : num  6.87 6.97 6.93 7.41 7.2 6.63 7.38 7.32 8 6.51 ...
 $ oxigenio_dissolvido: num  6.86 6.42 6.38 5.95 8.7 7.97 7.07 6.19 8.42 7.07 ...
 $ condutividade      : num  89.8 91.8 92.8 88.5 107.6 ...
 $ qualidade_agua     : chr  "Critica" "Critica" "Critica" "Critica" ...
summary(dados)
   id_amostra        bacia             estacao            uso_solo        
 Min.   :  1.00   Length:100         Length:100         Length:100        
 1st Qu.: 25.75   Class :character   Class :character   Class :character  
 Median : 50.50   Mode  :character   Mode  :character   Mode  :character  
 Mean   : 50.50                                                           
 3rd Qu.: 75.25                                                           
 Max.   :100.00                                                           
 chuva_7dias_mm    turbidez_ntu         ph        oxigenio_dissolvido
 Min.   : 12.40   Min.   : 1.00   Min.   :5.950   Min.   :5.070      
 1st Qu.: 83.05   1st Qu.:20.70   1st Qu.:6.620   1st Qu.:6.702      
 Median :124.35   Median :28.90   Median :6.910   Median :7.180      
 Mean   :119.42   Mean   :26.68   Mean   :6.857   Mean   :7.214      
 3rd Qu.:154.72   3rd Qu.:34.10   3rd Qu.:7.070   3rd Qu.:7.825      
 Max.   :217.90   Max.   :52.70   Max.   :8.000   Max.   :9.550      
 condutividade    qualidade_agua    
 Min.   : 31.30   Length:100        
 1st Qu.: 68.22   Class :character  
 Median : 82.35   Mode  :character  
 Mean   : 80.77                     
 3rd Qu.: 95.70                     
 Max.   :132.50                     

A base de dados é composta por 100 observações e 10 variáveis. A variável id_amostra é apenas um identificador e não será utilizado nas análises. As variáveis bacia, estacao, uso_solo e qualidade_agua são qualitativas, enquanto chuva_7dias_mm, turbidez_ntu, ph, oxigenio_dissolvido e condutividade são quantitativas contínuas. Não foram identificados valores ausentes (NA) em nenhuma das colunas.

Antes de realizar as análises, é necessário converter as variáveis categóricas em fatores, para que sejam tratadas corretamente. Também é recomendado conferir a existência de valores atípicos (outliers).Essas etapas ajudam a garantir resultados mais confiáveis nas análises estatísticas.

4 3. Organização e preparação dos dados

dados_l <- select(dados, -oxigenio_dissolvido,  -condutividade)

head(dados_l)
  id_amostra bacia estacao     uso_solo chuva_7dias_mm turbidez_ntu   ph
1          1    B2 Chuvosa       Urbano           98.0         29.3 6.87
2          2    B2 Chuvosa Agropecuaria          176.5         38.7 6.97
3          3    B1 Chuvosa       Urbano           95.9         44.6 6.93
4          4    B3 Chuvosa Agropecuaria          117.0         30.2 7.41
5          5    B1    Seca     Floresta           12.4          4.2 7.20
6          6    B2    Seca     Floresta           82.0         16.2 6.63
  qualidade_agua
1        Critica
2        Critica
3        Critica
4        Critica
5       Adequada
6       Adequada

Foi utilizado o pacote dplyr para selecionar apenas as variáveis de interesse para as análises. As variàveis oxigenio_dissolvido e condutividade foram removidas da base com a função select(), gerando um novo conjunto de dados (dados_l)

Esta etapa foi realizada para simplificar as análises posteriores, mantendo apenas as variáveis relevantes para os objetivos do estudo e reduzindo informações que não serão utilizadas.

5 4. Análise descritiva univariada

5.1 4.1 Variáveis qualitativas

bacia

p_bacia <-dados_l %>%
  count(bacia) %>%
  mutate(proporcao = round (n / sum(n), 3))
p_bacia
  bacia  n proporcao
1    B1 36      0.36
2    B2 37      0.37
3    B3 27      0.27
ggplot(p_bacia, aes(x = "", y = n, fill = bacia)) +
  geom_col(color = "white") +
  coord_polar(theta = "y") +
  labs(
    title = "Distribuição das amostras por bacia",
    x = NULL,
    y = NULL
  ) +
  theme_void()

A distribuição das 100 amostras entre as três bacias é relativamente equilibrada, com leve predominância de B2 (37 amostras), seguida de B1 (36) e B3 (27).

estacao

p_estacao <-dados_l %>%
  count(estacao) %>%
  mutate(proporcao = round(n / sum(n), 3))
p_estacao
  estacao  n proporcao
1 Chuvosa 59      0.59
2    Seca 41      0.41
ggplot(dados_l, aes(x = estacao)) +
  geom_bar(fill = "lightblue", color = "black") +
  labs(
    title = "Distribuição do Período das Leituras",
    x = "Temporada",
    y = "Frequência"
  ) +
  theme_minimal()

Há mais coletas na estação chuvosa (59 amostras- 59%) do que na seca (41 amostras-41%).

uso_solo

p_uso_solo <-dados_l %>%
  count(uso_solo  ) %>%
  mutate(proporcao = round (n / sum(n), 3))
p_uso_solo
      uso_solo  n proporcao
1 Agropecuaria 40      0.40
2     Floresta 31      0.31
3       Urbano 29      0.29
ggplot(p_uso_solo, aes(x = "", y = n, fill = uso_solo)) +
  geom_col(color = "white") +
  coord_polar(theta = "y") +
  labs(
    title = "Distribuição das amostras por uso do solo",
    x = NULL,
    y = NULL
  ) +
  theme_void()

Predomina o uso agropecuário (40%), seguido de floresta (31%) e urbano (29%).

qualidade_agua

p_qualidade <- dados_l %>%
  count(qualidade_agua) %>%
  mutate(proporcao = round(n / sum(n), 3))

p_qualidade
  qualidade_agua  n proporcao
1       Adequada 40       0.4
2        Critica 60       0.6
ggplot(p_qualidade, aes(x = qualidade_agua, y = n, fill = qualidade_agua)) +
  geom_col() +
  labs(
    title = "Distribuição da qualidade da água",
    x = "Classificação",
    y = "Frequência",
    fill = "Qualidade"
  ) +
  scale_fill_manual(values = c("Adequada" = "darkolivegreen3", "Critica" = "brown")) +
  theme_minimal()

Das 100 amostras analisadas, 60% foram classificadas como crítica e 40% como adequada. Isso indica que predominam amostras com qualidade da água considerada crítica na base de dados.

5.2 4.2 Variáveis quantitativas

chuva_7dias_mm

 mean(dados_l$chuva_7dias_mm)
[1] 119.42
 median(dados_l$chuva_7dias_mm)
[1] 124.35
 sd(dados_l$chuva_7dias_mm)
[1] 49.12237
 IQR(dados_l$chuva_7dias_mm)
[1] 71.675
 summary(dados_l$chuva_7dias_mm)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  12.40   83.05  124.35  119.42  154.72  217.90 
ggplot(dados_l, aes(x = chuva_7dias_mm )) +
  geom_histogram(
    #esse log aq serve pra ver quantas colunas
    bins = ceiling(log2(length(dados_l$chuva_7dias_mm)) + 1),
    fill = "steelblue",
    color = "white"
  ) +
  labs(
    title = "Histograma do Volume de Chuvas dos Últimos 7 Dias",
    x = "Volume de Chuva",
    y = "Frequência"
  ) +
  theme_minimal()

Média de 119,42mm e mediana de 124,35mm (DP aprox. 49,12; IQR aprox. 71,68. A média menor que a mediana sugere leve assimetria à esquerda - valores baixos de chuva são um pouco mais raros que os valores altos.

turbidez_ntu

 mean(dados_l$turbidez_ntu)
[1] 26.68
 median(dados_l$turbidez_ntu)
[1] 28.9
 sd(dados_l$turbidez_ntu)
[1] 11.01217
 IQR(dados_l$turbidez_ntu)
[1] 13.4
 summary(dados_l$turbidez_ntu)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00   20.70   28.90   26.68   34.10   52.70 
ggplot(dados_l, aes(x = turbidez_ntu)) +
  geom_histogram(
    #esse log aq serve pra ver quantas colunas
    bins = ceiling(log2(length(dados_l$turbidez_ntu)) + 1),
    fill = "lightgrey",
    color = "black"
  ) +
  labs(
    title = "Histograma da Turbidez",
    x = "Turbidez (NTU)",
    y = "Frequência"
  ) +
  theme_minimal()

Média de 26,68ntu e mediana de 28,9ntu (DP aprox. 11,01; IQR aprox. 13,40). Mesmo padrão de leve assimétria à esquerda, com dispersão moderada

ph

mean(dados_l$ph)
[1] 6.8575
median(dados_l$ph)
[1] 6.91
sd(dados_l$ph)
[1] 0.3702998
IQR(dados_l$ph)
[1] 0.45
summary(dados_l$ph)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  5.950   6.620   6.910   6.857   7.070   8.000 
ggplot(dados_l, aes(x = ph)) +
  geom_histogram(
    #esse log aq serve pra ver quantas colunas
    bins = ceiling(log2(length(dados_l$ph)) + 1),
    fill = "lightgreen",
    color = "black"
  ) +
  labs(
    title = "Histograma do PH",
    x = "PH",
    y = "Frequência"
  ) +
  theme_minimal()

Média de 6,86 e mediana de 6,91 ((DP aprox. 0,37; IQR aprox. 0,45), bem próximos uma da outra- indicando uma distribuição praticamente simétrica, concentrada perto da neutralidade.

6 5. Análise descritiva bivariada

bacia x qualidade_agua

ggplot(dados_l, aes(x = bacia, fill = qualidade_agua)) +
  geom_bar(position = "fill") +  
  labs(
    title = "Proporção das Classes de Qualidade por Bacia",
    x = "Bacia",
    y = "Proporção",
    fill = "Classificação"
  ) +
  theme_minimal() 

As três bacias apresentam maioria de amostras críticas, mas em proporções um pouco diferentes: B1 (58,3% crítica), B2 (64,9% crítica) e B3(55,6% crítica). B2 é a bacia com maior proporção de amostras críticas.

qualidade_agua x uso_solo, (por bacia)

ggplot(dados_l, aes(x = uso_solo, fill = qualidade_agua)) +
  geom_bar(position = "fill") +  
  facet_wrap(~ bacia) +          
  labs(
    title = "Proporção da Qualidade da Água Por Uso do Solo, Visualizado Por Bacia",
    x = "Uso do Solo",
    y = "Proporção",
    fill = "Qualidade"
  ) +
  theme_minimal()               

O mesmo padrão foi observado nas três bacias. As áreas urbanas apresentaram a maior proporção de água classificada como crítica, enquanto as áreas de floresta apresentam a menor. As áreas agropecuárias ficaram em uma situação intermediária. Esses resultados indicam que o uso do solo está mais relacionado à qualidade da água do que as diferenças entre as bacias.

chuva_7dias_mm x turbidez_ntu

ggplot(dados_l, aes(x = chuva_7dias_mm, y = turbidez_ntu)) +
  geom_point(color = "darkred", size = 3, alpha = 0.8) +
  geom_smooth(method = "lm", se = FALSE, color = "navy", linewidth = 1) +
  labs(
    title = "Chuva acumulada (7 dias) versus turbidez",
    x = "Chuva acumulada em 7 dias (mm)",
    y = "Turbidez (NTU)"
  ) +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Foi observada uma correlação positiva moderada entre a chuva acumulada e a turbidez (r = 0,44; p < 0,001), indicando que maiores volumes de chuva estão associados ao aumento da turbidez da água. Esse resultado sugere que a precipitação contribui para o transporte de sedimentos aos corpos d’água reforçando a relação entre chuva e pior qualidade da água.

chuva_7dias_mm x qualidade_agua (por bacia)

ggplot(dados_l, aes(x = bacia, y = chuva_7dias_mm, fill = qualidade_agua)) + geom_boxplot() + labs(
  title = "Chuva acumulada por bacia e qualidade da água",
  x = "Bacia", 
  y = "Volume de Chuva"
  ) + 
  theme_minimal()+ scale_fill_manual(values = c("Adequada" = "darkolivegreen3", "Critica" = "brown"))

Nas três bacias, as amostras classificadas como críticas apresentaram maior volume de chuva acumulada do que as adequadas . Esse resultado sugere que períodos de maior precipitação podem estar associados à piora da qualidade da água, possivelmente devido ao aumento de transporte de sedimentos e poluentes. Essa hipótese será avaliada na análise inferencial.

7 6. Procedimento inferencial

7.1 6.1 Formulação do problema

A análise univariada mostrou diferenças visuais na turbidez conforme o uso do solo. Formalizamos isso com uma análise de variância (ANOVA) de um fator:

  • H0: a turbidez média é igual entre os três tipos de uso do solo (Floresta, Agropecuária, Urbano);

  • H1: pelo menos um grupo tem turbidez média diferente dos demais.

7.2 6.2 Execução

# Verificação dos pressupostos
dados_l %>% group_by(uso_solo) %>% summarise(shapiro_p = shapiro.test(turbidez_ntu)$p.value)
# A tibble: 3 × 2
  uso_solo     shapiro_p
  <chr>            <dbl>
1 Agropecuaria     0.127
2 Floresta         0.869
3 Urbano           0.566
bartlett.test(turbidez_ntu ~ uso_solo, data = dados_l)

    Bartlett test of homogeneity of variances

data:  turbidez_ntu by uso_solo
Bartlett's K-squared = 7.8534, df = 2, p-value = 0.01971
# ANOVA clássica
anova_turbidez <- aov(turbidez_ntu ~ uso_solo, data = dados_l)
summary(anova_turbidez)
            Df Sum Sq Mean Sq F value  Pr(>F)    
uso_solo     2   1979   989.7   9.575 0.00016 ***
Residuals   97  10026   103.4                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ANOVA de Welch (mais robusta, usada abaixo por causa da heterogeneidade de variância)
oneway.test(turbidez_ntu ~ uso_solo, data = dados_l, var.equal = FALSE)

    One-way analysis of means (not assuming equal variances)

data:  turbidez_ntu and uso_solo
F = 14.069, num df = 2.000, denom df = 63.888, p-value = 8.65e-06
# Comparações pareadas (post-hoc)
pairwise.t.test(dados_l$turbidez_ntu, dados_l$uso_solo, p.adjust.method = "bonferroni")

    Pairwise comparisons using t tests with pooled SD 

data:  dados_l$turbidez_ntu and dados_l$uso_solo 

         Agropecuaria Floresta
Floresta 0.34132      -       
Urbano   0.01035      0.00012 

P value adjustment method: bonferroni 

7.3 6.3 Interpretação

O teste de Shapiro-Wilk não rejeitou a hipótese de normalidade em nenhum grupo (p>0,10), enquanto o teste de Bartlett apontou variâncias heterogêneas entre os grupos (p = 0,034). Mesmo assim, a ANOVA clássica (p = 0,0002) e a ANOVA de Welch (p<0,0001) mostraram diferença significativa na turbidez média entre os tipos de uso do solo. As áreas urbanas apresentaram maior turbidez que as áreas de floresta e agropecuária, enquanto estas não diferiram entre si.

8 7. Simulação numérica ou bootstrap

8.1 7.1 Objetivo da etapa computacional

Como a maior diferença ocorreu entre as áreas urbanas e de floresta, foi aplicado o bootstrap para estimar a diferença média de turbidez entre esses grupos. Esse método foi escolhido porque não depende das suposições de normalidade e igualdade de variâncias, tornando a estimativa mais robusta.

8.2 7.2 Código

set.seed(123)

turbidez_urbano   <- dados_l$turbidez_ntu[dados_l$uso_solo == "Urbano"]
turbidez_floresta <- dados_l$turbidez_ntu[dados_l$uso_solo == "Floresta"]

diff_boot <- replicate(2000, {
  b_urbano   <- sample(turbidez_urbano,   size = length(turbidez_urbano),   replace = TRUE)
  b_floresta <- sample(turbidez_floresta, size = length(turbidez_floresta), replace = TRUE)
  mean(b_urbano) - mean(b_floresta)
})

media_boot <- mean(diff_boot)
dp_boot    <- sd(diff_boot)
ic_boot    <- quantile(diff_boot, probs = c(0.025, 0.975))

media_boot
[1] 11.32473
dp_boot
[1] 2.185424
ic_boot
     2.5%     97.5% 
 7.030887 15.759753 
mean(turbidez_urbano) - mean(turbidez_floresta)
[1] 11.31691

8.3 7.3 Apresentação dos resultados

tibble::tibble(diferenca_boot = diff_boot) %>%
  ggplot(aes(x = diferenca_boot)) +
  geom_histogram(bins = 25, fill = "slateblue", color = "white") +
  geom_vline(xintercept = mean(turbidez_urbano) - mean(turbidez_floresta),
             color = "darkred", linewidth = 1) +
  geom_vline(xintercept = 0, color = "black", linetype = "dashed") +
  labs(title = "Distribuição bootstrap da diferença de médias (Urbano − Floresta)",
       x = "Diferença de médias de turbidez (NTU)", y = "Frequência") +
  theme_minimal()

A diferença média de turbidez entre as áreas urbanas e de floresta foi de 11,32 ntu. O intervalo de confiança bootstrap de 95% não incluiu o zero, confirmando que as áreas urbanas apresentam turbidez significativamente maior que as áreas de floresta. Esse resultado reforça a conclusão obtida pela ANOVA.

9 8. Conclusão

As análises realizadas a partir da utilização de técnicas de estatística descritiva e de diferentes representações gráficas permitiram compreender a distribuição dos dados, identificar padrões e comparar as características das amostras para entender quais fatores e variáveis interferem na qualidade da água.

A preparação adequada dos dados e a seleção das variáveis de interesse contribuíram para tornar as análises mais consistentes e facilitar a interpretação dos resultados.

Do total de 100 amostras de água, 40 foram classificadas como “Adequada” e 60 como “Crítica”. Ao verificarmos as bacias separadamente, temos que a B1 possui 15 amostras, (41,67%) consideradas “Adequada” e 21 amostras (58,33%), avaliadas como “Crítica”. A B2 contém 13 amostras (35,14%), medidas como “Adequada” e 24 amostras (64,86%) classificadas como “Crítica”. Já a B3 apresenta 12 amostras (44,44%) classificadas como “Adequada” e 15 (55,56%) como “Crítica”- sendo, proporcionalmente, a bacia com a maior fração de amostras adequadas, enquanto a B2 concentra a maior fração de amostras críticas.

Ao observarmos a relação entre a estação seca e chuvosa e a classificação da qualidade da água, chegamos ao seguinte resultado: na estação chuvosa,13 amostras foram consideradas adequadas e 46 consideradas críticas. Na estação seca, foram 27 amostras dentro do padrão adequado e 14 em situação crítica. Esse contraste é expressivo e sugere que a estação do ano tem forte relação com a qualidade final da água.

Todas as amostras que tiveram resultado considerado adequado apresentaram índice de turbidez menor ou igual a 24,9 NTU, enquanto as amostras críticas variaram entre 25,5 e 52,7 NTU, com os maiores indicadores concentrados principalmente em áreas de uso do solo urbano ou agropecuário e durante a estação chuvosa.

Esse resultado sugere que, em períodos de maior precipitação, o aumento do transporte de sedimentos ocasionado pelas enxurradas e pela erosão das margens contribui para o aumento da turbidez, que está diretamente relacionada à qualidade da água. Ao observarmos o uso do solo separadamente, notamos que, nas regiões de floresta, a grande maioria das amostras classificadas como “Crítica” (9 das 10) apresentou turbidez entre 25,5 e 42,5 NTU e ocorreu durante a estação chuvosa, havendo apenas um caso isolado na estação seca.

Nas regiões urbanas e ocupadas com agropecuária, a turbidez também foi determinante para a qualidade da água, sendo que a maior parte das amostras consideradas críticas foi coletada durante a estação chuvosa.

Quanto ao pH, a quase totalidade das amostras está dentro da faixa recomendada pela Portaria 2914/11 do Ministério da Saúde (6,0 a 9,5), havendo uma única amostra ligeiramente abaixo do limite inferior (pH = 5,95).

O uso do solo também interfere diretamente nos resultados da qualidade da água: em regiões com agropecuária predomina o resultado crítico, com 25 amostras críticas contra 15 adequadas. Nas áreas de uso urbano, 25 amostras são consideradas críticas e apenas 4 adequadas. Já nas florestas, 21 amostras se classificam como adequadas e apenas 10 como críticas.

Em termos proporcionais, nas regiões de floresta cerca de 68% das amostras se classificam como adequadas; nas regiões de agropecuária, cerca de 37,5%; e no uso do solo urbano, apenas cerca de 14%.

Infere-se que fatores como a estação do ano, o índice de turbidez e o uso do solo exercem influência significativa sobre a qualidade da água, o que evidencia a necessidade de monitoramento mais intenso em áreas urbanas e regiões impactadas pela agropecuária, principalmente durante as estações chuvosas.

10 9. Referências

Material didático da disciplina EST 128 – Pacotes Estatísticos II

Ministério da Saúde. Portaria de Consolidação nº 5/2017, Anexo XX (antiga Portaria 2914/2011).