Author: swcEcon package
Date: 2026-04-13

# Economic Analysis of SWC Measures using swcEcon

#### swcEcon package

#### 2026-04-13

# 1 Introduction

Sound investment decisions in watershed development require rigorous economic appraisal. The swcEcon package provides a complete toolkit for evaluating soil and water conservation (SWC) measures from project inception through to report generation.

This vignette demonstrates all major functions using the bundled benchmark datasets. Methods follow Gittinger (1982), the CIMMYT (1988) on-farm economics manual, Wischmeier and Smith (1978), and NABARD (2019) appraisal guidelines.

# 2 Financial appraisal

## 2.1 Benefit-cost ratio

    r <- calc_bcr(
      investment    = 20,     # INR 20 lakh capital cost
      annual_benefit = 6,    # INR 6 lakh per year
      annual_omc    = 0.8,   # INR 0.8 lakh O&M per year
      life          = 20,    # 20-year design life
      discount_rate = 0.12   # 12% discount rate (GoI 2008)
    )
    print(r)
    #> == Benefit-Cost Ratio (swcEcon) ==
    #>   BCR           : 1.7253
    #>   PV Benefits   : 44.8167
    #>   PV Costs      : 25.9756
    #>   Discount rate : 12.0%
    #>   Project life  : 20 yr
    #>   Verdict       : Highly viable (BCR >= 1.5). Recommended for NABARD/PMKSY-WDC funding.

The BCR of 1.73 exceeds 1.5, meeting the NABARD threshold for robust watershed investment (NABARD 2019).

## 2.2 Net present value

    n <- calc_npv(
      investment    = 20,
      annual_benefit = 6,
      annual_omc    = 0.8,
      life          = 20,
      discount_rate = 0.12
    )
    print(n)
    #> == Net Present Value (swcEcon) ==
    #>   NPV           : 18.8411
    #>   Discount rate : 12.0%
    #>   Decision      : Accept (NPV > 0)
    head(n$cashflows)
    #>   year benefit omc net pv_net   cum_pv
    #> 1    1       6 0.8 5.2 4.6429 -15.3571
    #> 2    2       6 0.8 5.2 4.1454 -11.2117
    #> 3    3       6 0.8 5.2 3.7013  -7.5105
    #> 4    4       6 0.8 5.2 3.3047  -4.2058
    #> 5    5       6 0.8 5.2 2.9506  -1.2552
    #> 6    6       6 0.8 5.2 2.6345   1.3793

## 2.3 Internal rate of return

    i <- calc_irr(
      investment    = 20,
      annual_benefit = 6,
      annual_omc    = 0.8,
      life          = 20
    )
    print(i)
    #> == Internal Rate of Return (swcEcon) ==
    #>   IRR             : 25.73%
    #>   vs GoI 12%      : Above GoI 12% benchmark
    #>   vs NABARD 15%   : Above NABARD 15% threshold

The IRR of 25.7 per cent exceeds the Planning Commission benchmark of 12 per cent (GoI 2008) and the NABARD threshold of 15 per cent (NABARD 2019).

## 2.4 Payback period

    p <- calc_pbp(
      investment    = 20,
      annual_benefit = 6,
      annual_omc    = 0.8
    )
    print(p)
    #> == Payback Period (swcEcon) ==
    #>   Simple PBP     : 3.85 yr
    #>   Discounted PBP : 6 yr
    #>   Adoption       : Likely adoption (PBP 3-5 yr)

A simple payback period of 3.9 years falls within the 3–5 year range that strongly predicts voluntary SWC adoption among smallholder farmers in rainfed India (Joshi et al. 2005).

## 2.5 Marginal rate of return (CIMMYT method)

    m <- calc_mrr(
      nb_with      = 18000,   # net benefit per ha with contour bund
      nb_without   = 11000,   # net benefit per ha current practice
      cost_with    = 16000,   # variable cost per ha with SWC
      cost_without = 11500    # variable cost per ha current practice
    )
    print(m)
    #> == Marginal Rate of Return -- CIMMYT (swcEcon) ==
    #>   MRR              : 155.56%
    #>   Marginal benefit : 7000.00
    #>   Marginal cost    : 4500.00
    #>   Recommendation   : Recommend adoption: MRR (156%) >= minimum (100%)

An MRR of 156 per cent far exceeds the CIMMYT (1988) minimum acceptable threshold of 100 per cent, recommending adoption.

