Every file format PACER accepts, with example data you can view and download. Each tool expects a specific layout — use these as starting points for your own data. Some formats are flexible: column headers become identifiers within the analysis, so you can name them anything that makes sense for your data. Others are prescribed: PACER looks for specific column names to locate the right data, and the wrong name will trigger a validation error. Each file card is labeled so you know which rule applies before you start formatting your data.
Column headers are item names. Values are numeric scores (0/1 for binary, 0–K for polytomous). An optional group column may be included anywhere for DIF analysis. Leave missing values blank or code as NA.
| Q1 | Q2 | Q3 | Q4 | Q5 | group |
|---|---|---|---|---|---|
| Item column | Item column | Item column | Item column | Item column | Optional — DIF grouping |
| 1 | 0 | 1 | 1 | 0 | Reference |
| 1 | 1 | 1 | 0 | 1 | Reference |
| 0 | 1 | 0 | 1 | 1 | Focal |
| 1 | 0 | 1 | 1 | 1 | Focal |
| 0 | 0 | 1 | 0 | 0 | Reference |
0 or 1. Polytomous items: integer scores starting at 0 (e.g. 0, 1, 2, 3). Leave missing values blank or code as NA.group (lowercase) with at least two distinct values (e.g. Reference / Focal) to enable Mantel-Haenszel and SMD differential item functioning analysis.Same wide-format layout as Item Analysis. Binary items use 0/1; polytomous items use integer scores 0–K. Binary and polytomous items may be mixed in the same file — PACER auto-detects: any column with a value > 1 is treated as polytomous. Leave missing responses blank or code as NA.
| ITEM01 | ITEM02 | ITEM03 | ITEM04 | POLY01 | POLY02 |
|---|---|---|---|---|---|
| Binary item | Binary item | Binary item | Binary item | Polytomous (0–3) | Polytomous (0–4) |
| 1 | 0 | 1 | 1 | 2 | 3 |
| 1 | 1 | 0 | 1 | 1 | 2 |
| 0 | 1 | 1 | 0 | 3 | 4 |
| 1 | 0 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | 1 | 2 | — |
Scoring requires two files: item parameters and response data. If you ran calibration in PACER, both are loaded automatically — you only need to upload manually when working with external parameter estimates.
Binary items use a, b, c. Polytomous items (GRM / GPCM) use a plus threshold columns d1, d2, d3…. Leave unused cells blank. The name column may also be called itemKey, item, key, itemId, or id — PACER accepts all of these.
| columnName | model | a | b | c | d1 | d2 | d3 |
|---|---|---|---|---|---|---|---|
| Item name (or itemKey, item, key, itemId, id) | 1PL · 2PL · 3PL · GRM · GPCM | Discrimination | Difficulty | Guessing | Threshold 1 | Threshold 2 | Threshold 3 |
| ITEM01 | 2PL | 0.8794 | -0.9216 | — | — | — | — |
| ITEM02 | 3PL | 1.7345 | -0.3142 | 0.1316 | — | — | — |
| ITEM03 | GRM | 2.1200 | — | — | -1.0851 | -0.1300 | 1.4424 |
| ITEM04 | GPCM | 0.9530 | — | — | -1.9818 | 0.1647 | — |
Three required columns: testID (examinee identifier — also accepted: personId, id), key (the item's name — must match a value in columnName of the parameter file), score (0/1 for binary; integer for polytomous). Sparse data is supported.
| testID | key | score |
|---|---|---|
| Examinee ID (or personId, id) | Matches columnName value in params | 0/1 binary · 0–K poly |
| EX001 | ITEM01 | 1 |
| EX001 | ITEM02 | 0 |
| EX001 | ITEM03 | 2 |
| EX002 | ITEM01 | 1 |
| EX002 | ITEM02 | 1 |
| EX002 | ITEM04 | 1 |
key values in this file must exactly match the columnName values in the parameter file. Also accepted: itemKey, itemId, item. Case matters.Equating requires two parameter files — the Item Bank (old scale parameters) and the New Form (new form parameters). Both files use the same column layout. Items shared between forms serve as anchors; their item_id values must match exactly across both files.
| item_id | model | a | b | c |
|---|---|---|---|---|
| Unique identifier | 1PL · 2PL · 3PL | Discrimination | Difficulty | Guessing (blank = 0) |
| ITEM001 | 2PL | 0.8794 | -0.9216 | — |
| ITEM002 | 2PL | 0.6494 | -0.5570 | — |
| ITEM003 | 3PL | 1.7345 | -0.3142 | 0.1316 |
| ITEM004 | 3PL | 1.6109 | -0.9719 | 0.1766 |
item_id values are automatically used as anchors. Only these shared items drive the linking transformation.CDM Calibration requires two files: a binary response matrix and a Q-matrix that maps items to skills.
Wide format. Header row with item names required. Values must be 0 or 1. Item column names must correspond in order to rows of the Q-matrix.
| Q1 | Q2 | Q3 | Q4 | Q5 | Q6 |
|---|---|---|---|---|---|
| Item column | Item column | Item column | Item column | Item column | Item column |
| 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 1 |
One row per item, in the same order as the response matrix columns. One column per skill. A value of 1 means the item requires that skill; 0 means it does not. Column headers become skill names throughout the output.
| Skill1 | Skill2 | Skill3 |
|---|---|---|
| Skill (0 or 1) | Skill (0 or 1) | Skill (0 or 1) |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 0 |
| 0 | 0 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
The Skill Profiler loads parameters from a saved CDM Calibration session automatically. If uploading manually, three files are needed: item parameters, a Q-matrix, and a response matrix.
Three columns: itemName (item identifier), guess (probability of correct response without required skills), slip (probability of incorrect response despite having all required skills).
| itemName | guess | slip |
|---|---|---|
| Item identifier | P(correct | no skills) | P(incorrect | all skills) |
| Q1 | 0.1824 | 0.0951 |
| Q2 | 0.2103 | 0.1240 |
| Q3 | 0.0883 | 0.1571 |
| Q4 | 0.1567 | 0.0724 |
| Q5 | 0.2291 | 0.1138 |
| Q6 | 0.1640 | 0.0873 |
The Q-matrix and response matrix use the exact same format as CDM Calibration above — same column layout, same ordering requirements.
Test Construction requires up to three files: an Item Bank (required), a Blueprint (optional), and a TIF Spec (optional). The item bank drives everything — any metadata column you include automatically becomes an available blueprint dimension with no configuration needed.
Binary and polytomous items go in the same file. Binary items use a, b, c and leave threshold columns blank. Polytomous items use a and threshold columns (b1, b2…) and leave b and c blank. Any extra columns — content_area, strand, dok, anything — become blueprint dimensions automatically.
| itemid | model | a | b | c | d1 | d2 | content_area | item_type | enemy_set | group_id |
|---|---|---|---|---|---|---|---|---|---|---|
| Unique ID | Model name | Discrimination | Difficulty (binary) | Guessing (3PL only) | Threshold 1 (poly) | Threshold 2 (poly) | Any metadata | Any metadata | Enemy items (optional) | Passage group (optional) |
| 1 | 3PL | 0.073 | 2.553 | 0.066 | — | — | Strand1 | Binary | — | — |
| 2 | 3PL | 0.330 | -3.646 | 0.006 | — | — | Strand1 | Binary | — | — |
| 3 | 3PL | 0.172 | 1.880 | 0.175 | — | — | Strand1 | Binary | 4;5 | — |
| 4 | GPCM | 0.780 | — | — | 0.583 | 2.987 | Strand1 | Polytomous | 3;5 | — |
| 5 | GPCM | 0.354 | — | — | -2.099 | 0.457 | Strand1 | Polytomous | 3;4 | — |
| 6 | 3PL | 0.687 | 2.957 | 0.073 | — | — | Strand2 | Binary | — | — |
| 7 | 3PL | 0.960 | -1.016 | 0.104 | — | — | Strand2 | Binary | — | passage_A |
| 8 | GPCM | 0.868 | — | — | 1.050 | 2.650 | Strand2 | Polytomous | — | passage_A |
| 9 | GPCM | 0.560 | — | — | -1.090 | -0.550 | Strand2 | Polytomous | — | passage_A |
model column — no separate files needed.a, b, c (leave c blank for non-3PL). Polytomous: fill a and threshold columns d1, d2… Leave unused cells blank, not zero.content_area, dok, strand, etc.) automatically becomes a blueprint dimension — no configuration required.4. Multiple: 3;5 or "3;4;5". One-directional declaration is enough — PACER resolves symmetrically.group_id form a stimulus group — selected all-or-nothing (strict mode) or with pruning (pruned mode). To enable group-level blueprint constraints, add a GROUP descriptor row per group: set model = GROUP, set group_id to the group's own ID, and fill in group metadata columns (group_type, subject, etc.). Leave IRT columns blank. See the Item Groups card below.Groups are collections of items that belong together — a science scenario, a math exhibit, a reading passage, a topic cluster, or any atomic set. To use group-level blueprint constraints, add one GROUP descriptor row per group directly in your item bank file. Items in the group reference it via group_id. Standalone items (no group_id) coexist in the same file and are unaffected.
GROUP row's metadata columns (e.g. group_type, subject) are used for group-level blueprint constraints. Item metadata columns (e.g. content_area, dok) are used for item-level blueprint constraints. Both live in the same file — they never conflict.
| itemid | model | group_id | group_type | subject | a | b | c | d1 | d2 | content_area | dok |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ID or group name | GROUP or model name | Points to self (GROUP) or parent group (item) | Group-level metadata | Group-level metadata | IRT params — blank for GROUP rows | Item-level metadata | Item-level metadata | ||||
| G001 | GROUP | G001 | literary | reading | — | — | — | — | — | — | — |
| item_01 | 3PL | G001 | — | — | 1.20 | -0.50 | 0.18 | — | — | reading | 2 |
| item_02 | 3PL | G001 | — | — | 0.95 | 0.10 | 0.21 | — | — | reading | 1 |
| item_03 | 3PL | G001 | — | — | 1.10 | 0.80 | 0.15 | — | — | reading | 3 |
| G002 | GROUP | G002 | persuasive | reading | — | — | — | — | — | — | — |
| item_04 | 3PL | G002 | — | — | 1.40 | -0.20 | 0.14 | — | — | reading | 2 |
| item_05 | GPCM | G002 | — | — | 1.05 | — | — | -0.80 | 0.60 | reading | 3 |
| G003 | GROUP | G003 | physics | science | — | — | — | — | — | — | — |
| item_06 | 2PL | G003 | — | — | 1.30 | -0.40 | — | — | — | science | 2 |
| item_07 | 2PL | G003 | — | — | 1.00 | 0.30 | — | — | — | science | 1 |
| item_08 | 2PL | — | — | — | 0.88 | -0.80 | — | — | — | science | 1 |
| item_09 | 2PL | — | — | — | 1.20 | 0.60 | — | — | — | reading | 2 |
When your bank has GROUP rows, the blueprint can use constraint_unit = group to constrain how many groups of each type are selected. Item-level constraints work exactly as before — both types can coexist in the same blueprint file.
| dimension | category | min_items | max_items | constraint_unit | notes |
|---|---|---|---|---|---|
| Column name or keyword | Value to match | Min count per form | Max count per form | item (default) or group | Free text |
| ── Total row ──────────────────────────────────────────────────────────────────────────── | |||||
| total | — | 32 | 32 | — | Total items per form |
── Group-level constraints — constraint_unit = group means min/max count groups, not items ── |
|||||
| group_type | literary | 2 | 2 | group | Exactly 2 literary groups |
| group_type | persuasive | 1 | 1 | group | Exactly 1 persuasive group |
| subject | science | 1 | 2 | group | 1–2 science groups |
| ── Item-level constraints — unchanged from standard blueprint, constraint_unit defaults to item ── | |||||
| content_area | reading | 18 | 22 | — | 18–22 reading items total |
| content_area | science | 8 | 12 | — | 8–12 science items total |
| dok | 1 | 6 | 10 | — | DOK 1 items |
| dok | 2 | 14 | 18 | — | DOK 2 items |
| dok | 3 | 4 | 8 | — | DOK 3 items |
model = GROUP, set group_id to the group's own ID (references itself), and fill any metadata columns (group_type, subject, etc.). Leave all IRT parameter columns blank — GROUP rows are metadata only, not items.group_type = literary). Each item owns its item-level dimensions (content_area = reading). They are independent and never compete — both live in the same file.group to make min_items / max_items count groups, not items. Matches against GROUP descriptor metadata. Leave blank or item for normal item-level behaviour.group_id behave exactly as in a standard bank. Grouped and standalone items can be freely mixed in the same file and blueprint.group_id with no matching GROUP row, PACER warns at import. The group still works for atomicity, but group-level blueprint constraints cannot apply to it.Each row is one constraint or directive. The dimension column references either a metadata column from your bank or a built-in keyword (model_type, model). All blueprint row types are shown below.
| dimension | category | min_items | max_items | dimension2 | category2 | constraint_type | target_theta | constraint_unit | notes |
|---|---|---|---|---|---|---|---|---|---|
| Column name or keyword | Value to match | Min per form | Max per form | 2nd dimension (joint only) | 2nd category (joint only) | Objective row only | Objective row only | item (default) or group | Free text |
| ── Total row — required; sets form length ────────────────────────────────────────────────────── | |||||||||
| total | — | 20 | 20 | — | — | — | — | — | Total items per form |
| ── Content constraints — any metadata column in the bank ────────────────────────────────────── | |||||||||
| content_area | Strand1 | 5 | 5 | — | — | — | — | — | Exactly 5 from Strand1 |
| content_area | Strand2 | 5 | 5 | — | — | — | — | — | Exactly 5 from Strand2 |
| content_area | Strand3 | 5 | 5 | — | — | — | — | — | Exactly 5 from Strand3 |
| content_area | Strand4 | 5 | 5 | — | — | — | — | — | Exactly 5 from Strand4 |
| ── model_type — built-in keyword: dichotomous or polytomous ─────────────────────────────────── | |||||||||
| model_type | dichotomous | 15 | 18 | — | — | — | — | — | Binary items |
| model_type | polytomous | 2 | 5 | — | — | — | — | — | Polytomous items |
| ── model — built-in keyword: exact model name ────────────────────────────────────────────────── | |||||||||
| model | 3PL | 10 | 15 | — | — | — | — | — | 3PL items only |
| model | GPCM | 2 | 5 | — | — | — | — | — | GPCM items only |
| ── Joint constraint — both dimensions must match simultaneously ───────────────────────────────── | |||||||||
| content_area | Strand1 | 2 | 3 | item_type | Polytomous | — | — | — | Polytomous items in Strand1 |
| ── Group-level constraint — constraint_unit = group counts groups, not items ────────────────── | |||||||||
| group_type | literary | 2 | 2 | — | — | — | — | group | Exactly 2 literary groups |
| ── Objective row — dimension and category left blank; constraint_type and target_theta used ──── | |||||||||
| — | — | — | — | — | — | maximize_tif | 0.0 | — | Maximize info at θ=0 |
dimension = total with min_items and max_items to define form length. When present, the Target input in the PACER toolbar is locked to this value.dimension to any metadata column from your bank (content_area, dok, etc.) and category to the value to match. min_items / max_items are per-form counts.model_type — values: dichotomous or polytomous. model — exact name: 3PL, 2PL, 1PL, GRM, GPCM, PCM, RSM. No extra bank column needed.dimension2 and category2 to require items matching both dimensions simultaneously (e.g. strand=Reading AND dok=3). Both must be present or both absent.dimension and category blank. Set constraint_type to maximize_tif or minimize_sem and target_theta to the ability point. Only the first objective row is used.group to count groups instead of items. Requires GROUP descriptor rows in the bank. Leave blank or item for standard item-level behaviour — see the Item Groups card above.dimension and category blank (and no constraint_type) are silently skipped — safe to use as visual separators. Constraint minimums must be jointly satisfiable given your bank size, or the solver returns Infeasible.Each row tells the solver that the assembled form's Test Information Function must fall within [min_info, max_info] at that exact θ. All rows are hard constraints — the solver will report Infeasible if the bank cannot satisfy them. You can edit these values directly in the TIF Spec table within the app after uploading.
| theta | min_info | max_info | label |
|---|---|---|---|
| θ value (any real number) | Minimum information required | Maximum information allowed (blank = no upper bound) | Optional display label |
| -3 | 0 | 8 | low range |
| -2 | 3 | 12 | below average |
| -1 | 5 | 10 | lower target |
| 0 | 6 | 12 | target region |
| 1 | 5 | 10 | upper target |
| 2 | 3 | 12 | above average |
| 3 | 0 | 8 | high range |
max_info blank for a floor only (no ceiling). Set min_info = 0 for a ceiling only (no floor).min_info at any θ point, the solver reports Infeasible rather than returning a violating solution.