Nothing
## Get the legacy implementation
source_files <- dir(system.file("PlackettLuce0", package = "PlackettLuce"),
full.names = TRUE)
## N.B. fitted0 requires tibble but unused in tests
for (file0 in source_files) source(file0)
coef_tol <- 1e-06
loglik_tol <- 1e-07
## Extractor for the log-likelihood of poisson gnm's adjusting for the -mu part
## which is fixed due to the parameter space restriction to match row totals
logLik_poisson.gnm <- function(x) {
n <- nlevels(x$eliminate)
ll <- logLik(x) + n
attr(ll, "df") <- attr(ll, "df") - n
ll
}
## Weakly connected network
X <- matrix(c(1, 2, 0, 0,
2, 1, 3, 0,
0, 0, 1, 2,
0, 0, 2, 1), ncol = 4, byrow = TRUE)
X <- as.rankings(X)
if (require(Matrix)){
model0 <- PlackettLuce0(rankings = X, network = "pseudodata")
model1 <- PlackettLuce(rankings = X, npseudo = 1)
test_that("coef match legacy code [weakly connected network]", {
# coefficients
expect_equal(as.vector(coef(model0)),
as.vector(coef(model1)), tolerance = coef_tol)
})
test_that("logLik matches legacy code [weakly connected network]", {
# log-likelihood
expect_equal(logLik(model0), logLik(model1), tolerance = loglik_tol)
})
}
G <- group(X, c(1, 1, 2, 2))
model2 <- PlackettLuce(rankings = G, npseudo = 1)
test_that("pseudodata works with grouped_rankings [weakly connected network]", {
expect_equal(coef(model1), coef(model2), tolerance = coef_tol)
expect_equal(logLik(model1), logLik(model2), tolerance = loglik_tol)
})
model3 <- PlackettLuce(rankings = G, npseudo = 0.5)
if (require(gnm) & require(sandwich)){
## add pseudodata
N <- ncol(X)
X2 <- cbind(X, "NULL" = 0)
pseudo <- matrix(0, nrow = 2*N, ncol = N + 1)
pseudo[, N + 1] <- 1:2
pseudo[cbind(seq_len(nrow(pseudo)),
rep(seq_len(N), each = 2))] <- 2:1
X2 <- rbind(pseudo, X2)
w <- c(rep.int(0.5, nrow(pseudo)), rep.int(1, nrow(X2)))
dat <- PlackettLuce:::poisson_rankings(X2, weights = w, aggregate = FALSE,
as.data.frame = TRUE)
## fit log-linear model with added pseudodata
model4 <- gnm(y ~ -1 + X, family = poisson, eliminate = z, data = dat,
constrain = 1, weights = w)
test_that("non-integer pseudo data works [weakly connected network]",
{
# coef
expect_equal(as.vector(coef(model3)),
as.vector(parameters(model4)[-(N + 1)]),
tolerance = coef_tol)
# likelihood contributions
keep <- !dat$z %in% seq_len(2*N)
expect_equal(unname(colSums(estfun(model3))),
unname(colSums(estfun(model4)[keep, - N])),
tolerance = loglik_tol*10)
# rank
expect_equal(model3$rank,
model4$rank - nlevels(dat$z) - 1)
# df.residual
# rank
expect_equal(model3$df.residual,
sum(keep) - 2*N)
})
}
model5 <- PlackettLuce(rankings = G, npseudo = 0.5, method = "BFGS",
control = list(reltol = 1e-10))
test_that("pseudo data works with BFGS [weakly connected network]",
{
# coef
expect_equal(coef(model3), coef(model5),
tolerance = coef_tol, ignore_attr = TRUE)
# log-likelihood
expect_equal(logLik(model3), logLik(model5),
tolerance = loglik_tol)
})
model6 <- PlackettLuce(rankings = G, npseudo = 0.5, method = "BFGS",
control = list(reltol = 1e-10))
test_that("pseudo data works with L-BFGS [weakly connected network]",
{
# coef
expect_equal(coef(model3), coef(model6),
tolerance = coef_tol, ignore_attr = TRUE)
# log-likelihood
expect_equal(logLik(model3), logLik(model6),
tolerance = loglik_tol)
})
## simple BT model
R <- matrix(c(1, 2, 0, 0,
2, 0, 1, 0,
1, 0, 0, 2,
2, 1, 0, 0,
0, 1, 2, 0,
0, 0, 2, 0), byrow = TRUE, ncol = 4,
dimnames = list(NULL, letters[1:4]))
test_that("disconnected network causes error [one always loses]",
{
# error for discinnected network
expect_error(mod <- PlackettLuce(R, npseudo = 0))
# no error for connected subset
expect_error(mod <- PlackettLuce(R[, 1:3], npseudo = 0), NA)
})
test_that("disconnected network works with pseudodata [one always loses]",
{
expect_error(mod <- PlackettLuce(R), NA)
})
# weakly connected clusters
X <- matrix(c(1, 2, 0, 0,
2, 1, 3, 0,
0, 0, 1, 2,
0, 0, 2, 1), ncol = 4, byrow = TRUE)
R <- as.rankings(X)
test_that("disconnected network causes error [weakly connected clusters]",
{
expect_error(mod <- PlackettLuce(R, npseudo = 0))
})
# disconnected clusters
X <- matrix(c(1, 2, 0, 0,
2, 1, 0, 0,
0, 0, 1, 2,
0, 0, 2, 1), ncol = 4, byrow = TRUE)
R <- as.rankings(X)
test_that("disconnected network causes error [disconnected clusters]",
{
expect_error(mod <- PlackettLuce(R, npseudo = 0))
})
test_that("disconnected network works with pseudodata [disconnected clusters]",
{
expect_error(mod <- PlackettLuce(R), NA)
})
# two weakly connected items:
# item 1 always loses; item 4 only wins against item 1
X <- matrix(c(4, 1, 2, 3,
0, 2, 1, 3), nr = 2, byrow = TRUE)
R <- as.rankings(X)
test_that("disconnected network causes error [weakly connected items]",
{
expect_error(mod <- PlackettLuce(R, npseudo = 0))
})
test_that("disconnected network works with pseudodata [weakly connected items]",
{
expect_error(mod <- PlackettLuce(R), NA)
})
# item 1 always wins; item 4 always loses
X <- matrix(c(1, 2, 3, 4,
1, 3, 2, 4), nr = 2, byrow = TRUE)
R <- as.rankings(X)
test_that("disconnected network causes error [1 wins; 4 loses]",
{
expect_error(mod <- PlackettLuce(R, npseudo = 0))
})
test_that("disconnected network works with pseudodata [1 wins; 4 loses]",
{
expect_error(mod <- PlackettLuce(R), NA)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.