Skip to content

Open Choice

A plugin-based workbench for choice-modeling research — design, simulate, estimate, and compare models in one place.

One file. Four steps. Fully reproducible.

Every analysis is an .oce file you commit alongside the data. Share the file, rerun it a year later, or hand it to an AI assistant and get an exact answer back.

1. Design

Generate an experimental design — MaxDiff, CBC, conjoint — with the parameters you actually want, not the defaults the GUI gives you.

design-maxdiff::design

[["design-maxdiff::design"]]
n_items = 10
items_per_task = 3
tasks_per_version = 8
versions = 4
run_dir = "./design"

2. Wrangle

Turn raw respondent data into a clean, model-ready long file. The same wrangling runs on the pilot and the full field.

choice-wrangling::pipeline-maxdiff

[["choice-wrangling::pipeline-maxdiff"]]
design_csv = "design.csv"
respondent_csv = "respondents.csv"
run_dir = "./workspace"
run_name = "pilot"

3. Estimate

Fit a hierarchical Bayesian model via Stan and finalize diagnostics + part-worths in one call. Swap the plugin to switch estimator — the rest of the pipeline stays the same.

model-hb-stan::fit-finalize

[["model-hb-stan::fit-finalize"]]
input = "./data/hb_data.csv"
run_dir = "./runs"
run_name = "pilot"
num_samples = 1000
num_chains = 4

4. Report

Score scenarios, rank subsets, compute reach — then commit the output next to the .oce that produced it. A year from now you’ll still know exactly how the number was made.

maxdiff-turf::score-scenarios

[["maxdiff-turf::score-scenarios"]]
utilities = "./utilities.csv"
scenarios = "./scenarios.csv"
out_dir = "./runs/score-scenarios"
reach_method = "first-choice"

Built for scripting in the AI era

`.oce` files — your pipeline, your file, your repo

One TOML file captures a full analysis. Commit it to git. Diff last quarter’s run vs today’s. Hand it to a coworker and they get the exact same result. A GUI’s “save state” button can’t touch this.

First-class help + IntelliSense, built for LLMs

Every endpoint has structured, machine-readable docs. IntelliSense autocompletes params as you type. Ask an AI to write your .oce — it has real schemas to anchor against. Scripting without the friction.

Timeline — every edit snapshotted, diffable

Regret a parameter tweak? Roll back. Want to see what changed between Monday and Friday? Scrub. Every .oce edit is captured automatically.

Job queue — parallel, sequential, or scheduled

Queue a batch of runs and let them work through in order, or fan several out at once on separate lanes. Need to kick off a 4-hour HB fit at midnight? Schedule it and close the lid.

Open-source, native-speed plugins

Compiled, open-source executables — estimations that crawl in R or Python run in seconds in native Rust. No vendor black-boxes. No cloud round-trips.

Plugin SDK in the language that fits

Rust, R, Python, Julia — plugins speak ocp-json/1. The fast solver in Rust, the Stan model in R, the data prep in Python — all interchangeable from one workbench.

Registry updates — always the latest method

New techniques ship as signed plugin updates on registry.openchoice.app. One click, cryptographically verified, current tools in your hands — no installer dance, no waiting for v2.5.

Your laptop, your data

Cross-platform desktop (Windows, Mac, Linux). No cloud lock-in. Install once, keep forever. Your numbers never leave the machine you chose.

Where to go next