A Policy Analysis Matrix (PAM) compares two enterprise budgets for the same production system. The private budget uses observed market prices and measures incentives faced by producers. The social budget uses efficiency prices and measures the value of outputs and inputs to the economy. Their difference captures policy and market-failure transfers.
The conventional structure is:
| Valuation | Revenue | Tradable inputs | Domestic factors | Profit |
|---|---|---|---|---|
| Private | \(A\) | \(B\) | \(C\) | \(D=A-B-C\) |
| Social | \(E\) | \(F\) | \(G\) | \(H=E-F-G\) |
| Transfer | \(I=A-E\) | \(J=B-F\) | \(K=C-G\) | \(L=D-H=I-J-K\) |
agriPAM retains the six additive accounts and derives
every profit, transfer, and ratio from them. This design prevents
contradictory totals after grouping or scenario analysis.
paddy <- pam(
private_revenue = 150000,
private_tradable_inputs = 42000,
private_domestic_factors = 61000,
social_revenue = 140000,
social_tradable_inputs = 46000,
social_domestic_factors = 55000,
id = "Paddy",
unit = "ha",
currency = "INR"
)
pam_matrix(paddy)
#> Revenue Tradable inputs Domestic factors Profit
#> Private 150000 42000 61000 47000
#> Social 140000 46000 55000 39000
#> Transfer 10000 -4000 6000 8000
#> attr(,"id")
#> [1] "Paddy"
pam_indicators(paddy)
#> id npco npci epc pcr drc pc srp
#> 1 Paddy 1.071429 0.9130435 1.148936 0.5648148 0.5851064 1.205128 0.05714286
#> scb
#> 1 0.7214286All revenue and cost components must be finite and non-negative.
Profits and transfers can be negative. When a ratio denominator is zero,
the corresponding ratio is reported as NA rather than as an
infinite value.
pam_from_budget() accepts one row per budget item. Each
row must identify the quantity, private price, social price, and one of
three account categories: output,
tradable_input, or domestic_factor.
budget <- agri_pam_example("budget")
head(budget)
#> crop item category quantity private_price
#> 1 Paddy Main output output 5.2 22000
#> 2 Paddy By-product output 3.0 3000
#> 3 Paddy Seed tradable_input 60.0 55
#> 4 Paddy Fertiliser and chemicals tradable_input 1.0 18500
#> 5 Paddy Fuel and machinery tradable_input 1.0 6500
#> 6 Paddy Labour domestic_factor 110.0 450
#> social_price
#> 1 23000
#> 2 2500
#> 3 48
#> 4 20500
#> 5 7200
#> 6 500
crops <- pam_from_budget(
budget,
quantity = "quantity",
private_price = "private_price",
social_price = "social_price",
category = "category",
id = "crop",
unit = "ha",
currency = "INR"
)
pam_values(crops)
#> id private_revenue private_tradable_inputs private_domestic_factors
#> 1 Paddy 123400 28300 67500
#> 2 Wheat 111475 23600 53720
#> 3 Chickpea 112500 19625 45300
#> 4 Mustard 97050 18400 44920
#> private_profit social_revenue social_tradable_inputs social_domestic_factors
#> 1 27600 127100 30580 71000
#> 2 34155 113450 25500 56000
#> 3 47575 119740 20300 47100
#> 4 33730 102750 19700 46640
#> social_profit
#> 1 25520
#> 2 31950
#> 3 52340
#> 4 36410The included values are synthetic and are intended only to demonstrate the workflow.
pam_indicators(crops)
#> id npco npci epc pcr drc pc
#> 1 Paddy 0.9708891 0.9254415 0.9852880 0.7097792 0.7355988 1.0815047
#> 2 Wheat 0.9825914 0.9254902 0.9991472 0.6113229 0.6367254 1.0690141
#> 3 Chickpea 0.9395357 0.9667488 0.9339803 0.4877524 0.4736525 0.9089606
#> 4 Mustard 0.9445255 0.9340102 0.9470199 0.5711380 0.5615894 0.9263938
#> srp scb
#> 1 0.01636507 0.7992132
#> 2 0.01943587 0.7183781
#> 3 -0.03979455 0.5628863
#> 4 -0.02608273 0.6456448
pam_classify(crops)
#> id privately_profitable socially_profitable competitive
#> 1 Paddy TRUE TRUE TRUE
#> 2 Wheat TRUE TRUE TRUE
#> 3 Chickpea TRUE TRUE TRUE
#> 4 Mustard TRUE TRUE TRUE
#> comparative_advantage output_protected tradable_inputs_subsidised
#> 1 TRUE FALSE TRUE
#> 2 TRUE FALSE TRUE
#> 3 TRUE FALSE TRUE
#> 4 TRUE FALSE TRUE
#> effectively_protected
#> 1 FALSE
#> 2 FALSE
#> 3 FALSE
#> 4 FALSEThe main interpretation rules, conditional on economically meaningful positive value-added denominators, are:
| Indicator | Common decision rule | Interpretation |
|---|---|---|
| DRC | below 1 | comparative advantage in domestic resources |
| PCR | below 1 | private value added covers domestic-factor cost |
| NPCO | above 1 | private output price exceeds social output price |
| NPCI | below 1 | private tradable-input cost is below its social cost |
| EPC | above 1 | positive net protection of value added |
| PC | above 1 | policies raise private relative to social profit |
| SRP | above 0 | positive net transfer relative to social revenue |
| SCB | below 1 | social benefits exceed social costs |
These thresholds are diagnostics, not substitutes for inspecting the underlying budgets, price construction, and institutional setting.
The social output or input price can begin with a border price. Import parity adds domestic transfer costs; export parity subtracts them.
parity_price(
border_price = 300,
exchange_rate = 83,
transport = 1200,
handling = 300,
direction = "import"
)
#> [1] 26400Any conversion from border to farm-gate prices should document units, location, quality adjustment, exchange-rate convention, transport, processing, and marketing margins. Taxes and subsidies are excluded from an undistorted social price.
Ratios should not ordinarily be averaged across systems.
pam_aggregate() first sums the six accounts and then
recalculates each ratio.
groups <- c("Cereal", "Cereal", "Pulse", "Oilseed")
regional <- pam_aggregate(crops, groups)
pam_indicators(regional)
#> id npco npci epc pcr drc pc
#> 1 Cereal 0.9764082 0.9254636 0.9918957 0.6624949 0.6884588 1.0745606
#> 2 Pulse 0.9395357 0.9667488 0.9339803 0.4877524 0.4736525 0.9089606
#> 3 Oilseed 0.9445255 0.9340102 0.9470199 0.5711380 0.5615894 0.9263938
#> srp scb
#> 1 0.01781334 0.7610892
#> 2 -0.03979455 0.5628863
#> 3 -0.02608273 0.6456448A defensible empirical application should report:
The companion vignette,
vignette("uncertainty", package = "agriPAM"), develops the
last point.