## 2.6 Modified BCR

    calc_mbcr(total_benefit = 80, operating_cost = 12, capital_cost = 20)
    #>   MBCR : 3.4000 -- MBCR > 1: capital investment recoverable

# 3 Soil loss economic valuation

## 3.1 USLE-based soil loss cost

    data(usle_india_soils)
    K_vert <- usle_india_soils[
      usle_india_soils$soil_series == "Vertisols", "k_mean"]

    s <- calc_soil_loss_cost(
      R      = 720,      # R-factor from rainfall_erosivity_india (Pune)
      K      = K_vert,   # K-factor from usle_india_soils
      LS     = 4.2,      # slope length-gradient factor
      C_pre  = 0.35,     # cover factor before contour bund
      C_post = 0.18,     # cover factor after contour bund
      P_pre  = 1.0,      # no support practice before
      P_post = 0.5,      # support practice P after bunding
      area_ha = 500      # watershed area
    )
    print(s)
    #> == USLE Soil Loss Economics (swcEcon) ==
    #>   Soil loss pre  : 264.600 t/ha/yr
    #>   Soil loss post : 68.040 t/ha/yr
    #>   Soil saved     : 196.560 t/ha/yr (74.3% reduction)
    #>   Annual benefit : INR 98280000

The contour bund reduces soil loss by 74 per cent, saving 98,280,000 INR per year in nutrient replacement costs alone.

## 3.2 Nutrient replacement cost

    data(usle_india_soils)
    soil <- usle_india_soils[usle_india_soils$soil_series == "Vertisols", ]

    calc_nutrient_cost(
      soil_loss_t_ha = s$soil_loss_pre,
      area_ha        = 500,
      n_kg_per_t     = soil$n_kg_per_t,
      p_kg_per_t     = soil$p_kg_per_t,
      k_kg_per_t     = soil$k_kg_per_t
    )
    #> $n_lost_kg
    #> [1] 66150
    #>
    #> $p_lost_kg
    #> [1] 10584
    #>
    #> $k_lost_kg
    #> [1] 158760
    #>
    #> $cost_n_inr
    #> [1] 1323000
    #>
    #> $cost_p_inr
    #> [1] 529200
    #>
    #> $cost_k_inr
    #> [1] 3969000
    #>
    #> $total_cost_inr
    #> [1] 5821200
    #>
    #> $cost_per_ha_inr
    #> [1] 11642

# 4 Water resource valuation

    data(rainfall_erosivity_india)
    rf_pune <- rainfall_erosivity_india[
      rainfall_erosivity_india$district == "Pune", "annual_rf_mm"]

    w <- calc_water_value(
      area_ha        = 500,
      rainfall_mm    = rf_pune,
      rc_pre         = 0.35,   # runoff coefficient before SWC
      rc_post        = 0.20,   # runoff coefficient after SWC
      harvest_pct    = 45,     # percentage of reduced runoff harvested
      gw_recharge_pct = 20,   # percentage percolating to groundwater
      water_value_m3 = 3.5    # INR per cubic metre (Joshi et al. 2005)
    )
    print(w)
    #> == Water Valuation (swcEcon) ==
    #>   Runoff reduced  : 510,000 m3/yr
    #>   Water harvested : 229,500 m3/yr
    #>   GW recharge     : 102,000 m3/yr
    #>   Annual benefit  : INR 1,160,250

    calc_irrigation_benefit(
      irrig_area_ha       = 80,
      yield_increase_t_ha = 1.6,
      crop_price_inr_t    = 18000,
      input_cost_inr_ha   = 8000
    )
    #> $gross_benefit_inr
    #> [1] 2304000
    #>
    #> $additional_cost_inr
    #> [1] 640000
    #>
    #> $net_benefit_inr
    #> [1] 1664000
    #>
    #> $net_benefit_per_ha
    #> [1] 20800

# 5 Social indicators

    calc_employment(
      employment_days = 45000,   # total person-days
      investment_lakh = 50,      # INR 50 lakh project cost
      wages_per_day   = 250      # daily wage rate (INR)
    )
    #> $egr_days_per_lakh
    #> [1] 900
    #>
    #> $total_wage_bill_inr
    #> [1] 11250000
    #>
    #> $labour_share_pct
    #> [1] 225
    #>
    #> $mgnregs_60pct_norm
    #> [1] "Meets MGNREGS 60% labour norm"

# 6 Risk analysis

