Friendly & Fast Input-Output Analysis 
fio (Friendly Input-Output) is a R package designed for economic input-output analysis that combines user-friendly interfaces with high-performance computation. It provides tools for analyzing both single-region and multi-regional economic systems through a hybrid architecture that pairs R’s accessibility with Rust’s computational efficiency.
The package is optimized for speed and efficiency. It leverages the R6 class for clean, memory-efficient object-oriented programming. Furthermore, all linear algebra computations are implemented using faer Rust crate to achieve highly optimized performance.
Input-output analysis is a quantitative economic technique that examines inter-industry relationships within an economy. Developed by the Russian-American economist Wassily Leontief, it models how the output of one industry serves as input to other industries, allowing analysts to trace the ripple effects of changes in production, demand, or policy throughout an economic system.
The fio package implements input-output analysis using two computational paradigms:
Both approaches rely on matrix algebra operations implemented in Rust for computational efficiency, with R6 classes providing the R user-facing interface.
{fio} is able to:
{fio} also includes 2 built-in datasets — br_2020 for single-region and world_2000 for multi-region analysis — and a utility function to download input-output data from University of Groningen’s World Input-Output Database (WIOD).
If you prefer compiling from source, Rust is required to be installed on your system. You can install Rust from your OS package manager or, preferably, from official installer.
or the precompiled master branch from R-Universe:
install.packages("fio", repos = c("https://albersonmiranda.r-universe.dev", "https://cloud.r-project.org"))If you are just getting started with fio, we recommend you to read the vignettes for a comprehensive overview of the package.
# load included dataset
iom_br <- fio::br_2020
# compute technical coefficients matrix
iom_br$compute_tech_coeff()
# compute Leontief's inverse
iom_br$compute_leontief_inverse()
# key sectors
iom_br$compute_key_sectors()
iom_br$key_sectors |> head()
#> sector power_dispersion sensitivity_dispersion
#> 1 Agriculture, forestry, and logging 0.8682901 1.5528270
#> 2 Livestock and fishing 0.9667243 0.7724195
#> 3 Oil and natural gas 1.0229545 1.1077440
#> 4 Iron ore 0.8988597 0.8340117
#> 5 Other extractive industry 1.0470158 0.7947658
#> 6 Food and beverages 1.2759523 1.2776693
#> power_dispersion_cv sensitivity_dispersion_cv key_sectors
#> 1 5.134611 2.449116 Strong Forward Linkage
#> 2 4.173404 5.193911 Non-Key Sector
#> 3 3.960120 3.513779 Key Sector
#> 4 4.423694 4.636574 Non-Key Sector
#> 5 3.761186 4.933658 Strong Backward Linkage
#> 6 3.519630 3.474199 Key Sector
# hypothetical extraction
iom_br$compute_allocation_coeff()
iom_br$compute_hypothetical_extraction()
iom_br$hypothetical_extraction |> head()
#> backward_absolute backward_relative
#> Agriculture, forestry, and logging -358764.14 -0.026962180
#> Livestock and fishing -172937.80 -0.012996785
#> Oil and natural gas -214364.61 -0.016110131
#> Iron ore -106984.50 -0.008040200
#> Other extractive industry -44124.08 -0.003316055
#> Food and beverages -1150341.99 -0.086451585
#> forward_absolute forward_relative
#> Agriculture, forestry, and logging -398083.76 -0.029917166
#> Livestock and fishing -202488.89 -0.015217636
#> Oil and natural gas -319722.18 -0.024028063
#> Iron ore -96680.46 -0.007265821
#> Other extractive industry -70594.98 -0.005305421
#> Food and beverages -357953.32 -0.026901245
#> total_absolute total_relative
#> Agriculture, forestry, and logging -756847.9 -0.056879346
#> Livestock and fishing -375426.7 -0.028214420
#> Oil and natural gas -534086.8 -0.040138194
#> Iron ore -203665.0 -0.015306021
#> Other extractive industry -114719.1 -0.008621475
#> Food and beverages -1508295.3 -0.113352829
# field of influence
iom_br$compute_field_influence(epsilon = 0.001)
iom_br$field_influence[1:5, 1:5]
#> Agriculture, forestry, and logging
#> Agriculture, forestry, and logging 1.687863
#> Livestock and fishing 1.800221
#> Oil and natural gas 1.774443
#> Iron ore 1.669759
#> Other extractive industry 1.762653
#> Livestock and fishing Oil and natural gas
#> Agriculture, forestry, and logging 1.282227 1.357990
#> Livestock and fishing 1.372254 1.450645
#> Oil and natural gas 1.349964 1.432484
#> Iron ore 1.270325 1.345621
#> Other extractive industry 1.340999 1.420446
#> Iron ore Other extractive industry
#> Agriculture, forestry, and logging 1.253284 1.233775
#> Livestock and fishing 1.338806 1.317962
#> Oil and natural gas 1.319714 1.299181
#> Iron ore 1.244176 1.222513
#> Other extractive industry 1.310923 1.293003
# closed model
iom_br$close_model("household")
iom_br$compute_tech_coeff()
iom_br$compute_leontief_inverse()
iom_br$compute_key_sectors()
iom_br$key_sectors |> tail() # household consumption is a key sector!
#> sector power_dispersion
#> 47 Services provided to families and associations 1.734435
#> 48 Domestic services 5.588961
#> 49 Public education 4.622521
#> 50 Public health 3.305240
#> 51 Public administration and social security 3.454131
#> 52 Household 6.361264
#> sensitivity_dispersion power_dispersion_cv sensitivity_dispersion_cv
#> 47 0.63892457 -3.322009 -9.4001887
#> 48 -0.09106979 -1.116853 144.2065445
#> 49 -0.75064844 -1.395006 14.7113147
#> 50 -0.74714756 -1.907591 11.2344617
#> 51 -0.59207449 -1.793077 14.3456558
#> 52 46.33444701 -7.959814 -0.2588016
#> key_sectors
#> 47 Strong Backward Linkage
#> 48 Strong Backward Linkage
#> 49 Strong Backward Linkage
#> 50 Strong Backward Linkage
#> 51 Strong Backward Linkage
#> 52 Key SectorCalculate multi-regional multipliers and interdependence from the 2000 World Input-Output Database (26 countries, 23 sectors):
# load included dataset
miom_world <- fio::world_2000
# get bilateral trade (from -> to)
miom_world$get_bilateral_trade("BRA", "CHN")[1:5, 1:2]
#> BRA_Agriculture, Hunting, Forestry and Fishing
#> CHN_Agriculture, Hunting, Forestry and Fishing 0.868486382
#> CHN_Mining and Quarrying 0.677175460
#> CHN_Food, Beverages and Tobacco 0.784219678
#> CHN_Textiles, leather and footwear 0.137408834
#> CHN_Pulp, paper, printing and publishing 0.003052195
#> BRA_Mining and Quarrying
#> CHN_Agriculture, Hunting, Forestry and Fishing 0.001110208
#> CHN_Mining and Quarrying 1.703217354
#> CHN_Food, Beverages and Tobacco 0.005707213
#> CHN_Textiles, leather and footwear 0.129627291
#> CHN_Pulp, paper, printing and publishing 0.015560710
# compute multi-regional multipliers
miom_world$compute_multiregional_multipliers()
# show multipliers for specific country-sector pairs
# example: Chemicals from Brazil to China and US
bra_chemicals_index <- which(grepl("BRA.*Chemicals", miom_world$multiregional_multipliers$destination_label))[1]
bra_chemicals <- miom_world$multiregional_multipliers[bra_chemicals_index, ]
# Show key multiplier components
multiplier_cols <- c("destination_label", "intra_regional_multiplier", "spillover_multiplier", "total_multiplier", "multiplier_to_CHN", "multiplier_to_USA")
available_cols <- intersect(multiplier_cols, names(bra_chemicals))
bra_chemicals[, available_cols]
#> destination_label intra_regional_multiplier
#> 76 BRA_Chemicals and chemicals products 2.165192
#> spillover_multiplier total_multiplier multiplier_to_CHN multiplier_to_USA
#> 76 0.3714218 2.536614 0.01258698 0.08826115
# get regional interdependence
miom_world$get_regional_interdependence() |> head()
#> country self_reliance total_spillover_out total_spillover_in
#> 1 AUS 1.968515 0.3168527 0.006511634
#> 2 AUT 1.614535 0.4900724 0.004048698
#> 3 BEL 1.649908 0.7652207 0.011148228
#> 4 BRA 1.918948 0.2328115 0.004065824
#> 5 CAN 1.650380 0.4280919 0.007634451
#> 6 CHN 2.342241 0.2867934 0.016735715
#> interdependence_index
#> 1 0.1609602
#> 2 0.3035377
#> 3 0.4637960
#> 4 0.1213225
#> 5 0.2593898
#> 6 0.1224440
# get country summary
miom_world$get_country_summary() |> head()
#> country multiplier_simple_mean multiplier_simple_sum multiplier_simple_sd
#> 1 AUS 2.285368 52.56346 0.2943434
#> 2 AUT 2.104608 48.40598 0.2595025
#> 3 BEL 2.415129 55.54796 0.3495773
#> 4 BRA 2.151760 49.49047 0.4011159
#> 5 CAN 2.078472 47.80486 0.3334081
#> 6 CHN 2.629034 60.46779 0.4657446
#> multiplier_direct_mean multiplier_direct_sum multiplier_direct_sd
#> 1 0.5910851 13.59496 0.1243854
#> 2 0.5424757 12.47694 0.1079106
#> 3 0.6272375 14.42646 0.1371100
#> 4 0.5551566 12.76860 0.1760325
#> 5 0.5436337 12.50358 0.1541054
#> 6 0.6247874 14.37011 0.1544596
#> multiplier_indirect_mean multiplier_indirect_sum multiplier_indirect_sd
#> 1 1.694283 38.96850 0.1750524
#> 2 1.562132 35.92904 0.1570810
#> 3 1.787891 41.12149 0.2174743
#> 4 1.596603 36.72187 0.2283837
#> 5 1.534839 35.30129 0.1888710
#> 6 2.004247 46.09768 0.3222542