Economic Input-Output Models: How Linear Algebra Reveals Sector Interdependence and Production Requirements

Last Updated July 3, 2026

Economic input-output models explain how sectors, industries, institutions, and supply chains depend on one another through flows of goods, services, money, energy, emissions, labor, and intermediate demand. In linear algebra, input-output modeling turns economic interdependence into matrices that show how output from one sector becomes input to another and how changes in final demand can ripple through a connected production system.

This article opens Part VII of the Linear Algebra for Systems Modeling series by connecting matrix representation, technical coefficients, interindustry transactions, final demand, gross output, Leontief-style systems, production requirements, direct and indirect effects, multipliers, shocks, supply-chain exposure, environmental extensions, data classification, uncertainty, and responsible interpretation.

The central modeling question is not only “How much output is required?” It is “Which sectors depend on which others, how shocks propagate through production relationships, what assumptions make the matrix model valid, and what forms of economic, environmental, or social dependence become visible or hidden?”

Vintage systems-modeling workspace with sector dependency diagrams, input-output matrix grids, industrial flows, economic networks, maps, books, and drafting tools.
Economic input-output models shown through interdependent sectors, production flows, matrix relationships, supply chains, and structural economic dependencies.

Input-output modeling begins with a simple observation: no sector produces in isolation. Agriculture uses energy, transportation, machinery, water, labor, and financial services. Manufacturing uses extracted materials, logistics, utilities, software, business services, and imported components. Health systems depend on pharmaceuticals, buildings, equipment, electricity, waste services, administration, and professional labor. Final demand for one sector therefore creates indirect demand across many others.

Linear algebra provides the natural language for this structure. Sector flows become matrices. Final demand becomes a vector. Technical requirements become coefficients. Total output becomes the solution to a system of equations. Multipliers become matrix-derived summaries of direct and indirect dependence. Environmental extensions attach emissions, energy, land, water, labor, or other indicators to economic activity.

Why Input-Output Models Matter

Input-output models matter because they make economic interdependence visible. A demand increase in one sector does not affect only that sector. It also affects upstream suppliers, energy systems, logistics, materials, services, labor, finance, imports, emissions, and waste streams. Input-output analysis provides a structured way to estimate these linked requirements.

These models are used in economic planning, regional analysis, supply-chain risk, industrial policy, environmental accounting, carbon footprinting, disaster recovery, infrastructure planning, workforce analysis, and sustainability assessment. They help explain why sectoral shocks can propagate through a production system and why apparent local activity often depends on a much wider network of relationships.

Use case Input-output contribution Interpretive caution
Economic impact analysis Estimates direct and indirect output requirements. Multipliers depend on assumptions and table construction.
Supply-chain exposure Shows upstream dependence across sectors. Sector aggregation can hide firm-level bottlenecks.
Environmental accounting Links production to emissions, energy, water, or material use. Environmental coefficients depend on boundary definitions.
Regional planning Maps interindustry dependence within a place. Imports, leakage, and regional specialization matter.
Disaster recovery Estimates production effects from disrupted sectors. Linear assumptions may miss capacity limits and substitution.
Sustainability strategy Reveals indirect impacts behind final demand. Responsibility claims require careful allocation rules.

Input-output models are not forecasts by themselves. They are structured accounting and dependency models that help reason about production relationships.

Back to top ↑

Intersectoral Transactions

An input-output table records flows between sectors. Each entry describes how much output from one sector is used as input by another sector during a defined period. The table may be national, regional, multiregional, industry-by-industry, product-by-product, or supply-use based.

Table element Meaning Systems interpretation
Producing sector Sector supplying output. Source of goods, services, energy, materials, or value.
Using sector Sector consuming intermediate inputs. Sector whose production depends on supplied inputs.
Intermediate transaction Flow from one sector to another. Production interdependence.
Final demand Demand from households, government, investment, exports, or other final users. External pull on the production system.
Total output Total production by sector. Scale of sector activity needed to satisfy intermediate and final demand.

The key distinction is between intermediate demand and final demand. Intermediate demand is demand by producing sectors. Final demand is demand by users outside the intermediate production network.

Back to top ↑

From Transactions to Matrices

Let \(Z\) be the intersectoral transactions matrix. An entry \(z_{ij}\) records the flow from sector \(i\) to sector \(j\). The column \(j\) shows inputs used by sector \(j\). The row \(i\) shows where output from sector \(i\) goes as intermediate supply.

