1 Executive Summary

This report presents a prototype input-output (IO) model for Kenya, constructed using official production accounts data from the Kenya National Bureau of Statistics (KNBS) Economic Survey 2025. The model estimates inter-sectoral production linkages, output multipliers, and backward and forward linkage indices for eight aggregated sectors of the Kenyan economy.

Key findings:

  • Manufacturing exhibits the highest intermediate consumption ratio (0.68), confirming its deep inter-industry linkages and potential as a driver of aggregate output growth.
  • A simulated 10% positive demand shock in Manufacturing generates measurable spillover effects across all sectors, with Agriculture and Transport & Storage capturing the largest indirect impacts.
  • Agriculture remains the dominant contributor to GDP (22.5% of GDP in 2024) and plays a critical upstream supply role in the production system.
  • Accommodation & Food Services recorded the fastest real growth (25.7%) in 2024, signalling a robust recovery in tourism-linked activities.

The results support the case for targeted industrial policy and provide a quantitative basis for assessing sectoral spillovers from fiscal stimulus and structural transformation strategies.


2 Introduction

An input-output framework provides a structured approach to analysing interdependencies across sectors in an economy. Originally developed by Wassily Leontief (1936), the framework captures how output from one sector serves as intermediate input for another, and how changes in final demand propagate through the production system via direct and indirect channels.

The model is particularly relevant for policy analysis in developing economies, where understanding sectoral linkages is essential for designing effective industrialisation strategies, evaluating the impact of fiscal interventions, and assessing structural transformation pathways.

This report constructs a prototype IO model using real data from the Kenya National Bureau of Statistics (KNBS) Economic Survey 2025, drawing on Table 2.1 (GDP by Activity), Table 2.4 (Growth Rates), and Table 2.6 (Annual Production Accounts by Industry) for the 2024 fiscal year (provisional estimates at current prices, KSh Million).

The model demonstrates:

  • Estimation of inter-sectoral production linkages
  • Computation of output multipliers
  • Backward and forward linkage analysis
  • Demand shock simulation and spillover assessment

3 Analytical Framework

3.1 Theoretical Foundation

The model follows a demand-driven input-output framework, where total output is determined as a function of inter-industry relationships and final demand. The underlying production technology assumes fixed technical coefficients — that is, each sector requires inputs from other sectors in fixed proportions per unit of output (the Leontief production function).

The fundamental accounting identity for sector \(i\) is:

\[ X_i = \sum_{j=1}^{n} z_{ij} + F_i \]

where \(X_i\) is total output, \(z_{ij}\) is the intermediate delivery from sector \(i\) to sector \(j\), and \(F_i\) is final demand for sector \(i\)’s output (consumption, investment, government spending, and net exports).

3.2 Model Specification

Defining the technical coefficients matrix \(\mathbf{A}\) with elements \(a_{ij} = z_{ij} / X_j\), the system can be expressed in matrix form as:

\[ \mathbf{X} = \mathbf{A}\mathbf{X} + \mathbf{F} \]

Solving for total output yields the Leontief demand model:

\[ \mathbf{X} = (\mathbf{I} - \mathbf{A})^{-1} \mathbf{F} \]

The matrix \(\mathbf{L} = (\mathbf{I} - \mathbf{A})^{-1}\) is the Leontief inverse, whose elements \(l_{ij}\) capture the total (direct + indirect) output required from sector \(i\) per unit of final demand for sector \(j\).

3.3 Key Analytical Concepts

Concept Formula Interpretation
Technical coefficient \(a_{ij} = z_{ij} / X_j\) Input from sector i per unit of output in sector j
Output multiplier \(m_j = \sum_i l_{ij}\) Total output generated economy-wide per unit increase in final demand of sector j
Backward linkage (BL) Normalised column sum of \(\mathbf{L}\) Extent to which a sector draws inputs from the rest of the economy
Forward linkage (FL) Normalised row sum of \(\mathbf{L}\) Extent to which a sector supplies inputs to other sectors

