####################
# Author: James Hickey
#
# Series of test to validate the GBMData objects
#
####################
##### Definition #####
context("Testing GBMData object definition:")
test_that("Constructed object has correct class", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Constructed object
expect_true("GBMData" %in% class(gbm_data(matrix(x), y, w, offset)))
})
test_that("Constructed object has correct fields", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Constructed objetc
expect_equal(names(gbm_data(matrix(x), y, w, offset)), c("x", "y", "original_data", "weights", "offset"))
})
#### Error Checking #####
context("Testing variable check")
test_that("Predictors must be in a data-frame or matrix", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Error thrown when predictors not put in matrix or data-frame
expect_error(gbm_data(x, y, w, offset))
expect_error(gbm_data(matrix(x), y, w, offset), NA)
expect_error(gbm_data(data.frame(x), y, w, offset), NA)
})
test_that("Responses must be a data-frame, matrix or vector", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Error thrown when responses not put in matrix or vector
expect_error(gbm_data(matrix(x), list(y), w, offset))
expect_error(gbm_data(matrix(x), y, w, offset), NA)
expect_error(gbm_data(matrix(x), matrix(y), w, offset), NA)
expect_error(gbm_data(matrix(x), data.frame(y), w, offset), NA)
})
test_that("Each predictor row must have a response", {
# Given correct data
N <- 1000
x <- runif(N-1)
x2 <- runif(N+1)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Error thrown as more responses than predictors and vice-versa
expect_error(gbm_data(matrix(x), y, w, offset))
expect_error(gbm_data(matrix(x2), y, w, offset))
})
test_that("Predictor variables must be ordered, numeric or categorical", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Error thrown when x is not categorical, ordered or numeric
expect_error(gbm_data(matrix(rep("A", N)), y, w, offset))
expect_error(gbm_data(data.frame(ordered(x)), y, w, offset), NA)
expect_error(gbm_data(data.frame(factor(x)), y, w, offset), NA)
expect_error(gbm_data(matrix(as.numeric(x)), y, w, offset), NA)
})
test_that("Missing values not allowed in response", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Set subset of responses to be Missing
y[sample(1:N, 100)] <- NA
# Expect error
expect_error(gbm_data(matrix(x), y, w, offset))
})
test_that("Can't have predictor with all missing values", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
w <- rexp(N)
offset <- rexp(N)
# Add in variable which is all NAs
x2 <- rep(NA, N)
# Expect error to be thrown
expect_error(gbm_data(data.frame(x, x2), y, w, offset))
})
test_that("Weights must be a vector of positive doubles", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N,1,p)
offset <- rexp(N)
expect_error(gbm_data(matrix(x), y, w=-rexp(N), offset))
})
test_that("Offset must be a vector of doubles", {
# Given correct data
N <- 1000
x <- runif(N)
p <- 0.5
y <- rbinom(N, 1, p)
w <- rexp(N)
expect_error(gbm_data(matrix(x), y, w, c(1, "A")))
expect_error(gbm_data(matrix(x), y, w, 1))
expect_error(gbm_data(matrix(x), y, w, Inf))
expect_error(gbm_data(matrix(x), y, w, NULL))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.