Capítulo 3 Dados de Qualidade da Água e o Índice de Qualidade da Água (IQA)
Neste capítulo, vamos mergulhar na matéria-prima do nosso trabalho: os dados de qualidade da água. Entenderemos suas características e, crucialmente, como o Índice de Qualidade da Água (IQA) é construído e interpretado.
3.1 Entendendo os Dados de Qualidade da Água
Dados de qualidade da água são tipicamente multi-variados (muitas variáveis medidas) e podem ter dimensões temporais (coletados ao longo do tempo) e espaciais (coletados em diferentes locais).
3.1.1 Parâmetros Comuns do IQA da ANA (Agência Nacional de Águas)
O IQA é um índice que busca traduzir a qualidade da água em um único número, facilitando a comunicação. Ele é composto por nove parâmetros, cada um com um peso e uma curva de qualidade associada:
- Oxigênio Dissolvido (OD): Vital para a vida aquática. Baixos níveis indicam poluição orgânica. (Peso 0.17)
- Coliformes Termotolerantes (CT): Indicador de contaminação fecal, risco de patógenos. (Peso 0.15)
- pH: Mede acidez ou alcalinidade. Valores extremos são prejudiciais. (Peso 0.12)
- Nitrogênio Total (NT): Reflete a presença de nutrientes, pode levar à eutrofização. (Peso 0.10)
- Fósforo Total (PT): Outro nutriente chave para a eutrofização. (Peso 0.10)
- Temperatura: Afeta a solubilidade do OD e a taxa metabólica dos organismos. (Peso 0.10)
- Turbidez: Mede a clareza da água; alta turbidez pode indicar partículas em suspensão. (Peso 0.08)
- Resíduo Total (RT): Sólidos dissolvidos e em suspensão, podem afetar a vida aquática. (Peso 0.08)
- DBO (Demanda Bioquímica de Oxigênio): Quantidade de oxigênio consumida por micro-organismos para decompor matéria orgânica. Alto valor indica poluição orgânica. (Peso 0.10)
Soma dos Pesos: A soma dos pesos para os 9 parâmetros do IQA deve ser igual a 1 (ou 100%).
3.1.2 Desafios na Coleta de Dados
- Dados Faltantes (Missing Data): É comum ter lacunas nos dados devido a problemas nos equipamentos, condições climáticas adversas ou logística.
- Outliers: Valores muito discrepantes que podem indicar erros de medição ou eventos reais, mas extremos.
- Variações Sazonais e Espaciais: A qualidade da água varia naturalmente com as estações do ano e ao longo do curso do rio.
3.2 A Matemática por Trás do IQA
O IQA é calculado pela média ponderada das qualidades de cada parâmetro (\(q_i\)), elevadas aos seus respectivos pesos (\(w_i\)):
\[IQA = \prod_{i=1}^{9} q_i^{w_i}\]
Onde:
- \(q_i\) é a qualidade do i-ésimo parâmetro (valor entre 0 e 100).
- \(w_i\) é o peso correspondente ao i-ésimo parâmetro.
Os valores de \(q_i\) são obtidos a partir de curvas de qualidade específicas para cada parâmetro, que transformam a medição bruta em uma pontuação de qualidade. Ou podemos utilizar as fórmulas proposta por Grunitzki et al. (2013) nos quais apresentamos na tabela 1.
| Variável | Equação | Restrição |
|---|---|---|
| OD(%) | q = 100,8 · exp((od -106)2/-3745) | OD > 140, q = 50 |
| CF(UFC/100mL) | q = 98,03 - 36,45 · (log10(cf)) + 3,138 · (log10)2 + 0,06776·(log10(cf))3 | CF > 105, q = 2 |
| pH | q = 0,05421 · ph(1,23·ph -0,09873·ph2) + 5,213 | pH < 2 Ou pH>12,q=0 |
| DBO(mg/L) | q = 102,6 · exp(-0,1101·dbo) | dbo > 30,q=2 |
| FT(mg/L) | q = 213,7 · exp(-1,68·ft0,3325) | ft > 10,q=2 |
| NT(mg/L) | q = 98,96 · nt(-0,2232 - 0,006457·nt) | nt>100,q=1 |
| TU(NTU) | q = 97,34 · exp(-0,01139 · tu - 0,04917 · &radic,tu) | tu > 100,q=5 |
| ST(mg/L) | q = 80,26 · exp(-0,00107 · st + 0,03009 · √st) -0,1185· st | st > 500, q=20 |
| ΔT | q = 1/(0,0003869· (deltatemp+0,1815)2 + 0,01081) |
deltatemp < -5, q = indefinido; deltatemp > 15,q=9 |
No caso da variável \(OD\), a mensuração no campo é feita em \(mg/L\). Na fórmula a unidade de medida precisa estar em percentual. Logo, utilizamos a seguinte fórmula para fazer tal conversão.
\[ \begin{eqnarray} OD(\%) = \frac{OD(mg/L)}{OD(ppm)} \cdot 100 \end{eqnarray} \]
Para o cálculo da saturação em ppm do oxigênio ajustou-se um polinômio de ordem dois aos dados obtidos no manual de Siste, Girão, and Duncan (2011) na tabela 4, utilizando o método dos mínimos quadrados ordinários. Então chegamos ao seguinte modelo:
\[ \hat{y} = 14.41 - 0.3371 x + 0.0035 x^2 \]
em que:
- y é a saturação em ppm do oxigênio
- x é a temperatura da água em graus celsius.
3.2.1 Exemplo Simplificado de Cálculo de \(q_i\) (Curvas de Qualidade)
Vamos utilizar o conjunto de dados obtidos do Rio Cachoeira, mais especificamente no trecho que corresponde a ponte no bairro Vila Cachoeira e, em seguida, calcular o IQA para ilustrar.
3.2.1.1 Importação e Preparação de Dados para o Rio Cachoeira
O conjunto de dados foram publicados nos boletins v.1, n.2, n.3 e n.4 e podem ser acessados por meio do link https://www.uesc.br/projetos/boletimriocachoeira/index.php?item=conteudo_anuarios.php.
O link para baixar os dados tabulados é: https://ivanallaman.com.br/dados/dados.xlsx
# Para importar os dados no formato `.xlsx` vamos utilizar a biblioteca **openxlsx**.
library(knitr)
library(openxlsx)
dados_brutos_cachoeira <- read.xlsx("dados.xlsx",detectDates=TRUE)
dados_brutos_cachoeira## Data Amostra colTermotolerantes ph od vt nt ft turb resttot
## 1 2024-07-23 iqa1 336 6.3 8.2 -0.6 18.49 6.39 1.81 376
## 2 2024-07-23 iqa2 2600 6.0 10.4 -0.9 14.58 3.75 1.74 443
## 3 2024-07-23 iqa3 3960 6.5 7.6 2.0 12.15 4.32 1.51 380
## 4 2024-07-23 iqa4 4450 6.8 8.4 2.1 14.01 4.79 2.00 366
## 5 2024-09-25 iqa1 297 6.6 6.8 1.2 5.99 1.76 2.74 276
## 6 2024-09-25 iqa2 198 6.6 8.0 0.9 5.49 1.64 2.72 348
## 7 2024-09-25 iqa3 290 7.3 7.5 0.5 5.41 1.40 2.95 343
## 8 2024-09-25 iqa4 200 6.7 6.3 1.3 5.93 2.03 2.92 271
## 9 2024-11-22 iqa1 410 6.8 3.6 1.5 4.27 1.26 1.14 320
## 10 2024-11-22 iqa2 110 6.6 3.4 1.3 2.64 1.53 1.13 322
## 11 2024-11-22 iqa3 510 6.4 3.1 1.3 5.33 4.14 1.12 323
## 12 2024-11-22 iqa4 718 6.2 4.2 0.9 2.52 0.74 1.14 318
## dbo temp
## 1 32.19 26.6
## 2 27.21 25.1
## 3 28.09 28.0
## 4 27.12 28.1
## 5 8.54 27.2
## 6 9.61 26.5
## 7 7.65 27.3
## 8 8.64 26.5
## 9 7.36 27.5
## 10 9.32 27.3
## 11 6.85 27.3
## 12 8.18 26.9
## Data Amostra colTermotolerantes ph
## Min. :2024-07-23 Length:12 Min. : 110.0 Min. :6.000
## 1st Qu.:2024-07-23 Class :character 1st Qu.: 267.5 1st Qu.:6.375
## Median :2024-09-25 Mode :character Median : 373.0 Median :6.600
## Mean :2024-09-23 Mean :1173.2 Mean :6.567
## 3rd Qu.:2024-11-22 3rd Qu.:1188.5 3rd Qu.:6.725
## Max. :2024-11-22 Max. :4450.0 Max. :7.300
## od vt nt ft
## Min. : 3.100 Min. :-0.9000 Min. : 2.520 Min. :0.740
## 1st Qu.: 4.050 1st Qu.: 0.8000 1st Qu.: 5.065 1st Qu.:1.498
## Median : 7.150 Median : 1.2500 Median : 5.710 Median :1.895
## Mean : 6.458 Mean : 0.9583 Mean : 8.068 Mean :2.812
## 3rd Qu.: 8.050 3rd Qu.: 1.3500 3rd Qu.:12.615 3rd Qu.:4.185
## Max. :10.400 Max. : 2.1000 Max. :18.490 Max. :6.390
## turb resttot dbo temp
## Min. :1.120 Min. :271.0 Min. : 6.850 Min. :25.10
## 1st Qu.:1.140 1st Qu.:319.5 1st Qu.: 8.047 1st Qu.:26.57
## Median :1.775 Median :333.0 Median : 8.980 Median :27.25
## Mean :1.910 Mean :340.5 Mean :15.063 Mean :27.02
## 3rd Qu.:2.725 3rd Qu.:368.5 3rd Qu.:27.142 3rd Qu.:27.35
## Max. :2.950 Max. :443.0 Max. :32.190 Max. :28.10
3.2.1.2 Cálculo do índice \(q_i\) para cada parâmetro que compõe o IQA
Para comodidade do público vamos utilizar uma função pronta disponível no seguinte link: https://ivanallaman.com.br/dados/qIndex.R
source('qIndex.R')
qOD = qIndex(parameter="OD",x=dados_brutos_cachoeira[1,5],Temperatura=dados_brutos_cachoeira[1,12])
qOD## [1] 100.6373
## [1] 27.06544
## [1] 67.71278
## [1] 91.93067
## [1] 36.4267
## [1] 9.505453
## [1] 89.25011
## [1] 51.64292
## [1] 2
qindexTudo = matrix(NA,nrow=nrow(dados_brutos_cachoeira),ncol=9)
dadosParametros = dados_brutos_cachoeira[,-c(1:2,12)]
parametros=c("CF","pH","OD","DeltaT","NT","FT","TU","ST","DBO")
for(i in 1:nrow(dadosParametros)){
for(j in 1:9){
qindexTudo[i,j] <- qIndex(dadosParametros[i,j],parameter=parametros[j],Temperatura=dados_brutos_cachoeira[i,12])
}
}
colnames(qindexTudo) <- parametros
rownames(qindexTudo) <- paste0("Ponto",1:12)3.2.1.3 Cálculo do IQA
Segue o cálculo.
## [1] 1
IQA <- apply(qindexTudo, 1, function(linha_vector) {
# Eleva cada elemento do vetor da linha à sua potência correspondente (vetorizada)
elementos_elevados <- linha_vector ^ pesos
# Calcula o produtório desses elementos elevados
return(prod(elementos_elevados))
})
IQA ## Ponto1 Ponto2 Ponto3 Ponto4 Ponto5 Ponto6 Ponto7 Ponto8 Ponto9
## 35.35816 34.91320 35.42048 35.50221 57.08582 58.14896 60.27924 56.83569 50.93663
## Ponto10 Ponto11 Ponto12
## 51.68415 43.60335 51.77322