hyper3 | R Documentation |
hyper3
objects
Objects of class hyper3
are a generalization of hyper2
objects
that allow the brackets to contain weighted probabilities.
As a motivating example, suppose two players with Bradley-Terry strengths \mjseqnp_1,p_2 play chess where we quantify the first-mover advantage with a term \mjeqn\lambdaomitted. If \mjseqnp_1 plays white \mjseqna+b times with \mjseqna wins and \mjseqnb losses, and plays black \mjseqnc+d times with \mjseqnc wins and \mjseqnd losses, then a sensible likelihood function might be
\mjdeqn \left(\frac\lambda p_1\lambda p_1 + p_2\right)^a \left(\fracp_2 \lambda p_1 + p_2\right)^b \left(\fracp_1 p_1 + \lambda p_2\right)^c \left(\frac\lambda p_2p_1 + \lambda p_2\right)^d omitted: see PDF
If \mjseqna=1,b=2,c=3,d=4 and \mjeqn\lambda=1.3omitted appropriate package idiom might be:
H <- hyper3() H[c(p1=1.3)] %<>% inc(1) # a=1 H[c(p2=1)] %<>% inc(2) # b=2 H[c(p1=1.3,p2=1)] %<>% dec(3) # a+b=1+2=3 H[c(p1=1)] %<>% inc(3) # c=3 H[c(p2=1.3)] %<>% inc(4) # d=4 H[c(p1=1,p2=1.3)] %<>% dec(7) # c+d=3+4=7 H > log( (p1=1)^3 * (p1=1, p2=1.3)^-7 * (p1=1.3)^1 * (p1=1.3, p2=1)^-3 * (p2=1)^2 * (p2=1.3)^4)
The general form of terms of a hyper3
object would be
\mjeqn\left(w_1p_1+...+w_rp_r\right)^\alphaomitted; the
complete object would be
L\left(p_1,...,p_n\right)= \prod_j=1^N\left(\sum_i=1^n w_ijp_i\right)^\alpha_i omitted: see PDF
where we understand that \mjeqnp_n=1-\sum_i=1^n-1p_iomitted;
many of the weights might be zero. We see that the weights
\mjeqnw_ijw_ij may be arranged as a matrix and this form is taken
by function hyper3_m()
.
hyper3(B = list(), W = list(), powers = 0, pnames)
hyper3_bw(B = list(), W = list(), powers = 0, pnames)
hyper3_nv(L=list(),powers=0,pnames)
hyper3_m(M,p,stripzeros=TRUE)
B |
A list of brackets |
W |
A list of weights |
L |
A list of named vectors |
powers |
Numeric vector of powers |
pnames |
Character vector of player names |
M |
Matrix of weights, column names being player names |
p |
Vector of powers, length equal to |
stripzeros |
Boolean with default |
Function hyper3()
is the user-friendly creation method,
which dispatches to a helper function depending on its arguments.
Function hyper3_bw()
takes a list of brackets
(character vectors) and a list of weights (numeric vectors) and
returns a hyper3
object.
Function hyper3_nv()
takes a list of named vectors and
returns a hyper3
object.
Function hyper3_m()
takes a matrix with rows being the
brackets (entries are weights) and a numeric vector of powers.
Function evaluate3()
is a low-level helper function
that evaluates a log-likelihood at a point in probability space.
Don't use this: use the user-friendly loglik()
instead, which
dispatches to evaluate3()
.
Function maxp3()
is a placeholder (it is not yet
written). But the intention is that it will maximize the
log-likelihood of a hyper3
object over the Bradley Terry
strengths and any weights given. This might not be possible
as envisaged right now; I present some thoughts in
inst/kka.Rmd
.
Function list2nv()
converts a list of character vectors
into a named vector suitable for use as argument e
of
function cheering3()
. It is used in
inst/global_liveability_ranking.Rmd
.
Function as.namedvectorlist()
takes a hyper3
object and returns a disoRdered list of named vectors corresponding
to the brackets and their weights.
Function setweight()
alters the weight of every
occurrence of a set of players. It is vectorised, so
setweight(H,c("a","b"),88:89)
sets the weight of a
to
88 and b
to 89. Replacement methods are defined, so
“H["a"] <- as.weight(3)
” will set the weight of every
occurrence of player a
to 3. If H
is a hyper2
object, it will be coerced to hyper3
.
Generally return or deal with hyper3
objects
Functionality for hyper3
objects is generally indicated by adding
a “3
” to function names, eg gradient()
goes to
gradient3()
.
Robin K. S. Hankin
hyper2
hyper3(B=list("a",c("a","b"),"b"),W=list(1.2,c(1.2,1),1),powers=c(3,4,-7))
hyper3(list(c(a=1.2),c(b=1),c(a=1.2,b=1)),powers=c(3,4,-7))
## Above two objects should be identical.
## Third method, send a matrix:
M <- matrix(rpois(15,3),5,3)
colnames(M) <- letters[1:3]
hyper3(M,c(2,3,-1,-5,1)) # second argument interpreted as powers
## Standard way to generate a hyper3 object is to create an empty object
## and populate it using the replacement methods:
a <- hyper3() # default creation method [empty object]
a[c(p1=1.3)] <- 5
a[c(p2=1 )] <- 2
a[c(p1=1.3,p2=1)] <- -7
a
chess3 # representative simple hyper3 object
H1 <- rankvec_likelihood(letters[sample(6)])
H2 <- rankvec_likelihood(letters[sample(6)])
H1["a"] <- as.weight(2.1) # "a" has some advantage
H2["b"] <- as.weight(0.8) # "b" has some disadvantage
H1+H2
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.