Software

Tools we build and maintain for the community

CoDa Stereo

CoDa Stereo hex logo Compositional Data Analysis for Stereological and Histomorphometric Data

Launch the live app →   GitHub repository   v2.0.0 (Apr 2026)

Free, browser-based — no installation required. Hosted on Posit Connect Cloud · MIT License.

Registered software: Brazilian National Institute of Industrial Property (INPI), registration no. BR512026003293-8 — filed 28 April 2026, granted 19 May 2026. Funded by FUNDECT, UFMS and CNPq.

CoDa Stereo is an open-source Shiny application that brings the Aitchison geometry to the daily workflow of stereological and histomorphometric studies — fields where measurements are naturally compositional (proportions of tissue types, cell-line fractions, organelle volume densities) and therefore must be analysed with the appropriate log-ratio methods rather than off-the-shelf parametric tools.

The app implements the full PPDAC cycle (Problem → Plan → Data → Analysis → Conclusion) so that students and collaborators without a strong statistical background can move from a raw spreadsheet to a defensible permutational MANOVA with diagnostics, pairwise post-hoc tests, and publication-ready plots — all in the browser.

Features

Module Capabilities
Data upload CSV and Excel (.xlsx/.xls) with sheet selector; smart parts selector that auto-excludes ID columns
Data inspection Zero/NA heatmap (observed zero vs. structural zero vs. missing); naniar::vis_miss plot; counts per part
Zero handling Three methods via zCompositions (CZM, multRepl, lrEM); NA handling via listwise deletion or geometric-mean imputation
Compositional analysis Manual ternary plot (pure ggplot2, no ggtern dependency); amalgamation of D > 3 parts into 3 groups; clr-PCA biplot via FactoMineR + factoextra
Statistical modelling Factorial permutational MANOVA via RRPP::lm.rrpp; pairwise post-hoc via RRPP::pairwise; residual diagnostics; formula preview before fitting
Downloads Ternary and biplot as PDF; imputed data as CSV; ANOVA and pairwise tables as CSV

Why CoDa Stereo

Stereological datasets are routinely analysed as if cell-fraction or tissue-fraction percentages were independent variables — they’re not. The unit-sum constraint induces spurious correlations and false significance in standard MANOVA. CoDa Stereo handles the geometry correctly throughout, without requiring users to write log-ratio transforms by hand.

Use it now (no install)

The recommended way to use CoDa Stereo is to open it directly in your browser — the app is hosted on Posit Connect Cloud (free tier), so there’s nothing to install:

019dde61-4363-e3fa-b788-13ddfa456c0b.share.connect.posit.cloud

Run locally (optional)

If you’d rather run the app on your own machine — useful for sensitive data, offline work, or customisation — install from GitHub:

# install.packages("devtools")
devtools::install_github("diogoprov/CoDaStereo")
CoDaStereo::run_app()

See the README for full deployment notes (including how to re-deploy to your own Posit Connect Cloud account).

Citation

CoDa Stereo was developed as supplementary material for:

Provete, D.B., Severgnini, M.R., Fernandes, C.E., Franco-Belussi, L. (2026). A practical guide to compositional data analysis in tissue stereology and blood cell profile. Physiological Reports (in review). Preprint on Research Square.

The companion paper covers the methodological rationale, simulations comparing CoDa with naïve approaches, and worked examples.

A CITATION.cff and BibTeX snippets are available on the repository.

The INPI registration records authorship and the date the source code existed in a given form — it is the Brazilian equivalent of a software copyright deposit, and it does not restrict use. The app is released under the MIT licence: you may use, modify and redistribute it, including commercially, provided the copyright notice is kept.

Issues, feedback, and contributions

Bug reports, feature requests, and pull requests are very welcome on GitHub Issues. PRs should target the dev branch.

BirdNET Validation Sampler

Sampling and manual-validation pipeline for BirdNET custom classifiers

GitHub repository

R pipeline — MIT License.

BirdNET Validation Sampler turns the raw output of a BirdNET custom classifier into a set of audio clips that a person can realistically sit down and validate — the step that decides whether a classifier’s detections mean anything in a passive acoustic monitoring study.

The pipeline selects high-confidence predictions, applies an explicit sampling design (alternate nights, balanced quotas per species, restricted time windows), and extracts reproducible .wav clips. After the manual review, it returns precision-by-confidence metrics, suggested confidence thresholds, presence/absence tables by night, and the clip lists needed to retrain the classifier.

It was developed for the FrogNet project, which monitors frog vocalisations in the Pantanal and Cerrado, but works with the output of any BirdNET custom classifier.

