Synthetic FCIP Research Inputs
is”, without warranty of any kind. The authors make no
guarantees regarding accuracy or suitability for any purpose. Use of
these data and any results derived from them is entirely at the user’s
own risk. The contents of this release reflect independent research and
do not represent the official positions or policies of the USDA, the
Risk Management Agency (RMA), the Federal Crop Insurance Corporation
(FCIC), or any Approved Insurance Provider.
📘 Overview
This release provides analysis-ready synthetic research inputs for
the U.S. Federal Crop Insurance Program (FCIP). The assets are
project-agnostic and support FCIP research generally: peril-specific
product design, index insurance evaluation, loss attribution, and
producer-level policy simulation.
The core of the release is a set of pseudo-producer panels
constructed from unit-level Summary of Business (SOBTPU) experience,
cause-of-loss records, and calibrated yields, together with the
intermediate unit-level attribution products used to build them.
Pseudo-producers are defined at the cell
commodity year × state × county × commodity × type × practice, and can
be placed on RMA Rainfall Index (RI) grids either by probability
apportionment or by sampled whole-grid assignment.
The data are generated by the (private) rfcipCalibrate workflow;
because the workflow is private, everything needed for replication-grade
use — including the sampled grid assignments — is published here rather
than left to regeneration.
📄 Full methodology (record-linkage cascade, panel construction,
peril occurrence/severity, and placement design) is documented in the
companion article:
https://ftsiboe.github.io/book-fcip-field-guide/articles/008_synthetic-fcip.html
📁 Included Files
1. Unit-level prevented-planting identification
pp_units.rdsUnit-level SOBTPU experience (buy-up business,
insurance plans 1–3 and 90, catastrophic coverage excluded) with the
prevented-planting (PP) identification cascade applied. Units are
matched to cause-of-loss records within pools covered by the PP
provision; each claimed unit is resolved by- exact financial match, (2) sole claimant in pool, or (3) sole
peril in pool, with the remainder unresolved.
- exact financial match, (2) sole claimant in pool, or (3) sole
Key columns (in addition to standard rfcip SOBTPU columns)
pp_status= How the unit was resolved:1exact financials,2
sole claimant,3sole peril,-1claimed but ambiguous,0no
claim or no PP in poolpp_status_label= Human-readable version ofpp_statusis_pp= Verdict:TRUEprevented planting,FALSEother peril,
NAunresolvedpp_share_acres= Pool-level share of determined acres in
Prevented stagespp_share_indem= The unit’s PP indemnity share (verdict for
resolved units, pool prorate for unresolved)pp_05pct_buy_up_share,pp_10pct_buy_up_share= Indemnity
shares under the 5% / 10% PP buy-up elections (stage codesPF/
PT); nested insidepp_share_indem, so the basic-only share is
recoverable by subtraction
2. Unit-level loss attribution (full peril taxonomy)
unit_cause_shares.rdsA list of three data.tables keyed by
unit_uid(ship the set together). Attribution runs over the full
peril taxonomy interacted with the loss type: each cause is
<peril>|pp(Prevented stages) or<peril>|prod(production losses),
where perils followdamage_name_recode.
units
- Filtered SOBTPU rows plus
unit_uid,col_status/
col_status_label(same resolution codes aspp_status),
primary_cause(largest indemnity share), and
primary_cause_share
cause_shares
unit_uid= Unit identifier (links tounits)cause= Peril × loss type (e.g.Excess Moisture|pp,
Drought|prod)share_indem= The unit’s indemnity share by cause (matched
shares for resolved units, pool prorate for unresolved); sums to one
within a unitshare_acres= Pool-level share of determined acres by cause
buyup_shares
unit_uid= Unit identifierbuyup= PP buy-up election ("05"/"10")share_indem= The unit’s indemnity share in buy-up Prevented
stages; nests inside the|ppcause shares
3. Cell-level peril probabilities
peril_probabilities.rdsLong table of peril occurrence and
severity at the pseudo-producer cell, derived from
unit_cause_shares.rds. The two loss-type blocks come from fixed
source levels with no fallback: the PP block (|ppcauses and buy-up
pseudo-causes) from county × practice experience (pooled across
commodities), the production block (|prodcauses) from county ×
commodity × practice (pooled across types). Cells whose source level
has no attributed experience carry no rows.
Columns
pooling="year"(realized, per commodity year) or
"climatology"(all years pooled)commodity_year= Commodity year (NAfor climatology rows)state_code,county_code,commodity_code,
type_code,practice_code= Cell keyscause= Peril × loss type, plus the buy-up pseudo-causes
pp_05pct_buyup/pp_10pct_buyupis_buyup= Flags the buy-up pseudo-causes (they nest inside the
|ppcauses; exclude them when summing across causes)occurrence= Liability-weighted probability the cause strikes:
liability on units with a positive indemnity share for the cause, over
the source level’s total liabilityseverity= Damage rate given a strike: the cause’s indemnity
dollars over that hit liability.occurrence × severityrecovers the
cause’s loss cost
4. Candidate RI grids
crop_ri_candidates.rdsCounty × commodity candidate RI grids
with crop-cover assignment probabilities. Cropland Data Layer (CDL)
cover weights on the PRISM raster are mapped to the official RMA RI
grid and normalized within county × commodity. Nested format: one row
perstate_code × county_code × commodity_codewith an
ri_candidateslist-column.
ri_candidates list-column
grid_id= RI grid identifier (GRIDCODE from the official RMA RI
grid shapefile)weight= Crop-cover weight of the grid within the county ×
commodityprobability= Normalized assignment probability (sums to one
within county × commodity)
5. Pseudo-producer panel, apportioned
synthetic_data.rdsThe smooth benchmark panel: one row per cell
× candidate grid, with each cell split fractionally across its
candidate RI grids by crop-cover probability. Totals are conserved
exactly; within-county placement risk is smoothed away. Each cell ×
grid carries a single representative election — the
(unit_structure_code, insurance_plan_code, coverage_level_percent)
triple covering the most probability-weighted reported acres in the
cell.
Key columns
grid_id+ cell keys (commodity_year,state_code,
county_code,commodity_code,type_code,practice_code)unit_structure_code,insurance_plan_code,
coverage_level_percent= Representative election (acre-weighted
mode; ties broken by larger liability, then lowest codes)net_reporting_level_amount,liability_amount,
total_premium_amount,subsidy_amount,
indemnity_amount,potential_liability= Summed exposure
and experience (probability weighted across grids)pp_acres,pp_05pct_acres,pp_10pct_acres,
pp_indemnity_amount= Prevented-planting quantitiespp_resolved_share_indem,pp_unresolved_share_indem,
is_pp_share_indem= Cell-level indemnity shares by PP resolution
status / verdictrate_yield,approved_yield,average_yield,
adjusted_yield,calibrated_yield= Acre-weighted per-acre
yields (calibrated by therfcipCalibrateyield workflow)simulation_weight,revealed_budget= Carried from the
calibrated-yield inputsoccurrence_<cause>_yr,severity_<cause>_yr,
occurrence_<cause>_clim,severity_<cause>_clim= Wide
peril probabilities fromperil_probabilities.rds(_yr= realized
year,_clim= climatology). Cause names are slugified (lowercase,
non-alphanumerics to_; e.g.Excess Moisture|pp→
excess_moisture_pp). Zeros mean either the peril never struck or the
source level has no attributed experience
6. Pseudo-producer panel, grid-free
agent_panel.rdsThe sampled-assignment companion to
synthetic_data.rds: pseudo-producers are NOT located on grids and
retain their observed election mix (one row per cell × observed
(unit_structure_code, insurance_plan_code, coverage_level_percent)
triple, no representative collapse). Carries the same exposure,
experience, PP, and yield columns as the apportioned panel (unweighted
sums), without the peril probability columns.
Key column
agent_uid= Content-based identifier (cell keys + election
triple,|-separated); stable across rebuilds and immune to row
order. Links to the sampled grid assignments below
7. Sampled whole-grid assignments
agent_grid_assignments_<lo>_<hi>.zipSampled whole-grid RI
assignments for the grid-free panel, bundled in chunks of 100
replications per zip (GitHub caps release assets at 2 GB). Each
replication places every agent entirely in ONE RI grid, drawn from its
county × commodity candidate grids with the release probabilities —
the sampled-placement alternative to probability apportionment, which
preserves within-county placement risk.
Contents of each zip
rep_###.rds= One file per replication:agent_uid,grid_idagents_key.rds= Sorted vector of allagent_uidvalues
(integrity key; verify it matchesagent_panel.rdsbefore use).
Included in every chunk so any single chunk is self-contained
Replications are reproducible in isolation: replication r is drawn
under seed 20260703 + r, so a given replication is identical
regardless of how many replications exist, and the set can be extended
without disturbing existing ones.
Methodology notes
- Unit-to-record matching cascade. Both attribution products link
SOBTPU units to cause-of-loss records within pools (the identifier
columns shared by both data sets): (1) exact one-to-one match on
rounded liability, premium, subsidy, and indemnity, with ties excluded
on both sides; (2) a pool with exactly one indemnified unit absorbs
all of the pool’s records; (3) a pool with exactly one record left
explains all remaining claimants. Unresolved pools are prorated by
residual indemnity shares. - Filters. Insurance plans 1–3 and 90 (APH/YP, RP, RP-HPE, and their
predecessors); catastrophic coverage excluded; units with zero or
non-finite liability dropped. - Cells, not producers. Pseudo-producers are county-level
aggregates, not actual farms. No producer-level microdata are used or
disclosed.
Download and use in R
Files in this release can be downloaded directly from GitHub using
piggyback.
Example: the apportioned panel
file_name <- "synthetic_data.rds"
directory <- "data"
if (!dir.exists(directory)) {
dir.create(directory, recursive = TRUE)
}
piggyback::pb_download(
file = file_name,
dest = directory,
repo = "ftsiboe/USFarmSafetyNetLab",
tag = "synthetic_fcip",
overwrite = TRUE
)
synthetic_data <- readRDS(file.path(directory, file_name))
str(synthetic_data)Example: grid-free panel + one sampled replication
directory <- "data"
if (!dir.exists(directory)) dir.create(directory, recursive = TRUE)
for (f in c("agent_panel.rds", "agent_grid_assignments_0001_0100.zip")) {
piggyback::pb_download(
file = f, dest = directory,
repo = "ftsiboe/USFarmSafetyNetLab",
tag = "synthetic_fcip", overwrite = TRUE)
}
utils::unzip(file.path(directory, "agent_grid_assignments_0001_0100.zip"),
exdir = directory)
agent_panel <- readRDS(file.path(directory, "agent_panel.rds"))
# Integrity check: the assignments must match the panel's agent set.
key <- readRDS(file.path(directory, "agent_grid_assignments", "agents_key.rds"))
stopifnot(identical(key, sort(agent_panel$agent_uid)))
# Join replication 1's whole-grid placements onto the panel.
rep1 <- readRDS(file.path(directory, "agent_grid_assignments", "rep_001.rds"))
panel_r1 <- merge(agent_panel, rep1, by = "agent_uid")Example: unit-level attribution
piggyback::pb_download(
file = "unit_cause_shares.rds", dest = "data",
repo = "ftsiboe/USFarmSafetyNetLab",
tag = "synthetic_fcip", overwrite = TRUE)
unit_cause_shares <- readRDS(file.path("data", "unit_cause_shares.rds"))
units <- unit_cause_shares$units
cause_shares <- unit_cause_shares$cause_shares # join on unit_uidData sources
These files are derived from publicly available source materials,
including:
- USDA Risk Management Agency (RMA): Summary of Business (SOBTPU),
cause-of-loss (COLSOM) records, stage-code listings, and
prevented-planting actuarial data master (ADM) extracts — available at
the RMA data repository - USDA NASS Cropland Data Layer (CDL): crop-cover weights used in
the candidate-grid probabilities - PRISM Climate Group: the raster grid used to map crop cover to RI
grids - Official RMA RI grid:
official_RMA_RI_gridshapefile published
by Grazing Management Systems (2009, Edition 1.0,
http://prfri-rma-map.tamu.edu/default.aspx)
How the data are produced
| File | Source | Derivation |
|---|---|---|
pp_units.rds |
RMA SOBTPU + COLSOM + stage listing + PP ADM | Unit-to-record matching cascade within PP-provision pools; verdict, acre share, and buy-up shares per unit |
unit_cause_shares.rds |
RMA SOBTPU + COLSOM + stage listing | Same cascade over all pools; indemnity shares by peril × loss type (|pp / |prod), plus buy-up shares |
peril_probabilities.rds |
unit_cause_shares.rds |
Occurrence (hit liability / total liability) and severity (indemnity / hit liability) by cause; PP block at county × practice, prod block at county × commodity × practice; year and climatology poolings |
crop_ri_candidates.rds |
CDL + PRISM + RMA RI grid | CDL cover weights on the PRISM raster mapped to RI grids and normalized within county × commodity |
synthetic_data.rds |
pp_units.rds + calibrated yields + candidates + peril_probabilities.rds |
Units pooled to cells, apportioned across candidate grids by probability; representative election per cell × grid; wide peril probabilities attached |
agent_panel.rds |
pp_units.rds + calibrated yields |
Units pooled to cell × observed election; content-based agent_uid |
agent_grid_assignments_*.zip |
agent_panel.rds + crop_ri_candidates.rds |
Inverse-CDF sampling of one whole grid per agent per replication; seed 20260703 + r |
Citation
When using these files in research, reports, or publications, please
cite:
- Tsiboe, F. (2026). Synthetic producer panels and loss attribution. In
A Field Guide to Federal Crop Insurance Research.
https://ftsiboe.github.io/book-fcip-field-guide/articles/008_synthetic-fcip.html - this GitHub repository (
ftsiboe/USFarmSafetyNetLab, tag
synthetic_fcip) - the relevant USDA RMA source materials (Summary of Business,
cause-of-loss, and actuarial data master products) - the official RMA RI grid shapefile (Grazing Management Systems, 2009,
official_RMA_RI_grid, v1.0,
http://prfri-rma-map.tamu.edu/default.aspx) and USDA NASS CDL /
PRISM products, where applicable