# btm: Extended Bradley-Terry Model In alexanderrobitzsch/sirt: Supplementary Item Response Theory Models

## Description

The function btm estimates an extended Bradley-Terry model (Hunter, 2004; see Details). Parameter estimation uses a bias corrected joint maximum likelihood estimation method based on \varepsilon-adjustment (see Bertoli-Barsotti, Lando & Punzo, 2014). See Details for the algorithm.

The function btm_sim simulated data from the extended Bradley-Terry model.

## Usage

  1 2 3 4 5 6 7 8 9 10 btm(data, judge=NULL, ignore.ties=FALSE, fix.eta=NULL, fix.delta=NULL, fix.theta=NULL, maxiter=100, conv=1e-04, eps=0.3, wgt.ties=.5) ## S3 method for class 'btm' summary(object, file=NULL, digits=4,...) ## S3 method for class 'btm' predict(object, data=NULL, ...) btm_sim(theta, eta=0, delta=-99, repeated=FALSE) 

## Arguments

 data Data frame with three columns. The first two columns contain labels from the units in the pair comparison. The third column contains the result of the comparison. "1" means that the first units wins, "0" means that the second unit wins and "0.5" means a draw (a tie). judge Optional vector of judge identifiers (if multiple judges are available) ignore.ties Logical indicating whether ties should be ignored. fix.eta Numeric value for a fixed η value fix.delta Numeric value for a fixed δ value fix.theta A vector with entries for fixed theta values. maxiter Maximum number of iterations conv Convergence criterion eps The \varepsilon parameter for the \varepsilon-adjustment method (see Bertoli-Barsotti, Lando & Punzo, 2014) which reduces bias in ability estimates. In case of \varepsilon=0, persons with extreme scores are removed from the pairwise comparison. wgt.ties Weighting parameter for ties, see formula in Details. The default is .5 object Object of class btm file Optional file name for sinking the summary into digits Number of digits after decimal to print ... Further arguments to be passed. theta Vector of abilities eta Value of η parameter delta Value of δ parameter repeated Logical indicating whether repeated ratings of dyads (for home advantage effect) should be simulated

## Details

The extended Bradley-Terry model for the comparison of individuals i and j is defined as

P(X_{ij}=1 ) \propto \exp( η + θ_i )

P(X_{ij}=0 ) \propto \exp( θ_j )

P(X_{ij}=0.5) \propto \exp( δ + w_T ( η + θ_i +θ_j ) )

The parameters θ_i denote the abilities, δ is the tendency of the occurrence of ties and η is the home-advantage effect. The weighting parameter w_T governs the importance of ties and can be chosen in the argument wgt.ties.

A joint maximum likelihood (JML) estimation is applied for simulataneous estimation of η, δ and all θ_i parameters. In the Rasch model, it was shown that JML can result in biased parameter estimates. The \varepsilon-adjustment approach has been proposed to reduce the bias in parameter estimates (Bertoli-Bersotti, Lando & Punzo, 2014). This estimation approach is adapted to the Bradley-Terry model in the btm function. To this end, the likelihood function is modified for the purpose of bias reduction. It can be easily shown that there exist sufficient statistics for η, δ and all θ_i parameters. In the \varepsilon-adjustment approach, the sufficient statistic for the θ_i parameter is modified. In JML estimation of the Bradley-Terry model, S_i=∑_{j \ne i} ( x_{ij} + x_{ji} ) is a sufficient statistic for θ_i. Let M_i the maximum score for person i which is the number of x_{ij} terms appearing in S_i. In the \varepsilon-adjustment approach, the sufficient statistic S_i is modified to

S_{i, \varepsilon}=\varepsilon + \frac{M_i - 2 \varepsilon}{M_i} S_i

and S_{i, \varepsilon} instead of S_{i} is used in JML estimation. Hence, original scores S_i are linearly transformed for all persons i.

## Value

List with following entries

 pars Parameter summary for η and δ effects Parameter estimates for θ and outfit and infit statistics summary.effects Summary of θ parameter estimates mle.rel MLE reliability, also known as separation reliability sepG Separation index G probs Estimated probabilities data Used dataset with integer identifiers fit_judges Fit statistics (outfit and infit) for judges if judge is provided. In addition, average agreement of the rating with the mode of the ratings is calculated for each judge (at least three ratings per dyad has to be available for computing the agreement). residuals Unstandardized and standardized residuals for each observation

## References

Bertoli-Barsotti, L., Lando, T., & Punzo, A. (2014). Estimating a Rasch Model via fuzzy empirical probability functions. In D. Vicari, A. Okada, G. Ragozini & C. Weihs (Eds.). Analysis and Modeling of Complex Data in Behavioral and Social Sciences. Springer. doi: 10.1007/978-3-319-06692-9_4