\[
Z=
\begin{bmatrix}
z_{11} & z_{12} & \cdots & z_{1n}\\
z_{21} & z_{22} & \cdots & z_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
z_{n1} & z_{n2} & \cdots & z_{nn}
\end{bmatrix}
\]

Interpretation: The transactions matrix records sector-to-sector production flows.

Let \(\mathbf{f}\) be final demand and \(\mathbf{x}\) be total output. A basic row-balance relationship is:

\[
\mathbf{x}=Z\mathbf{1}+\mathbf{f}
\]

Interpretation: Total output equals intermediate sales plus final demand when \(Z\mathbf{1}\) sums intermediate sales by producing sector.

Symbol Meaning Typical dimension
\(Z\) Intersectoral transactions matrix. \(n\times n\)
\(\mathbf{x}\) Total output vector. \(n\times 1\)
\(\mathbf{f}\) Final demand vector. \(n\times 1\)
\(\mathbf{1}\) Vector of ones. \(n\times 1\)
\(n\) Number of sectors. Classification-dependent.

Matrix notation makes the full production system visible at once rather than as isolated sector accounts.

Back to top ↑

Technical Coefficients

Technical coefficients describe how much input from sector \(i\) is required per unit of output from sector \(j\). If \(x_j\) is total output of sector \(j\), then:

\[
a_{ij}=\frac{z_{ij}}{x_j}
\]

Interpretation: The coefficient \(a_{ij}\) is the amount of input from sector \(i\) required to produce one unit of output in sector \(j\).

The technical coefficient matrix \(A\) collects these coefficients:

\[
A=
\begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1n}\\
a_{21} & a_{22} & \cdots & a_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{bmatrix}
\]

Interpretation: Each column describes the input recipe required for one unit of sector output.

Coefficient question Meaning Review issue
What is the numerator? Intersectoral flow from supplying sector to using sector. Transaction definition and valuation basis matter.
What is the denominator? Total output of the using sector. Zero, small, or poorly measured output creates instability.
What does a column mean? Input recipe for a sector. Assumes stable production technology over the scenario.
What does a row mean? Sector supply into other sectors. Shows exposure to downstream production systems.
What does a high coefficient mean? Strong direct input dependence. May reflect price, quantity, aggregation, or classification choices.

Technical coefficients turn observed transactions into a model of production requirements. This is powerful, but it also introduces strong assumptions about proportionality and technology.

Back to top ↑

Final Demand and Total Output

Final demand is demand that comes from outside the interindustry production loop. It can include households, government, investment, exports, nonprofit institutions, inventory change, or other final users depending on the accounting framework.

Total output must satisfy both intermediate requirements and final demand:

\[
\mathbf{x}=A\mathbf{x}+\mathbf{f}
\]

Interpretation: Total output is needed both to supply intermediate inputs required by production and to satisfy final demand.

This equation is the core of input-output modeling. The term \(A\mathbf{x}\) represents intermediate production requirements. The vector \(\mathbf{f}\) represents final demand. The vector \(\mathbf{x}\) represents the total output needed to meet both.

Component Economic meaning Systems meaning
\(A\mathbf{x}\) Intermediate inputs required by production. Internal dependency burden.
\(\mathbf{f}\) Final demand outside intermediate production. External demand driver.
\(\mathbf{x}\) Total output required by sector. System-wide production response.
\(\mathbf{x}-A\mathbf{x}\) Net output available for final demand. Output after intermediate requirements.

The model shows why final demand can require more total production than the final demand vector itself: production requires intermediate inputs.

Back to top ↑

The Basic Input-Output System

Starting from:

\[
\mathbf{x}=A\mathbf{x}+\mathbf{f}
\]

Interpretation: Total output equals intermediate requirements plus final demand.

Rearranging gives:

\[
(I-A)\mathbf{x}=\mathbf{f}
\]

Interpretation: Net production capacity after intermediate requirements must satisfy final demand.

If \(I-A\) is invertible, the solution is:

\[
\mathbf{x}=(I-A)^{-1}\mathbf{f}
\]

Interpretation: The total output vector is obtained by applying the total requirements matrix to final demand.

The inverse \((I-A)^{-1}\) is often called the Leontief inverse. It captures direct and indirect production requirements across the system.