## 6.1 Sensitivity analysis

    sa <- sensitivity_analysis(
      investment    = 20,
      annual_benefit = 6,
      annual_omc    = 0.8,
      life          = 20,
      discount_rate = 0.12,
      cost_range_pct    = 20,
      benefit_range_pct = 20,
      rate_range_pct    = 3
    )
    print(sa)
    #> == Sensitivity Analysis (swcEcon) ==
    #> Base BCR: 1.725 | Base NPV: 18.841
    #>
    #>      scenario   bcr    npv status
    #>     Base case 1.725 18.841     OK
    #>     Cost +20% 1.438 13.646     OK
    #>     Cost -20% 2.157 24.036     OK
    #>  Benefit -20% 1.380  9.878     OK
    #>  Benefit +20% 2.070 27.804     OK
    #>     Rate +3pp 1.502 12.549     OK
    #>     Rate -3pp 2.006 27.468     OK
    #>   All adverse 1.001  0.036     OK
    #>
    #> Robust: BCR >= 1.0 in all scenarios.

## 6.2 Switching value

    sv <- calc_switching_value(
      investment    = 20,
      annual_benefit = 6,
      annual_omc    = 0.8,
      life          = 20,
      discount_rate = 0.12
    )
    print(sv)
    #> == Switching Value Analysis (swcEcon) ==
    #>   Base BCR         : 1.7253
    #>   Cost switch val  : 72.5% -- robust (cost can rise this much)
    #>   Benefit switch v : 42.0% -- robust (benefit can fall this much)

## 6.3 Monte Carlo simulation

    mc <- monte_carlo_swc(
      inv_mean = 20, inv_cv  = 0.10,
      ben_mean = 6,  ben_cv  = 0.15,
      omc_mean = 0.8, omc_cv = 0.20,
      life_min = 15, life_max = 25,
      r_min    = 0.10, r_max = 0.14,
      n_sim    = 5000, seed  = 42
    )
    print(mc)

# 7 Benchmark datasets

## 7.1 State-wise BCR benchmarks

    data(swc_benchmarks)
    swc_benchmarks[, c("state", "agro_zone", "bcr_typical",
                        "irr_pct", "pbp_years")]
    #>             state     agro_zone bcr_typical irr_pct pbp_years
    #> 1       Rajasthan          Arid         1.6      14       4.2
    #> 2     Maharashtra     Semi-arid         2.1      18       3.1
    #> 3       Karnataka     Semi-arid         1.9      17       3.4
    #> 4  Andhra Pradesh     Semi-arid         2.2      20       3.0
    #> 5  Madhya Pradesh     Semi-arid         1.9      17       3.5
    #> 6         Gujarat          Arid         1.7      15       4.0
    #> 7      Tamil Nadu Dry sub-humid         1.8      16       3.6
    #> 8       Telangana     Semi-arid         2.0      19       3.2
    #> 9   Uttar Pradesh     Sub-humid         2.1      18       3.3
    #> 10        Haryana     Sub-humid         1.8      16       3.8

## 7.2 USLE parameters for Indian soils

    data(usle_india_soils)
    usle_india_soils[, c("soil_series", "soil_order",
                          "k_mean", "t_value", "n_kg_per_t")]
    #>   soil_series           soil_order k_mean t_value n_kg_per_t
    #> 1   Vertisols         Black cotton   0.25      10       0.50
    #> 2    Alfisols         Red laterite   0.32       8       0.35
    #> 3 Inceptisols             Alluvial   0.28      10       0.60
    #> 4    Entisols         Sandy desert   0.19       5       0.20
    #> 5   Aridisols         Desert soils   0.15       5       0.15
    #> 6    Ultisols           Red yellow   0.35       8       0.40
    #> 7   Mollisols         Meadow soils   0.21      12       0.80
    #> 8     Oxisols Laterite ferruginous   0.29       8       0.45

