Nothing
context("kernel knn with distance matrix")
#=================
# Error handling
#=================
testthat::test_that("it returns an error if the input distance object is not of type matrix", {
tmp_df = as.data.frame(DIST_mat)
testthat::expect_error(distMat.KernelKnn(tmp_df, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T))
})
testthat::test_that("it returns an error if the input distance matrix is not square", {
testthat::expect_error(distMat.KernelKnn(DIST_mat[, -ncol(DIST_mat)], TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T))
})
testthat::test_that("it returns an error if the diagonal of the distance matrix is other than 0's or NA's", {
TMP_DIAG = DIST_mat
diag(TMP_DIAG) = -1
testthat::expect_error(distMat.KernelKnn(TMP_DIAG, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T))
})
testthat::test_that("it returns an error if the TEST_indices parameter is not of type numeric or integer", {
invalid_tst_idx = letters[1:100]
testthat::expect_error(distMat.KernelKnn(DIST_mat, TEST_indices = invalid_tst_idx, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T))
})
testthat::test_that("it returns an error if the maximum index of the TEST_indices parameter is greater than the rows of the distance matrix", {
invalid_tst_idx = 1:(nrow(DIST_mat) + 10)
invalid_tst_idx = (nrow(DIST_mat)-100):length(invalid_tst_idx)
testthat::expect_error(distMat.KernelKnn(DIST_mat, TEST_indices = invalid_tst_idx, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T))
})
testthat::test_that("it returns an error if k is NULL", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = NULL, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if k is a character", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = "invalid", h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if k is greater or equal to the number of rows of the distance matrix", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = nrow(DIST_mat), h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if k is less than 1", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = -1, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns a warning if k is a float", {
testthat::expect_warning( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 1.5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if h = 0", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 0.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if y is NULL", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y = NULL, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if y is not numeric", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y = list(y), k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if regression = F and the Levels = NULL", {
testthat::expect_error( distMat.KernelKnn(DIST_mat_class, TEST_indices = NULL, as.numeric(y1_class_ext), k = 5, h = 1.0, weights_function = NULL, regression = F, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if regression = F and there are unique labels less than 1", {
testthat::expect_error( distMat.KernelKnn(DIST_mat_class, TEST_indices = NULL, as.numeric(y1_class_ext) - 1, k = 5, h = 1.0, weights_function = NULL, regression = F, threads = 1, extrema = F, Levels = unique(as.numeric(y1_class_ext)), minimize = T) )
})
testthat::test_that("it returns an error if missing values are present in the data", {
tmp_dat = DIST_mat
tmp_dat[2,1] = NA
testthat::expect_error( distMat.KernelKnn(tmp_dat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if missing values are present in the response variable", {
tmp_dat = y
tmp_dat[1] = NA
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, tmp_dat, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if the length of y is not equal to the number of rows of the distance matrix", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y[1:100], k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if k is less than 3 and extrema = TRUE", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 3, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = T, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns an error if the minimize parameter is not a boolean", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = 'T') )
})
testthat::test_that("it returns error if the weights function is invalid for regression = T, if TEST_indices is NULL", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = list(), regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns error if the weights function is invalid for regression = F, if TEST_indices is NULL", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = matrix(,0,0), regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
testthat::test_that("it returns error if the weights function is invalid for regression = F, TEST_indices is NOT NULL", {
testthat::expect_error(distMat.KernelKnn(DIST_mat_class, TEST_indices = 1:100, as.numeric(y1_class_ext), k = 5, h = 1.0, weights_function = data.frame(matrix(,0,0)), regression = F, threads = 1, extrema = F, Levels = unique(as.numeric(y1_class_ext)), minimize = T))
})
testthat::test_that("it returns error if the weights function is invalid for regression = T, TEST_indices is NOT NULL", {
testthat::expect_error( distMat.KernelKnn(DIST_mat, TEST_indices = 1:100, y, k = 5, h = 1.0, weights_function = as.factor(1:10), regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T) )
})
#=====================
# testing of KernelKnn
#=====================
testthat::test_that("if TEST_indices = NULL, if regression = T the function returns the correct output", {
res = distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T)
testthat::expect_true(length(res) == nrow(DIST_mat))
})
testthat::test_that("if TEST_indices = NULL, if regression = T, if extrema = T, the function returns the correct output", {
res = distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = T, Levels = NULL, minimize = T)
testthat::expect_true(length(res) == nrow(DIST_mat))
})
testthat::test_that("if TEST_indices = NULL, if regression = T, if the diagonal of the distance matrix is filled with NA's the function returns the correct output", {
tmp_dist = DIST_mat
diag(tmp_dist) = NA
res = distMat.KernelKnn(tmp_dist, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T)
testthat::expect_true(length(res) == nrow(tmp_dist))
})
testthat::test_that("if TEST_indices is not NULL, if regression = T the function returns the correct output", {
tmp_idx = (nrow(DIST_mat) - 100): nrow(DIST_mat)
res = distMat.KernelKnn(DIST_mat, TEST_indices = tmp_idx, y, k = 5, h = 1.0, weights_function = NULL, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T)
testthat::expect_true(length(res) == length(tmp_idx))
})
testthat::test_that("using either a kernel or a user-defined-kernel-function (here in both cases a 'uniform' kernel), IF regression = T, returns the same result", {
res_kernel = distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = 'uniform', regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T)
uniform = function(W) {
W = (1/2) * abs(W)
W = W / rowSums(W)
return(W)
}
res_kernel_function = distMat.KernelKnn(DIST_mat, TEST_indices = NULL, y, k = 5, h = 1.0, weights_function = uniform, regression = T, threads = 1, extrema = F, Levels = NULL, minimize = T)
df = data.frame(first_case = res_kernel, sec_case = res_kernel_function)
df$difference_of_results = round(df$first_case - df$sec_case, 3) # difference of results
testthat::expect_true(sum(df$difference_of_results) == 0.0)
})
testthat::test_that("using either a kernel or a user-defined-kernel-function (here in both cases a 'uniform' kernel) returns the same result, IF regression = F, wenn TEST_indices is not NULL", {
idxs = (nrow(DIST_mat_class) - 100): nrow(DIST_mat_class)
res_kernel = distMat.KernelKnn(DIST_mat_class, TEST_indices = idxs, as.numeric(y1_class_ext), k = 5, h = 1.0, weights_function = 'uniform', regression = F, threads = 1, extrema = F, Levels = unique(as.numeric(y1_class_ext)), minimize = T)
uniform = function(W) {
W = (1/2) * abs(W)
W = W / rowSums(W)
return(W)
}
res_kernel_function = distMat.KernelKnn(DIST_mat_class, TEST_indices = idxs, as.numeric(y1_class_ext), k = 5, h = 1.0, weights_function = uniform, regression = F, threads = 1, extrema = F, Levels = unique(as.numeric(y1_class_ext)), minimize = T)
df_col1 = data.frame(first_case = res_kernel[, 1], sec_case = res_kernel_function[, 1])
df_col2 = data.frame(first_case = res_kernel[, 2], sec_case = res_kernel_function[, 2])
df_col1$difference_of_results = round(df_col1$first_case - df_col1$sec_case, 3) # difference of results in 'col1'
df_col2$difference_of_results = round(df_col2$first_case - df_col2$sec_case, 3) # difference of results in 'col2'
testthat::expect_true(sum(df_col1$difference_of_results) == 0.0 && sum(df_col2$difference_of_results) == 0.0)
})
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.