The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
TikatuWQ is an open-source R package designed to
analyze, visualize, and report water quality data according to Brazilian
environmental standards.
It implements the main indices used in the country
IQA/NSFWQI and IET (Carlson and
Lamparelli) and provides automated checks for CONAMA
Resolution 357/2005 compliance — including the legal frequency
rule (Art. 15).
The package also includes seasonal analysis, pollutant load computation,
exceedance probability, multivariate PCA, trend analysis, data
validation, and automatic report generation.
To install development dependencies and check the package locally:
install.packages(c("devtools","testthat","rmarkdown","ggplot2","dplyr","tidyr",
"readr","lubridate","stringr","glue","scales","broom","purrr","tools"))
devtools::load_all("tikatuwq")
devtools::check("tikatuwq")This package includes a real water quality dataset extracted from
INEMA (the Bahia State Environmental Agency) monitoring campaigns
conducted in the Rio Buranhem watershed (Porto Seguro, Bahia, Brazil)
between 2021 and 2024. The included data provide site IDs, sampling
dates, and diverse physicochemical variables measured during field
campaigns. See documentation for wq_demo for details on
columns and usage in analyses.
All main documentation and vignettes use this realistic sample for demonstration and reproducible workflows.
library(tikatuwq)
data(wq_demo)
head(wq_demo)
# Typical analysis
wq_demo |> validate_wq() |> iqa(na_rm = TRUE) |> plot_iqa()
# Trophic state visualization
wq_demo |> iet_carlson(.keep_ids = TRUE) |> plot_iet(method = "carlson")
# Seasonal analysis
wq_demo |>
assign_season(region = "bahia") |>
compare_seasons(param = "turbidez", by = "ponto")The TikatuWQ package was developed by
Vinícius Saraiva Santos (author and maintainer)
as part of the Tikatu Research Project, conducted
within the Nucleus for Research in Tropical Ecosystems –
NuPEcoTropic, a research group linked to the Federal
University of Southern Bahia (UFSB) and coordinated by
Prof. Dr. Fabrício Berton Zanchi.
This work was carried out as part of the activities of the Postgraduate Program in Biosystems (PPG Biossistemas) at UFSB, under the supervision of Prof. Dr. Fabrício Berton Zanchi.
The Tikatu Project, developed and coordinated by Vinícius Saraiva Santos, integrates research focused on environmental monitoring and modeling.
⚠️ Breaking change — IQA now uses the correct weighted geometric mean
iqa() now defaults to method = "CETESB",
which computes the weighted geometric mean ∏(Qi^Wi) as
specified by CETESB and the original NSF WQI formulation (Brown et al.,
1970). The previous (incorrect) arithmetic mean behavior is preserved
via method = "NSF_approx". Users relying on the default
will see more accurate — and generally lower — IQA values.
New functions:
conama_freq_check() — implements the legal frequency
rule of CONAMA 357/2005 Art. 15: a parameter is considered in conformity
only when ≥ 80% of at least 6 samples per year are within limits.
Returns a per-point, per-year, per-parameter compliance table.assign_season() — classifies each sample as
"chuvoso" (wet) or "seco" (dry) based on
regional Brazilian hydrological calendars (Sudeste, Nordeste, Norte,
Sul, Centro-Oeste, Bahia) or a custom month vector.compare_seasons() — compares a water quality parameter
between wet and dry seasons using Wilcoxon, t-test, or Kruskal-Wallis;
returns descriptive statistics, test results, and an optional
ggplot boxplot.plot_iet() — bar chart (vertical or horizontal) for the
Trophic State Index with color-coded trophic classes, supporting both
Carlson (1977) and Lamparelli (2004) classification schemes.compute_load() — computes pollutant load as
concentration × flow × unit factor; supports kg/day, t/day, kg/year, and
g/s outputs.exceedance_prob() — estimates empirical exceedance
probability with Wilson confidence interval, by group.wq_pca() — PCA wrapper around
stats::prcomp() with automatic column selection, biplot,
screeplot, and loadings plot returned as ggplot
attributes.nsfwqi() — updated: now uses weighted geometric mean
(consistent with the IQA fix); adds add_status and
locale arguments for multilingual status labels.Data expanded:
inst/extdata/conama_limits.csv expanded from ~38 to
~116 rows, adding nitrogen species (NO₃, NO₂, NH₃ with pH-conditional
limits), inorganic ions (fluorides, chlorides, sulfates), organic
pollutants (phenols, surfactants), and 14 heavy metals for Classes
1–3.✔️ R CMD check --as-cran: 0 errors | 0 warnings
| 0 notes
✔️ Compatible with CRAN, Windows, Linux, and macOS
plot_map() to use
internal dataset wq_demo instead of external file
reference. All examples and tests now comply with CRAN policies.wq_demo, removing any dependency on external or
local files.render_report() function now writes output
only to temporary directories (tempdir())
or to directories explicitly provided by the user.✔️ R CMD check --as-cran: 0 errors | 0 warnings
| 0 notes
✔️ Compatible with CRAN, Windows, Linux, and macOS
wq_demo example dataset is now a subset of real
data (INEMA, Rio Buranhem, Porto Seguro-BA, 2021–2024), with 20 rows and
14 columns (including rio, lat,
lon).temp as an alias for
temperatura. Automatic numeric sanitization for comma
decimals and </> signs. With
na_rm = TRUE, weights are re-scaled if some inputs are
missing.iet_carlson() and iet_lamparelli() now accept
a “raw” data.frame containing extra ID columns like rio,
ponto, data, lat,
lon.secchi/sd,
clorofila/chla, tp/p_total).
p_total in mg/L is auto-converted to tp in
µg/L..keep_ids = TRUE to preserve identifiers in the
output. No new dependencies, no API break. Legacy vector calls keep
working as before.DOI,
Citation) from DESCRIPTION.inst/CITATION to use bibentry()
(replacing deprecated citEntry()).param_analysis() and
param_analysis_multi():
plot_trend() and
plot_map() (controlled messages).devtools::check() validations passed
without errors.generate_analysis() documentation.id_cols and
filter to match current signature.README-pt.md, now converted to
absolute HTTPS URL.plot_trend() for temporal trend analysis:
ggplot object ready for visualization or
reports.plot_map() for spatial visualization of
sampling sites.generate_analysis() — automatic rule-based analytical
paragraphs.iet_lamparelli() and
nsfwqi().install.packages("remotes") # or devtools
remotes::install_github("tikatuwq/tikatuwq", dependencies = TRUE)
# stable version (by tag)
remotes::install_github("tikatuwq/tikatuwq@v0.9.0", build_vignettes = TRUE)df <- read_wq(system.file("extdata","exemplo_chamagunga.csv", package="tikatuwq"))
# Table with only violations, ready for report
conama_report(df, "2", only_violations = TRUE, pretty = TRUE)
# Short textual summary
cat(paste(conama_text(df, "2", only_violations = TRUE), collapse = "\n"))
# Legal frequency rule (CONAMA 357/2005 Art. 15)
conama_freq_check(df, classe = "2", by = "ponto")Water quality indices -
iqa(df, method = "CETESB", na_rm = TRUE, ...) — Water
Quality Index; weighted geometric mean (CETESB/NSF default). -
iet_carlson(df) / iet_lamparelli(df) — Trophic
State Index. - nsfwqi(df, na_rm = TRUE, add_status = TRUE)
— NSF WQI with geometric mean aggregation.
CONAMA compliance and balneability -
conama_limits(class) — limits from CONAMA 357/2005. -
conama_check(df, class) — compliance by parameter
(*_ok columns). -
conama_freq_check(df, classe, by) — Art. 15 frequency rule
(≥ 80% conformity in ≥ 6 samples/year). -
balnear_check(df, by) — balneability classification under
CONAMA 274/2000 (Excelente → Imprópria).
Seasonal analysis and trend -
assign_season(df, region) — classifies samples by
hydrological season using regional calendars. -
compare_seasons(df, param, test) — statistical comparison
between wet and dry seasons. -
mk_seasonal(df, param, period) — seasonal Mann-Kendall
trend test (Hirsch et al., 1982); returns Z, p-value, tau, and Sen’s
slope.
Load and risk -
compute_load(df, param, flow_col, unit_out) — pollutant
load (kg/day, t/day, etc.). -
exceedance_prob(df, param, threshold, direction, by) —
empirical exceedance probability with Wilson CI.
Multivariate -
wq_pca(df, params, color_by) — PCA with biplot, screeplot,
and loadings plot.
Visualization - plot_iqa(),
plot_iet(), plot_series(),
plot_box(), plot_heatmap(),
plot_trend() — return ggplot objects. -
plot_map(), plot_map_quality() — interactive
Leaflet maps; plot_map_quality() colors sites by
IQA/IET/NSF WQI class.
Data and reports - read_wq(path) —
reads water quality datasets (CSV). - validate_wq(df) —
validates/normalizes columns and units. -
generate_analysis(), render_report() —
automated textual and document reporting.
citation("tikatuwq")If you use tikatuwq in your research, please cite it as follows:
Santos, V. S. (2025). tikatuwq: Water Quality Assessment and Environmental Compliance in Brazil (v0.9.0). Zenodo. https://doi.org/10.5281/zenodo.17407297
BibTeX entry:
@Manual{Santos2025tikatuwq,
title = {tikatuwq: Water Quality Assessment and Environmental Compliance in Brazil},
author = {Vinicius Saraiva Santos},
year = {2025},
note = {R package version 0.9.0},
doi = {10.5281/zenodo.17407297},
url = {https://github.com/tikatuwq/tikatuwq},
}These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.