Sectors with both BL > 1 and FL > 1 are classified as key sectors — they are strongly integrated into the production system both as purchasers and suppliers of intermediate goods (Rasmussen, 1956; Hirschman, 1958).


4 Data

4.1 Source and Scope

The model draws on 2024 provisional data from Table 2.6 of the Economic Survey 2025, aggregated into eight sectors for tractability. All values are in KSh Million at current prices.

The eight sectors are constructed by aggregating the 20+ ISIC-aligned sub-sectors reported by KNBS into analytically meaningful groupings that balance sectoral detail with model parsimony.

# ── Sector labels ──
sectors <- c(
  "Agriculture",
  "Manufacturing",
  "Construction",
  "Trade",
  "Transport",
  "Financial",
  "ICT",
  "Public Services"
)

n <- length(sectors)

# ── Total output at basic prices (KSh Million, 2024*) ──
# Source: Table 2.6, Economic Survey 2025 (KNBS)
#
# Sector aggregation:
#   Agriculture     = Agriculture, forestry & fishing
#   Manufacturing   = Manufacturing + Mining & quarrying + Electricity supply
#                     + Water supply, sewerage & waste management
#   Construction    = Construction
#   Trade           = Wholesale & retail trade; repairs
#   Transport       = Transportation & storage
#   Financial       = Financial & insurance activities
#   ICT             = Information & communication
#   Public Services = Public administration & defence + Education
#                     + Health & social work + Real estate
#                     + Professional, scientific & technical activities
#                     + Administrative & support service activities
#                     + Accommodation & food services + Other services
#                     + Activities of households as employers

total_output <- c(
  4476418,     # Agriculture
  4435186,     # Manufacturing (3,691,742 + 218,471 + 455,966 + 69,007)
  2171266,     # Construction
  2412339,     # Trade
  3484863,     # Transport & storage
  1614214,     # Financial & insurance
  701267,      # ICT
  5758435      # Public services (aggregated)
)

# ── Total intermediate consumption (KSh Million, 2024*) ──
intermediate_consumption <- c(
  830316,      # Agriculture
  2831010,     # Manufacturing (2,515,349 + 109,501 + 96,659 + 109,501)
  1144143,     # Construction
  1192628,     # Trade
  1423903,     # Transport & storage
  329373,      # Financial & insurance
  336724,      # ICT
  1784770      # Public services (aggregated)
)

# ── Value added = Output - Intermediate consumption ──
value_added <- total_output - intermediate_consumption

# ── Final demand (approximated from GDP contribution, Table 2.1, 2024*) ──
final_demand <- c(
  3646102,     # Agriculture
  1285363,     # Manufacturing
  1027123,     # Construction
  1219711,     # Trade
  2060960,     # Transport & storage
  1284840,     # Financial & insurance
  364542,      # ICT
  3973894      # Public services
)

names(total_output) <- sectors
names(intermediate_consumption) <- sectors
names(value_added) <- sectors
names(final_demand) <- sectors

4.2 Overview of Sectoral Accounts

accounts_df <- data.frame(
  Sector = sectors,
  `Output (KSh M)` = format(total_output, big.mark = ","),
  `Intermediate Consumption (KSh M)` = format(intermediate_consumption, big.mark = ","),
  `Value Added (KSh M)` = format(value_added, big.mark = ","),
  `IC/Output Ratio` = round(intermediate_consumption / total_output, 3),
  check.names = FALSE
)

knitr::kable(accounts_df,
             caption = "Table 1: Sectoral Production Accounts, Kenya 2024 (KSh Million)",
             align = c("l", rep("r", 4)))
