Skip to contents

Fits paired comparisons when judges belong to panels and objects belong to linked sets whose units or origins can differ. It combines the Bradley–Terry–Luce model with Humphry's extended frame of reference structure.

Usage

btl_efrm(
  data,
  object_a,
  object_b,
  winner,
  judge,
  panels,
  object_sets,
  response = NULL,
  ties = c("drop", "error"),
  min_link = 20,
  se_method = c("judge_bootstrap", "bootstrap", "conditional"),
  boot_reps = 200,
  workers = 4L,
  seed = NULL,
  progress = NULL,
  cancel = NULL,
  maxit = 60,
  tol = 1e-08
)

Arguments

data

A data frame with one comparison per row.

object_a, object_b

Names of the columns holding the two compared objects. Columns used for objects, winners, judges, and panel membership must be distinct.

winner

Name of the winner column. A value must match one of the two objects in that row. "tie" and "draw" mark ties; other values are treated as missing.

judge

Name of the judge column (clusters the stage-one standard errors and defines the panels when panels is a judge attribute).

panels

Either the name of a judge-attribute column in data or a named vector mapping every judge in the comparisons exactly once to a panel.

object_sets

A named list mapping set names to character vectors of object names. Set names must be unique, and every compared object must occur exactly once in exactly one set. The alphabetically first set is the reference, with \(\alpha=1\) and \(\kappa=0\). Changing this reference can change the cross-set unit restriction, not just the labels.

response

Not supported: this first implementation fits dichotomous winner data only. Supplying it raises an informative error.

ties

"drop" (default, removed with a note) or "error".

Minimum number of cross-set comparisons a set pair must supply to be used for linking; sets not reachable from the reference set through sufficient cross-set pairs raise an error.

se_method

Method used for standard errors. The default, "judge_bootstrap", resamples judges within panels and retains dependence among a judge's comparisons. "bootstrap" instead draws independent outcomes from fitted probabilities. Both stages are refitted. "conditional" uses analytic stage-one standard errors for beta and phi; the panel-unit covariance retains dependence across sets judged by the same people. It uses inverse observed information for alpha and kappa conditional on the stage-one estimates. It is faster, but does not propagate stage-one uncertainty into the linking parameters; unit probabilities and omnibus tests are therefore withheld.

boot_reps

Number of replicates for se_method = "bootstrap" or "judge_bootstrap"; at least 30 are required. Inference is returned only when at least 30 and more than half of the requested replicates are usable, and the requested count must exceed the number of independent directions in the largest covariance block used by the fit.

workers

Number of judge-bootstrap workers. The default is four, reduced when the system limit is lower. The parametric bootstrap remains serial because its refits are inexpensive.

seed

Optional bootstrap seed. The caller's random-number state is restored when estimation finishes.

progress

Optional function called as progress(stage, current, total) during estimation.

cancel

Optional zero-argument function checked between bootstrap batches. Returning TRUE stops with a rasch_cancelled condition.

maxit, tol

Scoring iteration cap and convergence tolerance.

Value

An object of class "rasch_btl_efrm". It contains the object estimates, group- and set-unit tables, origin shifts, omnibus unit tests, unit-specific judge support, frame definitions, convergence information, and analysis notes. n_cross records each set-pair count and whether it met min_link and entered the fit. boot_reps_requested, boot_reps_used and boot_reps_failed report the bootstrap accounting. total_chisq and total_df describe the pooled pair residuals; total_p is NA because the corresponding row-independent chi-square reference is not valid for repeated comparisons by judges. A non-converged fit retains its final estimates and residual patterns for diagnosis but withholds standard errors and inferential probabilities.

Details

For object \(k\) in set \(s\), let $$v_k=\alpha_s\beta_k+\kappa_s,$$ where \(\beta_k\) is its within-set location, \(\alpha_s>0\) is the set unit — in Humphry and Andrich's (2008) sense a unit ratio, the reference unit over the set's own, so a value above one means the finer natural unit — and \(\kappa_s\) is the set origin. A comparison in panel \(g\) has logit $$\phi_g(\beta_a-\beta_b)$$ for objects in the same set, and $$\phi_g(v_a-v_b)$$ for objects in different sets. Cross-set comparisons identify the common scale. The first set fixes \(\alpha=1\) and \(\kappa=0\); panel units have geometric mean one.

