From 2de588a0089db9c03488bd087ed0634efdb163f4 Mon Sep 17 00:00:00 2001 From: samuelsmock <smock.samuel@gmail.com> Date: Fri, 26 Jan 2024 15:44:27 +0100 Subject: [PATCH] additional unit tests for bcoeff and reasonability of results --- R/sim_all.R | 47 ++++++++++++++++++++++---- tests/testthat/Rplots.pdf | Bin 188068 -> 234011 bytes tests/testthat/test-sim_all.R | 60 ++++++++++++++++++++++++++-------- 3 files changed, 88 insertions(+), 19 deletions(-) diff --git a/R/sim_all.R b/R/sim_all.R index eda7472..4c38495 100644 --- a/R/sim_all.R +++ b/R/sim_all.R @@ -4,8 +4,8 @@ #' @param resps Number of respondents you want to simulate #' @param destype Is it a design created with ngene or with spdesign. Ngene desings should be stored as the standard .ngd output. spdesign should be the spdesign object design$design #' @param designpath The path to the folder where the designs are stored. For example "c:/myfancydec/Designs" -#' @param u A list with utility functions. The list can incorporate as many decision rule groups as you want. However, each group must be in a list in this list. If you just use one group (the normal), this group still has to be in a list in the u list. -#' @param bcoefficients List of coefficients for the utility function. List content/length can vary based on application, but item names should be in namespace: {bsq, bredkite, bdistance, bcost, bfarm2, bfarm3, bheight2, bheight3} +#' @param u A list with utility functions. The list can incorporate as many decision rule groups as you want. However, each group must be in a list in this list. If you just use one group (the normal), this group still has to be in a list in the u list. As a convention name betacoefficients starting with a lower case "b" +#' @param bcoefficients List of coefficients for the utility function. List content/length can vary based on application, but should all begin with b and be the same as those entered in the utility functions #' #' @return A list, with all information on the simulation. This list an be easily processed by the user and in the rmarkdown template. #' @export @@ -28,7 +28,7 @@ sim_all <- function(nosim=2, resps, destype="ngene", designpath, u, bcoeff){ - + ########### validate the utility function ######## if (missing(u) || !(is.list(u) && any(sapply(u, is.list)))){ stop(" 'u' must be provided and must be a list containing at least one list element.") } @@ -40,9 +40,44 @@ sim_all <- function(nosim=2, resps, destype="ngene", designpath, u, bcoeff){ if (!dir.exists(designpath)) { stop(" The folder where your designs are stored does not exist. \n Check if designpath is correctly specified") } - - - + + ########## validate the bcoeff list ################ + # Check if bcoeff is provided + if (missing(bcoeff)) { + stop("Argument 'bcoeff' is required.") + } + + # Check if bcoeff is a list + if (!is.list(bcoeff)) { + stop("Argument 'bcoeff' must be a list.") + } + + # Check if values in bcoeff are numeric + if (!all(sapply(bcoeff, is.numeric))) { + stop("Values in 'bcoeff' must be numeric.") + } + + #### check that all the coefficients in utility function have a cooresponding value in bcoeff #### + # Extract coefficients from utility function starting with "b" + coeff_names_ul <- unique(unlist(lapply(u, function(u) { + formula_strings <- unlist(u) + coef_names <- unique(unlist(lapply(formula_strings, function(f) { + # Parse the formula to extract coefficient names + all_vars <- all.vars(as.formula(f)) + coef_vars <- all_vars[grep("^b", all_vars)] + return(coef_vars) + }))) + return(coef_names) + }))) + + # Check if all utility function coefficients starting with "b" are covered in bcoeff list + missing_coeffs <- coeff_names_ul[!(coeff_names_ul %in% names(bcoeff))] + if (length(missing_coeffs) > 0) { + stop(paste("Missing coefficients in 'bcoeff':", paste(missing_coeffs, collapse = ", "), ". Perhaps there is a typo?")) + } + + ### end input validation tests ## + designfile<-list.files(designpath,full.names = T) designname <- stringr::str_remove_all(list.files(designpath,full.names = F), "(.ngd|_|.RDS)") ## Make sure designnames to not contain file ending and "_", as the may cause issues when replace diff --git a/tests/testthat/Rplots.pdf b/tests/testthat/Rplots.pdf index 808a8ac27e818a18df9efda098e22658c88f2c2f..5395fa31505edc5a9a1307ef3509f29514e401ae 100644 GIT binary patch delta 40417 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 delta 367 zcmbQegm1}S?g<v`riLaa7AEEs?L}eC#^}~)#;wsz%T7+KVgAP*tDx_kUz%5<U~Dwq zv6eZ&+T2LNKp{xM&W=mpwW7p5xFoS8Rl&waLEk;tP{G_7ED2;AnVKt@n;>`=3g)KU z&(t#C;9@d2T)wP>nUTrdX!?pyW`ALGLzs!Fc`5lxSzPAE({s9*Wu~ijF$*)9n}9g- z)1$hW1(?iDK^!wCbF=A7x|kiOn@(UB(=j%%FjX)B0fjsTE)Z>KVQge<jwxntuwA{I zS%5Xf)Y1$?i<yxT(DfjIFviT-2<SL;F>?b9F%v_}>8B?$OM_hYVj{B|uc3vRiJ1kL Ks;aBM8y5gZuv*{% diff --git a/tests/testthat/test-sim_all.R b/tests/testthat/test-sim_all.R index c1dc19e..8c7db5a 100644 --- a/tests/testthat/test-sim_all.R +++ b/tests/testthat/test-sim_all.R @@ -36,35 +36,32 @@ ul<- list(u1= list( -test_that(" u is not a list", { +test_that("u is not a list of lists", { expect_error(sim_all(nosim = nosim, resps=resps, destype = destype, - designpath = designpath, u=data.frame(u=" alp")), - "must be provided and must be a list containing ") + designpath = designpath, u=data.frame(u=" alp"), bcoeff = bcoeff), + "must be provided and must be a list containing at least one list") }) test_that("no value provided for utility", { expect_error(sim_all(nosim = nosim, resps=resps, destype = destype, - designpath = designpath), - "must be provided and must be a list containing ") + designpath = designpath, bcoeff = bcoeff), + "must be provided and must be a list containing at least one list") }) test_that("wrong designtype", { expect_error(sim_all(nosim = nosim, resps=resps, destype = "ng", - designpath = designpath, u=ul),"Invalid value for design. Please provide either 'ngene' or 'spdesign'.") + designpath = designpath, u=ul, bcoeff = bcoeff),"Invalid value for design. Please provide either 'ngene' or 'spdesign'.") }) test_that("folder does not exist", { expect_error(sim_all(nosim = nosim, resps=resps, destype = destype, - designpath = system.file("da/bullshit", package = "simulateDCE"), u=ul) + designpath = system.file("da/bullshit", package = "simulateDCE"), u=ul, bcoeff = bcoeff) , "The folder where your designs are stored does not exist.") }) - - - test_that("seed setting makes code reproducible", { set.seed(3333) bcoeff <-list(bsq=0.00, @@ -91,9 +88,6 @@ test_that("seed setting makes code reproducible", { expect_identical(result1[["summaryall"]], result2[["summaryall"]]) }) - - - test_that("No seed setting makes code results different", { result1 <- sim_all(nosim = nosim, resps = resps, destype = destype, designpath = designpath, u = ul, bcoeff = bcoeff) @@ -104,3 +98,43 @@ test_that("No seed setting makes code results different", { expect_failure(expect_identical(result1[["summaryall"]], result2[["summaryall"]])) }) + +########### Additional Tests ############## +test_that("bcoeff is provided", { + expect_error(sim_all(nosim = nosim, resps = resps, destype = destype, + designpath = designpath, u = ul)) +}) + +test_that("bcoeff contains valid values", { + expect_error(sim_all(nosim = nosim, resps = resps, destype = destype, + designpath = designpath, u = ul, bcoeff = list(bsq = "invalid"))) +}) + +test_that("bcoeff is a list", { + expect_error(sim_all(nosim = nosim, resps = resps, destype = destype, + designpath = designpath, u = ul, bcoeff = "not a list") + ) +}) + +test_that("B coefficients in the utility functions dont match those in the bcoeff list", { + expect_error(sim_all(nosim = nosim, resps=resps, destype = destype, + designpath = designpath, u = ul, bcoeff <- list(bWRONG = 0.00))) +}) + +test_that("Utility functions are valid", { + expect_no_error(eval(ul$u1$v1)) + expect_no_error(eval(ul$u1$v2)) +}) + +test_that("Function behavior matches documentation", { + expect_true(sim_all %in% names(simulateDCE:::NAMESPACE)) +}) + +test_that("Simulation results are reasonable", { + + result1 <- sim_all(nosim = nosim, resps = resps, destype = destype, designpath = designpath, u = ul, bcoeff = bcoeff) + + expect_gt(result1$est_bsq, -1) + expect_lt(result1$est_bsq, 1) + +}) -- GitLab