---
title: "Introduction to pgt"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Introduction to pgt}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 6,
                      fig.height = 4)
```

```{r setup}
library(pgt)
```

## The materials-balance principle

A pollution-generating technology turns material inputs into a good
output and an unavoidable bad output. The pollutant content of the
inputs has to end up somewhere: embodied in the product, removed by
abatement, or emitted. `pgt` builds efficiency models on that accounting
identity,
$$u'x_l - v y_l \ge b_l,$$
where $x_l$ are the material inputs of unit $l$, $u$ their pollutant
flow coefficients (for example tonnes of CO2 potential per unit of
input), $y_l$ the good output, $v$ the pollutant retained in the
product, and $b_l$ the emissions. The gap $u'x_l - v y_l - b_l$ is the
pollutant that leaves the process other than through the measured
emission. A note on terminology: the mass balance is an identity when
every exit is measured; the inequality form above allows for unmeasured
abatement, and when the abatement output $a_l$ is observed the account
closes as the equality $u'x_l - v y_l = b_l + a_l$. Following Rødseth
(2025), the documentation calls both forms the materials-balance
identity.

The principle itself is old: Ayres and Kneese (1969) built the
materials-balance view of production and externalities, Lauwers (2009)
made the case for carrying it into frontier-based eco-efficiency
models, and Dakpo, Jeanneaux and Latruffe (2016) survey how
pollution-generating technologies have been modelled in nonparametric
benchmarking since.

Existing R packages handle undesirable outputs by transforming the data
(the Seiford and Zhu 2002 translation in `deaR`) or by imposing weak
disposability and directional distances (`nonparaeff`, `Benchmarking`).
Neither approach enforces the materials balance as a constraint. `pgt`
does, and puts the competing axiom systems behind one interface.

## Building a technology

The constructor bundles the data with the flow coefficients. The shipped
`steeldemo` data is a synthetic panel of steel plants on two production
routes, with emissions in CO2 units.

```{r}
data(steeldemo)
tech <- pgt_tech(
  x = steeldemo[, c("coal_coke", "other_fuel", "raw_material", "flux")],
  y = steeldemo$production,
  b = steeldemo$emissions,
  v = 0.01467,
  group = steeldemo$route,
  id = steeldemo$plant
)
tech
```

The inputs already sit in pollutant-potential units, so the default
$u = 1$ applies to each; `v = 0.01467` is the carbon retained per unit
of crude steel (the synthetic generator's assumption; see
`?steeldemo` for the derivation).

## Auditing the identity before estimation

The weak-G-disposability model gives every DMU a self-reference (its
own observation as a feasible solution to its programme) only when its
own materials balance holds. `mb_check()` reports the closure gap per
DMU and flags the accounts where more pollutant leaves than enters.

```{r}
mb <- mb_check(tech)
head(as.data.frame(mb))
attr(mb, "n_violations")
```

An infeasible weak-G-disposability program always belongs to a DMU with
a strictly negative gap, so this audit locates any estimation problem
in advance. Such DMUs return `NA` scores and `pgt()` warns; all other
DMUs score in $(0, 1]$.

## Estimating environmental efficiency

The weak-G-disposability model minimises the bad output subject to output
and input feasibility, the peer emission envelope, and the DMU's own
materials-balance cap (the programmes are stated in full in
`vignette("models", "pgt")`). The score is $b^*_l / b_l$.

```{r}
fit <- pgt(tech, model = "wgd")
summary(fit)
```

The envelope model frees the inputs and reduces the program to the
convex lower envelope of the $(y, b)$ scatter. Its self-reference is
always feasible.

```{r}
fit_env <- pgt(tech, model = "envelope")
summary(fit_env)
```

## Shadow prices and abatement cost

The output-constraint dual $\eta_l = \partial b^*/\partial y$ (returned
as `dual_output`) measures the marginal emission content of the good
output along the frontier. `mac_curve()` turns it into a marginal
abatement cost curve: reducing the bad output by one unit costs
$1 / \eta_l$ units of the good output, or $p / \eta_l$ at output price
$p$. Read the curve with care about which margin is which: each DMU's
plotted abatement is its distance to the frontier, $b_l - b^*_l$, which
the model itself prices at zero output loss, while the `mac` value is
the marginal cost of abating beyond the DMU's frontier point. The curve
therefore ranks DMUs by the shadow price at their projection; the area
under it is not a total-cost estimate.

```{r, fig.alt = "Step curve of marginal abatement cost against cumulative abatement potential"}
head(shadow_prices(fit))
mac <- mac_curve(fit, price = 550)
plot(mac)
```

## Decomposing across production routes

With a technology group, `pgt_decompose()` splits environmental
efficiency into a within-group and a technology-gap component. The
envelope decomposition is an exact identity, Total $=$ WR $\times$ TGR,
where WR is within-route reallocation and TGR the technology-gap ratio
of the metafrontier tradition (Battese, Rao and O'Donnell 2004;
O'Donnell, Rao and Battese 2008).

```{r}
dec <- pgt_decompose(tech, type = "envelope")
summary(dec)
```

## A worked example on real data

The `frontier` package ships a balanced panel of Philippine rice farms
with a physical fertiliser input (`NPK`, kilograms of active ingredient)
and a physical output (`PROD`, tonnes of paddy). Treating the nitrogen
carried by the fertiliser as the pollutant potential gives a nitrogen
materials balance. The nitrogen fraction below is illustrative
(urea-equivalent, about 0.46 of the active ingredient).

```{r, eval = requireNamespace("frontier", quietly = TRUE)}
data("riceProdPhil", package = "frontier")
d8 <- riceProdPhil[riceProdPhil$YEARDUM == 8, ]
uN <- 0.46
rice <- pgt_tech(
  x = as.matrix(d8[, c("AREA", "LABOR", "NPK", "OTHER")]),
  y = d8$PROD,
  b = uN * d8$NPK,
  u = c(AREA = 0, LABOR = 0, NPK = uN, OTHER = 0),
  v = 0,
  id = as.character(d8$FMERCODE)
)
rice_fit <- pgt(rice, model = "wgd")
summary(rice_fit)
```

Here environmental efficiency is the scope to cut fertiliser nitrogen
while holding rice output at its observed level. One caveat on this
construction: because the bad output is defined as the full nitrogen
potential of a single input ($b = u_N \cdot$ `NPK`), every farm's
account closes with equality by construction, the materials-balance cap
can never bind, and `mb_check()` passes trivially; the example
illustrates the workflow, not the audit.

The other vignettes state the estimating programmes in full
(`vignette("models", "pgt")`), reproduce the published-result
replications (`vignette("replication", "pgt")`), compare the axiom
systems (`vignette("comparing-axioms", "pgt")`), demonstrate
multi-pollutant technologies and heterogeneous coefficients
(`vignette("multiple-pollutants", "pgt")`) and cover productivity
measurement with inference (`vignette("productivity", "pgt")`).

## References

- Ayres, R. U., & Kneese, A. V. (1969). Production, consumption, and
  externalities. *American Economic Review*, 59(3), 282-297.
- Battese, G. E., Rao, D. S. P., & O'Donnell, C. J. (2004). A
  metafrontier production function for estimation of technical
  efficiencies and technology gaps for firms operating under different
  technologies. *Journal of Productivity Analysis*, 21(1), 91-103.
  doi:10.1023/B:PROD.0000012454.06094.29
- Dakpo, K. H., Jeanneaux, P., & Latruffe, L. (2016). Modelling
  pollution-generating technologies in performance benchmarking: Recent
  developments, limits and future prospects in the nonparametric
  framework. *European Journal of Operational Research*, 250(2),
  347-359. doi:10.1016/j.ejor.2015.07.024
- Lauwers, L. (2009). Justifying the incorporation of the materials
  balance principle into frontier-based eco-efficiency models.
  *Ecological Economics*, 68(6), 1605-1614.
  doi:10.1016/j.ecolecon.2008.08.022
- O'Donnell, C. J., Rao, D. S. P., & Battese, G. E. (2008).
  Metafrontier frameworks for the study of firm-level efficiencies and
  technology ratios. *Empirical Economics*, 34(2), 231-255.
  doi:10.1007/s00181-007-0119-4
- Rødseth, K. L. (2025). On the development of a unified, nonparametric
  materials balance-based efficiency analysis model and its
  applications. *Journal of Productivity Analysis*, 64(3), 305-319.
  doi:10.1007/s11123-025-00768-0
- Seiford, L. M., & Zhu, J. (2002). Modeling undesirable factors in
  efficiency evaluation. *European Journal of Operational Research*,
  142(1), 16-20. doi:10.1016/S0377-2217(01)00293-4