## 7.3 Rainfall erosivity

    data(rainfall_erosivity_india)
    rainfall_erosivity_india[, c("district", "state",
                                  "annual_rf_mm", "r_factor")]
    #>         district          state annual_rf_mm r_factor
    #> 1        Udaipur      Rajasthan          620      580
    #> 2           Pune    Maharashtra          680      720
    #> 3        Bellary      Karnataka          500      510
    #> 4        Kurnool Andhra Pradesh          540      540
    #> 5          Sagar Madhya Pradesh         1080     1120
    #> 6      Bhavnagar        Gujarat          520      495
    #> 7     Coimbatore     Tamil Nadu          700      730
    #> 8       Warangal      Telangana          800      860
    #> 9         Jhansi  Uttar Pradesh          760      810
    #> 10         Hisar        Haryana          480      450
    #> 11       Jodhpur      Rajasthan          360      320
    #> 12        Nashik    Maharashtra          750      790
    #> 13       Dharwad      Karnataka          860      920
    #> 14     Anantapur Andhra Pradesh          540      520
    #> 15          Rewa             MP         1150     1180
    #> 16 Surendranagar        Gujarat          500      470
    #> 17         Salem     Tamil Nadu          820      770
    #> 18      Nalgonda      Telangana          780      820
    #> 19         Banda             UP          900      940
    #> 20        Rohtak        Haryana          520      480

## 7.4 SWC unit cost norms (PMKSY-WDC 2015)

    data(swc_cost_norms)
    swc_cost_norms[, c("measure", "norm_2024_inr",
                        "design_life_yr", "labour_pct")]
    #>                    measure norm_2024_inr design_life_yr labour_pct
    #> 1      Check dam (masonry)        577500             25         45
    #> 2      Check dam (earthen)        140250             15         60
    #> 3         Percolation pond        462000             20         55
    #> 4        Farm pond (lined)        156750             20         65
    #> 5      Farm pond (unlined)         74250             15         70
    #> 6             Contour bund         19800             15         75
    #> 7              Graded bund         14850             15         75
    #> 8       Gully plug (stone)         41250             10         65
    #> 9  Gully plug (brush wood)         13200              5         80
    #> 10               Nala bund        297000             20         50
    #> 11           Field bunding         14025             12         80
    #> 12       Terracing (bench)         74250             20         70
    #> 13      Vegetative barrier          9900             10         85
    #> 14 Drainage line treatment         24750             15         65
    #> 15          Land levelling         19800             15         80
    #> 16     Pasture development         29700             20         70
    #> 17           Afforestation         36300             25         65
    #> 18   Agri-horti plantation         46200             20         60

# 8 Full pipeline and report

    pl <- run_swc_pipeline(
      investment     = 20,
      annual_benefit = 6,
      annual_omc     = 0.8,
      life           = 20,
      discount_rate  = 0.12,
      project_name   = "Hypothetical Check Dam, Semi-arid India",
      include_sensitivity = TRUE,
      include_monte_carlo = FALSE
    )
    print(pl)

    # AFTER
    generate_swc_report(
      pl,
      output_file  = "swcEcon_appraisal.html",
      title        = "Economic Appraisal: Hypothetical Watershed",
      author       = "Your Name",
      organisation = "Your Organisation"
    )

# 9 References

Brent, R.P. (1973). Algorithms for Minimization Without Derivatives. Prentice-Hall, Englewood Cliffs, NJ. ISBN: 9780130223715.

CIMMYT (1988). From Agronomic Data to Farmer Recommendations: An Economics Training Manual. Completely revised edition. CIMMYT, Mexico DF. ISBN: 9686127127.

Gittinger, J.P. (1982). Economic Analysis of Agricultural Projects, 2nd ed. Johns Hopkins University Press, Baltimore. ISBN: 9780801825439.

GoI (2008). Guidelines for Economic Analysis of Projects. Planning Commission of India, New Delhi.

GoI (2015). Common Guidelines for Watershed Development Projects under PMKSY-WDC. Ministry of Rural Development, New Delhi.

Joshi, P.K., Jha, A.K., Wani, S.P., Joshi, L. and Shiyani, R.L. (2005). Meta-Analysis to Assess Impact of Watershed Program and People’s Participation. IWMI Research Report 8. ISBN: 9290906677.

NABARD (2019). Operational Guidelines: Watershed Development Fund. National Bank for Agriculture and Rural Development, Mumbai.

Pouliquen, L.Y. (1970). Risk Analysis in Project Appraisal. World Bank Staff Occasional Papers No. 11. Johns Hopkins University Press.

Squire, L. and van der Tak, H.G. (1975). Economic Analysis of Projects. Johns Hopkins University Press. ISBN: 9780801816697.

Wischmeier, W.H. and Smith, D.D. (1978). Predicting Rainfall Erosion Losses: A Guide to Conservation Planning. USDA Agriculture Handbook No. 537. ISBN: 0160016258.