Matrix object Meaning Modeling role
\(I\) Identity matrix. Represents one unit of sector output.
\(A\) Technical coefficient matrix. Represents direct input requirements.
\(I-A\) Net requirements matrix. Moves intermediate requirements to the left side of the system.
\((I-A)^{-1}\) Total requirements matrix. Captures direct and indirect requirements.
\(\mathbf{x}\) Total output response. Production needed to satisfy final demand.

This matrix system is the bridge from economic accounting to linear algebraic systems modeling.

Back to top ↑

Direct and Indirect Requirements

The total requirements matrix can be interpreted through a series expansion when the system is productive and the expansion converges:

\[
(I-A)^{-1}=I+A+A^2+A^3+\cdots
\]

Interpretation: Total requirements include direct demand, first-round intermediate requirements, second-round requirements, and continuing production rounds.

Term Meaning Input-output interpretation
\(I\) Initial final demand. One unit demanded from a sector.
\(A\) Direct input requirements. Inputs needed by the directly demanded sector.
\(A^2\) Second-round requirements. Inputs needed by the suppliers of suppliers.
\(A^3\) Third-round requirements. Further upstream dependence.
\(\cdots\) Higher-order rounds. Continuing but typically diminishing requirements.

This expansion shows how input-output models are also network models. Production effects move through connected sector relationships in repeated rounds.

Back to top ↑

Multipliers

Multipliers summarize how final demand changes translate into total output, value added, employment, emissions, or other impacts. A simple output multiplier for sector \(j\) can be computed by summing the column of the Leontief inverse associated with that sector:

\[
m_j=\sum_i l_{ij}
\]

Interpretation: The output multiplier \(m_j\) summarizes total output required across all sectors for one unit of final demand in sector \(j\), where \(L=(I-A)^{-1}\).

Multipliers are attractive because they compress system-wide dependence into a single number. But this compression creates interpretive risk. Multipliers depend on sector aggregation, regional boundaries, import assumptions, fixed coefficients, prices, capacity assumptions, and whether induced household effects are included.

Multiplier type Measures Interpretive caution
Output multiplier Total output response to final demand. May overstate effects if capacity or imports change.
Employment multiplier Jobs associated with production response. Labor productivity and wage assumptions matter.
Value-added multiplier Value added associated with output response. Accounting definitions and regional leakage matter.
Emissions multiplier Emissions associated with final demand. Depends on emissions coefficients and production location.
Income multiplier Labor income or household income effects. Induced effects require additional behavioral assumptions.

Multipliers are useful summaries, not standalone explanations.

Back to top ↑

Shock and Scenario Analysis

Input-output models can estimate how changes in final demand affect total output. If final demand changes by \(\Delta\mathbf{f}\), then the total output change is:

\[
\Delta\mathbf{x}=(I-A)^{-1}\Delta\mathbf{f}
\]

Interpretation: A demand shock propagates through direct and indirect production requirements.

Scenario analysis can examine demand increases, sector declines, export changes, disaster impacts, infrastructure disruptions, policy shifts, investment programs, or consumption changes. But the standard input-output system is demand-driven. It does not automatically model price changes, substitution, capacity constraints, inventories, bottlenecks, behavioral response, or time dynamics.

Scenario type Input-output use Limitation
Demand increase Estimate production requirements. Assumes sufficient capacity and fixed coefficients.
Sector disruption Explore dependency exposure. Standard demand-driven model may not represent supply constraints directly.
Export shock Estimate output linked to external demand. Trade relationships and imports matter.
Green investment Estimate sectoral production and environmental effects. Technology coefficients may change over time.
Disaster recovery Map indirect production dependencies. Time, logistics, substitution, and repair constraints may dominate.

Scenario results should be framed as structured estimates under assumptions, not as mechanical predictions.

Back to top ↑

Supply-Chain Exposure

Input-output models reveal supply-chain exposure by showing which sectors depend directly and indirectly on others. The technical coefficient matrix \(A\) shows direct input dependence. The Leontief inverse \(L=(I-A)^{-1}\) shows total requirements.

A sector with a small direct requirement can still have important indirect dependence through upstream chains. Conversely, a sector with large direct purchases may have limited higher-order effects depending on network structure.

Exposure layer Matrix object Meaning
Direct dependence \(A\) Inputs required immediately by each sector.
Second-order dependence \(A^2\) Inputs required by suppliers.
Total dependence \((I-A)^{-1}\) Direct and indirect requirements across all rounds.
Critical upstream sector Large total requirement contribution. Sector whose output supports many downstream activities.
Concentration risk High dependence on few sectors. Potential vulnerability to bottlenecks or disruptions.

