BM 2025 Output-Based GVC Decomposition

gvcAnalyzer Package

2025-12-02

1 Introduction

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.

1.1 References

Borin, A., Mancini, M., & Taglioni, D. (2025). Economic consequences of trade and global value chain integration: A measurement perspective. The World Bank Economic Review.

2 Conceptual Framework

2.1 Output-Based Decomposition

The BM 2025 output decomposition classifies gross output of country s into:

  1. DomX: Purely domestic production (value added never crosses borders)

  2. TradX: Traditional one-crossing trade

  3. GVC_PF_X: Pure-forward GVC output (intermediates for foreign production)

  4. GVC_PB_X: Pure-backward GVC output (using foreign intermediates)

  5. GVC_TSImp: Two-sided GVC output via imported intermediates

  6. GVC_TSDom: Two-sided GVC output via domestic intermediates

  7. GVC_TS_X: Total two-sided GVC output (TSImp + TSDom)

  8. GVC_X: Total GVC-related output (PF + PB + TS)

The fundamental identity: X_total = DomX + TradX + GVC_X.

2.2 Key Advantages

The output-based approach:

3 Data and Setup

io <- bm_build_io(
  Z = bm_toy_Z,
  Y = bm_toy_Y,
  VA = bm_toy_VA,
  X = bm_toy_X,
  countries = bm_toy_countries,
  sectors = bm_toy_sectors
)

4 Country-Level Output Decomposition

4.1 Computing Output Components

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 116226183

4.2 Interpreting Results

Each row represents a country’s gross output decomposition:

4.3 Output-Based Participation Measures

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.06222055

Key indicators:

5 Sector-Level Output Decomposition

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

5.1 Sectoral Analysis

# 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.08570681

6 Visualization

6.1 GVC Participation by Country

oldpar <- 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()


par(oldpar)

6.2 GVC Composition

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()


par(oldpar)

6.3 Forward Orientation

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()


par(oldpar)

7 Comparison: Country vs Sector Level

# 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.02148852

The sector-level aggregation matches the direct country-level calculation, confirming consistency.

8 Summary

This vignette demonstrated the BM 2025 output-based GVC decomposition:

  1. Country-level output components and participation measures

  2. Sector-level decomposition for detailed industrial analysis

  3. Visualization of GVC participation and orientation

  4. 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.

9 Session Information

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