To cite the hyper2 package in publications, please use Hankin (2017). Here we consider the rego dataset drawn from the European Union, as analysed in the rSRD package (Staudacher et al. 2026):

jj  <- as.matrix(read.table("rego.txt",header=TRUE))[1:16,]
jj[1:4, 1:6]
##         Botenga Bompard Ernst Chahim Pereira Buzek
## Budget       12      20    17      0       7    17
## Climate     137     293   232     43      44   136
## Economy      48      79    46     14      14    35
## Energy      121     244   169     48      68   204

[Row 17 refers to summary statistics defined by Sziklai et al, not used here]. Above each row is an issue and each column an author. Entries are the number of times each issue is mentioned by each author.

rego_table <- as.ordertable(apply(jj, 2, rank, ties.method="first"))
rego_table[1:4,1:6]
## An ordertable:
##         Botenga Bompard Ernst Chahim Pereira Buzek
## Budget        1       1     1      1       1     1
## Climate       4       4     4      3       3     3
## Economy       2       2     2      2       2     2
## Energy        3       3     3      4       4     4
rego <- suppfun(rego_table)
rego_maxp <- maxp(rego)
rego_maxp
##         Budget        Climate        Economy         Energy     Enterprise         Future 
##      0.3468698      0.0032465      0.0506125      0.0041650      0.0124526      0.0640478 
##      Geography         Health       Industry Infrastructure         Labour         Mining 
##      0.0343817      0.0213628      0.0136673      0.0538867      0.0483253      0.0189818 
##           Mode        Science       Security         Social 
##      0.1058152      0.0993692      0.0833037      0.0395122
plot(rego_maxp)

plot(log(rego_maxp))

plot(sort(log(rego_maxp)))

pie(rego_maxp)

dotchart(rego_maxp, pch=16)

dotchart(log(rego_maxp), pch=16)

OK now, conditional on rego_maxp, I will calculate the probability [actually, log-likelihood] of observing each of the judges’ order statistics:

getcol <- function(i){
  ordervec2supp(setNames(c(rego_table[,i]),rownames(rego_table)))
}
getcol(1)
## log( Budget * (Budget + Climate + Economy + Energy + Enterprise + Future + Geography +
## Health + Industry + Infrastructure + Labour + Mining + Mode + Science + Security +
## Social)^-1 * (Climate + Economy + Energy + Enterprise + Future + Geography + Health +
## Industry + Infrastructure + Labour + Mining + Mode + Science + Security + Social)^-1 *
## (Climate + Economy + Energy + Enterprise + Future + Geography + Health + Industry +
## Labour + Mining + Mode + Science + Security + Social)^-1 * (Climate + Economy + Energy +
## Enterprise + Geography + Health + Industry + Labour + Mining + Mode + Science + Security
## + Social)^-1 * (Climate + Economy + Energy + Enterprise + Geography + Health + Industry +
## Labour + Mining + Mode + Science + Social)^-1 * (Climate + Economy + Energy + Enterprise
## + Geography + Health + Industry + Labour + Mode + Science + Social)^-1 * (Climate +
## Economy + Energy + Enterprise + Geography + Health + Industry + Labour + Science +
## Social)^-1 * (Climate + Economy + Energy + Enterprise + Geography + Health + Industry +
## Labour + Social)^-1 * (Climate + Energy + Enterprise + Geography + Health + Industry +
## Labour + Social)^-1 * (Climate + Energy + Enterprise + Health + Industry)^-1 * (Climate +
## Energy + Enterprise + Health + Industry + Labour)^-1 * (Climate + Energy + Enterprise +
## Health + Industry + Labour + Social)^-1 * (Climate + Energy + Health)^-1 * (Climate +
## Energy + Health + Industry)^-1 * (Climate + Health)^-1 * Economy * Energy * Enterprise *
## Future * Geography * Health * Industry * Infrastructure * Labour * Mining * Mode *
## Science * Security * Social)
loglik(rego_maxp, getcol(1))
## [1] -23.297
loglik(rego_maxp, getcol(2))
## [1] -21.095
loglik(rego_maxp, getcol(3))
## [1] -22.037

We can see that the probability [actually, log-likelihood] of obtaining the observations of Botenga, Bompard, and Ernst are slightly different from one another. We can calculate this for all the politicians in one vectorized expression:

L <- sapply(seq_len(ncol(rego_table)),
    function(i){loglik(rego_maxp, getcol(i))}
    )

And plot them:

L <- L - max(L)
plot(L, pch=16)
grid()
n <- ncol(rego_table)
mypos <- rep(2,n)
mypos[1] <- 4
text(seq_len(n), L, colnames(rego_table), pos=mypos, col="gray")

Above we see that Kaljurand is a bit of an outlier. Conditional on the evaluate, his is (by far) the least likely order statistic.

We may go slightly further and use the other politicians:

fothers <- function(i){ # column i
  maxp_others <- maxp(suppfun(rego_table[,-i]))
  return(loglik(maxp_others, getcol(i)))
} 
Lothers <- sapply(seq_len(ncol(rego_table)), fothers)
plot(Lothers)

Package dataset

Following lines create rego.rda, residing in the data/ directory of the package.

save(rego, rego_maxp, rego_table, file="rego.rda")

References

Hankin, R. K. S. 2017. “Partial Rank Data with the hyper2 Package: Likelihood Functions for Generalized Bradley-Terry Models.” The R Journal 9 (2): 429–39.
Staudacher, Jochen, Balázs R. Sziklai, and Linus Olsson. 2026. rSRD: Sum of Ranking Differences Statistical Test. https://doi.org/10.32614/CRAN.package.rSRD.