Input-output tables are usually sector-level rather than firm-level. They are valuable for structural exposure but may not identify specific suppliers, facilities, routes, contracts, or operational bottlenecks.

Back to top ↑

Environmentally Extended Input-Output Models

Environmentally extended input-output models attach environmental coefficients to sector output. If \(\mathbf{e}\) is a row vector of emissions intensity by sector, then emissions associated with final demand can be estimated as:

\[
\mathbf{g}=\mathbf{e}(I-A)^{-1}\mathbf{f}
\]

Interpretation: Sector emissions intensities are applied to total production requirements associated with final demand.

The same structure can be used for energy, water, land, materials, waste, labor, occupational risk, or other extensions when appropriate coefficients are available.

Extension Coefficient type Use
Carbon emissions Emissions per unit of sector output. Consumption-based carbon footprinting.
Energy use Energy per unit of sector output. Energy intensity and transition analysis.
Water use Water withdrawal or consumption per output. Water footprint and scarcity analysis.
Material use Material extraction or throughput per output. Circular economy and resource analysis.
Labor Employment or hours per output. Employment requirements and workforce exposure.
Waste Waste generation per output. Production-linked waste accounting.

Environmental extensions make hidden indirect impacts visible, but they require careful boundary definitions, sector matching, units, allocation rules, and data provenance.

Back to top ↑

Data Classification and Aggregation

Input-output models depend heavily on classification systems. Sectors may be defined by industry, commodity, product, region, or institutional accounting category. Aggregation determines what relationships are visible. A highly aggregated table may hide critical dependencies. A very detailed table may introduce sparse data, confidentiality suppression, estimation uncertainty, or computational burden.

Data design choice Why it matters Risk
Sector classification Defines rows and columns of the model. Different classifications change coefficients and multipliers.
Aggregation level Controls detail and interpretability. Aggregation can hide bottlenecks or mix unlike activities.
Regional boundary Defines domestic, regional, or multiregional scope. Imports and leakage can be misrepresented.
Valuation basis Determines prices, margins, taxes, and purchasers’ versus basic prices. Flows may not be comparable without adjustment.
Time period Defines when relationships are measured. Technologies and supply chains change over time.
Data source Determines reliability and provenance. Estimated or suppressed cells add uncertainty.

Before interpreting multipliers or sector dependencies, the table itself should be understood as a constructed representation.

Back to top ↑

Assumptions and Linear Limits

Input-output models are linear models. They commonly assume fixed technical coefficients, proportional production requirements, no price response, no substitution, no supply constraints, and stable production technology over the scenario horizon. These assumptions make the system mathematically tractable, but they also limit interpretation.

Assumption Model benefit Limitation
Fixed coefficients Simple linear system. Does not capture substitution or technology change.
Proportional production Output requirements scale linearly with demand. May fail under capacity limits or nonlinear production.
Demand-driven structure Clear final-demand scenario analysis. Supply constraints require additional modeling.
No price adjustment Physical or monetary flows remain stable. Market response and inflation are excluded.
Stable sector relationships Coefficients can be reused in scenarios. Supply chains and technology may change.
Representative sectors Aggregation makes national or regional modeling possible. Firm-level and product-level differences are hidden.

The value of an input-output model comes from disciplined interpretation of these assumptions, not from pretending they disappear.

Back to top ↑

Input-Output Models in Systems Modeling

Input-output models are systems models because they represent structured interdependence. They are not only economic tables; they are matrix representations of connected production requirements. Their logic can be extended to infrastructure, energy, emissions, materials, labor, regional planning, public health supply chains, and resilience analysis.

Systems modeling concept Input-output counterpart Interpretive value
Nodes Sectors, industries, products, or regions. Units of system structure.
Edges Intersectoral flows. Dependencies between units.
Weights Transactions or technical coefficients. Strength of dependence.
State vector Total output or final demand vector. System condition or demand driver.
Propagation Leontief inverse or power expansion. Direct and indirect effects.
Externalities Environmental or social extensions. Hidden impacts associated with production.

Input-output modeling is therefore a bridge between linear algebra, economic accounting, network reasoning, sustainability analysis, and policy interpretation.

Back to top ↑

Mathematical Deepening

