From d7509d4eff053651b1f6c618657a73e0d409e521 Mon Sep 17 00:00:00 2001 From: Julian Sagebiel <julian.sagebiel@idiv.de> Date: Wed, 6 Mar 2024 16:42:33 +0100 Subject: [PATCH] added functionality fpr readdesign of spdesign objects. --- DESCRIPTION | 2 +- NAMESPACE | 1 + R/readdesign.R | 46 +++++++++++++++--------- R/spdesign_utils.R | 30 ++++++++++++++++ inst/extdata/ValuGaps/des1.RDS | Bin 0 -> 992 bytes inst/extdata/testfiles/nousefullist.RDS | Bin 0 -> 120 bytes man/extract_b_values.Rd | 22 ++++++++++++ tests/testthat/test-readdesign.R | 25 +++++++++++++ vignettes/SE_Agri-vignette.Rmd | 2 +- 9 files changed, 110 insertions(+), 18 deletions(-) create mode 100644 R/spdesign_utils.R create mode 100644 inst/extdata/ValuGaps/des1.RDS create mode 100644 inst/extdata/testfiles/nousefullist.RDS create mode 100644 man/extract_b_values.Rd diff --git a/DESCRIPTION b/DESCRIPTION index fd09377..8c5f730 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: simulateDCE Title: Simulate data for discrete choice experiments -Version: 0.1.1 +Version: 0.1.2 Authors@R: person(given = "Julian", family = "Sagebiel", email = "julian.sagebiel@idiv.de", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-0253-6875")) diff --git a/NAMESPACE b/NAMESPACE index e08595a..3c8cce7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ export("%>%") export(download_and_extract_zip) +export(extract_b_values) export(readdesign) export(sim_all) export(sim_choice) diff --git a/R/readdesign.R b/R/readdesign.R index 781b964..d512e32 100644 --- a/R/readdesign.R +++ b/R/readdesign.R @@ -22,21 +22,35 @@ readdesign <- function(design = designfile, designtype = destype) { design <- switch(designtype, - "ngene" = suppressWarnings(readr::read_delim(design, - delim = "\t", - escape_double = FALSE, - trim_ws = TRUE, - col_select = c(-Design, -tidyr::starts_with("...")), - name_repair = "universal", show_col_types = FALSE ,guess_max = Inf - )) %>% - dplyr::filter(!is.na(Choice.situation)), - "spdesign" = as.data.frame(readRDS(design)) %>% - dplyr::mutate(Choice.situation = 1:dplyr::n()) %>% - dplyr::rename_with(~ stringr::str_replace(., pattern = "_", "\\."), tidyr::everything()) %>% - dplyr::rename_with(~ dplyr::case_when( - . == "block" ~ "Block", - TRUE ~ . - ), tidyr::everything()), - stop("Invalid value for design. Please provide either 'ngene' or 'spdesign'.") + "ngene" = suppressWarnings(readr::read_delim(design, + delim = "\t", + escape_double = FALSE, + trim_ws = TRUE, + col_select = c(-Design, -tidyr::starts_with("...")), + name_repair = "universal", show_col_types = FALSE ,guess_max = Inf + )) %>% + dplyr::filter(!is.na(Choice.situation)), + "spdesign" = { + designf <- readRDS(design) + if (is.list(designf) & !is.data.frame(designf)){ + if (!"design" %in% names(designf)) { + stop("The 'design' list element is missing. Make sure to provide a proper spdesign object.") + } + designf<-designf[["design"]] + } + as.data.frame(designf) %>% + dplyr::mutate(Choice.situation = 1:dplyr::n()) %>% + dplyr::rename_with(~ stringr::str_replace(., pattern = "_", "\\."), tidyr::everything()) %>% + dplyr::rename_with(~ dplyr::case_when( + . == "block" ~ "Block", + TRUE ~ . + ), tidyr::everything()) + + } + , + stop("Invalid value for design. Please provide either 'ngene' or 'spdesign'.") ) + } + + diff --git a/R/spdesign_utils.R b/R/spdesign_utils.R new file mode 100644 index 0000000..a13fd76 --- /dev/null +++ b/R/spdesign_utils.R @@ -0,0 +1,30 @@ +#' Title Extracts beta values from an spdesign object +#' +#' @param input_list the list where the parameters are stored. Usually this is `design$utility` +#' +#' @return A named list with parameter values which can be used in `sim_all` +#' @export +#' +#' @examples \dontrun{ +#' extract_b_values(design$utility) +#' } +extract_b_values <- function(input_list) { + extract_b_value <- function(input_string) { + + matches <- gregexpr("b_\\w+\\[(-?\\d+\\.?\\d*)\\]", input_string) + matches <- regmatches(input_string, matches) + matches <- unlist(matches) + + + names <- gsub("\\[.*", "", matches) + + values <- gsub(".*\\[(-?\\d+\\.?\\d*)\\]", "\\1", matches) + + result <- stats::setNames(as.numeric(values), names) + return(result) + } + + b_values <- unlist(lapply(input_list, extract_b_value)) + b_values<- stats::setNames(b_values,gsub("alt\\d+\\.","",names(b_values))) + return(as.list(b_values)) +} diff --git a/inst/extdata/ValuGaps/des1.RDS b/inst/extdata/ValuGaps/des1.RDS new file mode 100644 index 0000000000000000000000000000000000000000..f6c78a8867d7a9e284744752684f0f9832d95ad6 GIT binary patch literal 992 zcmV<610Vb!iwFP!000001I<=TXw*O$p6+hDtN3Vb(W;=adZ?O)O*Sh%s8c=ox>S5X zQR=$QW;L>pHc9LApdvmFS|6w=)K{ybf*>AjK^m=C5foGusUp4(7A#oBgNNce$<Cz7 z)I~%T1Ji%L`M>}B|CycsNzHHofEW0@Uf|6~Q;@%M#e#}Tv{sCO9{`VOJ!ll7kq3NW z7_yypkxl&SAjj7-GZ-|J%6XO%SSG|WVV0?!Udzm65Jf-~!J-I=5@Z>kctUn?C|9s( zQ$#D6X9et%(we@yBFF{9mOE^^xiBJ#Y$eNwSs_R?c$C;AS~`o%H}O_2)2ZDQ)kU-h zlua~QXvWt9;PW^L`Kf49)^L;uFZ!Yhop;OyWWNudmv@vYFt2CJ*e|bVZ>I&NL{y^% z{Y$HtFRqbv3=1r%XH^|)ANC4aHBaU@1k8XuI$*f2B;|;vM^zFNuvX+$EF0xICT}v8 zK&IGQ0v@v>KkPVRJ}2RQY&+c6xP<MlEpHcIE!hftvY0B!PtMW&%^Y*VF%LQBBH3d0 zG7KW~7a!zl4fyoTnhVe{Yc8oO0oDWivzEs6dR5>TJchCX$^y#Lx?~;4lRD`<^pnf~ zr|ZAsIUd(}()$^5J~{SlTUsaJ_7Bk`d^#U+`|Ub&?1RQt;OCguA94?VbDj3vb#i!J z#Jo2c7yjJZe#VV$ebMc=F&)pjtsPI*19IHY|IJce(o4F8UYCf(;-sk|M7m)tsz<rF zih4cOu7|1VjU0Igj6}n;9sS8<GJRAZD<GZNd^d1*E5lH5!;l+_ZWwkzfg_#F>bgGo z?#hz9NoCEMZ+OS;Wv$(_m04B&FE4EDoYF&8<+G(KWK~V81WIlgb3+Zo!Mr@Yc<B0$ zM>iNlAK6^A>fLy_vtz--G250I`+AQh0%tl6{b+0VqAw?5SLvO5?MHTId2a{cr}n9% z<7-NdHYt5={;9R_`iiNoZI2b>K-pMr+{H8S#nRpf&ubd7-W<$Jz_xVv{=O5uaryZ9 z_r13#!@2i2l-`~80p9F9JmCu4f%7iGdJS3LtpWJ{W!ISc5fhDLT`h(E&4=K#gX^E1 zZaIhRJB#zSU_B4!?S+j84}X06s?TWJUGlZM?=#s4uCD>-eUA0^VBQ@#&{aJ;Ulae; z`B2x>8&i_xVgl=<%^WUD08z*Vc7D+P%@^<A)~CN}NG^Y)t|SzFGohQGG~~N0nU2Zi z|9wQgs-)FOQ#8?t&IM<R$(ph*g;B8_k1LWQr=-mhNmX=NRiZ?-NlG_S9mYOvtscvu OB7Xqx5JTW$3jhF>4(;y% literal 0 HcmV?d00001 diff --git a/inst/extdata/testfiles/nousefullist.RDS b/inst/extdata/testfiles/nousefullist.RDS new file mode 100644 index 0000000000000000000000000000000000000000..46a6570c2ccaf58d1531baf573def5360ce0377d GIT binary patch literal 120 zcmb2|=3oE==I#ec2?+^l35jWG32CfGk`d0%cS>|6BxbZU%BU$kV@`5oV-aBZ94TSZ zXyPAN*Xgv#$t$ZctxArWnOk_0Om<vSUY219vv9}+?d?WuP1dU@8|%wzDNTruoHJ|A V{OL^M=?OpB847N?@J<6-2mnl2B$NOE literal 0 HcmV?d00001 diff --git a/man/extract_b_values.Rd b/man/extract_b_values.Rd new file mode 100644 index 0000000..e93fbe0 --- /dev/null +++ b/man/extract_b_values.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/spdesign_utils.R +\name{extract_b_values} +\alias{extract_b_values} +\title{Title Extracts beta values from an spdesign object} +\usage{ +extract_b_values(input_list) +} +\arguments{ +\item{input_list}{the list where the parameters are stored. Usually this is \code{design$utility}} +} +\value{ +A named list with parameter values which can be used in \code{sim_all} +} +\description{ +Title Extracts beta values from an spdesign object +} +\examples{ +\dontrun{ +extract_b_values(design$utility) +} +} diff --git a/tests/testthat/test-readdesign.R b/tests/testthat/test-readdesign.R index 849f213..caf80a3 100644 --- a/tests/testthat/test-readdesign.R +++ b/tests/testthat/test-readdesign.R @@ -15,4 +15,29 @@ test_that("all is correct", { expect_no_error(readdesign(design = design_path, designtype = "ngene")) }) +### Tests for spdesign +design_path <- system.file("extdata","CSA", "design2.RDS" ,package = "simulateDCE") + +test_that("all is correct", { + expect_no_error(readdesign(design = design_path, designtype = "spdesign")) +}) + + +## trying objects that do not work + +design_path <- system.file("extdata","testfiles", "nousefullist.RDS" ,package = "simulateDCE") + +test_that("spdesign object is a list but does not contain the right element design", { + expect_error(readdesign(design = design_path, designtype = "spdesign"), + "list element is missing. Make sure to provide a ") +}) + + +## test spdesign object containing original object + +design_path <- system.file("extdata","ValuGaps", "des1.RDS" ,package = "simulateDCE") + +test_that("all is correct with full spdesign objects", { + expect_no_error(readdesign(design = design_path, designtype = "spdesign")) +}) diff --git a/vignettes/SE_Agri-vignette.Rmd b/vignettes/SE_Agri-vignette.Rmd index f69d31c..ee38858 100644 --- a/vignettes/SE_Agri-vignette.Rmd +++ b/vignettes/SE_Agri-vignette.Rmd @@ -89,7 +89,7 @@ The simulation can be ran using spdesign or NGENE design files which will be con ```{r other} -designpath<- system.file("extdata","se_AGRI" ,package = "simulateDCE") +designpath<- system.file("extdata","SE_AGRI" ,package = "simulateDCE") ## can also be specified using relative path eg. designpath<- "Projects/CSA/Designs/" #notes <- "This design consists of different heuristics. One group did not attend the methan attribute, another group only decided based on the payment" -- GitLab