Editorial Policy
How forecasts and commentary are produced at VoteROI.com Mood Forecast. The short version: the model runs, the model speaks. We do not override its output to match a preferred narrative.
How forecasts are made
The composite score and the race-level forecast probabilities are computed end-to-end by code. The pipeline is: ingest behavioral indicators, normalize cross-sectionally against the other fifty states, combine via calibrated weights from L2-regularized logistic regression, project against the current state vector for each forward-looking race. No human editor adjusts the probabilities before publication. If the model says Wisconsin governor is 63% Democratic, the site says 63%, even when a human reader might disagree.
What we publish
Model output (composite scores, race probabilities, dimension breakdowns, candidate-fit rankings). Methodology disclosure (every coefficient, every Brier score, every retraining date). Source attribution (every indicator, every publisher, every refresh date). Corrections when we get something wrong. None of it is punditry.
What we do not publish
- AI-generated headlines or commentary. Claude assists with editorial drafts; the final voice is human-written and human-signed.
- Forecasts derived from our private preferences. The model coefficients are fit to historical outcomes, not to ideological priors.
- Race calls. We report probabilities, not winners. A 75% probability is not a call; it is a 75% probability.
- Anonymous opposition research. Everything published links back to its public source.
Conflicts of interest
VoteROI.com LLC operates VoteROI.com Mood Forecast (this site) and VoteROI (donor intelligence on FEC data). David B. Wheeler is also Co-Founder of American Muckrakers PAC II. Editorial decisions on Sentiment are walled off from PAC strategy: the Sentiment model has never been adjusted to favor a candidate, party, or PAC objective, and AM PAC has no input into model design. Where AM PAC funds appear in candidate fit signals, the FEC source is cited like any other.
Corrections
When we get something materially wrong, we say so publicly at /corrections with the date, the version, and the fix. We never silently rewrite a model output to look more correct after the fact; prior model versions remain queryable so any historical call can be reproduced.