An R Shiny app for exploring whether Polymarket prices become more accurate as markets approach close, and whether market probabilities are well calibrated against observed outcomes.
Prices usually become more accurate as they get closer to the closing date for Yes markets, but this pattern does not hold as clearly for No markets.
The 90%-100% probability bucket is generally well calibrated. In most other buckets, the market tends to overestimate Yes scenarios.
The app has two main views:
- Price Accuracy: compares mean absolute error from 7 days before close to 1 day before close.
- Calibration: groups markets into probability buckets and compares predicted probabilities with observed Yes rates.
The app uses filtered Polymarket data with resolved binary markets and probability snapshots before market close.
Only rows with TRUE or FALSE outcomes are used.
Install the required R packages:
install.packages(c(
"shiny",
"bslib",
"ggplot2",
"dplyr",
"tidyr",
"readr",
"scales"
))From the project directory, run:
shiny::runApp("app.R")Or from the terminal:
Rscript -e 'shiny::runApp("app.R")'app.R- main Shiny applicationdata.csv- filtered Polymarket datasetkaivita.R- simple CSV loading helper13.R- readr-based CSV loading helper
The app uses mean absolute error to measure price accuracy. A lower value means the market probability was closer to the final binary outcome.
Calibration is measured by comparing each probability bucket with the observed share of Yes outcomes in that bucket.