context("likelihood")
test_that(paste("R and Rcpp versions of cost function return same result",
"for sparse and dense matrix"),{
set.seed(1)
# Repeat the tests for a few different choices of k.
for (k in 1:4) {
# Generate a data set.
out <- simulate_count_data(10,8,k)
X <- out$X
F <- out$F
L <- out$L
Y <- as(X,"CsparseMatrix")
# Compute the loss function.
f1 <- cost(X,L,t(F),version = "R")
f2 <- cost(X,L,t(F),version = "Rcpp")
f3 <- cost(Y,L,t(F),version = "R")
f4 <- cost(Y,L,t(F),version = "Rcpp")
# The cost function calculations should all give the same result.
expect_equal(f1,f2)
expect_equal(f1,f3)
expect_equal(f1,f4)
}
})
test_that(paste("loglik_poisson_nmf gives correct result for sparse and",
"dense matrix"),{
set.seed(1)
# Repeat the tests for a few different choices of k.
for (k in 1:4) {
# Generate a data set.
out <- simulate_count_data(10,8,k)
X <- out$X
fit <- out[c("F","L")]
class(fit) <- c("poisson_nmf_fit","list")
# Compute the log-likelikhood.
f1 <- loglik_poisson_nmf_with_dpois(X,fit)
f2 <- loglik_poisson_nmf(X,fit,e = 0)
f3 <- loglik_poisson_nmf(as(X,"CsparseMatrix"),fit,e = 0)
names(f1) <- rownames(X)
# The likelihood calculations should all be the same.
expect_equal(f1,f2)
expect_equal(f1,f3)
}
})
test_that(paste("loglik_multinom_topic_model gives correct result for",
"sparse and dense matrix"),{
set.seed(1)
# Repeat the tests for a few different choices of k.
for (k in 2:4) {
# Generate a data set.
out <- simulate_count_data(10,8,k)
X <- out$X
fit <- out[c("F","L")]
class(fit) <- c("poisson_nmf_fit","list")
# Compute the log-likelikhood.
f1 <- loglik_multinom_topic_model_with_dmultinom(X,poisson2multinom(fit))
f2 <- loglik_multinom_topic_model(X,fit,e = 0)
f3 <- loglik_multinom_topic_model(as(X,"CsparseMatrix"),fit,e = 0)
# Compute the multinomial log-likelihood a different way: first
# compute the Poisson log-likelihood, then subtract out the
# likelihood for the "size factors".
f4 <- loglik_poisson_nmf(X,fit,e = 0) - loglik_size_factors(X,fit$F,fit$L)
# The likelihood calculations should all be the same.
expect_equal(f1,f2)
expect_equal(f1,f3)
expect_equal(f1,f4)
}
})
test_that(paste("deviance_poisson_topic_nmf gives correct result for sparse",
"and dense matrix"),{
set.seed(1)
# Repeat the tests for a few different choices of k.
for (k in 1:4) {
# Generate a data set.
out <- simulate_count_data(10,8,k)
X <- out$X
fit <- out[c("F","L")]
class(fit) <- c("poisson_nmf_fit","list")
# Compute the deviances.
d1 <- deviance_poisson_nmf_with_poisson(X,fit)
d2 <- deviance_poisson_nmf(X,fit,e = 0)
d3 <- deviance_poisson_nmf(as(X,"CsparseMatrix"),fit,e = 0)
# The deviance calculations should all be the same.
expect_equal(d1,d2)
expect_equal(d1,d3)
}
})
test_that("poisson_nmf_kkt gives same result for sparse and dense matrices",{
# Generate a data set.
set.seed(1)
out <- simulate_count_data(10,8,3)
X <- out$X
F <- out$F
L <- out$L
# Compute the KKT residuals, and check that they are the same.
out1 <- poisson_nmf_kkt(X,F,L)
out2 <- poisson_nmf_kkt(as(X,"CsparseMatrix"),F,L)
expect_equal(out1,out2,tolerance = 1e-15,scale = 1)
})
test_that(paste("loglik_poisson_nmf and loglik_multinom_topic_model give",
"the same result when provided with either a Poisson NMF",
"or multinomial topic model fit"),{
# Generate a data set.
set.seed(1)
out <- simulate_count_data(10,8,3)
X <- out$X
fit1 <- out[c("F","L")]
class(fit1) <- c("poisson_nmf_fit","list")
# Compute the Poisson NMF and multinomial topic model log-likelikhoods.
fit2 <- poisson2multinom(fit1)
f1 <- loglik_poisson_nmf(X,fit1,e = 0)
f2 <- loglik_poisson_nmf(X,fit2,e = 0)
f3 <- loglik_multinom_topic_model(X,fit1,e = 0)
f4 <- loglik_multinom_topic_model(X,fit2,e = 0)
# The Poisson NMF and multinomial topic model likelihood
# calculations should be the same.
expect_equal(f1,f2)
expect_equal(f3,f4)
})
test_that(paste("loglik_poisson_nmf and loglik_multinom_topic_model plus",
"size factor likelihoods are the same"),{
# Generate a data set.
set.seed(1)
out <- simulate_count_data(10,8,3)
X <- out$X
# Fit a Poisson NMF model.
capture.output(fit1 <- fit_poisson_nmf(X,k = 3,init.method = "random",
numiter = 10))
# Compute the Poisson NMF likelihoods.
f1 <- loglik_poisson_nmf(X,fit1,e = 0)
# Compute the multinomial topic model likelikhoods, and check that
# they give the same result after adding the likelihoods for the
# size factors.
fit2 <- poisson2multinom(fit1)
f2 <- loglik_multinom_topic_model(X,fit2,e = 0) +
dpois(rowSums(X),fit2$s,log = TRUE)
expect_equal(f1,f2,scale = 1,tolerance = 1e-14)
})
test_that("ldpois works for non-integer x",{
set.seed(1)
n <- 100
lambda <- abs(4*rnorm(n))
x <- rpois(n,lambda)
y1 <- ldpois(x,lambda)
y2 <- ldpois(x + 0.001,lambda)
expect_equal(y1,y2,scale = 1,tolerance = 0.01)
})
test_that("ldpois gives same result as dpois for integer x",{
set.seed(1)
n <- 100
lambda <- abs(4*rnorm(n))
x <- rpois(n,lambda)
y1 <- dpois(x,lambda,log = TRUE)
y2 <- ldpois(x,lambda)
expect_equal(y1,y2,scale = 1,tolerance = 1e-15)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.