Equity and sustainability assessment of agricultural subsidies

library(agriEquity)

Policy-matrix calculations measure how much support agriculture receives. They do not show who receives it, whether it reaches smallholders, women farmers and resource-poor regions, or what the same budget could achieve if allocated differently. agriEquity answers these questions with household-level data in four steps: incidence, progressivity and equity, distributional effects, and budget-neutral reallocation with explicit productivity-equity-sustainability trade-offs.

The farm_subsidy data are simulated for 1,500 households with three types of support: an input (fertiliser) subsidy, a flat income transfer and an irrigation power subsidy.

1. Who receives support?

bi <- benefit_incidence(farm_subsidy, "fertiliser_subsidy",
                        group = "size_class", weights = "weight",
                        area = "land_ha", income = "farm_income")
bi[, c("group", "population_share", "benefit_share", "parity_ratio",
       "benefit_per_hectare")]
#>         group population_share benefit_share parity_ratio benefit_per_hectare
#> 1    marginal      0.461831565    0.11730424    0.2539979            2507.501
#> 2       small      0.281331214    0.23150243    0.8228821            3134.584
#> 3 semi-medium      0.178218730    0.30924615    1.7352057            3442.711
#> 4      medium      0.069698383    0.26106825    3.7456859            3699.365
#> 5       large      0.008920109    0.08087894    9.0670346            3642.968

Marginal farms make up almost half of households but receive about an eighth of the input subsidy.

2. Is it progressive?

with(farm_subsidy, progressivity_index(fertiliser_subsidy, farm_income,
                                       weights = weight))
#> Progressivity of support
#> 
#>                   index estimate
#>           concentration   0.5449
#>             gini_income   0.3903
#>                 kakwani  -0.1547
#>               gini_post   0.3964
#>   redistributive_effect  -0.0062
#>      reynolds_smolensky  -0.0060
#>               reranking   0.0002
#>  benefit_share_bottom40   0.0821
#> 
#> Not pro-poor in absolute terms; regressive relative to income.
with(farm_subsidy, progressivity_index(income_transfer, farm_income,
                                       weights = weight))
#> Progressivity of support
#> 
#>                   index estimate
#>           concentration   0.0101
#>             gini_income   0.3903
#>                 kakwani   0.3801
#>               gini_post   0.3763
#>   redistributive_effect   0.0140
#>      reynolds_smolensky   0.0142
#>               reranking   0.0002
#>  benefit_share_bottom40   0.3949
#> 
#> Not pro-poor in absolute terms; progressive relative to income.

3. Equity across farm size, gender and region

se <- subsidy_equity(farm_subsidy, "fertiliser_subsidy",
                     dimensions = c("size_class", "gender", "region"),
                     weights = "weight",
                     target = list(size_class = c("marginal", "small"),
                                   gender = "female",
                                   region = c("Rainfed-East", "Hill-Tribal")))
se$summary
#>    dimension groups       reference min_parity_group min_parity_ratio
#> 1 size_class      5           large         marginal        0.2539979
#> 2     gender      2            male           female        0.9380689
#> 3     region      4 Irrigated-North      Hill-Tribal        0.1352985
#>   target_parity_ratio theil_total theil_between_share
#> 1           0.4693543   0.6777792        0.7194438962
#> 2           0.9380689   0.6777792        0.0004632798
#> 3           0.2818810   0.6777792        0.3971565548

theil_between_share shows how much of the inequality in benefits is explained by each dimension.

4. Effects on inequality and poverty

de <- with(farm_subsidy, distributional_effects(
  farm_income,
  list(fertiliser = fertiliser_subsidy, transfer = income_transfer,
       power = power_subsidy),
  weights = weight, poverty_line = 60000))
de$summary[, c("scenario", "gini", "fgt0", "fgt1", "lifted_out_share",
               "cost_per_household_lifted")]
#>     scenario      gini      fgt0       fgt1 lifted_out_share
#> 1 no_support 0.3902507 0.2185809 0.04384556      0.000000000
#> 2 fertiliser 0.3964115 0.2071613 0.04180761      0.011419574
#> 3   transfer 0.3762841 0.1707318 0.02796631      0.047849084
#> 4      power 0.3959803 0.2163337 0.04349092      0.002247225
#>   cost_per_household_lifted
#> 1                        NA
#> 2                  471546.1
#> 3                  107725.4
#> 4                 1256189.6