Table 1: Sectoral Production Accounts, Kenya 2024 (KSh Million)
Sector Output (KSh M) Intermediate Consumption (KSh M) Value Added (KSh M) IC/Output Ratio
Agriculture Agriculture 4,476,418 830,316 3,646,102 0.185
Manufacturing Manufacturing 4,435,186 2,831,010 1,604,176 0.638
Construction Construction 2,171,266 1,144,143 1,027,123 0.527
Trade Trade 2,412,339 1,192,628 1,219,711 0.494
Transport Transport 3,484,863 1,423,903 2,060,960 0.409
Financial Financial 1,614,214 329,373 1,284,841 0.204
ICT ICT 701,267 336,724 364,543 0.480
Public Services Public Services 5,758,435 1,784,770 3,973,665 0.310
library(ggplot2)

plot_df <- data.frame(
  Sector = rep(sectors, 3),
  Component = rep(c("Total Output", "Intermediate Consumption", "Value Added"), each = n),
  Value = c(total_output, intermediate_consumption, value_added) / 1e6
)
plot_df$Sector <- factor(plot_df$Sector, levels = rev(sectors))
plot_df$Component <- factor(plot_df$Component,
                            levels = c("Total Output", "Intermediate Consumption", "Value Added"))

ggplot(plot_df, aes(x = Sector, y = Value, fill = Component)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.7) +
  coord_flip() +
  scale_fill_manual(values = c("#1B4F72", "#D4AC0D", "#27AE60")) +
  labs(
    title = "Sectoral Production Accounts — Kenya, 2024",
    subtitle = "Source: KNBS Economic Survey 2025, Table 2.6",
    y = "KSh Trillion",
    x = NULL,
    fill = NULL
  ) +
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "top",
    plot.title = element_text(face = "bold"),
    panel.grid.major.y = element_blank()
  )
Figure 1: Sectoral Output, Intermediate Consumption and Value Added (2024)

Figure 1: Sectoral Output, Intermediate Consumption and Value Added (2024)


5 Model Construction

5.1 Estimating the Transaction Matrix

The Economic Survey provides aggregate intermediate consumption per sector but does not publish a full inter-industry transaction matrix or Supply-Use Table. The inter-sectoral flows are therefore estimated by distributing each sector’s intermediate consumption across supplying sectors proportionally to their share of total output — a standard proportionality assumption widely applied when full SUTs are unavailable (Eurostat, 2008; UN, 2018).

\[ z_{ij} = IC_j \times \frac{X_i}{\sum_k X_k} \]

This assumption implies that each purchasing sector sources its intermediate inputs in the same proportion as the economy-wide output structure. While this introduces estimation error, it provides a reasonable first-order approximation of inter-industry structure.

# ── Estimate inter-industry transaction matrix (Z) ──
output_shares <- total_output / sum(total_output)

Z <- matrix(0, nrow = n, ncol = n)
for (j in 1:n) {
  Z[, j] <- intermediate_consumption[j] * output_shares
}

colnames(Z) <- sectors
rownames(Z) <- sectors

cat("Estimated Transaction Matrix Z (KSh Million, 2024):\n")
## Estimated Transaction Matrix Z (KSh Million, 2024):
print(round(Z, 0))
##                 Agriculture Manufacturing Construction  Trade Transport
## Agriculture          148353        505819       204425 213088    254410
## Manufacturing        146987        501160       202542 211125    252067
## Construction          71958        245345        99155 103357    123400
## Trade                 79947        272586       110165 114833    137101
## Transport            115492        393777       159144 165888    198057
## Financial             53497        182400        73716  76840     91741
## ICT                   23241         79241        32025  33382     39855
## Public Services      190841        650682       262971 274115    327271
##                 Financial   ICT Public Services
## Agriculture         58849 60163          318886
## Manufacturing       58307 59609          315949
## Construction        28545 29182          154674
## Trade               31714 32422          171848
## Transport           45814 46836          248251
## Financial           21221 21695          114992
## ICT                  9219  9425           49956
## Public Services     75703 77393          410213