Estimation has two stages. Within-set comparisons estimate object locations and panel-unit ratios. Weighted least squares reconciles the ratios over the panel-by-set linking graph, using each set's covariance for its precision weight. The analytic covariance of the reconciled panel units is a joint judge-cluster sandwich: influence contributions with the same judge label are aligned across sets, while disjoint judge pools have zero cross-set covariance. Cross-set comparisons then estimate the set units and origins. Unlike the person-by-item EFRM, this linking step uses only comparison outcomes and does not require a distribution of persons. The paired-comparison form is an extension of Humphry's model implemented in this package. A within-set panel-ratio fit must have a small score and negative curvature of the exact likelihood Hessian in all free directions. Failed fits do not enter the panel-unit reconciliation; the remaining sets must link all panels. The same rule applies to bootstrap refits. It checks an identified local maximum, not a global maximum. Cross-set outcomes are checked for complete and quasi-complete separation, including designs where only some comparisons become deterministic. Separated links have no finite estimate. Reaching maxit without satisfying the convergence criterion is reported as non-convergence.

The default judge bootstrap resamples judges within panels and refits both stages. The parametric bootstrap draws independent outcomes from the fitted probabilities and uses normal and chi-square reference distributions. se_method = "conditional" uses analytic stage-one errors and conditions the linking errors on stage one; it is intended for preliminary inspection. Its unit probabilities and omnibus tests are withheld because it does not propagate stage-one uncertainty. Bootstrap failures and boundary estimates are reported in notes. The total pairwise chi-square and its nominal degrees of freedom are retained as descriptive summaries. Its row-based chi-square probability is withheld because judges are the sampling units and contribute repeated comparisons.

With one set, the model contains panel units only. With one set and one panel, its likelihood and finite interior estimates reduce to btl. Boundary handling differs: btl() can set aside an undefeated or winless object and report an extrapolated location, whereas btl_efrm() treats every declared object as part of the frame design and refuses a within-set outcome separation rather than deleting or extrapolating an object. Omnibus Wald probabilities are Holm-adjusted across the panel-unit, set-unit and set-origin families. Individual estimated units form a separate Holm-adjusted follow-up family across all three parameter types. Structurally fixed reference coordinates are not hypotheses. With two panels the centring constraint makes the two reported panel units a single hypothesis: it enters that family once, and both rows report its adjusted probability. An unavailable estimated unit remains in its predeclared family; an omnibus is withheld rather than reduced when one of its requested coordinates is unavailable. Judge-bootstrap probabilities require at least six judges and 5.5 effective judges in every contributing panel. Each non-reference set also requires eight judges and eight effective judges along a supported path to the reference set. With redundant links, the path with the strongest bottleneck is used. The support is returned in unit_support; estimates remain descriptive when a probability is withheld. Fits with fewer than eight effective judges per panel or 9.5 along a set's reference path retain probabilities but report a caution. Set-unit estimates can also be attenuated when each object pair has little comparison information. In simulation, log-unit bias declined from about -0.11 with 10 repetitions per pair to less than -0.01 with 100 repetitions. A set whose within-set locations have no numerical spread has an unidentified unit: its reported unit is NA, and the conventional unit one is used only to place its objects. In contrast, a positive linking unit driven to zero by the cross-set outcomes is an unsupported boundary link and raises an error. Such boundary links are also rejected in bootstrap refits; they are never replaced by unit one.

References

Andrich, D. (1978). Relationships between the Thurstone and Rasch approaches to item scaling. Applied Psychological Measurement, 2(3), 451–462.

Bradley, R. A. and Terry, M. E. (1952). Rank analysis of incomplete block designs: I. The method of paired comparisons. Biometrika, 39, 324–345.

David, H. A. (1988). The Method of Paired Comparisons (2nd ed.). Griffin.

Humphry, S. M. (2005). Maintaining a common arbitrary unit in social measurement. PhD thesis, Murdoch University.

Humphry, S. M. (2012). Item set discrimination and the unit in the Rasch model. Journal of Applied Measurement, 13(2), 165–180.

Humphry, S. M. and Andrich, D. (2008). Understanding the unit in the Rasch model. Journal of Applied Measurement, 9(3), 249–264.

Luce, R. D. (1959). Individual Choice Behavior: A Theoretical Analysis. Wiley.

Thurstone, L. L. (1927). A law of comparative judgment. Psychological Review, 34, 273–286.

Examples

# \donttest{
d <- simulate_btl_efrm(n_objects_per_set = 6, n_sets = 2, n_panels = 2,
                       set_units = c(1, 1.4), set_origins = c(0, 0.8),
                       seed = 1)
fit <- btl_efrm(d, "object_a", "object_b", winner = "winner",
                judge = "judge", panels = "panel",
                object_sets = attr(d, "truth")$object_sets,
                se_method = "conditional")
fit$alpha_table
#>   set alpha se_log_alpha t df p p_adj significant
#>  set1 1.000                                      
#>  set2 1.466        0.081                         
# }