A compact view of where observations move between two ordered states.
Which statement comes closer to your views, even if neither is exactly right?
86.4% of answer pairs retain the same answer · 45,947 pairs from 12,580 panel respondents
Rows: Earlier answer · Columns: Next answer
| Earlier answer | Answer 1 | Answer 2 |
|---|---|---|
| Answer 1 | 88.0%n = 22,349 | 12.0%n = 3,034 |
| Answer 2 | 15.6%n = 3,216 | 84.4%n = 17,348 |
Percentages use only the reported pairs within each earlier-answer row and total 100% apart from rounding. Omitted cells remain missing; these percentages cannot recover their values. Off-diagonal cells represent changed answers. People can contribute more than one pair; these are descriptive pair counts, not independent respondents or population transition probabilities.
Pew Research Center American Trends Panel · captured national-sample aggregates
Read across a row from an earlier answer to the next answer. The diagonal retains the same answer; cells away from it show movement.
Repeated interviews, state transitions and retention, when the same unit can be linked across observations.
Do not infer individual movement from two unrelated cross-sectional samples. Do not mix joint percentages with row percentages.
One cell per earlier/later state: { row, column, value, n }. Supply row and column order explicitly. Use 0–100 for percentages and state the denominator. This example uses only reported pairs within each earlier-answer row.
Missing cells are unknown, not zero. Zero counts can be shown only when the source establishes a complete transition table. A row with no pairs has no defined percentage. If some transitions are suppressed, a percentage of reported pairs is not the full conditional probability.
Switch between answer-pair counts and within-reported-row percentages. The table exposes all displayed values to keyboard and screen-reader users.
Install from the CTZN registry, then pass your prepared rows. Examples below illustrate the component contract.
npx shadcn add @ctzn-viz/value-matrix<ValueMatrix rows={["A", "B"]} columns={["A", "B"]}
cells={cells} domain={[0, 100]} unit="%"
rowLabel="Earlier answer" columnLabel="Next answer"
ariaLabel="Answer transitions" />