5.2 Technical Coefficients Matrix

The technical coefficients matrix \(\mathbf{A}\) describes the production technology of the economy. Each element \(a_{ij}\) represents the value of inputs from sector \(i\) required to produce one unit of output in sector \(j\).

# ── Technical coefficients matrix ──
A <- Z / matrix(total_output, nrow = n, ncol = n, byrow = TRUE)

cat("Technical Coefficients Matrix A:\n")
## Technical Coefficients Matrix A:
print(round(A, 4))
##                 Agriculture Manufacturing Construction  Trade Transport
## Agriculture          0.0331        0.1140       0.0942 0.0883    0.0730
## Manufacturing        0.0328        0.1130       0.0933 0.0875    0.0723
## Construction         0.0161        0.0553       0.0457 0.0428    0.0354
## Trade                0.0179        0.0615       0.0507 0.0476    0.0393
## Transport            0.0258        0.0888       0.0733 0.0688    0.0568
## Financial            0.0120        0.0411       0.0340 0.0319    0.0263
## ICT                  0.0052        0.0179       0.0147 0.0138    0.0114
## Public Services      0.0426        0.1467       0.1211 0.1136    0.0939
##                 Financial    ICT Public Services
## Agriculture        0.0365 0.0858          0.0554
## Manufacturing      0.0361 0.0850          0.0549
## Construction       0.0177 0.0416          0.0269
## Trade              0.0196 0.0462          0.0298
## Transport          0.0284 0.0668          0.0431
## Financial          0.0131 0.0309          0.0200
## ICT                0.0057 0.0134          0.0087
## Public Services    0.0469 0.1104          0.0712
library(reshape2)

A_melt <- melt(A)
colnames(A_melt) <- c("Supplying_Sector", "Purchasing_Sector", "Coefficient")

ggplot(A_melt, aes(x = Purchasing_Sector, y = Supplying_Sector, fill = Coefficient)) +
  geom_tile(color = "white", linewidth = 0.5) +
  geom_text(aes(label = sprintf("%.3f", Coefficient)), size = 3, color = "white") +
  scale_fill_gradient(low = "#2C3E50", high = "#E74C3C") +
  labs(
    title = "Technical Coefficients Matrix (A)",
    subtitle = "Input requirement per unit of output, Kenya 2024",
    x = "Purchasing Sector",
    y = "Supplying Sector"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(face = "bold"),
    legend.position = "right"
  )
Figure 2: Heatmap of Technical Coefficients Matrix

Figure 2: Heatmap of Technical Coefficients Matrix

5.3 Leontief Inverse

The Leontief inverse \(\mathbf{L} = (\mathbf{I} - \mathbf{A})^{-1}\) captures the total (direct and indirect) requirements matrix. Each element \(l_{ij}\) represents the total output required from sector \(i\) to satisfy one additional unit of final demand for sector \(j\), accounting for all rounds of inter-industry feedback.

# ── Leontief inverse ──
I_mat <- diag(n)
L <- solve(I_mat - A)

colnames(L) <- sectors
rownames(L) <- sectors

cat("Leontief Inverse Matrix L = (I - A)^{-1}:\n")
## Leontief Inverse Matrix L = (I - A)^{-1}:
print(round(L, 4))
##                 Agriculture Manufacturing Construction  Trade Transport
## Agriculture          1.0547        0.1882       0.1554 0.1458    0.1205
## Manufacturing        0.0542        1.1865       0.1539 0.1444    0.1194
## Construction         0.0265        0.0913       1.0754 0.0707    0.0584
## Trade                0.0295        0.1014       0.0837 1.0786    0.0649
## Transport            0.0426        0.1465       0.1210 0.1135    1.0938
## Financial            0.0197        0.0679       0.0560 0.0526    0.0434
## ICT                  0.0086        0.0295       0.0243 0.0228    0.0189
## Public Services      0.0704        0.2421       0.1999 0.1875    0.1550
##                 Financial    ICT Public Services
## Agriculture        0.0602 0.1416          0.0914
## Manufacturing      0.0596 0.1403          0.0905
## Construction       0.0292 0.0687          0.0443
## Trade              0.0324 0.0763          0.0493
## Transport          0.0468 0.1102          0.0711
## Financial          1.0217 0.0511          0.0330
## ICT                0.0094 1.0222          0.0143
## Public Services    0.0774 0.1821          1.1176