crywolf

crywolf hex logo Bayesian false-positive occupancy models for data from automated detectors

Documentation GitHub repository

R package (models in Stan via cmdstanr) — GPL (≥ 3). Development version.

crywolf fits Bayesian single-season occupancy models that correct for the false positives produced by automated detectors, such as acoustic classifiers. It implements the multiple-methods site-confirmation design of Miller et al. (2011), in which a subset of detections is verified and treated as certain, with the false-positive rate either constant or varying with site covariates.

Besides fitting the models, the package provides simulation tools and calibration checks — credible-interval coverage and guidance on how many detections need to be verified — so the design can be evaluated before going to the field. It pairs naturally with the BirdNET Validation Sampler above: the sampler produces the verified detections, crywolf uses them to correct the occupancy estimates.

# cmdstanr is distributed through the Stan r-universe
install.packages("cmdstanr", repos = c("https://stan-dev.r-universe.dev", getOption("repos")))
cmdstanr::install_cmdstan()

remotes::install_github("diogoprov/crywolf")

To cite the package, use citation("crywolf"), together with the paper describing the model: Miller, D. A., et al. (2011) Ecology 92: 1422–1428, doi:10.1890/10-1396.1.

Authors: Diogo B. Provete (maintainer), Liliana Piatti, Tessa Rhinehart and Larissa Sayuri Moreira Sugai.

Introdução à Linguagem R — swirl lessons

Interactive lessons in Portuguese for learning R inside the R console

GitHub repository   The course   DOI 10.5281/zenodo.22782697

swirl course, five lessons — CC BY 4.0 · archived on Zenodo.

A course for swirl, the R package that turns the console into an interactive tutor: it asks a question, the student types real R code, and swirl checks the answer and gives a hint when it is wrong. swirl has a long list of community courses, but until now none written in Portuguese for ecologists. I have also translated the whole Regression Models course (13 lessons) and three lessons of R Programming, and contributed them as pull requests to the community project swirl-Br.

The lessons follow the graduate course Introdução à Linguagem R (PPGEC/UFMS) and use the same real, published dataset as the practical classes: thermal tolerance of Atlantic Forest frogs along two elevational gradients (Bovo et al. 2023).

Lesson Class Topics
Primeiros Passos 01 R as a calculator, assignment, coercion, reading and inspecting data, table(), missing values, packages
Curadoria de Dados 02 auditing a deliberately bad spreadsheet and a published file: file naming, header out of place, column types, inconsistent categories, duplicates, date formats, missing-value codes, stored derived columns, site-level variables and metadata
Manuseio de Dados com dplyr 04 the pipe (\|> and %>%), rename(), select(), mutate(), filter(), group_by() + summarise(), count()
Modelos Lineares 06 the PPDAC cycle: sampling design, exploration, lm(), diagnostics with plot() and performance, interpretation with anova() and broom
Rudimentos de Programação 07 writing functions, default arguments, scope, if/ifelse/for, functional programming with purrr::map, one model per species with split() + map() and broom

Answers are checked by their result, not by how they are written, so both pipes, summarise() or summarize(), and arguments in any order are accepted.

install.packages("swirl")
library(swirl)
select_language("portuguese", append_rprofile = TRUE)
install_course_url("https://github.com/diogoprov/Introducao_a_Linguagem_R/zipball/main")
swirl()

ecodados

Datasets and helper functions for Análises Ecológicas no R

GitHub repository   The book (free, in Portuguese)

R package — community-maintained.

ecodados is the companion R package to Análises Ecológicas no R (da Silva, Gonçalves-Souza, Paterno, Provete & Vancine, 2022), a 640-page open textbook that teaches the full workflow of ecological data analysis in R — from data organisation and visualisation to multivariate analysis, spatial ecology and phylogenetic comparative methods.

The package ships the datasets used across the book’s chapters, so every example in the text can be reproduced with a single library(ecodados) instead of hunting for files. It is what makes the book runnable rather than merely readable.

In 2026, Análises Ecológicas no R received the SORTEE Commendation Award from the Society for Open, Reliable, and Transparent Ecology and Evolutionary Biology, which recognises projects that promote open, transparent and reliable research practices in ecology and evolution.

The book is freely available online and has become a standard reference for teaching ecological data analysis in Portuguese-speaking universities.

NoteAuthors

Gustavo B. Paterno, Diogo B. Provete, Fernando R. da Silva, Thiago Gonçalves-Souza and Maurício H. Vancine.