# party2d

Code and processed model inputs for generating two-dimensional party-position estimates from text and expert data. The model combines manifesto and media text indicators with expert survey placements in a Bayesian dynamic item-response framework.

## Repository contents

- `data-setup/` — optional scripts and source manifest for rebuilding model-ready inputs from local raw files.
- `src/julia/` — Stan data preparation, model fitting, post-estimation, enrichment, and validation.
- `models/` — Stan model specification.
- `data/` — five processed party-level inputs used by the Julia/Stan model.
- `metadata/` — data dictionary and source-support documentation.
- `docs/` — raw data source documentation, coding decisions, and operational notes.

Processed inputs needed by the model are included in `data/` so the estimation step can be reproduced from the model-ready data.

## Running the pipeline

Run the full workflow with:

```bash
bash run_estimation.sh full
```

This checks that model-ready inputs are present, then executes the Julia/Stan workflow scripts:

```bash
bash scripts/01_prepare_data.sh   # checks model-ready inputs; does not rebuild raw data
bash scripts/02_fit_model.sh
bash scripts/03_extract_estimates.sh
bash scripts/04_enrich_estimates.sh
bash scripts/05_validate_estimates.sh
```

The numbered scripts can also be run manually in that order.

The Bayesian model is computationally expensive. The production run used 4 cores on an AMD Ryzen 9 7945HX and took 60,372 seconds, approximately 16 hours 46 minutes.

If model output is already available, rebuild estimates without refitting Stan:

```bash
bash run_estimation.sh reuse
```

`reuse` verifies the model-ready inputs, then reruns post-estimation, enrichment, and validation while skipping the Stan fitting step.

To check the local setup without fitting the model, run:

```bash
bash run_estimation.sh dry-run
```

## Data inputs

The model-ready inputs are included under `data/`:

- `text_data.csv`
- `expert.csv`
- `lr_data.csv`
- `union_mapping.csv`
- `party_families.csv`

Original raw source files are not redistributed. See `docs/RAW_DATA_SOURCES.md` and `data-setup/` for the list of original data sources, access information, and expected local filenames for regenerating the processed inputs. Rebuilding inputs from raw files is separate from the normal estimation workflow and writes only to ignored `_local/` test directories; it never replaces committed `data/` inputs automatically.

## Output variables

The two position variables are scaled from 0 to 1:

- `economic_lr`: economic left to economic right.
- `galtan`: cosmopolitan/socially liberal to traditionalist/nationalist.

Column definitions are in `metadata/data_dictionary.csv`.