Hunter, D. R. (2004). MM algorithms for generalized Bradley-Terry models. Annals of Statistics, 32, 384-406. doi: 10.1214/aos/1079120141

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 ############################################################################# # EXAMPLE 1: Bradley-Terry model | data.pw01 ############################################################################# data(data.pw01) dat <- data.pw01 dat <- dat[, c("home_team", "away_team", "result") ] # recode results according to needed input dat$result[ dat$result==0 ] <- 1/2 # code for ties dat$result[ dat$result==2 ] <- 0 # code for victory of away team #******************** # Model 1: Estimation with ties and home advantage mod1 <- sirt::btm( dat) summary(mod1) ## Not run: #*** Model 2: Estimation with ties, no epsilon adjustment mod2 <- sirt::btm( dat, eps=0) summary(mod2) #*** Model 3: Estimation with ties, no epsilon adjustment, weight for ties of .333 which # corresponds to the rule of 3 points for a victory and 1 point of a draw in football mod3 <- sirt::btm( dat, eps=0, wgt.ties=1/3) summary(mod3) #*** Model 4: Some fixed abilities fix.theta <- c("Anhalt Dessau"=-1 ) mod4 <- sirt::btm( dat, eps=0, fix.theta=fix.theta) summary(mod4) #*** Model 5: Ignoring ties, no home advantage effect mod5 <- sirt::btm( dat, ignore.ties=TRUE, fix.eta=0) summary(mod5) #*** Model 6: Ignoring ties, no home advantage effect (JML approach and eps=0) mod6 <- sirt::btm( dat, ignore.ties=TRUE, fix.eta=0, eps=0) summary(mod5) ############################################################################# # EXAMPLE 2: Venice chess data ############################################################################# # See http://www.rasch.org/rmt/rmt113o.htm # Linacre, J. M. (1997). Paired Comparisons with Standard Rasch Software. # Rasch Measurement Transactions, 11:3, 584-585. # dataset with chess games -> "D" denotes a draw (tie) chessdata <- scan( what="character") 1D.0..1...1....1.....1......D.......D........1.........1.......... Browne 0.1.D..0...1....1.....1......D.......1........D.........1......... Mariotti .D0..0..1...D....D.....1......1.......1........1.........D........ Tatai ...1D1...D...D....1.....D......D.......D........1.........0....... Hort ......010D....D....D.....1......D.......1........1.........D...... Kavalek ..........00DDD.....D.....D......D.......1........D.........1..... Damjanovic ...............00D0DD......D......1.......1........1.........0.... Gligoric .....................000D0DD.......D.......1........D.........1... Radulov ............................DD0DDD0D........0........0.........1.. Bobotsov ....................................D00D00001.........1.........1. Cosulich .............................................0D000D0D10..........1 Westerinen .......................................................00D1D010000 Zichichi L <- length(chessdata) / 2 games <- matrix( chessdata, nrow=L, ncol=2, byrow=TRUE ) G <- nchar(games[1,1]) # create matrix with results results <- matrix( NA, nrow=G, ncol=3 ) for (gg in 1:G){ games.gg <- substring( games[,1], gg, gg ) ind.gg <- which( games.gg !="." ) results[gg, 1:2 ] <- games[ ind.gg, 2] results[gg, 3 ] <- games.gg[ ind.gg[1] ] } results <- as.data.frame(results) results[,3] <- paste(results[,3] ) results[ results[,3]=="D", 3] <- 1/2 results[,3] <- as.numeric( results[,3] ) # fit model ignoring draws mod1 <- sirt::btm( results, ignore.ties=TRUE, fix.eta=0, eps=0 ) summary(mod1) # fit model with draws mod2 <- sirt::btm( results, fix.eta=0, eps=0 ) summary(mod2) ############################################################################# # EXAMPLE 3: Simulated data from the Bradley-Terry model ############################################################################# set.seed(9098) N <- 22 theta <- seq(2,-2, len=N) #** simulate and estimate data without repeated dyads dat1 <- sirt::btm_sim(theta=theta) mod1 <- sirt::btm( dat1, ignore.ties=TRUE, fix.delta=-99, fix.eta=0) summary(mod1) #*** simulate data with home advantage effect and ties dat2 <- sirt::btm_sim(theta=theta, eta=.8, delta=-.6, repeated=TRUE) mod2 <- sirt::btm(dat2) summary(mod2) ############################################################################# # EXAMPLE 4: Estimating the Bradley-Terry model with multiple judges ############################################################################# #*** simulating data with multiple judges set.seed(987) N <- 26 # number of objects to be rated theta <- seq(2,-2, len=N) s1 <- stats::sd(theta) dat <- NULL # judge discriminations which define tendency to provide reliable ratings discrim <- c( rep(.9,10), rep(.5,2), rep(0,2) ) #=> last four raters provide less reliable ratings RR <- length(discrim) for (rr in 1:RR){ theta1 <- discrim[rr]*theta + stats::rnorm(N, mean=0, sd=s1*sqrt(1-discrim[rr])) dat1 <- sirt::btm_sim(theta1) dat1\$judge <- rr dat <- rbind(dat, dat1) } #** estimate the Bradley-Terry model and compute judge-specific fit statistics mod <- sirt::btm( dat[,1:3], judge=paste0("J",100+dat[,4]), fix.eta=0, ignore.ties=TRUE) summary(mod) ## End(Not run)