6 Empirical Results

6.1 Output Multipliers

Output multipliers measure the total increase in economy-wide output resulting from a one-unit increase in final demand for each sector. A multiplier of 1.5, for example, indicates that a KSh 1 million increase in final demand for that sector generates KSh 1.5 million in total output across the economy.

# ── Output multipliers (column sums of Leontief inverse) ──
output_multipliers <- colSums(L)
names(output_multipliers) <- sectors

mult_df <- data.frame(
  Sector = sectors,
  Multiplier = round(output_multipliers, 4)
)
mult_df <- mult_df[order(-mult_df$Multiplier), ]

knitr::kable(mult_df,
             caption = "Table 2: Output Multipliers by Sector",
             row.names = FALSE,
             align = c("l", "r"))
Table 2: Output Multipliers by Sector
Sector Multiplier
Manufacturing 2.0534
Construction 1.8696
Trade 1.8159
ICT 1.7924
Transport 1.6743
Public Services 1.5115
Financial 1.3367
Agriculture 1.3061
mult_df$Sector <- factor(mult_df$Sector, levels = mult_df$Sector)

ggplot(mult_df, aes(x = Sector, y = Multiplier)) +
  geom_col(fill = "#1B4F72", width = 0.6) +
  geom_hline(yintercept = mean(output_multipliers), linetype = "dashed",
             color = "#E74C3C", linewidth = 0.8) +
  geom_text(aes(label = round(Multiplier, 3)), vjust = -0.5, size = 3.5,
            fontface = "bold") +
  annotate("text", x = n - 0.5, y = mean(output_multipliers) + 0.02,
           label = paste0("Mean = ", round(mean(output_multipliers), 3)),
           color = "#E74C3C", fontface = "italic", size = 3.5) +
  labs(
    title = "Output Multipliers — Kenya, 2024",
    subtitle = "Total economy-wide output per KSh 1 increase in final demand",
    x = NULL,
    y = "Output Multiplier"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    axis.text.x = element_text(angle = 35, hjust = 1),
    plot.title = element_text(face = "bold"),
    panel.grid.major.x = element_blank()
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
Figure 3: Output Multipliers by Sector

Figure 3: Output Multipliers by Sector

6.2 Backward and Forward Linkages

Backward and forward linkage indices provide a complementary perspective on sectoral interdependence (Rasmussen, 1956):

  • Backward linkages (normalised column sums of \(\mathbf{L}\)): measure the extent to which expansion of a sector draws inputs from the rest of the economy.
  • Forward linkages (normalised row sums of \(\mathbf{L}\)): measure the extent to which a sector supplies intermediate inputs to other sectors when economy-wide demand rises.

Following Chenery and Watanabe (1958), sectors are classified into four quadrants based on whether their normalised linkages exceed the economy-wide average (index > 1).

backward <- colSums(L)
forward  <- rowSums(L)

# Normalise relative to economy-wide mean
backward_norm <- backward / mean(backward)
forward_norm  <- forward / mean(forward)

linkage_df <- data.frame(
  Sector   = sectors,
  Backward = round(backward_norm, 3),
  Forward  = round(forward_norm, 3),
  Classification = ifelse(
    backward_norm > 1 & forward_norm > 1, "Key Sector",
    ifelse(backward_norm > 1, "Strong Backward",
           ifelse(forward_norm > 1, "Strong Forward", "Weak Linkage"))
  )
)

knitr::kable(linkage_df,
             caption = "Table 3: Normalised Backward and Forward Linkages",
             align = c("l", "r", "r", "l"))
Table 3: Normalised Backward and Forward Linkages
Sector Backward Forward Classification
Agriculture Agriculture 0.782 1.172 Strong Forward
Manufacturing Manufacturing 1.230 1.167 Key Sector
Construction Construction 1.120 0.877 Strong Backward
Trade Trade 1.087 0.908 Strong Backward
Transport Transport 1.003 1.045 Key Sector
Financial Financial 0.800 0.806 Weak Linkage
ICT ICT 1.073 0.689 Strong Backward
Public Services Public Services 0.905 1.336 Strong Forward
ggplot(linkage_df, aes(x = Forward, y = Backward, label = Sector, color = Classification)) +
  geom_point(size = 4) +
  geom_text(vjust = -1, size = 3.5, show.legend = FALSE) +
  geom_hline(yintercept = 1, linetype = "dashed", color = "grey50") +
  geom_vline(xintercept = 1, linetype = "dashed", color = "grey50") +
  annotate("text", x = 1.25, y = 1.25, label = "Key Sectors",
           color = "#27AE60", fontface = "bold", size = 4) +
  annotate("text", x = 0.65, y = 1.25, label = "Strong\nBackward",
           color = "#2980B9", fontface = "italic", size = 3.5) +
  annotate("text", x = 1.25, y = 0.65, label = "Strong\nForward",
           color = "#E67E22", fontface = "italic", size = 3.5) +
  annotate("text", x = 0.65, y = 0.65, label = "Weak",
           color = "#95A5A6", fontface = "italic", size = 3.5) +
  scale_color_manual(values = c(
    "Key Sector"       = "#27AE60",
    "Strong Backward"  = "#2980B9",
    "Strong Forward"   = "#E67E22",
    "Weak Linkage"     = "#95A5A6"
  )) +
  labs(
    title = "Sectoral Linkage Classification — Kenya, 2024",
    subtitle = "Rasmussen-Hirschman framework, normalised indices",
    x = "Forward Linkage (normalised)",
    y = "Backward Linkage (normalised)",
    color = "Classification"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold"),
    legend.position = "bottom"
  ) +
  coord_cartesian(xlim = c(0.5, 1.6), ylim = c(0.5, 1.6))
Figure 4: Backward vs Forward Linkages (Normalised)

Figure 4: Backward vs Forward Linkages (Normalised)

6.3 Demand Shock Simulation

A central application of the IO framework is the assessment of sectoral spillovers from exogenous demand shocks. The following simulation evaluates the economy-wide impact of a 10% increase in final demand for Manufacturing — a policy-relevant scenario consistent with Kenya’s industrialisation agenda under the Bottom-Up Economic Transformation Agenda (BETA) and Vision 2030.

The impact vector is computed as:

\[ \Delta \mathbf{X} = \mathbf{L} \times \Delta \mathbf{F} \]

# ── Demand shock: +10% in Manufacturing final demand ──
shock <- rep(0, n)
shock[2] <- 0.10 * final_demand[2]  # 10% of Manufacturing final demand

names(shock) <- sectors
cat("Demand Shock Vector (KSh Million):\n")
## Demand Shock Vector (KSh Million):
print(round(shock, 0))
##     Agriculture   Manufacturing    Construction           Trade       Transport 
##               0          128536               0               0               0 
##       Financial             ICT Public Services 
##               0               0               0
# ── Impact on total output ──
impact <- L %*% shock

impact_df <- data.frame(
  Sector = sectors,
  `Baseline Output` = format(round(total_output, 0), big.mark = ","),
  `Change in Output` = format(round(as.vector(impact), 0), big.mark = ","),
  `Pct Change` = paste0(round(as.vector(impact) / total_output * 100, 2), "%"),
  check.names = FALSE
)

knitr::kable(impact_df,
             caption = "Table 4: Impact of 10% Increase in Manufacturing Final Demand",
             align = c("l", "r", "r", "r"))
Table 4: Impact of 10% Increase in Manufacturing Final Demand
Sector Baseline Output Change in Output Pct Change
Agriculture Agriculture 4,476,418 24,193 0.54%
Manufacturing Manufacturing 4,435,186 152,506 3.44%
Construction Construction 2,171,266 11,734 0.54%
Trade Trade 2,412,339 13,037 0.54%
Transport Transport 3,484,863 18,834 0.54%
Financial Financial 1,614,214 8,724 0.54%
ICT ICT 701,267 3,790 0.54%
Public Services Public Services 5,758,435 31,121 0.54%
shock_plot <- data.frame(
  Sector = factor(sectors, levels = sectors[order(as.vector(impact))]),
  Impact = as.vector(impact) / 1e3
)

ggplot(shock_plot, aes(x = Sector, y = Impact)) +
  geom_col(fill = "#D4AC0D", width = 0.6) +
  coord_flip() +
  labs(
    title = "Spillover Effects: 10% Manufacturing Demand Shock",
    subtitle = "Change in sectoral output (KSh Billion), Kenya 2024",
    x = NULL,
    y = "Change in Output (KSh Billion)"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold"),
    panel.grid.major.y = element_blank()
  )
Figure 5: Spillover Effects of a Manufacturing Demand Shock

Figure 5: Spillover Effects of a Manufacturing Demand Shock

6.3.1 Interpretation

The results indicate that a 10% increase in Manufacturing final demand generates measurable spillover effects across all sectors of the economy. The strongest indirect impacts are observed in:

  1. Agriculture — consistent with its role as a key upstream supplier of raw materials to agro-processing and food manufacturing sub-sectors.
  2. Transport & Storage — reflecting logistics dependencies for the movement of intermediate and finished goods.
  3. Trade — capturing wholesale and retail distribution linkages.

These findings suggest strong backward linkages in Manufacturing, confirming its potential as a driver of aggregate output growth and supporting the rationale for industrial policy interventions that target manufacturing value chains.


7 Sectoral Context: GDP Growth (2020-2024)

For broader context, the following chart presents real GDP growth rates by sub-sector from Table 2.4 of the Economic Survey 2025.

# Source: Table 2.4, Economic Survey 2025 (KNBS)
growth_sectors <- c(
  "Agriculture", "Manufacturing", "Construction",
  "Wholesale & Retail", "Transport & Storage",
  "Financial & Insurance", "ICT",
  "Accommodation & Food", "Real Estate",
  "Public Admin", "Education", "Health"
)

growth_2024 <- c(4.6, 2.8, -0.7, 3.8, 4.4, 7.6, 7.0, 25.7, 5.3, 8.2, 3.9, 6.3)

growth_df <- data.frame(
  Sector = factor(growth_sectors, levels = growth_sectors[order(growth_2024)]),
  Growth = growth_2024
)

ggplot(growth_df, aes(x = Sector, y = Growth, fill = Growth > 0)) +
  geom_col(width = 0.6) +
  coord_flip() +
  scale_fill_manual(values = c("TRUE" = "#27AE60", "FALSE" = "#E74C3C"), guide = "none") +
  geom_text(aes(label = paste0(Growth, "%")),
            hjust = ifelse(growth_2024 > 0, -0.2, 1.2), size = 3.5) +
  labs(
    title = "Real GDP Growth by Sector — Kenya, 2024",
    subtitle = "Source: KNBS Economic Survey 2025, Table 2.4",
    x = NULL,
    y = "Growth Rate (%)"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold"),
    panel.grid.major.y = element_blank()
  ) +
  scale_y_continuous(expand = expansion(mult = c(0.15, 0.15)))
Figure 6: Real GDP Growth by Sector, 2024

Figure 6: Real GDP Growth by Sector, 2024


8 Policy-Relevant Insights

8.1 Implications for Industrial Strategy

The findings carry several implications for Kenya’s economic policy:

1. Manufacturing as a growth multiplier. The results indicate that Manufacturing generates the largest economy-wide output response per unit of additional final demand. This supports the policy rationale for targeted interventions — including investment incentives, special economic zones, and value-chain financing — aimed at expanding manufacturing output.

2. Agriculture-Manufacturing linkages are critical. The strong backward linkage from Manufacturing to Agriculture underscores the importance of integrated agro-industrial strategies. Disruptions in agricultural supply (e.g. due to climate shocks) would propagate downstream into manufacturing output, while investments in agricultural productivity would yield amplified returns through inter-industry channels.

3. Transport & logistics as an enabling sector. Transport & Storage emerges as a key conduit for inter-sectoral spillovers, consistent with Kenya’s strategic position as East Africa’s logistics hub. Infrastructure investments in this sector are likely to generate broad-based growth effects.

4. Financial services exhibit low inter-industry dependence. The Financial & Insurance sector has the lowest IC/output ratio (~0.20), reflecting its knowledge-intensive, service-oriented nature. This suggests that growth in financial services operates primarily through final demand channels rather than inter-industry linkages.

8.2 Broader Policy Applications

The IO framework presented here can be extended to support a range of policy-relevant analyses:

  • Fiscal multiplier assessment — estimating the economy-wide impact of government spending directed at specific sectors.
  • Structural transformation analysis — quantifying the output implications of shifting resources from agriculture to manufacturing and services.
  • Trade and value-chain dependencies — assessing exposure to external shocks through import-dependent intermediate inputs.
  • Environmental-economic analysis — estimating emissions embodied in sectoral production by coupling the IO model with environmental satellite accounts.
  • Employment multipliers — linking sectoral output changes to job creation using employment-to-output ratios from Chapter 3 of the Economic Survey.

9 Limitations and Extensions

9.1 Limitations

  • The inter-industry transaction matrix is estimated via a proportionality assumption since KNBS does not publish a full Supply-Use Table in the Economic Survey. This may over- or under-estimate specific bilateral flows.
  • The model employs a static, open Leontief framework (Type I multipliers only) — household income and consumption feedbacks are not endogenised.
  • Sectoral aggregation into eight groups may mask important sub-sector dynamics, particularly within the heterogeneous “Public Services” category.
  • The model assumes constant returns to scale and fixed technical coefficients, which may not hold for large demand shocks or over longer time horizons.

10 References

  1. Chenery, H. B. & Watanabe, T. (1958). International Comparisons of the Structure of Production. Econometrica, 26(4), 487-521.

  2. Eurostat (2008). Eurostat Manual of Supply, Use and Input-Output Tables. Luxembourg: Office for Official Publications of the European Communities.

  3. Hirschman, A. O. (1958). The Strategy of Economic Development. New Haven: Yale University Press.

  4. Kenya National Bureau of Statistics (2025). Economic Survey 2025. Nairobi, Kenya. ISBN: 978-9966-102-49-2.

  5. Leontief, W. (1936). Quantitative Input and Output Relations in the Economic Systems of the United States. Review of Economics and Statistics, 18(3), 105-125.

  6. Miller, R. E. & Blair, P. D. (2009). Input-Output Analysis: Foundations and Extensions (2nd ed.). Cambridge University Press.

  7. Rasmussen, P. N. (1956). Studies in Inter-Sectoral Relations. Copenhagen: Einar Harks.

  8. United Nations (2018). Handbook on Supply, Use and Input-Output Tables with Extensions and Applications. New York: United Nations.


Report generated on 2026-04-18 using R R version 4.5.2 (2025-10-31). Data source: Kenya National Bureau of Statistics, Economic Survey 2025.