The BM 2025 framework extends GVC measurement beyond trade flows to the production side, decomposing gross output into GVC-related and non-GVC components. This vignette demonstrates the output-based decomposition methodology.
Borin, A., Mancini, M., & Taglioni, D. (2025). Economic consequences of trade and global value chain integration: A measurement perspective. The World Bank Economic Review.
The BM 2025 output decomposition classifies gross output of country s into:
DomX: Purely domestic production (value added never crosses borders)
TradX: Traditional one-crossing trade
GVC_PF_X: Pure-forward GVC output (intermediates for foreign production)
GVC_PB_X: Pure-backward GVC output (using foreign intermediates)
GVC_TSImp: Two-sided GVC output via imported intermediates
GVC_TSDom: Two-sided GVC output via domestic intermediates
GVC_TS_X: Total two-sided GVC output (TSImp + TSDom)
GVC_X: Total GVC-related output (PF + PB + TS)
The fundamental identity: X_total = DomX + TradX + GVC_X.
The output-based approach:
Captures GVC involvement regardless of export destination
Provides production-side perspective complementary to trade flows
Enables sector-level analysis of GVC integration
Supports industrial policy analysis
out_comp <- bm_2025_output_components(io)
out_comp
#> country GVC_PF_X GVC_PB_X GVC_TSImp GVC_TSDom GVC_TS_X GVC_X DomX
#> 1 China 87001.08 226301.71 1984093.0 145326.53 2129419.5 2442722.3 12077920
#> 2 India 16075.05 46234.14 341713.9 13620.80 355334.7 417643.9 2151580
#> 3 Japan 43789.25 58926.79 527442.6 36361.99 563804.6 666520.6 4151500
#> 4 ROW 439409.35 254812.04 1823517.6 449083.39 2272601.0 2966822.4 57671452
#> TradX X_total
#> 1 22151856 36672498
#> 2 2270374 4839598
#> 3 3932253 8750273
#> 4 55587908 116226183Each row represents a country’s gross output decomposition:
X_total: Total gross output
DomX: Production for domestic final use only
TradX: Production for traditional one-crossing trade
GVC_PF_X: Production for foreign intermediate use (upstream)
GVC_PB_X: Production using foreign intermediates (downstream)
GVC_TS_X: Production with both foreign inputs and re-export linkages
From the components, we compute participation indicators:
out_meas <- bm_2025_output_measures(io)
out_meas
#> country GVC_PF_X GVC_PB_X GVC_TSImp GVC_TSDom GVC_TS_X GVC_X DomX
#> 1 China 87001.08 226301.71 1984093.0 145326.53 2129419.5 2442722.3 12077920
#> 2 India 16075.05 46234.14 341713.9 13620.80 355334.7 417643.9 2151580
#> 3 Japan 43789.25 58926.79 527442.6 36361.99 563804.6 666520.6 4151500
#> 4 ROW 439409.35 254812.04 1823517.6 449083.39 2272601.0 2966822.4 57671452
#> TradX X_total share_GVC_output share_PF_output share_TS_output
#> 1 22151856 36672498 0.06660911 0.03561645 0.8717403
#> 2 2270374 4839598 0.08629724 0.03848983 0.8508079
#> 3 3932253 8750273 0.07617141 0.06569826 0.8458922
#> 4 55587908 116226183 0.02552628 0.14810774 0.7660051
#> share_PB_output forward_output
#> 1 0.09264324 -0.05702680
#> 2 0.11070228 -0.07221245
#> 3 0.08840956 -0.02271129
#> 4 0.08588719 0.06222055Key indicators:
share_GVC_output: GVC-related output as a share of total output
share_PF_output, share_TS_output, share_PB_output: Composition of GVC output
forward_output: Output-based forward orientation index
The BM 2025 framework extends to country–sector pairs:
# Compute sectoral components and measures
out_comp_sec <- bm_2025_output_components_sector(io)
out_meas_sec <- bm_2025_output_measures_sector(io)
head(out_meas_sec, 12)
#> country sector X_i DomX_i TradX_i GVC_PF_Xi
#> 1 China Primary 3281502 1104751.84 1886504.79 11065.2952
#> 2 China Manufacturing 16650390 3024032.37 11438638.98 44890.1216
#> 3 China Service 16740606 7949135.51 8173835.06 31045.6670
#> 4 India Primary 637990 432358.86 184911.01 3253.3344
#> 5 India Manufacturing 1532351 293393.55 1011596.14 4467.9004
#> 6 India Service 2669257 1425827.50 1138779.59 8353.8112
#> 7 Japan Primary 122077 46272.56 65053.01 608.7586
#> 8 Japan Manufacturing 2653472 721062.50 1599990.69 20695.8292
#> 9 Japan Service 5974724 3384164.82 2368544.27 22484.6602
#> 10 ROW Primary 7509190 3482124.97 3698830.06 132805.5349
#> 11 ROW Manufacturing 26232285 8007655.87 17211004.00 116597.9728
#> 12 ROW Service 82484708 46181671.41 35147368.07 190005.8422
#> GVC_PB_Xi GVC_TSImp_i GVC_TSDom_i GVC_TS_Xi GVC_Xi
#> 1 2197.2355 250445.495 26537.340 276982.835 290245.37
#> 2 158581.0612 1924357.616 59889.847 1984247.463 2187718.65
#> 3 32428.5510 495261.865 58899.345 554161.210 617635.43
#> 4 528.8139 12386.388 4551.597 16937.984 20720.13
#> 5 30579.2489 189469.273 2844.887 192314.161 227361.31
#> 6 14137.8388 75933.949 6224.317 82158.267 104649.92
#> 7 267.9981 8852.171 1022.506 9874.677 10751.43
#> 8 36667.2447 261587.673 13468.070 275055.743 332418.82
#> 9 19152.4677 158506.371 21871.418 180377.789 222014.92
#> 10 1418.7738 116714.762 77295.903 194010.665 328234.97
#> 11 29723.3921 771555.339 95748.417 867303.757 1013625.12
#> 12 24513.3262 665110.275 276039.074 941149.349 1155668.52
#> share_GVC_output_i share_PF_output_i share_TS_output_i share_PB_output_i
#> 1 0.08844894 0.03812393 0.9543058 0.007570269
#> 2 0.13139144 0.02051915 0.9069939 0.072486954
#> 3 0.03689445 0.05026536 0.8972303 0.052504357
#> 4 0.03247721 0.15701320 0.8174651 0.025521743
#> 5 0.14837417 0.01965110 0.8458526 0.134496273
#> 6 0.03920564 0.07982626 0.7850772 0.135096512
#> 7 0.08807092 0.05662115 0.9184521 0.024926732
#> 8 0.12527693 0.06225830 0.8274373 0.110304360
#> 9 0.03715902 0.10127545 0.8124580 0.086266581
#> 10 0.04371110 0.40460507 0.5910725 0.004322433
#> 11 0.03864037 0.11503067 0.8556455 0.029323851
#> 12 0.01401070 0.16441206 0.8143766 0.021211382
#> forward_output_i
#> 1 0.030553665
#> 2 -0.051967807
#> 3 -0.002238997
#> 4 0.131491459
#> 5 -0.114845171
#> 6 -0.055270255
#> 7 0.031694423
#> 8 -0.048046063
#> 9 0.015008868
#> 10 0.400282638
#> 11 0.085706815
#> 12 0.143200679# Example: Compare manufacturing sectors across countries
# Note: Using column names specific to the sectoral function (X_i, share_GVC_output_i, etc.)
manufacturing <- out_meas_sec[out_meas_sec$sector == "Manufacturing", ]
# Select key columns for display
cols_to_show <- c("country", "sector", "X_i", "share_GVC_output_i", "forward_output_i")
manufacturing[, cols_to_show]
#> country sector X_i share_GVC_output_i forward_output_i
#> 2 China Manufacturing 16650390 0.13139144 -0.05196781
#> 5 India Manufacturing 1532351 0.14837417 -0.11484517
#> 8 Japan Manufacturing 2653472 0.12527693 -0.04804606
#> 11 ROW Manufacturing 26232285 0.03864037 0.08570681oldpar <- par(mar = c(5, 5, 3, 2))
barplot(
out_meas$share_GVC_output,
names.arg = out_meas$country,
col = "steelblue",
ylab = "GVC Share of Output",
main = "Output-Based GVC Participation",
ylim = c(0, max(out_meas$share_GVC_output, na.rm = TRUE) * 1.2)
)
grid()oldpar <- par(mar = c(5, 5, 3, 2))
composition <- as.matrix(out_meas[, c("share_PF_output", "share_TS_output", "share_PB_output")])
rownames(composition) <- out_meas$country
barplot(
t(composition),
beside = FALSE,
col = c("darkgreen", "orange", "darkred"),
ylab = "Share of GVC Output",
main = "GVC Output Composition",
legend.text = c("Pure-Forward", "Two-Sided", "Pure-Backward"),
args.legend = list(x = "topright", bty = "n")
)
grid()oldpar <- par(mar = c(5, 5, 3, 2))
barplot(
out_meas$forward_output,
names.arg = out_meas$country,
col = ifelse(out_meas$forward_output > 0, "darkgreen", "darkred"),
ylab = "Forward Orientation Index",
main = "Output-Based Forward Orientation",
ylim = c(-1, 1)
)
abline(h = 0, lty = 2, col = "gray", lwd = 2)
grid()# Aggregate sector-level results to country level
# Note: Using X_i and GVC_Xi for sector-level columns
sec_agg <- aggregate(
cbind(X_i, GVC_Xi) ~ country,
data = out_comp_sec,
FUN = sum
)
# Calculate implied country share from sector sums
sec_agg$share_GVC_output <- sec_agg$GVC_Xi / sec_agg$X_i
# Compare with direct country-level calculation
# CORRECTED: Using out_meas (which has the shares) instead of out_comp
comparison <- merge(
out_meas[, c("country", "share_GVC_output")],
sec_agg[, c("country", "share_GVC_output")],
by = "country",
suffixes = c("_direct", "_sectoral")
)
comparison
#> country share_GVC_output_direct share_GVC_output_sectoral
#> 1 China 0.06660911 0.08441201
#> 2 India 0.08629724 0.07288443
#> 3 Japan 0.07617141 0.06459058
#> 4 ROW 0.02552628 0.02148852The sector-level aggregation matches the direct country-level calculation, confirming consistency.
This vignette demonstrated the BM 2025 output-based GVC decomposition:
Country-level output components and participation measures
Sector-level decomposition for detailed industrial analysis
Visualization of GVC participation and orientation
Consistency between country and sector aggregation
The output-based approach provides a comprehensive view of GVC integration from the production side, complementing trade-based measures for robust GVC analysis.
sessionInfo()
#> R version 4.5.1 (2025-06-13)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sequoia 15.6
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
#>
#> locale:
#> [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#>
#> time zone: Asia/Tokyo
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] gvcAnalyzer_0.1.1
#>
#> loaded via a namespace (and not attached):
#> [1] digest_0.6.38 R6_2.6.1 fastmap_1.2.0 Matrix_1.7-4
#> [5] xfun_0.54 lattice_0.22-7 cachem_1.1.0 knitr_1.50
#> [9] htmltools_0.5.8.1 rmarkdown_2.30 lifecycle_1.0.4 cli_3.6.5
#> [13] grid_4.5.1 sass_0.4.10 jquerylib_0.1.4 compiler_4.5.1
#> [17] rstudioapi_0.17.1 tools_4.5.1 evaluate_1.0.5 bslib_0.9.0
#> [21] yaml_2.3.10 rlang_1.1.6 jsonlite_2.0.0