This section adds a more formal layer. Economic input-output models connect matrix construction, coefficient normalization, linear systems, matrix inversion, spectral productivity conditions, multiplier analysis, perturbation analysis, sensitivity, uncertainty, and extension vectors.

Matrix Structure Review

Transactions Matrix

The transactions matrix records observed intersectoral flows between producing and using sectors.

Technical Coefficient Matrix

The coefficient matrix normalizes flows by sector output to estimate direct input requirements.

Final Demand Vector

The final demand vector represents demand outside the intermediate production network.

Total Output Vector

The total output vector gives production levels needed to satisfy intermediate and final demand.

Requirements Review

Direct Requirements

The matrix \(A\) represents immediate input needs per unit of sector output.

Indirect Requirements

Powers of \(A\) represent upstream rounds of production dependence.

Total Requirements

The Leontief inverse \((I-A)^{-1}\) summarizes direct and indirect requirements.

Multiplier Structure

Column sums or extension-weighted sums summarize output, employment, emissions, or value-added effects.

Diagnostic Review

Invertibility

The matrix \(I-A\) must be invertible or solvable for the standard system.

Conditioning

Poor conditioning can make output estimates sensitive to coefficient or demand error.

Productivity

The system should be reviewed to ensure coefficients represent feasible production requirements.

Sensitivity

Demand shocks, coefficient uncertainty, and aggregation choices should be tested.

Governance Review

Data Provenance

Input-output results depend on the source, year, sector definitions, and accounting framework.

Boundary Choice

Regional, national, and multiregional boundaries shape imports, leakage, and responsibility claims.

Scenario Assumptions

Final demand changes should be interpreted under fixed-coefficient and capacity assumptions.

Responsible Interpretation

Multipliers and total requirements are model-derived estimates, not automatic causal proof.

Back to top ↑

Examples from Systems Modeling

Economic input-output models apply wherever production systems are connected through intermediate requirements, final demand, and indirect effects.

Clean Energy Investment

A final demand increase for clean-energy infrastructure can be translated into output requirements across construction, equipment, metals, transport, utilities, and services.

Supply-Chain Risk Review

Total requirements can show which upstream sectors support many downstream activities and where sector-level exposure may be concentrated.

Regional Economic Planning

Regional input-output models can estimate how local final demand supports local production while highlighting imports and leakage.

Carbon Footprint Analysis

Environmental extensions can connect consumption demand to direct and indirect emissions across supply chains.

Disaster Recovery Assessment

Sector disruption scenarios can reveal indirect production dependencies that matter for recovery planning.

Public Health Supply Systems

Health-sector demand can be linked to pharmaceuticals, equipment, logistics, energy, waste services, and administrative support.

Across these examples, input-output analysis clarifies interdependence while requiring careful treatment of assumptions, boundaries, and data.

Back to top ↑

Computation and Reproducible Workflows

Computational workflows for input-output modeling should document the sector list, transactions matrix, total output vector, final demand vector, technical coefficient method, zero-output handling, price basis, accounting year, regional boundary, matrix invertibility, condition number, Leontief inverse, multipliers, shock vector, environmental coefficients, sensitivity tests, and interpretation warnings.

The companion repository treats input-output modeling as an auditable systems workflow. Python, R, Julia, SQL, Haskell, C, C++, Fortran, Rust, Go, notebooks, schemas, generated outputs, Canvas artifacts, advanced reports, and calculators each support a different layer of reproducible input-output diagnostics.

For this article, the computational examples focus on technical coefficient construction, Leontief-style output solution, multipliers, demand-shock response, emissions extension, condition diagnostics, governance tables, and interpretation warnings.

Back to top ↑

Python Workflow: Input-Output Audit

The Python workflow below computes an input-output audit for a small synthetic sector system. It builds a technical coefficient matrix, solves the output system, computes multipliers, applies a demand shock, adds an emissions extension, and records governance warnings.

from __future__ import annotations

from dataclasses import asdict, dataclass
from pathlib import Path
import csv
import json
import numpy as np


@dataclass(frozen=True)
class InputOutputAudit:
    model_name: str
    sectors: int
    method: str
    coefficient_basis: str
    condition_number: float
    maximum_output_multiplier: float
    highest_multiplier_sector: str
    total_baseline_output: float
    total_shock_output_change: float
    total_emissions_for_final_demand: float
    assumption_warning: str
    interpretation_warning: str


