1Load your data
Advanced settings
2Results
How it works
reread is an ensemble with a self-calibrating threshold. It combines three complementary careless-detection signals into a single per-respondent score, calibrated on real data with a known careless/attentive ground truth, and then draws the line itself. The distinctive ingredient is the rc index (relative coherence); the other two are established detectors that catch the failure modes rc is blind to by construction. The part usually left out of such tools — turning a ranking into a decision without labels — is the one this procedure treats as its main job.
The rc index — the core signal
Respondents who answer attentively are internally consistent: on items that tap the same construct they give compatible answers, so those items covary within the person just as they do across the sample. Careless respondents break that internal covariance. The rc index asks: did this person answer the questionnaire's strongly-related item pairs more coherently than they would by chance?
- Find the coupled pairs. Correlate every pair of items across your sample; keep the top fraction with the largest |r| (default 3%) — the pairs that genuinely move together, typically items from the same scale.
- Score each person's coherence. For one respondent, measure how tightly their answers track across those coupled pairs (an individual-level |correlation|). Attentive people track them closely; careless ones produce near-noise.
- Build a personal chance baseline. Recompute the same coherence many times on random item pairs — a permutation done separately for each respondent — absorbing their own response style and scale usage.
- Turn it into a z-score.
rc = (coupled − mean random) / sd random. A low rc means their answers to items that should agree are no more coherent than random pairs — the signature of inconsistent carelessness.
Comparing each person to their own random baseline is what frees rc from distributional assumptions: no multivariate normality, no external cut-off table, no factor key. That is the crucial difference from distance-based outlier detectors such as Mahalanobis distance, whose chi-square thresholds assume a normality that Likert data violate and which, applied by the book, flag almost no one.
The two partners in the ensemble
rc targets inconsistent carelessness (random or intermittent responding). It is blind by construction to consistent carelessness — someone who answers “3” to everything is trivially coherent. Two established detectors fill that gap:
- LongString — the longest run of identical consecutive answers, catching straight-lining that rc cannot see.
- Person-Total correlation — how well a respondent's profile aligns with the sample's average profile, catching people who answer against the grain.
A logistic model with fixed weights — fitted once on the labelled validation study and then frozen, never refitted per dataset — combines the three into one score. On that data the ensemble reaches AUC 0.983 under leave-one-out validation, against 0.87 for rc alone and 0.94 for the two partners without it. The gap matters more at the decision than at the ranking level: removing rc costs 0.04 of AUC but 0.24 of MCC once a threshold is actually applied. The two partners are automatically down-weighted when your data's item-mean profile is too flat to support them (a case rc handles alone) — the results panel tells you when this happens. Two further indicators, IRV (within-person response variability) and Mahalanobis D², are computed and shown for transparency but kept out of the score: their careless direction is not stable across questionnaires (IRV) or degrades when items outnumber respondents (D²). Refitting the combiner on each new dataset would do better still — but that needs the very labels this procedure is built to work without.
From scores to flags — no rate to guess
The ensemble ranks everyone by careless probability, but turning a ranking into a yes/no decision usually needs a threshold — and asking the analyst for the “expected careless rate” is asking for exactly the unknown they are trying to measure. Worse, a fixed top-X% rule flags X% even on perfectly clean data. reread instead anchors the cut on the attentive majority. It locates the attentive mode of the score distribution and reads its spread from the low side only — the side careless respondents rarely reach — then flags everyone beyond a fixed distance above it. Both the cut and the estimated careless rate follow from that one fit. The asymmetry is deliberate: attentive respondents form a compact peak you can anchor on, whereas careless ones form a long tail with no peak of its own, so anything fitted to them breaks down once they are numerous.
The cut is applied unconditionally, which has an honest consequence the tool reports rather than hides: a sample with no careless respondents at all will still have an upper tail, so it will still yield a few flags. Alongside your result the tool therefore shows the clean-data envelope — how much a careless-free dataset of your own size typically flags by chance (on the order of 1–2%, more in the worst cases on short batteries and small samples). A flagged share inside that envelope is indistinguishable from clean data and is labelled as such; one above it is not.
If you do have a prior on the rate (a pilot, an earlier wave), you can override the automatic cut with a fixed expected rate under Advanced settings.
There is one automatic cut and nothing to tune: z = 2.5 above the attentive mode, which puts about 0.6% of attentive respondents on the wrong side. Anchoring it on the attentive peak alone is what makes a single setting enough — it is the better choice from the cleanest samples up to roughly a 32% careless rate, past any realistic prevalence. Beyond that a more liberal cut would recover more cases, which is what the advanced z override is for.
Validated on collected data. In the validation study (real attentive respondents with real careless ones mixed in at controlled rates from 5% to 50%, 200 resamples per point) the ensemble ranks careless against attentive essentially perfectly at every prevalence (AUC 0.98–0.99). What the automatic cut then achieves is the number that matters: MCC ≈ 0.77 at a 10% careless rate, 0.81 at 15%, 0.82 at 20%, peaking near 0.83 around 25%. The estimated rate tracks the truth to within about 1.5 percentage points up to a 32% rate (about 4 points at 45%), because it is read off the attentive side rather than fitted to the careless one. Precision stays high throughout — the automatic mode is deliberately conservative, confidently flagging the clearly-separated careless while leaving mild or partial inattention, which overlaps the attentive cluster and is intrinsically ambiguous, for you to judge from the dot plot and the per-respondent columns.
Handling real questionnaires
Reverse-keyed items are aligned automatically from the sign of the sample correlation, so you needn't recode anything. Items on different Likert ranges are rescaled to a common proportion, so a 1–7 scale can't drown out a 1–4 one. Constant (zero-variance) respondents are handled explicitly. Every feature is standardised within your dataset before the ensemble combines them, so the fixed weights transfer across questionnaires of different length and scale. A structure diagnostic, calibrated against pure sampling noise, warns you when the data lack the cross-item structure the method needs.
When it works best
The signal grows with the number of correlated item pairs, so reread is strongest on long multi-construct batteries. A controlled simulation puts numbers on this: at the shipped cut the ensemble's severity-weighted MCC climbs from about 0.48 on a 30-item questionnaire to 0.72 at 60 items, 0.90 at 120, and 0.94 from 180 upward.
The length envelope is a measured claim, not a caveat. rc's contribution is positive and clearly so from about 120 items (+0.12 MCC), indistinguishable from zero at 60, and actually negative at 30 items, where a noisy coherence estimate widens the attentive mode and pushes the cut out of reach. On short scales, then, the partners and design-time checks — attention checks, response times — should carry the screen. The applicability guide above reports where your specific dataset falls.
Privacy: your data never leaves your device — by design
Questionnaire data is often sensitive (personality, mental health, workplace surveys). This tool is built so that uploading your data is not just avoided — it is impossible: there is no server to receive it.
- All computation happens in your browser. Your file is read locally
(
FileReader) and analysed by JavaScript running on your own machine (a Web Worker). Nothing is transmitted, stored, or logged anywhere. - The only network activity is downloading this page itself. The app makes zero outgoing requests with your data: no upload endpoint, no cookies, no analytics, no trackers, no runtime CDN calls. Every script (including the Excel reader, SheetJS) is bundled and served from this same origin — nothing is fetched from elsewhere and no library ever phones home.
- Don't take our word for it — verify. Open your browser's developer tools
(
F12 → Network) and run an analysis: you will see no request leaving your machine. The source code is unminified and human-readable (reread.js, app.js, worker.js). Once the page has loaded you can even switch off your connection and the tool keeps working. - GDPR standpoint: since no personal data ever reaches us, we perform no processing at all — you remain the sole data controller, no data-processing agreement is needed, and there is nothing for us to retain or erase. Using this tool does not constitute a data transfer to a third party.
- The flip side: we cannot recover anything for you. Results exist only in your browser tab — download the results CSV before closing it.
The static files are served by Cloudflare Pages; like any web host, Cloudflare sees the ordinary page request (your IP requesting the site) — but never your data, which is opened only after the page is already on your machine. Your institution's policies for handling data on your own computer still apply.