5. Budget-neutral reallocation

The same fertiliser-subsidy budget is reallocated under alternative rules. The productivity response (marginal_return) and the environmental damage cost per unit of support (env_cost_per_rupee) are simulated household attributes; in applied work they come from production-function estimates and environmental valuation.

fs <- farm_subsidy
prio <- with(fs, 1 + (size_class %in% c("marginal", "small")) +
               0.5 * (gender == "female") +
               0.5 * (region %in% c("Rainfed-East", "Hill-Tribal")))
br <- budget_reallocation(fs$farm_income, fs$fertiliser_subsidy,
                          weights = fs$weight, area = fs$land_ha,
                          priority = prio,
                          target = fs$size_class %in% c("marginal", "small"),
                          return_rate = fs$marginal_return,
                          env_cost = fs$env_cost_per_rupee,
                          inequality_aversion = 1, env_weight = 1,
                          poverty_line = 60000)
m <- br$metrics
m[, c("rule", "productivity_gain", "environmental_cost", "gini_post",
      "target_share", "poverty_headcount")]
#>                 rule productivity_gain environmental_cost gini_post
#> 1            current         226441260          576961797 0.3959534
#> 2           per_farm         356917261          407320825 0.3700034
#> 3        per_hectare         256766501          476982149 0.3908547
#> 4 per_hectare_capped         290473420          455157125 0.3838774
#> 5           targeted         365768571          363060480 0.3642975
#> 6            optimal         310423542          174027833 0.3383010
#>   target_share poverty_headcount
#> 1    0.3488067        0.20471153
#> 2    0.7431628        0.15223041
#> 3    0.3978295        0.19616596
#> 4    0.5584257        0.18669551
#> 5    0.8502634        0.14086816
#> 6    0.9995285        0.00109686

6. Productivity-equity-sustainability trade-offs

tf <- tradeoff_frontier(fs$farm_income, fs$fertiliser_subsidy,
                        weights = fs$weight,
                        target = fs$size_class %in% c("marginal", "small"),
                        return_rate = fs$marginal_return,
                        env_cost = fs$env_cost_per_rupee,
                        aversion = c(0, 0.5, 1, 2), env_weights = c(0, 1, 3))
tf
#> Productivity-equity-sustainability frontier
#> 
#>  inequality_aversion env_weight productivity_gain environmental_cost
#>                  0.0          0   386,925,518.730    354,764,443.976
#>                  0.5          0   342,509,118.499    243,158,426.328
#>                  1.0          0   322,329,357.537    226,319,834.849
#>                  2.0          0   308,229,244.508    217,162,936.931
#>                  0.0          1   317,706,521.016    117,848,312.231
#>                  0.5          1   312,931,485.218    147,087,873.198
#>                  1.0          1   310,423,541.965    174,027,832.872
#>                  2.0          1   305,215,650.758    198,953,381.187
#>                  0.0          3   293,728,948.574    103,275,926.971
#>                  0.5          3   291,549,115.866    113,110,101.739
#>                  1.0          3   293,396,656.477    129,705,483.791
#>                  2.0          3   299,419,782.503    171,819,569.621
#>  net_social_value gini_post target_share
#>    32,161,074.754     0.357        0.905
#>    99,350,692.171     0.340        0.999
#>    96,009,522.687     0.338        1.000
#>    91,066,307.578     0.337        1.000
#>   199,858,208.786     0.351        0.939
#>   165,843,612.020     0.340        0.998
#>   136,395,709.093     0.338        1.000
#>   106,262,269.571     0.337        1.000
#>   190,453,021.603     0.353        0.943
#>   178,439,014.127     0.342        0.997
#>   163,691,172.686     0.340        0.999
#>   127,600,212.883     0.338        1.000
#> 
#> Current allocation: productivity gain 226,441,259.807, environmental cost 576,961,796.652, Gini 0.396
plot(tf)

The current allocation (star) lies inside the frontier: in this simulated example, the same budget could deliver higher productivity, lower inequality and lower environmental cost at once.