NEWS


reiod 0.1.0

Intake corrected the Table 3 eutrophication thresholds. 2026-10-22.

Breaking: remove any /1000 you apply to eutrophication

Intake confirmed by email that both Table 3 and Table 4f are expressed in grams PO4(3-)eq, and supplied corrected Table 3 thresholds. The published PDF prints those eight cells in kilograms.

Between July and October 2026 eiod_absolute_threshold() divided your eutrophication values by 1000 to match the printed kilograms. It no longer does. Supply grams — which is what the EIOF databases give you — and convert nothing. Dividing now would make results wrong by a factor of a thousand in the other direction.

Every other indicator is unaffected; there never was a conversion for any of them.

The quantity did not change, and no classification moves

The corrected values are the printed ones × 1000, carried to full precision: divide any of them by 1000 and you recover the figure in the PDF to its ten decimals. data-raw/build_data.R and tests/testthat/test-reference_values.R both assert that, so the two can never silently part company.

Tested on 400,000 simulated gram-scale values, the old behaviour (divide the value, compare against the PDF's kilograms) and the new one (compare grams directly) agreed everywhere. They can differ only within about one ULP of a cut-off, and there the new path is the more exact, because it no longer divides before comparing.

Eight rows of eiod_cutoffs no longer match the paper

They are the only eight of the 616 that do not, and a new value_source column marks them — "published" for 608, "intake correction 2026-10" for these. eiod_cutoff() reports it, and ?eiod_cutoffs documents it.

subset(eiod_cutoffs, value_source != "published",
       select = c(demogroup_label, value, value_source))

These values may differ from the Intake guideline PDF as published today. That is deliberate and on Intake's instruction, not an error in reiod.

The demo data moved to grams too

eiod_demo$eutroph_kgpo4e is renamed eutroph_gpo4e and resimulated in grams, and eiod_demo_map follows it.

This had to change. With the conversion gone, the shipped map pointed eutroph at a kilogram column, so eiod_absolute_all(eiod_demo, grp, eiod_demo_map) returned 100% below threshold and the relative metric put every respondent in band 1 — the package's own demo demonstrating the 1000× mistake this release warns about. Nothing errored; it just quietly classified everything the same way.

Two guards now exist so it cannot recur: data-raw/build_data.R refuses to save demo data whose median is more than 20× away from its indicator's median cut-off, and tests/testthat/test-reference_values.R asserts the same thing plus that no indicator comes out degenerate under the shipped map.

The documentation site is reorganised

The home page and Get started page had both become catch-alls. They are now scoped, and the detail moved into articles rather than being dropped.

Each metric article now works the same five ways through its table: a single value, a column from a dataset, adding results to a data frame, all seven indicators at once, and only the indicators you have. That last one was already supported and barely documented — eiod_absolute_all() and eiod_relative_all() have always accepted any subset of the seven.

vignette("relative-benchmarks") is renamed vignette("table4-relative") for consistency with the other table articles. Four articles are new: data-checks, demographic-groups, table3-absolute, table5-composites.

Also

reiod 0.0.0.9006

Documentation only. No computed result changes. 2026-10-15.

reiod 0.0.0.9005

The eutrophication conversion is now visible. 2026-10-14.

No computed result changes.

reiod 0.0.0.9004

The reference data now matches the methods paper on every row. 2026-10-14.

Breaking: supply eutrophication in GRAMS

The input unit for eutroph changes from kg PO4(3-)eq to g PO4(3-)eq — which is what the EIOF database gives you, so for most users this means removing a conversion rather than adding one.

Every other indicator is unchanged.

Breaking: eiod_cutoffs loses two columns

value_published and scale_to_db_unit are gone. value is now the cut-off exactly as printed in the paper, for all 616 rows, and value_published_str is the same number as literal text.

Until now, the 80 relative eutrophication rows were stored pre-divided by 1000 so every cut-off sat on one internal scale. It worked, but it meant 80 of the shipped numbers could not be found anywhere in the source document — which defeats the purpose of shipping the reference data at all. You can now check any row of eiod_cutoffs against the PDF and expect a character-for-character match.

Note that d$value_published will now partial-match value_published_str and silently return a character vector. If you referenced that column, change it to d$value.

The conversion moved into the command

eiod_absolute_threshold() divides eutrophication values by 1000 before comparing against Table 3, which the paper prints in kilograms. It emits a message when it does. eiod_relative_band() does nothing, because Table 4f is printed in grams.

Other

reiod 0.0.0.9003

Documentation only. No computed result changes. 2026-10-14.

If your impacts come from the EIOF database, read this

The EIOF country databases store eutrophication as Eutr. (g PO43-e/kg) — in grams — while every other indicator matches the methods paper's unit (Land (m2/kg), GHG (kg CO2e/kg), Water Use (L/kg)). Checked across the Burkina Faso, Ethiopia, Ghana and Viet Nam files; it is the EIOF standard.

So the obvious pipeline produces the wrong unit for exactly one indicator:

kg food consumed  x  g PO4e per kg food  =  GRAMS PO4e per person per day

Divide that total by 1000 before passing it to reiod, or every eutrophication result is wrong by a factor of a thousand. No other indicator needs converting. eiod_check_magnitude() detects it, but it is opt-in — so the warning is now stated wherever the expected unit is, including in the printed output of eiod_list_indicators().

The eutrophication inference is now much better evidenced

Still an inference, still unconfirmed by Intake — but the case is now four independent lines rather than two, and one of them is new and decisive about Intake's operational unit:

See ?eiod_cutoffs and vignette("reiod"). A full write-up, including a pending decision about which unit the package should work in, is in outputs/r-package-development/EUTROPHICATION_UNITS.md.

reiod 0.0.0.9002

Renamed, and a cross-platform CI failure fixed. 2026-10-14.

Breaking: the package is now reiod, not reiof

Every exported function, dataset, S3 class and file has been renamed eiof_* → eiod_*; the package itself is reiod.

EIOF is Intake's Environmental Impacts of Foods database. EIOD is the Environmental Impacts of Diets metrics — Tables 3, 4a–4g, 5a and 5b, which is what this package implements and all it implements. The old name advertised a database the package explicitly does not contain, which is why the README had to spend a paragraph disowning it.

The rename also brings the package into line with the companion Stata implementation, whose commands have always been eiod_*. One vocabulary across both now.

Update any script by substituting eiof → eiod throughout; nothing else changed. No function signature, default or result is different.

References to the EIOF database in the prose are unchanged and still say EIOF, because that is still its name.

Fixed

reiod 0.0.0.9001

Changes from the Stata cross-check, 2026-10-14.

The companion Stata implementation went through a usability and precision rebuild in early October 2026, driven by complaints from real use. Seven of its sixteen findings also applied here. All seven are now addressed.

Breaking

New

reiod 0.0.0.9000

First working version. Implements Tables 3, 4a-4g, 5a and 5b of the Intake Environmental Impacts of Foods methods paper (January 2026).

Known limitations