WP21 — LLM-assisted coefficient extraction protocol (Phase C)
Input per paper: data/extracted/dumps/<record_id>.txt (metadata header, abstract, candidate table pages with page numbers).
Output per paper: data/extracted/json/<record_id>.json conforming to the schema below. One extractor agent per batch of papers;
an independent second extractor re-does a random 15 % sample (data/validated/). Rules:
- Extract ONLY what is printed. Never infer a standard error; if only stars are given, record
se: null,p_stars: "***"and the star legend innotes. If t-statistics are in parentheses (check the table note), recordt, notse. - One row per coefficient of a hedonic variable (taxonomy in
scripts/harmonization/taxonomy.yaml) per model (column). Record the exact printed variable name and the table/column/page. Do not extract constants, fixed-effect dummies, or variables that are not property/neighbourhood/environment/location/market/AI characteristics. - Record the dependent variable and its transformation (
log,level,boxcox,per_m2,other) and the regressor transformation (level,log,binary,dummy,squared,other) and unit (m2,sqft,km,miles,m,years,count,index,share,db,currency, ...). If a variable enters as log, say so. - Study-level fields: country, region/city, sample period (start/end years of the transactions), property type (single_family / condo_apartment / multifamily / rental / mixed / unknown), price type (transaction / listing / appraisal / rent), n_obs (per model if it varies), estimator (OLS / WLS / spatial_lag / spatial_error / SAC / GWR / FE_panel / IV / quantile / ML_marginal / other), fixed effects (time, location), SE type (OLS / robust / clustered / unknown), R² if printed.
confidence:highwhen the number was read from a clear table with an explicit SE/t legend;mediumwhen the legend is ambiguous or the table is partly garbled;lowwhen a value had to be guessed from context (then it must not be used).- If the paper is not a hedonic price study after all (no residential price outcome or no characteristic coefficients), return
{"record_id": ..., "eligible": false, "exclusion_reason": "..."}.
JSON schema (per paper)
json
{
"record_id": "string", "eligible": true, "exclusion_reason": null,
"study": {"title": "", "year": 0, "doi": "", "country": "", "region_city": "", "sample_start": 0, "sample_end": 0,
"property_type": "", "price_type": "", "data_source": "", "document_type": "journal|working_paper|thesis|conference|chapter",
"estimators": [""], "spatial_method": "", "time_fe": true, "location_fe": true, "se_type": "", "n_obs_total": 0,
"ai_methods": [""], "notes": ""},
"models": [{"model_id": "T2-c1", "table": "2", "column": "1", "page": 12, "dep_var": "", "dep_transform": "log", "estimator": "OLS",
"n_obs": 0, "r2": null, "se_or_t_in_parentheses": "se|t|p|none", "sample_subset": ""}],
"coefficients": [{"model_id": "T2-c1", "var_name_printed": "", "taxonomy_id": "living_area", "x_transform": "log", "x_unit": "m2",
"beta": 0.0, "se": null, "t": null, "p": null, "p_stars": "", "ci_lo": null, "ci_hi": null, "page": 12,
"confidence": "high", "notes": ""}]
}