def build_system() -> tuple[list[str], np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
    sectors = ["energy", "manufacturing", "transport", "services"]

    # z_ij: output from sector i used by sector j
    transactions = np.array(
        [
            [8.0, 18.0, 10.0, 7.0],
            [4.0, 12.0, 8.0, 11.0],
            [3.0, 9.0, 6.0, 8.0],
            [5.0, 14.0, 7.0, 16.0],
        ],
        dtype=float,
    )

    total_output = np.array([80.0, 120.0, 90.0, 140.0], dtype=float)
    final_demand = np.array([37.0, 67.0, 59.0, 98.0], dtype=float)
    emissions_intensity = np.array([0.72, 0.45, 0.60, 0.18], dtype=float)

    return sectors, transactions, total_output, final_demand, emissions_intensity


def technical_coefficients(transactions: np.ndarray, total_output: np.ndarray) -> np.ndarray:
    if np.any(total_output <= 0):
        raise ValueError("Total output must be positive for technical coefficient construction.")
    return transactions / total_output.reshape(1, -1)


def input_output_audit() -> tuple[InputOutputAudit, np.ndarray, np.ndarray, np.ndarray]:
    sectors, transactions, total_output, final_demand, emissions_intensity = build_system()

    A = technical_coefficients(transactions, total_output)
    I = np.eye(len(sectors))
    net_requirements = I - A

    condition_number = float(np.linalg.cond(net_requirements))
    leontief_inverse = np.linalg.inv(net_requirements)

    solved_output = leontief_inverse @ final_demand
    output_multipliers = leontief_inverse.sum(axis=0)

    demand_shock = np.array([0.0, 10.0, 0.0, 15.0], dtype=float)
    output_change = leontief_inverse @ demand_shock

    total_emissions = float(emissions_intensity @ solved_output)

    highest_index = int(np.argmax(output_multipliers))

    audit = InputOutputAudit(
        model_name="synthetic_economic_input_output_audit",
        sectors=len(sectors),
        method="demand_driven_leontief_input_output_system",
        coefficient_basis="sector_input_per_unit_output",
        condition_number=round(condition_number, 12),
        maximum_output_multiplier=round(float(output_multipliers[highest_index]), 12),
        highest_multiplier_sector=sectors[highest_index],
        total_baseline_output=round(float(solved_output.sum()), 12),
        total_shock_output_change=round(float(output_change.sum()), 12),
        total_emissions_for_final_demand=round(total_emissions, 12),
        assumption_warning=(
            "The model assumes fixed technical coefficients, proportional production, no price response, "
            "no substitution, and no binding capacity constraints for the scenario."
        ),
        interpretation_warning=(
            "Input-output multipliers are model-derived dependency estimates, not automatic causal proof. "
            "Sector aggregation, boundary choices, imports, data year, and coefficient uncertainty should be reviewed."
        ),
    )

    return audit, A, leontief_inverse, output_change


def write_outputs(output_dir: Path) -> None:
    (output_dir / "tables").mkdir(parents=True, exist_ok=True)
    (output_dir / "json").mkdir(parents=True, exist_ok=True)

    sectors, transactions, total_output, final_demand, emissions_intensity = build_system()
    audit, A, leontief_inverse, output_change = input_output_audit()

    row = asdict(audit)

    with (output_dir / "tables" / "input_output_audit.csv").open(
        "w", newline="", encoding="utf-8"
    ) as handle:
        writer = csv.DictWriter(handle, fieldnames=list(row.keys()))
        writer.writeheader()
        writer.writerow(row)

    with (output_dir / "tables" / "technical_coefficients.csv").open(
        "w", newline="", encoding="utf-8"
    ) as handle:
        writer = csv.writer(handle)
        writer.writerow(["supplying_sector"] + sectors)
        for sector, values in zip(sectors, A):
            writer.writerow([sector] + [round(float(v), 12) for v in values])

    with (output_dir / "tables" / "leontief_inverse.csv").open(
        "w", newline="", encoding="utf-8"
    ) as handle:
        writer = csv.writer(handle)
        writer.writerow(["supplying_sector"] + sectors)
        for sector, values in zip(sectors, leontief_inverse):
            writer.writerow([sector] + [round(float(v), 12) for v in values])

    with (output_dir / "tables" / "shock_output_change.csv").open(
        "w", newline="", encoding="utf-8"
    ) as handle:
        writer = csv.DictWriter(handle, fieldnames=["sector", "output_change"])
        writer.writeheader()
        for sector, value in zip(sectors, output_change):
            writer.writerow({"sector": sector, "output_change": round(float(value), 12)})

    (output_dir / "json" / "input_output_audit.json").write_text(
        json.dumps(row, indent=2, sort_keys=True),
        encoding="utf-8",
    )


if __name__ == "__main__":
    write_outputs(Path("outputs"))
    print("Economic input-output audit complete.")

This workflow keeps coefficients, matrix diagnostics, multipliers, shock response, environmental extension, and warnings together.

Back to top ↑

R Workflow: Sector Dependency Diagnostics

R can support input-output diagnostics using matrix operations, coefficient construction, Leontief inverse calculation, output multipliers, demand shocks, and environmental extensions.

sectors <- c("energy", "manufacturing", "transport", "services")

transactions <- matrix(
  c(
    8, 18, 10, 7,
    4, 12, 8, 11,
    3, 9, 6, 8,
    5, 14, 7, 16
  ),
  nrow = 4,
  byrow = TRUE
)

rownames(transactions) <- sectors
colnames(transactions) <- sectors

total_output <- c(80, 120, 90, 140)
final_demand <- c(37, 67, 59, 98)
emissions_intensity <- c(0.72, 0.45, 0.60, 0.18)

A <- sweep(transactions, 2, total_output, FUN = "/")
I <- diag(length(sectors))
net_requirements <- I - A

leontief_inverse <- solve(net_requirements)
solved_output <- leontief_inverse %*% final_demand
output_multipliers <- colSums(leontief_inverse)

demand_shock <- c(0, 10, 0, 15)
output_change <- leontief_inverse %*% demand_shock
total_emissions <- as.numeric(emissions_intensity %*% solved_output)

audit_record <- data.frame(
  model_name = "synthetic_economic_input_output_audit",
  sectors = length(sectors),
  method = "demand_driven_leontief_input_output_system",
  coefficient_basis = "sector_input_per_unit_output",
  condition_number = kappa(net_requirements),
  maximum_output_multiplier = max(output_multipliers),
  highest_multiplier_sector = sectors[which.max(output_multipliers)],
  total_baseline_output = sum(solved_output),
  total_shock_output_change = sum(output_change),
  total_emissions_for_final_demand = total_emissions,
  assumption_warning = paste(
    "The model assumes fixed technical coefficients, proportional production, no price response,",
    "no substitution, and no binding capacity constraints."
  ),
  interpretation_warning = paste(
    "Input-output multipliers are model-derived dependency estimates, not automatic causal proof."
  )
)

dir.create("outputs/tables", recursive = TRUE, showWarnings = FALSE)

write.csv(audit_record, "outputs/tables/r_input_output_audit.csv", row.names = FALSE)
write.csv(A, "outputs/tables/r_technical_coefficients.csv")
write.csv(leontief_inverse, "outputs/tables/r_leontief_inverse.csv")
write.csv(data.frame(sector = sectors, output_change = as.numeric(output_change)),
          "outputs/tables/r_shock_output_change.csv",
          row.names = FALSE)

print(audit_record)

This R workflow keeps sector coefficients, output multipliers, shock response, emissions extension, and interpretation warnings auditable.

Back to top ↑

Haskell Workflow: Typed Input-Output Records

Haskell can represent input-output audit output as typed records, keeping method, coefficient basis, multipliers, emissions extension, and warnings attached to the result.

module Main where

data InputOutputAudit = InputOutputAudit
  { modelName :: String
  , sectors :: Int
  , method :: String
  , coefficientBasis :: String
  , conditionNumber :: Double
  , maximumOutputMultiplier :: Double
  , highestMultiplierSector :: String
  , totalBaselineOutput :: Double
  , totalShockOutputChange :: Double
  , totalEmissionsForFinalDemand :: Double
  , assumptionWarning :: String
  , interpretationWarning :: String
  } deriving (Show)

buildAudit :: InputOutputAudit
buildAudit =
  InputOutputAudit
    "synthetic_economic_input_output_audit"
    4
    "demand_driven_leontief_input_output_system"
    "sector_input_per_unit_output"
    2.41
    1.47
    "manufacturing"
    319.8
    36.2
    150.6
    "The model assumes fixed technical coefficients, proportional production, no price response, no substitution, and no binding capacity constraints."
    "Input-output multipliers are model-derived dependency estimates, not automatic causal proof."

main :: IO ()
main =
  print buildAudit

The typed record prevents multiplier claims from being separated from the assumptions that make them meaningful.

Back to top ↑

SQL Workflow: Input-Output Governance Registry

SQL can document input-output assumptions when economic dependency models support planning, reporting, sustainability accounting, regional analysis, or policy scenarios.

CREATE TABLE input_output_governance_registry (
    assumption_key TEXT PRIMARY KEY,
    assumption_name TEXT NOT NULL,
    mathematical_role TEXT NOT NULL,
    systems_modeling_role TEXT NOT NULL,
    review_warning TEXT NOT NULL
);

INSERT INTO input_output_governance_registry VALUES
(
  'sector_classification',
  'Sector classification',
  'Defines rows and columns of the input-output system.',
  'Determines which production relationships are visible.',
  'Aggregation can hide critical dependencies, bottlenecks, or heterogeneous activities.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'transactions_matrix',
  'Transactions matrix',
  'Records intersectoral flows from supplying sectors to using sectors.',
  'Defines the empirical structure of production interdependence.',
  'Transaction values depend on data source, accounting framework, year, valuation basis, and boundary.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'technical_coefficients',
  'Technical coefficients',
  'Normalize intersectoral flows by sector output.',
  'Define direct input requirements per unit of output.',
  'Coefficients assume stable production recipes over the scenario.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'final_demand',
  'Final demand',
  'Defines the exogenous demand vector applied to the production system.',
  'Drives total output requirements through direct and indirect effects.',
  'Scenario results depend strongly on demand definition and boundary.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'leontief_inverse',
  'Leontief inverse',
  'Solves total requirements through the matrix inverse of net requirements.',
  'Captures direct and indirect production requirements.',
  'Invertibility, conditioning, and productivity assumptions should be reviewed.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'multiplier_interpretation',
  'Multiplier interpretation',
  'Summarizes total requirements or extensions per unit of final demand.',
  'Supports compact reporting of system dependence.',
  'Multipliers are estimates under assumptions, not automatic causal proof.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'environmental_extension',
  'Environmental extension',
  'Applies emissions, energy, water, material, labor, or other coefficients to output requirements.',
  'Connects final demand to indirect environmental or social impacts.',
  'Extension coefficients require unit, boundary, allocation, and provenance review.'
);

INSERT INTO input_output_governance_registry VALUES
(
  'responsible_use',
  'Responsible use',
  'Defines how assumptions, uncertainty, sensitivity, and limitations are documented.',
  'Prevents sector dependency estimates from being overstated.',
  'Input-output models should support structured interpretation, not replace domain judgment.'
);

SELECT
    assumption_name,
    mathematical_role,
    systems_modeling_role,
    review_warning
FROM input_output_governance_registry
ORDER BY assumption_key;

This registry keeps input-output workflows tied to sector definitions, transactions, coefficients, final demand, the Leontief inverse, multipliers, environmental extensions, and responsible interpretation.

Back to top ↑

GitHub Repository

The companion repository for this article is designed as a reproducible mathematical-modeling workspace. It supports input-output audits, technical coefficient construction, Leontief-style output solutions, multiplier calculations, demand-shock scenarios, environmental extensions, condition diagnostics, SQL governance tables, generated outputs, advanced mathematical audit reports, and reusable calculator scripts.

Back to top ↑

Interpretive Limits and Responsible Use

Economic input-output models are powerful because they make interdependence visible. They can show how final demand depends on intermediate production, how sectors rely on one another, how indirect effects accumulate, how shocks propagate through production relationships, and how environmental or social impacts attach to supply chains. Their limits arise because they are linear accounting-based models, not complete representations of economic behavior.

A technical coefficient is not a permanent law of production. A multiplier is not automatic causal proof. A sector is not a firm. A national table is not a local supply chain. A demand-driven model is not a full supply-constrained disaster model. An environmental extension is not a complete responsibility framework. A large multiplier may reflect aggregation, price structure, import treatment, or accounting design as much as physical dependence.

Responsible use requires documenting sector classification, table year, geographic boundary, valuation basis, data source, imports, coefficient construction, final demand scenario, invertibility, conditioning, productivity assumptions, multiplier type, environmental coefficients, sensitivity tests, uncertainty, and interpretation limits. Input-output models should clarify economic structure without overstating precision, causality, or policy certainty.

Back to top ↑

Back to top ↑

Further Reading

Back to top ↑

References

Back to top ↑

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top