| hyper3 {hyper2} | R Documentation |
Weighted probability vectors: hyper3 objects
Description
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 p_1,p_2 play chess where we quantify the first-mover
advantage with a term \lambda. If p_1 plays
white a+b times with a wins and b losses, and
plays black c+d times with c wins and d
losses, then a sensible likelihood function might be
\left(\frac{\lambda p_1}{\lambda p_1 + p_2}\right)^{a}
\left(\frac{p_2 }{\lambda p_1 + p_2}\right)^{b}
\left(\frac{p_1 }{p_1 + \lambda p_2}\right)^{c}
\left(\frac{\lambda p_2}{p_1 + \lambda p_2}\right)^{d}
If a=1,b=2,c=3,d=4 and \lambda=1.3 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
\left(w_1p_1+\cdots+w_rp_r\right)^{\alpha}; the
complete object would be
\mathcal{L}\left(p_1,\ldots,p_n\right)=
\prod_{j=1}^N\left(\sum_{i=1}^n
w_{ij}p_i\right)^{\alpha_i}
where we understand that p_n=1-\sum_{i=1}^{n-1}p_i;
many of the weights might be zero. We see that the weights
w_{ij} may be arranged as a matrix and this form is taken
by function hyper3_m().
Usage
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)
Arguments
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 |
Details
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 ahyper3object.Function
hyper3_nv()takes a list of named vectors and returns ahyper3object.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-friendlyloglik()instead, which dispatches toevaluate3().Function
maxp3()is a placeholder (it is not yet written). But the intention is that it will maximize the log-likelihood of ahyper3object over the Bradley Terry strengths and any weights given. This might not be possible as envisaged right now; I present some thoughts ininst/kka.Rmd.Function
list2nv()converts a list of character vectors into a named vector suitable for use as argumenteof functioncheering3(). It is used ininst/global_liveability_ranking.Rmd.Function
as.namedvectorlist()takes ahyper3object 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, sosetweight(H,c("a","b"),88:89)sets the weight ofato 88 andbto 89. Replacement methods are defined, so “H["a"] <- as.weight(3)” will set the weight of every occurrence of playerato 3. IfHis ahyper2object, it will be coerced tohyper3.
Value
Generally return or deal with hyper3 objects
Note
Functionality for hyper3 objects is generally indicated by adding
a “3” to function names, eg gradient() goes to
gradient3().
Author(s)
Robin K. S. Hankin
See Also
Examples
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(1.2) # "a" has some disadvantage in H1
H1[c("b","c")] <- as.weight(2:3) # "b" and "c" have some advantage in H1
H2[c("c","d")] <- as.weight(1.5) # "c" and "d" have some advantage in H2
H1+H2