Corrections replacing 0.6.0, which was never published.
item_order randomization is gone, and
panel_instrument() refuses it with an explanation: every
persona-item pair is an independent request, so no respondent ever sees
a questionnaire order, and shuffling a recorded position number claimed
an exposure that was never administered. item_position now
documents the item’s fixed instrument position.panel_benchmark() now rejects a human reference whose
probabilities fall outside [0, 1], whose shares miss one, or whose
labels were never offered. Conjoint responses are refused, since
profiles differ by respondent. An item whose every response failed to
parse gets NA shares; zero shares would claim the
categories were available and unchosen.panel_bias_audit() reports NA with a note
when chi-square expected counts are sparse, instead of an unreliable
p-value.finish_reason "length" now warns and names
max_tokens as the cause. Reasoning models can spend a small
budget entirely on hidden reasoning and emit no visible text.panel_from_personas() requires data; the
ANES example must be named. A weight that is NA or negative now stops
the call, where it used to be quietly set to zero, and weight columns
must be numeric. Weights supplied without n draw a warning,
since only a sample uses them.panel_power() is removed. Its arithmetic treated
model-persona dispersion as if it were human outcome variance, which is
not a sound basis for planning a human study; a design-sensitivity
function with an explicit dispersion source may return later.Initial CRAN release.
panel_from_margins(), panel_from_data(),
and panel_from_personas() create panels from supplied
margins, microdata rows, or persona data frames.
as_persona_frame() attaches question and field metadata to
a data frame. Reports identify which panel source was used.panel_administer() administers every item to every
persona. It can randomize item and option order and records
item_position and option_order. Its classed
result stores response rows in $data and the panel,
instrument, benchmark, and token usage in separate fields. Response rows
retain response_text, response_id,
success, model, and provider as
columns.panel_batch_submit() submits an administration to a
provider’s asynchronous batch API. panel_batch_status() and
panel_batch_fetch() inspect and retrieve the job.
Synchronous and batch submission share the max_calls and
confirm gate.panel_benchmark() compares response shares with
supplied human benchmarks and records benchmark coverage.
plot() displays the compared shares.panel_bias_audit() reports parse failures and
first-option sensitivity.conjoint_instrument() creates conjoint choice tasks
with profiles randomized independently for each respondent.
conjoint_design() returns a classed list with profile and
attribute fields, and conjoint_amce() estimates from the
recorded respondent-level profiles with standard errors clustered by
respondent in a classed result that retains run counts as columns.run_panel_studio() provides the panel workflow in an
optional Shiny application and can download responses, reports, and
benchmark tables. The studio now preserves readable long-form output,
presents response shares and diagnostics before technical details,
carries administered responses into benchmarking and analysis, supports
repeated administrations and conjoint instruments, exposes power and
AMCE calculations, permits full ANES persona inspection and field
selection, honors shared generation settings, and shows recorded call
timing when it is available. Numbered configuration sections can be
collapsed while the administration action and run plan remain in view.
Persona templates and item wording have editable working defaults. Panel
construction, administration, benchmark comparison, power, and AMCE
actions are disabled when their known inputs are incomplete, with the
unmet requirement shown beside the control. ANES construction separates
sampled panels from panels made from selected respondents. Sampled
panels disclose replacement sampling above the 100-respondent source
size and no longer impose a 500-person GUI ceiling; selected panels
require at least one respondent and ignore panel size. A blank shared
maximum-output-token field now uses and displays a 512-token package
default, while an explicit sidebar value takes precedence. Response text
and response labels receive most of the width in display tables,
internal identifiers remain available through a column control, and
shares, benchmark deviations, and other double columns use concise
display-only rounding.