From befb20c5c53496d035fd2647f5e19e5fa821a7e6 Mon Sep 17 00:00:00 2001 From: Ifeanyi Edochie Date: Mon, 14 Sep 2026 14:30:57 -0400 Subject: [PATCH 01/23] Add `retirement_date` field to personnel data and documentation, update lockfile --- R/data.R | 1 + R/demographics.R | 0 data-raw/bra_hrmis.R | 77 ++++++++++++++ data-raw/hrmis_data_dictionary.xlsx | Bin 17813 -> 17860 bytes data/bra_hrmis.rda | Bin 191868 -> 191856 bytes data/bra_hrmis_allowance.rda | Bin 110682 -> 110688 bytes data/bra_hrmis_contract.rda | Bin 223163 -> 223164 bytes data/bra_hrmis_est.rda | Bin 4745 -> 4764 bytes data/bra_hrmis_personnel.rda | Bin 87738 -> 91533 bytes man/bra_hrmis_personnel.Rd | 1 + renv.lock | 153 ++++++++++++++++++---------- 11 files changed, 176 insertions(+), 56 deletions(-) create mode 100644 R/demographics.R diff --git a/R/data.R b/R/data.R index 1b46903..21cbc37 100644 --- a/R/data.R +++ b/R/data.R @@ -367,6 +367,7 @@ #' \item{race}{Worker's race or broad ethnic classification, where available.} #' \item{tribe}{Worker's ethnic or tribal affiliation, where available.} #' \item{first_employment_date}{Date the worker first entered the public service.} +#' \item{retirement_date}{The date of retirement for those whose \code{employment_status} is \code{"pensioner"}} #' } #' #' @details diff --git a/R/demographics.R b/R/demographics.R new file mode 100644 index 0000000..e69de29 diff --git a/data-raw/bra_hrmis.R b/data-raw/bra_hrmis.R index 8f767dc..2245dfa 100644 --- a/data-raw/bra_hrmis.R +++ b/data-raw/bra_hrmis.R @@ -195,6 +195,83 @@ bra_hrmis_est <- est_tbl # CPF = purrr::map_chr(CPF, digest, algo = "sha256") # ) +### add retirement ages to the personnel data +### start by adding the latest reference date to all those pensioners who we see make the transition from active/inactive to pensioner +### in the time frame of the dataset + +pensioner_ids <- + personnel_tbl |> + filter(employment_status == "pensioner") |> + pull(personnel_id) |> + unique() + + +### add the latest reference date to all those pensioners who we see make the transition from active/inactive to pensioner +personnel_tbl <- + personnel_tbl |> + left_join(personnel_tbl |> + filter(personnel_id %in% pensioner_ids) |> + filter(employment_status != "pensioner") |> + group_by(personnel_id) |> + filter(ref_date == max(ref_date)) |> + select(personnel_id, ref_date) |> + rename(retirement_date = "ref_date") |> + distinct(), by = "personnel_id") + +## make sure all non-pensioners have NA for retirement date and the new retirement date is a date object +personnel_tbl <- + personnel_tbl |> + mutate( + retirement_date = ifelse(employment_status != "pensioner", NA, retirement_date), + retirement_date = as.Date(retirement_date) + ) + +# personnel_tbl |> +# filter(employment_status == "pensioner" & is.na(retirement_date)) |> +# group_by(personnel_id) |> +# filter(ref_date == min(ref_date)) |> +# select(personnel_id, ref_date, first_employment_date) |> +# mutate(retirement_date = sample(seq(first_employment_date, min(ref_date), by = "day"), 1)) + + +retirement_fill_tbl <- + personnel_tbl |> + filter(employment_status == "pensioner" & is.na(retirement_date)) |> + group_by(personnel_id) |> + filter(ref_date == min(ref_date)) |> + select(personnel_id, ref_date, first_employment_date) |> + filter(!is.na(first_employment_date)) |> + mutate( + retirement_date = sample( + seq(min(first_employment_date, ref_date), max(first_employment_date, ref_date), by = "day"), + 1 + ) + ) |> + ungroup() |> + select(personnel_id, retirement_date) + +personnel_tbl <- + personnel_tbl |> + left_join(retirement_fill_tbl, by = "personnel_id", suffix = c("", "_sim")) |> + mutate( + retirement_date = coalesce(retirement_date, retirement_date_sim) + ) |> + select(-retirement_date_sim) + + +### lets see the time between first employment and retirement for those with a retirement date +personnel_tbl |> + filter(!is.na(retirement_date)) |> + mutate(time_to_retirement = retirement_date - first_employment_date) |> + summarise( + min_time = min(time_to_retirement), + max_time = max(time_to_retirement), + mean_time = mean(time_to_retirement), + median_time = median(time_to_retirement) + ) + +### simulate retirement dates before the earliest reference dates the rest of the retirees +#### assign a date between first_employment_date and min(ref_date) for each pensioner with NA retirement_date set.seed(123) personnel_list <- diff --git a/data-raw/hrmis_data_dictionary.xlsx b/data-raw/hrmis_data_dictionary.xlsx index 7782c8040b3c10e9c841c1634b6de5ae351ef59a..6c12473289821e399500a2326a67886d752dc901 100644 GIT binary patch delta 6135 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 T#-SjAGz*kU&-ec> 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 NvJ_Ze70Ub%_&+0fMt1-J diff --git a/data/bra_hrmis.rda b/data/bra_hrmis.rda index 5c67dde51cac824758b37bfcd9b5011110c51d91..2c805caa0fa731055ef824e3495508a0bd3f1667 100644 GIT binary patch delta 186664 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
  • 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≦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%0D<1Gz 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 LoG3_fL65V5VeYh& delta 186724 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 z%0D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�}1aSvByuuGs_Urv_Ey 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%0A6D1)vk3Jpz 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 Q5&!tRk}1N3hnqBa(6Ij1LjV8( diff --git a/data/bra_hrmis_allowance.rda b/data/bra_hrmis_allowance.rda index 716b7deb6a24e0ff14e9e78bac56fce0acdad3c6..c2f9bb147b6c25a5853f6290a78599472e6dac80 100644 GIT binary patch delta 104860 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 delta 104905 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
    o*(tZxkGV&7Gc3DF(hMm4p(RG6-a| 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�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 delta 4653 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 RWpwU9rM7{|H^OGv{{a-OWH$f+ diff --git a/data/bra_hrmis_personnel.rda b/data/bra_hrmis_personnel.rda index fd4abfb6a8efae07e3179dcb6eec3af19cc0bac8..9b501e95cca113ffc3f8c622f5a9ce2db509a55e 100644 GIT binary patch delta 87208 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%0DHJQ`ae<{;A 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 K2B9IQdBZp&#gZui delta 83381 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 BU)%ry diff --git a/man/bra_hrmis_personnel.Rd b/man/bra_hrmis_personnel.Rd index d1bc031..861e176 100644 --- a/man/bra_hrmis_personnel.Rd +++ b/man/bra_hrmis_personnel.Rd @@ -20,6 +20,7 @@ A data frame with 15,681 rows and 11 variables: \item{race}{Worker's race or broad ethnic classification, where available.} \item{tribe}{Worker's ethnic or tribal affiliation, where available.} \item{first_employment_date}{Date the worker first entered the public service.} + \item{retirement_date}{The date of retirement for those whose \code{employment_status} is \code{"pensioner"}} } } \source{ diff --git a/renv.lock b/renv.lock index 8eb976f..3d45eb4 100644 --- a/renv.lock +++ b/renv.lock @@ -205,7 +205,7 @@ }, "RCurl": { "Package": "RCurl", - "Version": "1.98-1.19", + "Version": "1.98-1.20", "Source": "Repository", "Title": "General Network (HTTP/FTP/...) Client Interface for R", "Authors@R": "c(person(\"CRAN Team\", role = 'ctb', email = \"CRAN@r-project.org\", comment = \"de facto maintainer in 2013-2026\"), person(\"Duncan\", \"Temple Lang\", role = \"aut\", email = \"duncan@r-project.org\", comment = c(ORCID = \"0000-0003-0159-1546\")), person(\"Ivan\", \"Krylov\", role = \"cre\", email = \"ikrylov@disroot.org\"))", @@ -261,6 +261,46 @@ "Maintainer": "Dirk Eddelbuettel ", "Repository": "CRAN" }, + "RcppArmadillo": { + "Package": "RcppArmadillo", + "Version": "15.6.0-1", + "Source": "Repository", + "Type": "Package", + "Title": "'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library", + "Date": "2026-09-07", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Binxiang\", \"Ni\", role = \"aut\"), person(\"Conrad\", \"Sanderson\", role = \"aut\", comment = c(ORCID = \"0000-0002-0049-4501\")))", + "Description": "'Armadillo' is a templated C++ linear algebra library aiming towards a good balance between speed and ease of use. It provides high-level syntax and functionality deliberately similar to Matlab. It is useful for algorithm development directly in C++, or quick conversion of research code into production environments. It provides efficient classes for vectors, matrices and cubes where dense and sparse matrices are supported. Integer, floating point and complex numbers are supported. A sophisticated expression evaluator (based on template meta-programming) automatically combines several operations to increase speed and efficiency. Dynamic evaluation automatically chooses optimal code paths based on detected matrix structures. Matrix decompositions are provided through integration with LAPACK, or one of its high performance drop-in replacements (such as 'MKL' or 'OpenBLAS'). It can automatically use 'OpenMP' multi-threading (parallelisation) to speed up computationally expensive operations. . The 'RcppArmadillo' package includes the header files from the 'Armadillo' library; users do not need to install 'Armadillo' itself in order to use 'RcppArmadillo'. Starting from release 15.0.0, the minimum compilation standard is C++14. . Since release 7.800.0, 'Armadillo' is licensed under Apache License 2; previous releases were under licensed as MPL 2.0 from version 3.800.0 onwards and LGPL-3 prior to that; 'RcppArmadillo' (the 'Rcpp' bindings/bridge to Armadillo) is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", + "License": "GPL (>= 2)", + "LazyLoad": "yes", + "Depends": [ + "R (>= 3.3.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "Imports": [ + "Rcpp (>= 1.1.1)", + "stats", + "utils", + "methods" + ], + "Suggests": [ + "tinytest", + "Matrix (>= 1.3.0)", + "pkgKitten", + "reticulate", + "slam" + ], + "URL": "https://github.com/RcppCore/RcppArmadillo, https://dirk.eddelbuettel.com/code/rcpp.armadillo.html", + "BugReports": "https://github.com/RcppCore/RcppArmadillo/issues", + "RoxygenNote": "6.0.1", + "Encoding": "UTF-8", + "VignetteBuilder": "Rcpp", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), Binxiang Ni [aut], Conrad Sanderson [aut] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, "S7": { "Package": "S7", "Version": "0.2.2", @@ -372,7 +412,7 @@ }, "arrow": { "Package": "arrow", - "Version": "25.0.0", + "Version": "25.0.1", "Source": "Repository", "Title": "Integration to 'Apache' 'Arrow'", "Authors@R": "c( person(\"Neal\", \"Richardson\", email = \"neal.p.richardson@gmail.com\", role = c(\"aut\")), person(\"Ian\", \"Cook\", email = \"ianmcook@gmail.com\", role = c(\"aut\")), person(\"Nic\", \"Crane\", email = \"thisisnic@gmail.com\", role = c(\"aut\")), person(\"Dewey\", \"Dunnington\", role = c(\"aut\"), email = \"dewey@fishandwhistle.net\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Romain\", \"Fran\\u00e7ois\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Jonathan\", \"Keane\", email = \"jkeane@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Bryce\", \"Mecum\", email = \"brycemecum@gmail.com\", role = c(\"aut\")), person(\"Drago\\u0219\", \"Moldovan-Gr\\u00fcnfeld\", email = \"dragos.mold@gmail.com\", role = c(\"aut\")), person(\"Jeroen\", \"Ooms\", email = \"jeroen@berkeley.edu\", role = c(\"aut\")), person(\"Jacob\", \"Wujciak-Jens\", email = \"jacob@wujciak.de\", role = c(\"aut\")), person(\"Javier\", \"Luraschi\", email = \"javier@rstudio.com\", role = c(\"ctb\")), person(\"Karl\", \"Dunkle Werner\", email = \"karldw@users.noreply.github.com\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Jeffrey\", \"Wong\", email = \"jeffreyw@netflix.com\", role = c(\"ctb\")), person(\"Apache Arrow\", email = \"dev@arrow.apache.org\", role = c(\"aut\", \"cph\")) )", @@ -432,7 +472,7 @@ "cpp11 (>= 0.4.2)" ], "Collate": "'arrowExports.R' 'enums.R' 'arrow-object.R' 'type.R' 'array-data.R' 'arrow-datum.R' 'array.R' 'arrow-info.R' 'arrow-package.R' 'arrow-tabular.R' 'buffer.R' 'chunked-array.R' 'io.R' 'compression.R' 'scalar.R' 'compute.R' 'config.R' 'csv.R' 'dataset.R' 'dataset-factory.R' 'dataset-format.R' 'dataset-partition.R' 'dataset-scan.R' 'dataset-write.R' 'dictionary.R' 'dplyr-across.R' 'dplyr-arrange.R' 'dplyr-by.R' 'dplyr-collect.R' 'dplyr-count.R' 'dplyr-datetime-helpers.R' 'dplyr-distinct.R' 'dplyr-eval.R' 'dplyr-filter.R' 'dplyr-funcs-agg.R' 'dplyr-funcs-augmented.R' 'dplyr-funcs-conditional.R' 'dplyr-funcs-datetime.R' 'dplyr-funcs-doc.R' 'dplyr-funcs-math.R' 'dplyr-funcs-simple.R' 'dplyr-funcs-string.R' 'dplyr-funcs-type.R' 'expression.R' 'dplyr-funcs.R' 'dplyr-glimpse.R' 'dplyr-group-by.R' 'dplyr-join.R' 'dplyr-mutate.R' 'dplyr-select.R' 'dplyr-slice.R' 'dplyr-summarize.R' 'dplyr-union.R' 'record-batch.R' 'table.R' 'dplyr.R' 'duckdb.R' 'extension.R' 'feather.R' 'field.R' 'filesystem.R' 'flight.R' 'install-arrow.R' 'ipc-stream.R' 'json.R' 'memory-pool.R' 'message.R' 'metadata.R' 'parquet.R' 'python.R' 'query-engine.R' 'record-batch-reader.R' 'record-batch-writer.R' 'reexports-tidyselect.R' 'schema.R' 'udf.R' 'util.R'", - "Config/roxygen2/version": "8.0.0", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "yes", "Author": "Neal Richardson [aut], Ian Cook [aut], Nic Crane [aut], Dewey Dunnington [aut] (ORCID: ), Romain François [aut] (ORCID: ), Jonathan Keane [aut, cre], Bryce Mecum [aut], Dragoș Moldovan-Grünfeld [aut], Jeroen Ooms [aut], Jacob Wujciak-Jens [aut], Javier Luraschi [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Jeffrey Wong [ctb], Apache Arrow [aut, cph]", "Maintainer": "Jonathan Keane ", @@ -637,7 +677,7 @@ }, "bit64": { "Package": "bit64", - "Version": "4.8.2", + "Version": "4.8.6", "Source": "Repository", "Title": "A S3 Class for Vectors of 64bit Integers", "Authors@R": "c( person(\"Michael\", \"Chirico\", email=\"michaelchirico4@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role=\"aut\"), person(\"Leonardo\", \"Silvestri\", role=\"ctb\"), person(\"Ofek\", \"Shilon\", role=\"ctb\"), person(\"Christian\", \"Ullerich\", role=\"ctb\") )", @@ -665,7 +705,7 @@ "Config/testthat/edition": "3", "Config/Needs/development": "patrick, testthat", "Config/Needs/website": "tidyverse/tidytemplate", - "RoxygenNote": "7.3.3", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Leonardo Silvestri [ctb], Ofek Shilon [ctb], Christian Ullerich [ctb]", "Maintainer": "Michael Chirico ", @@ -1230,10 +1270,10 @@ }, "collapse": { "Package": "collapse", - "Version": "2.1.7", + "Version": "2.1.8", "Source": "Repository", "Title": "Advanced and Fast Data Transformation", - "Date": "2026-05-17", + "Date": "2026-08-29", "Authors@R": "c( person(\"Sebastian\", \"Krantz\", role = c(\"aut\", \"cre\"), email = \"sebastian.krantz@graduateinstitute.ch\", comment = c(ORCID = \"0000-0001-6212-5229\")), person(\"Matt\", \"Dowle\", role = \"ctb\"), person(\"Arun\", \"Srinivasan\", role = \"ctb\"), person(\"Morgan\", \"Jacob\", role = \"ctb\"), person(\"Dirk\", \"Eddelbuettel\", role = \"ctb\"), person(\"Laurent\", \"Berge\", role = \"ctb\"), person(\"Kevin\", \"Tappe\", role = \"ctb\"), person(\"Alina\", \"Cherkas\", role = \"ctb\"), person(\"Ivan\", \"Krylov\", role = \"ctb\"), person(\"R Core Team and contributors worldwide\", role = \"ctb\"), person(\"Martyn\", \"Plummer\", role = \"cph\"), person(\"1999-2016 The R Core Team\", role = \"cph\") )", "Description": "A large C/C++-based package for advanced data transformation and statistical computing in R that is extremely fast, class-agnostic, robust, and programmer friendly. Core functionality includes a rich set of S3 generic grouped and weighted statistical functions for vectors, matrices and data frames, which provide efficient low-level vectorizations, OpenMP multithreading, and skip missing values by default. These are integrated with fast grouping and ordering algorithms (also callable from C), and efficient data manipulation functions. The package also provides a flexible and rigorous approach to time series and panel data in R, fast functions for data transformation and common statistical procedures, detailed (grouped, weighted) summary statistics, powerful tools to work with nested data, fast data object conversions, functions for memory efficient R programming, and helpers to effectively deal with variable labels, attributes, and missing data. It seamlessly supports base R objects/classes as well as 'units', 'integer64', 'xts'/ 'zoo', 'tibble', 'grouped_df', 'data.table', 'sf', and 'pseries'/'pdata.frame'. For a concise overview of the package see Krantz (2026) .", "URL": "https://fastverse.org/collapse/, https://github.com/fastverse/collapse", @@ -1379,7 +1419,7 @@ "NeedsCompilation": "no", "Author": "Gábor Csárdi [aut, cre], Brodie Gaslam [ctb], Posit Software, PBC [cph, fnd]", "Maintainer": "Gábor Csárdi ", - "Repository": "RSPM" + "Repository": "CRAN" }, "credentials": { "Package": "credentials", @@ -1474,7 +1514,7 @@ }, "curl": { "Package": "curl", - "Version": "7.1.0", + "Version": "8.0.0", "Source": "Repository", "Type": "Package", "Title": "A Modern and Flexible Web Client for R", @@ -1498,9 +1538,9 @@ "Depends": [ "R (>= 3.0.0)" ], - "RoxygenNote": "7.3.2", "Encoding": "UTF-8", "Language": "en-US", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", "Maintainer": "Jeroen Ooms ", @@ -1508,7 +1548,7 @@ }, "data.table": { "Package": "data.table", - "Version": "1.18.4", + "Version": "1.18.6.1", "Source": "Repository", "Title": "Extension of `data.frame`", "Depends": [ @@ -1534,9 +1574,9 @@ "VignetteBuilder": "knitr", "Encoding": "UTF-8", "ByteCompile": "TRUE", - "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\"), person(\"Tarun\", \"Thammisetty\", role=\"ctb\") )", + "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"Mezquita\", role=\"ctb\", comment = c(ORCID=\"0000-0002-9307-6762\")), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\"), person(\"Tarun\", \"Thammisetty\", role=\"ctb\"), person(\"Marco\", \"Colombo\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6672-0623\")), person(\"Tim\", \"Taylor\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")) )", "NeedsCompilation": "yes", - "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb], Tarun Thammisetty [ctb]", + "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck Mezquita [ctb] (ORCID: ), Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb], Tarun Thammisetty [ctb], Marco Colombo [ctb] (ORCID: ), Tim Taylor [ctb] (ORCID: )", "Maintainer": "Tyson Barrett ", "Repository": "CRAN" }, @@ -1641,7 +1681,7 @@ "Collate": "'assertions.R' 'authors-at-r.R' 'built.R' 'classes.R' 'collate.R' 'constants.R' 'deps.R' 'desc-package.R' 'description.R' 'encoding.R' 'find-package-root.R' 'latex.R' 'non-oo-api.R' 'package-archives.R' 'read.R' 'remotes.R' 'str.R' 'syntax_checks.R' 'urls.R' 'utils.R' 'validate.R' 'version.R'", "NeedsCompilation": "no", "Author": "Gábor Csárdi [aut, cre], Kirill Müller [aut], Jim Hester [aut], Maëlle Salmon [ctb] (), Posit Software, PBC [cph, fnd]", - "Repository": "RSPM" + "Repository": "CRAN" }, "devtools": { "Package": "devtools", @@ -1712,7 +1752,7 @@ }, "diffobj": { "Package": "diffobj", - "Version": "0.3.8", + "Version": "0.3.9", "Source": "Repository", "Type": "Package", "Title": "Diffs for R Objects", @@ -2393,7 +2433,7 @@ }, "gert": { "Package": "gert", - "Version": "2.4.0", + "Version": "2.4.1", "Source": "Repository", "Type": "Package", "Title": "Simple Git Client for R", @@ -2918,21 +2958,24 @@ }, "ggthemes": { "Package": "ggthemes", - "Version": "5.2.0", + "Version": "6.0.0", "Source": "Repository", "Title": "Extra Themes, Scales and Geoms for 'ggplot2'", - "Authors@R": "c(person(\"Jeffrey B.\", \"Arnold\", role = c(\"aut\", \"cre\"), email = \"jeffrey.arnold@gmail.com\", comment = \"\"), person(\"Gergely\", \"Daroczi\", role = \"ctb\"), person(\"Bo\", \"Werth\", role = \"ctb\"), person(\"Brian\", \"Weitzner\", role = \"ctb\"), person(\"Joshua\", \"Kunst\", role = \"ctb\"), person(\"Baptise\", \"Auguie\", role = \"ctb\"), person(\"Bob\", \"Rudis\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = c(\"ctb\"), comment = \"Code from the ggplot2 package.\"), person(\"Justin\", \"Talbot\", role = \"ctb\", comment = \"Code from the labeling package\"), person(\"Joshua\", \"London\", role = \"ctb\"))", + "Authors@R": "c(person(\"Jeffrey B.\", \"Arnold\", role = c(\"aut\", \"cre\"), email = \"jeffrey.arnold@gmail.com\", comment = \"\"), person(\"Gergely\", \"Daroczi\", role = \"ctb\"), person(\"Bo\", \"Werth\", role = \"ctb\"), person(\"Brian\", \"Weitzner\", role = \"ctb\"), person(\"Joshua\", \"Kunst\", role = \"ctb\"), person(\"Baptiste\", \"Auguie\", role = \"ctb\"), person(\"Bob\", \"Rudis\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = c(\"ctb\"), comment = \"Code from the ggplot2 package.\"), person(\"Justin\", \"Talbot\", role = \"ctb\", comment = \"Code from the labeling package\"), person(\"Joshua\", \"London\", role = \"ctb\"))", "Depends": [ - "R (>= 3.3.0)" + "R (>= 4.1.0)" ], "Imports": [ + "cli", "ggplot2 (>= 3.0.0)", "graphics", "grid", "lifecycle", "methods", "purrr", + "rlang", "scales", + "stats", "stringr", "tibble" ], @@ -2948,7 +2991,6 @@ "mapproj", "pander", "quantreg", - "rlang", "rmarkdown", "spelling", "testthat (>= 3.2.0)", @@ -2958,16 +3000,16 @@ ], "Description": "Some extra themes, geoms, and scales for 'ggplot2'. Provides 'ggplot2' themes and scales that replicate the look of plots by Edward Tufte, Stephen Few, 'Fivethirtyeight', 'The Economist', 'Stata', 'Excel', and 'The Wall Street Journal', among others. Provides 'geoms' for Tufte's box plot and range frame.", "License": "GPL-2", - "URL": "https://jrnold.github.io/ggthemes/, https://github.com/jrnold/ggthemes, http://jrnold.github.io/ggthemes/", + "URL": "https://jrnold.github.io/ggthemes/, https://github.com/jrnold/ggthemes", "BugReports": "https://github.com/jrnold/ggthemes/issues", - "RoxygenNote": "7.3.3", "LazyData": "true", "Language": "en-US", "Encoding": "UTF-8", "Config/testthat/edition": "3", "Config/Needs/website": "pkgdown", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", - "Author": "Jeffrey B. Arnold [aut, cre] (), Gergely Daroczi [ctb], Bo Werth [ctb], Brian Weitzner [ctb], Joshua Kunst [ctb], Baptise Auguie [ctb], Bob Rudis [ctb], Hadley Wickham [ctb] (Code from the ggplot2 package.), Justin Talbot [ctb] (Code from the labeling package), Joshua London [ctb]", + "Author": "Jeffrey B. Arnold [aut, cre] (), Gergely Daroczi [ctb], Bo Werth [ctb], Brian Weitzner [ctb], Joshua Kunst [ctb], Baptiste Auguie [ctb], Bob Rudis [ctb], Hadley Wickham [ctb] (Code from the ggplot2 package.), Justin Talbot [ctb] (Code from the labeling package), Joshua London [ctb]", "Maintainer": "Jeffrey B. Arnold ", "Repository": "CRAN" }, @@ -3613,7 +3655,7 @@ }, "httr": { "Package": "httr", - "Version": "1.4.8", + "Version": "1.4.9", "Source": "Repository", "Title": "Tools for Working with URLs and HTTP", "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", @@ -3644,8 +3686,8 @@ ], "VignetteBuilder": "knitr", "Config/Needs/website": "tidyverse/tidytemplate", + "Config/roxygen2/version": "8.1.0", "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", "NeedsCompilation": "no", "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", "Maintainer": "Hadley Wickham ", @@ -3939,7 +3981,7 @@ "Encoding": "UTF-8", "NeedsCompilation": "yes", "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", - "Repository": "RSPM" + "Repository": "CRAN" }, "juicyjuice": { "Package": "juicyjuice", @@ -3967,11 +4009,11 @@ }, "knitr": { "Package": "knitr", - "Version": "1.51", + "Version": "1.52", "Source": "Repository", "Type": "Package", "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Leonidas\", \"Zhak\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", "Depends": [ "R (>= 3.6.0)" @@ -3995,12 +4037,11 @@ "jpeg", "JuliaCall (>= 0.11.1)", "magick", - "litedown", - "markdown (>= 1.3)", + "litedown (>= 0.10)", "otel", "otelsdk", "png", - "ragg", + "ragg (>= 1.5.0)", "reticulate (>= 1.4)", "rgl (>= 0.95.1201)", "rlang", @@ -4023,10 +4064,10 @@ "Encoding": "UTF-8", "VignetteBuilder": "litedown, knitr", "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", - "RoxygenNote": "7.3.3", + "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks-typst.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johan Larsson [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Leonidas Zhak [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", "Maintainer": "Yihui Xie ", "Repository": "CRAN" }, @@ -4266,7 +4307,7 @@ }, "litedown": { "Package": "litedown", - "Version": "0.10", + "Version": "0.11", "Source": "Repository", "Type": "Package", "Title": "A Lightweight Version of R Markdown", @@ -4292,7 +4333,7 @@ "BugReports": "https://github.com/yihui/litedown/issues", "VignetteBuilder": "litedown", "Encoding": "UTF-8", - "Config/roxygen2/version": "8.0.0", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Tim Taylor [ctb] (ORCID: )", "Maintainer": "Yihui Xie ", @@ -4645,11 +4686,10 @@ }, "openxlsx": { "Package": "openxlsx", - "Version": "4.2.8.1", + "Version": "4.2.9", "Source": "Repository", "Type": "Package", "Title": "Read, Write and Edit xlsx Files", - "Date": "2025-10-30", "Authors@R": "c(person(given = \"Philipp\", family = \"Schauberger\", role = \"aut\", email = \"philipp@schauberger.co.at\"), person(given = \"Alexander\", family = \"Walker\", role = \"aut\", email = \"Alexander.Walker1989@gmail.com\"), person(given = \"Luca\", family = \"Braglia\", role = \"ctb\"), person(given = \"Joshua\", family = \"Sturm\", role = \"ctb\"), person(given = \"Jan Marvin\", family = \"Garbuszus\", role = c(\"ctb\", \"cre\"), email = \"jan.garbuszus@ruhr-uni-bochum.de\"), person(given = \"Jordan Mark\", family = \"Barbone\", role = \"ctb\", email = \"jmbarbone@gmail.com\", comment = c(ORCID = \"0000-0001-9788-3628\")), person(given = \"David\", family = \"Zimmermann\", role = \"ctb\", email = \"david_j_zimmermann@hotmail.com\"), person(given = \"Reinhold\", family = \"Kainhofer\", role = \"ctb\", email = \"reinhold@kainhofer.com\"))", "Description": "Simplifies the creation of Excel .xlsx files by providing a high level interface to writing, styling and editing worksheets. Through the use of 'Rcpp', read/write times are comparable to the 'xlsx' and 'XLConnect' packages with the added benefit of removing the dependency on Java.", "License": "MIT + file LICENSE", @@ -4670,8 +4710,11 @@ "Suggests": [ "curl", "formula.tools", + "ggplot2", + "jpeg", "knitr", "rmarkdown", + "survival", "testthat" ], "LinkingTo": [ @@ -4680,9 +4723,9 @@ "VignetteBuilder": "knitr", "Encoding": "UTF-8", "Language": "en-US", - "RoxygenNote": "7.3.3", "Collate": "'CommentClass.R' 'HyperlinkClass.R' 'RcppExports.R' 'class_definitions.R' 'StyleClass.R' 'WorkbookClass.R' 'asserts.R' 'baseXML.R' 'borderFunctions.R' 'build_workbook.R' 'chartsheet_class.R' 'conditional_formatting.R' 'data-fontSizeLookupTables.R' 'helperFunctions.R' 'loadWorkbook.R' 'onUnload.R' 'openXL.R' 'openxlsx-package.R' 'openxlsx.R' 'openxlsxCoerce.R' 'readWorkbook.R' 'setWindowSize.R' 'sheet_data_class.R' 'utils.R' 'workbook_column_widths.R' 'workbook_read_workbook.R' 'workbook_write_data.R' 'worksheet_class.R' 'wrappers.R' 'writeData.R' 'writeDataTable.R' 'writexlsx.R' 'zzz.R'", "LazyData": "true", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "yes", "Author": "Philipp Schauberger [aut], Alexander Walker [aut], Luca Braglia [ctb], Joshua Sturm [ctb], Jan Marvin Garbuszus [ctb, cre], Jordan Mark Barbone [ctb] (ORCID: ), David Zimmermann [ctb], Reinhold Kainhofer [ctb]", "Maintainer": "Jan Marvin Garbuszus ", @@ -6060,13 +6103,13 @@ }, "rmarkdown": { "Package": "rmarkdown", - "Version": "2.31", + "Version": "2.32", "Source": "Repository", "Type": "Package", "Title": "Dynamic Documents for R", "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", "Description": "Convert R Markdown documents into a variety of formats.", - "License": "GPL-3", + "License": "MIT + file LICENSE", "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", "BugReports": "https://github.com/rstudio/rmarkdown/issues", "Depends": [ @@ -6079,7 +6122,7 @@ "htmltools (>= 0.5.1)", "jquerylib", "jsonlite", - "knitr (>= 1.43)", + "knitr (>= 1.50)", "methods", "tinytex (>= 0.31)", "tools", @@ -6104,11 +6147,10 @@ "xml2" ], "VignetteBuilder": "knitr", - "Config/Needs/website": "rstudio/quillt, pkgdown", "Config/testthat/edition": "3", "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", + "SystemRequirements": "pandoc (>= 2.8) - http://pandoc.org", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", "Maintainer": "Yihui Xie ", @@ -7444,7 +7486,7 @@ }, "usethis": { "Package": "usethis", - "Version": "3.2.1", + "Version": "3.2.2", "Source": "Repository", "Title": "Automate Package and Project Setup", "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Andy\", \"Teucher\", , \"andy.teucher@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7840-692X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", @@ -7463,23 +7505,22 @@ "desc (>= 1.4.2)", "fs (>= 1.3.0)", "gert (>= 1.4.1)", - "gh (>= 1.2.1)", + "gh (>= 1.6.0)", "glue (>= 1.3.0)", "jsonlite", "lifecycle (>= 1.0.0)", + "pak", "purrr", "rappdirs", "rlang (>= 1.1.0)", "rprojroot (>= 2.1.1)", "rstudioapi", - "stats", - "tools", - "utils", "whisker", "withr (>= 2.3.0)", "yaml" ], "Suggests": [ + "askpass", "covr", "knitr", "magick", @@ -7497,7 +7538,7 @@ "Config/usethis/last-upkeep": "2025-04-22", "Encoding": "UTF-8", "Language": "en-US", - "RoxygenNote": "7.3.3", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", "Author": "Hadley Wickham [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Malcolm Barrett [aut] (ORCID: ), Andy Teucher [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", "Maintainer": "Jennifer Bryan ", @@ -7933,7 +7974,7 @@ }, "writexl": { "Package": "writexl", - "Version": "2.0.0", + "Version": "2.0.1", "Source": "Repository", "Type": "Package", "Title": "Export Data Frames to Excel 'xlsx' Format", @@ -7960,7 +8001,7 @@ "Language": "en-US", "SystemRequirements": "zlib", "Config/testthat/edition": "3", - "Config/roxygen2/version": "8.0.0", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "yes", "Author": "Jeroen Ooms [aut] (ORCID: ), Bill Denney [aut, cre] (ORCID: ), John McNamara [cph] (Author of libxlsxwriter (see AUTHORS and COPYRIGHT files for details))", "Maintainer": "Bill Denney ", @@ -8142,7 +8183,7 @@ }, "yulab.utils": { "Package": "yulab.utils", - "Version": "0.2.4", + "Version": "0.2.5", "Source": "Repository", "Title": "Supporting Functions for Packages Maintained by 'YuLab-SMU'", "Authors@R": "c(person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\")))", @@ -8172,8 +8213,8 @@ "URL": "https://yulab-smu.top/", "BugReports": "https://github.com/YuLab-SMU/yulab.utils/issues", "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", "Config/testthat/edition": "3", + "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", "Author": "Guangchuang Yu [aut, cre] (ORCID: )", "Maintainer": "Guangchuang Yu ", @@ -8181,7 +8222,7 @@ }, "zip": { "Package": "zip", - "Version": "3.0.1", + "Version": "3.0.2", "Source": "Repository", "Title": "Cross-Platform 'zip' Compression", "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kuba\", \"Podgórski\", role = \"ctb\"), person(\"Rich\", \"Geldreich\", role = \"ctb\"), person(\"Arm Limited\", role = c(\"ctb\", \"cph\"), comment = \"bundled Mbed TLS crypto subset in src/mbedtls/ (Apache-2.0)\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", From 5b7f85ecca0b9fdcca4d26a0c99d279091cfe2de Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Mon, 14 Sep 2026 18:17:51 -0400 Subject: [PATCH 02/23] first attempt at growth decomposition --- .gitignore | 1 + NAMESPACE | 1 + R/movement_external.R | 11 ++- R/wagebill.R | 121 ++++++++++++++++++++++++++ man/complete_dates.Rd | 2 +- man/compute_wagebill_decomposition.Rd | 60 +++++++++++++ 6 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 R/wagebill.R create mode 100644 man/compute_wagebill_decomposition.Rd diff --git a/.gitignore b/.gitignore index 531e441..d98a74d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ .Ruserdata *.rds docs +spielplatz/ \ No newline at end of file diff --git a/NAMESPACE b/NAMESPACE index 2a8f377..928564f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -29,6 +29,7 @@ export(compute_time_trend) export(compute_trend_summary) export(compute_value_consistency) export(compute_wagebill) +export(compute_wagebill_decomposition) export(compute_workforce_movement) export(convert_constant_ppp) export(count_entity) diff --git a/R/movement_external.R b/R/movement_external.R index d4bec4f..381aa27 100644 --- a/R/movement_external.R +++ b/R/movement_external.R @@ -624,7 +624,7 @@ estimate_exit_rates <- function( #' ) #' } #' @export -complete_dates <- function(data, id_col, start_date, end_date, freq = "year") { +complete_dates <- function(data, id_col, start_date = NULL, end_date = NULL, freq = "year") { # Convert to data.table dt <- data.table::as.data.table(data) @@ -633,8 +633,17 @@ complete_dates <- function(data, id_col, start_date, end_date, freq = "year") { ] # Build full date range and unique identifiers + if(is.null(start_date)) { + start_date <- as.character(min(dt[["ref_date"]])) + } + + if(is.null(end_date)) { + end_date <- as.character(max(dt[["ref_date"]])) + } + full_dates <- lubridate::ymd(start_date) %>% seq(lubridate::ymd(end_date), by = freq) + unique_id <- unique(dt[[id_col]]) # Create complete identifier–date grid diff --git a/R/wagebill.R b/R/wagebill.R new file mode 100644 index 0000000..8bf26d0 --- /dev/null +++ b/R/wagebill.R @@ -0,0 +1,121 @@ +#' Decompose wage bill growth into headcount, wage, composition, entry, +#' exit, and interaction effects +#' +#' @details +#' Rows are classified per transition as continuing +#' (\eqn{n_{g,t-1}>0}{n_g,t-1>0} and \eqn{n_{g,t}>0}{n_g,t>0}), entrant +#' (\eqn{n_{g,t-1}=0}{n_g,t-1=0}), or exiter (\eqn{n_{g,t}=0}{n_g,t=0}). +#' +#' Entry and exit are self-contained (need only that group's own row): +#' \deqn{\text{entry\_effect} = \sum_{g \in B} n_{g,t} w_{g,t} \qquad \text{exit\_effect} = -\sum_{g \in D} n_{g,t-1} w_{g,t-1}} +#' +#' For continuing groups \eqn{C}, define shares \eqn{s_{g,t} = n_{g,t}/N^C_t}{s_g,t = n_g,t/N^C_t} +#' with \eqn{N^C_t = \sum_{g \in C} n_{g,t}}{N^C_t = sum_{g in C} n_g,t} and +#' \eqn{\bar w^C_t = \sum_{g \in C} s_{g,t} w_{g,t}}{w_bar^C_t = sum s_g,t*w_g,t}. +#' \strong{Only the headcount effect is a pure totals quantity with no +#' group-level counterpart; wage and composition are sums of per-group +#' terms, but the composition term requires the shares (hence the totals) +#' to be computed first:} +#' \deqn{\Delta N^C \bar w^C_{t-1} \;+\; \sum_{g \in C} n_{g,t-1}\,\Delta w_g \;+\; \sum_{g \in C} N^C_{t-1}\,\Delta s_g\, w_{g,t-1} \;+\; \left[\Delta N^C \Delta \bar w^C + \sum_{g \in C} N^C_{t-1}\,\Delta s_g\,\Delta w_g\right]} +#' i.e. headcount_effect + wage_effect + composition_effect + interaction_effect, +#' in that order. Summing the *raw* group identity +#' (\eqn{\Delta n_g w_{g,t-1} + n_{g,t-1}\Delta w_g + \Delta n_g \Delta w_g}{delta_n_g*w_g,t-1 + ...}) +#' across groups is a different, valid decomposition of the same total, but +#' it does NOT isolate composition -- the raw headcount term silently +#' contains part of what the share-based version calls composition. Only +#' wage_effect is identical either way (\eqn{n_{g,t-1} \Delta w_g}{n_g,t-1*delta_w_g} +#' happens to need no share correction, since \eqn{n_{g,t-1}=N^C_{t-1}s_{g,t-1}}{n_g,t-1 = N^C_t-1 * s_g,t-1} exactly). +#' +#' \code{summary$component_sum == summary$actual_delta_w} by construction. +#' +#' @param dt data.table of employee-level micro-data, one row per employee +#' per \code{ref_date}. Must contain \code{ref_date}, \code{id_col}, +#' \code{group_cols}, and \code{wage_col}. +#' @param id_col employee id column (character name). +#' @param group_cols character vector of grouping columns. +#' @param wage_col individual wage column (character name). +#' +#' @return list(by_group, summary). \code{by_group} carries \code{status_grp}, +#' \code{group_wagebill_change} (always valid), and \code{wage_effect_grp}/ +#' \code{composition_effect_grp}/\code{entry_effect_grp}/\code{exit_effect_grp} +#' where applicable. There is no \code{headcount_effect_grp} column -- +#' the headcount effect exists only at the transition (aggregate) level; +#' see Details. +#' @importFrom data.table as.data.table setnames setorderv shift fifelse melt +#' @export +compute_wagebill_decomposition <- function(dt, id_col, group_cols, wage_col) { + + dt <- data.table::as.data.table(dt) + + # aggregate once to group x ref_date + agg <- dt[, .(n = data.table::uniqueN(get(id_col)), + w = mean(get(wage_col), na.rm = TRUE)), + by = c(group_cols, "ref_date")] + + # complete the panel: every group x every ref_date; absent = n := 0 + group_keys <- unique(agg[, ..group_cols]) + dates_dt <- data.table::data.table(ref_date = sort(unique(agg$ref_date))) + full <- group_keys[rep(seq_len(.N), each = nrow(dates_dt))] + full[, ref_date := rep(dates_dt$ref_date, times = nrow(group_keys))] + full <- merge(full, agg, by = c(group_cols, "ref_date"), all.x = TRUE) + full[is.na(n), n := 0] + data.table::setorderv(full, c(group_cols, "ref_date")) + + # lag onto the same row (replaces looping over date pairs) + full[, `:=`(n0 = data.table::shift(n, 1L, type = "lag"), + w0 = data.table::shift(w, 1L, type = "lag"), + ref_date_from = data.table::shift(ref_date, 1L, type = "lag")), + by = group_cols] + full <- full[!is.na(ref_date_from)] + data.table::setnames(full, c("n", "w", "ref_date"), c("n1", "w1", "ref_date_to")) + + full[, status_grp := data.table::fifelse(n0 > 0 & n1 > 0, "continuing", + data.table::fifelse(n0 == 0 & n1 > 0, "entrant", "exiter"))] + full[, group_wagebill_change := n1 * data.table::fifelse(is.na(w1), 0, w1) - + n0 * data.table::fifelse(is.na(w0), 0, w0)] + + # continuing-group totals and shares, broadcast onto every continuing row + # within its own transition -- this is the step the previous version skipped + full[status_grp == "continuing", `:=`(N0_C = sum(n0), N1_C = sum(n1)), + by = .(ref_date_from, ref_date_to)] + full[status_grp == "continuing", `:=`(s0 = n0 / N0_C, s1 = n1 / N1_C)] + full[status_grp == "continuing", delta_s := s1 - s0] + + # self-contained effects (no shares needed) + full[, wage_effect_grp := data.table::fifelse(status_grp == "continuing", n0 * (w1 - w0), NA_real_)] + full[, entry_effect_grp := data.table::fifelse(status_grp == "entrant", n1 * w1, NA_real_)] + full[, exit_effect_grp := data.table::fifelse(status_grp == "exiter", -n0 * w0, NA_real_)] + + # composition needs shares -- only computable once N0_C/N1_C are attached + full[, composition_effect_grp := data.table::fifelse(status_grp == "continuing", + N0_C * delta_s * w0, NA_real_)] + + # transition-level aggregation: headcount effect and the totals-only part + # of interaction have no group-level counterpart at all + summary_wide <- full[status_grp == "continuing", .( + N0_C = N0_C[1], N1_C = N1_C[1], + wbar0 = sum(s0 * w0), wbar1 = sum(s1 * w1), + wage_effect = sum(n0 * (w1 - w0)), + composition_effect = sum(N0_C * delta_s * w0), + interaction_group_part = sum(N0_C * delta_s * (w1 - w0)) + ), by = .(ref_date_from, ref_date_to)] + summary_wide[, headcount_effect := (N1_C - N0_C) * wbar0] + summary_wide[, interaction_effect := (N1_C - N0_C) * (wbar1 - wbar0) + interaction_group_part] + summary_wide[, c("N0_C", "N1_C", "wbar0", "wbar1", "interaction_group_part") := NULL] + + entry_exit <- full[, .(entry_effect = sum(entry_effect_grp, na.rm = TRUE), + exit_effect = sum(exit_effect_grp, na.rm = TRUE)), + by = .(ref_date_from, ref_date_to)] + summary_wide <- merge(summary_wide, entry_exit, by = c("ref_date_from", "ref_date_to")) + + summary_wide[, component_sum := headcount_effect + wage_effect + composition_effect + + interaction_effect + entry_effect + exit_effect] + summary_wide <- merge(summary_wide, + full[, .(actual_delta_w = sum(group_wagebill_change)), by = .(ref_date_from, ref_date_to)], + by = c("ref_date_from", "ref_date_to")) + + summary <- data.table::melt(summary_wide, id.vars = c("ref_date_from", "ref_date_to"), + variable.name = "component", value.name = "value") + + list(by_group = full[], summary = summary[]) +} \ No newline at end of file diff --git a/man/complete_dates.Rd b/man/complete_dates.Rd index 0bb41a4..e627702 100644 --- a/man/complete_dates.Rd +++ b/man/complete_dates.Rd @@ -4,7 +4,7 @@ \alias{complete_dates} \title{Complete Panel Data by Identifier and Reference Dates} \usage{ -complete_dates(data, id_col, start_date, end_date, freq = "year") +complete_dates(data, id_col, start_date = NULL, end_date = NULL, freq = "year") } \arguments{ \item{data}{A data.frame or data.table containing at least an identifier column.} diff --git a/man/compute_wagebill_decomposition.Rd b/man/compute_wagebill_decomposition.Rd new file mode 100644 index 0000000..2c14fea --- /dev/null +++ b/man/compute_wagebill_decomposition.Rd @@ -0,0 +1,60 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/wagebill.R +\name{compute_wagebill_decomposition} +\alias{compute_wagebill_decomposition} +\title{Decompose wage bill growth into headcount, wage, composition, and +interaction effects} +\usage{ +compute_wagebill_decomposition( + dt, + group_cols, + pay_col = NULL, + period_col, + periods = NULL, + id_col = NULL, + n_col = NULL, + w_col = NULL +) +} +\arguments{ +\item{dt}{data.table, employee-level (or pre-aggregated w/ n_col/w_col)} + +\item{group_cols}{grouping columns, e.g. c("grade", "institution")} + +\item{pay_col}{individual pay column (ignored if n_col/w_col given)} + +\item{period_col}{column identifying the period} + +\item{periods}{c(base, comparison); defaults to the two smallest values} + +\item{id_col}{optional employee id, for uniqueN() headcount} + +\item{n_col, w_col}{optional, if dt is already aggregated to group-period} +} +\value{ +list(by_group, summary) -- see Details +} +\description{ +Decompose wage bill growth into headcount, wage, composition, and +interaction effects +} +\details{ +Group-level identity (exact, no residual): + \code{delta_W_g = delta_n_g*w0_g + n0_g*delta_w_g + delta_n_g*delta_w_g} + \itemize{ + \item \code{headcount_effect_grp = delta_n_g * w0_g} -- people gained/lost in group g, valued at last year's pay + \item \code{wage_effect_grp = n0_g * delta_w_g} -- last year's staff in group g, valued at this year's raise + \item \code{interaction_effect_grp = delta_n_g * delta_w_g} -- new staff paid at the new rate (joint effect) + } + +Aggregate split, using group shares \code{s_g = n_g/N} to separate "more +people" from "people shifted toward higher/lower-paid groups": + \itemize{ + \item \code{headcount_effect} -- growth from total headcount change alone + \item \code{wage_effect} -- growth from pay raises within groups, at last year's workforce mix + \item \code{composition_effect} -- growth from the mix shifting toward higher/lower-paid groups + \item \code{interaction_effect} -- leftover 2nd-order cross terms; usually small, + large only when hiring and raises were concentrated in the same groups + } +\code{summary$component_sum == summary$actual_delta_w} by construction (validation check). +} From 487774ea482ac7bb456d5dbbcf110e9fb1a97860 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Mon, 14 Sep 2026 23:41:31 -0400 Subject: [PATCH 03/23] keep at it with the wage bill --- NAMESPACE | 7 +- R/wagebill.R | 215 ++++++++++--------- man/compute_growth_decomposition.Rd | 32 +++ man/compute_wagebill_decomposition.Rd | 60 ------ tests/testthat/test-wagebill_decomposition.R | 66 ++++++ 5 files changed, 215 insertions(+), 165 deletions(-) create mode 100644 man/compute_growth_decomposition.Rd delete mode 100644 man/compute_wagebill_decomposition.Rd create mode 100644 tests/testthat/test-wagebill_decomposition.R diff --git a/NAMESPACE b/NAMESPACE index 928564f..860b65c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -19,6 +19,7 @@ export(compute_fastsummary) export(compute_global_consistency) export(compute_global_coverage) export(compute_growth) +export(compute_growth_decomposition) export(compute_growth_summary) export(compute_movement_cost) export(compute_pension_ratio) @@ -29,7 +30,6 @@ export(compute_time_trend) export(compute_trend_summary) export(compute_value_consistency) export(compute_wagebill) -export(compute_wagebill_decomposition) export(compute_workforce_movement) export(convert_constant_ppp) export(count_entity) @@ -95,6 +95,9 @@ import(httr) importFrom(broom,tidy) importFrom(collapse,fquantile) importFrom(data.table, + ":=", + .N, + .SD, CJ, as.data.table, copy, @@ -263,7 +266,9 @@ importFrom(tibble, ) importFrom(tidygraph,as_tbl_graph) importFrom(tidyr, + complete, nest, + nesting, pivot_longer, pivot_wider ) diff --git a/R/wagebill.R b/R/wagebill.R index 8bf26d0..ce809d0 100644 --- a/R/wagebill.R +++ b/R/wagebill.R @@ -1,121 +1,128 @@ -#' Decompose wage bill growth into headcount, wage, composition, entry, -#' exit, and interaction effects +#' Compute growth decomposition of wagebill #' -#' @details -#' Rows are classified per transition as continuing -#' (\eqn{n_{g,t-1}>0}{n_g,t-1>0} and \eqn{n_{g,t}>0}{n_g,t>0}), entrant -#' (\eqn{n_{g,t-1}=0}{n_g,t-1=0}), or exiter (\eqn{n_{g,t}=0}{n_g,t=0}). +#' @param .data A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary). +#' @param group_cols A character vector specifying the names of the columns to group by. +#' @param measure_col A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu"). +#' +#' @return A data.table with headcount, compensation, wagebill, the +#' continuing-period decomposition (employment/compensation/interaction +#' effects), entry/exit effects for panel gaps, and a `transition_type` +#' label for each row: "start" (first period observed, no baseline), +#' "continuing" (both this period and the prior period observed), +#' "entry" (reappears after a gap, or a genuinely new group_cols +#' combination), "exit" (last observed period before a gap begins), or +#' "gap" (an unobserved period that is not itself a boundary). #' -#' Entry and exit are self-contained (need only that group's own row): -#' \deqn{\text{entry\_effect} = \sum_{g \in B} n_{g,t} w_{g,t} \qquad \text{exit\_effect} = -\sum_{g \in D} n_{g,t-1} w_{g,t-1}} -#' -#' For continuing groups \eqn{C}, define shares \eqn{s_{g,t} = n_{g,t}/N^C_t}{s_g,t = n_g,t/N^C_t} -#' with \eqn{N^C_t = \sum_{g \in C} n_{g,t}}{N^C_t = sum_{g in C} n_g,t} and -#' \eqn{\bar w^C_t = \sum_{g \in C} s_{g,t} w_{g,t}}{w_bar^C_t = sum s_g,t*w_g,t}. -#' \strong{Only the headcount effect is a pure totals quantity with no -#' group-level counterpart; wage and composition are sums of per-group -#' terms, but the composition term requires the shares (hence the totals) -#' to be computed first:} -#' \deqn{\Delta N^C \bar w^C_{t-1} \;+\; \sum_{g \in C} n_{g,t-1}\,\Delta w_g \;+\; \sum_{g \in C} N^C_{t-1}\,\Delta s_g\, w_{g,t-1} \;+\; \left[\Delta N^C \Delta \bar w^C + \sum_{g \in C} N^C_{t-1}\,\Delta s_g\,\Delta w_g\right]} -#' i.e. headcount_effect + wage_effect + composition_effect + interaction_effect, -#' in that order. Summing the *raw* group identity -#' (\eqn{\Delta n_g w_{g,t-1} + n_{g,t-1}\Delta w_g + \Delta n_g \Delta w_g}{delta_n_g*w_g,t-1 + ...}) -#' across groups is a different, valid decomposition of the same total, but -#' it does NOT isolate composition -- the raw headcount term silently -#' contains part of what the share-based version calls composition. Only -#' wage_effect is identical either way (\eqn{n_{g,t-1} \Delta w_g}{n_g,t-1*delta_w_g} -#' happens to need no share correction, since \eqn{n_{g,t-1}=N^C_{t-1}s_{g,t-1}}{n_g,t-1 = N^C_t-1 * s_g,t-1} exactly). -#' -#' \code{summary$component_sum == summary$actual_delta_w} by construction. -#' -#' @param dt data.table of employee-level micro-data, one row per employee -#' per \code{ref_date}. Must contain \code{ref_date}, \code{id_col}, -#' \code{group_cols}, and \code{wage_col}. -#' @param id_col employee id column (character name). -#' @param group_cols character vector of grouping columns. -#' @param wage_col individual wage column (character name). -#' -#' @return list(by_group, summary). \code{by_group} carries \code{status_grp}, -#' \code{group_wagebill_change} (always valid), and \code{wage_effect_grp}/ -#' \code{composition_effect_grp}/\code{entry_effect_grp}/\code{exit_effect_grp} -#' where applicable. There is no \code{headcount_effect_grp} column -- -#' the headcount effect exists only at the transition (aggregate) level; -#' see Details. -#' @importFrom data.table as.data.table setnames setorderv shift fifelse melt +#' @importFrom data.table .N .SD := shift setorderv fcase +#' @importFrom dplyr all_of select +#' @importFrom tidyr complete nesting #' @export -compute_wagebill_decomposition <- function(dt, id_col, group_cols, wage_col) { +compute_growth_decomposition <- function( + .data, + group_cols = NULL, + measure_col = "gross_salary_lcu" +) { + dt <- data.table::as.data.table(.data) + + if (!is.null(group_cols)) { + keep <- rowSums(is.na(dt[, ..group_cols])) == 0 + dt <- dt[keep] + } + + by_cols <- c(group_cols, "ref_date") - dt <- data.table::as.data.table(dt) + summary_table <- dt[ + !is.na(get(measure_col)), + .( + headcount = .N, + compensation = mean(get(measure_col)), + wagebill = sum(get(measure_col)) + ), + by = by_cols + ] - # aggregate once to group x ref_date - agg <- dt[, .(n = data.table::uniqueN(get(id_col)), - w = mean(get(wage_col), na.rm = TRUE)), - by = c(group_cols, "ref_date")] + summary_table[, is_observed := TRUE] - # complete the panel: every group x every ref_date; absent = n := 0 - group_keys <- unique(agg[, ..group_cols]) - dates_dt <- data.table::data.table(ref_date = sort(unique(agg$ref_date))) - full <- group_keys[rep(seq_len(.N), each = nrow(dates_dt))] - full[, ref_date := rep(dates_dt$ref_date, times = nrow(group_keys))] - full <- merge(full, agg, by = c(group_cols, "ref_date"), all.x = TRUE) - full[is.na(n), n := 0] - data.table::setorderv(full, c(group_cols, "ref_date")) + # nesting() preserves only observed group_cols combinations, so a group + # that starts reporting mid-panel gets real "entry" rows, not fabricated + # combinations that never existed + if (!is.null(group_cols)) { + summary_table <- summary_table |> + tidyr::complete( + tidyr::nesting(!!!rlang::syms(group_cols)), + ref_date, + fill = list(headcount = 0, compensation = NA_real_) + ) + } else { + summary_table <- summary_table |> + tidyr::complete(ref_date, fill = list(headcount = 0, compensation = NA_real_)) + } - # lag onto the same row (replaces looping over date pairs) - full[, `:=`(n0 = data.table::shift(n, 1L, type = "lag"), - w0 = data.table::shift(w, 1L, type = "lag"), - ref_date_from = data.table::shift(ref_date, 1L, type = "lag")), - by = group_cols] - full <- full[!is.na(ref_date_from)] - data.table::setnames(full, c("n", "w", "ref_date"), c("n1", "w1", "ref_date_to")) + summary_table <- data.table::as.data.table(summary_table) + summary_table[is.na(is_observed), is_observed := FALSE] - full[, status_grp := data.table::fifelse(n0 > 0 & n1 > 0, "continuing", - data.table::fifelse(n0 == 0 & n1 > 0, "entrant", "exiter"))] - full[, group_wagebill_change := n1 * data.table::fifelse(is.na(w1), 0, w1) - - n0 * data.table::fifelse(is.na(w0), 0, w0)] + data.table::setorderv(summary_table, by_cols) - # continuing-group totals and shares, broadcast onto every continuing row - # within its own transition -- this is the step the previous version skipped - full[status_grp == "continuing", `:=`(N0_C = sum(n0), N1_C = sum(n1)), - by = .(ref_date_from, ref_date_to)] - full[status_grp == "continuing", `:=`(s0 = n0 / N0_C, s1 = n1 / N1_C)] - full[status_grp == "continuing", delta_s := s1 - s0] + summary_table[, + `:=`( + headcount_lag = data.table::shift(headcount, type = "lag"), + compensation_lag = data.table::shift(compensation, type = "lag"), + wagebill_lag = data.table::shift(wagebill, type = "lag"), + observed_lag = data.table::shift(is_observed, type = "lag") + ), + by = group_cols + ] - # self-contained effects (no shares needed) - full[, wage_effect_grp := data.table::fifelse(status_grp == "continuing", n0 * (w1 - w0), NA_real_)] - full[, entry_effect_grp := data.table::fifelse(status_grp == "entrant", n1 * w1, NA_real_)] - full[, exit_effect_grp := data.table::fifelse(status_grp == "exiter", -n0 * w0, NA_real_)] + # classify every row's relationship to the prior period + summary_table[, transition_type := data.table::fcase( + is.na(observed_lag) & is_observed, "start", + is.na(observed_lag) & !is_observed, "gap", + observed_lag & is_observed, "continuing", + observed_lag & !is_observed, "exit", + !observed_lag & is_observed, "entry", + !observed_lag & !is_observed, "gap" + )] - # composition needs shares -- only computable once N0_C/N1_C are attached - full[, composition_effect_grp := data.table::fifelse(status_grp == "continuing", - N0_C * delta_s * w0, NA_real_)] + summary_table[, `:=`( + delta_headcount = headcount - headcount_lag, + delta_compensation = compensation - compensation_lag + )] - # transition-level aggregation: headcount effect and the totals-only part - # of interaction have no group-level counterpart at all - summary_wide <- full[status_grp == "continuing", .( - N0_C = N0_C[1], N1_C = N1_C[1], - wbar0 = sum(s0 * w0), wbar1 = sum(s1 * w1), - wage_effect = sum(n0 * (w1 - w0)), - composition_effect = sum(N0_C * delta_s * w0), - interaction_group_part = sum(N0_C * delta_s * (w1 - w0)) - ), by = .(ref_date_from, ref_date_to)] - summary_wide[, headcount_effect := (N1_C - N0_C) * wbar0] - summary_wide[, interaction_effect := (N1_C - N0_C) * (wbar1 - wbar0) + interaction_group_part] - summary_wide[, c("N0_C", "N1_C", "wbar0", "wbar1", "interaction_group_part") := NULL] + summary_table[, `:=`( + employment_effect = compensation_lag * delta_headcount, + compensation_effect = headcount_lag * delta_compensation, + interaction_effect = delta_headcount * delta_compensation + )] - entry_exit <- full[, .(entry_effect = sum(entry_effect_grp, na.rm = TRUE), - exit_effect = sum(exit_effect_grp, na.rm = TRUE)), - by = .(ref_date_from, ref_date_to)] - summary_wide <- merge(summary_wide, entry_exit, by = c("ref_date_from", "ref_date_to")) + # these three effects only mean something when comparing two real + # observations -- null them out everywhere else so an entry/exit/gap + # row can't masquerade as ordinary continuing-period growth + summary_table[ + transition_type != "continuing", + `:=`( + delta_headcount = NA_real_, delta_compensation = NA_real_, + employment_effect = NA_real_, compensation_effect = NA_real_, + interaction_effect = NA_real_ + ) + ] - summary_wide[, component_sum := headcount_effect + wage_effect + composition_effect + - interaction_effect + entry_effect + exit_effect] - summary_wide <- merge(summary_wide, - full[, .(actual_delta_w = sum(group_wagebill_change)), by = .(ref_date_from, ref_date_to)], - by = c("ref_date_from", "ref_date_to")) + summary_table[, `:=`(entry_effect = NA_real_, exit_effect = NA_real_)] + summary_table[transition_type == "entry", entry_effect := wagebill] + summary_table[transition_type == "exit", exit_effect := -wagebill_lag] - summary <- data.table::melt(summary_wide, id.vars = c("ref_date_from", "ref_date_to"), - variable.name = "component", value.name = "value") + summary_table[, total_effect := data.table::fcase( + transition_type == "continuing", + employment_effect + compensation_effect + interaction_effect, + transition_type == "entry", entry_effect, + transition_type == "exit", exit_effect, + default = NA_real_ + )] - list(by_group = full[], summary = summary[]) + out_cols <- c( + group_cols, "ref_date", "transition_type", "headcount", "headcount_lag", + "compensation", "compensation_lag", "employment_effect", + "compensation_effect", "interaction_effect", "entry_effect", + "exit_effect", "total_effect", "wagebill", "is_observed" + ) + summary_table[, ..out_cols] } \ No newline at end of file diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd new file mode 100644 index 0000000..3cbfaee --- /dev/null +++ b/man/compute_growth_decomposition.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/wagebill.R +\name{compute_growth_decomposition} +\alias{compute_growth_decomposition} +\title{Compute growth decomposition of wagebill} +\usage{ +compute_growth_decomposition( + .data, + group_cols = NULL, + measure_col = "gross_salary_lcu" +) +} +\arguments{ +\item{.data}{A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary).} + +\item{group_cols}{A character vector specifying the names of the columns to group by.} + +\item{measure_col}{A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu").} +} +\value{ +A data.table with headcount, compensation, wagebill, the + continuing-period decomposition (employment/compensation/interaction + effects), entry/exit effects for panel gaps, and a `transition_type` + label for each row: "start" (first period observed, no baseline), + "continuing" (both this period and the prior period observed), + "entry" (reappears after a gap, or a genuinely new group_cols + combination), "exit" (last observed period before a gap begins), or + "gap" (an unobserved period that is not itself a boundary). +} +\description{ +Compute growth decomposition of wagebill +} diff --git a/man/compute_wagebill_decomposition.Rd b/man/compute_wagebill_decomposition.Rd deleted file mode 100644 index 2c14fea..0000000 --- a/man/compute_wagebill_decomposition.Rd +++ /dev/null @@ -1,60 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill.R -\name{compute_wagebill_decomposition} -\alias{compute_wagebill_decomposition} -\title{Decompose wage bill growth into headcount, wage, composition, and -interaction effects} -\usage{ -compute_wagebill_decomposition( - dt, - group_cols, - pay_col = NULL, - period_col, - periods = NULL, - id_col = NULL, - n_col = NULL, - w_col = NULL -) -} -\arguments{ -\item{dt}{data.table, employee-level (or pre-aggregated w/ n_col/w_col)} - -\item{group_cols}{grouping columns, e.g. c("grade", "institution")} - -\item{pay_col}{individual pay column (ignored if n_col/w_col given)} - -\item{period_col}{column identifying the period} - -\item{periods}{c(base, comparison); defaults to the two smallest values} - -\item{id_col}{optional employee id, for uniqueN() headcount} - -\item{n_col, w_col}{optional, if dt is already aggregated to group-period} -} -\value{ -list(by_group, summary) -- see Details -} -\description{ -Decompose wage bill growth into headcount, wage, composition, and -interaction effects -} -\details{ -Group-level identity (exact, no residual): - \code{delta_W_g = delta_n_g*w0_g + n0_g*delta_w_g + delta_n_g*delta_w_g} - \itemize{ - \item \code{headcount_effect_grp = delta_n_g * w0_g} -- people gained/lost in group g, valued at last year's pay - \item \code{wage_effect_grp = n0_g * delta_w_g} -- last year's staff in group g, valued at this year's raise - \item \code{interaction_effect_grp = delta_n_g * delta_w_g} -- new staff paid at the new rate (joint effect) - } - -Aggregate split, using group shares \code{s_g = n_g/N} to separate "more -people" from "people shifted toward higher/lower-paid groups": - \itemize{ - \item \code{headcount_effect} -- growth from total headcount change alone - \item \code{wage_effect} -- growth from pay raises within groups, at last year's workforce mix - \item \code{composition_effect} -- growth from the mix shifting toward higher/lower-paid groups - \item \code{interaction_effect} -- leftover 2nd-order cross terms; usually small, - large only when hiring and raises were concentrated in the same groups - } -\code{summary$component_sum == summary$actual_delta_w} by construction (validation check). -} diff --git a/tests/testthat/test-wagebill_decomposition.R b/tests/testthat/test-wagebill_decomposition.R new file mode 100644 index 0000000..89191a0 --- /dev/null +++ b/tests/testthat/test-wagebill_decomposition.R @@ -0,0 +1,66 @@ +test_that("mid-panel gap produces exit then entry, not a fabricated collapse", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2023-01-01")), # 2021, 2022 missing + gross_salary_lcu = c(100000, 130000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + + expect_equal(res[res$ref_date == as.Date("2021-01-01"), "transition_type"], "exit") + expect_equal(res[res$ref_date == as.Date("2022-01-01"), "transition_type"], "gap") + expect_equal(res[res$ref_date == as.Date("2023-01-01"), "transition_type"], "entry") + + expect_equal(res[res$ref_date == as.Date("2021-01-01"), "exit_effect"], -100000) + expect_equal(res[res$ref_date == as.Date("2023-01-01"), "entry_effect"], 130000) + # nothing should look like an ordinary continuing-period effect across the gap + expect_true(is.na(res[res$ref_date == as.Date("2021-01-01"), "total_effect"]) == FALSE) +}) + +test_that("entry/exit effects telescope to the correct total wagebill change", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2023-01-01")), + gross_salary_lcu = c(100000, 130000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + expect_equal(sum(res$total_effect, na.rm = TRUE), 130000 - 100000) +}) + +test_that("a group entering mid-panel is classified entry, not a fabricated collapse before it existed", { + d <- data.frame( + dept = c("A", "A", "B"), + ref_date = as.Date(c("2020-01-01", "2021-01-01", "2021-01-01")), + gross_salary_lcu = c(100000, 105000, 50000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + b_2020 <- res[res$dept == "B" & res$ref_date == as.Date("2020-01-01"), ] + b_2021 <- res[res$dept == "B" & res$ref_date == as.Date("2021-01-01"), ] + expect_equal(b_2020$transition_type, "gap") # dept B didn't exist yet + expect_equal(b_2021$transition_type, "entry") # first real appearance + expect_equal(b_2021$entry_effect, 50000) +}) + +test_that("the very first period in the panel is 'start', not 'entry' (left-censoring)", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2021-01-01")), + gross_salary_lcu = c(100000, 105000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + first_row <- res[res$ref_date == as.Date("2020-01-01"), ] + expect_equal(first_row$transition_type, "start") + expect_true(is.na(first_row$total_effect)) + expect_true(is.na(first_row$entry_effect)) # not conflated with a genuine entry +}) + +test_that("a balanced panel is entirely 'continuing' after the first period", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2021-01-01", "2022-01-01")), + gross_salary_lcu = c(100000, 105000, 110000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + expect_equal(res$transition_type, c("start", "continuing", "continuing")) + expect_true(all(is.na(res$entry_effect))) + expect_true(all(is.na(res$exit_effect))) +}) \ No newline at end of file From e4a86bcb3c3aafd0ad6683fe576064fc1bbd2f20 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Tue, 15 Sep 2026 08:02:36 -0400 Subject: [PATCH 04/23] incorporate entry and exit effects --- R/wagebill.R | 12 +++++++--- R/zzz.R | 24 +++++++++++++++++++- tests/testthat/test-wagebill_decomposition.R | 14 ++++++------ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/R/wagebill.R b/R/wagebill.R index ce809d0..416649e 100644 --- a/R/wagebill.R +++ b/R/wagebill.R @@ -43,6 +43,10 @@ compute_growth_decomposition <- function( summary_table[, is_observed := TRUE] + min_ref_date <- min(.data$ref_date) + max_ref_date <- max(.data$ref_date) + date_interval <- guess_date_frequency(.data) + # nesting() preserves only observed group_cols combinations, so a group # that starts reporting mid-panel gets real "entry" rows, not fabricated # combinations that never existed @@ -50,7 +54,7 @@ compute_growth_decomposition <- function( summary_table <- summary_table |> tidyr::complete( tidyr::nesting(!!!rlang::syms(group_cols)), - ref_date, + ref_date = seq(min_ref_date, max_ref_date, by = date_interval), fill = list(headcount = 0, compensation = NA_real_) ) } else { @@ -122,7 +126,9 @@ compute_growth_decomposition <- function( group_cols, "ref_date", "transition_type", "headcount", "headcount_lag", "compensation", "compensation_lag", "employment_effect", "compensation_effect", "interaction_effect", "entry_effect", - "exit_effect", "total_effect", "wagebill", "is_observed" + "exit_effect", "total_effect", "wagebill", "transition_type" ) - summary_table[, ..out_cols] + + summary_table[, ..out_cols] |> + data.table::as.data.table() } \ No newline at end of file diff --git a/R/zzz.R b/R/zzz.R index c9b8ed3..4dc4158 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -208,7 +208,29 @@ if (getRversion() >= "2.15.1") { "conf.low", "conf.high", # transition network - "nodes" + "nodes", + # compute growth decomposition + "ref_date", + "transition_type", + "headcount", + "headcount_lag", + "compensation", + "compensation_lag", + "employment_effect", + "compensation_effect", + "interaction_effect", + "entry_effect", + "exit_effect", + "total_effect", + "wagebill", + "transition_type", + "..out_cols", + "..group_cols", + "delta_compensation", + "delta_headcount", + "is_observed", + "observed_lag", + "wagebill_lag" )) } diff --git a/tests/testthat/test-wagebill_decomposition.R b/tests/testthat/test-wagebill_decomposition.R index 89191a0..7b103f8 100644 --- a/tests/testthat/test-wagebill_decomposition.R +++ b/tests/testthat/test-wagebill_decomposition.R @@ -6,14 +6,14 @@ test_that("mid-panel gap produces exit then entry, not a fabricated collapse", { ) res <- compute_growth_decomposition(d, group_cols = "dept") - expect_equal(res[res$ref_date == as.Date("2021-01-01"), "transition_type"], "exit") - expect_equal(res[res$ref_date == as.Date("2022-01-01"), "transition_type"], "gap") - expect_equal(res[res$ref_date == as.Date("2023-01-01"), "transition_type"], "entry") + expect_equal(res[res$ref_date == as.Date("2021-01-01"), "transition_type"] |> dplyr::pull(), "exit") + expect_equal(res[res$ref_date == as.Date("2022-01-01"), "transition_type"] |> dplyr::pull(), "gap") + expect_equal(res[res$ref_date == as.Date("2023-01-01"), "transition_type"] |> dplyr::pull(), "entry") - expect_equal(res[res$ref_date == as.Date("2021-01-01"), "exit_effect"], -100000) - expect_equal(res[res$ref_date == as.Date("2023-01-01"), "entry_effect"], 130000) + expect_equal(res[res$ref_date == as.Date("2021-01-01"), "exit_effect"] |> dplyr::pull(), -100000) + expect_equal(res[res$ref_date == as.Date("2023-01-01"), "entry_effect"] |> dplyr::pull(), 130000) # nothing should look like an ordinary continuing-period effect across the gap - expect_true(is.na(res[res$ref_date == as.Date("2021-01-01"), "total_effect"]) == FALSE) + expect_true(is.na(res[res$ref_date == as.Date("2021-01-01"), "total_effect"] |> dplyr::pull()) == FALSE) }) test_that("entry/exit effects telescope to the correct total wagebill change", { @@ -63,4 +63,4 @@ test_that("a balanced panel is entirely 'continuing' after the first period", { expect_equal(res$transition_type, c("start", "continuing", "continuing")) expect_true(all(is.na(res$entry_effect))) expect_true(all(is.na(res$exit_effect))) -}) \ No newline at end of file +}) From 502affb5e3e9de60c1f9207a52f574955fcc80f8 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Tue, 15 Sep 2026 08:03:24 -0400 Subject: [PATCH 05/23] relax github workflows --- .github/workflows/R-CMD-check.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index e261211..45b3ec4 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -2,6 +2,7 @@ # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: + branches: [main, master] pull_request: name: R-CMD-check.yaml From 23618128fa06bbab6d5b8c5436375c2540d6a1e2 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Tue, 15 Sep 2026 13:38:26 -0400 Subject: [PATCH 06/23] update renv.lock --- renv.lock | 1138 +++-------------------------------------------------- 1 file changed, 58 insertions(+), 1080 deletions(-) diff --git a/renv.lock b/renv.lock index 8eb976f..9ad30ae 100644 --- a/renv.lock +++ b/renv.lock @@ -9,58 +9,6 @@ ] }, "Packages": { - "DBI": { - "Package": "DBI", - "Version": "1.3.0", - "Source": "Repository", - "Title": "R Database Interface", - "Date": "2026-02-11", - "Authors@R": "c( person(\"R Special Interest Group on Databases (R-SIG-DB)\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\") )", - "Description": "A database interface definition for communication between R and relational database management systems. All classes in this package are virtual and need to be extended by the various R/DBMS implementations.", - "License": "LGPL (>= 2.1)", - "URL": "https://dbi.r-dbi.org, https://github.com/r-dbi/DBI", - "BugReports": "https://github.com/r-dbi/DBI/issues", - "Depends": [ - "methods", - "R (>= 3.0.0)" - ], - "Suggests": [ - "arrow", - "blob", - "callr", - "covr", - "DBItest (>= 1.8.2)", - "dbplyr", - "downlit", - "dplyr", - "glue", - "hms", - "knitr", - "magrittr", - "nanoarrow (>= 0.3.0.1)", - "otel", - "otelsdk", - "RMariaDB", - "rmarkdown", - "rprojroot", - "RSQLite (>= 1.1-2)", - "testthat (>= 3.0.0)", - "vctrs", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/check": "r-dbi/DBItest", - "Config/Needs/website": "r-dbi/DBItest, r-dbi/dbitemplate, adbi, AzureKusto, bigrquery, DatabaseConnector, dittodb, duckdb, implyr, lazysf, odbc, pool, RAthena, IMSMWU/RClickhouse, RH2, RJDBC, RMariaDB, RMySQL, RPostgres, RPostgreSQL, RPresto, RSQLite, sergeant, sparklyr, withr", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "no", - "Author": "R Special Interest Group on Databases (R-SIG-DB) [aut], Hadley Wickham [aut], Kirill Müller [aut, cre] (ORCID: ), R Consortium [fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, "ISOcodes": { "Package": "ISOcodes", "Version": "2026.03.28", @@ -203,32 +151,6 @@ "NeedsCompilation": "no", "Repository": "CRAN" }, - "RCurl": { - "Package": "RCurl", - "Version": "1.98-1.19", - "Source": "Repository", - "Title": "General Network (HTTP/FTP/...) Client Interface for R", - "Authors@R": "c(person(\"CRAN Team\", role = 'ctb', email = \"CRAN@r-project.org\", comment = \"de facto maintainer in 2013-2026\"), person(\"Duncan\", \"Temple Lang\", role = \"aut\", email = \"duncan@r-project.org\", comment = c(ORCID = \"0000-0003-0159-1546\")), person(\"Ivan\", \"Krylov\", role = \"cre\", email = \"ikrylov@disroot.org\"))", - "SystemRequirements": "GNU make, libcurl", - "Description": "A wrapper for 'libcurl' Provides functions to allow one to compose general HTTP requests and provides convenient functions to fetch URIs, get & post forms, etc. and process the results returned by the Web server. This provides a great deal of control over the HTTP/FTP/... connection and the form of the request while providing a higher-level interface than is available just using R socket connections. Additionally, the underlying implementation is robust and extensive, supporting FTP/FTPS/TFTP (uploads and downloads), SSL/HTTPS, telnet, dict, ldap, and also supports cookies, redirects, authentication, etc.", - "License": "BSD_3_clause + file LICENSE", - "Depends": [ - "R (>= 3.4.0)", - "methods" - ], - "Imports": [ - "bitops" - ], - "Suggests": [ - "XML" - ], - "Collate": "aclassesEnums.R bitClasses.R xbits.R base64.R binary.S classes.S curl.S curlAuthConstants.R curlEnums.R curlError.R curlInfo.S dynamic.R form.S getFormParams.R getURLContent.R header.R http.R httpError.R httpErrors.R iconv.R info.S mime.R multi.S options.S scp.R support.S upload.R urlExists.R zclone.R zzz.R", - "BugReports": "https://codeberg.org/aitap/RCurl", - "NeedsCompilation": "yes", - "Author": "CRAN Team [ctb] (de facto maintainer in 2013-2026), Duncan Temple Lang [aut] (ORCID: ), Ivan Krylov [cre]", - "Maintainer": "Ivan Krylov ", - "Repository": "CRAN" - }, "Rcpp": { "Package": "Rcpp", "Version": "1.1.2", @@ -261,6 +183,46 @@ "Maintainer": "Dirk Eddelbuettel ", "Repository": "CRAN" }, + "RcppArmadillo": { + "Package": "RcppArmadillo", + "Version": "15.6.0-1", + "Source": "Repository", + "Type": "Package", + "Title": "'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library", + "Date": "2026-09-07", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Binxiang\", \"Ni\", role = \"aut\"), person(\"Conrad\", \"Sanderson\", role = \"aut\", comment = c(ORCID = \"0000-0002-0049-4501\")))", + "Description": "'Armadillo' is a templated C++ linear algebra library aiming towards a good balance between speed and ease of use. It provides high-level syntax and functionality deliberately similar to Matlab. It is useful for algorithm development directly in C++, or quick conversion of research code into production environments. It provides efficient classes for vectors, matrices and cubes where dense and sparse matrices are supported. Integer, floating point and complex numbers are supported. A sophisticated expression evaluator (based on template meta-programming) automatically combines several operations to increase speed and efficiency. Dynamic evaluation automatically chooses optimal code paths based on detected matrix structures. Matrix decompositions are provided through integration with LAPACK, or one of its high performance drop-in replacements (such as 'MKL' or 'OpenBLAS'). It can automatically use 'OpenMP' multi-threading (parallelisation) to speed up computationally expensive operations. . The 'RcppArmadillo' package includes the header files from the 'Armadillo' library; users do not need to install 'Armadillo' itself in order to use 'RcppArmadillo'. Starting from release 15.0.0, the minimum compilation standard is C++14. . Since release 7.800.0, 'Armadillo' is licensed under Apache License 2; previous releases were under licensed as MPL 2.0 from version 3.800.0 onwards and LGPL-3 prior to that; 'RcppArmadillo' (the 'Rcpp' bindings/bridge to Armadillo) is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", + "License": "GPL (>= 2)", + "LazyLoad": "yes", + "Depends": [ + "R (>= 3.3.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "Imports": [ + "Rcpp (>= 1.1.1)", + "stats", + "utils", + "methods" + ], + "Suggests": [ + "tinytest", + "Matrix (>= 1.3.0)", + "pkgKitten", + "reticulate", + "slam" + ], + "URL": "https://github.com/RcppCore/RcppArmadillo, https://dirk.eddelbuettel.com/code/rcpp.armadillo.html", + "BugReports": "https://github.com/RcppCore/RcppArmadillo/issues", + "RoxygenNote": "6.0.1", + "Encoding": "UTF-8", + "VignetteBuilder": "Rcpp", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), Binxiang Ni [aut], Conrad Sanderson [aut] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, "S7": { "Package": "S7", "Version": "0.2.2", @@ -528,53 +490,6 @@ "NeedsCompilation": "yes", "Repository": "CRAN" }, - "bench": { - "Package": "bench", - "Version": "1.1.4", - "Source": "Repository", - "Title": "High Precision Timing of R Expressions", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"Drew\", \"Schmidt\", role = \"ctb\", comment = \"read_proc_file implementation\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to accurately benchmark and analyze execution times for R expressions.", - "License": "MIT + file LICENSE", - "URL": "https://bench.r-lib.org/, https://github.com/r-lib/bench", - "BugReports": "https://github.com/r-lib/bench/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "glue (>= 1.8.0)", - "methods", - "pillar (>= 1.10.1)", - "profmem (>= 0.6.0)", - "rlang (>= 1.1.4)", - "stats", - "tibble (>= 3.2.1)", - "utils" - ], - "Suggests": [ - "covr", - "dplyr", - "forcats", - "ggbeeswarm", - "ggplot2 (>= 3.5.1)", - "ggridges", - "parallel", - "scales", - "testthat (>= 3.2.3)", - "tidyr (>= 1.3.1)", - "vctrs (>= 0.6.5)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-01-16", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut], Davis Vaughan [aut, cre], Drew Schmidt [ctb] (read_proc_file implementation), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, "bigD": { "Package": "bigD", "Version": "0.3.1", @@ -688,92 +603,6 @@ "Maintainer": "Martin Maechler ", "Repository": "CRAN" }, - "blastula": { - "Package": "blastula", - "Version": "0.3.6", - "Source": "Repository", - "Type": "Package", - "Title": "Easily Send HTML Email Messages", - "Description": "Compose and send out responsive HTML email messages that render perfectly across a range of email clients and device sizes. Helper functions let the user insert embedded images, web link buttons, and 'ggplot2' plot objects into the message body. Messages can be sent through an 'SMTP' server, through the 'Posit Connect' service, or through the 'Mailgun' API service .", - "Authors@R": "c( person(\"Richard\", \"Iannone\", role = c(\"aut\", \"cre\"), email = \"rich@posit.co\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\", email = \"jeroen@berkeley.edu\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Ted\", \"Goas\", role = \"cph\", comment = \"cerberus-meta.html\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/blastula, https://pkgs.rstudio.com/blastula/", - "BugReports": "https://github.com/rstudio/blastula/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "base64enc (>= 0.1-3)", - "commonmark (>= 1.7)", - "curl (>= 5.2)", - "digest", - "dplyr (>= 1.1.0)", - "fs (>= 1.3.1)", - "getPass (>= 0.2-2)", - "here (>= 1.0.0)", - "htmltools (>= 0.5.7)", - "httr (>= 1.4.0)", - "jsonlite (>= 1.8.0)", - "magrittr (>= 1.5)", - "mime (>= 0.6)", - "rlang (>= 1.0)", - "rmarkdown", - "stringr (>= 1.4.0)", - "uuid (>= 0.1-2)" - ], - "Suggests": [ - "covr", - "ggplot2", - "glue", - "testthat (>= 3.0.0)", - "keyring", - "knitr", - "xml2", - "openxlsx", - "withr" - ], - "SystemRequirements": "pandoc (>= 1.12.3) - http://pandoc.org", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Config/testthat/edition": "3", - "Language": "en-US", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Joe Cheng [aut], Jeroen Ooms [ctb] (), Ted Goas [cph] (cerberus-meta.html), Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "blob": { - "Package": "blob", - "Version": "1.3.0", - "Source": "Repository", - "Title": "A Simple S3 Class for Representing Vectors of Binary Data ('BLOBS')", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "R's raw vector is useful for storing a single binary object. What if you want to put a vector of them in a data frame? The 'blob' package provides the blob object, a list of raw vectors, suitable for use as a column in data frame.", - "License": "MIT + file LICENSE", - "URL": "https://blob.tidyverse.org, https://github.com/tidyverse/blob", - "BugReports": "https://github.com/tidyverse/blob/issues", - "Imports": [ - "methods", - "rlang", - "vctrs (>= 0.2.1)" - ], - "Suggests": [ - "covr", - "crayon", - "pillar (>= 1.2.1)", - "testthat (>= 3.0.0)" - ], - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Kirill Müller [cre], RStudio [cph, fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, "brew": { "Package": "brew", "Version": "1.0-10", @@ -1414,32 +1243,6 @@ "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "cropcircles": { - "Package": "cropcircles", - "Version": "0.2.4", - "Source": "Repository", - "Type": "Package", - "Title": "Crops an Image to a Circle", - "Authors@R": "person( given = \"Daniel\", family = \"Oehm\", role = c(\"aut\", \"cre\"), email = \"danieloehm@gmail.com\" )", - "URL": "https://github.com/doehm/cropcircles", - "BugReports": "https://github.com/doehm/cropcircles/issues", - "Description": "Images are cropped to a circle with a transparent background. The function takes a vector of images, either local or from a link, and circle crops the image. Paths to the cropped image are returned for plotting with 'ggplot2'. Also includes cropping to a hexagon, heart, parallelogram, and square.", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "glue", - "magick", - "purrr" - ], - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Daniel Oehm [aut, cre]", - "Maintainer": "Daniel Oehm ", - "Repository": "CRAN" - }, "crosstalk": { "Package": "crosstalk", "Version": "1.2.2", @@ -1540,71 +1343,6 @@ "Maintainer": "Tyson Barrett ", "Repository": "CRAN" }, - "dbplyr": { - "Package": "dbplyr", - "Version": "2.6.0", - "Source": "Repository", - "Type": "Package", - "Title": "A 'dplyr' Back End for Databases", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Edgar\", \"Ruiz\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A 'dplyr' back end for databases that allows you to work with remote database tables as if they are in-memory data frames. Basic features work with any database that has a 'DBI' back end; more advanced features require 'SQL' translation to be provided by the package author.", - "License": "MIT + file LICENSE", - "URL": "https://dbplyr.tidyverse.org/, https://github.com/tidyverse/dbplyr", - "BugReports": "https://github.com/tidyverse/dbplyr/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "blob (>= 1.2.0)", - "cli (>= 3.6.1)", - "DBI (>= 1.1.3)", - "dplyr (>= 1.1.2)", - "glue (>= 1.6.2)", - "lifecycle (>= 1.0.3)", - "magrittr", - "methods", - "pillar (>= 1.9.0)", - "purrr (>= 1.0.1)", - "R6 (>= 2.2.2)", - "rlang (>= 1.1.1)", - "tibble (>= 3.2.1)", - "tidyr (>= 1.3.0)", - "tidyselect (>= 1.2.1)", - "utils", - "vctrs (>= 0.6.3)", - "withr (>= 2.5.0)" - ], - "Suggests": [ - "adbcdrivermanager", - "adbcsqlite", - "adbi", - "bit64", - "covr", - "knitr", - "Lahman", - "nycflights13", - "odbc (>= 1.4.2)", - "RJDBC", - "RMariaDB (>= 1.2.2)", - "rmarkdown", - "RPostgres (>= 1.4.5)", - "RPostgreSQL", - "RSQLite (>= 2.3.8)", - "testthat (>= 3.1.10)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "Language": "en-gb", - "Collate": "'verb-copy-inline.R' 'verb-copy-to.R' 'db-sql.R' 'db.R' 'utils-check.R' 'import-standalone-types-check.R' 'import-standalone-obj-type.R' 'utils.R' 'sql.R' 'escape.R' 'translate-sql-cut.R' 'translate-sql-string.R' 'translate-sql-aggregate.R' 'translate-sql-scalar.R' 'translate-sql-helpers.R' 'translate-sql-window.R' 'translate-sql-conditional.R' 'backend-.R' 'backend-access.R' 'backend-adbc.R' 'backend-db2.R' 'backend-hana.R' 'backend-hive.R' 'backend-impala.R' 'backend-jdbc.R' 'backend-mssql.R' 'backend-mysql.R' 'backend-odbc.R' 'backend-oracle.R' 'backend-postgres.R' 'backend-postgres-old.R' 'backend-redshift.R' 'backend-snowflake.R' 'backend-spark-sql.R' 'backend-sqlite.R' 'backend-teradata.R' 'backward-compatibility.R' 'bind-queries.R' 'data-cache.R' 'data-lahman.R' 'data-nycflights13.R' 'db-io.R' 'dbplyr.R' 'ident.R' 'import-standalone-s3-register.R' 'join-by-compat.R' 'join-cols-compat.R' 'lazy-ops.R' 'memdb.R' 'optimise-utils.R' 'progress.R' 'query-base.R' 'query-join.R' 'query-rf-join.R' 'query-select.R' 'query-semi-join.R' 'query-set-op.R' 'query-union.R' 'query.R' 'remote.R' 'rows.R' 'schema.R' 'sql-build.R' 'sql-clause.R' 'sql-dialect.R' 'sql-glue.R' 'sql-quote.R' 'sql-superseded.R' 'src-sql.R' 'src_dbi.R' 'table-name.R' 'tbl-lazy.R' 'tbl-sql.R' 'tidyeval-across.R' 'tidyeval.R' 'translate-sql.R' 'utils-format.R' 'verb-arrange.R' 'verb-collapse.R' 'verb-collect.R' 'verb-compute.R' 'verb-count.R' 'verb-distinct.R' 'verb-do-query.R' 'verb-do.R' 'verb-expand.R' 'verb-explain.R' 'verb-fill.R' 'verb-filter.R' 'verb-group_by.R' 'verb-head.R' 'verb-joins.R' 'verb-mutate.R' 'verb-pivot-longer.R' 'verb-pivot-wider.R' 'verb-pull.R' 'verb-select.R' 'verb-set-ops.R' 'verb-slice.R' 'verb-summarise.R' 'verb-uncount.R' 'verb-window.R' 'with-dialect.R' 'zzz.R'", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Maximilian Girlich [aut], Edgar Ruiz [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, "desc": { "Package": "desc", "Version": "1.4.3", @@ -2428,31 +2166,6 @@ "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "getPass": { - "Package": "getPass", - "Version": "0.2-4", - "Source": "Repository", - "Type": "Package", - "Title": "Masked User Input", - "Description": "A micro-package for reading \"passwords\", i.e. reading user input with masking, so that the input is not displayed as it is typed. Currently we have support for 'RStudio', the command line (every OS), and any platform where 'tcltk' is present.", - "License": "BSD 2-clause License + file LICENSE", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "utils", - "rstudioapi (>= 0.5)" - ], - "NeedsCompilation": "yes", - "ByteCompile": "yes", - "Authors@R": "c( person(\"Drew\", \"Schmidt\", role=c(\"aut\", \"cre\"), email=\"wrathematics@gmail.com\"), person(\"Wei-Chen\", \"Chen\", role=\"aut\"), person(\"Gabor\", \"Csardi\", role=\"ctb\", comment=\"Improved terminal detection\"), person(\"Rich\", \"FitzJohn\", role=\"ctb\") )", - "URL": "https://github.com/wrathematics/getPass", - "BugReports": "https://github.com/wrathematics/getPass/issues", - "Maintainer": "Drew Schmidt ", - "RoxygenNote": "6.0.1", - "Author": "Drew Schmidt [aut, cre], Wei-Chen Chen [aut], Gabor Csardi [ctb] (Improved terminal detection), Rich FitzJohn [ctb]", - "Repository": "CRAN" - }, "ggforce": { "Package": "ggforce", "Version": "0.5.0", @@ -2505,95 +2218,6 @@ "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), RStudio [cph]", "Repository": "CRAN" }, - "ggfun": { - "Package": "ggfun", - "Version": "0.2.1", - "Source": "Repository", - "Title": "Miscellaneous Functions for 'ggplot2'", - "Authors@R": "c( person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0002-6485-8781\")), person(\"Shuangbin\", \"Xu\", email = \"xshuangbin@163.com\", role = \"aut\", comment = c(ORCID=\"0000-0003-3513-5362\")) )", - "Author": "Guangchuang Yu [aut, cre, cph] (ORCID: ), Shuangbin Xu [aut] (ORCID: )", - "Maintainer": "Guangchuang Yu ", - "Description": "Provides a collection of 'ggplot2' extensions and utilities for creating geometric layers, applying themes, working with legends, and modifying plot objects.", - "Depends": [ - "R (>= 4.2.0)" - ], - "Imports": [ - "cli", - "dplyr", - "ggplot2", - "graphics", - "grid", - "rlang", - "scales", - "utils", - "yulab.utils (>= 0.1.6)" - ], - "Suggests": [ - "ggplotify", - "knitr", - "pkgload", - "quarto", - "testthat", - "tidyr", - "ggnewscale" - ], - "VignetteBuilder": "quarto", - "ByteCompile": "true", - "License": "Artistic-2.0", - "Encoding": "UTF-8", - "URL": "https://github.com/YuLab-SMU/ggfun", - "BugReports": "https://github.com/YuLab-SMU/ggfun/issues", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "ggimage": { - "Package": "ggimage", - "Version": "0.3.5", - "Source": "Repository", - "Title": "Use Image in 'ggplot2'", - "Authors@R": "c( person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0002-6485-8781\")), person(\"Shuangbin\", \"Xu\", email = \"xshuangbin@163.com\", role = \"ctb\", comment = c(ORCID=\"0000-0003-3513-5362\")), person(\"Yonghe\", \"Xia\", email = \"xiayh17@gmail.com\", role = \"ctb\") )", - "Description": "Supports image files and graphic objects to be visualized in 'ggplot2' graphic system.", - "Depends": [ - "R (>= 4.1.0)", - "ggplot2" - ], - "Imports": [ - "digest", - "ggfun", - "ggiraph", - "ggplotify", - "grid", - "jsonlite", - "magick", - "methods", - "purrr", - "rlang", - "scales", - "tibble", - "tools", - "utils", - "withr", - "yulab.utils (>= 0.1.3)" - ], - "Suggests": [ - "ape", - "ggtree", - "gridGraphics", - "httr", - "rsvg" - ], - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://github.com/YuLab-SMU/ggimage", - "BugReports": "https://github.com/YuLab-SMU/ggimage/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre, cph] (ORCID: ), Shuangbin Xu [ctb] (ORCID: ), Yonghe Xia [ctb]", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, "ggiraph": { "Package": "ggiraph", "Version": "0.9.6", @@ -2650,43 +2274,6 @@ "Maintainer": "David Gohel ", "Repository": "CRAN" }, - "ggpath": { - "Package": "ggpath", - "Version": "1.1.1", - "Source": "Repository", - "Title": "Robust Image Rendering Support for 'ggplot2'", - "Authors@R": "person(\"Sebastian\", \"Carl\", , \"mrcaseb@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"))", - "Description": "A 'ggplot2' extension that enables robust image grobs in panels and theme elements.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/mrcaseb/ggpath, https://mrcaseb.github.io/ggpath/", - "BugReports": "https://github.com/mrcaseb/ggpath/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cachem (>= 1.0.0)", - "cli (>= 3.0.0)", - "ggplot2 (>= 4.0.0)", - "grid", - "magick (>= 2.7.3)", - "memoise (>= 2.0.0)", - "rlang (>= 0.4.11)", - "S7 (>= 0.2.0)" - ], - "Suggests": [ - "covr (>= 3.5.1)", - "rsvg (>= 2.0)", - "testthat (>= 3.0.0)", - "vdiffr (>= 1.0.2)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Sebastian Carl [aut, cre, cph]", - "Maintainer": "Sebastian Carl ", - "Repository": "CRAN" - }, "ggplot2": { "Package": "ggplot2", "Version": "4.0.3", @@ -2760,49 +2347,6 @@ "Maintainer": "Thomas Lin Pedersen ", "Repository": "CRAN" }, - "ggplotify": { - "Package": "ggplotify", - "Version": "0.1.3", - "Source": "Repository", - "Title": "Convert Plot to 'grob' or 'ggplot' Object", - "Authors@R": "c(person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\")))", - "Description": "Convert plot function call (using expression or formula) to 'grob' or 'ggplot' object that compatible to the 'grid' and 'ggplot2' ecosystem. With this package, we are able to e.g. using 'cowplot' to align plots produced by 'base' graphics, 'ComplexHeatmap', 'eulerr', 'grid', 'lattice', 'magick', 'pheatmap', 'vcd' etc. by converting them to 'ggplot' objects.", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "ggplot2", - "graphics", - "grDevices", - "grid", - "gridGraphics", - "rlang", - "yulab.utils" - ], - "Suggests": [ - "aplot", - "colorspace", - "cowplot", - "ggimage", - "knitr", - "rmarkdown", - "lattice", - "prettydoc", - "vcd", - "utils" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://github.com/GuangchuangYu/ggplotify", - "BugReports": "https://github.com/GuangchuangYu/ggplotify/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre] (ORCID: )", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, "ggraph": { "Package": "ggraph", "Version": "2.2.2", @@ -3184,31 +2728,6 @@ "Maintainer": "Baptiste Auguie ", "Repository": "CRAN" }, - "gridGraphics": { - "Package": "gridGraphics", - "Version": "0.5-1", - "Source": "Repository", - "Title": "Redraw Base Graphics Using 'grid' Graphics", - "Authors@R": "c(person(\"Paul\", \"Murrell\", role = c(\"cre\", \"aut\"), email = \"paul@stat.auckland.ac.nz\"), person(\"Zhijian\", \"Wen\", role = \"aut\", email = \"jwen246@aucklanduni.ac.nz\"))", - "Description": "Functions to convert a page of plots drawn with the 'graphics' package into identical output drawn with the 'grid' package. The result looks like the original 'graphics'-based plot, but consists of 'grid' grobs and viewports that can then be manipulated with 'grid' functions (e.g., edit grobs and revisit viewports).", - "Depends": [ - "grid", - "graphics" - ], - "Imports": [ - "grDevices" - ], - "Suggests": [ - "magick (>= 1.3)", - "pdftools (>= 1.6)" - ], - "License": "GPL (>= 2)", - "URL": "https://github.com/pmur002/gridgraphics", - "NeedsCompilation": "no", - "Author": "Paul Murrell [cre, aut], Zhijian Wen [aut]", - "Maintainer": "Paul Murrell ", - "Repository": "CRAN" - }, "gt": { "Package": "gt", "Version": "1.3.0", @@ -3358,75 +2877,6 @@ "Maintainer": "Kirill Müller ", "Repository": "CRAN" }, - "hexSticker": { - "Package": "hexSticker", - "Version": "0.5.1", - "Source": "Repository", - "Title": "Create Hexagon Sticker in R", - "Authors@R": "c(person(given = \"Guangchuang\", family = \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\")), person(given = \"Laurent\", family = \"Gatto\", email = \"lg390@cam.ac.uk\", role = \"ctb\"), person(given = \"Johannes\", family = \"Rainer\", email = \"johannes.rainer@eurac.edu\", role = \"ctb\"), person(given = \"Sebastian\", family = \"Gibb\", email = \"mail@sebastiangibb.de\", role = \"ctb\"), person(given = \"Robert\", family = \"Corty\", email = \"rcorty@gmail.com\", role = \"ctb\"), person(given = \"Thomas\", family = \"Neitmann\", email = \"th.neitmann@gmail.com\", role = \"ctb\") )", - "Description": "Helper functions for creating reproducible hexagon sticker purely in R.", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "ggimage", - "ggplot2", - "grDevices", - "hexbin", - "rlang", - "showtext", - "stats", - "sysfonts" - ], - "Suggests": [ - "magick" - ], - "License": "Artistic-2.0", - "ByteCompile": "true", - "URL": "https://github.com/GuangchuangYu/hexSticker", - "BugReports": "https://github.com/GuangchuangYu/hexSticker/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre], Laurent Gatto [ctb], Johannes Rainer [ctb], Sebastian Gibb [ctb], Robert Corty [ctb], Thomas Neitmann [ctb]", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, - "hexbin": { - "Package": "hexbin", - "Version": "1.28.6", - "Source": "Repository", - "Title": "Hexagonal Binning Routines", - "Authors@R": "c(person(given = \"Dan\", family = \"Carr\", role = \"aut\", email = \"dcarr@voxel.galaxy.gmu.edu\"), person(given = c(\"Nicholas\"), family = \"Lewin-Koh\", role = \"aut\"), person(given = \"Martin\", family = \"Maechler\", role = \"aut\", email = \"maechler@stat.math.ethz.ch\"), person(given = \"Deepayan\", family = \"Sarkar\", role = \"aut\", email = \"deepayan.sarkar@r-project.org\"), person(given = \"Edzer\", family = \"Pebesma\", role = \"cre\", comment = c(ORCID = \"0000-0001-8049-7069\"), email = \"edzer.pebesma@uni-muenster.de\"))", - "Depends": [ - "R (>= 2.0.1)", - "methods" - ], - "Imports": [ - "lattice", - "grid", - "graphics", - "grDevices", - "stats", - "utils" - ], - "Suggests": [ - "marray", - "affy", - "Biobase", - "limma", - "knitr" - ], - "Description": "Binning and plotting functions for hexagonal bins.", - "Collate": "lattice.R BTC.R BTY.R grid.hexagons.R grid.hexlegend.R hbox.R hdiffplot.R hexbinList.R hexbinplot.R hexbin.s4.R hexpanel.R hexplom.R hexPlotMA.R hexutil.R hexViewport.R HO.R LINGRAY.R LOCS.R MAG.R RB.R smoothHexbin.R", - "License": "GPL-2", - "VignetteBuilder": "knitr", - "NeedsCompilation": "yes", - "URL": "https://github.com/edzer/hexbin", - "Author": "Dan Carr [aut], Nicholas Lewin-Koh [aut], Martin Maechler [aut], Deepayan Sarkar [aut], Edzer Pebesma [cre] (ORCID: )", - "Maintainer": "Edzer Pebesma ", - "Repository": "CRAN" - }, "highr": { "Package": "highr", "Version": "0.12", @@ -4344,54 +3794,6 @@ "Author": "Vitalie Spinu [aut, cre], Garrett Grolemund [aut], Hadley Wickham [aut], Davis Vaughan [ctb], Ian Lyttle [ctb], Imanuel Costigan [ctb], Jason Law [ctb], Doug Mitarotonda [ctb], Joseph Larmarange [ctb], Jonathan Boiser [ctb], Chel Hee Lee [ctb]", "Repository": "CRAN" }, - "magick": { - "Package": "magick", - "Version": "2.9.1", - "Source": "Repository", - "Type": "Package", - "Title": "Advanced Graphics and Image-Processing in R", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Bindings to 'ImageMagick': the most comprehensive open-source image processing library available. Supports many common formats (png, jpeg, tiff, pdf, etc) and manipulations (rotate, scale, crop, trim, flip, blur, etc). All operations are vectorized via the Magick++ STL meaning they operate either on a single frame or a series of frames for working with layers, collages, or animation. In RStudio images are automatically previewed when printed to the console, resulting in an interactive editing environment. Also includes a graphics device for creating drawing onto images using pixel coordinates.", - "License": "MIT + file LICENSE", - "URL": "https://docs.ropensci.org/magick/ https://ropensci.r-universe.dev/magick", - "BugReports": "https://github.com/ropensci/magick/issues", - "SystemRequirements": "ImageMagick++: ImageMagick-c++-devel (rpm) or libmagick++-dev (deb)", - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "Rcpp (>= 0.12.12)", - "magrittr", - "curl" - ], - "LinkingTo": [ - "Rcpp" - ], - "Suggests": [ - "av", - "spelling", - "jsonlite", - "methods", - "knitr", - "rmarkdown", - "rsvg", - "webp", - "pdftools", - "ggplot2", - "gapminder", - "IRdisplay", - "tesseract", - "gifski" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: )", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, "magrittr": { "Package": "magrittr", "Version": "2.0.5", @@ -5143,93 +4545,27 @@ "R (>= 3.1.0)" ], "Imports": [ - "Rcpp (>= 0.11.0)" - ], - "Suggests": [ - "abind", - "covr", - "doParallel", - "foreach", - "iterators", - "itertools", - "tcltk", - "testthat" - ], - "LinkingTo": [ - "Rcpp" - ], - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "pointblank": { - "Package": "pointblank", - "Version": "0.12.4", - "Source": "Repository", - "Type": "Package", - "Title": "Data Validation and Organization of Metadata for Local and Remote Tables", - "Description": "Validate data in data frames, 'tibble' objects, 'Spark' 'DataFrames', and database tables. Validation pipelines can be made using easily-readable, consecutive validation steps. Upon execution of the validation plan, several reporting options are available. User-defined thresholds for failure rates allow for the determination of appropriate reporting actions. Many other workflows are available including an information management workflow, where the aim is to record, collect, and generate useful information on data tables.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Mauricio\", \"Vargas\", , \"mavargas11@uc.cl\", c(\"aut\"), comment = c(ORCID = \"0000-0003-1017-7574\")), person(\"June\", \"Choe\", , \"jchoe001@gmail.com\", c(\"aut\"), comment = c(ORCID = \"0000-0002-0701-921X\")), person(\"Olivier\", \"Roy\", role = c(\"ctb\")) )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/pointblank/, https://github.com/rstudio/pointblank", - "BugReports": "https://github.com/rstudio/pointblank/issues", - "Encoding": "UTF-8", - "LazyData": "true", - "ByteCompile": "true", - "RoxygenNote": "7.3.3", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "base64enc (>= 0.1-3)", - "blastula (>= 0.3.3)", - "cli (>= 3.6.0)", - "DBI (>= 1.1.0)", - "digest (>= 0.6.27)", - "dplyr (>= 1.2.0)", - "dbplyr (>= 2.3.0)", - "fs (>= 1.6.0)", - "glue (>= 1.6.2)", - "gt (>= 0.9.0)", - "htmltools (>= 0.5.4)", - "knitr (>= 1.42)", - "rlang (>= 1.0.3)", - "magrittr", - "scales (>= 1.2.1)", - "testthat (>= 3.2.0)", - "tibble (>= 3.1.8)", - "tidyr (>= 1.3.0)", - "tidyselect (>= 1.2.0)", - "yaml (>= 2.3.7)" + "Rcpp (>= 0.11.0)" ], "Suggests": [ - "arrow", - "bigrquery", - "data.table", - "duckdb", - "ggforce", - "ggplot2 (>= 3.5.0)", - "jsonlite", - "lubridate", - "RSQLite", - "RMySQL", - "RPostgres", - "readr", - "rmarkdown", - "sparklyr", - "dittodb", - "odbc" + "abind", + "covr", + "doParallel", + "foreach", + "iterators", + "itertools", + "tcltk", + "testthat" ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "expectation_fns, scan_data,tidyselect_fails_safely_batch,test_fns", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (ORCID: ), Mauricio Vargas [aut] (ORCID: ), June Choe [aut] (ORCID: ), Olivier Roy [ctb]", - "Maintainer": "Richard Iannone ", + "LinkingTo": [ + "Rcpp" + ], + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre]", + "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, "polyclip": { @@ -5253,52 +4589,6 @@ "Author": "Angus Johnson [aut] (C++ original, http://www.angusj.com/delphi/clipper.php), Adrian Baddeley [aut, trl, cre], Kurt Hornik [ctb], Brian D. Ripley [ctb], Elliott Sales de Andrade [ctb], Paul Murrell [ctb], Ege Rubak [ctb], Mark Padgham [ctb]", "Repository": "CRAN" }, - "polyglotr": { - "Package": "polyglotr", - "Version": "1.7.4", - "Source": "Repository", - "Title": "Translate Text", - "Authors@R": "person(\"Tomer\", \"Iwan\", , \"iwantomer@hotmail.com\", role = c(\"aut\", \"cre\", \"cph\"))", - "Description": "Provide easy methods to translate pieces of text. Functions send requests to translation services online.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/Tomeriko96/polyglotr/, https://tomeriko96.github.io/polyglotr/", - "BugReports": "https://github.com/Tomeriko96/polyglotr/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Imports": [ - "dplyr", - "httr", - "jsonlite", - "magrittr", - "purrr", - "RCurl", - "rlang", - "rvest", - "stringr", - "tibble", - "urltools" - ], - "Suggests": [ - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "text2vec", - "shiny", - "shinydashboard", - "shinyjs", - "DT" - ], - "Config/testthat/edition": "3", - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 3.5.0)" - ], - "LazyData": "true", - "NeedsCompilation": "no", - "Author": "Tomer Iwan [aut, cre, cph]", - "Maintainer": "Tomer Iwan ", - "Repository": "CRAN" - }, "praise": { "Package": "praise", "Version": "1.0.0", @@ -5384,33 +4674,6 @@ "Maintainer": "Gábor Csárdi ", "Repository": "CRAN" }, - "profmem": { - "Package": "profmem", - "Version": "0.7.0", - "Source": "Repository", - "Title": "Simple Memory Profiling for R", - "Imports": [ - "utils" - ], - "Suggests": [ - "R.rsp", - "markdown", - "microbenchmark" - ], - "VignetteBuilder": "R.rsp", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))", - "Description": "A simple and light-weight API for memory profiling of R expressions. The profiling is built on top of R's built-in memory profiler ('utils::Rprofmem()'), which records every memory allocation done by R (also native code).", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "URL": "https://henrikbengtsson.github.io/profmem/, https://github.com/HenrikBengtsson/profmem", - "BugReports": "https://github.com/HenrikBengtsson/profmem/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Henrik Bengtsson [aut, cre, cph]", - "Maintainer": "Henrik Bengtsson ", - "Repository": "CRAN" - }, "profvis": { "Package": "profvis", "Version": "0.4.0", @@ -6260,57 +5523,6 @@ "Maintainer": "Gábor Csárdi ", "Repository": "CRAN" }, - "rvest": { - "Package": "rvest", - "Version": "1.0.5", - "Source": "Repository", - "Title": "Easily Harvest (Scrape) Web Pages", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Wrappers around the 'xml2' and 'httr' packages to make it easy to download, then manipulate, HTML and XML.", - "License": "MIT + file LICENSE", - "URL": "https://rvest.tidyverse.org/, https://github.com/tidyverse/rvest", - "BugReports": "https://github.com/tidyverse/rvest/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli", - "glue", - "httr (>= 0.5)", - "lifecycle (>= 1.0.3)", - "magrittr", - "rlang (>= 1.1.0)", - "selectr", - "tibble", - "xml2 (>= 1.4.0)" - ], - "Suggests": [ - "chromote", - "covr", - "knitr", - "purrr", - "R6", - "readr", - "repurrrsive", - "rmarkdown", - "spelling", - "stringi (>= 0.3.1)", - "testthat (>= 3.0.2)", - "tidyr", - "webfakes" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, "sass": { "Package": "sass", "Version": "0.4.10", @@ -6391,34 +5603,6 @@ "Maintainer": "Thomas Lin Pedersen ", "Repository": "CRAN" }, - "selectr": { - "Package": "selectr", - "Version": "0.6-0", - "Source": "Repository", - "Type": "Package", - "Title": "Translate CSS Selectors to XPath Expressions", - "Authors@R": "c(person(\"Simon\", \"Potter\", role = c(\"aut\", \"trl\", \"cre\"), email = \"simon@sjp.co.nz\"), person(\"Simon\", \"Sapin\", role = \"aut\"), person(\"Ian\", \"Bicking\", role = \"aut\"))", - "License": "BSD_3_clause + file LICENCE", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 3.3)" - ], - "Imports": [ - "R6" - ], - "Suggests": [ - "testthat", - "XML", - "xml2" - ], - "URL": "https://sjp.co.nz/projects/selectr/", - "BugReports": "https://github.com/sjp/selectr/issues", - "Description": "Translates a CSS selector into an equivalent XPath expression. This allows us to use CSS selectors when working with the XML package as it can only evaluate XPath expressions. Also provided are convenience functions useful for using CSS selectors on XML nodes. This package is a port of the Python package 'cssselect' ().", - "NeedsCompilation": "no", - "Author": "Simon Potter [aut, trl, cre], Simon Sapin [aut], Ian Bicking [aut]", - "Maintainer": "Simon Potter ", - "Repository": "CRAN" - }, "sessioninfo": { "Package": "sessioninfo", "Version": "1.2.4", @@ -6556,65 +5740,6 @@ "Maintainer": "Carson Sievert ", "Repository": "CRAN" }, - "showtext": { - "Package": "showtext", - "Version": "0.9-8", - "Source": "Repository", - "Type": "Package", - "Title": "Using Fonts More Easily in R Graphs", - "Date": "2026-03-21", - "Authors@R": "c( person(\"Yixuan\", \"Qiu\", , \"yixuan.qiu@cos.name\", c(\"aut\", \"cre\")), person(\"Dave\", \"Raggett\", , \"dsr@w3.org\", \"ctb\", comment = \"UTF-8 library. See the AUTHORS file for details\") )", - "Description": "Making it easy to use various types of fonts ('TrueType', 'OpenType', Type 1, web fonts, etc.) in R graphs, and supporting most output formats of R graphics including PNG, PDF and SVG. Text glyphs will be converted into polygons or raster images, hence after the plot has been created, it no longer relies on the font files. No external software such as 'Ghostscript' is needed to use this package.", - "Depends": [ - "sysfonts (>= 0.7.1)", - "showtextdb (>= 2.0)" - ], - "Imports": [ - "grDevices" - ], - "Suggests": [ - "knitr", - "rmarkdown", - "prettydoc", - "curl", - "jsonlite" - ], - "SystemRequirements": "zlib, libpng, FreeType", - "URL": "https://github.com/yixuan/showtext", - "BugReports": "https://github.com/yixuan/showtext/issues", - "License": "Apache License (>= 2.0)", - "Copyright": "see file COPYRIGHTS", - "VignetteBuilder": "knitr, rmarkdown", - "RoxygenNote": "7.3.3", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Yixuan Qiu [aut, cre], Dave Raggett [ctb] (UTF-8 library. See the AUTHORS file for details)", - "Maintainer": "Yixuan Qiu ", - "Repository": "CRAN" - }, - "showtextdb": { - "Package": "showtextdb", - "Version": "3.0", - "Source": "Repository", - "Type": "Package", - "Title": "Font Files for the 'showtext' Package", - "Date": "2020-05-31", - "Author": "Yixuan Qiu and authors/contributors of the included fonts. See file AUTHORS for details.", - "Maintainer": "Yixuan Qiu ", - "Description": "Providing font files that can be used by the 'showtext' package.", - "Imports": [ - "sysfonts (>= 0.7)", - "utils" - ], - "Suggests": [ - "curl" - ], - "License": "Apache License (>= 2.0)", - "Copyright": "see file COPYRIGHTS", - "RoxygenNote": "7.1.0", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, "snakecase": { "Package": "snakecase", "Version": "0.11.1", @@ -6832,30 +5957,6 @@ "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "sysfonts": { - "Package": "sysfonts", - "Version": "0.8.9", - "Source": "Repository", - "Type": "Package", - "Title": "Loading Fonts into R", - "Date": "2024-03-02", - "Author": "Yixuan Qiu and authors/contributors of the included fonts. See file AUTHORS for details.", - "Maintainer": "Yixuan Qiu ", - "Description": "Loading system fonts and Google Fonts into R, in order to support other packages such as 'R2SWF' and 'showtext'.", - "Suggests": [ - "curl", - "jsonlite" - ], - "Copyright": "see file COPYRIGHTS", - "SystemRequirements": "zlib, libpng, FreeType", - "URL": "https://github.com/yixuan/sysfonts", - "BugReports": "https://github.com/yixuan/sysfonts/issues", - "License": "GPL-2", - "RoxygenNote": "7.3.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, "systemfonts": { "Package": "systemfonts", "Version": "1.3.2", @@ -7272,36 +6373,6 @@ "Maintainer": "Yihui Xie ", "Repository": "CRAN" }, - "triebeard": { - "Package": "triebeard", - "Version": "0.4.1", - "Source": "Repository", - "Type": "Package", - "Title": "'Radix' Trees in 'Rcpp'", - "Author": "Os Keyes [aut, cre], Drew Schmidt [aut], Yuuki Takano [cph]", - "Maintainer": "Os Keyes ", - "Description": "'Radix trees', or 'tries', are key-value data structures optimised for efficient lookups, similar in purpose to hash tables. 'triebeard' provides an implementation of 'radix trees' for use in R programming and in developing packages with 'Rcpp'.", - "License": "MIT + file LICENSE", - "LinkingTo": [ - "Rcpp" - ], - "Encoding": "UTF-8", - "Imports": [ - "Rcpp" - ], - "RoxygenNote": "7.1.2", - "Suggests": [ - "knitr", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "URL": "https://github.com/Ironholds/triebeard/", - "BugReports": "https://github.com/Ironholds/triebeard/issues", - "Date": "2023-03-04", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, "tweenr": { "Package": "tweenr", "Version": "2.0.3", @@ -7406,42 +6477,6 @@ "Maintainer": "Gábor Csárdi ", "Repository": "CRAN" }, - "urltools": { - "Package": "urltools", - "Version": "1.7.3.1", - "Source": "Repository", - "Type": "Package", - "Title": "Vectorised Tools for URL Handling and Parsing", - "Date": "2019-04-14", - "Authors@R": "c(person(given = \"Os\", family = \"Keyes\", role = c(\"aut\", \"cre\"), email = \"ironholds@gmail.com\"), person(given = \"Jay\", family = \"Jacobs\", role = \"aut\"), person(given = \"Drew\", family = \"Schmidt\", role = \"aut\"), person(given = \"Mark\", family = \"Greenaway\", role = \"ctb\"), person(given = \"Bob\", family = \"Rudis\", role = \"ctb\"), person(given = \"Alex\", family = \"Pinto\", role = \"ctb\"), person(given = \"Maryam\", family = \"Khezrzadeh\", role = \"ctb\"), person(given = \"Peter\", family = \"Meilstrup\", role = \"ctb\"), person(given = c(\"Adam\", \"M.\"), family = \"Costello\", role = \"cph\"), person(given = \"Jeff\", family = \"Bezanson\", role = \"cph\"), person(given = \"Peter\", family = \"Meilstrup\", role = \"ctb\"), person(given = \"Xueyuan\", family = \"Jiang\", role = \"ctb\"))", - "Description": "A toolkit for all URL-handling needs, including encoding and decoding, parsing, parameter extraction and modification. All functions are designed to be both fast and entirely vectorised. It is intended to be useful for people dealing with web-related datasets, such as server-side logs, although may be useful for other situations involving large sets of URLs.", - "License": "MIT + file LICENSE", - "LazyData": "TRUE", - "LinkingTo": [ - "Rcpp" - ], - "Imports": [ - "Rcpp", - "methods", - "triebeard" - ], - "Suggests": [ - "testthat", - "knitr" - ], - "URL": "https://github.com/Ironholds/urltools/", - "BugReports": "https://github.com/Ironholds/urltools/issues", - "VignetteBuilder": "knitr", - "RoxygenNote": "6.1.1", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 2.10)" - ], - "NeedsCompilation": "yes", - "Repository": "CRAN", - "Author": "Os Keyes [aut, cre], Jay Jacobs [aut], Drew Schmidt [aut], Mark Greenaway [ctb], Bob Rudis [ctb], Alex Pinto [ctb], Maryam Khezrzadeh [ctb], Peter Meilstrup [ctb], Adam M. Costello [cph], Jeff Bezanson [cph], Peter Meilstrup [ctb], Xueyuan Jiang [ctb]", - "Maintainer": "Os Keyes " - }, "usethis": { "Package": "usethis", "Version": "3.2.1", @@ -7534,24 +6569,6 @@ "Maintainer": "Kirill Müller ", "Repository": "CRAN" }, - "uuid": { - "Package": "uuid", - "Version": "1.2-2", - "Source": "Repository", - "Title": "Tools for Generating and Handling of UUIDs", - "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.org, ORCID: ), Theodore Ts'o [aut, cph] (libuuid)", - "Maintainer": "Simon Urbanek ", - "Authors@R": "c(person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.org\", ORCID=\"0000-0003-2297-1732\")), person(\"Theodore\",\"Ts'o\", email=\"tytso@thunk.org\", role=c(\"aut\",\"cph\"), comment=\"libuuid\"))", - "Depends": [ - "R (>= 2.9.0)" - ], - "Description": "Tools for generating and handling of UUIDs (Universally Unique Identifiers).", - "License": "MIT + file LICENSE", - "URL": "https://www.rforge.net/uuid", - "BugReports": "https://github.com/s-u/uuid/issues", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, "validate": { "Package": "validate", "Version": "1.1.7", @@ -8140,45 +7157,6 @@ "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, - "yulab.utils": { - "Package": "yulab.utils", - "Version": "0.2.4", - "Source": "Repository", - "Title": "Supporting Functions for Packages Maintained by 'YuLab-SMU'", - "Authors@R": "c(person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\")))", - "Description": "Miscellaneous functions commonly used by 'YuLab-SMU'.", - "Depends": [ - "R (>= 4.2.0)" - ], - "Imports": [ - "cli", - "digest", - "fs", - "methods", - "rappdirs", - "rlang", - "tools", - "utils" - ], - "Suggests": [ - "httr2", - "jsonlite", - "openssl", - "R.utils", - "testthat (>= 3.0.0)" - ], - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://yulab-smu.top/", - "BugReports": "https://github.com/YuLab-SMU/yulab.utils/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre] (ORCID: )", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, "zip": { "Package": "zip", "Version": "3.0.1", From 07ac5e2bd7c4528c4908c921c25041b7e285873c Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Tue, 15 Sep 2026 16:30:55 -0400 Subject: [PATCH 07/23] fix checks and tests --- NAMESPACE | 1 + R/wagebill.R | 164 +++++++++++++++---- R/zzz.R | 20 ++- man/compute_growth_decomposition.Rd | 19 ++- man/compute_wage_decomposition.Rd | 30 ++++ tests/testthat/test-wagebill_decomposition.R | 124 +++++++++++++- 6 files changed, 316 insertions(+), 42 deletions(-) create mode 100644 man/compute_wage_decomposition.Rd diff --git a/NAMESPACE b/NAMESPACE index 860b65c..29b4797 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -29,6 +29,7 @@ export(compute_record_consistency) export(compute_time_trend) export(compute_trend_summary) export(compute_value_consistency) +export(compute_wage_decomposition) export(compute_wagebill) export(compute_workforce_movement) export(convert_constant_ppp) diff --git a/R/wagebill.R b/R/wagebill.R index 416649e..f1b6ee1 100644 --- a/R/wagebill.R +++ b/R/wagebill.R @@ -3,17 +3,20 @@ #' @param .data A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary). #' @param group_cols A character vector specifying the names of the columns to group by. #' @param measure_col A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu"). -#' -#' @return A data.table with headcount, compensation, wagebill, the -#' continuing-period decomposition (employment/compensation/interaction -#' effects), entry/exit effects for panel gaps, and a `transition_type` -#' label for each row: "start" (first period observed, no baseline), -#' "continuing" (both this period and the prior period observed), -#' "entry" (reappears after a gap, or a genuinely new group_cols -#' combination), "exit" (last observed period before a gap begins), or -#' "gap" (an unobserved period that is not itself a boundary). #' -#' @importFrom data.table .N .SD := shift setorderv fcase +#' @return A data.table with headcount, compensation, wagebill, wagebill_lag, +#' the continuing-period decomposition (employment/compensation/interaction +#' effects), entry/exit effects, is_observed, and a `transition_type` label +#' for each row: "start" (panel's first period for this group -- left- +#' censored, no baseline available), "continuing" (observed this period +#' and last), "entry" (observed now, not last period -- a genuinely new +#' group_cols combination, or a reappearance after any length of absence), +#' or "exit" (not observed now -- covers both the period a group first +#' disappears, which carries the real dollar effect, and every subsequent +#' period it remains absent, which correctly carries a zero effect since +#' nothing further changed). +#' +#' @importFrom data.table .N .SD := shift setorderv fcase fifelse #' @importFrom dplyr all_of select #' @importFrom tidyr complete nesting #' @export @@ -43,27 +46,30 @@ compute_growth_decomposition <- function( summary_table[, is_observed := TRUE] - min_ref_date <- min(.data$ref_date) - max_ref_date <- max(.data$ref_date) + min_date <- min(.data$ref_date) + max_date <- max(.data$ref_date) date_interval <- guess_date_frequency(.data) - # nesting() preserves only observed group_cols combinations, so a group - # that starts reporting mid-panel gets real "entry" rows, not fabricated - # combinations that never existed + # explicit date sequence (not just observed dates) so a period missing + # for EVERY group still gets a row, rather than silently vanishing if (!is.null(group_cols)) { summary_table <- summary_table |> tidyr::complete( tidyr::nesting(!!!rlang::syms(group_cols)), - ref_date = seq(min_ref_date, max_ref_date, by = date_interval), + ref_date = seq(min_date, max_date, by = date_interval), fill = list(headcount = 0, compensation = NA_real_) ) } else { summary_table <- summary_table |> - tidyr::complete(ref_date, fill = list(headcount = 0, compensation = NA_real_)) + tidyr::complete( + ref_date = seq(min_date, max_date, by = date_interval), + fill = list(headcount = 0, compensation = NA_real_) + ) } summary_table <- data.table::as.data.table(summary_table) summary_table[is.na(is_observed), is_observed := FALSE] + summary_table[is.na(wagebill), wagebill := 0] # unobserved periods contribute $0 data.table::setorderv(summary_table, by_cols) @@ -77,14 +83,17 @@ compute_growth_decomposition <- function( by = group_cols ] - # classify every row's relationship to the prior period + # only two non-continuing states now: entry and exit. Every unobserved + # row is "exit" -- the boundary row and every row of continued absence + # after it both get the label; they're distinguished below by whether + # exit_effect is zero or not, not by a separate transition_type. summary_table[, transition_type := data.table::fcase( is.na(observed_lag) & is_observed, "start", - is.na(observed_lag) & !is_observed, "gap", - observed_lag & is_observed, "continuing", - observed_lag & !is_observed, "exit", !observed_lag & is_observed, "entry", - !observed_lag & !is_observed, "gap" + is.na(observed_lag) & !is_observed, "exit", + observed_lag & !is_observed, "exit", + !observed_lag & !is_observed, "exit", + observed_lag & is_observed, "continuing" )] summary_table[, `:=`( @@ -98,9 +107,6 @@ compute_growth_decomposition <- function( interaction_effect = delta_headcount * delta_compensation )] - # these three effects only mean something when comparing two real - # observations -- null them out everywhere else so an entry/exit/gap - # row can't masquerade as ordinary continuing-period growth summary_table[ transition_type != "continuing", `:=`( @@ -112,23 +118,119 @@ compute_growth_decomposition <- function( summary_table[, `:=`(entry_effect = NA_real_, exit_effect = NA_real_)] summary_table[transition_type == "entry", entry_effect := wagebill] - summary_table[transition_type == "exit", exit_effect := -wagebill_lag] + # nonzero only at the true boundary (observed last period, not this one); + # every subsequent absent period gets 0 -- it was already gone + summary_table[ + transition_type == "exit", + exit_effect := data.table::fifelse(observed_lag %in% TRUE, -wagebill_lag, 0) + ] summary_table[, total_effect := data.table::fcase( transition_type == "continuing", employment_effect + compensation_effect + interaction_effect, transition_type == "entry", entry_effect, transition_type == "exit", exit_effect, - default = NA_real_ + default = NA_real_ # "start": genuinely unknown baseline )] out_cols <- c( group_cols, "ref_date", "transition_type", "headcount", "headcount_lag", "compensation", "compensation_lag", "employment_effect", - "compensation_effect", "interaction_effect", "entry_effect", - "exit_effect", "total_effect", "wagebill", "transition_type" + "compensation_effect", "interaction_effect", "entry_effect", "delta_compensation", + "exit_effect", "total_effect", "wagebill", "wagebill_lag", "is_observed", "observed_lag" ) - summary_table[, ..out_cols] |> - data.table::as.data.table() + summary_table[, ..out_cols] +} + +#' Decompose aggregate average-compensation growth into within, between, +#' cross, entry, and exit effects (Foster-Haltiwanger-Krizan style) +#' +#' Takes the per-group output of compute_growth_decomposition() and answers +#' a different question than that function does: not "why did group i's own +#' wagebill change" but "why did average compensation across ALL groups +#' combined change" -- specifically, how much is pay growth within groups +#' versus a shift in headcount share toward higher- or lower-paid groups. +#' +#' @param growth_decomp output of compute_growth_decomposition() +#' @param group_cols optional character vector of columns identifying a higher-level +#' unit (e.g. "country_code") within which shares/composition are computed +#' separately. NULL pools all rows into one global composition per ref_date. +#' +#' @return A data.table, one row per ref_date (or per ref_date x `group_cols`), +#' with avg_compensation, avg_compensation_lag, within_effect, +#' between_effect, cross_effect, entry_effect, exit_effect, and total_effect +#' (which equals avg_compensation - avg_compensation_lag by construction, +#' except at the panel's first period, which is NA -- no lagged baseline). +#' +#' @importFrom data.table := fifelse +#' @export +compute_wage_decomposition <- function(growth_decomp, group_cols = NULL) { + + dt <- data.table::copy(data.table::as.data.table(growth_decomp)) + agg_by <- c(group_cols, "ref_date") + + # totals at t and t-1, computed within `by` x ref_date. Summing headcount_lag + # across this period's rows correctly reconstructs total headcount at t-1, + # since every group has a row for every ref_date (from the nesting-complete + # grid upstream) -- the roster is stable even though membership isn't. + dt[, `:=`( + total_headcount = sum(headcount), + total_headcount_prev = sum(headcount_lag, na.rm = TRUE), + total_wagebill = sum(wagebill), + total_wagebill_prev = sum(wagebill_lag, na.rm = TRUE) + ), by = agg_by] + + dt[, `:=`( + avg_compensation = total_wagebill / total_headcount, + avg_compensation_lag = data.table::fifelse( + total_headcount_prev > 0, total_wagebill_prev / total_headcount_prev, NA_real_ + ) + )] + + dt[, `:=`( + share = headcount / total_headcount, + share_lag = data.table::fifelse( + total_headcount_prev > 0, headcount_lag / total_headcount_prev, NA_real_ + ) + )] + dt[, delta_share := share - share_lag] + + # row-level terms; 0 wherever the transition type doesn't apply, rather + # than NA, so they sum cleanly without na.rm masking real problems + dt[, `:=`( + within_term = data.table::fifelse( + transition_type == "continuing", share_lag * delta_compensation, 0 + ), + between_term = data.table::fifelse( + transition_type == "continuing", delta_share * (compensation_lag - avg_compensation_lag), 0 + ), + cross_term = data.table::fifelse( + transition_type == "continuing", delta_share * delta_compensation, 0 + ), + entry_term = data.table::fifelse( + transition_type == "entry", share * (compensation - avg_compensation_lag), 0 + ), + exit_term = data.table::fifelse( + transition_type == "exit" & observed_lag %in% TRUE, + -share_lag * (compensation_lag - avg_compensation_lag), 0 + ) + )] + + period_decomp <- dt[, .( + avg_compensation = avg_compensation[1], + avg_compensation_lag = avg_compensation_lag[1], + within_effect = sum(within_term), + between_effect = sum(between_term), + cross_effect = sum(cross_term), + entry_effect = sum(entry_term), + exit_effect = sum(exit_term) + ), by = agg_by] + + period_decomp[, total_effect := data.table::fifelse( + is.na(avg_compensation_lag), NA_real_, + within_effect + between_effect + cross_effect + entry_effect + exit_effect + )] + + period_decomp[] } \ No newline at end of file diff --git a/R/zzz.R b/R/zzz.R index 4dc4158..6b1c930 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -230,7 +230,25 @@ if (getRversion() >= "2.15.1") { "delta_headcount", "is_observed", "observed_lag", - "wagebill_lag" + "wagebill_lag", + # compute_wage_decomposition + "total_headcount", + "total_headcount_prev", + "total_wagebill", + "total_wagebill_prev", + "avg_compensation", + "avg_compensation_lag", + "share", + "share_lag", + "delta_share", + "within_term", + "between_term", + "cross_term", + "entry_term", + "exit_term", + "within_effect", + "between_effect", + "cross_effect" )) } diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd index 3cbfaee..1a3c031 100644 --- a/man/compute_growth_decomposition.Rd +++ b/man/compute_growth_decomposition.Rd @@ -18,14 +18,17 @@ compute_growth_decomposition( \item{measure_col}{A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu").} } \value{ -A data.table with headcount, compensation, wagebill, the - continuing-period decomposition (employment/compensation/interaction - effects), entry/exit effects for panel gaps, and a `transition_type` - label for each row: "start" (first period observed, no baseline), - "continuing" (both this period and the prior period observed), - "entry" (reappears after a gap, or a genuinely new group_cols - combination), "exit" (last observed period before a gap begins), or - "gap" (an unobserved period that is not itself a boundary). +A data.table with headcount, compensation, wagebill, wagebill_lag, + the continuing-period decomposition (employment/compensation/interaction + effects), entry/exit effects, is_observed, and a `transition_type` label + for each row: "start" (panel's first period for this group -- left- + censored, no baseline available), "continuing" (observed this period + and last), "entry" (observed now, not last period -- a genuinely new + group_cols combination, or a reappearance after any length of absence), + or "exit" (not observed now -- covers both the period a group first + disappears, which carries the real dollar effect, and every subsequent + period it remains absent, which correctly carries a zero effect since + nothing further changed). } \description{ Compute growth decomposition of wagebill diff --git a/man/compute_wage_decomposition.Rd b/man/compute_wage_decomposition.Rd new file mode 100644 index 0000000..ad628eb --- /dev/null +++ b/man/compute_wage_decomposition.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/wagebill.R +\name{compute_wage_decomposition} +\alias{compute_wage_decomposition} +\title{Decompose aggregate average-compensation growth into within, between, +cross, entry, and exit effects (Foster-Haltiwanger-Krizan style)} +\usage{ +compute_wage_decomposition(growth_decomp, group_cols = NULL) +} +\arguments{ +\item{growth_decomp}{output of compute_growth_decomposition()} + +\item{group_cols}{optional character vector of columns identifying a higher-level +unit (e.g. "country_code") within which shares/composition are computed +separately. NULL pools all rows into one global composition per ref_date.} +} +\value{ +A data.table, one row per ref_date (or per ref_date x `group_cols`), + with avg_compensation, avg_compensation_lag, within_effect, + between_effect, cross_effect, entry_effect, exit_effect, and total_effect + (which equals avg_compensation - avg_compensation_lag by construction, + except at the panel's first period, which is NA -- no lagged baseline). +} +\description{ +Takes the per-group output of compute_growth_decomposition() and answers +a different question than that function does: not "why did group i's own +wagebill change" but "why did average compensation across ALL groups +combined change" -- specifically, how much is pay growth within groups +versus a shift in headcount share toward higher- or lower-paid groups. +} diff --git a/tests/testthat/test-wagebill_decomposition.R b/tests/testthat/test-wagebill_decomposition.R index 7b103f8..93eb4f8 100644 --- a/tests/testthat/test-wagebill_decomposition.R +++ b/tests/testthat/test-wagebill_decomposition.R @@ -4,10 +4,11 @@ test_that("mid-panel gap produces exit then entry, not a fabricated collapse", { ref_date = as.Date(c("2020-01-01", "2023-01-01")), # 2021, 2022 missing gross_salary_lcu = c(100000, 130000) ) + res <- compute_growth_decomposition(d, group_cols = "dept") expect_equal(res[res$ref_date == as.Date("2021-01-01"), "transition_type"] |> dplyr::pull(), "exit") - expect_equal(res[res$ref_date == as.Date("2022-01-01"), "transition_type"] |> dplyr::pull(), "gap") + expect_equal(res[res$ref_date == as.Date("2022-01-01"), "transition_type"] |> dplyr::pull(), "exit") expect_equal(res[res$ref_date == as.Date("2023-01-01"), "transition_type"] |> dplyr::pull(), "entry") expect_equal(res[res$ref_date == as.Date("2021-01-01"), "exit_effect"] |> dplyr::pull(), -100000) @@ -35,7 +36,7 @@ test_that("a group entering mid-panel is classified entry, not a fabricated coll res <- compute_growth_decomposition(d, group_cols = "dept") b_2020 <- res[res$dept == "B" & res$ref_date == as.Date("2020-01-01"), ] b_2021 <- res[res$dept == "B" & res$ref_date == as.Date("2021-01-01"), ] - expect_equal(b_2020$transition_type, "gap") # dept B didn't exist yet + expect_equal(b_2020$transition_type, "exit") # dept B didn't exist yet expect_equal(b_2021$transition_type, "entry") # first real appearance expect_equal(b_2021$entry_effect, 50000) }) @@ -64,3 +65,122 @@ test_that("a balanced panel is entirely 'continuing' after the first period", { expect_true(all(is.na(res$entry_effect))) expect_true(all(is.na(res$exit_effect))) }) + +test_that("a multi-period gap has no 'gap' label -- only entry/exit", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2023-01-01")), # 2021, 2022 missing + gross_salary_lcu = c(100000, 130000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + expect_false("gap" %in% res$transition_type) + types <- setNames(res$transition_type, as.character(res$ref_date)) + expect_equal(unname(types["2021-01-01"]), "exit") + expect_equal(unname(types["2022-01-01"]), "exit") + expect_equal(unname(types["2023-01-01"]), "entry") +}) + +test_that("exit_effect fires once at the boundary, zero for the rest of the gap", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2023-01-01")), + gross_salary_lcu = c(100000, 130000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + eff <- setNames(res$exit_effect, as.character(res$ref_date)) + expect_equal(unname(eff["2021-01-01"]), -100000) # the real drop + expect_equal(unname(eff["2022-01-01"]), 0) # still gone, no new change +}) + +test_that("telescoping holds across gaps of any length", { + d <- data.frame( + dept = "A", + ref_date = as.Date(c("2020-01-01", "2025-01-01")), # 4-period gap + gross_salary_lcu = c(100000, 145000) + ) + res <- compute_growth_decomposition(d, group_cols = "dept") + expect_equal(sum(res$total_effect, na.rm = TRUE), 145000 - 100000) +}) + +# FHK -------------------------------------------------------------------- +test_that("pure composition shift with no pay changes shows up entirely as between_effect", { + raw <- data.frame( + dept = c(rep("A", 100), rep("A", 50), rep("B", 100), rep("B", 150)), + ref_date = as.Date(c( + rep("2020-01-01", 100), rep("2021-01-01", 50), + rep("2020-01-01", 100), rep("2021-01-01", 150) + )), + gross_salary_lcu = c(rep(1000, 100), rep(1000, 50), # dept A: 100 -> 50 people, same pay + rep(2000, 100), rep(2000, 150)) # dept B: 100 -> 150 people, same pay + ) + gd <- compute_growth_decomposition(raw, group_cols = "dept") + wd <- compute_wage_decomposition(gd) + + row2021 <- wd[ref_date == as.Date("2021-01-01")] + expect_equal(row2021$within_effect, 0, tolerance = 1e-8) + expect_equal(row2021$cross_effect, 0, tolerance = 1e-8) + expect_equal(row2021$between_effect, 250, tolerance = 1e-8) + expect_gt(row2021$between_effect, 0) + expect_equal(row2021$total_effect, row2021$avg_compensation - row2021$avg_compensation_lag) +}) + +test_that("pure within-group raises with no reallocation shows up entirely as within_effect", { + raw <- data.frame( + dept = rep(c("A", "B"), c(200, 200)), + ref_date = rep(as.Date(c("2020-01-01", "2021-01-01")), c(100, 100)) |> rep(2), + gross_salary_lcu = c(rep(1000, 100), rep(1100, 100), # dept A raised + rep(2000, 100), rep(2200, 100)) # dept B raised, same headcount + ) + gd <- compute_growth_decomposition(raw, group_cols = "dept") + wd <- compute_wage_decomposition(gd) + + row2021 <- wd[ref_date == as.Date("2021-01-01")] + expect_equal(row2021$between_effect, 0, tolerance = 1e-8) + expect_equal(row2021$cross_effect, 0, tolerance = 1e-8) + expect_gt(row2021$within_effect, 0) + expect_equal(row2021$total_effect, row2021$avg_compensation - row2021$avg_compensation_lag) +}) + +test_that("identity holds with entry, exit, and within effects all present at once", { + raw <- data.frame( + dept = c(rep("A", 2), rep("B", 1), rep("C", 1)), + ref_date = as.Date(c("2020-01-01", "2021-01-01", "2020-01-01", "2021-01-01")), + gross_salary_lcu = c(100000, 105000, # dept A: continuing, small raise + 80000, # dept B: present in 2020 only (exits) + 60000) # dept C: present in 2021 only (enters) + ) + gd <- compute_growth_decomposition(raw, group_cols = "dept") + wd <- compute_wage_decomposition(gd) + + row2021 <- wd[ref_date == as.Date("2021-01-01")] + expect_true(row2021$entry_effect != 0) + expect_true(row2021$exit_effect != 0) + expect_equal(row2021$total_effect, row2021$avg_compensation - row2021$avg_compensation_lag) +}) + +test_that("the panel's first period has NA total_effect, not a spurious number", { + raw <- data.frame( + dept = "A", ref_date = c(as.Date("2020-01-01"), as.Date("2021-01-01")), gross_salary_lcu = c(100000, 100000) + ) + gd <- compute_growth_decomposition(raw, group_cols = "dept") + wd <- compute_wage_decomposition(gd, group_cols = "dept") + expect_true(is.na(wd$total_effect[1])) + expect_true(is.na(wd$avg_compensation_lag[1])) +}) + +test_that("group_cols = 'country' computes composition separately per country", { + raw <- data.frame( + country = rep(c("X", "Y"), each = 4), + dept = rep(c("A", "B"), 4), + ref_date = rep(as.Date(c("2020-01-01", "2021-01-01")), each = 2, times = 2), + gross_salary_lcu = c(1000, 2000, 1000, 2000, # country X: no change + 1000, 2000, 1500, 2000) # country Y: dept A raised + ) + gd <- compute_growth_decomposition(raw, group_cols = c("country", "dept")) + wd <- compute_wage_decomposition(gd, group_cols = "country") + + x_2021 <- wd[country == "X" & ref_date == as.Date("2021-01-01")] + y_2021 <- wd[country == "Y" & ref_date == as.Date("2021-01-01")] + expect_equal(x_2021$total_effect, 0, tolerance = 1e-8) + expect_gt(y_2021$within_effect, 0) +}) From 96cd1aa283fada6066f4f3758253d48a72c000f8 Mon Sep 17 00:00:00 2001 From: Ifeanyi Edochie Date: Wed, 16 Sep 2026 13:54:28 -0400 Subject: [PATCH 08/23] Add actuarial decrement rate estimation and service table functions - Implement `.compute_decrement_pair()` to compute exit/stay outcome counts between consecutive snapshot pairs - Implement `estimate_decrement_rates()` (exported) to pool decrement rates across all snapshot pairs in a panel - Implement `.smooth_rate_curve()` and `smooth_decrement_rates()` to graduate and gap-fill rates via loess/linear interpolation - Implement `compute_service_table()` to chain smoothed decrement rates into a multiple-decrement actuarial service table (lx, Lx, Tx, ex) - Register new global variable bindings in zzz.R - Add generated documentation and NAMESPACE export for `estimate_decrement_rates` --- NAMESPACE | 1 + R/demographics.R | 759 ++++++++++++++++++++++++++++++ R/zzz.R | 19 +- man/compute_service_table.Rd | 125 +++++ man/dot-compute_decrement_pair.Rd | 104 ++++ man/dot-smooth_rate_curve.Rd | 56 +++ man/estimate_decrement_rates.Rd | 152 ++++++ man/smooth_decrement_rates.Rd | 83 ++++ 8 files changed, 1298 insertions(+), 1 deletion(-) create mode 100644 man/compute_service_table.Rd create mode 100644 man/dot-compute_decrement_pair.Rd create mode 100644 man/dot-smooth_rate_curve.Rd create mode 100644 man/estimate_decrement_rates.Rd create mode 100644 man/smooth_decrement_rates.Rd diff --git a/NAMESPACE b/NAMESPACE index 2a8f377..393c268 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -44,6 +44,7 @@ export(detect_inconsistent_cols) export(detect_personnel_event) export(detect_reallocation) export(detect_retirement) +export(estimate_decrement_rates) export(estimate_exit_rates) export(fastcount) export(fastprop) diff --git a/R/demographics.R b/R/demographics.R index e69de29..cbdd182 100644 --- a/R/demographics.R +++ b/R/demographics.R @@ -0,0 +1,759 @@ +#' Compute Decrement Outcome Counts for a Single Consecutive Snapshot Pair +#' +#' @description +#' Internal workhorse intended to be called by \code{roll_snapshot_pairs()} +#' inside a future \code{estimate_decrement_rates()}, mirroring the role +#' \code{.compute_transition_pair()} plays for movement rates. Given two +#' consecutive panel snapshots (\code{snap_t0} at T0 and \code{snap_t1} at +#' T1), this function: +#' +#' \enumerate{ +#' \item Defines the exposure cohort as every person with +#' \code{status_col == "active"} at T0, and tabulates exposure by +#' \code{age_col}/\code{group_cols} using each person's T0 age and +#' group -- ages are never shifted, since individuals are tracked by +#' identity rather than aggregated independently per snapshot. +#' \item Looks up each cohort member's \code{status_col} value at T1 via a +#' native data.table join (\code{x[i, on =]}) on +#' \code{personnel_id_col}. Anyone absent from \code{snap_t1} +#' altogether (i.e. dropped out of the panel) is assigned the +#' synthetic outcome \code{"non-retirement-exit"}. +#' \item Builds the outcome vocabulary from whatever \code{status_col} +#' values actually appear in \code{snap_t1} (e.g. \code{"active"}, +#' \code{"pensioner"}, \code{"deceased"}, ...), unioned with +#' \code{"non-retirement-exit"}, which is always included since it is +#' synthesized rather than drawn from the data. No status values are +#' hardcoded. +#' \item Counts, per \code{age_col}/\code{group_cols}/\code{status_col} +#' combination, how many cohort members ended up with each outcome at +#' T1 -- including \code{"active"} (i.e. stayed), so the resulting +#' rates for a given age/group sum to 1 across all outcome types. +#' \item Expands the result to a complete grid of every exposure +#' age/group crossed with every outcome type, filling \code{exits = 0} +#' where a combination had no occurrences, so no age/group ever +#' collapses into an ambiguous \code{NA}-status row. +#' } +#' +#' @param snap_t0 data.table. Subset of the full personnel panel at snapshot +#' T0, already filtered to a single reference date. Must contain +#' \code{age_col}, \code{status_col}, \code{personnel_id_col}, +#' \code{ref_date_col}, and \code{group_cols}. +#' @param snap_t1 data.table. Subset of the full personnel panel at snapshot +#' T1 (the period immediately following T0). Same column requirements as +#' \code{snap_t0}. +#' @param age_col Character. Name of the (integer or coercible-to-integer) +#' age column. Exposure and outcome counts are keyed by each person's T0 +#' age. +#' @param status_col Character. Name of the employment status column (e.g. +#' \code{"employment_status"}). The literal value \code{"active"} defines +#' the T0 exposure cohort; every other value observed at T1, plus the +#' synthesized \code{"non-retirement-exit"}, forms the outcome vocabulary. +#' @param personnel_id_col Character. Name of the personnel identifier +#' column, used to join each cohort member's T0 record to their T1 status. +#' @param ref_date_col Character. Name of the reference date column used to +#' extract the T0 and T1 dates attached to the output. +#' @param group_cols Character vector. Additional columns (e.g. gender, +#' service type) to stratify exposure and outcome counts by, alongside +#' \code{age_col}. +#' +#' @return A \code{data.table} with one row per +#' \code{(age_col, group_cols, status_col)} combination observed in the T0 +#' exposure cohort. Columns: +#' \describe{ +#' \item{age_col}{Integer. T0 age (column name taken from \code{age_col}).} +#' \item{group_cols}{The stratifying columns, taken directly from T0.} +#' \item{status_col}{Character. The T1 outcome type (column name taken +#' from \code{status_col}), e.g. \code{"active"}, \code{"pensioner"}, +#' \code{"non-retirement-exit"}.} +#' \item{pop}{Integer. Number of active persons at T0 in this age/group +#' (the exposure, and the denominator for \code{decrement_rate}).} +#' \item{exits}{Integer. Number of cohort members in this age/group who +#' had this outcome at T1. \code{0L} where the combination had no +#' occurrences.} +#' \item{decrement_rate}{Numeric. \eqn{exits / pop} for this +#' age/group/outcome combination.} +#' \item{t0_date}{Date. Reference date of the T0 snapshot.} +#' \item{t1_date}{Date. Reference date of the T1 snapshot.} +#' } +#' +#' @seealso \code{\link{.compute_transition_pair}}, \code{\link{roll_snapshot_pairs}} +#' @keywords internal +.compute_decrement_pair <- function(snap_t0, + snap_t1, + age_col, + status_col, + personnel_id_col, + ref_date_col, + group_cols){ + + ## ensure we are working with data.tables + snap_t0 <- as.data.table(snap_t0) + snap_t1 <- as.data.table(snap_t1) + + ### get the reference dates of interest + t0_date <- snap_t0[[ref_date_col]][1L] + t1_date <- snap_t1[[ref_date_col]][1L] + + ### ensure we are using integer ages for classes + snap_t0[, (age_col) := as.integer(get(age_col))] + + ### the cohort of interest: everyone active at t0. exposure/age/group are + ### always taken at t0, so there is no need to shift ages when we later + ### bring in t1 status -- we are tracking the same individuals, not + ### aggregating two snapshots independently + cohort_t0 <- snap_t0[get(status_col) == "active"] + + ### exposure counts by age/group + pop_dt <- cohort_t0[, .(pop = .N), by = c(age_col, group_cols)] + + ### each cohort member's status at t1; anyone absent from the t1 snapshot + ### altogether has left the organization outside of retirement. + ### native data.table join (x[i, on=]) rather than merge() -- it keeps all + ### rows/columns of i (the cohort) plus matched columns of x, via a + ### binary-search join, without merge()'s extra sorting/attribute overhead + t1_status <- unique(snap_t1[, c(personnel_id_col, status_col), with = FALSE]) + + ### the outcome vocabulary is whatever status values are actually present + ### in status_col (e.g. "active", "pensioner", "deceased", + ### "transferred-out", ...) -- we stay agnostic to it rather than + ### hardcoding specific statuses, and we keep "active" (the stay outcome) + ### as a row rather than dropping it, so the table reports a rate for + ### every possible t1 outcome, not just exits. "non-retirement-exit" is + ### the one type that's always included regardless of what's in the data: + ### it's synthesized below for anyone who drops out of the panel entirely + ### rather than showing up with an explicit status at t1 + observed_types <- unique(t1_status[[status_col]]) + observed_types <- observed_types[!is.na(observed_types)] + outcome_types <- union(observed_types, "non-retirement-exit") + + data.table::setnames(t1_status, status_col, ".status_t1") + + cohort_ids <- cohort_t0[, c(personnel_id_col, age_col, group_cols), with = FALSE] + cohort_dt <- t1_status[cohort_ids, on = personnel_id_col] + cohort_dt[is.na(.status_t1), .status_t1 := "non-retirement-exit"] + + ### count every t1 outcome (stay or exit), keyed by each person's t0 + ### age/group -- only cohort members (active at t0) can contribute to the + ### count, so someone who was already a pensioner at t0 and remains one + ### at t1 is never counted as a new exit + exits_dt <- cohort_dt[ + .status_t1 %in% outcome_types, + .(exits = .N), + by = c(age_col, group_cols, ".status_t1") + ] + data.table::setnames(exits_dt, ".status_t1", status_col) + + ### every age/group in the exposure population should report a rate for + ### each outcome type, even where the count is 0 -- otherwise an + ### age/group with no exits at all collapses into a single ambiguous + ### NA-status row instead of explicit zero rows, which breaks both the + ### per-outcome-type qx downstream and pooling across period-pairs later + grid_dt <- pop_dt[, + c(list(pop = pop), stats::setNames(list(outcome_types), status_col)), + by = c(age_col, group_cols) + ] + + ### bring exits onto the full grid (native join, all grid_dt rows/cols kept) + all_dt <- exits_dt[grid_dt, on = c(age_col, group_cols, status_col)] + all_dt[is.na(exits), exits := 0] + all_dt[, decrement_rate := exits / pop] + + ### attach the period pair, matching the convention used by + ### .compute_transition_pair() for later pooling across period-pairs + all_dt[, t0_date := t0_date] + all_dt[, t1_date := t1_date] + + ### lets sort the data.table by age and group columns + all_dt <- all_dt[, c(age_col, group_cols, status_col, + "pop", "exits", "decrement_rate", + "t0_date", "t1_date"), + with = FALSE] + setorderv(all_dt, c(age_col, group_cols)) + + + + return(all_dt[]) +} + + +#' Estimate Empirical Decrement Rates from a Personnel Panel +#' +#' @description +#' Estimates, for each age (and any grouping columns you supply), the +#' empirical probability that a person active in one snapshot ends up in +#' each possible employment status by the next snapshot -- retirement, +#' another kind of exit, or simply staying active. These are the raw +#' ingredients (\code{qx}-style decrement rates) for building an actuarial +#' life table, e.g. with a life-table function that chains them across age. +#' +#' The function walks every consecutive pair of snapshots in +#' \code{personnel_dt}, tracks the same individuals from one snapshot to the +#' next, and pools the results into one stable rate per age/group/outcome +#' using all of the data available, rather than relying on any single pair +#' of snapshots (which can be noisy for ages with few people). +#' +#' @param personnel_dt A data.table (or data.frame/tibble, coerced +#' automatically) containing the personnel panel: multiple snapshots of +#' the same population over time, identified by \code{ref_date_col}. Must +#' contain at least two distinct, non-missing reference dates. +#' @param age_col A single string naming the (integer, or coercible to +#' integer) age column. +#' @param status_col A single string naming the employment status column, +#' e.g. \code{"employment_status"}. The value \code{"active"} identifies +#' who is exposed to risk in each snapshot; every other value your data +#' uses (e.g. \code{"pensioner"}, \code{"deceased"}) is picked up +#' automatically as its own outcome type -- nothing needs to be +#' hardcoded or registered in advance. +#' @param personnel_id_col A single string naming the personnel identifier +#' column, used to track the same person across snapshots. +#' @param ref_date_col A single string naming the reference date column that +#' identifies each snapshot. +#' @param group_cols A character vector of additional columns (e.g. gender, +#' occupation, service type) to estimate separate rates by, alongside age. +#' +#' @return A data.table with one row per age / \code{group_cols} / outcome +#' type, pooled across every consecutive snapshot pair in +#' \code{personnel_dt}: +#' \describe{ +#' \item{age_col, group_cols}{The age and grouping columns, as supplied.} +#' \item{status_col}{The outcome type this row's rate applies to -- +#' \code{"active"} (stayed), an observed exit status (e.g. +#' \code{"pensioner"}), or the synthetic \code{"non-retirement-exit"} +#' (someone who dropped out of the panel without an explicit exit +#' status). For a given age/group, these rows sum to 1.} +#' \item{pop}{Total exposure: the number of person-periods active at the +#' start of a snapshot pair, summed across every pair that contributed +#' to this age/group.} +#' \item{exits}{Total number of people in that exposure who had this +#' outcome by the next snapshot, summed the same way.} +#' \item{decrement_rate}{The pooled rate, \code{exits / pop}. This is the +#' empirical \code{qx} (or \code{px}, for the \code{"active"} row) to +#' feed into a life table.} +#' \item{n_periods}{Number of distinct snapshot pairs that contributed to +#' this age/group/outcome cell -- a quick way to spot ages resting on +#' very little data.} +#' } +#' +#' @details +#' This section is for readers who want to know exactly how the rate is +#' computed, not just what it means. +#' +#' \strong{Two collapsing steps.} Estimating a life-table-ready rate means +#' collapsing two different axes, and this function only ever does the +#' first one: +#' \itemize{ +#' \item \emph{Time}, here: every consecutive snapshot pair in +#' \code{personnel_dt} (2015-2016, 2016-2017, ...) is walked via +#' \code{roll_snapshot_pairs()}, and each pair's exposure/outcome counts +#' are pooled into one age-indexed rate. This function never chains +#' anything across \emph{age} -- that is a separate step (a life-table +#' function operating purely on this function's output). +#' } +#' +#' \strong{Pooling is exposure-weighted, not a mean of rates.} For a given +#' age/group/outcome, \code{pop} and \code{exits} are summed across every +#' contributing snapshot pair \emph{before} dividing. A period-pair with 500 +#' people at risk therefore contributes proportionally more than one with 2 +#' people at risk. A plain average of the per-period rates would let a +#' noisy, thin period swing the estimate just as much as a large one -- +#' this deliberately avoids that. +#' +#' \strong{Cohort tracking, not independent aggregation.} Within each +#' snapshot pair, exposure and outcomes are computed by joining the same +#' individuals from T0 to T1 on \code{personnel_id_col} (see +#' \code{.compute_decrement_pair()}), not by aggregating each snapshot +#' separately and matching on age afterward. This matters: someone who was +#' already a pensioner at T0 and remains one at T1 is never miscounted as a +#' newly observed exit, and each person's age/group is taken from T0, so +#' there is no fragile assumption that snapshots are exactly one year apart. +#' +#' \strong{The outcome vocabulary is derived from the data.} Aside from the +#' synthetic \code{"non-retirement-exit"} (assigned to anyone who drops out +#' of the panel between snapshots without an explicit status change), every +#' outcome type reported is simply whatever value \code{status_col} takes on +#' in your data -- including \code{"active"} itself, so you get a stay +#' probability alongside every exit-type probability. This means the +#' function keeps working unmodified if your data's status vocabulary +#' differs from what was used to build or test it (e.g. adding a +#' \code{"deceased"} status requires no code change). +#' +#' \strong{Caveat.} The literal string \code{"active"} is currently +#' hardcoded as the value of \code{status_col} that defines who is exposed +#' to risk -- unlike the exit-side vocabulary, this one value is assumed +#' rather than derived. +#' +#' @examples +#' \dontrun{ +#' library(data.table) +#' +#' personnel_dt <- data.table( +#' personnel_id = c("P1", "P2", "P1", "P2"), +#' ref_date = as.Date(c("2020-01-01", "2020-01-01", "2021-01-01", "2021-01-01")), +#' age = c(60L, 45L, 61L, 46L), +#' employment_status = c("active", "active", "pensioner", "active"), +#' gender = c("M", "F", "M", "F") +#' ) +#' +#' estimate_decrement_rates( +#' personnel_dt = personnel_dt, +#' age_col = "age", +#' status_col = "employment_status", +#' personnel_id_col = "personnel_id", +#' ref_date_col = "ref_date", +#' group_cols = "gender" +#' ) +#' } +#' +#' @seealso \code{\link{.compute_decrement_pair}}, \code{\link{roll_snapshot_pairs}} +#' @export +estimate_decrement_rates <- function(personnel_dt, + age_col, + status_col, + personnel_id_col, + ref_date_col, + group_cols){ + + + # Validate inputs + if (!data.table::is.data.table(personnel_dt)) { + + personnel_dt <- as.data.table(personnel_dt) + + } + + + # Get sorted unique reference dates + all_dates <- sort(unique(personnel_dt[[ref_date_col]])) + all_dates <- all_dates[!is.na(all_dates)] + + # check if there are gaps in all_dates + # if (any(diff(all_dates) != 1)) { + + # ### fill the missing snapshots within the panels by filling in personnel records available + # ### within + + # } + + if (length(all_dates) < 2) { + stop( + "At least 2 personnel snapshots required to estimate decrement rates. ", + "Found ", + length(all_dates), + " snapshot(s).", + call. = FALSE + ) + } + + + ### roll through the panel, computing decrement counts for each consecutive + ### snapshot pair, then rbindlist() them all together into a single table + decrement_dt <- roll_snapshot_pairs(panel_dt = personnel_dt, + date_col = ref_date_col, + f = .compute_decrement_pair, + # extra args forwarded to .compute_decrement_pair: + age_col = age_col, + status_col = status_col, + personnel_id_col = personnel_id_col, + ref_date_col = ref_date_col, + group_cols = group_cols) + + ### pool across every period-pair into one stable rate per + ### age/group/outcome: sum exposure and events first, then divide -- + ### NOT a mean of the per-period rates. A mean would weight a period-pair + ### with tiny exposure (e.g. pop = 2) the same as one with pop = 500; + ### summing first lets each period-pair contribute in proportion to its + ### actual exposure, which is the standard actuarial pooling approach + pooled_dt <- decrement_dt[, + .(pop = sum(pop, na.rm = TRUE), + exits = sum(exits, na.rm = TRUE), + n_periods = .N), + by = c(age_col, group_cols, status_col) + ] + pooled_dt[, decrement_rate := exits / pop] + setorderv(pooled_dt, c(age_col, group_cols, status_col)) + + return(pooled_dt[]) +} + + + +#' Graduate a Single Age Curve Onto a Complete Age Grid +#' +#' @description +#' Internal single-curve workhorse called by \code{smooth_decrement_rates()} +#' once per \code{(group_cols, status_col)} combination. Given raw +#' \code{(age, rate)} observations for one specific outcome curve (e.g. "male +#' pensioner rate by age"), returns a smoothed rate for \emph{every} age in +#' \code{full_ages} -- including ages that had zero raw observations at all. +#' +#' The method used depends on how much data is actually available, since a +#' local regression needs enough support to be stable: +#' \itemize{ +#' \item Exactly one distinct age observed: there is no trend to fit from a +#' single point, so that one rate is repeated flat across the whole grid. +#' \item Two or three distinct ages: too few for a stable \code{loess} fit, +#' so falls back to \code{stats::approx()} (piecewise linear +#' interpolation). Ages in \code{full_ages} outside the observed range get +#' the nearest boundary value (\code{rule = 2}) rather than \code{NA}. +#' \item Four or more distinct ages: fits +#' \code{stats::loess(rate ~ age, weights = weight, span = span, degree = 2)} +#' and predicts it onto \code{full_ages}. \code{weight} (exposure) means an +#' age with many people at risk pulls the local curve toward its raw rate +#' harder than a thin, noisy age. +#' } +#' +#' @param age Numeric vector. Ages with an observed rate. +#' @param rate Numeric vector. The observed rate at each \code{age} (same +#' length as \code{age}). +#' @param weight Numeric vector. Exposure weight at each \code{age} (same +#' length as \code{age}), used as \code{loess()} weights. +#' @param full_ages Integer vector. The complete, gapless target age grid to +#' return a smoothed rate for. +#' @param span Numeric. The \code{loess()} smoothing span (only used when +#' there are at least 4 distinct ages); larger values produce a smoother, +#' more global fit, smaller values track local features more closely. +#' +#' @return A numeric vector of smoothed rates, one per element of +#' \code{full_ages}, in the same order. Not clipped to \code{[0, 1]} -- +#' callers (e.g. \code{smooth_decrement_rates()}) are responsible for that. +#' +#' @seealso \code{\link{smooth_decrement_rates}} +#' @keywords internal +.smooth_rate_curve <- function(age, rate, weight, full_ages, span) { + n_unique <- length(unique(age)) + + if (n_unique == 1L) { + return(rep(rate[1L], length(full_ages))) + } + + if (n_unique < 4L) { + return(stats::approx(x = age, y = rate, xout = full_ages, rule = 2)$y) + } + + fit <- stats::loess(rate ~ age, weights = weight, span = span, degree = 2) + as.numeric(stats::predict(fit, newdata = data.frame(age = full_ages))) +} + +#' Graduate (Smooth and Gap-Fill) Empirical Decrement Rates +#' +#' @description +#' Takes the pooled output of \code{estimate_decrement_rates()} and returns a +#' version with no age gaps and much less small-cell noise -- both +#' prerequisites for \code{compute_service_table()}'s age-chaining recursion, +#' which needs a complete, stable \code{qx} curve to run at all. +#' +#' Each exit cause (every \code{status_col} value other than +#' \code{active_value}) is graduated independently via +#' \code{.smooth_rate_curve()}, weighted by exposure (\code{pop}) so ages with +#' more data pull their local curve harder than thin, noisy ages. +#' \code{active_value} (the "stayed" outcome) is deliberately never smoothed +#' on its own -- it is derived afterward as \code{1 - } the sum of the +#' smoothed exit rates, which is what guarantees every age/group's rates +#' still sum to exactly 1 after smoothing (independently smoothing every +#' outcome type would not preserve that). +#' +#' @param decrement_dt A data.table (or coercible) shaped like the output of +#' \code{estimate_decrement_rates()}: one row per age / \code{group_cols} / +#' \code{status_col}, with a \code{pop} (exposure) and \code{decrement_rate} +#' column. +#' @param age_col A single string naming the age column. +#' @param status_col A single string naming the outcome-type column. +#' @param group_cols A character vector of stratifying columns (e.g. gender), +#' or \code{NULL} for no stratification. +#' @param active_value A single string giving the \code{status_col} value that +#' represents "stayed" rather than an exit. Defaults to \code{"active"}. +#' @param span Numeric. The \code{loess()} smoothing span passed through to +#' \code{.smooth_rate_curve()}. Defaults to \code{0.75}. +#' +#' @return A data.table with one row per age / \code{group_cols} / +#' \code{status_col}, spanning the full observed age range within each +#' group with no gaps: +#' \describe{ +#' \item{age_col, group_cols}{As supplied.} +#' \item{status_col}{The outcome type, including \code{active_value}.} +#' \item{decrement_rate}{The graduated rate, clipped to \code{[0, 1]}. +#' Sums to 1 across outcome types for a given age/group (up to the +#' clamping caveat below).} +#' } +#' \code{pop}, \code{exits}, and \code{n_periods} from \code{decrement_dt} +#' are not carried forward: an interpolated age never had a real headcount, +#' so those columns would be fabricated rather than meaningful. +#' +#' @details +#' \strong{Age grid.} Each group's target age grid (\code{min(age)} to +#' \code{max(age)}) is computed once across \emph{all} outcome types in +#' \code{decrement_dt}, not separately per \code{status_col}, so every exit +#' cause ends up graduated onto exactly the same set of ages within a group. +#' +#' \strong{Clamping caveat.} If the smoothed exit rates for a given age/group +#' happen to sum to slightly more than 1 (possible when several causes are +#' each pushed up near a sparse edge), the derived \code{active_value} rate is +#' clamped to 0 rather than going negative. In that edge case the row then +#' sums to slightly less than 1 rather than exactly 1 -- a known imperfection +#' that is not further corrected. +#' +#' @seealso \code{\link{.smooth_rate_curve}}, \code{\link{estimate_decrement_rates}}, +#' \code{\link{compute_service_table}} +#' @keywords internal +smooth_decrement_rates <- function(decrement_dt, + age_col, + status_col, + group_cols, + active_value = "active", + span = 0.75) { + + decrement_dt <- as.data.table(decrement_dt) + + ### the age grid to graduate onto: the full observed age range within + ### each group, computed once across all outcome types (not per-status) + ### so every exit cause ends up on exactly the same age sequence + age_range_dt <- decrement_dt[, + .(min_age = min(get(age_col)), max_age = max(get(age_col))), + by = group_cols + ] + + exit_dt <- decrement_dt[get(status_col) != active_value] + + ### when there are no group_cols, age_range_dt is a single global row -- + ### a join has no columns to match on in that case (data.table's `on =` + ### requires a non-empty column vector), so broadcast it directly instead + if (length(group_cols) > 0L) { + exit_dt <- age_range_dt[exit_dt, on = group_cols] + } else { + exit_dt[, c("min_age", "max_age") := age_range_dt[, .(min_age, max_age)]] + } + + smoothed_dt <- exit_dt[, + { + full_ages <- seq.int(min_age[1L], max_age[1L]) + smoothed_rate <- .smooth_rate_curve( + age = get(age_col), + rate = decrement_rate, + weight = pop, + full_ages = full_ages, + span = span + ) + ### clip to a valid probability range -- loess/linear interpolation + ### can overshoot slightly, especially near sparse edges + smoothed_rate <- pmin(pmax(smoothed_rate, 0), 1) + stats::setNames(list(full_ages, smoothed_rate), c(age_col, "decrement_rate")) + }, + by = c(group_cols, status_col) + ] + + ### "active" is never smoothed directly -- it's derived as the complement + ### of the smoothed exit rates, which is what guarantees every age/group's + ### rates still sum to exactly 1 after smoothing (independently smoothing + ### every outcome type, "active" included, would not preserve that) + active_dt <- smoothed_dt[, + .(decrement_rate = pmax(1 - sum(decrement_rate), 0)), + by = c(age_col, group_cols) + ] + active_dt[, (status_col) := active_value] + + out_dt <- data.table::rbindlist(list(smoothed_dt, active_dt), use.names = TRUE) + setorderv(out_dt, c(group_cols, age_col, status_col)) + + return(out_dt[]) +} + + +#' Compute an Actuarial Service Table from a Personnel Panel +#' +#' @description +#' Builds a multiple-decrement service table: for each age (and any +#' \code{group_cols} you supply), the number of survivors (\code{lx}), person- +#' years of service (\code{Lx}, \code{Tx}), and expected remaining years of +#' service (\code{ex}) for a synthetic cohort experiencing today's +#' age-specific empirical decrement rates at every future age. +#' +#' This chains \code{estimate_decrement_rates()}'s pooled, age-indexed rates +#' across \emph{age} -- a different axis from the time-pooling that function +#' already did. By default the rates are graduated first via +#' \code{smooth_decrement_rates()}, since the chain below requires a +#' complete, gapless, reasonably stable \code{qx} curve to produce a sensible +#' result. +#' +#' @param personnel_dt A data.table (or data.frame/tibble, coerced +#' automatically) containing the personnel panel. Passed straight through +#' to \code{estimate_decrement_rates()}. +#' @param age_col A single string naming the age column. +#' @param status_col A single string naming the employment status column. The +#' value \code{"active"} identifies the "stayed" outcome that the survival +#' chain is built from. +#' @param personnel_id_col A single string naming the personnel identifier +#' column. +#' @param ref_date_col A single string naming the reference date column. +#' @param group_cols A character vector of additional columns (e.g. gender, +#' service type) to compute a separate service table for, or \code{NULL} +#' for a single table over the whole population. +#' @param radix Numeric. The size of the synthetic starting cohort at the +#' youngest observed age. Purely a normalizing constant -- it cancels out +#' of \code{ex} and does not represent real people. Defaults to +#' \code{100000}. +#' @param smooth Logical. Whether to graduate the decrement rates via +#' \code{smooth_decrement_rates()} before chaining. Defaults to \code{TRUE}; +#' set to \code{FALSE} to chain the raw pooled rates directly +#' \code{compute_service_table()} will call \code{smooth_decrement_rates()} internally, +#' if any \code{group_cols} stratum has an age gap). +#' @param span Numeric. Forwarded to \code{smooth_decrement_rates()} when +#' \code{smooth = TRUE}. Defaults to \code{0.75}. +#' +#' @return A data.table with one row per age / \code{group_cols}: +#' \describe{ +#' \item{age_col, group_cols}{As supplied.} +#' \item{px}{Probability of remaining active from age x to x+1.} +#' \item{lx}{Survivors at age x, out of \code{radix} at the youngest age: +#' \eqn{l(x) = radix \prod_{y= "2.15.1") { "conf.low", "conf.high", # transition network - "nodes" + "nodes", + # .compute_decrement_pair + "pop", + "exits", + "decrement_rate", + "t1_date", + ".status_t1", + # compute_service_table + "px", + "lx", + "lx_next", + "Lx", + "Tx", + "ex", + # smooth_decrement_rates + "min_age", + "max_age", + "has_gap" )) } diff --git a/man/compute_service_table.Rd b/man/compute_service_table.Rd new file mode 100644 index 0000000..77f4e86 --- /dev/null +++ b/man/compute_service_table.Rd @@ -0,0 +1,125 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/demographics.R +\name{compute_service_table} +\alias{compute_service_table} +\title{Compute an Actuarial Service Table from a Personnel Panel} +\usage{ +compute_service_table( + personnel_dt, + age_col, + status_col, + personnel_id_col, + ref_date_col, + group_cols, + radix = 1e+05, + smooth = FALSE, + span = 0.75 +) +} +\arguments{ +\item{personnel_dt}{A data.table (or data.frame/tibble, coerced +automatically) containing the personnel panel. Passed straight through +to \code{estimate_decrement_rates()}.} + +\item{age_col}{A single string naming the age column.} + +\item{status_col}{A single string naming the employment status column. The +value \code{"active"} identifies the "stayed" outcome that the survival +chain is built from.} + +\item{personnel_id_col}{A single string naming the personnel identifier +column.} + +\item{ref_date_col}{A single string naming the reference date column.} + +\item{group_cols}{A character vector of additional columns (e.g. gender, +service type) to compute a separate service table for, or \code{NULL} +for a single table over the whole population.} + +\item{radix}{Numeric. The size of the synthetic starting cohort at the +youngest observed age. Purely a normalizing constant -- it cancels out +of \code{ex} and does not represent real people. Defaults to +\code{100000}.} + +\item{smooth}{Logical. Whether to graduate the decrement rates via + \code{smooth_decrement_rates()} before chaining. Defaults to \code{TRUE}; + set to \code{FALSE} to chain the raw pooled rates directly +\code{compute_service_table()} will call \code{smooth_decrement_rates()} internally, +if any \code{group_cols} stratum has an age gap).} + +\item{span}{Numeric. Forwarded to \code{smooth_decrement_rates()} when +\code{smooth = TRUE}. Defaults to \code{0.75}.} +} +\value{ +A data.table with one row per age / \code{group_cols}: + \describe{ + \item{age_col, group_cols}{As supplied.} + \item{px}{Probability of remaining active from age x to x+1.} + \item{lx}{Survivors at age x, out of \code{radix} at the youngest age: + \eqn{l(x) = radix \prod_{y Date: Wed, 16 Sep 2026 17:05:59 -0400 Subject: [PATCH 09/23] Export `compute_service_table` and `smooth_decrement_rates`, rename `exp` column to `ex`, update docs, and add tests --- NAMESPACE | 2 + R/demographics.R | 19 +- man/compute_service_table.Rd | 14 +- man/smooth_decrement_rates.Rd | 1 - tests/testthat/test-demographics.R | 408 +++++++++++++++++++++++++++++ 5 files changed, 429 insertions(+), 15 deletions(-) create mode 100644 tests/testthat/test-demographics.R diff --git a/NAMESPACE b/NAMESPACE index 393c268..c8921e6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -25,6 +25,7 @@ export(compute_pension_ratio) export(compute_percentile) export(compute_quantile) export(compute_record_consistency) +export(compute_service_table) export(compute_time_trend) export(compute_trend_summary) export(compute_value_consistency) @@ -87,6 +88,7 @@ export(remove_duplicate_personnel) export(rescale_baseline) export(sample_group) export(scale_plot_height) +export(smooth_decrement_rates) export(validate_data) import(dplyr) import(ggplot2) diff --git a/R/demographics.R b/R/demographics.R index cbdd182..618c182 100644 --- a/R/demographics.R +++ b/R/demographics.R @@ -494,7 +494,7 @@ estimate_decrement_rates <- function(personnel_dt, #' #' @seealso \code{\link{.smooth_rate_curve}}, \code{\link{estimate_decrement_rates}}, #' \code{\link{compute_service_table}} -#' @keywords internal +#' @export smooth_decrement_rates <- function(decrement_dt, age_col, status_col, @@ -592,10 +592,13 @@ smooth_decrement_rates <- function(decrement_dt, #' of \code{ex} and does not represent real people. Defaults to #' \code{100000}. #' @param smooth Logical. Whether to graduate the decrement rates via -#' \code{smooth_decrement_rates()} before chaining. Defaults to \code{TRUE}; -#' set to \code{FALSE} to chain the raw pooled rates directly -#' \code{compute_service_table()} will call \code{smooth_decrement_rates()} internally, -#' if any \code{group_cols} stratum has an age gap). +#' \code{smooth_decrement_rates()} before chaining. Defaults to +#' \code{FALSE}: the raw pooled rates are chained directly, \emph{unless} +#' a \code{group_cols} stratum has an age gap, in which case +#' \code{compute_service_table()} smooths reactively (with a warning) +#' regardless of this setting, since the chain cannot run on a gappy +#' age sequence. Set to \code{TRUE} to always smooth up front, including +#' for noise reduction on strata that have no gap at all. #' @param span Numeric. Forwarded to \code{smooth_decrement_rates()} when #' \code{smooth = TRUE}. Defaults to \code{0.75}. #' @@ -611,7 +614,7 @@ smooth_decrement_rates <- function(decrement_dt, #' exits are spread uniformly across the year).} #' \item{Tx}{Total remaining person-years of service from age x onward: #' \eqn{\sum_{y \ge x} L(y)}.} -#' \item{exp}{Expected remaining years of service at age x: +#' \item{ex}{Expected remaining years of service at age x: #' \eqn{T(x) / l(x)}.} #' } #' @@ -653,7 +656,7 @@ smooth_decrement_rates <- function(decrement_dt, #' } #' #' @seealso \code{\link{estimate_decrement_rates}}, \code{\link{smooth_decrement_rates}} -#' @keywords internal +#' @export compute_service_table <- function(personnel_dt, age_col, status_col, @@ -753,7 +756,7 @@ compute_service_table <- function(personnel_dt, survival_dt[, Tx := rev(cumsum(rev(Lx))), by = group_cols] ### ex = expected remaining years of service for someone currently age x - survival_dt[, exp := Tx / lx] + survival_dt[, ex := Tx / lx] return(survival_dt[]) } \ No newline at end of file diff --git a/man/compute_service_table.Rd b/man/compute_service_table.Rd index 77f4e86..76bd546 100644 --- a/man/compute_service_table.Rd +++ b/man/compute_service_table.Rd @@ -42,10 +42,13 @@ of \code{ex} and does not represent real people. Defaults to \code{100000}.} \item{smooth}{Logical. Whether to graduate the decrement rates via - \code{smooth_decrement_rates()} before chaining. Defaults to \code{TRUE}; - set to \code{FALSE} to chain the raw pooled rates directly -\code{compute_service_table()} will call \code{smooth_decrement_rates()} internally, -if any \code{group_cols} stratum has an age gap).} +\code{smooth_decrement_rates()} before chaining. Defaults to +\code{FALSE}: the raw pooled rates are chained directly, \emph{unless} +a \code{group_cols} stratum has an age gap, in which case +\code{compute_service_table()} smooths reactively (with a warning) +regardless of this setting, since the chain cannot run on a gappy +age sequence. Set to \code{TRUE} to always smooth up front, including +for noise reduction on strata that have no gap at all.} \item{span}{Numeric. Forwarded to \code{smooth_decrement_rates()} when \code{smooth = TRUE}. Defaults to \code{0.75}.} @@ -63,7 +66,7 @@ A data.table with one row per age / \code{group_cols}: exits are spread uniformly across the year).} \item{Tx}{Total remaining person-years of service from age x onward: \eqn{\sum_{y \ge x} L(y)}.} - \item{exp}{Expected remaining years of service at age x: + \item{ex}{Expected remaining years of service at age x: \eqn{T(x) / l(x)}.} } } @@ -122,4 +125,3 @@ compute_service_table( \seealso{ \code{\link{estimate_decrement_rates}}, \code{\link{smooth_decrement_rates}} } -\keyword{internal} diff --git a/man/smooth_decrement_rates.Rd b/man/smooth_decrement_rates.Rd index 3297d56..f3b6a76 100644 --- a/man/smooth_decrement_rates.Rd +++ b/man/smooth_decrement_rates.Rd @@ -80,4 +80,3 @@ that is not further corrected. \code{\link{.smooth_rate_curve}}, \code{\link{estimate_decrement_rates}}, \code{\link{compute_service_table}} } -\keyword{internal} diff --git a/tests/testthat/test-demographics.R b/tests/testthat/test-demographics.R new file mode 100644 index 0000000..a9326c0 --- /dev/null +++ b/tests/testthat/test-demographics.R @@ -0,0 +1,408 @@ +library(testthat) +library(data.table) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +# a single snapshot of the personnel panel +make_snap <- function(personnel_id, ref_date, age, status, ...) { + data.table::data.table( + personnel_id = personnel_id, + ref_date = as.Date(ref_date), + age = as.integer(age), + employment_status = status, + ... + ) +} + +# t0/t1 pair used across the .compute_decrement_pair() bug-regression tests: +# P1, P2: active at 60 -> P1 retires, P2 stays active +# P3: ALREADY a pensioner at t0 (age 65) and remains one at t1 -- must never +# contribute to exposure or exits (the persistent-pensioner bug) +# P4: active at 30 -> drops out of the panel entirely by t1 (non-retirement-exit) +# P5: active at 45 -> explicit "deceased" status at t1 (agnostic-vocabulary check) +decrement_pair_snaps <- function() { + snap_t0 <- make_snap( + c("P1", "P2", "P3", "P4", "P5"), + "2020-01-01", + c(60L, 60L, 65L, 30L, 45L), + c("active", "active", "pensioner", "active", "active"), + gender = c("M", "M", "M", "F", "M") + ) + snap_t1 <- make_snap( + c("P1", "P2", "P3", "P5"), + "2021-01-01", + c(61L, 61L, 66L, 46L), + c("pensioner", "active", "pensioner", "deceased"), + gender = c("M", "M", "M", "M") + ) + list(snap_t0 = snap_t0, snap_t1 = snap_t1) +} + +# a deterministic 3-age panel with exact, hand-verifiable decrement rates: +# age 50 (n=4): 1 retires -> px = 0.75 +# age 51 (n=2): 1 retires -> px = 0.50 +# age 52 (n=2): 0 retire, 0 exit -> px = 1.00 +# used for both estimate_decrement_rates() and compute_service_table() exact- +# arithmetic checks +deterministic_panel <- function() { + data.table::rbindlist(list( + make_snap( + c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8"), + "2020-01-01", + c(50L, 50L, 50L, 50L, 51L, 51L, 52L, 52L), + "active" + ), + make_snap( + c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8"), + "2021-01-01", + c(51L, 51L, 51L, 51L, 52L, 52L, 53L, 53L), + c("pensioner", "active", "active", "active", + "pensioner", "active", "active", "active") + ) + )) +} + +# a panel spanning ages 55-65 with a synthetic 40%/year retirement hazard +# above age 60, with age == 62 removed everywhere -- a real, unrecoverable +# age gap in the raw data, used to exercise gap-filling/smoothing +gapped_panel <- function(n_people = 150, seed = 7) { + set.seed(seed) + ages <- 55:65 + ids <- paste0("P", seq_len(n_people)) + panel <- data.table::rbindlist(lapply(2015:2019, function(yr) { + make_snap(ids, sprintf("%d-01-01", yr), + sample(ages, n_people, replace = TRUE), "active") + })) + data.table::setorder(panel, personnel_id, ref_date) + panel[, employment_status := { + st <- employment_status + for (i in 2:length(st)) { + if (st[i - 1] == "active" && age[i - 1] >= 60 && stats::runif(1) < 0.4) { + st[i:length(st)] <- "pensioner" + } + } + st + }, by = personnel_id] + panel[age != 62] +} + +# --------------------------------------------------------------------------- +# .compute_decrement_pair() -- single snapshot-pair workhorse +# --------------------------------------------------------------------------- +test_that("basic exposure/exit counts and rates are correct", { + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + row_60_pensioner <- out[age == 60 & gender == "M" & employment_status == "pensioner"] + expect_equal(row_60_pensioner$pop, 2L) + expect_equal(row_60_pensioner$exits, 1L) + expect_equal(row_60_pensioner$decrement_rate, 0.5) +}) + +test_that("someone already a pensioner at t0 is excluded from exposure entirely (no rate > 1)", { + # regression test: P3 (age 65, already pensioner at t0) must never inflate + # any age bucket's exits, and age 65 should not appear in the output at all + # since nobody was ACTIVE at age 65 in this panel + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + expect_true(all(out$decrement_rate <= 1)) + expect_false(65L %in% out$age) +}) + +test_that("a non-retirement-exit is attributed to the person's own t0 age, not shifted", { + # regression test: P4 (active, age 30 at t0) drops out of the panel by t1. + # must be counted at age 30, never age 29 (the old hardcoded age-1 shift) + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + row <- out[age == 30 & gender == "F" & employment_status == "non-retirement-exit"] + expect_equal(nrow(row), 1L) + expect_equal(row$exits, 1L) + expect_false(29L %in% out$age) +}) + +test_that("outcome vocabulary is derived from the data, not hardcoded", { + # P5 has an explicit "deceased" status at t1 -- never special-cased anywhere + # in the implementation, so this only works if the vocabulary is data-driven + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + expect_true("deceased" %in% out$employment_status) + row <- out[age == 45 & gender == "M" & employment_status == "deceased"] + expect_equal(row$exits, 1L) +}) + +test_that("every exposed age/group reports all outcome types with explicit zeros, never NA status", { + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + expect_false(anyNA(out$employment_status)) + expect_true(all(out$exits >= 0L)) + # every age/group present has a row for every outcome type observed anywhere + n_types <- data.table::uniqueN(out$employment_status) + counts <- out[, .N, by = .(age, gender)] + expect_true(all(counts$N == n_types)) +}) + +test_that("outcome rates sum to exactly 1 for every age/group", { + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + sums <- out[, .(total = sum(decrement_rate)), by = .(age, gender)] + expect_equal(sums$total, rep(1, nrow(sums))) +}) + +test_that("t0_date and t1_date are attached correctly", { + snaps <- decrement_pair_snaps() + out <- .compute_decrement_pair( + snaps$snap_t0, snaps$snap_t1, + age_col = "age", status_col = "employment_status", + personnel_id_col = "personnel_id", ref_date_col = "ref_date", + group_cols = "gender" + ) + expect_true(all(out$t0_date == as.Date("2020-01-01"))) + expect_true(all(out$t1_date == as.Date("2021-01-01"))) +}) + +# --------------------------------------------------------------------------- +# estimate_decrement_rates() -- pooling across period-pairs +# --------------------------------------------------------------------------- +test_that("errors when fewer than 2 snapshots are present", { + dt <- make_snap("P1", "2020-01-01", 50L, "active") + expect_error( + estimate_decrement_rates(dt, "age", "employment_status", "personnel_id", "ref_date", NULL), + "2 personnel snapshots" + ) +}) + +test_that("non-data.table input is coerced automatically", { + df <- as.data.frame(deterministic_panel()) + out <- estimate_decrement_rates(df, "age", "employment_status", "personnel_id", "ref_date", NULL) + expect_s3_class(out, "data.table") +}) + +test_that("pooled decrement rates match hand-calculated values exactly", { + out <- estimate_decrement_rates( + deterministic_panel(), "age", "employment_status", + "personnel_id", "ref_date", NULL + ) + expect_equal(out[age == 50 & employment_status == "pensioner"]$decrement_rate, 0.25) + expect_equal(out[age == 51 & employment_status == "pensioner"]$decrement_rate, 0.50) + expect_equal(out[age == 52 & employment_status == "pensioner"]$decrement_rate, 0.00) + expect_equal(out[age == 52 & employment_status == "active"]$decrement_rate, 1.00) +}) + +test_that("pooling sums exposure/events across period-pairs, not a mean of per-period rates", { + # age 60/pensioner: pair 1 has pop=2, 1 retires (rate 0.5); + # pair 2 has pop=11, 1 retires (rate 1/11). pooled rate must be + # (1+1)/(2+11) = 2/13, NOT the naive mean (0.5 + 1/11)/2 + panel <- data.table::rbindlist(list( + make_snap(paste0("A", 1:2), "2020-01-01", 60L, "active"), + make_snap(paste0("A", 1:2), "2021-01-01", 61L, c("pensioner", "active")), + make_snap(paste0("B", 1:11), "2021-01-01", 60L, "active"), + make_snap(paste0("B", 1:11), "2022-01-01", 61L, c("pensioner", rep("active", 10))) + ), use.names = TRUE, fill = TRUE) + + out <- estimate_decrement_rates(panel, "age", "employment_status", "personnel_id", "ref_date", NULL) + row <- out[age == 60 & employment_status == "pensioner"] + expect_equal(row$pop, 13L) + expect_equal(row$exits, 2L) + expect_equal(row$decrement_rate, 2 / 13) + expect_equal(row$n_periods, 2L) +}) + +test_that("group_cols = NULL is supported (single, ungrouped table)", { + out <- estimate_decrement_rates(deterministic_panel(), "age", "employment_status", "personnel_id", "ref_date", NULL) + expect_s3_class(out, "data.table") + expect_true(all(c("age", "employment_status", "decrement_rate") %in% names(out))) +}) + +test_that("output rates sum to 1 per age/group after pooling", { + out <- estimate_decrement_rates(deterministic_panel(), "age", "employment_status", "personnel_id", "ref_date", NULL) + sums <- out[, .(total = sum(decrement_rate)), by = age] + expect_equal(sums$total, rep(1, nrow(sums))) +}) + +# --------------------------------------------------------------------------- +# .smooth_rate_curve() -- single-curve graduation +# --------------------------------------------------------------------------- +test_that("a single distinct age is carried forward flat, and left unclipped", { + # rate = 1.5 is not a valid probability -- this checks the function does + # NOT clip; clipping is the caller's (smooth_decrement_rates()) job + out <- .smooth_rate_curve(age = 60L, rate = 1.5, weight = 5, full_ages = 58:62, span = 0.75) + expect_equal(out, rep(1.5, 5)) +}) + +test_that("2-3 distinct ages fall back to linear interpolation matching stats::approx", { + expected <- stats::approx(x = c(60, 62), y = c(0.2, 0.4), xout = 58:64, rule = 2)$y + out <- .smooth_rate_curve(age = c(60, 62), rate = c(0.2, 0.4), weight = c(1, 1), + full_ages = 58:64, span = 0.75) + expect_equal(out, expected) +}) + +test_that("4+ distinct ages use loess and closely recover a known linear trend", { + ages <- 50:59 + rates <- 0.01 * ages + out <- .smooth_rate_curve(age = ages, rate = rates, weight = rep(1, 10), + full_ages = ages, span = 0.75) + expect_equal(out, rates, tolerance = 1e-6) +}) + +# --------------------------------------------------------------------------- +# smooth_decrement_rates() -- gap-fill + graduate +# --------------------------------------------------------------------------- +test_that("fills a real age gap without changing the observed age range", { + panel <- gapped_panel() + raw <- estimate_decrement_rates(panel, "age", "employment_status", "personnel_id", "ref_date", NULL) + expect_false(62L %in% raw$age) # confirm the gap actually exists in raw data + + sm <- smooth_decrement_rates(raw, "age", "employment_status", NULL) + expect_true(62L %in% sm$age) + expect_equal(range(sm$age), range(raw$age)) + expect_false(any(diff(sort(unique(sm$age))) != 1L)) +}) + +test_that("smoothed rates stay within [0, 1] and sum close to 1 per age/group", { + panel <- gapped_panel() + raw <- estimate_decrement_rates(panel, "age", "employment_status", "personnel_id", "ref_date", NULL) + sm <- smooth_decrement_rates(raw, "age", "employment_status", NULL) + + expect_true(all(sm$decrement_rate >= 0 & sm$decrement_rate <= 1)) + sums <- sm[, .(total = sum(decrement_rate)), by = age] + expect_true(all(abs(sums$total - 1) < 0.02)) +}) + +test_that("pop, exits, and n_periods are not carried forward into the smoothed output", { + panel <- gapped_panel() + raw <- estimate_decrement_rates(panel, "age", "employment_status", "personnel_id", "ref_date", NULL) + sm <- smooth_decrement_rates(raw, "age", "employment_status", NULL) + expect_false(any(c("pop", "exits", "n_periods") %in% names(sm))) +}) + +test_that("group_cols = NULL works (regression: on = group_cols join used to fail with NULL)", { + panel <- gapped_panel() + raw <- estimate_decrement_rates(panel, "age", "employment_status", "personnel_id", "ref_date", NULL) + expect_error(smooth_decrement_rates(raw, "age", "employment_status", NULL), NA) +}) + +# --------------------------------------------------------------------------- +# compute_service_table() -- age-chaining +# --------------------------------------------------------------------------- +test_that("lx/Lx/Tx/ex chain matches hand-calculated values exactly", { + st <- compute_service_table( + deterministic_panel(), "age", "employment_status", + "personnel_id", "ref_date", group_cols = NULL, + radix = 100, smooth = FALSE + ) + expect_equal(st$px, c(0.75, 0.50, 1.00)) + expect_equal(st$lx, c(100, 75, 37.5)) + expect_equal(st$lx_next, c(75, 37.5, 37.5)) + expect_equal(st$Lx, c(87.5, 56.25, 37.5)) + expect_equal(st$Tx, c(181.25, 93.75, 37.5)) + expect_equal(st$ex, c(1.8125, 1.25, 1.0)) +}) + +test_that("ex is invariant to the choice of radix", { + st_small <- compute_service_table( + deterministic_panel(), "age", "employment_status", + "personnel_id", "ref_date", group_cols = NULL, radix = 100, smooth = FALSE + ) + st_large <- compute_service_table( + deterministic_panel(), "age", "employment_status", + "personnel_id", "ref_date", group_cols = NULL, radix = 100000000, smooth = FALSE + ) + expect_equal(st_small$ex, st_large$ex) +}) + +test_that("lx is non-increasing within each group", { + # gapped_panel() always has an age gap, so the reactive-smoothing warning + # is expected here and not what this test is checking -- suppress it + panel <- gapped_panel() + panel[, gender := "M"] + st <- suppressWarnings( + compute_service_table(panel, "age", "employment_status", "personnel_id", "ref_date", "gender") + ) + expect_true(all(diff(st$lx) <= 1e-8)) +}) + +test_that("no warning is raised when the age sequence has no gaps", { + n_warn <- 0 + st <- withCallingHandlers( + compute_service_table( + deterministic_panel(), "age", "employment_status", + "personnel_id", "ref_date", group_cols = NULL, smooth = FALSE + ), + warning = function(w) { n_warn <<- n_warn + 1; invokeRestart("muffleWarning") } + ) + expect_equal(n_warn, 0L) +}) + +test_that("a gap with smooth = FALSE warns AND the returned table is actually gap-filled", { + # regression test: earlier, the reactive-smoothing branch re-smoothed + # decrement_dt but never rebuilt survival_dt from it, so the warning fired + # while the chain silently kept running on the stale, still-gappy table + panel <- gapped_panel() + panel[, gender := "M"] + + n_warn <- 0 + st <- withCallingHandlers( + compute_service_table(panel, "age", "employment_status", "personnel_id", "ref_date", "gender"), + warning = function(w) { n_warn <<- n_warn + 1; invokeRestart("muffleWarning") } + ) + expect_equal(n_warn, 1L) + expect_false(any(diff(st$age) != 1L)) + expect_false(anyNA(st$lx)) + expect_false(anyNA(st$ex)) +}) + +test_that("smooth = TRUE up front avoids the reactive warning even with a gap", { + panel <- gapped_panel() + panel[, gender := "M"] + + n_warn <- 0 + st <- withCallingHandlers( + compute_service_table(panel, "age", "employment_status", "personnel_id", "ref_date", "gender", smooth = TRUE), + warning = function(w) { n_warn <<- n_warn + 1; invokeRestart("muffleWarning") } + ) + expect_equal(n_warn, 0L) + expect_false(any(diff(st$age) != 1L)) +}) + +test_that("group_cols = NULL with a gap works end to end (regression: user's original failing call)", { + # the gap triggers the (expected) reactive-smoothing warning; this test is + # only checking that it no longer errors, so the warning is suppressed + panel <- gapped_panel() + expect_error( + suppressWarnings( + compute_service_table(panel, "age", "employment_status", "personnel_id", "ref_date", group_cols = NULL) + ), + NA + ) +}) From 78869829d9c77f6544e76131f3975622a0f87f5b Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 18:01:47 -0400 Subject: [PATCH 10/23] add package dependencies --- DESCRIPTION | 6 +- NAMESPACE | 8 ++ R/{wagebill.R => wagebill_growth.R} | 0 R/wagebill_model.R | 158 ++++++++++++++++++++++++++++ man/compute_growth_decomposition.Rd | 2 +- man/compute_wage_decomposition.Rd | 2 +- man/model_wage.Rd | 40 +++++++ man/plot_model_wage.Rd | 17 +++ man/plot_model_wage_fes.Rd | 22 ++++ tests/testthat/test-model_wage.R | 76 +++++++++++++ 10 files changed, 327 insertions(+), 4 deletions(-) rename R/{wagebill.R => wagebill_growth.R} (100%) create mode 100644 R/wagebill_model.R create mode 100644 man/model_wage.Rd create mode 100644 man/plot_model_wage.Rd create mode 100644 man/plot_model_wage_fes.Rd create mode 100644 tests/testthat/test-model_wage.R diff --git a/DESCRIPTION b/DESCRIPTION index 43db2ac..70454c5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -35,9 +35,11 @@ Imports: tidygraph, ggraph, ggiraph, - igraph -Suggests: + igraph, + fixest, forcats, + ggstats +Suggests: readr, testthat (>= 3.0.0), reactable diff --git a/NAMESPACE b/NAMESPACE index 29b4797..6f18f3b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -66,6 +66,7 @@ export(ggplot_point_line) export(ggplot_segment) export(guess_date_frequency) export(harmonize_columns) +export(model_wage) export(pivot_data360) export(plot_bar_growth) export(plot_bar_total) @@ -77,6 +78,8 @@ export(plot_coverage_heatmap) export(plot_coverage_trend) export(plot_decile) export(plot_histogram) +export(plot_model_wage) +export(plot_model_wage_fes) export(plot_movement) export(plot_movement_cost) export(plot_segment) @@ -155,6 +158,8 @@ importFrom(dplyr, union ) importFrom(dtplyr,lazy_dt) +importFrom(fixest,fixef) +importFrom(forcats,fct_reorder) importFrom(ggiraph, geom_point_interactive, girafe, @@ -165,6 +170,7 @@ importFrom(ggplot2, aes, arrow, coord_cartesian, + element_text, expansion, facet_wrap, geom_col, @@ -177,6 +183,7 @@ importFrom(ggplot2, geom_vline, ggplot, guide_axis, + label_wrap_gen, labs, margin, position_jitter, @@ -200,6 +207,7 @@ importFrom(ggraph, scale_edge_width_continuous ) importFrom(ggrepel,geom_text_repel) +importFrom(ggstats,ggcoef_model) importFrom(ggthemes,scale_color_few) importFrom(glue,glue) importFrom(grDevices,colorRampPalette) diff --git a/R/wagebill.R b/R/wagebill_growth.R similarity index 100% rename from R/wagebill.R rename to R/wagebill_growth.R diff --git a/R/wagebill_model.R b/R/wagebill_model.R new file mode 100644 index 0000000..d26821f --- /dev/null +++ b/R/wagebill_model.R @@ -0,0 +1,158 @@ +#' Fit a wage model with fixed effects +#' +#' Fits a linear wage model based on a set of predictors and fixed effects. +#' +#' @param data A data frame containing the outcome, predictor, and fixed +#' effects columns. +#' @param outcome_var Character. Name of the outcome column. +#' Default `"gross_salary_lcu"`. +#' @param predictor_vars Character vector. Names of predictor columns. +#' Default `c("contract_type", "occupation_native", "educat7", "whours", "paygrade")`. +#' @param fixed_effects_vars Character vector, or `NULL` to fit without fixed +#' effects. Names of fixed effects columns. +#' Default `c("personnel_id", "est_id", "ref_date")`. +#' +#' @details +#' `outcome_var` and `fixed_effects_vars` are required to be present in +#' `data`. `predictor_vars` are covariates and are dropped with a +#' warning rather than failing the whole call; if none remain, the model is +#' fit with an intercept-only right-hand side (`1`). +#' +#' @return A `fixest` model object, as returned by `fixest::feols()`. +#' +#' @export +model_wage <- function( + data, + outcome_var = "gross_salary_lcu", + predictor_vars = c( + "contract_type", + "occupation_native", + "educat7", + "whours", + "paygrade" + ), + fixed_effects_vars = c("personnel_id", "est_id", "ref_date") +) { + if (!outcome_var %in% names(data)) { + stop("`outcome_var` not found in `data`: ", outcome_var) + } + + missing_fixed_effects <- setdiff(fixed_effects_vars, names(data)) + if (length(missing_fixed_effects) > 0) { + stop( + "`fixed_effects_vars` not found in `data`: ", + paste(missing_fixed_effects, collapse = ", ") + ) + } + + missing_predictors <- setdiff(predictor_vars, names(data)) + if (length(missing_predictors) > 0) { + warning( + "dropping `predictor_vars` not found in `data`: ", + paste(missing_predictors, collapse = ", ") + ) + predictor_vars <- intersect(predictor_vars, names(data)) + } + + predictor_rhs <- if (length(predictor_vars) > 0) { + paste(predictor_vars, collapse = " + ") + } else { + "1" + } + + model_formula <- paste(outcome_var, "~", predictor_rhs) + + if (!is.null(fixed_effects_vars) && length(fixed_effects_vars) > 0) { + model_formula <- paste( + model_formula, + "|", + paste(fixed_effects_vars, collapse = " + ") + ) + } + + fixest::feols(as.formula(model_formula), data = data) +} + +#' Plot a wage model fit +#' +#' @param model_fit A `fixest` model object, as returned by `model_wage()`. +#' @return A `ggplot` object visualizing the model coefficients. +#' @export +#' +#' @importFrom ggstats ggcoef_model +#' @importFrom ggplot2 label_wrap_gen +plot_model_wage <- function(model_fit) { + if (!inherits(model_fit, "fixest")) { + stop("`model_fit` must be a fixest model object") + } + + model_fit |> + ggstats::ggcoef_model( + add_reference_rows = TRUE, + categorical_terms_pattern = "{level} (ref: {reference_level})", + facet_labeller = ggplot2::label_wrap_gen(20) + ) +} + +#' Plot fixed effects from a wage model fit +#' +#' @param model_fit A `fixest` model object, as returned by `model_wage()`. +#' @param fixed_effects_var Character. Name of the fixed effects variable to plot. +#' @return A `ggplot` object visualizing the fixed effects. +#' +#' @export +#' +#' @importFrom ggplot2 ggplot aes geom_point labs theme element_text +#' @importFrom dplyr arrange desc mutate +#' @importFrom forcats fct_reorder +#' @importFrom tibble tibble +#' @importFrom fixest fixef +plot_model_wage_fes <- function( + model_fit, + fixed_effects_var = c("personnel_id", "est_id", "ref_date") +) { + if (!inherits(model_fit, "fixest")) { + stop("`model_fit` must be a fixest model object") + } + + fes <- fixest::fixef(model_fit) + + if (!fixed_effects_var %in% names(fes)) { + stop( + "`fixed_effects_var` not found in model fixed effects: ", + fixed_effects_var + ) + } + + fixed_effects_var <- match.arg(fixed_effects_var, choices = names(fes)) + + fes_df <- tibble::tibble( + id = names(fes[[fixed_effects_var]]), + premium = fes[[fixed_effects_var]] + ) |> + dplyr::arrange(dplyr::desc(premium)) |> + dplyr::mutate( + id = forcats::fct_reorder(id, premium) + ) + + average_premium <- mean(fes_df[["premium"]], na.rm = TRUE) + + fes_df |> + ggplot2::ggplot(ggplot2::aes(x = id, y = premium)) + + ggplot2::geom_point() + + ggplot2::labs( + title = paste("Fixed Effects for", fixed_effects_var), + x = fixed_effects_var, + y = "Premium" + ) + + ggplot2::geom_hline(yintercept = average_premium, linetype = "dashed") + + ggplot2::annotate( + "text", + x = 1, + y = average_premium, + label = paste("Average premium:", round(average_premium, 1)), + vjust = -1, + hjust = 0 + ) + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1)) +} diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd index 1a3c031..b8da122 100644 --- a/man/compute_growth_decomposition.Rd +++ b/man/compute_growth_decomposition.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill.R +% Please edit documentation in R/wagebill_growth.R \name{compute_growth_decomposition} \alias{compute_growth_decomposition} \title{Compute growth decomposition of wagebill} diff --git a/man/compute_wage_decomposition.Rd b/man/compute_wage_decomposition.Rd index ad628eb..f720a12 100644 --- a/man/compute_wage_decomposition.Rd +++ b/man/compute_wage_decomposition.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill.R +% Please edit documentation in R/wagebill_growth.R \name{compute_wage_decomposition} \alias{compute_wage_decomposition} \title{Decompose aggregate average-compensation growth into within, between, diff --git a/man/model_wage.Rd b/man/model_wage.Rd new file mode 100644 index 0000000..f472e73 --- /dev/null +++ b/man/model_wage.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/wagebill_model.R +\name{model_wage} +\alias{model_wage} +\title{Fit a wage model with fixed effects} +\usage{ +model_wage( + data, + outcome_var = "gross_salary_lcu", + predictor_vars = c("contract_type", "occupation_native", "educat7", "whours", + "paygrade"), + fixed_effects_vars = c("personnel_id", "est_id", "ref_date") +) +} +\arguments{ +\item{data}{A data frame containing the outcome, predictor, and fixed +effects columns.} + +\item{outcome_var}{Character. Name of the outcome column. +Default `"gross_salary_lcu"`.} + +\item{predictor_vars}{Character vector. Names of predictor columns. +Default `c("contract_type", "occupation_native", "educat7", "whours", "paygrade")`.} + +\item{fixed_effects_vars}{Character vector, or `NULL` to fit without fixed +effects. Names of fixed effects columns. +Default `c("personnel_id", "est_id", "ref_date")`.} +} +\value{ +A `fixest` model object, as returned by `fixest::feols()`. +} +\description{ +Fits a linear wage model based on a set of predictors and fixed effects. +} +\details{ +`outcome_var` and `fixed_effects_vars` are required to be present in +`data`. `predictor_vars` are covariates and are dropped with a +warning rather than failing the whole call; if none remain, the model is +fit with an intercept-only right-hand side (`1`). +} diff --git a/man/plot_model_wage.Rd b/man/plot_model_wage.Rd new file mode 100644 index 0000000..51d0589 --- /dev/null +++ b/man/plot_model_wage.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/wagebill_model.R +\name{plot_model_wage} +\alias{plot_model_wage} +\title{Plot a wage model fit} +\usage{ +plot_model_wage(model_fit) +} +\arguments{ +\item{model_fit}{A `fixest` model object, as returned by `model_wage()`.} +} +\value{ +A `ggplot` object visualizing the model coefficients. +} +\description{ +Plot a wage model fit +} diff --git a/man/plot_model_wage_fes.Rd b/man/plot_model_wage_fes.Rd new file mode 100644 index 0000000..b258c6a --- /dev/null +++ b/man/plot_model_wage_fes.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/wagebill_model.R +\name{plot_model_wage_fes} +\alias{plot_model_wage_fes} +\title{Plot fixed effects from a wage model fit} +\usage{ +plot_model_wage_fes( + model_fit, + fixed_effects_var = c("personnel_id", "est_id", "ref_date") +) +} +\arguments{ +\item{model_fit}{A `fixest` model object, as returned by `model_wage()`.} + +\item{fixed_effects_var}{Character. Name of the fixed effects variable to plot.} +} +\value{ +A `ggplot` object visualizing the fixed effects. +} +\description{ +Plot fixed effects from a wage model fit +} diff --git a/tests/testthat/test-model_wage.R b/tests/testthat/test-model_wage.R new file mode 100644 index 0000000..59e5075 --- /dev/null +++ b/tests/testthat/test-model_wage.R @@ -0,0 +1,76 @@ +wage_data <- data.frame( + gross_salary_lcu = c( + 4687, 5092, 4582, 5798, 5165, 4590, 5244, 5369, 5288, 4847, + 5756, 5195, 4689, 3893, 5562, 4978, 4992, 5472, 5411, 5297, + 5459, 5391, 5037, 4005, 5310, 4972, 4922, 4265, 4761, 5209 + ), + contract_type = c( + "permanent", "temporary", "temporary", "temporary", "temporary", + "temporary", "temporary", "permanent", "temporary", "temporary", + "temporary", "temporary", "permanent", "permanent", "permanent", + "temporary", "temporary", "permanent", "permanent", "temporary", + "temporary", "temporary", "permanent", "permanent", "permanent", + "temporary", "permanent", "temporary", "permanent", "temporary" + ), + occupation_native = c( + "teacher", "teacher", "nurse", "nurse", "teacher", "teacher", + "teacher", "nurse", "nurse", "teacher", "nurse", "nurse", "nurse", + "teacher", "teacher", "teacher", "teacher", "nurse", "teacher", + "teacher", "teacher", "teacher", "teacher", "nurse", "nurse", + "nurse", "nurse", "teacher", "nurse", "nurse" + ), + educat7 = c( + 2, 7, 7, 4, 3, 5, 2, 2, 1, 3, 3, 2, 7, 2, 5, 2, 5, 4, 7, 7, + 5, 4, 6, 1, 3, 2, 3, 3, 1, 5 + ), + whours = c( + 33, 25, 39, 28, 24, 33, 36, 22, 22, 26, 33, 22, 38, 31, 36, + 28, 37, 36, 37, 34, 26, 34, 39, 38, 40, 35, 38, 23, 21, 35 + ), + paygrade = c( + 1, 4, 1, 4, 2, 5, 2, 2, 2, 3, 1, 2, 3, 3, 3, 3, 5, 3, 1, 2, + 4, 2, 2, 4, 5, 1, 5, 5, 5, 4 + ), + personnel_id = rep(1:10, each = 3), + est_id = rep(1:5, length.out = 30), + ref_date = rep(as.Date(c("2020-01-01", "2021-01-01", "2022-01-01")), 10) +) + +test_that("model_wage fits with the default variables", { + fit <- model_wage(wage_data) + expect_s3_class(fit, "fixest") +}) + +test_that("model_wage stops when outcome_var is missing from data", { + d <- wage_data + d$gross_salary_lcu <- NULL + + expect_error(model_wage(d), "outcome_var") +}) + +test_that("model_wage stops when any fixed_effects_vars is missing from data", { + d <- wage_data + d$est_id <- NULL + + expect_error(model_wage(d), "fixed_effects_vars") + expect_error(model_wage(d), "est_id") +}) + +test_that("model_wage drops missing predictor_vars with a warning rather than failing", { + d <- wage_data + d$paygrade <- NULL + + expect_warning( + fit <- model_wage(d), + "paygrade" + ) + expect_s3_class(fit, "fixest") +}) + +test_that("model_wage falls back to an intercept-only formula when no predictor_vars remain", { + expect_warning( + fit <- model_wage(wage_data, predictor_vars = c("does_not_exist")), + "does_not_exist" + ) + expect_s3_class(fit, "fixest") +}) From 7ceedc6740038f49c8d39474f8f830190b0d8060 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 18:15:58 -0400 Subject: [PATCH 11/23] fix conflicts --- R/zzz.R | 3 +- renv.lock | 550 ++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 435 insertions(+), 118 deletions(-) diff --git a/R/zzz.R b/R/zzz.R index 7f24782..5c22df6 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -225,8 +225,7 @@ if (getRversion() >= "2.15.1") { # smooth_decrement_rates "min_age", "max_age", - "has_gap" - "nodes", + "has_gap", # compute growth decomposition "ref_date", "transition_type", diff --git a/renv.lock b/renv.lock index a219650..f6aea7b 100644 --- a/renv.lock +++ b/renv.lock @@ -9,6 +9,31 @@ ] }, "Packages": { + "Formula": { + "Package": "Formula", + "Version": "1.2-6", + "Source": "Repository", + "Date": "2026-08-01", + "Title": "Extended Model Formulas", + "Description": "Infrastructure for extended formulas with multiple parts on the right-hand side and/or multiple responses on the left-hand side (see ).", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Yves\", family = \"Croissant\", role = \"aut\", email = \"Yves.Croissant@univ-reunion.fr\", comment = c(ORCID = \"0000-0002-4857-7736\")))", + "Depends": [ + "R (>= 2.0.0)", + "stats" + ], + "Suggests": [ + "knitr", + "rmarkdown" + ], + "License": "GPL-2 | GPL-3", + "VignetteBuilder": "knitr", + "URL": "https://zeileis.codeberg.page/Formula/", + "BugReports": "https://codeberg.org/zeileis/Formula/issues", + "NeedsCompilation": "no", + "Author": "Achim Zeileis [aut, cre] (ORCID: ), Yves Croissant [aut] (ORCID: )", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, "ISOcodes": { "Package": "ISOcodes", "Version": "2026.03.28", @@ -151,32 +176,6 @@ "NeedsCompilation": "no", "Repository": "CRAN" }, - "RCurl": { - "Package": "RCurl", - "Version": "1.98-1.20", - "Source": "Repository", - "Title": "General Network (HTTP/FTP/...) Client Interface for R", - "Authors@R": "c(person(\"CRAN Team\", role = 'ctb', email = \"CRAN@r-project.org\", comment = \"de facto maintainer in 2013-2026\"), person(\"Duncan\", \"Temple Lang\", role = \"aut\", email = \"duncan@r-project.org\", comment = c(ORCID = \"0000-0003-0159-1546\")), person(\"Ivan\", \"Krylov\", role = \"cre\", email = \"ikrylov@disroot.org\"))", - "SystemRequirements": "GNU make, libcurl", - "Description": "A wrapper for 'libcurl' Provides functions to allow one to compose general HTTP requests and provides convenient functions to fetch URIs, get & post forms, etc. and process the results returned by the Web server. This provides a great deal of control over the HTTP/FTP/... connection and the form of the request while providing a higher-level interface than is available just using R socket connections. Additionally, the underlying implementation is robust and extensive, supporting FTP/FTPS/TFTP (uploads and downloads), SSL/HTTPS, telnet, dict, ldap, and also supports cookies, redirects, authentication, etc.", - "License": "BSD_3_clause + file LICENSE", - "Depends": [ - "R (>= 3.4.0)", - "methods" - ], - "Imports": [ - "bitops" - ], - "Suggests": [ - "XML" - ], - "Collate": "aclassesEnums.R bitClasses.R xbits.R base64.R binary.S classes.S curl.S curlAuthConstants.R curlEnums.R curlError.R curlInfo.S dynamic.R form.S getFormParams.R getURLContent.R header.R http.R httpError.R httpErrors.R iconv.R info.S mime.R multi.S options.S scp.R support.S upload.R urlExists.R zclone.R zzz.R", - "BugReports": "https://codeberg.org/aitap/RCurl", - "NeedsCompilation": "yes", - "Author": "CRAN Team [ctb] (de facto maintainer in 2013-2026), Duncan Temple Lang [aut] (ORCID: ), Ivan Krylov [cre]", - "Maintainer": "Ivan Krylov ", - "Repository": "CRAN" - }, "Rcpp": { "Package": "Rcpp", "Version": "1.1.2", @@ -360,7 +359,7 @@ }, "arrow": { "Package": "arrow", - "Version": "25.0.1", + "Version": "25.0.0", "Source": "Repository", "Title": "Integration to 'Apache' 'Arrow'", "Authors@R": "c( person(\"Neal\", \"Richardson\", email = \"neal.p.richardson@gmail.com\", role = c(\"aut\")), person(\"Ian\", \"Cook\", email = \"ianmcook@gmail.com\", role = c(\"aut\")), person(\"Nic\", \"Crane\", email = \"thisisnic@gmail.com\", role = c(\"aut\")), person(\"Dewey\", \"Dunnington\", role = c(\"aut\"), email = \"dewey@fishandwhistle.net\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Romain\", \"Fran\\u00e7ois\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Jonathan\", \"Keane\", email = \"jkeane@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Bryce\", \"Mecum\", email = \"brycemecum@gmail.com\", role = c(\"aut\")), person(\"Drago\\u0219\", \"Moldovan-Gr\\u00fcnfeld\", email = \"dragos.mold@gmail.com\", role = c(\"aut\")), person(\"Jeroen\", \"Ooms\", email = \"jeroen@berkeley.edu\", role = c(\"aut\")), person(\"Jacob\", \"Wujciak-Jens\", email = \"jacob@wujciak.de\", role = c(\"aut\")), person(\"Javier\", \"Luraschi\", email = \"javier@rstudio.com\", role = c(\"ctb\")), person(\"Karl\", \"Dunkle Werner\", email = \"karldw@users.noreply.github.com\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Jeffrey\", \"Wong\", email = \"jeffreyw@netflix.com\", role = c(\"ctb\")), person(\"Apache Arrow\", email = \"dev@arrow.apache.org\", role = c(\"aut\", \"cph\")) )", @@ -420,7 +419,7 @@ "cpp11 (>= 0.4.2)" ], "Collate": "'arrowExports.R' 'enums.R' 'arrow-object.R' 'type.R' 'array-data.R' 'arrow-datum.R' 'array.R' 'arrow-info.R' 'arrow-package.R' 'arrow-tabular.R' 'buffer.R' 'chunked-array.R' 'io.R' 'compression.R' 'scalar.R' 'compute.R' 'config.R' 'csv.R' 'dataset.R' 'dataset-factory.R' 'dataset-format.R' 'dataset-partition.R' 'dataset-scan.R' 'dataset-write.R' 'dictionary.R' 'dplyr-across.R' 'dplyr-arrange.R' 'dplyr-by.R' 'dplyr-collect.R' 'dplyr-count.R' 'dplyr-datetime-helpers.R' 'dplyr-distinct.R' 'dplyr-eval.R' 'dplyr-filter.R' 'dplyr-funcs-agg.R' 'dplyr-funcs-augmented.R' 'dplyr-funcs-conditional.R' 'dplyr-funcs-datetime.R' 'dplyr-funcs-doc.R' 'dplyr-funcs-math.R' 'dplyr-funcs-simple.R' 'dplyr-funcs-string.R' 'dplyr-funcs-type.R' 'expression.R' 'dplyr-funcs.R' 'dplyr-glimpse.R' 'dplyr-group-by.R' 'dplyr-join.R' 'dplyr-mutate.R' 'dplyr-select.R' 'dplyr-slice.R' 'dplyr-summarize.R' 'dplyr-union.R' 'record-batch.R' 'table.R' 'dplyr.R' 'duckdb.R' 'extension.R' 'feather.R' 'field.R' 'filesystem.R' 'flight.R' 'install-arrow.R' 'ipc-stream.R' 'json.R' 'memory-pool.R' 'message.R' 'metadata.R' 'parquet.R' 'python.R' 'query-engine.R' 'record-batch-reader.R' 'record-batch-writer.R' 'reexports-tidyselect.R' 'schema.R' 'udf.R' 'util.R'", - "Config/roxygen2/version": "8.1.0", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", "Author": "Neal Richardson [aut], Ian Cook [aut], Nic Crane [aut], Dewey Dunnington [aut] (ORCID: ), Romain François [aut] (ORCID: ), Jonathan Keane [aut, cre], Bryce Mecum [aut], Dragoș Moldovan-Grünfeld [aut], Jeroen Ooms [aut], Jacob Wujciak-Jens [aut], Javier Luraschi [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Jeffrey Wong [ctb], Apache Arrow [aut, cph]", "Maintainer": "Jonathan Keane ", @@ -578,7 +577,7 @@ }, "bit64": { "Package": "bit64", - "Version": "4.8.6", + "Version": "4.8.2", "Source": "Repository", "Title": "A S3 Class for Vectors of 64bit Integers", "Authors@R": "c( person(\"Michael\", \"Chirico\", email=\"michaelchirico4@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role=\"aut\"), person(\"Leonardo\", \"Silvestri\", role=\"ctb\"), person(\"Ofek\", \"Shilon\", role=\"ctb\"), person(\"Christian\", \"Ullerich\", role=\"ctb\") )", @@ -606,7 +605,7 @@ "Config/testthat/edition": "3", "Config/Needs/development": "patrick, testthat", "Config/Needs/website": "tidyverse/tidytemplate", - "Config/roxygen2/version": "8.0.0", + "RoxygenNote": "7.3.3", "NeedsCompilation": "yes", "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Leonardo Silvestri [ctb], Ofek Shilon [ctb], Christian Ullerich [ctb]", "Maintainer": "Michael Chirico ", @@ -1085,10 +1084,10 @@ }, "collapse": { "Package": "collapse", - "Version": "2.1.8", + "Version": "2.1.7", "Source": "Repository", "Title": "Advanced and Fast Data Transformation", - "Date": "2026-08-29", + "Date": "2026-05-17", "Authors@R": "c( person(\"Sebastian\", \"Krantz\", role = c(\"aut\", \"cre\"), email = \"sebastian.krantz@graduateinstitute.ch\", comment = c(ORCID = \"0000-0001-6212-5229\")), person(\"Matt\", \"Dowle\", role = \"ctb\"), person(\"Arun\", \"Srinivasan\", role = \"ctb\"), person(\"Morgan\", \"Jacob\", role = \"ctb\"), person(\"Dirk\", \"Eddelbuettel\", role = \"ctb\"), person(\"Laurent\", \"Berge\", role = \"ctb\"), person(\"Kevin\", \"Tappe\", role = \"ctb\"), person(\"Alina\", \"Cherkas\", role = \"ctb\"), person(\"Ivan\", \"Krylov\", role = \"ctb\"), person(\"R Core Team and contributors worldwide\", role = \"ctb\"), person(\"Martyn\", \"Plummer\", role = \"cph\"), person(\"1999-2016 The R Core Team\", role = \"cph\") )", "Description": "A large C/C++-based package for advanced data transformation and statistical computing in R that is extremely fast, class-agnostic, robust, and programmer friendly. Core functionality includes a rich set of S3 generic grouped and weighted statistical functions for vectors, matrices and data frames, which provide efficient low-level vectorizations, OpenMP multithreading, and skip missing values by default. These are integrated with fast grouping and ordering algorithms (also callable from C), and efficient data manipulation functions. The package also provides a flexible and rigorous approach to time series and panel data in R, fast functions for data transformation and common statistical procedures, detailed (grouped, weighted) summary statistics, powerful tools to work with nested data, fast data object conversions, functions for memory efficient R programming, and helpers to effectively deal with variable labels, attributes, and missing data. It seamlessly supports base R objects/classes as well as 'units', 'integer64', 'xts'/ 'zoo', 'tibble', 'grouped_df', 'data.table', 'sf', and 'pseries'/'pdata.frame'. For a concise overview of the package see Krantz (2026) .", "URL": "https://fastverse.org/collapse/, https://github.com/fastverse/collapse", @@ -1303,7 +1302,7 @@ }, "curl": { "Package": "curl", - "Version": "8.0.0", + "Version": "7.1.0", "Source": "Repository", "Type": "Package", "Title": "A Modern and Flexible Web Client for R", @@ -1327,9 +1326,9 @@ "Depends": [ "R (>= 3.0.0)" ], + "RoxygenNote": "7.3.2", "Encoding": "UTF-8", "Language": "en-US", - "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", "Maintainer": "Jeroen Ooms ", @@ -1337,7 +1336,7 @@ }, "data.table": { "Package": "data.table", - "Version": "1.18.6.1", + "Version": "1.18.4", "Source": "Repository", "Title": "Extension of `data.frame`", "Depends": [ @@ -1363,9 +1362,9 @@ "VignetteBuilder": "knitr", "Encoding": "UTF-8", "ByteCompile": "TRUE", - "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"Mezquita\", role=\"ctb\", comment = c(ORCID=\"0000-0002-9307-6762\")), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\"), person(\"Tarun\", \"Thammisetty\", role=\"ctb\"), person(\"Marco\", \"Colombo\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6672-0623\")), person(\"Tim\", \"Taylor\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")) )", + "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\"), person(\"Tarun\", \"Thammisetty\", role=\"ctb\") )", "NeedsCompilation": "yes", - "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck Mezquita [ctb] (ORCID: ), Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb], Tarun Thammisetty [ctb], Marco Colombo [ctb] (ORCID: ), Tim Taylor [ctb] (ORCID: )", + "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb], Tarun Thammisetty [ctb]", "Maintainer": "Tyson Barrett ", "Repository": "CRAN" }, @@ -1476,7 +1475,7 @@ }, "diffobj": { "Package": "diffobj", - "Version": "0.3.9", + "Version": "0.3.8", "Source": "Repository", "Type": "Package", "Title": "Diffs for R Objects", @@ -1641,6 +1640,35 @@ "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, + "dreamerr": { + "Package": "dreamerr", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Error Handling Made Easy", + "Authors@R": "person(\"Laurent\", \"Berge\", email = \"laurent.berge@u-bordeaux.fr\", role = c(\"aut\", \"cre\"))", + "Imports": [ + "Formula", + "utils", + "stringmagic(>= 1.2.0)" + ], + "Suggests": [ + "knitr", + "rmarkdown", + "stats", + "graphics" + ], + "Description": "Set of tools to facilitate package development and make R a more user-friendly place. Mostly for developers (or anyone who writes/shares functions). Provides a simple, powerful and flexible way to check the arguments passed to functions. The developer can easily describe the type of argument needed. If the user provides a wrong argument, then an informative error message is prompted with the requested type and the problem clearly stated--saving the user a lot of time in debugging.", + "License": "GPL-3", + "Encoding": "UTF-8", + "VignetteBuilder": "knitr", + "BugReports": "https://github.com/lrberge/dreamerr/issues", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Laurent Berge [aut, cre]", + "Maintainer": "Laurent Berge ", + "Repository": "CRAN" + }, "dtplyr": { "Package": "dtplyr", "Version": "1.3.3", @@ -1821,6 +1849,62 @@ "Maintainer": "Winston Chang ", "Repository": "CRAN" }, + "fixest": { + "Package": "fixest", + "Version": "0.14.2", + "Source": "Repository", + "Type": "Package", + "Title": "Fast Fixed-Effects Estimations", + "Authors@R": "c(person(given = \"Laurent\", family = \"Berge\", role = c(\"aut\", \"cre\"), email = \"laurent.berge@u-bordeaux.fr\"), person(given = \"Sebastian\", family = \"Krantz\", role = \"ctb\"), person(given = \"Grant\", family = \"McDermott\", role = \"ctb\", email = \"grantmcd@uoregon.edu\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(given = \"Russell\", family = \"Lenth\", role = \"ctb\", email = \"russell-lenth@uiowa.edu\"), person(given = \"Kyle\", family = \"Butts\", role = \"ctb\", email = \"buttskyle96@gmail.com\"))", + "Imports": [ + "stats", + "graphics", + "grDevices", + "tools", + "utils", + "methods", + "numDeriv", + "nlme", + "sandwich", + "Rcpp(>= 1.0.5)", + "dreamerr(>= 1.4.0)", + "stringmagic(>= 1.2.0)" + ], + "Suggests": [ + "knitr", + "rmarkdown", + "data.table", + "plm", + "MASS", + "pander", + "ggplot2", + "lfe", + "tinytex", + "pdftools", + "emmeans", + "estimability", + "AER", + "Matrix" + ], + "LinkingTo": [ + "Rcpp" + ], + "Depends": [ + "R(>= 3.5.0)" + ], + "Description": "Fast and user-friendly estimation of econometric models with multiple fixed-effects. Includes ordinary least squares (OLS), instrumental variables (IV), generalized linear models (GLM), maximum likelihood estimation (ML), and the negative binomial. The core of the package is based on optimized parallel C++ code, scaling especially well for large data sets. The method to obtain the fixed-effects coefficients is based on Bergé, Butts, McDermott (2026) . Further provides tools to export and view the results of several estimations with intuitive design to change the standard-errors.", + "License": "GPL-3", + "BugReports": "https://github.com/lrberge/fixest/issues", + "URL": "https://lrberge.github.io/fixest/, https://github.com/lrberge/fixest", + "VignetteBuilder": "knitr", + "LazyData": "true", + "RoxygenNote": "7.3.2.9000", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Laurent Berge [aut, cre], Sebastian Krantz [ctb], Grant McDermott [ctb] (ORCID: ), Russell Lenth [ctb], Kyle Butts [ctb]", + "Maintainer": "Laurent Berge ", + "Repository": "CRAN" + }, "fontBitstreamVera": { "Package": "fontBitstreamVera", "Version": "0.1.1", @@ -2157,7 +2241,7 @@ }, "gert": { "Package": "gert", - "Version": "2.4.1", + "Version": "2.4.0", "Source": "Repository", "Type": "Package", "Title": "Simple Git Client for R", @@ -2486,26 +2570,82 @@ "Maintainer": "Kamil Slowikowski ", "Repository": "CRAN" }, + "ggstats": { + "Package": "ggstats", + "Version": "0.14.0", + "Source": "Repository", + "Type": "Package", + "Title": "Extension to 'ggplot2' for Plotting Stats", + "Authors@R": "c( person( \"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-7097-700X\") ) )", + "Description": "Provides new statistics, new geometries and new positions for 'ggplot2' and a suite of functions to facilitate the creation of statistical plots.", + "License": "GPL (>= 3)", + "URL": "https://larmarange.github.io/ggstats/, https://github.com/larmarange/ggstats", + "BugReports": "https://github.com/larmarange/ggstats/issues", + "Depends": [ + "R (>= 4.2)" + ], + "Imports": [ + "cli", + "dplyr", + "forcats", + "ggplot2 (>= 4.0.0)", + "lifecycle", + "patchwork", + "purrr", + "rlang", + "scales", + "stats", + "stringr", + "utils", + "tidyr" + ], + "Suggests": [ + "betareg", + "broom", + "broom.helpers (>= 1.20.0)", + "emmeans", + "glue", + "gtsummary", + "knitr", + "labelled (>= 2.11.0)", + "reshape", + "rmarkdown", + "nnet", + "parameters", + "pscl", + "testthat (>= 3.0.0)", + "spelling", + "survey", + "survival", + "vdiffr" + ], + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "Language": "en-US", + "VignetteBuilder": "knitr", + "Config/roxygen2/version": "8.1.0", + "NeedsCompilation": "no", + "Author": "Joseph Larmarange [aut, cre] (ORCID: )", + "Maintainer": "Joseph Larmarange ", + "Repository": "CRAN" + }, "ggthemes": { "Package": "ggthemes", - "Version": "6.0.0", + "Version": "5.2.0", "Source": "Repository", "Title": "Extra Themes, Scales and Geoms for 'ggplot2'", - "Authors@R": "c(person(\"Jeffrey B.\", \"Arnold\", role = c(\"aut\", \"cre\"), email = \"jeffrey.arnold@gmail.com\", comment = \"\"), person(\"Gergely\", \"Daroczi\", role = \"ctb\"), person(\"Bo\", \"Werth\", role = \"ctb\"), person(\"Brian\", \"Weitzner\", role = \"ctb\"), person(\"Joshua\", \"Kunst\", role = \"ctb\"), person(\"Baptiste\", \"Auguie\", role = \"ctb\"), person(\"Bob\", \"Rudis\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = c(\"ctb\"), comment = \"Code from the ggplot2 package.\"), person(\"Justin\", \"Talbot\", role = \"ctb\", comment = \"Code from the labeling package\"), person(\"Joshua\", \"London\", role = \"ctb\"))", + "Authors@R": "c(person(\"Jeffrey B.\", \"Arnold\", role = c(\"aut\", \"cre\"), email = \"jeffrey.arnold@gmail.com\", comment = \"\"), person(\"Gergely\", \"Daroczi\", role = \"ctb\"), person(\"Bo\", \"Werth\", role = \"ctb\"), person(\"Brian\", \"Weitzner\", role = \"ctb\"), person(\"Joshua\", \"Kunst\", role = \"ctb\"), person(\"Baptise\", \"Auguie\", role = \"ctb\"), person(\"Bob\", \"Rudis\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = c(\"ctb\"), comment = \"Code from the ggplot2 package.\"), person(\"Justin\", \"Talbot\", role = \"ctb\", comment = \"Code from the labeling package\"), person(\"Joshua\", \"London\", role = \"ctb\"))", "Depends": [ - "R (>= 4.1.0)" + "R (>= 3.3.0)" ], "Imports": [ - "cli", "ggplot2 (>= 3.0.0)", "graphics", "grid", "lifecycle", "methods", "purrr", - "rlang", "scales", - "stats", "stringr", "tibble" ], @@ -2521,6 +2661,7 @@ "mapproj", "pander", "quantreg", + "rlang", "rmarkdown", "spelling", "testthat (>= 3.2.0)", @@ -2530,16 +2671,16 @@ ], "Description": "Some extra themes, geoms, and scales for 'ggplot2'. Provides 'ggplot2' themes and scales that replicate the look of plots by Edward Tufte, Stephen Few, 'Fivethirtyeight', 'The Economist', 'Stata', 'Excel', and 'The Wall Street Journal', among others. Provides 'geoms' for Tufte's box plot and range frame.", "License": "GPL-2", - "URL": "https://jrnold.github.io/ggthemes/, https://github.com/jrnold/ggthemes", + "URL": "https://jrnold.github.io/ggthemes/, https://github.com/jrnold/ggthemes, http://jrnold.github.io/ggthemes/", "BugReports": "https://github.com/jrnold/ggthemes/issues", + "RoxygenNote": "7.3.3", "LazyData": "true", "Language": "en-US", "Encoding": "UTF-8", "Config/testthat/edition": "3", "Config/Needs/website": "pkgdown", - "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "no", - "Author": "Jeffrey B. Arnold [aut, cre] (), Gergely Daroczi [ctb], Bo Werth [ctb], Brian Weitzner [ctb], Joshua Kunst [ctb], Baptiste Auguie [ctb], Bob Rudis [ctb], Hadley Wickham [ctb] (Code from the ggplot2 package.), Justin Talbot [ctb] (Code from the labeling package), Joshua London [ctb]", + "Author": "Jeffrey B. Arnold [aut, cre] (), Gergely Daroczi [ctb], Bo Werth [ctb], Brian Weitzner [ctb], Joshua Kunst [ctb], Baptise Auguie [ctb], Bob Rudis [ctb], Hadley Wickham [ctb] (Code from the ggplot2 package.), Justin Talbot [ctb] (Code from the labeling package), Joshua London [ctb]", "Maintainer": "Jeffrey B. Arnold ", "Repository": "CRAN" }, @@ -3091,7 +3232,7 @@ }, "httr": { "Package": "httr", - "Version": "1.4.9", + "Version": "1.4.8", "Source": "Repository", "Title": "Tools for Working with URLs and HTTP", "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", @@ -3122,8 +3263,8 @@ ], "VignetteBuilder": "knitr", "Config/Needs/website": "tidyverse/tidytemplate", - "Config/roxygen2/version": "8.1.0", "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", "NeedsCompilation": "no", "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", "Maintainer": "Hadley Wickham ", @@ -3445,11 +3586,11 @@ }, "knitr": { "Package": "knitr", - "Version": "1.52", + "Version": "1.51", "Source": "Repository", "Type": "Package", "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Leonidas\", \"Zhak\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", "Depends": [ "R (>= 3.6.0)" @@ -3473,11 +3614,12 @@ "jpeg", "JuliaCall (>= 0.11.1)", "magick", - "litedown (>= 0.10)", + "litedown", + "markdown (>= 1.3)", "otel", "otelsdk", "png", - "ragg (>= 1.5.0)", + "ragg", "reticulate (>= 1.4)", "rgl (>= 0.95.1201)", "rlang", @@ -3500,10 +3642,10 @@ "Encoding": "UTF-8", "VignetteBuilder": "litedown, knitr", "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks-typst.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", - "Config/roxygen2/version": "8.1.0", + "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", + "RoxygenNote": "7.3.3", "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johan Larsson [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Leonidas Zhak [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", "Maintainer": "Yihui Xie ", "Repository": "CRAN" }, @@ -3743,7 +3885,7 @@ }, "litedown": { "Package": "litedown", - "Version": "0.11", + "Version": "0.10", "Source": "Repository", "Type": "Package", "Title": "A Lightweight Version of R Markdown", @@ -3769,7 +3911,7 @@ "BugReports": "https://github.com/yihui/litedown/issues", "VignetteBuilder": "litedown", "Encoding": "UTF-8", - "Config/roxygen2/version": "8.1.0", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "no", "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Tim Taylor [ctb] (ORCID: )", "Maintainer": "Yihui Xie ", @@ -4020,6 +4162,40 @@ "Maintainer": "Nicholas Tierney ", "Repository": "CRAN" }, + "nlme": { + "Package": "nlme", + "Version": "3.1-169", + "Source": "Repository", + "Date": "2026-03-27", + "Priority": "recommended", + "Title": "Linear and Nonlinear Mixed Effects Models", + "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"), person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"), person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"), person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"), person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"), person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"), person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"), person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"), person(\"R Core Team\", email = \"R-core@R-project.org\", role = c(\"aut\", \"cre\"), comment = c(ROR = \"02zz1nj61\")))", + "Contact": "see 'MailingList'", + "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "graphics", + "stats", + "utils", + "lattice" + ], + "Suggests": [ + "MASS", + "SASmixed" + ], + "LazyData": "yes", + "Encoding": "UTF-8", + "License": "GPL (>= 2)", + "BugReports": "https://bugs.r-project.org", + "MailingList": "R-help@r-project.org", + "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", + "NeedsCompilation": "yes", + "Author": "José Pinheiro [aut] (S version), Douglas Bates [aut] (up to 2007), Saikat DebRoy [ctb] (up to 2002), Deepayan Sarkar [ctb] (up to 2005), EISPACK authors [ctb] (src/rs.f), Siem Heisterkamp [ctb] (Author fixed sigma), Bert Van Willigen [ctb] (Programmer fixed sigma), Johannes Ranke [ctb] (varConstProp()), R Core Team [aut, cre] (ROR: )", + "Maintainer": "R Core Team ", + "Repository": "CRAN" + }, "norm": { "Package": "norm", "Version": "1.0-11.1", @@ -4039,6 +4215,25 @@ "Repository/R-Forge/DateTimeStamp": "2023-06-18 14:31:55", "NeedsCompilation": "yes" }, + "numDeriv": { + "Package": "numDeriv", + "Version": "2016.8-1.1", + "Source": "Repository", + "Title": "Accurate Numerical Derivatives", + "Description": "Methods for calculating (usually) accurate numerical first and second order derivatives. Accurate calculations are done using 'Richardson''s' extrapolation or, when applicable, a complex step derivative is available. A simple difference method is also provided. Simple difference is (usually) less accurate but is much quicker than 'Richardson''s' extrapolation and provides a useful cross-check. Methods are provided for real scalar and vector valued functions.", + "Depends": [ + "R (>= 2.11.1)" + ], + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL-2", + "Copyright": "2006-2011, Bank of Canada. 2012-2016, Paul Gilbert", + "Author": "Paul Gilbert and Ravi Varadhan", + "Maintainer": "Paul Gilbert ", + "URL": "http://optimizer.r-forge.r-project.org/", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, "openssl": { "Package": "openssl", "Version": "2.4.2", @@ -4074,10 +4269,11 @@ }, "openxlsx": { "Package": "openxlsx", - "Version": "4.2.9", + "Version": "4.2.8.1", "Source": "Repository", "Type": "Package", "Title": "Read, Write and Edit xlsx Files", + "Date": "2025-10-30", "Authors@R": "c(person(given = \"Philipp\", family = \"Schauberger\", role = \"aut\", email = \"philipp@schauberger.co.at\"), person(given = \"Alexander\", family = \"Walker\", role = \"aut\", email = \"Alexander.Walker1989@gmail.com\"), person(given = \"Luca\", family = \"Braglia\", role = \"ctb\"), person(given = \"Joshua\", family = \"Sturm\", role = \"ctb\"), person(given = \"Jan Marvin\", family = \"Garbuszus\", role = c(\"ctb\", \"cre\"), email = \"jan.garbuszus@ruhr-uni-bochum.de\"), person(given = \"Jordan Mark\", family = \"Barbone\", role = \"ctb\", email = \"jmbarbone@gmail.com\", comment = c(ORCID = \"0000-0001-9788-3628\")), person(given = \"David\", family = \"Zimmermann\", role = \"ctb\", email = \"david_j_zimmermann@hotmail.com\"), person(given = \"Reinhold\", family = \"Kainhofer\", role = \"ctb\", email = \"reinhold@kainhofer.com\"))", "Description": "Simplifies the creation of Excel .xlsx files by providing a high level interface to writing, styling and editing worksheets. Through the use of 'Rcpp', read/write times are comparable to the 'xlsx' and 'XLConnect' packages with the added benefit of removing the dependency on Java.", "License": "MIT + file LICENSE", @@ -4098,11 +4294,8 @@ "Suggests": [ "curl", "formula.tools", - "ggplot2", - "jpeg", "knitr", "rmarkdown", - "survival", "testthat" ], "LinkingTo": [ @@ -4111,9 +4304,9 @@ "VignetteBuilder": "knitr", "Encoding": "UTF-8", "Language": "en-US", + "RoxygenNote": "7.3.3", "Collate": "'CommentClass.R' 'HyperlinkClass.R' 'RcppExports.R' 'class_definitions.R' 'StyleClass.R' 'WorkbookClass.R' 'asserts.R' 'baseXML.R' 'borderFunctions.R' 'build_workbook.R' 'chartsheet_class.R' 'conditional_formatting.R' 'data-fontSizeLookupTables.R' 'helperFunctions.R' 'loadWorkbook.R' 'onUnload.R' 'openXL.R' 'openxlsx-package.R' 'openxlsx.R' 'openxlsxCoerce.R' 'readWorkbook.R' 'setWindowSize.R' 'sheet_data_class.R' 'utils.R' 'workbook_column_widths.R' 'workbook_read_workbook.R' 'workbook_write_data.R' 'worksheet_class.R' 'wrappers.R' 'writeData.R' 'writeDataTable.R' 'writexlsx.R' 'zzz.R'", "LazyData": "true", - "Config/roxygen2/version": "8.1.0", "NeedsCompilation": "yes", "Author": "Philipp Schauberger [aut], Alexander Walker [aut], Luca Braglia [ctb], Joshua Sturm [ctb], Jan Marvin Garbuszus [ctb, cre], Jordan Mark Barbone [ctb] (ORCID: ), David Zimmermann [ctb], Reinhold Kainhofer [ctb]", "Maintainer": "Jan Marvin Garbuszus ", @@ -4244,6 +4437,50 @@ "Maintainer": "Henrik Bengtsson ", "Repository": "CRAN" }, + "patchwork": { + "Package": "patchwork", + "Version": "1.3.2", + "Source": "Repository", + "Type": "Package", + "Title": "The Composer of Plots", + "Authors@R": "person(given = \"Thomas Lin\", family = \"Pedersen\", role = c(\"cre\", \"aut\"), email = \"thomasp85@gmail.com\", comment = c(ORCID = \"0000-0002-5147-4711\"))", + "Maintainer": "Thomas Lin Pedersen ", + "Description": "The 'ggplot2' package provides a strong API for sequentially building up a plot, but does not concern itself with composition of multiple plots. 'patchwork' is a package that expands the API to allow for arbitrarily complex composition of plots by, among others, providing mathematical operators for combining multiple plots. Other packages that try to address this need (but with a different approach) are 'gridExtra' and 'cowplot'.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Imports": [ + "ggplot2 (>= 3.0.0)", + "gtable (>= 0.3.6)", + "grid", + "stats", + "grDevices", + "utils", + "graphics", + "rlang (>= 1.0.0)", + "cli", + "farver" + ], + "RoxygenNote": "7.3.2", + "URL": "https://patchwork.data-imaginist.com, https://github.com/thomasp85/patchwork", + "BugReports": "https://github.com/thomasp85/patchwork/issues", + "Suggests": [ + "knitr", + "rmarkdown", + "gridGraphics", + "gridExtra", + "ragg", + "testthat (>= 2.1.0)", + "vdiffr", + "covr", + "png", + "gt (>= 0.11.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "gifski", + "NeedsCompilation": "no", + "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: )", + "Repository": "CRAN" + }, "pillar": { "Package": "pillar", "Version": "1.11.1", @@ -5352,13 +5589,13 @@ }, "rmarkdown": { "Package": "rmarkdown", - "Version": "2.32", + "Version": "2.31", "Source": "Repository", "Type": "Package", "Title": "Dynamic Documents for R", "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", "Description": "Convert R Markdown documents into a variety of formats.", - "License": "MIT + file LICENSE", + "License": "GPL-3", "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", "BugReports": "https://github.com/rstudio/rmarkdown/issues", "Depends": [ @@ -5371,7 +5608,7 @@ "htmltools (>= 0.5.1)", "jquerylib", "jsonlite", - "knitr (>= 1.50)", + "knitr (>= 1.43)", "methods", "tinytex (>= 0.31)", "tools", @@ -5396,10 +5633,11 @@ "xml2" ], "VignetteBuilder": "knitr", + "Config/Needs/website": "rstudio/quillt, pkgdown", "Config/testthat/edition": "3", "Encoding": "UTF-8", - "SystemRequirements": "pandoc (>= 2.8) - http://pandoc.org", - "Config/roxygen2/version": "8.1.0", + "RoxygenNote": "7.3.3", + "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", "NeedsCompilation": "no", "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", "Maintainer": "Yihui Xie ", @@ -5551,6 +5789,48 @@ "Maintainer": "Gábor Csárdi ", "Repository": "CRAN" }, + "sandwich": { + "Package": "sandwich", + "Version": "3.1-3", + "Source": "Repository", + "Date": "2026-08-02", + "Title": "Robust Covariance Matrix Estimators", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Thomas\", family = \"Lumley\", role = \"aut\", email = \"t.lumley@auckland.ac.nz\", comment = c(ORCID = \"0000-0003-4255-5437\")), person(given = \"Nathaniel\", family = \"Graham\", role = \"ctb\", email = \"npgraham1@gmail.com\", comment = c(ORCID = \"0009-0002-1215-5256\")), person(given = \"Susanne\", family = \"Koell\", role = \"ctb\"))", + "Description": "Object-oriented software for model-robust covariance matrix estimators. Starting out from the basic robust Eicker-Huber-White sandwich covariance methods include: heteroscedasticity-consistent (HC) covariances for cross-section data; heteroscedasticity- and autocorrelation-consistent (HAC) covariances for time series data (such as Andrews' kernel HAC, Newey-West, and WEAVE estimators); clustered covariances (one-way and multi-way); panel and panel-corrected covariances; outer-product-of-gradients covariances; and (clustered) bootstrap covariances. All methods are applicable to (generalized) linear model objects fitted by lm() and glm() but can also be adapted to other classes through S3 methods. Details can be found in Zeileis et al. (2020) , Zeileis (2004) and Zeileis (2006) .", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "stats", + "utils", + "zoo" + ], + "Suggests": [ + "AER", + "car", + "geepack", + "lattice", + "lme4", + "lmtest", + "MASS", + "multiwayvcov", + "parallel", + "pcse", + "plm", + "pscl", + "scatterplot3d", + "stats4", + "strucchange", + "survival" + ], + "License": "GPL-2 | GPL-3", + "URL": "https://zeileis.codeberg.page/sandwich/", + "BugReports": "https://codeberg.org/zeileis/sandwich/issues", + "NeedsCompilation": "no", + "Author": "Achim Zeileis [aut, cre] (ORCID: ), Thomas Lumley [aut] (ORCID: ), Nathaniel Graham [ctb] (ORCID: ), Susanne Koell [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, "sass": { "Package": "sass", "Version": "0.4.10", @@ -5916,6 +6196,38 @@ "License_is_FOSS": "yes", "Repository": "CRAN" }, + "stringmagic": { + "Package": "stringmagic", + "Version": "1.3.0", + "Source": "Repository", + "Type": "Package", + "Title": "Character String Operations and Interpolation, Magic Edition", + "Authors@R": "c(person(given = \"Laurent R\", family = \"Berge\", role = c(\"aut\", \"cre\"), email = \"laurent.berge@u-bordeaux.fr\", comment = c(ORCID = \"0000-0003-2736-1917\")), person(given = \"Morgan\", family = \"Jacob\", role = \"ctb\"))", + "Imports": [ + "Rcpp(>= 1.0.5)", + "utils", + "stats" + ], + "Suggests": [ + "knitr", + "rmarkdown", + "data.table" + ], + "LinkingTo": [ + "Rcpp" + ], + "Description": "Performs complex string operations compactly and efficiently. Supports string interpolation jointly with over 50 string operations. Also enhances regular string functions (like grep() and co). See an introduction at .", + "License": "GPL (>= 2)", + "Encoding": "UTF-8", + "BugReports": "https://github.com/lrberge/stringmagic/issues", + "URL": "https://lrberge.github.io/stringmagic/, https://github.com/lrberge/stringmagic", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Laurent R Berge [aut, cre] (ORCID: ), Morgan Jacob [ctb]", + "Maintainer": "Laurent R Berge ", + "Repository": "CRAN" + }, "stringr": { "Package": "stringr", "Version": "1.6.0", @@ -6507,7 +6819,7 @@ }, "usethis": { "Package": "usethis", - "Version": "3.2.2", + "Version": "3.2.1", "Source": "Repository", "Title": "Automate Package and Project Setup", "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Andy\", \"Teucher\", , \"andy.teucher@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7840-692X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", @@ -6526,22 +6838,23 @@ "desc (>= 1.4.2)", "fs (>= 1.3.0)", "gert (>= 1.4.1)", - "gh (>= 1.6.0)", + "gh (>= 1.2.1)", "glue (>= 1.3.0)", "jsonlite", "lifecycle (>= 1.0.0)", - "pak", "purrr", "rappdirs", "rlang (>= 1.1.0)", "rprojroot (>= 2.1.1)", "rstudioapi", + "stats", + "tools", + "utils", "whisker", "withr (>= 2.3.0)", "yaml" ], "Suggests": [ - "askpass", "covr", "knitr", "magick", @@ -6559,7 +6872,7 @@ "Config/usethis/last-upkeep": "2025-04-22", "Encoding": "UTF-8", "Language": "en-US", - "Config/roxygen2/version": "8.1.0", + "RoxygenNote": "7.3.3", "NeedsCompilation": "no", "Author": "Hadley Wickham [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Malcolm Barrett [aut] (ORCID: ), Andy Teucher [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", "Maintainer": "Jennifer Bryan ", @@ -6977,7 +7290,7 @@ }, "writexl": { "Package": "writexl", - "Version": "2.0.1", + "Version": "2.0.0", "Source": "Repository", "Type": "Package", "Title": "Export Data Frames to Excel 'xlsx' Format", @@ -7004,7 +7317,7 @@ "Language": "en-US", "SystemRequirements": "zlib", "Config/testthat/edition": "3", - "Config/roxygen2/version": "8.1.0", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", "Author": "Jeroen Ooms [aut] (ORCID: ), Bill Denney [aut, cre] (ORCID: ), John McNamara [cph] (Author of libxlsxwriter (see AUTHORS and COPYRIGHT files for details))", "Maintainer": "Bill Denney ", @@ -7184,48 +7497,9 @@ "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, - "yulab.utils": { - "Package": "yulab.utils", - "Version": "0.2.5", - "Source": "Repository", - "Title": "Supporting Functions for Packages Maintained by 'YuLab-SMU'", - "Authors@R": "c(person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\")))", - "Description": "Miscellaneous functions commonly used by 'YuLab-SMU'.", - "Depends": [ - "R (>= 4.2.0)" - ], - "Imports": [ - "cli", - "digest", - "fs", - "methods", - "rappdirs", - "rlang", - "tools", - "utils" - ], - "Suggests": [ - "httr2", - "jsonlite", - "openssl", - "R.utils", - "testthat (>= 3.0.0)" - ], - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://yulab-smu.top/", - "BugReports": "https://github.com/YuLab-SMU/yulab.utils/issues", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "Config/roxygen2/version": "8.1.0", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre] (ORCID: )", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, "zip": { "Package": "zip", - "Version": "3.0.2", + "Version": "3.0.1", "Source": "Repository", "Title": "Cross-Platform 'zip' Compression", "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kuba\", \"Podgórski\", role = \"ctb\"), person(\"Rich\", \"Geldreich\", role = \"ctb\"), person(\"Arm Limited\", role = c(\"ctb\", \"cph\"), comment = \"bundled Mbed TLS crypto subset in src/mbedtls/ (Apache-2.0)\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", @@ -7258,6 +7532,50 @@ "Author": "Gábor Csárdi [aut, cre], Kuba Podgórski [ctb], Rich Geldreich [ctb], Arm Limited [ctb, cph] (bundled Mbed TLS crypto subset in src/mbedtls/ (Apache-2.0)), Posit Software, PBC [cph, fnd] (ROR: )", "Maintainer": "Gábor Csárdi ", "Repository": "CRAN" + }, + "zoo": { + "Package": "zoo", + "Version": "1.9-0", + "Source": "Repository", + "Date": "2026-07-30", + "Title": "S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations)", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Gabor\", family = \"Grothendieck\", role = \"aut\", email = \"ggrothendieck@gmail.com\"), person(given = c(\"Jeffrey\", \"A.\"), family = \"Ryan\", role = \"aut\", email = \"jeff.a.ryan@gmail.com\"), person(given = c(\"Joshua\", \"M.\"), family = \"Ulrich\", role = \"ctb\", email = \"josh.m.ulrich@gmail.com\"), person(given = \"Felix\", family = \"Andrews\", role = \"ctb\", email = \"felix@nfrac.org\"))", + "Description": "An S3 class with methods for working with regular and irregular time series. The class stores data as numeric vectors/matrices (or factors) along with a time index of arbitrary class (including numeric, Date, POSIXct, chron, yearmon, yearqtr, etc.). Functions and methods are consistent with the ts class and base R and also extend standard generics. Tools include: Data import/export, coercion, visualization (with base R, 'ggplot2', 'lattice', 'tinyplot'), alignment and merging, aggregation, lags and subsets, rolling analytics, and time-based interpolation/filling. The design is introduced in Zeileis and Grothendieck (2005) .", + "Depends": [ + "R (>= 3.1.0)", + "stats" + ], + "Suggests": [ + "AER", + "coda", + "chron", + "ggplot2 (>= 3.5.0)", + "knitr", + "mondate", + "scales", + "stinepack", + "strucchange", + "timeDate", + "timeSeries (>= 4021.104)", + "tinyplot", + "tis", + "tseries", + "xts" + ], + "Imports": [ + "utils", + "graphics", + "grDevices", + "lattice (>= 0.20-27)" + ], + "License": "GPL-2 | GPL-3", + "VignetteBuilder": "knitr", + "URL": "https://zeileis.codeberg.page/zoo/", + "BugReports": "https://codeberg.org/zeileis/zoo/issues", + "NeedsCompilation": "yes", + "Author": "Achim Zeileis [aut, cre] (ORCID: ), Gabor Grothendieck [aut], Jeffrey A. Ryan [aut], Joshua M. Ulrich [ctb], Felix Andrews [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" } } } From 36fe6cace61f57dd4162766f9a0bc6d4f4fcbaab Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 19:30:29 -0400 Subject: [PATCH 12/23] fix documentation --- R/wagebill_model.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/wagebill_model.R b/R/wagebill_model.R index d26821f..4880487 100644 --- a/R/wagebill_model.R +++ b/R/wagebill_model.R @@ -130,15 +130,17 @@ plot_model_wage_fes <- function( id = names(fes[[fixed_effects_var]]), premium = fes[[fixed_effects_var]] ) |> - dplyr::arrange(dplyr::desc(premium)) |> + dplyr::arrange( + dplyr::desc(.data[["premium"]]) + ) |> dplyr::mutate( - id = forcats::fct_reorder(id, premium) + id = forcats::fct_reorder(.data[["id"]], .data[["premium"]]) ) average_premium <- mean(fes_df[["premium"]], na.rm = TRUE) fes_df |> - ggplot2::ggplot(ggplot2::aes(x = id, y = premium)) + + ggplot2::ggplot(ggplot2::aes(x = .data[["id"]], y = .data[["premium"]])) + ggplot2::geom_point() + ggplot2::labs( title = paste("Fixed Effects for", fixed_effects_var), From 2f764f114ed301fd2488be29d62c28d943daed73 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 19:46:02 -0400 Subject: [PATCH 13/23] rename scripts --- R/{qcheck_consistency.R => consistency.R} | 0 R/{qcheck_coverage.R => coverage.R} | 0 R/{wagebill_growth.R => growth_decomposition.R} | 0 R/{wagebill_model.R => model_wage.R} | 0 R/movement_external.R | 1 - R/{qcheck_treatment.R => treatment.R} | 0 R/{qcheck_validation.R => validation.R} | 0 README.md | 2 +- man/clean_hr_data.Rd | 2 +- man/compute_coverage.Rd | 2 +- man/compute_global_consistency.Rd | 2 +- man/compute_global_coverage.Rd | 2 +- man/compute_growth_decomposition.Rd | 2 +- man/compute_record_consistency.Rd | 2 +- man/compute_value_consistency.Rd | 2 +- man/compute_wage_decomposition.Rd | 2 +- man/fix_invalid_birthdates.Rd | 2 +- man/fix_invalid_dates.Rd | 2 +- man/fix_negative_salaries.Rd | 2 +- man/fix_retirement_age.Rd | 2 +- man/fix_salary_components.Rd | 2 +- man/fix_underage_workers.Rd | 2 +- man/fix_working_hours.Rd | 2 +- man/model_wage.Rd | 2 +- man/plot_model_wage.Rd | 2 +- man/plot_model_wage_fes.Rd | 2 +- man/remove_duplicate_contracts.Rd | 2 +- man/remove_duplicate_personnel.Rd | 2 +- man/validate_data.Rd | 2 +- 29 files changed, 22 insertions(+), 23 deletions(-) rename R/{qcheck_consistency.R => consistency.R} (100%) rename R/{qcheck_coverage.R => coverage.R} (100%) rename R/{wagebill_growth.R => growth_decomposition.R} (100%) rename R/{wagebill_model.R => model_wage.R} (100%) rename R/{qcheck_treatment.R => treatment.R} (100%) rename R/{qcheck_validation.R => validation.R} (100%) diff --git a/R/qcheck_consistency.R b/R/consistency.R similarity index 100% rename from R/qcheck_consistency.R rename to R/consistency.R diff --git a/R/qcheck_coverage.R b/R/coverage.R similarity index 100% rename from R/qcheck_coverage.R rename to R/coverage.R diff --git a/R/wagebill_growth.R b/R/growth_decomposition.R similarity index 100% rename from R/wagebill_growth.R rename to R/growth_decomposition.R diff --git a/R/wagebill_model.R b/R/model_wage.R similarity index 100% rename from R/wagebill_model.R rename to R/model_wage.R diff --git a/R/movement_external.R b/R/movement_external.R index 381aa27..236c0b1 100644 --- a/R/movement_external.R +++ b/R/movement_external.R @@ -158,7 +158,6 @@ detect_retirement <- function(data) { return(retire_dt) } - #' Classify Personnel Movement Events #' #' This function classifies the personnel module into three types of movements: hires, fires, or retirements. diff --git a/R/qcheck_treatment.R b/R/treatment.R similarity index 100% rename from R/qcheck_treatment.R rename to R/treatment.R diff --git a/R/qcheck_validation.R b/R/validation.R similarity index 100% rename from R/qcheck_validation.R rename to R/validation.R diff --git a/README.md b/README.md index eeb226e..0924782 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ The goals of `govhr` is to provide a set of open-source tools that: `govhr` is based on the [Public Sector Employment and Compensation Assessment Framework](https://documents1.worldbank.org/curated/en/324801640074379484/pdf/Public-Sector-Employment-and-Compensation-An-Assessment-Framework.pdf#page=37.23) -developed by the World Bank. +developed by the Governance Global Practice at the World Bank. ## :hammer: Installation diff --git a/man/clean_hr_data.Rd b/man/clean_hr_data.Rd index c4c33fa..c8edf68 100644 --- a/man/clean_hr_data.Rd +++ b/man/clean_hr_data.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{clean_hr_data} \alias{clean_hr_data} \title{Apply Standard HR Data Cleaning Pipeline} diff --git a/man/compute_coverage.Rd b/man/compute_coverage.Rd index 8ca9a76..84b054a 100644 --- a/man/compute_coverage.Rd +++ b/man/compute_coverage.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_coverage.R +% Please edit documentation in R/coverage.R \name{compute_coverage} \alias{compute_coverage} \title{Compute coverage of non-missing values in a dataset.} diff --git a/man/compute_global_consistency.Rd b/man/compute_global_consistency.Rd index c0eb409..e7d7bf1 100644 --- a/man/compute_global_consistency.Rd +++ b/man/compute_global_consistency.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_consistency.R +% Please edit documentation in R/consistency.R \name{compute_global_consistency} \alias{compute_global_consistency} \title{Compute the proportion of consistent records and values in a data frame.} diff --git a/man/compute_global_coverage.Rd b/man/compute_global_coverage.Rd index bbb8545..21975fc 100644 --- a/man/compute_global_coverage.Rd +++ b/man/compute_global_coverage.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_coverage.R +% Please edit documentation in R/coverage.R \name{compute_global_coverage} \alias{compute_global_coverage} \title{a function to compute the proportion of missing values in a data frame} diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd index b8da122..2f43316 100644 --- a/man/compute_growth_decomposition.Rd +++ b/man/compute_growth_decomposition.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill_growth.R +% Please edit documentation in R/growth_decomposition.R \name{compute_growth_decomposition} \alias{compute_growth_decomposition} \title{Compute growth decomposition of wagebill} diff --git a/man/compute_record_consistency.Rd b/man/compute_record_consistency.Rd index c7a6671..e4f04d5 100644 --- a/man/compute_record_consistency.Rd +++ b/man/compute_record_consistency.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_consistency.R +% Please edit documentation in R/consistency.R \name{compute_record_consistency} \alias{compute_record_consistency} \title{Compute the proportion of consistent records in a data frame.} diff --git a/man/compute_value_consistency.Rd b/man/compute_value_consistency.Rd index 98795e2..f218faf 100644 --- a/man/compute_value_consistency.Rd +++ b/man/compute_value_consistency.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_consistency.R +% Please edit documentation in R/consistency.R \name{compute_value_consistency} \alias{compute_value_consistency} \title{Compute the proportion of consistent values in a data frame.} diff --git a/man/compute_wage_decomposition.Rd b/man/compute_wage_decomposition.Rd index f720a12..733e7f0 100644 --- a/man/compute_wage_decomposition.Rd +++ b/man/compute_wage_decomposition.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill_growth.R +% Please edit documentation in R/growth_decomposition.R \name{compute_wage_decomposition} \alias{compute_wage_decomposition} \title{Decompose aggregate average-compensation growth into within, between, diff --git a/man/fix_invalid_birthdates.Rd b/man/fix_invalid_birthdates.Rd index 4bbbf91..3e0bd93 100644 --- a/man/fix_invalid_birthdates.Rd +++ b/man/fix_invalid_birthdates.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_invalid_birthdates} \alias{fix_invalid_birthdates} \title{Fix Invalid Birth Dates} diff --git a/man/fix_invalid_dates.Rd b/man/fix_invalid_dates.Rd index a6a3e0b..5d128f7 100644 --- a/man/fix_invalid_dates.Rd +++ b/man/fix_invalid_dates.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_invalid_dates} \alias{fix_invalid_dates} \title{Fix Invalid Reference Dates} diff --git a/man/fix_negative_salaries.Rd b/man/fix_negative_salaries.Rd index f719724..9335385 100644 --- a/man/fix_negative_salaries.Rd +++ b/man/fix_negative_salaries.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_negative_salaries} \alias{fix_negative_salaries} \title{Fix Negative Salary Values} diff --git a/man/fix_retirement_age.Rd b/man/fix_retirement_age.Rd index c52d653..976c5be 100644 --- a/man/fix_retirement_age.Rd +++ b/man/fix_retirement_age.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_retirement_age} \alias{fix_retirement_age} \title{Flag or Adjust Over-Retirement-Age Workers} diff --git a/man/fix_salary_components.Rd b/man/fix_salary_components.Rd index 78ecccc..988ed67 100644 --- a/man/fix_salary_components.Rd +++ b/man/fix_salary_components.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_salary_components} \alias{fix_salary_components} \title{Fix Salary Component Inconsistencies} diff --git a/man/fix_underage_workers.Rd b/man/fix_underage_workers.Rd index 5887963..082dc79 100644 --- a/man/fix_underage_workers.Rd +++ b/man/fix_underage_workers.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_underage_workers} \alias{fix_underage_workers} \title{Flag or Remove Underage Workers} diff --git a/man/fix_working_hours.Rd b/man/fix_working_hours.Rd index bcc8011..acdc8b5 100644 --- a/man/fix_working_hours.Rd +++ b/man/fix_working_hours.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{fix_working_hours} \alias{fix_working_hours} \title{Fix Invalid Working Hours} diff --git a/man/model_wage.Rd b/man/model_wage.Rd index f472e73..8444513 100644 --- a/man/model_wage.Rd +++ b/man/model_wage.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill_model.R +% Please edit documentation in R/model_wage.R \name{model_wage} \alias{model_wage} \title{Fit a wage model with fixed effects} diff --git a/man/plot_model_wage.Rd b/man/plot_model_wage.Rd index 51d0589..5f44997 100644 --- a/man/plot_model_wage.Rd +++ b/man/plot_model_wage.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill_model.R +% Please edit documentation in R/model_wage.R \name{plot_model_wage} \alias{plot_model_wage} \title{Plot a wage model fit} diff --git a/man/plot_model_wage_fes.Rd b/man/plot_model_wage_fes.Rd index b258c6a..fa9d56e 100644 --- a/man/plot_model_wage_fes.Rd +++ b/man/plot_model_wage_fes.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/wagebill_model.R +% Please edit documentation in R/model_wage.R \name{plot_model_wage_fes} \alias{plot_model_wage_fes} \title{Plot fixed effects from a wage model fit} diff --git a/man/remove_duplicate_contracts.Rd b/man/remove_duplicate_contracts.Rd index 41bb929..fdbccf7 100644 --- a/man/remove_duplicate_contracts.Rd +++ b/man/remove_duplicate_contracts.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{remove_duplicate_contracts} \alias{remove_duplicate_contracts} \title{Remove Duplicate Contract Records} diff --git a/man/remove_duplicate_personnel.Rd b/man/remove_duplicate_personnel.Rd index 4734595..9aa86bc 100644 --- a/man/remove_duplicate_personnel.Rd +++ b/man/remove_duplicate_personnel.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_treatment.R +% Please edit documentation in R/treatment.R \name{remove_duplicate_personnel} \alias{remove_duplicate_personnel} \title{Remove Duplicate Personnel Records} diff --git a/man/validate_data.Rd b/man/validate_data.Rd index 86bd876..d498a22 100644 --- a/man/validate_data.Rd +++ b/man/validate_data.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/qcheck_validation.R +% Please edit documentation in R/validation.R \name{validate_data} \alias{validate_data} \title{Validate Data Quality Using Rule-Based Framework} From 6015449ba34f924296be87ecdd20af1c07266d03 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 20:09:37 -0400 Subject: [PATCH 14/23] modify names of scripts --- NAMESPACE | 1 - R/{movement_external.R => movement.R} | 0 R/{summary_statistics.R => summarize.R} | 91 ------------- R/{movement_tenure.R => tenure.R} | 0 R/transition.R | 121 ------------------ R/wagebill.R | 91 +++++++++++++ man/classify_personnel_event.Rd | 2 +- man/complete_dates.Rd | 2 +- man/compute_baseline_index.Rd | 2 +- man/compute_compression_ratio.Rd | 2 +- man/compute_cross_section.Rd | 2 +- man/compute_density.Rd | 2 +- man/compute_employment_spells.Rd | 2 +- man/compute_fastchange.Rd | 2 +- man/compute_fastshare.Rd | 2 +- man/compute_fastsummary.Rd | 2 +- man/compute_growth.Rd | 2 +- man/compute_movement_cost.Rd | 2 +- man/compute_quantile.Rd | 2 +- man/compute_tenure.Rd | 2 +- man/compute_tenure_panel.Rd | 2 +- man/compute_time_trend.Rd | 2 +- man/compute_wagebill.Rd | 2 +- man/compute_workforce_movement.Rd | 2 +- man/count_unique.Rd | 2 +- man/cp_ratio.Rd | 2 +- man/cv.Rd | 2 +- man/define_fns.Rd | 2 +- man/detect_career_transitions.Rd | 72 ----------- man/detect_personnel_event.Rd | 2 +- man/detect_retirement.Rd | 2 +- man/estimate_exit_rates.Rd | 2 +- man/fastcount.Rd | 2 +- man/fastprop.Rd | 2 +- man/rescale_baseline.Rd | 2 +- .../testthat/test-detect_career_transitions.R | 80 ------------ vignettes/articles/govhr.Rmd | 2 +- 37 files changed, 120 insertions(+), 394 deletions(-) rename R/{movement_external.R => movement.R} (100%) rename R/{summary_statistics.R => summarize.R} (91%) rename R/{movement_tenure.R => tenure.R} (100%) create mode 100644 R/wagebill.R delete mode 100644 man/detect_career_transitions.Rd delete mode 100644 tests/testthat/test-detect_career_transitions.R diff --git a/NAMESPACE b/NAMESPACE index 56c4dee..15337ce 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -42,7 +42,6 @@ export(dedup_values) export(define_fns) export(deflate_to_real) export(detect_career_transition) -export(detect_career_transitions) export(detect_inconsistent_cols) export(detect_personnel_event) export(detect_reallocation) diff --git a/R/movement_external.R b/R/movement.R similarity index 100% rename from R/movement_external.R rename to R/movement.R diff --git a/R/summary_statistics.R b/R/summarize.R similarity index 91% rename from R/summary_statistics.R rename to R/summarize.R index 1a26066..79b5cfd 100644 --- a/R/summary_statistics.R +++ b/R/summarize.R @@ -469,97 +469,6 @@ fastprop <- function(.data, ...) { prop_dt } -#' Compute wage bill aggregates with optional macro-fiscal shares -#' -#' @description -#' Computes aggregate wage bill statistics from contract-level salary data. -#' The function converts salary variables to constant purchasing power parity -#' (PPP) using macro indicators, then aggregates by specified grouping variables. -#' Optionally computes wage bill shares relative to macro-fiscal aggregates -#' (e.g., GDP, public expenditure, revenue). -#' -#' @param contract_df A data.frame or tibble containing contract-level salary data. -#' Must include the columns specified in `wage_vars` and `groups`. -#' @param wage_vars Character vector of salary column names to aggregate. -#' Defaults to `c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu")`. -#' @param groups Character vector of grouping columns for aggregation. -#' Defaults to `c("country_code", "year")`. -#' @param share_macro Logical; if `TRUE`, computes wage bill shares relative -#' to macro-fiscal aggregates specified in `macro_vars`. Defaults to `FALSE`. -#' @param macro_vars Character vector of macro indicator column names to use -#' as denominators when `share_macro = TRUE`. Defaults to -#' `c("gdp_lcu", "pexpenditure_lcu", "prevenue_lcu", "taxrevenue_lcu")`. -#' @param drop_na Logical; if `TRUE`, removes `NA` values before aggregation. -#' Defaults to `TRUE`. -#' -#' @return A wage bill table with optional grouping variables, -#' an `indicator` column (describing the wage variable and level of analysis), -#' and a `value` column. When `share_macro = TRUE`, values represent -#' shares (wage bill / macro aggregate). -#' -#' @examples -#' # Compute wage bill totals by country and year -#' \dontrun{ -#' compute_wagebill( -#' contract_df = govhr::bra_hrmis_contract, -#' wage_vars = c("gross_salary_lcu"), -#' groups = c("country_code", "year") -#' ) -#' -#' # Compute wage bill as share of GDP and public expenditure -#' compute_wagebill( -#' contract_df = govhr::bra_hrmis_contract, -#' wage_vars = c("gross_salary_lcu", "net_salary_lcu"), -#' groups = c("country_code", "year"), -#' share_macro = TRUE, -#' macro_vars = c("gdp_lcu", "pexpenditure_lcu") -#' ) -#' } -#' -#' @seealso -#' \code{\link{convert_constant_ppp}} for PPP conversion -#' \code{\link{compute_fastsummary}} for general aggregation -#' \code{\link{compute_fastshare}} for share computation (when `share_macro = TRUE`) -#' -#' @export -compute_wagebill <- function( - contract_df, - wage_vars = c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu"), - groups = c("country_code", "year"), - share_macro = FALSE, - macro_vars = c( - "gdp_lcu", - "pexpenditure_lcu", - "prevenue_lcu", - "taxrevenue_lcu" - ), - drop_na = TRUE -) { - data_ppp <- contract_df |> - convert_constant_ppp( - cols = wage_vars - ) - - if (share_macro) { - data_ppp |> - compute_fastshare( - cols = wage_vars, - macro_cols = macro_vars, - groups = groups, - fns = "sum", - output = "long" - ) - } else { - data_ppp |> - compute_fastsummary( - cols = wage_vars, - groups = groups, - fns = "sum", - output = "long" - ) - } -} - #' Compute index values relative to base year #' #' @description diff --git a/R/movement_tenure.R b/R/tenure.R similarity index 100% rename from R/movement_tenure.R rename to R/tenure.R diff --git a/R/transition.R b/R/transition.R index a257f94..fecb28b 100644 --- a/R/transition.R +++ b/R/transition.R @@ -68,127 +68,6 @@ detect_reallocation <- function(data, personnel_hire) { return(data_reallocation) } -#' Detect Career Transitions Based on Contract Attributes -#' -#' @description -#' Identifies transitions in specified job-related attributes (e.g., pay grade, seniority) -#' for each personnel over time. The function first determines the "dominant" contract -#' per personnel and reference date based on a decision variable (e.g., highest base salary), -#' and then detects when the selected attributes change across time. -#' -#' @param contract_dt A `data.table`, `data.frame` object containing contract level records. -#' Must include columns for `personnel_id`, `ref_date`, the variables listed in `vars`, -#' and the `decision_var`. -#' @param vars A character vector of attribute names (column names) to monitor for changes -#' (e.g., `c("paygrade", "seniority")`). -#' @param decision_var A string specifying the column name used to identify the dominant -#' contract per personnel and date (e.g., `"base_salary_lcu"`). -#' @param decision_fn A function defining the decision rule for selecting the dominant -#' contract within each personnel-date group (default: `max`). Typically `max`, `min`, or -#' a custom summary function. -#' -#' @details -#' The function: -#' \enumerate{ -#' \item Sorts contracts by `personnel_id`, `ref_date`, and the decision variable. -#' \item Selects the dominant contract per personnel-date combination using `decision_fn`. -#' \item For each attribute in `vars`, compares its value to the previous record -#' (by personnel) and detects any changes. -#' \item Returns all transitions, including the attribute name, previous and new values, -#' and the start and end dates for the transition. -#' } -#' -#' The function assumes that higher values of `decision_var` represent more dominant -#' contracts when `decision_fn = max`. If ties occur, the first instance is selected. -#' -#' @return A `data.table` with the following columns: -#' \describe{ -#' \item{personnel_id}{Unique personnel identifier.} -#' \item{start_date}{Date of the previous contract before the change.} -#' \item{ref_date}{Date when the new attribute value takes effect.} -#' \item{attribute}{Name of the attribute that changed.} -#' \item{from}{Previous value of the attribute.} -#' \item{to}{New value of the attribute.} -#' } -#' -#' @examples -#' library(data.table) -#' dt <- data.table( -#' personnel_id = c(1, 1, 1, 2, 2), -#' ref_date = as.Date(c("2020-01-01", "2021-01-01", "2022-01-01", -#' "2020-06-01", "2021-06-01")), -#' paygrade = c("A", "A", "B", "C", "D"), -#' seniority = c(1, 2, 3, 1, 2), -#' base_salary_lcu = c(50000, 55000, 60000, 40000, 42000) -#' ) -#' -#' detect_career_transitions( -#' contract_dt = dt, -#' vars = c("paygrade", "seniority"), -#' decision_var = "base_salary_lcu" -#' ) -#' -#' @export -detect_career_transitions <- function( - contract_dt, - vars, - decision_var, - decision_fn = max -) { - # Keep only needed columns - contract_dt <- contract_dt[, - c("personnel_id", "ref_date", vars, decision_var), - with = FALSE - ] - - # Sort by personnel, date, and decision variable - setorderv( - contract_dt, - c("personnel_id", "ref_date", decision_var), - order = c(1, 1, -1) - ) - - # Apply decision rule: pick the dominant job for each personnel-date - # We assume decision_fn = max by default (i.e. highest of whatever decision_var) - contract_main <- contract_dt[, - .SD[get(decision_var) == decision_fn(get(decision_var))][1], - by = .(personnel_id, ref_date) - ] - - # Now detect transitions for each variable - detect_transitions <- function(attr) { - # Add previous value by personnel - contract_main[, - paste0(attr, "_prev") := shift(get(attr)), - by = personnel_id - ] - - # Keep rows where the attribute changed - transitions <- contract_main[ - get(attr) != get(paste0(attr, "_prev")), - .( - personnel_id, - start_date = shift(ref_date, 1L, type = "lag"), - ref_date, - attribute = attr, - from = get(paste0(attr, "_prev")), - to = get(attr) - ), - by = personnel_id - ] - - return(transitions[]) - } - - # Apply transition detection across all attributes - transitions_list <- lapply(vars, detect_transitions) - - # Combine all attributes into one long data.table - transitions_dt <- data.table::rbindlist(transitions_list, use.names = TRUE) - - return(transitions_dt[]) -} - #' Detect Career Transitions #' #' Collapses each entity's history into spells of consecutive periods in the diff --git a/R/wagebill.R b/R/wagebill.R new file mode 100644 index 0000000..7af1ac9 --- /dev/null +++ b/R/wagebill.R @@ -0,0 +1,91 @@ + +#' Compute wage bill aggregates with optional macro-fiscal shares +#' +#' @description +#' Computes aggregate wage bill statistics from contract-level salary data. +#' The function converts salary variables to constant purchasing power parity +#' (PPP) using macro indicators, then aggregates by specified grouping variables. +#' Optionally computes wage bill shares relative to macro-fiscal aggregates +#' (e.g., GDP, public expenditure, revenue). +#' +#' @param contract_df A data.frame or tibble containing contract-level salary data. +#' Must include the columns specified in `wage_vars` and `groups`. +#' @param wage_vars Character vector of salary column names to aggregate. +#' Defaults to `c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu")`. +#' @param groups Character vector of grouping columns for aggregation. +#' Defaults to `c("country_code", "year")`. +#' @param share_macro Logical; if `TRUE`, computes wage bill shares relative +#' to macro-fiscal aggregates specified in `macro_vars`. Defaults to `FALSE`. +#' @param macro_vars Character vector of macro indicator column names to use +#' as denominators when `share_macro = TRUE`. Defaults to +#' `c("gdp_lcu", "pexpenditure_lcu", "prevenue_lcu", "taxrevenue_lcu")`. +#' @param drop_na Logical; if `TRUE`, removes `NA` values before aggregation. +#' Defaults to `TRUE`. +#' +#' @return A wage bill table with optional grouping variables, +#' an `indicator` column (describing the wage variable and level of analysis), +#' and a `value` column. When `share_macro = TRUE`, values represent +#' shares (wage bill / macro aggregate). +#' +#' @examples +#' # Compute wage bill totals by country and year +#' \dontrun{ +#' compute_wagebill( +#' contract_df = govhr::bra_hrmis_contract, +#' wage_vars = c("gross_salary_lcu"), +#' groups = c("country_code", "year") +#' ) +#' +#' # Compute wage bill as share of GDP and public expenditure +#' compute_wagebill( +#' contract_df = govhr::bra_hrmis_contract, +#' wage_vars = c("gross_salary_lcu", "net_salary_lcu"), +#' groups = c("country_code", "year"), +#' share_macro = TRUE, +#' macro_vars = c("gdp_lcu", "pexpenditure_lcu") +#' ) +#' } +#' +#' @seealso +#' \code{\link{convert_constant_ppp}} for PPP conversion +#' \code{\link{compute_fastsummary}} for general aggregation +#' \code{\link{compute_fastshare}} for share computation (when `share_macro = TRUE`) +#' +#' @export +compute_wagebill <- function( + contract_df, + wage_vars = c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu"), + groups = c("country_code", "year"), + share_macro = FALSE, + macro_vars = c( + "gdp_lcu", + "pexpenditure_lcu", + "prevenue_lcu", + "taxrevenue_lcu" + ), + drop_na = TRUE +) { + data_ppp <- contract_df |> + convert_constant_ppp( + cols = wage_vars + ) + + if (share_macro) { + data_ppp |> + compute_fastshare( + cols = wage_vars, + macro_cols = macro_vars, + groups = groups, + fns = "sum", + output = "long" + ) + } else { + data_ppp |> + compute_fastsummary( + cols = wage_vars, + groups = groups, + fns = "sum", + output = "long" + ) + } +} diff --git a/man/classify_personnel_event.Rd b/man/classify_personnel_event.Rd index 33a73ae..870f6a0 100644 --- a/man/classify_personnel_event.Rd +++ b/man/classify_personnel_event.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{classify_personnel_event} \alias{classify_personnel_event} \title{Classify Personnel Movement Events} diff --git a/man/complete_dates.Rd b/man/complete_dates.Rd index e627702..9c30fc2 100644 --- a/man/complete_dates.Rd +++ b/man/complete_dates.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{complete_dates} \alias{complete_dates} \title{Complete Panel Data by Identifier and Reference Dates} diff --git a/man/compute_baseline_index.Rd b/man/compute_baseline_index.Rd index 3c48e3e..44ec0a5 100644 --- a/man/compute_baseline_index.Rd +++ b/man/compute_baseline_index.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_baseline_index} \alias{compute_baseline_index} \title{Compute index values relative to base year} diff --git a/man/compute_compression_ratio.Rd b/man/compute_compression_ratio.Rd index 8fa831a..2ea8d25 100644 --- a/man/compute_compression_ratio.Rd +++ b/man/compute_compression_ratio.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_compression_ratio} \alias{compute_compression_ratio} \title{Function to compute the compression ratio} diff --git a/man/compute_cross_section.Rd b/man/compute_cross_section.Rd index a376b0c..da0110e 100644 --- a/man/compute_cross_section.Rd +++ b/man/compute_cross_section.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_cross_section} \alias{compute_cross_section} \title{Compute Cross-Section Summary Table} diff --git a/man/compute_density.Rd b/man/compute_density.Rd index 2ea73ae..9d22350 100644 --- a/man/compute_density.Rd +++ b/man/compute_density.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_density} \alias{compute_density} \title{Function to compute the distribution function of a variable.} diff --git a/man/compute_employment_spells.Rd b/man/compute_employment_spells.Rd index ca1653b..40712d3 100644 --- a/man/compute_employment_spells.Rd +++ b/man/compute_employment_spells.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_tenure.R +% Please edit documentation in R/tenure.R \name{compute_employment_spells} \alias{compute_employment_spells} \title{Compute total time spent in each specific group per person (eg paygrade, occupation)} diff --git a/man/compute_fastchange.Rd b/man/compute_fastchange.Rd index 48f3674..60d0e06 100644 --- a/man/compute_fastchange.Rd +++ b/man/compute_fastchange.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_fastchange} \alias{compute_fastchange} \title{Calculate year-over-year growth for a numeric column} diff --git a/man/compute_fastshare.Rd b/man/compute_fastshare.Rd index fb327ca..2e7e160 100644 --- a/man/compute_fastshare.Rd +++ b/man/compute_fastshare.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_fastshare} \alias{compute_fastshare} \title{Compute ratio indicators of summarized variables over macro indicators} diff --git a/man/compute_fastsummary.Rd b/man/compute_fastsummary.Rd index 1127d16..7ec5887 100644 --- a/man/compute_fastsummary.Rd +++ b/man/compute_fastsummary.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_fastsummary} \alias{compute_fastsummary} \title{Compute Fast Summary Statistics by Group} diff --git a/man/compute_growth.Rd b/man/compute_growth.Rd index 96bf935..6ce8ef9 100644 --- a/man/compute_growth.Rd +++ b/man/compute_growth.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_growth} \alias{compute_growth} \title{Compute Growth Rate Summary Table} diff --git a/man/compute_movement_cost.Rd b/man/compute_movement_cost.Rd index 135c8a4..f46ff03 100644 --- a/man/compute_movement_cost.Rd +++ b/man/compute_movement_cost.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{compute_movement_cost} \alias{compute_movement_cost} \title{Function to compute the total cost associated with personnel movements.} diff --git a/man/compute_quantile.Rd b/man/compute_quantile.Rd index f8abc52..1a6e8c1 100644 --- a/man/compute_quantile.Rd +++ b/man/compute_quantile.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_quantile} \alias{compute_quantile} \title{Function to compute quantiles of a measure column within groups and reference dates.} diff --git a/man/compute_tenure.Rd b/man/compute_tenure.Rd index 766b94d..c51c428 100644 --- a/man/compute_tenure.Rd +++ b/man/compute_tenure.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_tenure.R +% Please edit documentation in R/tenure.R \name{compute_tenure} \alias{compute_tenure} \title{Compute employment tenure from contract history} diff --git a/man/compute_tenure_panel.Rd b/man/compute_tenure_panel.Rd index 705ad31..e0825af 100644 --- a/man/compute_tenure_panel.Rd +++ b/man/compute_tenure_panel.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_tenure.R +% Please edit documentation in R/tenure.R \name{compute_tenure_panel} \alias{compute_tenure_panel} \title{Compute employment tenure from a stacked contract panel} diff --git a/man/compute_time_trend.Rd b/man/compute_time_trend.Rd index 751470e..fc92686 100644 --- a/man/compute_time_trend.Rd +++ b/man/compute_time_trend.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{compute_time_trend} \alias{compute_time_trend} \title{Compute time trend} diff --git a/man/compute_wagebill.Rd b/man/compute_wagebill.Rd index c972b24..1c73b54 100644 --- a/man/compute_wagebill.Rd +++ b/man/compute_wagebill.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/wagebill.R \name{compute_wagebill} \alias{compute_wagebill} \title{Compute wage bill aggregates with optional macro-fiscal shares} diff --git a/man/compute_workforce_movement.Rd b/man/compute_workforce_movement.Rd index 0548fe9..eb29c5a 100644 --- a/man/compute_workforce_movement.Rd +++ b/man/compute_workforce_movement.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{compute_workforce_movement} \alias{compute_workforce_movement} \title{Function to compute workforce movement for hires, fires, retirement, or turnover} diff --git a/man/count_unique.Rd b/man/count_unique.Rd index 23f33ba..60a85e6 100644 --- a/man/count_unique.Rd +++ b/man/count_unique.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{count_unique} \alias{count_unique} \title{Count Unique Non-Missing Values} diff --git a/man/cp_ratio.Rd b/man/cp_ratio.Rd index 580528a..26fde14 100644 --- a/man/cp_ratio.Rd +++ b/man/cp_ratio.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{cp_ratio} \alias{cp_ratio} \title{Compute a Compression Ratio Between Two Percentiles} diff --git a/man/cv.Rd b/man/cv.Rd index eab93c3..b1c7bfb 100644 --- a/man/cv.Rd +++ b/man/cv.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{cv} \alias{cv} \title{Compute the Coefficient of Variation (CV)} diff --git a/man/define_fns.Rd b/man/define_fns.Rd index 5798c06..49b0f6a 100644 --- a/man/define_fns.Rd +++ b/man/define_fns.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{define_fns} \alias{define_fns} \title{Define Default Summary Functions} diff --git a/man/detect_career_transitions.Rd b/man/detect_career_transitions.Rd deleted file mode 100644 index 0669f4e..0000000 --- a/man/detect_career_transitions.Rd +++ /dev/null @@ -1,72 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/transition.R -\name{detect_career_transitions} -\alias{detect_career_transitions} -\title{Detect Career Transitions Based on Contract Attributes} -\usage{ -detect_career_transitions(contract_dt, vars, decision_var, decision_fn = max) -} -\arguments{ -\item{contract_dt}{A `data.table`, `data.frame` object containing contract level records. -Must include columns for `personnel_id`, `ref_date`, the variables listed in `vars`, -and the `decision_var`.} - -\item{vars}{A character vector of attribute names (column names) to monitor for changes -(e.g., `c("paygrade", "seniority")`).} - -\item{decision_var}{A string specifying the column name used to identify the dominant -contract per personnel and date (e.g., `"base_salary_lcu"`).} - -\item{decision_fn}{A function defining the decision rule for selecting the dominant -contract within each personnel-date group (default: `max`). Typically `max`, `min`, or -a custom summary function.} -} -\value{ -A `data.table` with the following columns: -\describe{ - \item{personnel_id}{Unique personnel identifier.} - \item{start_date}{Date of the previous contract before the change.} - \item{ref_date}{Date when the new attribute value takes effect.} - \item{attribute}{Name of the attribute that changed.} - \item{from}{Previous value of the attribute.} - \item{to}{New value of the attribute.} -} -} -\description{ -Identifies transitions in specified job-related attributes (e.g., pay grade, seniority) -for each personnel over time. The function first determines the "dominant" contract -per personnel and reference date based on a decision variable (e.g., highest base salary), -and then detects when the selected attributes change across time. -} -\details{ -The function: -\enumerate{ - \item Sorts contracts by `personnel_id`, `ref_date`, and the decision variable. - \item Selects the dominant contract per personnel-date combination using `decision_fn`. - \item For each attribute in `vars`, compares its value to the previous record - (by personnel) and detects any changes. - \item Returns all transitions, including the attribute name, previous and new values, - and the start and end dates for the transition. -} - -The function assumes that higher values of `decision_var` represent more dominant -contracts when `decision_fn = max`. If ties occur, the first instance is selected. -} -\examples{ -library(data.table) -dt <- data.table( - personnel_id = c(1, 1, 1, 2, 2), - ref_date = as.Date(c("2020-01-01", "2021-01-01", "2022-01-01", - "2020-06-01", "2021-06-01")), - paygrade = c("A", "A", "B", "C", "D"), - seniority = c(1, 2, 3, 1, 2), - base_salary_lcu = c(50000, 55000, 60000, 40000, 42000) -) - -detect_career_transitions( - contract_dt = dt, - vars = c("paygrade", "seniority"), - decision_var = "base_salary_lcu" -) - -} diff --git a/man/detect_personnel_event.Rd b/man/detect_personnel_event.Rd index 1d80423..405db2f 100644 --- a/man/detect_personnel_event.Rd +++ b/man/detect_personnel_event.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{detect_personnel_event} \alias{detect_personnel_event} \title{Detect Personnel Events} diff --git a/man/detect_retirement.Rd b/man/detect_retirement.Rd index 9894c01..9acdc56 100644 --- a/man/detect_retirement.Rd +++ b/man/detect_retirement.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{detect_retirement} \alias{detect_retirement} \title{Detect Personnel Retirement Events} diff --git a/man/estimate_exit_rates.Rd b/man/estimate_exit_rates.Rd index 703edc1..43a2145 100644 --- a/man/estimate_exit_rates.Rd +++ b/man/estimate_exit_rates.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/movement_external.R +% Please edit documentation in R/movement.R \name{estimate_exit_rates} \alias{estimate_exit_rates} \title{Estimate Historical Non-Retirement Exit Rates from Panel Data} diff --git a/man/fastcount.Rd b/man/fastcount.Rd index cd7ea2d..6a53be8 100644 --- a/man/fastcount.Rd +++ b/man/fastcount.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{fastcount} \alias{fastcount} \title{Fast counting via dtplyr} diff --git a/man/fastprop.Rd b/man/fastprop.Rd index 8a73f80..0d4b832 100644 --- a/man/fastprop.Rd +++ b/man/fastprop.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{fastprop} \alias{fastprop} \title{Compute group-wise proportions from counts} diff --git a/man/rescale_baseline.Rd b/man/rescale_baseline.Rd index c995637..9e29571 100644 --- a/man/rescale_baseline.Rd +++ b/man/rescale_baseline.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/summary_statistics.R +% Please edit documentation in R/summarize.R \name{rescale_baseline} \alias{rescale_baseline} \title{Rescale to Baseline Index} diff --git a/tests/testthat/test-detect_career_transitions.R b/tests/testthat/test-detect_career_transitions.R deleted file mode 100644 index 3fe66fa..0000000 --- a/tests/testthat/test-detect_career_transitions.R +++ /dev/null @@ -1,80 +0,0 @@ -library(testthat) -library(data.table) -library(lubridate) - -# Example contract dataset -contract_dt <- data.table( - personnel_id = c(1,1,1,2,2,2,3,3), - ref_date = ymd(c("2020-01-01","2021-01-01","2022-01-01", - "2020-01-01","2021-01-01","2022-01-01", - "2020-01-01","2021-01-01")), - job_role = c("Analyst","Analyst","Manager", - "Clerk","Clerk","Clerk", - "Admin","Admin"), - department = c("Finance","Finance","Finance", - "HR","HR","HR", - "IT","IT"), - decision_score = c(10,15,20,5,5,5,1,2) -) - -test_that("detect_career_transitions detects transitions correctly", { - res <- detect_career_transitions(contract_dt, - vars = c("job_role","department"), - decision_var = "decision_score") - - # Output columns - expect_true(all(c("personnel_id","start_date","ref_date","attribute","from","to") %in% names(res))) - - # Personnel 1: job_role change from Analyst -> Manager at 2022 - expect_true(any(res$personnel_id == 1 & res$attribute == "job_role" & res$to == "Manager")) - - # Department should not change - expect_false(any(res$attribute == "department" & res$personnel_id == 2)) - - # Start dates should be prior ref_date - expect_true(all(res$start_date < res$ref_date, na.rm = TRUE)) -}) - -test_that("detect_career_transitions handles no transitions", { - contract_no_change <- data.table( - personnel_id = c(1,1,1), - ref_date = ymd(c("2020-01-01","2021-01-01","2022-01-01")), - job_role = c("Analyst","Analyst","Analyst"), - department = c("Finance","Finance","Finance"), - decision_score = c(5,5,5) - ) - - res <- detect_career_transitions(contract_no_change, - vars = c("job_role","department"), - decision_var = "decision_score") - - expect_equal(nrow(res), 0) -}) - -test_that("detect_career_transitions respects decision_fn", { - # Decision_fn = min instead of max - contract_fn <- data.table( - personnel_id = c(1,1), - ref_date = ymd(c("2020-01-01","2021-01-01")), - job_role = c("Analyst","Manager"), - department = c("Finance","Finance"), - decision_score = c(10,5) - ) - - res <- detect_career_transitions(contract_fn, - vars = c("job_role"), - decision_var = "decision_score", - decision_fn = min) - - # The min function should pick the lower score - expect_equal(res$to, "Manager") -}) - -test_that("detect_career_transitions works with multiple personnel", { - res <- detect_career_transitions(contract_dt, - vars = c("job_role"), - decision_var = "decision_score") - - expect_true(all(res$personnel_id %in% 1:3)) - expect_true(all(res$attribute == "job_role")) -}) \ No newline at end of file diff --git a/vignettes/articles/govhr.Rmd b/vignettes/articles/govhr.Rmd index 6204001..d2f966d 100644 --- a/vignettes/articles/govhr.Rmd +++ b/vignettes/articles/govhr.Rmd @@ -85,7 +85,7 @@ compression_ratio <- compute_compression_ratio( plot_compression_ratio(compression_ratio) ``` -Another government want to know whether there was an increase in the number of personnel with higher education. The `compute_growth` function quickly computes that growth rate, by group. +Another government may want to know whether there was an increase in the number of personnel with higher education. The `compute_growth` function quickly computes that growth rate, by group. ```{r} # growth in headcount from the first to the last reference date, by service type From 15d86b1cc6fa87e9c660ed3986f168e8fe4d42f0 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:36:42 -0400 Subject: [PATCH 15/23] fix invalid and dead roxygen import tags Audit every @importFrom tag against what the package actually exports and what each file actually calls. - Remove four `@importFrom govhr` self-imports; a package cannot import from itself. - Point the ggthemes tag at `scale_colour_few()`, the spelling the code calls. - Drop the unused `@importFrom validate` tag. `description` and `label` there were never validate functions but data.table column names, and the tag made `validate::summary()` mask `base::summary()` package-wide. - Drop dead tags: `glue`, `tidyr::pivot_longer`, `grid::unit`, `ggplot2::arrow`/`position_jitter`, `data.table::.SD`, `dplyr::collect`, `across`/`everything`/`summarise`, `select`, `tibble::as_tibble`, `lubridate::years`. Tests: 596 pass, 0 failures. Co-Authored-By: Claude Opus 5 --- NAMESPACE | 17 +---------------- R/data360api.R | 2 +- R/growth_decomposition.R | 3 +-- R/harmonization.R | 1 - R/overview.R | 3 --- R/plots.R | 5 ++--- R/qcheck_plots.R | 7 ++----- R/summarize.R | 2 +- R/transition.R | 1 - R/treatment.R | 1 - R/validation.R | 1 - 11 files changed, 8 insertions(+), 35 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 15337ce..0eb4c81 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -96,14 +96,12 @@ export(smooth_decrement_rates) export(validate_data) import(dplyr) import(ggplot2) -import(glue) import(httr) importFrom(broom,tidy) importFrom(collapse,fquantile) importFrom(data.table, ":=", .N, - .SD, CJ, as.data.table, copy, @@ -130,7 +128,6 @@ importFrom(dplyr, any_of, arrange, case_when, - collect, count, desc, distinct, @@ -170,7 +167,6 @@ importFrom(ggiraph, ) importFrom(ggplot2, aes, - arrow, coord_cartesian, element_text, expansion, @@ -188,7 +184,6 @@ importFrom(ggplot2, label_wrap_gen, labs, margin, - position_jitter, scale_color_manual, scale_size_identity, scale_x_continuous, @@ -210,10 +205,9 @@ importFrom(ggraph, ) importFrom(ggrepel,geom_text_repel) importFrom(ggstats,ggcoef_model) -importFrom(ggthemes,scale_color_few) +importFrom(ggthemes,scale_colour_few) importFrom(glue,glue) importFrom(grDevices,colorRampPalette) -importFrom(grid,unit) importFrom(httr, GET, content, @@ -280,15 +274,6 @@ importFrom(tidyr, complete, nest, nesting, - pivot_longer, pivot_wider ) importFrom(tidyselect,eval_select) -importFrom(validate, - confront, - description, - label, - summary, - validator, - values -) diff --git a/R/data360api.R b/R/data360api.R index dc33046..5cefab1 100644 --- a/R/data360api.R +++ b/R/data360api.R @@ -16,7 +16,7 @@ #' @import dplyr #' @importFrom janitor clean_names #' @importFrom jsonlite fromJSON -#' @importFrom tibble as_tibble tibble +#' @importFrom tibble tibble #' @export get_data360_api <- function(dataset_id, indicator_id, pivot = TRUE) { base_url <- "https://data360api.worldbank.org/data360/data" diff --git a/R/growth_decomposition.R b/R/growth_decomposition.R index f1b6ee1..2a8b60b 100644 --- a/R/growth_decomposition.R +++ b/R/growth_decomposition.R @@ -16,8 +16,7 @@ #' period it remains absent, which correctly carries a zero effect since #' nothing further changed). #' -#' @importFrom data.table .N .SD := shift setorderv fcase fifelse -#' @importFrom dplyr all_of select +#' @importFrom data.table .N := shift setorderv fcase fifelse #' @importFrom tidyr complete nesting #' @export compute_growth_decomposition <- function( diff --git a/R/harmonization.R b/R/harmonization.R index 3e76f6d..6985e3e 100644 --- a/R/harmonization.R +++ b/R/harmonization.R @@ -270,7 +270,6 @@ complete_columns <- function(data, cols) { #' convert_constant_ppp(data, "wage") #' #' @importFrom dplyr filter select rename left_join mutate -#' @import glue #' @export convert_constant_ppp <- function(data, cols) { ## Basic input checks diff --git a/R/overview.R b/R/overview.R index 004f702..c8c3419 100644 --- a/R/overview.R +++ b/R/overview.R @@ -40,7 +40,6 @@ count_entity <- function(.data, id_col, group_cols = NULL){ #' @return A data frame with `ref_date`, optionally `group_col`, and `value`. #' #' @importFrom dplyr across all_of -#' @importFrom govhr compute_fastsummary fastcount #' @export compute_trend_summary <- function(.data, group_col, measure_col = NULL) { groups <- if (group_col == "ref_date") "ref_date" else c("ref_date", group_col) @@ -101,7 +100,6 @@ apply_baseline_index <- function(.data, group_col) { #' @return A data frame with the grouping column and a `value` column. #' #' @importFrom dplyr all_of filter n summarise -#' @importFrom govhr compute_fastsummary #' @export compute_cross_section_summary <- function(.data, group_col, measure_col = NULL) { # only consider each group's latest reference date @@ -141,7 +139,6 @@ compute_cross_section_summary <- function(.data, group_col, measure_col = NULL) #' percentage points (e.g. `12.5` for +12.5%). #' #' @importFrom dplyr all_of arrange filter first last n summarise -#' @importFrom govhr compute_fastsummary #' @export compute_growth_summary <- function(.data, group_col, measure_col = NULL) { labelled <- dplyr::filter(.data, !is.na(.data[[group_col]])) diff --git a/R/plots.R b/R/plots.R index 00ce10f..c9b3c58 100644 --- a/R/plots.R +++ b/R/plots.R @@ -38,7 +38,7 @@ scale_plot_height <- function(.data) { #' #' @import ggplot2 #' @importFrom ggrepel geom_text_repel -#' @importFrom ggthemes scale_color_few +#' @importFrom ggthemes scale_colour_few #' @importFrom rlang enquo #' @importFrom scales pretty_breaks #' @@ -100,8 +100,7 @@ ggplot_point_line <- function(data, x, y, group = NULL, label = NULL, ...) { #' @importFrom dtplyr lazy_dt #' @importFrom tibble as_tibble #' @importFrom dplyr group_by summarise mutate arrange pull desc -#' @importFrom ggplot2 ggplot geom_segment geom_point position_jitter scale_y_discrete labs theme_minimal arrow -#' @importFrom grid unit +#' @importFrom ggplot2 ggplot geom_segment geom_point scale_y_discrete labs theme_minimal #' @importFrom stats median ggplot_segment <- function(.data, col, group) { colq <- rlang::enquo(col) diff --git a/R/qcheck_plots.R b/R/qcheck_plots.R index 7fe8e6f..8c72c6e 100644 --- a/R/qcheck_plots.R +++ b/R/qcheck_plots.R @@ -42,7 +42,6 @@ plot_coverage_trend <- function(data, group, toggle_growth = FALSE) { #' #' @return A ggplot2 object. #' -#' @importFrom dplyr collect #' @export plot_consistency_trend <- function( data, @@ -158,8 +157,7 @@ plot_coverage_bar <- function(data) { #' @param group Character string. Grouping variable. #' #' @importFrom plotly plot_ly layout -#' @importFrom dplyr across everything summarise mutate -#' @importFrom tidyr pivot_longer +#' @importFrom dplyr mutate #' @importFrom scales label_percent #' #' @return A plotly object representing a heatmap of coverage values by group and variable. @@ -214,8 +212,7 @@ plot_coverage_heatmap <- function(data, group = NULL) { #' @param group Character string. The column name of the grouping variable (e.g., "ref_date"). #' #' @importFrom plotly plot_ly layout -#' @importFrom dplyr across everything summarise mutate -#' @importFrom tidyr pivot_longer +#' @importFrom dplyr mutate #' @importFrom scales label_percent #' @importFrom purrr map_dfr #' diff --git a/R/summarize.R b/R/summarize.R index 79b5cfd..753c88c 100644 --- a/R/summarize.R +++ b/R/summarize.R @@ -495,7 +495,7 @@ fastprop <- function(.data, ...) { #' @importFrom rlang enquo as_name enquos expr #' @importFrom tidyselect eval_select #' @importFrom tibble as_tibble -#' @importFrom dplyr select all_of +#' @importFrom dplyr all_of #' #' @export compute_baseline_index <- function(.data, date_col, ...) { diff --git a/R/transition.R b/R/transition.R index fecb28b..fd4b4db 100644 --- a/R/transition.R +++ b/R/transition.R @@ -243,7 +243,6 @@ plot_transfer_heatmap <- function(.data) { #' @importFrom dplyr across mutate pull row_number #' @importFrom ggplot2 aes coord_cartesian expansion margin scale_color_manual #' scale_size_identity scale_x_continuous scale_y_continuous theme theme_void -#' @importFrom govhr fastcount #' @importFrom grDevices colorRampPalette #' @importFrom tidygraph as_tbl_graph #' @importFrom igraph gorder diff --git a/R/treatment.R b/R/treatment.R index acb7a38..f9f42d9 100644 --- a/R/treatment.R +++ b/R/treatment.R @@ -225,7 +225,6 @@ fix_invalid_dates <- function( #' #' @seealso \code{\link{personnel_rules}}, \code{\link{fix_invalid_dates}} #' @importFrom dplyr mutate case_when filter -#' @importFrom lubridate years #' @export fix_invalid_birthdates <- function( data, diff --git a/R/validation.R b/R/validation.R index deb7a96..79f4cb3 100644 --- a/R/validation.R +++ b/R/validation.R @@ -36,7 +36,6 @@ #' @seealso #' \code{\link{personnel_rules}}, \code{\link{contract_rules}} #' -#' @importFrom validate validator confront description label summary values #' @importFrom data.table as.data.table #' @export validate_data <- function( From ca14a3db63edc02df39d6150437bffd54c701382 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:37:42 -0400 Subject: [PATCH 16/23] enable roxygen markdown and fix inverted @param arity docs The sources already contained 518 backticks, 30 markdown lists and 9 *emphasis* spans, but markdown was never switched on, so all of it rendered as literal characters and bullet lists collapsed into run-on paragraphs. Enabling it regenerates 105 of 125 help files; all 124 Rd files still pass tools::checkRd(). Also fix six @param entries that documented the wrong arity: `group_cols` was described as "a character string" on compute_workforce_movement(), plot_movement(), plot_decile(), plot_compression_ratio() and plot_movement_cost(), and `group_col` as "a character vector" on compute_density(), which errors on two columns. Tests: 596 pass, 0 failures. Co-Authored-By: Claude Opus 5 --- DESCRIPTION | 1 + R/movement.R | 2 +- R/plots.R | 8 +-- R/summarize.R | 2 +- man/add_contract_to_event.Rd | 22 +++--- man/apply_baseline_index.Rd | 10 +-- man/bra_hrmis.Rd | 68 +++++++++--------- man/bra_hrmis_allowance.Rd | 21 +++--- man/bra_hrmis_contract.Rd | 45 ++++++------ man/bra_hrmis_est.Rd | 35 +++++----- man/bra_hrmis_personnel.Rd | 31 ++++----- man/classify_text.Rd | 18 ++--- man/clean_hr_data.Rd | 24 +++---- man/cofog_taxonomy.Rd | 41 ++++++----- man/complete_columns.Rd | 2 +- man/complete_dates.Rd | 12 ++-- man/compute_baseline_index.Rd | 2 +- man/compute_coverage.Rd | 6 +- man/compute_cross_section.Rd | 10 +-- man/compute_cross_section_summary.Rd | 8 +-- man/compute_decile.Rd | 12 ++-- man/compute_density.Rd | 4 +- man/compute_employment_spells.Rd | 32 ++++----- man/compute_fastchange.Rd | 14 ++-- man/compute_fastshare.Rd | 46 ++++++------ man/compute_fastsummary.Rd | 38 +++++----- man/compute_global_consistency.Rd | 6 +- man/compute_growth.Rd | 12 ++-- man/compute_growth_decomposition.Rd | 20 +++--- man/compute_growth_summary.Rd | 10 +-- man/compute_movement_cost.Rd | 6 +- man/compute_pension_ratio.Rd | 54 +++++++-------- man/compute_percentile.Rd | 14 ++-- man/compute_service_table.Rd | 28 ++++---- man/compute_tenure.Rd | 12 ++-- man/compute_tenure_panel.Rd | 14 ++-- man/compute_time_trend.Rd | 12 ++-- man/compute_trend_summary.Rd | 12 ++-- man/compute_value_consistency.Rd | 6 +- man/compute_wage_decomposition.Rd | 10 +-- man/compute_wagebill.Rd | 26 +++---- man/compute_workforce_movement.Rd | 2 +- man/contract_rules.Rd | 30 ++++---- man/convert_constant_ppp.Rd | 4 +- man/convert_data.Rd | 14 ++-- man/count_entity.Rd | 4 +- man/count_unique.Rd | 2 +- man/countryclass.Rd | 16 +++-- man/cp_ratio.Rd | 14 ++-- man/cv.Rd | 8 +-- man/dedup_values.Rd | 6 +- man/define_fns.Rd | 46 ++++++------ man/deflate_to_real.Rd | 6 +- man/detect_career_transition.Rd | 16 ++--- man/detect_inconsistent_cols.Rd | 2 +- man/detect_personnel_event.Rd | 20 +++--- man/detect_reallocation.Rd | 20 +++--- man/detect_retirement.Rd | 4 +- man/dictionary.Rd | 36 +++++----- man/dot-compute_decrement_pair.Rd | 84 +++++++++++----------- man/dot-compute_transition_pair.Rd | 100 +++++++++++++-------------- man/dot-smooth_rate_curve.Rd | 26 +++---- man/enterprise_surveys.Rd | 6 +- man/estimate_decrement_rates.Rd | 54 +++++++-------- man/estimate_exit_rates.Rd | 2 +- man/estimate_movement_rates.Rd | 56 +++++++-------- man/fastcount.Rd | 6 +- man/fastprop.Rd | 12 ++-- man/find_duplicate_ids.Rd | 2 +- man/fix_invalid_birthdates.Rd | 14 ++-- man/fix_invalid_dates.Rd | 18 ++--- man/fix_negative_salaries.Rd | 12 ++-- man/fix_retirement_age.Rd | 12 ++-- man/fix_salary_components.Rd | 14 ++-- man/fix_underage_workers.Rd | 14 ++-- man/fix_working_hours.Rd | 12 ++-- man/get_data360_api.Rd | 2 +- man/get_metadata360.Rd | 4 +- man/guess_date_frequency.Rd | 2 +- man/harmonize_columns.Rd | 2 +- man/isco.Rd | 35 +++++----- man/macro_indicators.Rd | 36 +++++----- man/model_wage.Rd | 16 ++--- man/personnel_rules.Rd | 22 +++--- man/pivot_data360.Rd | 24 ++++--- man/plot_bar_growth.Rd | 6 +- man/plot_bar_total.Rd | 6 +- man/plot_compression_ratio.Rd | 4 +- man/plot_consistency_trend.Rd | 2 +- man/plot_coverage_bar.Rd | 12 ++-- man/plot_coverage_trend.Rd | 10 +-- man/plot_decile.Rd | 4 +- man/plot_histogram.Rd | 2 +- man/plot_model_wage.Rd | 4 +- man/plot_model_wage_fes.Rd | 4 +- man/plot_movement.Rd | 4 +- man/plot_movement_cost.Rd | 4 +- man/plot_segment.Rd | 20 +++--- man/plot_transfer_heatmap.Rd | 2 +- man/plot_transition_network.Rd | 4 +- man/plot_trend.Rd | 18 ++--- man/remove_duplicate_contracts.Rd | 12 ++-- man/remove_duplicate_personnel.Rd | 10 +-- man/rescale_baseline.Rd | 10 +-- man/roll_snapshot_pairs.Rd | 6 +- man/sample_group.Rd | 6 +- man/smooth_decrement_rates.Rd | 26 +++---- man/social_sustainability.Rd | 8 +-- man/validate_data.Rd | 12 ++-- man/wwbi.Rd | 50 +++++++------- 110 files changed, 930 insertions(+), 909 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 70454c5..8f76f95 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -52,4 +52,5 @@ Authors@R: c( person("Galileu", "Kim", , "galileukim@worldbank.org", role = c("aut", "cre")), person("Ifeanyi", "Edochie", , "iedochie@worldbank.org", role = c("aut")) ) +Roxygen: list(markdown = TRUE) Config/roxygen2/version: 8.1.0 diff --git a/R/movement.R b/R/movement.R index 236c0b1..383bdd6 100644 --- a/R/movement.R +++ b/R/movement.R @@ -312,7 +312,7 @@ compute_movement_cost <- function( #' @param .data A data frame containing personnel data. #' @param movement_type A character string indicating the type of movement: "hire", "fire", "retirement", or "turnover". #' @param measurement_type A character string indicating the measurement type: "count" or "rate". Ignored for turnover, which is a ratio. -#' @param group_cols A character string indicating the grouping column, or "ref_date" for no grouping. +#' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' #' @return A data.table containing the aggregated movement data. #' diff --git a/R/plots.R b/R/plots.R index c9b3c58..688e3d3 100644 --- a/R/plots.R +++ b/R/plots.R @@ -311,7 +311,7 @@ plot_segment <- function(.data, col, group) { #' @param .data A data frame containing the movement data with columns `ref_date`, `indicator`, and optionally a grouping column. #' @param movement_type A character string indicating the type of movement: "hire", "fire", or "turnover". #' @param measurement_type A character string indicating the measurement type: "count" or "rate". -#' @param group_cols A character string indicating the grouping column, or "ref_date" for no grouping. +#' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' #' @return A ggplot2 object representing the personnel movement over time. #' @@ -386,7 +386,7 @@ plot_movement <- function(.data, movement_type, measurement_type, group_cols) { #' Plot Decile Summary #' #' @param .data A data frame produced by `compute_decile()`, containing columns `decile`, `mean_value`, and optionally a grouping column. -#' @param group_cols A character string indicating the grouping column, or "ref_date" for no grouping. +#' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' #' @return A ggplot2 object representing the decile summary. #' @@ -478,7 +478,7 @@ plot_histogram <- function(.data, plot_type = "histogram", group_col = NULL) { #' Plot Compression Ratio #' #' @param .data A data frame containing the compression ratio data produced by `compute_compression_ratio()`. -#' @param group_cols A character string indicating the grouping column, or "ref_date" +#' @param group_cols A character vector of columns to group by, or `"ref_date"` #' for no grouping. #' #' @return A ggplot2 object representing the compression ratio. @@ -534,7 +534,7 @@ plot_compression_ratio <- function(.data, group_cols = NULL) { #' Plot Movement Cost #' #' @param .data A data frame containing the movement cost data with columns `movement_cost` and optionally a grouping column. -#' @param group_cols A character string indicating the grouping column, or "ref_date" for no grouping. +#' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' #' @return A ggplot2 object representing the movement cost. #' diff --git a/R/summarize.R b/R/summarize.R index 753c88c..58109a1 100644 --- a/R/summarize.R +++ b/R/summarize.R @@ -644,7 +644,7 @@ compute_compression_ratio <- function( #' Function to compute the distribution function of a variable. #' #' @param .data A data frame. -#' @param group_col A character vector of column names to group the data by. +#' @param group_col A string naming a single column to group by, or `NULL` for no grouping. #' @param measure_col The name of the column for which the percentile values will be computed. #' @param binwidth The width of the bins for grouping the measure values (default is 1). #' @param latest_measure A logical value indicating whether to return only the measures for the latest reference date. diff --git a/man/add_contract_to_event.Rd b/man/add_contract_to_event.Rd index b85c663..ec99d32 100644 --- a/man/add_contract_to_event.Rd +++ b/man/add_contract_to_event.Rd @@ -8,29 +8,29 @@ add_contract_to_event(event_dt, contract_dt, keep_vars) } \arguments{ \item{event_dt}{A data.table containing personnel event records. Must include the columns -`personnel_id` and `ref_date`.} +\code{personnel_id} and \code{ref_date}.} -\item{contract_dt}{A data.table containing contract information, also including `personnel_id` -and `ref_date`. The contract dataset provides additional attributes describing the personnel's +\item{contract_dt}{A data.table containing contract information, also including \code{personnel_id} +and \code{ref_date}. The contract dataset provides additional attributes describing the personnel's contractual context on each reference date.} -\item{keep_vars}{A character vector of variable names in `contract_dt` to be merged into the +\item{keep_vars}{A character vector of variable names in \code{contract_dt} to be merged into the event dataset. These typically describe contract-level attributes such as position, department, or employment type.} } \value{ -A data.table identical to `event_dt`, but with the specified variables from `contract_dt` -joined in by matching on `personnel_id` and `ref_date`. +A data.table identical to \code{event_dt}, but with the specified variables from \code{contract_dt} +joined in by matching on \code{personnel_id} and \code{ref_date}. } \description{ This function merges contract information into an event dataset (such as hires, terminations, or transfers) -by matching on `personnel_id` and `ref_date`. It ensures that selected variables from the contract dataset +by matching on \code{personnel_id} and \code{ref_date}. It ensures that selected variables from the contract dataset are attached to corresponding events without duplicating records. } \details{ -The function performs a *right join* operation of the `contract_dt` onto `event_dt` -(via `data.table`'s `on` syntax). Only unique combinations of `personnel_id`, `ref_date`, -and `keep_vars` are retained from the contract dataset prior to the join, preventing +The function performs a \emph{right join} operation of the \code{contract_dt} onto \code{event_dt} +(via \code{data.table}'s \code{on} syntax). Only unique combinations of \code{personnel_id}, \code{ref_date}, +and \code{keep_vars} are retained from the contract dataset prior to the join, preventing duplicate key matches. This function is particularly useful when enriching HR event logs with contextual information @@ -62,5 +62,5 @@ enriched_events <- add_contract_to_event( } \seealso{ -[data.table::merge()], [data.table::unique()] +\code{\link[data.table:merge]{data.table::merge()}}, \code{\link[data.table:unique]{data.table::unique()}} } diff --git a/man/apply_baseline_index.Rd b/man/apply_baseline_index.Rd index 6d73287..2643a88 100644 --- a/man/apply_baseline_index.Rd +++ b/man/apply_baseline_index.Rd @@ -7,16 +7,16 @@ apply_baseline_index(.data, group_col) } \arguments{ -\item{.data}{Data frame with `ref_date` and `value`, as returned by -[compute_trend_summary()].} +\item{.data}{Data frame with \code{ref_date} and \code{value}, as returned by +\code{\link[=compute_trend_summary]{compute_trend_summary()}}.} -\item{group_col}{Character. Column to group by, or `"ref_date"` for no +\item{group_col}{Character. Column to group by, or \code{"ref_date"} for no grouping.} } \value{ -The input data frame with `value` rescaled to a baseline index. +The input data frame with \code{value} rescaled to a baseline index. } \description{ -Rescales `value` so the earliest observation equals 100. When a grouping +Rescales \code{value} so the earliest observation equals 100. When a grouping column is supplied the rescaling is applied independently within each group. } diff --git a/man/bra_hrmis.Rd b/man/bra_hrmis.Rd index f8bd9c5..74f6588 100644 --- a/man/bra_hrmis.Rd +++ b/man/bra_hrmis.Rd @@ -7,40 +7,40 @@ \format{ A data frame with 34 variables: \describe{ - \item{ANO_PAGAMENTO}{Payment year (numeric)} - \item{MES_REFERENCIA}{Reference month (numeric)} - \item{MATRICULA}{Employee registration/enrollment number (character)} - \item{CPF}{Brazilian tax identification number - Cadastro de Pessoas Físicas (character)} - \item{DATA_NASCIMENTO}{Date of birth (Date)} - \item{GENERO}{Gender (character)} - \item{ESCOLARIDADE}{Educational level/degree (character)} - \item{DATA_ADMISSAO}{Admission/hiring date (Date)} - \item{ADMINISTRACAO}{Administration type (character)} - \item{TIPO_CONTRATO}{Contract type (character)} - \item{GRUPO}{Employee group classification (character)} - \item{COD_ORGAO}{Agency/department code (character)} - \item{ORGAO}{Agency/department name (character)} - \item{CARREIRA}{Career path/track (character)} - \item{CARGO}{Position/job title (character)} - \item{JORNADA}{Work schedule/hours (character)} - \item{CLASSE}{Position class (character)} - \item{NIVEL}{Position level (character)} - \item{DATA_ULT_PROGRESSAO}{Date of last career progression (Date)} - \item{SALARIO_BASE}{Base salary (numeric)} - \item{CONTRIBUICAO_PREVIDENCIA}{Social security contribution (numeric)} - \item{ADICIONAL_TEMPO_SERVICO}{Time of service bonus (numeric)} - \item{COMISSAO}{Commission payment (numeric)} - \item{ABONO_PERMANENCIA}{Permanence allowance (numeric)} - \item{DECISAO_JUDICIAL}{Judicial decision payments (numeric)} - \item{DEMAIS_GRATIFICACOES_TRANSITORIAS}{Other temporary bonuses (numeric)} - \item{DEMAIS_GRATIFICACOES_CARREIRA}{Other career-related bonuses (numeric)} - \item{SALARIO_BRUTO}{Gross salary (numeric)} - \item{SALARIO_LIQUIDO}{Net salary (numeric)} - \item{DATA_APOSENTADORIA}{Retirement date (Date)} - \item{VALOR_BRUTO}{Gross amount (numeric)} - \item{VALOR_LIQUIDO}{Net amount (numeric)} - \item{TIPO}{Type/category (character)} - \item{TEMPO DE CONTRIBUIÇÃO}{Contribution time period (character)} +\item{ANO_PAGAMENTO}{Payment year (numeric)} +\item{MES_REFERENCIA}{Reference month (numeric)} +\item{MATRICULA}{Employee registration/enrollment number (character)} +\item{CPF}{Brazilian tax identification number - Cadastro de Pessoas Físicas (character)} +\item{DATA_NASCIMENTO}{Date of birth (Date)} +\item{GENERO}{Gender (character)} +\item{ESCOLARIDADE}{Educational level/degree (character)} +\item{DATA_ADMISSAO}{Admission/hiring date (Date)} +\item{ADMINISTRACAO}{Administration type (character)} +\item{TIPO_CONTRATO}{Contract type (character)} +\item{GRUPO}{Employee group classification (character)} +\item{COD_ORGAO}{Agency/department code (character)} +\item{ORGAO}{Agency/department name (character)} +\item{CARREIRA}{Career path/track (character)} +\item{CARGO}{Position/job title (character)} +\item{JORNADA}{Work schedule/hours (character)} +\item{CLASSE}{Position class (character)} +\item{NIVEL}{Position level (character)} +\item{DATA_ULT_PROGRESSAO}{Date of last career progression (Date)} +\item{SALARIO_BASE}{Base salary (numeric)} +\item{CONTRIBUICAO_PREVIDENCIA}{Social security contribution (numeric)} +\item{ADICIONAL_TEMPO_SERVICO}{Time of service bonus (numeric)} +\item{COMISSAO}{Commission payment (numeric)} +\item{ABONO_PERMANENCIA}{Permanence allowance (numeric)} +\item{DECISAO_JUDICIAL}{Judicial decision payments (numeric)} +\item{DEMAIS_GRATIFICACOES_TRANSITORIAS}{Other temporary bonuses (numeric)} +\item{DEMAIS_GRATIFICACOES_CARREIRA}{Other career-related bonuses (numeric)} +\item{SALARIO_BRUTO}{Gross salary (numeric)} +\item{SALARIO_LIQUIDO}{Net salary (numeric)} +\item{DATA_APOSENTADORIA}{Retirement date (Date)} +\item{VALOR_BRUTO}{Gross amount (numeric)} +\item{VALOR_LIQUIDO}{Net amount (numeric)} +\item{TIPO}{Type/category (character)} +\item{TEMPO DE CONTRIBUIÇÃO}{Contribution time period (character)} } } \source{ diff --git a/man/bra_hrmis_allowance.Rd b/man/bra_hrmis_allowance.Rd index 033020e..e1b5ccc 100644 --- a/man/bra_hrmis_allowance.Rd +++ b/man/bra_hrmis_allowance.Rd @@ -7,23 +7,23 @@ \format{ A data frame with 60,430 rows and 5 variables: \describe{ - \item{contract_id}{Character. Unique identifier for the employment - contract associated with the allowance.} +\item{contract_id}{Character. Unique identifier for the employment +contract associated with the allowance.} - \item{ref_date}{Date. Reference date for the payroll record.} +\item{ref_date}{Date. Reference date for the payroll record.} - \item{allowance_type}{Character. Harmonized allowance or bonus category.} +\item{allowance_type}{Character. Harmonized allowance or bonus category.} - \item{allowance_lcu}{Numeric. Value of the allowance in local currency - units (LCU).} +\item{allowance_lcu}{Numeric. Value of the allowance in local currency +units (LCU).} - \item{personnel_id}{Character. Unique identifier for the individual - receiving the allowance.} +\item{personnel_id}{Character. Unique identifier for the individual +receiving the allowance.} } } \source{ Government of the State of Alagoas Human Resource Management Information -System (HRMIS), harmonized by the `govhrcast` package. +System (HRMIS), harmonized by the \code{govhrcast} package. } \usage{ data(bra_hrmis_allowance) @@ -36,10 +36,9 @@ reference period. } \details{ The dataset follows a long format, with one observation per -`contract_id`–`ref_date`–`allowance_type` combination. Monetary values are +\code{contract_id}–\code{ref_date}–\code{allowance_type} combination. Monetary values are reported in local currency units (LCU). - The allowance module records non-base salary remuneration components paid to employees, including permanent and temporary allowances, bonuses, commissions, and other supplementary payments. Each observation diff --git a/man/bra_hrmis_contract.Rd b/man/bra_hrmis_contract.Rd index ce82f85..05703ba 100644 --- a/man/bra_hrmis_contract.Rd +++ b/man/bra_hrmis_contract.Rd @@ -7,27 +7,27 @@ \format{ A data frame with 16,434 rows and 19 variables: \describe{ - \item{contract_id}{Unique identifier assigned to each contract.} - \item{personnel_id}{Unique identifier assigned to each worker.} - \item{est_id}{Unique identifier assigned to each establishment.} - \item{ref_date}{Reference date of the HRMIS record.} - \item{base_salary_lcu}{Basic salary before allowances and deductions (local currency units).} - \item{allowance_lcu}{Total allowances paid in addition to base salary (local currency units).} - \item{gross_salary_lcu}{Total compensation before taxes and deductions (local currency units).} - \item{net_salary_lcu}{Take-home pay after taxes and deductions (local currency units).} - \item{whours}{Contracted working hours.} - \item{start_date}{Employment contract start date.} - \item{end_date}{Employment contract end date, if applicable.} - \item{paygrade}{Pay grade or salary scale classification.} - \item{seniority}{Level or step within the pay grade.} - \item{occupation_native}{Occupation title in the native language.} - \item{occupation_english}{Occupation title translated into English.} - \item{occupation_iscocode}{ISCO-08 occupation code (4-digit level).} - \item{occupation_isconame}{ISCO-08 occupation name corresponding to the occupation code.} - \item{contract_type_native}{Employment contract type in the native language.} - \item{contract_type}{Standardized employment contract type. One of - \code{"permanent"}, \code{"fixed-term"}, \code{"short-term"}, - \code{"pensioner"}, or \code{"inactive"}.} +\item{contract_id}{Unique identifier assigned to each contract.} +\item{personnel_id}{Unique identifier assigned to each worker.} +\item{est_id}{Unique identifier assigned to each establishment.} +\item{ref_date}{Reference date of the HRMIS record.} +\item{base_salary_lcu}{Basic salary before allowances and deductions (local currency units).} +\item{allowance_lcu}{Total allowances paid in addition to base salary (local currency units).} +\item{gross_salary_lcu}{Total compensation before taxes and deductions (local currency units).} +\item{net_salary_lcu}{Take-home pay after taxes and deductions (local currency units).} +\item{whours}{Contracted working hours.} +\item{start_date}{Employment contract start date.} +\item{end_date}{Employment contract end date, if applicable.} +\item{paygrade}{Pay grade or salary scale classification.} +\item{seniority}{Level or step within the pay grade.} +\item{occupation_native}{Occupation title in the native language.} +\item{occupation_english}{Occupation title translated into English.} +\item{occupation_iscocode}{ISCO-08 occupation code (4-digit level).} +\item{occupation_isconame}{ISCO-08 occupation name corresponding to the occupation code.} +\item{contract_type_native}{Employment contract type in the native language.} +\item{contract_type}{Standardized employment contract type. One of +\code{"permanent"}, \code{"fixed-term"}, \code{"short-term"}, +\code{"pensioner"}, or \code{"inactive"}.} } } \source{ @@ -40,7 +40,7 @@ bra_hrmis_contract \description{ Harmonized contract-level human resource management information system (HRMIS) data for the State of Alagoas, Brazil. Each observation represents a unique -contract at a given reference date (`contract_id`, `ref_date`) and contains +contract at a given reference date (\code{contract_id}, \code{ref_date}) and contains information on remuneration, contract characteristics, occupation, and employment details. } @@ -48,7 +48,6 @@ employment details. The dataset follows the GovHR contract module data dictionary and is intended for workforce analytics, payroll analysis, and personnel microsimulation. - This dataset is harmonized according to the GovHR data dictionary. Salary variables are expressed in nominal local currency units (LCU). Occupations are translated into English and mapped to the International Standard diff --git a/man/bra_hrmis_est.Rd b/man/bra_hrmis_est.Rd index ebec819..3656e57 100644 --- a/man/bra_hrmis_est.Rd +++ b/man/bra_hrmis_est.Rd @@ -7,13 +7,13 @@ \format{ A data frame with 65 rows and 6 variables: \describe{ - \item{est_name_native}{Official establishment name in the native language (Portuguese).} - \item{est_id}{Unique identifier assigned to each establishment.} - \item{ref_date}{Reference date of the HRMIS record.} - \item{country_code}{Three-letter ISO 3166-1 alpha-3 country code following the World Bank convention (e.g., \code{"BRA"}).} - \item{country_name}{Official World Bank country name.} - \item{est_name_en}{Official establishment name translated into English.} - \item{sector}{Standardized Classification of the Functions of Government (COFOG) sector assigned to the establishment.} +\item{est_name_native}{Official establishment name in the native language (Portuguese).} +\item{est_id}{Unique identifier assigned to each establishment.} +\item{ref_date}{Reference date of the HRMIS record.} +\item{country_code}{Three-letter ISO 3166-1 alpha-3 country code following the World Bank convention (e.g., \code{"BRA"}).} +\item{country_name}{Official World Bank country name.} +\item{est_name_en}{Official establishment name translated into English.} +\item{sector}{Standardized Classification of the Functions of Government (COFOG) sector assigned to the establishment.} } } \source{ @@ -34,23 +34,22 @@ The dataset follows the GovHR establishment module data dictionary and is intended to support organizational analysis, workforce reporting, and aggregation of personnel and contract records. - This dataset is harmonized according to the GovHR establishment module data dictionary. Establishment names are translated into English to facilitate international comparative analysis. Each establishment is assigned to one of the ten top-level COFOG functional sectors: \itemize{ - \item General Public Services - \item Defence - \item Public Order and Safety - \item Economic Affairs - \item Environmental Protection - \item Housing and Community Amenities - \item Health - \item Recreation, Culture and Religion - \item Education - \item Social Protection +\item General Public Services +\item Defence +\item Public Order and Safety +\item Economic Affairs +\item Environmental Protection +\item Housing and Community Amenities +\item Health +\item Recreation, Culture and Religion +\item Education +\item Social Protection } } \examples{ diff --git a/man/bra_hrmis_personnel.Rd b/man/bra_hrmis_personnel.Rd index 861e176..faa1179 100644 --- a/man/bra_hrmis_personnel.Rd +++ b/man/bra_hrmis_personnel.Rd @@ -7,20 +7,20 @@ \format{ A data frame with 15,681 rows and 11 variables: \describe{ - \item{personnel_id}{Unique identifier assigned to each worker.} - \item{ref_date}{Reference date of the HRMIS record.} - \item{birth_date}{Worker's date of birth.} - \item{age}{Worker's age in years at the reference date.} - \item{gender}{Worker's gender.} - \item{educat7}{Educational attainment using the World Bank Global Labor Database (GLD) seven-level education classification.} - \item{employment_status}{Standardized employment status. One of - \code{"active"}, \code{"inactive"}, or \code{"pensioner"}.} - \item{service_type}{Type of public service. One of - \code{"civilian"} or \code{"military"}.} - \item{race}{Worker's race or broad ethnic classification, where available.} - \item{tribe}{Worker's ethnic or tribal affiliation, where available.} - \item{first_employment_date}{Date the worker first entered the public service.} - \item{retirement_date}{The date of retirement for those whose \code{employment_status} is \code{"pensioner"}} +\item{personnel_id}{Unique identifier assigned to each worker.} +\item{ref_date}{Reference date of the HRMIS record.} +\item{birth_date}{Worker's date of birth.} +\item{age}{Worker's age in years at the reference date.} +\item{gender}{Worker's gender.} +\item{educat7}{Educational attainment using the World Bank Global Labor Database (GLD) seven-level education classification.} +\item{employment_status}{Standardized employment status. One of +\code{"active"}, \code{"inactive"}, or \code{"pensioner"}.} +\item{service_type}{Type of public service. One of +\code{"civilian"} or \code{"military"}.} +\item{race}{Worker's race or broad ethnic classification, where available.} +\item{tribe}{Worker's ethnic or tribal affiliation, where available.} +\item{first_employment_date}{Date the worker first entered the public service.} +\item{retirement_date}{The date of retirement for those whose \code{employment_status} is \code{"pensioner"}} } } \source{ @@ -33,7 +33,7 @@ bra_hrmis_personnel \description{ Harmonized personnel-level human resource management information system (HRMIS) data for the State of Alagoas, Brazil. Each observation represents a -unique worker at a given reference date (`personnel_id`, `ref_date`) and +unique worker at a given reference date (\code{personnel_id}, \code{ref_date}) and contains demographic characteristics, education, employment status, and public service information. } @@ -42,7 +42,6 @@ The dataset follows the GovHR personnel module data dictionary and is intended for workforce analytics, demographic analysis, and personnel microsimulation. - This dataset is harmonized according to the GovHR data dictionary. Educational attainment follows the seven-level classification used by the World Bank's Global Labor Database (GLD). Employment status and service type are diff --git a/man/classify_text.Rd b/man/classify_text.Rd index 5533546..bff4970 100644 --- a/man/classify_text.Rd +++ b/man/classify_text.Rd @@ -22,24 +22,26 @@ classify_text( \item{corpus}{A data.frame with at minimum an id column and a text column.} \item{taxonomy}{Either: -- A named character vector: names = class IDs, values = class labels/descriptions -- A data.frame with columns identified by `class_id_col` and `class_label_col`} +\itemize{ +\item A named character vector: names = class IDs, values = class labels/descriptions +\item A data.frame with columns identified by \code{class_id_col} and \code{class_label_col} +}} -\item{id_col}{Name of the id column in `corpus`. Default "id".} +\item{id_col}{Name of the id column in \code{corpus}. Default "id".} -\item{text_col}{Name of the text column in `corpus`. Default "text".} +\item{text_col}{Name of the text column in \code{corpus}. Default "text".} -\item{class_id_col}{Name of the class ID column in `taxonomy` (if data.frame). Default "class_id".} +\item{class_id_col}{Name of the class ID column in \code{taxonomy} (if data.frame). Default "class_id".} -\item{class_label_col}{Name of the class label column in `taxonomy` (if data.frame). Default "class_label".} +\item{class_label_col}{Name of the class label column in \code{taxonomy} (if data.frame). Default "class_label".} \item{num_leaves}{Number of top-matching classes to return per item. Default 1.} \item{method}{"tfidf_sum" (mirrors labourR) or "cosine" (improved, length-normalised). Default "tfidf_sum".} -\item{max_dist}{Maximum string distance for fuzzy token matching (used when `string_dist` is set).} +\item{max_dist}{Maximum string distance for fuzzy token matching (used when \code{string_dist} is set).} -\item{string_dist}{String distance method passed to `stringdist::amatch()`. NULL disables fuzzy matching.} +\item{string_dist}{String distance method passed to \code{stringdist::amatch()}. NULL disables fuzzy matching.} \item{stopwords}{Character vector of stopwords to remove. NULL uses a built-in English set.} } diff --git a/man/clean_hr_data.Rd b/man/clean_hr_data.Rd index c8edf68..1f39870 100644 --- a/man/clean_hr_data.Rd +++ b/man/clean_hr_data.Rd @@ -17,30 +17,30 @@ clean_hr_data( \arguments{ \item{data}{A data.frame containing personnel or contract records.} -\item{data_type}{`"personnel"` or `"contract"`.} +\item{data_type}{\code{"personnel"} or \code{"contract"}.} -\item{remove_duplicates}{Logical (default: `TRUE`).} +\item{remove_duplicates}{Logical (default: \code{TRUE}).} -\item{fix_dates}{Logical (default: `TRUE`).} +\item{fix_dates}{Logical (default: \code{TRUE}).} -\item{fix_ages}{Logical, personnel only (default: `TRUE`).} +\item{fix_ages}{Logical, personnel only (default: \code{TRUE}).} -\item{fix_salaries}{Logical, contract only (default: `TRUE`).} +\item{fix_salaries}{Logical, contract only (default: \code{TRUE}).} -\item{verbose}{Logical, print step-level messages (default: `FALSE`).} +\item{verbose}{Logical, print step-level messages (default: \code{FALSE}).} } \value{ A cleaned data.frame. } \description{ Chains the treatment functions in a recommended order. Steps applied per -`data_type`: +\code{data_type}: \enumerate{ - \item **Both**: Remove duplicates (keep first); fix `ref_date` → `NA` - \item **Personnel**: Fix `birth_date` → `NA`; flag underage and - over-retirement-age workers - \item **Contract**: Clamp `whours`; abs(negative salaries); - recalculate gross = base + allowance +\item \strong{Both}: Remove duplicates (keep first); fix \code{ref_date} → \code{NA} +\item \strong{Personnel}: Fix \code{birth_date} → \code{NA}; flag underage and +over-retirement-age workers +\item \strong{Contract}: Clamp \code{whours}; abs(negative salaries); +recalculate gross = base + allowance } Use individual functions directly when you need custom strategies. } diff --git a/man/cofog_taxonomy.Rd b/man/cofog_taxonomy.Rd index 7324009..1847d42 100644 --- a/man/cofog_taxonomy.Rd +++ b/man/cofog_taxonomy.Rd @@ -7,41 +7,41 @@ \format{ A data frame with 10 rows and 3 variables: \describe{ - \item{class_id}{Character. Two-digit COFOG class identifier (e.g., - `"01"`, `"02"`).} +\item{class_id}{Character. Two-digit COFOG class identifier (e.g., +\code{"01"}, \code{"02"}).} - \item{class_label}{Character. Name of the first-level COFOG function.} +\item{class_label}{Character. Name of the first-level COFOG function.} - \item{description}{Character. Collection of keywords and descriptive - terms associated with each COFOG function. These are intended to support - rule-based and machine-assisted classification of government - establishments.} +\item{description}{Character. Collection of keywords and descriptive +terms associated with each COFOG function. These are intended to support +rule-based and machine-assisted classification of government +establishments.} } The ten first-level COFOG functions are: \enumerate{ - \item General Public Services - \item Defence - \item Public Order and Safety - \item Economic Affairs - \item Environmental Protection - \item Housing and Community Amenities - \item Health - \item Recreation, Culture and Religion - \item Education - \item Social Protection +\item General Public Services +\item Defence +\item Public Order and Safety +\item Economic Affairs +\item Environmental Protection +\item Housing and Community Amenities +\item Health +\item Recreation, Culture and Religion +\item Education +\item Social Protection } } \source{ -United Nations. *Classification of the Functions of Government (COFOG)*; -International Monetary Fund. *Government Finance Statistics Manual 2014*. +United Nations. \emph{Classification of the Functions of Government (COFOG)}; +International Monetary Fund. \emph{Government Finance Statistics Manual 2014}. } \usage{ data(cofog_taxonomy) } \description{ A lookup table containing the first-level Classification of the Functions -of Government (COFOG) taxonomy used by `govhrcast` to classify government +of Government (COFOG) taxonomy used by \code{govhrcast} to classify government establishments according to their primary functional responsibilities. } \details{ @@ -51,7 +51,6 @@ and the United Nations Classification of the Functions of Government, together with descriptive keyword dictionaries that facilitate automated establishment classification during HRMIS harmonization. - This dataset is intended primarily for internal use by the establishment harmonization workflow, where establishment names are mapped to functional classifications using keyword matching and other natural language diff --git a/man/complete_columns.Rd b/man/complete_columns.Rd index cbcb9da..09c8f18 100644 --- a/man/complete_columns.Rd +++ b/man/complete_columns.Rd @@ -15,7 +15,7 @@ complete_columns(data, cols) A tibble with all requested columns, missing ones filled with NA. } \description{ -If any column in `cols` is missing from `data`, this function adds it +If any column in \code{cols} is missing from \code{data}, this function adds it and populates it with NA values. } \examples{ diff --git a/man/complete_dates.Rd b/man/complete_dates.Rd index 9c30fc2..1b257c0 100644 --- a/man/complete_dates.Rd +++ b/man/complete_dates.Rd @@ -9,21 +9,21 @@ complete_dates(data, id_col, start_date = NULL, end_date = NULL, freq = "year") \arguments{ \item{data}{A data.frame or data.table containing at least an identifier column.} -\item{id_col}{Character. Name of the identifier column (e.g., `"personnel_id"`).} +\item{id_col}{Character. Name of the identifier column (e.g., \code{"personnel_id"}).} \item{start_date}{Character or Date. Start of the full date sequence -(e.g., `"2007-09-01"`).} +(e.g., \code{"2007-09-01"}).} \item{end_date}{Character or Date. End of the full date sequence -(e.g., `"2018-01-01"`).} +(e.g., \code{"2018-01-01"}).} \item{freq}{Character. Interval for date sequence passed to -\code{seq.Date(by = ...)}. Default is `"year"`.} +\code{seq.Date(by = ...)}. Default is \code{"year"}.} } \value{ A \code{data.table} containing all possible combinations of identifiers - and reference dates between the given start and end points, merged with - the original data. +and reference dates between the given start and end points, merged with +the original data. } \description{ Expands a dataset to include all combinations of identifiers and reference diff --git a/man/compute_baseline_index.Rd b/man/compute_baseline_index.Rd index 44ec0a5..054d0ef 100644 --- a/man/compute_baseline_index.Rd +++ b/man/compute_baseline_index.Rd @@ -16,7 +16,7 @@ column must be numeric.} } \value{ A tibble with the date column and computed index columns. Index - column names are formed by appending "_index" to the original column names. +column names are formed by appending "_index" to the original column names. } \description{ Computes index values for specified columns where the earliest year value diff --git a/man/compute_coverage.Rd b/man/compute_coverage.Rd index 84b054a..9a2b040 100644 --- a/man/compute_coverage.Rd +++ b/man/compute_coverage.Rd @@ -16,12 +16,12 @@ compute_coverage( \item{group}{A character string specifying the column name to group by. If NULL, coverage is computed for the entire data set.} -\item{include_ref_date}{A logical value indicating whether to include the `ref_date` column in the grouping.} +\item{include_ref_date}{A logical value indicating whether to include the \code{ref_date} column in the grouping.} -\item{aggregate}{A logical value indicating whether to aggregate coverage values by the `group`.} +\item{aggregate}{A logical value indicating whether to aggregate coverage values by the \code{group}.} } \value{ -A data frame with coverage values for each column, optionally grouped by the specified `group`. +A data frame with coverage values for each column, optionally grouped by the specified \code{group}. } \description{ Compute coverage of non-missing values in a dataset. diff --git a/man/compute_cross_section.Rd b/man/compute_cross_section.Rd index da0110e..555d63e 100644 --- a/man/compute_cross_section.Rd +++ b/man/compute_cross_section.Rd @@ -7,23 +7,23 @@ compute_cross_section(.data, group, measure_col = NULL) } \arguments{ -\item{.data}{A data frame containing a `ref_date` column and the grouping +\item{.data}{A data frame containing a \code{ref_date} column and the grouping column.} \item{group}{Character string naming the grouping column.} \item{measure_col}{Character string naming the numeric column to sum, or -`NULL` to count rows.} +\code{NULL} to count rows.} } \value{ -A data frame with the grouping column and a `value` column. +A data frame with the grouping column and a \code{value} column. } \description{ Filters to the latest reference date within each group, then aggregates to -produce a per-group `value`. Used as the data source for total-by-group bar +produce a per-group \code{value}. Used as the data source for total-by-group bar charts. } \details{ -When `measure_col` is `NULL`, counts rows (headcount). When a column name is +When \code{measure_col} is \code{NULL}, counts rows (headcount). When a column name is supplied, sums that column (wage bill). } diff --git a/man/compute_cross_section_summary.Rd b/man/compute_cross_section_summary.Rd index 67a4fd6..0d04af4 100644 --- a/man/compute_cross_section_summary.Rd +++ b/man/compute_cross_section_summary.Rd @@ -7,17 +7,17 @@ compute_cross_section_summary(.data, group_col, measure_col = NULL) } \arguments{ -\item{.data}{Data frame containing `ref_date` and the grouping column.} +\item{.data}{Data frame containing \code{ref_date} and the grouping column.} \item{group_col}{Character. Column to group by.} -\item{measure_col}{Character. Numeric column to sum, or `NULL` to count rows.} +\item{measure_col}{Character. Numeric column to sum, or \code{NULL} to count rows.} } \value{ -A data frame with the grouping column and a `value` column. +A data frame with the grouping column and a \code{value} column. } \description{ Keeps each group's latest reference date and aggregates it into a single -`value` per group. Counts rows when `measure_col` is `NULL` (headcount) and +\code{value} per group. Counts rows when \code{measure_col} is \code{NULL} (headcount) and sums the column otherwise (wage bill). } diff --git a/man/compute_decile.Rd b/man/compute_decile.Rd index 7701175..fc0e07f 100644 --- a/man/compute_decile.Rd +++ b/man/compute_decile.Rd @@ -7,21 +7,21 @@ compute_decile(.data, group_cols = NULL, measure_col, latest_measure = FALSE) } \arguments{ -\item{.data}{Data frame containing a `ref_date` column and the measure.} +\item{.data}{Data frame containing a \code{ref_date} column and the measure.} -\item{group_cols}{Character vector of columns to group by, or `NULL` for no +\item{group_cols}{Character vector of columns to group by, or \code{NULL} for no grouping.} \item{measure_col}{Character. Numeric column to rank into deciles.} \item{latest_measure}{Logical. Restrict to the latest reference date and drop -`ref_date` from the grouping. Default `FALSE`.} +\code{ref_date} from the grouping. Default \code{FALSE}.} } \value{ -A data frame with the grouping columns, `decile`, `median_value` and - `mean_value`. +A data frame with the grouping columns, \code{decile}, \code{median_value} and +\code{mean_value}. } \description{ -Assigns rows to deciles of `measure_col` within each group and reference +Assigns rows to deciles of \code{measure_col} within each group and reference date, then reports the median and mean of the measure in each decile. } diff --git a/man/compute_density.Rd b/man/compute_density.Rd index 9d22350..d07f773 100644 --- a/man/compute_density.Rd +++ b/man/compute_density.Rd @@ -15,7 +15,7 @@ compute_density( \arguments{ \item{.data}{A data frame.} -\item{group_col}{A character vector of column names to group the data by.} +\item{group_col}{A string naming a single column to group by, or \code{NULL} for no grouping.} \item{measure_col}{The name of the column for which the percentile values will be computed.} @@ -24,7 +24,7 @@ compute_density( \item{latest_measure}{A logical value indicating whether to return only the measures for the latest reference date.} } \value{ -A data frame with the distribution function, where `pct` denotes the percentage of observations in each bin and `cum_pct` denotes the cumulative percentage. +A data frame with the distribution function, where \code{pct} denotes the percentage of observations in each bin and \code{cum_pct} denotes the cumulative percentage. } \description{ Function to compute the distribution function of a variable. diff --git a/man/compute_employment_spells.Rd b/man/compute_employment_spells.Rd index 40712d3..90f95e9 100644 --- a/man/compute_employment_spells.Rd +++ b/man/compute_employment_spells.Rd @@ -43,13 +43,13 @@ establishment, occupation, or organization). Default is \code{NULL}.} } \value{ A data.table with one row per unique combination of - \code{personnel_id} and \code{group_cols}, containing: - \describe{ - \item{ref_date}{The last reference date at which the person was - observed in this \code{group_cols} state.} - \item{spell_years}{Total cumulative tenure, in years, accrued in - this state as of that date.} - } +\code{personnel_id} and \code{group_cols}, containing: +\describe{ +\item{ref_date}{The last reference date at which the person was +observed in this \code{group_cols} state.} +\item{spell_years}{Total cumulative tenure, in years, accrued in +this state as of that date.} +} } \description{ Derives, for each person and (optionally) each grouping variable such as @@ -72,15 +72,15 @@ combination and date. Two caveats affect interpretation: \itemize{ - \item If \code{contract_id} is included in \code{group_cols} and a - person is renewed onto a new contract while remaining on the same - paygrade, this will be treated as two separate spells rather than one - continuous spell, understating true time-in-grade for that person. - \item If a person leaves a given \code{group_cols} state and later - returns to it (e.g. paygrade A -> B -> A) under the same grouping - combination, the two non-contiguous stints are combined into a single - spell, and \code{spell_years} will reflect their combined duration - rather than just the most recent stint. +\item If \code{contract_id} is included in \code{group_cols} and a +person is renewed onto a new contract while remaining on the same +paygrade, this will be treated as two separate spells rather than one +continuous spell, understating true time-in-grade for that person. +\item If a person leaves a given \code{group_cols} state and later +returns to it (e.g. paygrade A -> B -> A) under the same grouping +combination, the two non-contiguous stints are combined into a single +spell, and \code{spell_years} will reflect their combined duration +rather than just the most recent stint. } This function does not distinguish spells that ended because the person diff --git a/man/compute_fastchange.Rd b/man/compute_fastchange.Rd index 60d0e06..7704af5 100644 --- a/man/compute_fastchange.Rd +++ b/man/compute_fastchange.Rd @@ -18,10 +18,10 @@ used to order the data and define the time sequence (typically a year column).} \value{ A dataset with: \itemize{ - \item The completed `date_col` sequence. - \item A new column named `"growth_"` containing the year-over-year growth rates. +\item The completed \code{date_col} sequence. +\item A new column named \code{"growth_"} containing the year-over-year growth rates. } - The returned object will match the class of the input `data`. +The returned object will match the class of the input \code{data}. } \description{ Computes the year-over-year growth rate for a numeric column in a dataset. @@ -30,9 +30,11 @@ in the date column, fills in any missing years, and calculates the growth rate using lagged values. } \details{ -- Missing years in the sequence are added automatically. -- Missing values in `col` result in `NA` for the corresponding growth rate. -- The first observation (or any row where the lag is missing) will have `NA`. +\itemize{ +\item Missing years in the sequence are added automatically. +\item Missing values in \code{col} result in \code{NA} for the corresponding growth rate. +\item The first observation (or any row where the lag is missing) will have \code{NA}. +} } \examples{ library(data.table) diff --git a/man/compute_fastshare.Rd b/man/compute_fastshare.Rd index 2e7e160..ed7e715 100644 --- a/man/compute_fastshare.Rd +++ b/man/compute_fastshare.Rd @@ -17,44 +17,50 @@ compute_fastshare( \arguments{ \item{data}{A dataset containing the raw data to summarize.} -\item{macro_data}{A `data.frame`, `data.table`, or tibble containing macro-level indicators. -Must share at least one common grouping variable with `data`. Default is `macro_indicators`. +\item{macro_data}{A \code{data.frame}, \code{data.table}, or tibble containing macro-level indicators. +Must share at least one common grouping variable with \code{data}. Default is \code{macro_indicators}. The result will be returned in the same class as the input.} -\item{macro_cols}{A character vector of column names in `macro_data` to use as denominators +\item{macro_cols}{A character vector of column names in \code{macro_data} to use as denominators for ratio calculations.} -\item{cols}{A character vector of column names in `data` to summarize.} +\item{cols}{A character vector of column names in \code{data} to summarize.} -\item{groups}{A character vector of column names in `data` to group by. -Typically includes country and date/year variables. Default is `c("country_code", "year")`.} +\item{groups}{A character vector of column names in \code{data} to group by. +Typically includes country and date/year variables. Default is \code{c("country_code", "year")}.} -\item{fns}{A character vector of summary functions to apply to `cols`. -Examples: `"sum"`, `"mean"`, `"median"`.} +\item{fns}{A character vector of summary functions to apply to \code{cols}. +Examples: \code{"sum"}, \code{"mean"}, \code{"median"}.} -\item{output}{Either `"long"` or `"wide"` (default `"long"`). -- `"long"` returns a tidy table with columns: group variables, `macro_var`, `summary_var`, `indicator`, and `value`. -- `"wide"` returns a table with one column per indicator and original macro/summary values.} +\item{output}{Either \code{"long"} or \code{"wide"} (default \code{"long"}). +\itemize{ +\item \code{"long"} returns a tidy table with columns: group variables, \code{macro_var}, \code{summary_var}, \code{indicator}, and \code{value}. +\item \code{"wide"} returns a table with one column per indicator and original macro/summary values. +}} } \value{ A dataset containing: -- In `"long"` format: group variables, `macro_var`, `macro_value`, `summary_var`, `summary_value`, `indicator`, and `value`. -- In `"wide"` format: group variables, one column per indicator (`summary_var` per `macro_var`), and original macro and summary values. - The returned object will match the class of the input `data`. +\itemize{ +\item In \code{"long"} format: group variables, \code{macro_var}, \code{macro_value}, \code{summary_var}, \code{summary_value}, \code{indicator}, and \code{value}. +\item In \code{"wide"} format: group variables, one column per indicator (\code{summary_var} per \code{macro_var}), and original macro and summary values. +The returned object will match the class of the input \code{data}. +} } \description{ -`compute_fastshare()` summarizes selected numeric columns by specified groups, +\code{compute_fastshare()} summarizes selected numeric columns by specified groups, merges the result with macroeconomic indicators, computes ratios of summarized variables per macro variable, and returns either a long or wide-format dataset. } \details{ The function works as follows: -1. Summarizes `cols` by `groups` using the functions in `fns`. -2. Automatically detects common join variables between `summary_dt` and `macro_data`. -3. Merges the summarized data with macro indicators. -4. Computes ratio indicators (`summary_value / macro_value`) for all combinations of summarized columns and macro columns. -5. Optionally reshapes the result into wide format with one column per indicator. +\enumerate{ +\item Summarizes \code{cols} by \code{groups} using the functions in \code{fns}. +\item Automatically detects common join variables between \code{summary_dt} and \code{macro_data}. +\item Merges the summarized data with macro indicators. +\item Computes ratio indicators (\code{summary_value / macro_value}) for all combinations of summarized columns and macro columns. +\item Optionally reshapes the result into wide format with one column per indicator. +} } \examples{ diff --git a/man/compute_fastsummary.Rd b/man/compute_fastsummary.Rd index 7ec5887..fac8765 100644 --- a/man/compute_fastsummary.Rd +++ b/man/compute_fastsummary.Rd @@ -14,48 +14,48 @@ compute_fastsummary( ) } \arguments{ -\item{data}{A `data.table`, `data.frame`, or tibble. The dataset on which to compute the summaries. -If not a `data.table`, it will be converted internally for computation. -The result will be returned in the same class as the input (unless `tbl = TRUE`).} +\item{data}{A \code{data.table}, \code{data.frame}, or tibble. The dataset on which to compute the summaries. +If not a \code{data.table}, it will be converted internally for computation. +The result will be returned in the same class as the input (unless \code{tbl = TRUE}).} \item{cols}{A character vector. Names of the columns to summarize.} \item{fns}{Optional. Either: \itemize{ - \item `NULL` (default): use all default functions defined by - `define_fns()`. - \item A character vector of function names matching `define_fns()`. - \item A list of functions or formulas, possibly mixed with character - names referring to `define_fns()`. +\item \code{NULL} (default): use all default functions defined by +\code{define_fns()}. +\item A character vector of function names matching \code{define_fns()}. +\item A list of functions or formulas, possibly mixed with character +names referring to \code{define_fns()}. }} \item{groups}{A character vector. Column(s) by which to group the data before computing the summary statistics.} -\item{output}{Character. Either `"long"` (default) or `"wide"` to specify -the output format. `"long"` returns one row per group per summary -statistic, `"wide"` returns one row per group with multiple columns for +\item{output}{Character. Either \code{"long"} (default) or \code{"wide"} to specify +the output format. \code{"long"} returns one row per group per summary +statistic, \code{"wide"} returns one row per group with multiple columns for each summary statistic.} -\item{tbl}{Logical. If `TRUE`, converts the result to a tibble (`tibble::as_tibble()`).} +\item{tbl}{Logical. If \code{TRUE}, converts the result to a tibble (\code{tibble::as_tibble()}).} } \value{ A dataset containing the summary statistics for the selected columns. - The output will be either long or wide depending on the `output` argument. - The returned object will match the class of the input `data` (unless `tbl = TRUE`). +The output will be either long or wide depending on the \code{output} argument. +The returned object will match the class of the input \code{data} (unless \code{tbl = TRUE}). } \description{ -`compute_fastsummary()` computes summary statistics for selected columns +\code{compute_fastsummary()} computes summary statistics for selected columns of a dataset, optionally grouped by one or more variables. It allows the user to specify a set of functions to apply, either from a predefined set or custom formulas/functions. } \details{ -The function constructs the summary calls efficiently using `bquote()` -and evaluates them within the `data.table` environment. This allows for +The function constructs the summary calls efficiently using \code{bquote()} +and evaluates them within the \code{data.table} environment. This allows for fast computation even with large datasets. Custom functions can be -supplied as formulas (e.g., `~ mean(.x, na.rm = TRUE)`) or as -pre-defined function names from `define_fns()`. +supplied as formulas (e.g., \code{~ mean(.x, na.rm = TRUE)}) or as +pre-defined function names from \code{define_fns()}. } \examples{ \dontrun{ diff --git a/man/compute_global_consistency.Rd b/man/compute_global_consistency.Rd index e7d7bf1..b861e0b 100644 --- a/man/compute_global_consistency.Rd +++ b/man/compute_global_consistency.Rd @@ -25,9 +25,9 @@ Compute the proportion of consistent records and values in a data frame. } \details{ Consistency is defined as the proportion of records and values that are consistent - across the dataset. A record is considered consistent if it has a unique identifier and all - its associated values are consistent. A value is considered consistent if it does not - contradict other values for the same record. +across the dataset. A record is considered consistent if it has a unique identifier and all +its associated values are consistent. A value is considered consistent if it does not +contradict other values for the same record. } \examples{ govhr::compute_global_consistency( diff --git a/man/compute_growth.Rd b/man/compute_growth.Rd index 6ce8ef9..37a321a 100644 --- a/man/compute_growth.Rd +++ b/man/compute_growth.Rd @@ -7,22 +7,22 @@ compute_growth(.data, group, measure_col = NULL) } \arguments{ -\item{.data}{A data frame with `ref_date` and the grouping column.} +\item{.data}{A data frame with \code{ref_date} and the grouping column.} \item{group}{Character string naming the grouping column.} \item{measure_col}{Character string naming the numeric column to sum, or -`NULL` to count rows.} +\code{NULL} to count rows.} } \value{ -A data frame with the grouping column and a `growth_rate` column - (percentage points, e.g. 12.5 for +12.5%). +A data frame with the grouping column and a \code{growth_rate} column +(percentage points, e.g. 12.5 for +12.5\%). } \description{ Filters to the first and last reference date within each group and computes -the percentage change from first `ref_date` to last `ref_date`. +the percentage change from first \code{ref_date} to last \code{ref_date}. } \details{ -When `measure_col` is `NULL`, counts rows per date-group cell (headcount). +When \code{measure_col} is \code{NULL}, counts rows per date-group cell (headcount). When a column name is supplied, sums that column (wage bill). } diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd index 2f43316..870c327 100644 --- a/man/compute_growth_decomposition.Rd +++ b/man/compute_growth_decomposition.Rd @@ -19,16 +19,16 @@ compute_growth_decomposition( } \value{ A data.table with headcount, compensation, wagebill, wagebill_lag, - the continuing-period decomposition (employment/compensation/interaction - effects), entry/exit effects, is_observed, and a `transition_type` label - for each row: "start" (panel's first period for this group -- left- - censored, no baseline available), "continuing" (observed this period - and last), "entry" (observed now, not last period -- a genuinely new - group_cols combination, or a reappearance after any length of absence), - or "exit" (not observed now -- covers both the period a group first - disappears, which carries the real dollar effect, and every subsequent - period it remains absent, which correctly carries a zero effect since - nothing further changed). +the continuing-period decomposition (employment/compensation/interaction +effects), entry/exit effects, is_observed, and a \code{transition_type} label +for each row: "start" (panel's first period for this group -- left- +censored, no baseline available), "continuing" (observed this period +and last), "entry" (observed now, not last period -- a genuinely new +group_cols combination, or a reappearance after any length of absence), +or "exit" (not observed now -- covers both the period a group first +disappears, which carries the real dollar effect, and every subsequent +period it remains absent, which correctly carries a zero effect since +nothing further changed). } \description{ Compute growth decomposition of wagebill diff --git a/man/compute_growth_summary.Rd b/man/compute_growth_summary.Rd index 6073003..393e030 100644 --- a/man/compute_growth_summary.Rd +++ b/man/compute_growth_summary.Rd @@ -7,18 +7,18 @@ compute_growth_summary(.data, group_col, measure_col = NULL) } \arguments{ -\item{.data}{Data frame containing `ref_date` and the grouping column.} +\item{.data}{Data frame containing \code{ref_date} and the grouping column.} \item{group_col}{Character. Column to group by.} -\item{measure_col}{Character. Numeric column to sum, or `NULL` to count rows.} +\item{measure_col}{Character. Numeric column to sum, or \code{NULL} to count rows.} } \value{ -A data frame with the grouping column and a `growth_rate` column, in - percentage points (e.g. `12.5` for +12.5%). +A data frame with the grouping column and a \code{growth_rate} column, in +percentage points (e.g. \code{12.5} for +12.5\%). } \description{ Keeps each group's first and last reference date and computes the percentage -change between them. Counts rows when `measure_col` is `NULL` (headcount) and +change between them. Counts rows when \code{measure_col} is \code{NULL} (headcount) and sums the column otherwise (wage bill). } diff --git a/man/compute_movement_cost.Rd b/man/compute_movement_cost.Rd index f46ff03..5f69591 100644 --- a/man/compute_movement_cost.Rd +++ b/man/compute_movement_cost.Rd @@ -24,13 +24,13 @@ compute_movement_cost( \item{event_type}{A character vector indicating which movement event(s) to include (e.g., "hire", "fire", "retirement"). Multiple types can be supplied to compute costs for each type.} -\item{start_date}{The start date for the classification period. Defaults to the minimum reference date found in `.data`.} +\item{start_date}{The start date for the classification period. Defaults to the minimum reference date found in \code{.data}.} -\item{end_date}{The end date for the classification period. Defaults to the maximum reference date found in `.data`.} +\item{end_date}{The end date for the classification period. Defaults to the maximum reference date found in \code{.data}.} \item{status_col}{The name of the column representing employment status (default is "employment_status").} -\item{freq}{The frequency of the reference dates. Defaults to a guess based on `.data`.} +\item{freq}{The frequency of the reference dates. Defaults to a guess based on \code{.data}.} \item{measure_col}{The name of the column containing the cost/measure to sum.} diff --git a/man/compute_pension_ratio.Rd b/man/compute_pension_ratio.Rd index 7eab7da..4e3b88e 100644 --- a/man/compute_pension_ratio.Rd +++ b/man/compute_pension_ratio.Rd @@ -17,35 +17,35 @@ compute_pension_ratio( } \arguments{ \item{personnel_dt}{A data.table (or tibble/data.frame) containing at minimum -the columns named in `id_col`, `status_col`, and `date_col`.} +the columns named in \code{id_col}, \code{status_col}, and \code{date_col}.} \item{contract_dt}{A data.table (or tibble/data.frame) containing at minimum -the columns named in `id_col`, `date_col`, and `salary_col`.} +the columns named in \code{id_col}, \code{date_col}, and \code{salary_col}.} \item{salary_col}{A single string naming the compensation column to use, -e.g. `"gross_salary_def"` (default), `"base_salary_lcu"`, etc.} +e.g. \code{"gross_salary_def"} (default), \code{"base_salary_lcu"}, etc.} \item{personnel_id_col}{A single string naming the personnel identifier column. -Defaults to `"personnel_id"`.} +Defaults to \code{"personnel_id"}.} \item{status_col}{A single string naming the employment status column inside -`personnel_dt`. - Defaults to `"employment_status"`.} +\code{personnel_dt}. +Defaults to \code{"employment_status"}.} \item{date_col}{A single string naming the snapshot/reference date column. -Defaults to `"ref_date"`.} +Defaults to \code{"ref_date"}.} -\item{pensioner_value}{A single string giving the value of `status_col` -that identifies a pensioner record. Defaults to `"pensioner"`.} +\item{pensioner_value}{A single string giving the value of \code{status_col} +that identifies a pensioner record. Defaults to \code{"pensioner"}.} \item{keep_vars}{A character vector of additional contract-level columns -to attach via `govhr::add_contract_to_event()`. Defaults to NULL} +to attach via \code{govhr::add_contract_to_event()}. Defaults to NULL} } \value{ A data.table with one row per retiring individual containing - the `id_col` identifier, `ref_date_active` (last active date), - `last_salary`, `ref_date_pension` (first pension date), - `first_pension`, and `replacement_rate`. +the \code{id_col} identifier, \code{ref_date_active} (last active date), +\code{last_salary}, \code{ref_date_pension} (first pension date), +\code{first_pension}, and \code{replacement_rate}. } \description{ For each individual who has retired, computes the ratio of their first @@ -56,19 +56,19 @@ The replacement rate is a standard diagnostic in public sector pension and workforce analysis, and it matters here for a few distinct reasons: \itemize{ - \item \strong{Fiscal sustainability}: Aggregated across occupation or - paygrade, replacement rates feed directly into pension liability - projections. - \item \strong{Retirement incentive / take-up behavior}: Low replacement - rates help explain deferred retirement, relevant to calibrating - \code{ANNUAL_TAKE_UP} rather than assuming 100\% take-up at - eligibility. - \item \strong{Equity diagnostics}: Comparing rates across paygrade, - occupation, or establishment can surface structural inequities in - how the pension formula interacts with career trajectories. - \item \strong{Policy reform simulation}: Because the function is - column-name agnostic, it can be re-run under counterfactual salary - or pension formulas or against differently structured client - datasets without code changes. +\item \strong{Fiscal sustainability}: Aggregated across occupation or +paygrade, replacement rates feed directly into pension liability +projections. +\item \strong{Retirement incentive / take-up behavior}: Low replacement +rates help explain deferred retirement, relevant to calibrating +\code{ANNUAL_TAKE_UP} rather than assuming 100\\% take-up at +eligibility. +\item \strong{Equity diagnostics}: Comparing rates across paygrade, +occupation, or establishment can surface structural inequities in +how the pension formula interacts with career trajectories. +\item \strong{Policy reform simulation}: Because the function is +column-name agnostic, it can be re-run under counterfactual salary +or pension formulas or against differently structured client +datasets without code changes. } } diff --git a/man/compute_percentile.Rd b/man/compute_percentile.Rd index 09c1924..8394a6e 100644 --- a/man/compute_percentile.Rd +++ b/man/compute_percentile.Rd @@ -13,23 +13,23 @@ compute_percentile( ) } \arguments{ -\item{.data}{Data frame containing a `ref_date` column and the measure.} +\item{.data}{Data frame containing a \code{ref_date} column and the measure.} -\item{group_col}{Character. Column to group by, or `NULL` for no grouping.} +\item{group_col}{Character. Column to group by, or \code{NULL} for no grouping.} \item{measure_col}{Character. Numeric column to bin.} -\item{binwidth}{Numeric. Width of each bin. Default `1`.} +\item{binwidth}{Numeric. Width of each bin. Default \code{1}.} \item{latest_measure}{Logical. Restrict to the latest reference date. Default -`FALSE`.} +\code{FALSE}.} } \value{ -A data frame with the grouping column, `bin`, `count`, `pct` and - `cum_pct`. +A data frame with the grouping column, \code{bin}, \code{count}, \code{pct} and +\code{cum_pct}. } \description{ -Bins `measure_col` at a fixed width and reports each bin's share and +Bins \code{measure_col} at a fixed width and reports each bin's share and cumulative share of observations, filling empty bins with zero so the distribution is gap-free. } diff --git a/man/compute_service_table.Rd b/man/compute_service_table.Rd index 76bd546..a79ec02 100644 --- a/man/compute_service_table.Rd +++ b/man/compute_service_table.Rd @@ -55,20 +55,20 @@ for noise reduction on strata that have no gap at all.} } \value{ A data.table with one row per age / \code{group_cols}: - \describe{ - \item{age_col, group_cols}{As supplied.} - \item{px}{Probability of remaining active from age x to x+1.} - \item{lx}{Survivors at age x, out of \code{radix} at the youngest age: - \eqn{l(x) = radix \prod_{y= 1) - \item Allowance validity (non-negative or missing) +\item Column existence (contract_id, ref_date, gross_salary_lcu, base_salary_lcu, allowance_lcu) +\item Contract ID uniqueness (contract_id + ref_date combination is unique) +\item Personnel assignment uniqueness (contract_id + personnel_id + ref_date combination is unique) +\item Reference date validity +\item Working hours reasonableness (1-168 hours per week) +\item Contract status consistency (start_date <= ref_date) +\item Wage bill composition (gross = base + allowance) +\item Wage bill hierarchy (net <= gross, base <= gross) +\item Positive salary values (gross, base, net >= 1) +\item Allowance validity (non-negative or missing) } These rules can be programmatically converted to \code{validate::validator()} objects diff --git a/man/convert_constant_ppp.Rd b/man/convert_constant_ppp.Rd index c9d4687..d3c7f41 100644 --- a/man/convert_constant_ppp.Rd +++ b/man/convert_constant_ppp.Rd @@ -12,7 +12,7 @@ convert_constant_ppp(data, cols) \item{cols}{A character vector with column name to convert to constant PPP in international 2021 dollars.} } \value{ -`data_out` augmented with columns converted to international 2021 dollars. +\code{data_out} augmented with columns converted to international 2021 dollars. } \description{ Convert nominal wages (LCU at survey-year prices) into real wages expressed @@ -21,7 +21,7 @@ in 2021 PPP international dollars using: } \details{ #' @details -CPI data is sourced from [govhr::macro_indicators], which must contain +CPI data is sourced from \link{macro_indicators}, which must contain columns \code{country_code}, \code{year}, and \code{cpi}. } \examples{ diff --git a/man/convert_data.Rd b/man/convert_data.Rd index 18b5399..fa23580 100644 --- a/man/convert_data.Rd +++ b/man/convert_data.Rd @@ -7,7 +7,7 @@ convert_data(data, data_original) } \arguments{ -\item{data}{A dataset to be converted. Typically a `data.table` or `data.frame`.} +\item{data}{A dataset to be converted. Typically a \code{data.table} or \code{data.frame}.} \item{data_original}{The original dataset whose class should be matched.} } @@ -18,16 +18,16 @@ The input \code{data} converted to the same class as \code{data_original}. Converts a dataset to have the same class as another reference dataset. This is useful for ensuring consistent output formats when performing operations that temporarily convert data structures (e.g., between -`data.table`, `data.frame`, or `tibble`). +\code{data.table}, \code{data.frame}, or \code{tibble}). } \details{ The function checks the class of \code{data_original} in the following order: \itemize{ - \item If it is a tibble (`tbl_df`), \code{data} is converted using - \code{tibble::as_tibble()}. - \item If it is a base data frame but not a data.table, \code{data} is converted - using \code{as.data.frame()}. - \item Otherwise, \code{data} is returned unchanged (e.g., for data.table input). +\item If it is a tibble (\code{tbl_df}), \code{data} is converted using +\code{tibble::as_tibble()}. +\item If it is a base data frame but not a data.table, \code{data} is converted +using \code{as.data.frame()}. +\item Otherwise, \code{data} is returned unchanged (e.g., for data.table input). } } \examples{ diff --git a/man/count_entity.Rd b/man/count_entity.Rd index db45e39..5307c35 100644 --- a/man/count_entity.Rd +++ b/man/count_entity.Rd @@ -11,10 +11,10 @@ count_entity(.data, id_col, group_cols = NULL) \item{id_col}{Character. Column name of the unique identifier for the entity.} -\item{group_cols}{Character vector of column names to group by, or `NULL` for no grouping.} +\item{group_cols}{Character vector of column names to group by, or \code{NULL} for no grouping.} } \value{ -A data frame with the grouping columns and a `count` column representing the number of unique entities in each group. +A data frame with the grouping columns and a \code{count} column representing the number of unique entities in each group. } \description{ Count Unique Entities by Group diff --git a/man/count_unique.Rd b/man/count_unique.Rd index 60a85e6..d51a2ed 100644 --- a/man/count_unique.Rd +++ b/man/count_unique.Rd @@ -10,7 +10,7 @@ count_unique(x) \item{x}{A vector of any type (numeric, character, factor, etc.)} } \value{ -An integer representing the count of unique non-missing values in `x`. +An integer representing the count of unique non-missing values in \code{x}. } \description{ Returns the number of unique values in a vector, excluding missing values (NA). diff --git a/man/countryclass.Rd b/man/countryclass.Rd index 50612e5..5cacdeb 100644 --- a/man/countryclass.Rd +++ b/man/countryclass.Rd @@ -5,18 +5,20 @@ \alias{countryclass} \title{World Bank Country and Lending Groups} \format{ -## `countryclass` +\subsection{\code{countryclass}}{ + A data frame with 267 rows and 4 columns: \describe{ - \item{country_code}{World Bank country code} - \item{economy}{Country name} - \item{region}{World Bank region} - \item{income_group}{World Bank income classification} - ... +\item{country_code}{World Bank country code} +\item{economy}{Country name} +\item{region}{World Bank region} +\item{income_group}{World Bank income classification} +... +} } } \source{ - +\url{https://ddh-openapi.worldbank.org/resources/DR0095333/download/} } \usage{ countryclass diff --git a/man/cp_ratio.Rd b/man/cp_ratio.Rd index 26fde14..e82463c 100644 --- a/man/cp_ratio.Rd +++ b/man/cp_ratio.Rd @@ -9,18 +9,18 @@ cp_ratio(x, upper = 0.9, lower = 0.1, na.rm = TRUE) \arguments{ \item{x}{A numeric vector of values (e.g., wages or salaries).} -\item{upper}{Numeric; the upper percentile to compute (default is `0.9` for +\item{upper}{Numeric; the upper percentile to compute (default is \code{0.9} for the 90th percentile).} -\item{lower}{Numeric; the lower percentile to compute (default is `0.1` for +\item{lower}{Numeric; the lower percentile to compute (default is \code{0.1} for the 10th percentile).} -\item{na.rm}{Logical; if `TRUE`, missing values (`NA`) are removed before -computation. Defaults to `TRUE`.} +\item{na.rm}{Logical; if \code{TRUE}, missing values (\code{NA}) are removed before +computation. Defaults to \code{TRUE}.} } \value{ A numeric value representing the ratio of the specified upper to -lower percentile values. Returns `NA_real_` if computation is not possible +lower percentile values. Returns \code{NA_real_} if computation is not possible (e.g., due to missing data or zero denominator). } \description{ @@ -30,8 +30,8 @@ This provides a measure of wage inequality or spread within a group. } \details{ The function computes the specified upper and lower quantiles and returns -their ratio (`upper / lower`). If either quantile is `NA` or the lower -quantile is zero, the function returns `NA_real_`. +their ratio (\code{upper / lower}). If either quantile is \code{NA} or the lower +quantile is zero, the function returns \code{NA_real_}. } \examples{ wages <- c(1000, 1200, 900, 3000, 5000, NA) diff --git a/man/cv.Rd b/man/cv.Rd index b1c7bfb..9582723 100644 --- a/man/cv.Rd +++ b/man/cv.Rd @@ -9,12 +9,12 @@ cv(x, na.rm = TRUE) \arguments{ \item{x}{A numeric vector of values.} -\item{na.rm}{Logical; if `TRUE`, missing values (`NA`) are removed before -computation. Defaults to `TRUE`.} +\item{na.rm}{Logical; if \code{TRUE}, missing values (\code{NA}) are removed before +computation. Defaults to \code{TRUE}.} } \value{ A numeric value representing the coefficient of variation (CV). -Returns `NA_real_` if the computation is not possible (e.g., all values are +Returns \code{NA_real_} if the computation is not possible (e.g., all values are missing or the mean is zero). } \description{ @@ -26,7 +26,7 @@ or groups with different scales. \details{ The function safely handles missing values and cases where the mean is zero (to avoid division by zero). If the input vector is empty or the mean equals -zero, the function returns `NA_real_`. +zero, the function returns \code{NA_real_}. } \examples{ x <- c(10, 12, 8, 15, NA) diff --git a/man/dedup_values.Rd b/man/dedup_values.Rd index 286bd4c..d676533 100644 --- a/man/dedup_values.Rd +++ b/man/dedup_values.Rd @@ -32,9 +32,9 @@ containing the deduplicated \code{value_col}. This function deduplicates values within groups defined by a combination of identifier and date columns. It provides three strategies: \enumerate{ - \item \code{"mode"}: returns the most frequent (modal) value in the group. - \item \code{"first"}: returns the first value in the group, even if \code{NA}. - \item \code{"first_nonmissing"}: returns the first non-missing value in the group. +\item \code{"mode"}: returns the most frequent (modal) value in the group. +\item \code{"first"}: returns the first value in the group, even if \code{NA}. +\item \code{"first_nonmissing"}: returns the first non-missing value in the group. } } \details{ diff --git a/man/define_fns.Rd b/man/define_fns.Rd index 49b0f6a..64e4db7 100644 --- a/man/define_fns.Rd +++ b/man/define_fns.Rd @@ -6,23 +6,23 @@ \format{ The list includes the following summary functions: \describe{ - \item{sum}{Sum of values, ignoring `NA`s.} - \item{mean}{Arithmetic mean.} - \item{median}{Median value.} - \item{cv}{Coefficient of variation (requires a `cv()` helper).} - \item{cp_ratio}{Custom "cp ratio" statistic (requires a `cp_ratio()` helper).} - \item{var}{Sample variance.} - \item{iqr}{Interquartile range, computed as `diff(range(.x))`.} - \item{min}{Minimum value.} - \item{max}{Maximum value.} - \item{count}{Number of observations.} - \item{count_unique}{Number of distinct (unique) values.} - \item{prop_na}{Proportion of missing (`NA`) values.} - \item{prop_zero}{Proportion of zero values among non-missing data.} - \item{p25}{25th percentile (first quartile).} - \item{p75}{75th percentile (third quartile).} - \item{p90}{90th percentile.} - \item{sd}{Standard deviation.} +\item{sum}{Sum of values, ignoring \code{NA}s.} +\item{mean}{Arithmetic mean.} +\item{median}{Median value.} +\item{cv}{Coefficient of variation (requires a \code{cv()} helper).} +\item{cp_ratio}{Custom "cp ratio" statistic (requires a \code{cp_ratio()} helper).} +\item{var}{Sample variance.} +\item{iqr}{Interquartile range, computed as \code{diff(range(.x))}.} +\item{min}{Minimum value.} +\item{max}{Maximum value.} +\item{count}{Number of observations.} +\item{count_unique}{Number of distinct (unique) values.} +\item{prop_na}{Proportion of missing (\code{NA}) values.} +\item{prop_zero}{Proportion of zero values among non-missing data.} +\item{p25}{25th percentile (first quartile).} +\item{p75}{75th percentile (third quartile).} +\item{p90}{90th percentile.} +\item{sd}{Standard deviation.} } } \usage{ @@ -30,14 +30,14 @@ define_fns() } \value{ A named list of formula functions suitable for use with -`dplyr::across()`, where each element name is the function label +\code{dplyr::across()}, where each element name is the function label and the value is a one-sided formula that computes the summary. } \description{ Creates and returns a named list of default summary functions used -throughout the analytics framework (e.g., by [compute_fastsummary()]). -Each function is defined as a purrr-style formula (`~`) that operates -on a vector `.x` and returns a scalar summary statistic. The returned +throughout the analytics framework (e.g., by \code{\link[=compute_fastsummary]{compute_fastsummary()}}). +Each function is defined as a purrr-style formula (\code{~}) that operates +on a vector \code{.x} and returns a scalar summary statistic. The returned list can be supplied directly to a summarization pipeline or extended by users with custom functions. } @@ -46,7 +46,7 @@ The returned list contains commonly used descriptive statistics for numeric vectors, including measures of central tendency, dispersion, distribution, and data quality (e.g., share of missing or zero values). Users can extend or override the defaults by appending their own -named formulas before passing to [compute_fastsummary()]. +named formulas before passing to \code{\link[=compute_fastsummary]{compute_fastsummary()}}. } \examples{ # Load the default function set @@ -75,7 +75,7 @@ compute_fastsummary( } \seealso{ -[compute_fastsummary()], [compute_fastshare()] +\code{\link[=compute_fastsummary]{compute_fastsummary()}}, \code{\link[=compute_fastshare]{compute_fastshare()}} } \keyword{internal} \keyword{summarization} diff --git a/man/deflate_to_real.Rd b/man/deflate_to_real.Rd index d6c07b5..252bfe2 100644 --- a/man/deflate_to_real.Rd +++ b/man/deflate_to_real.Rd @@ -20,15 +20,15 @@ across all rows, or a character column of ISO3 country codes.} } \value{ A numeric vector of the same length as \code{col}, expressed in - constant \code{base_year} LCU prices. Returns \code{NA} for any row where - CPI data is missing for the given country/year combination. +constant \code{base_year} LCU prices. Returns \code{NA} for any row where +CPI data is missing for the given country/year combination. } \description{ Convert nominal wages (LCU prices) into real wages expressed in constant LCU prices of a specified base year using: \deqn{\text{real} = \text{nominal} \times \frac{\text{CPI}_{base}}{\text{CPI}_{ref}}} } \details{ -CPI data is sourced from [govhr::macro_indicators], which must contain +CPI data is sourced from \link{macro_indicators}, which must contain columns \code{country_code}, \code{year}, and \code{cpi}. } \examples{ diff --git a/man/detect_career_transition.Rd b/man/detect_career_transition.Rd index 2158547..bb05a69 100644 --- a/man/detect_career_transition.Rd +++ b/man/detect_career_transition.Rd @@ -12,31 +12,31 @@ detect_career_transition( ) } \arguments{ -\item{.data}{Data frame containing a `ref_date` column, the identifier and +\item{.data}{Data frame containing a \code{ref_date} column, the identifier and the grouping columns.} \item{id_col}{Character. Column identifying the entity whose career is -tracked. Default `"contract_id"`.} +tracked. Default \code{"contract_id"}.} \item{group_cols}{Character vector of columns defining the career position (e.g. paygrade, department). Multiple columns are pasted into one label.} \item{return_all}{Logical. Keep terminal spells, which have no destination -and so carry `NA` in both `to` and `ref_date`. Default `FALSE`.} +and so carry \code{NA} in both \code{to} and \code{ref_date}. Default \code{FALSE}.} } \value{ -A data table with the identifier, `from`, `to`, `from_date` and - `ref_date`. +A data table with the identifier, \code{from}, \code{to}, \code{from_date} and +\code{ref_date}. } \description{ Collapses each entity's history into spells of consecutive periods in the same group, then pairs each spell with the one that follows it. A row is -dated by `ref_date`, the period in which the entity is first observed in the -destination group, so a transition is counted when it happens. `from_date` +dated by \code{ref_date}, the period in which the entity is first observed in the +destination group, so a transition is counted when it happens. \code{from_date} records when the origin spell began. } \details{ -Records must be uniquely identified by `id_col` and `ref_date`. An entity +Records must be uniquely identified by \code{id_col} and \code{ref_date}. An entity holding more than one record in the same period has no well-defined position, so every record for that entity is dropped with a warning reporting how many. } diff --git a/man/detect_inconsistent_cols.Rd b/man/detect_inconsistent_cols.Rd index 392013b..658f34f 100644 --- a/man/detect_inconsistent_cols.Rd +++ b/man/detect_inconsistent_cols.Rd @@ -12,7 +12,7 @@ detect_inconsistent_cols(data, inconsistent_cols) \item{inconsistent_cols}{A character vector of column names considered inconsistent.} } \value{ -A logical value: `TRUE` if any inconsistent columns are present in the data frame, `FALSE` otherwise. +A logical value: \code{TRUE} if any inconsistent columns are present in the data frame, \code{FALSE} otherwise. } \description{ This function checks whether any of the specified column names appear in a given data frame. diff --git a/man/detect_personnel_event.Rd b/man/detect_personnel_event.Rd index 405db2f..04834e0 100644 --- a/man/detect_personnel_event.Rd +++ b/man/detect_personnel_event.Rd @@ -16,23 +16,25 @@ detect_personnel_event( } \arguments{ \item{data}{A data.table or data.frame containing at least the columns: -- `personnel_id`: Unique identifier for personnel. -- `ref_date`: Reference date (must be coercible to Date). -- `employment_status`: Personnel status (e.g., "active", "pensioner", "inactive").} +\itemize{ +\item \code{personnel_id}: Unique identifier for personnel. +\item \code{ref_date}: Reference date (must be coercible to Date). +\item \code{employment_status}: Personnel status (e.g., "active", "pensioner", "inactive"). +}} -\item{id_col}{Character. Name of the identifier column (e.g., `"personnel_id"`).} +\item{id_col}{Character. Name of the identifier column (e.g., \code{"personnel_id"}).} -\item{event_type}{Character. Either `"hire"` or `"fire"`, controlling which event to detect.} +\item{event_type}{Character. Either \code{"hire"} or \code{"fire"}, controlling which event to detect.} \item{start_date}{Optional start date for the full date sequence -(default: `"2007-09-01"`).} +(default: \code{"2007-09-01"}).} \item{end_date}{Optional end date for the full date sequence -(default: `"2018-01-01"`).} +(default: \code{"2018-01-01"}).} -\item{status_col}{a column within `data` object for the employment status of personnel} +\item{status_col}{a column within \code{data} object for the employment status of personnel} -\item{freq}{Frequency for the sequence of dates (default: `"year"`). +\item{freq}{Frequency for the sequence of dates (default: \code{"year"}). Can be any valid value for \code{seq.Date(by = ...)}.} } \value{ diff --git a/man/detect_reallocation.Rd b/man/detect_reallocation.Rd index 41a8cdc..1e6f28a 100644 --- a/man/detect_reallocation.Rd +++ b/man/detect_reallocation.Rd @@ -8,19 +8,23 @@ detect_reallocation(data, personnel_hire) } \arguments{ \item{data}{A data.frame or tibble containing at least the columns: -- `personnel_id`: Unique personnel identifier. -- `ref_date`: Reference date (Date or convertible to Date). -- `est_id`: Establishment ID.} +\itemize{ +\item \code{personnel_id}: Unique personnel identifier. +\item \code{ref_date}: Reference date (Date or convertible to Date). +\item \code{est_id}: Establishment ID. +}} \item{personnel_hire}{A data.frame or tibble containing hire events with columns -`personnel_id` and `ref_date`.} +\code{personnel_id} and \code{ref_date}.} } \value{ A tibble with columns: - - `personnel_id` - - `ref_date` - - `est_id_nested`: List-column of establishment IDs for that personnel and date. - - `type_event`: `"reallocation"` or `"no reallocation"`. +\itemize{ +\item \code{personnel_id} +\item \code{ref_date} +\item \code{est_id_nested}: List-column of establishment IDs for that personnel and date. +\item \code{type_event}: \code{"reallocation"} or \code{"no reallocation"}. +} } \description{ Identifies reallocation events when a personnel's set of establishments changes diff --git a/man/detect_retirement.Rd b/man/detect_retirement.Rd index 9acdc56..2e3da11 100644 --- a/man/detect_retirement.Rd +++ b/man/detect_retirement.Rd @@ -7,10 +7,10 @@ detect_retirement(data) } \arguments{ -\item{data}{A data.frame or data.table with columns `personnel_id`, `ref_date`, and `status`.} +\item{data}{A data.frame or data.table with columns \code{personnel_id}, \code{ref_date}, and \code{status}.} } \value{ -A data.table with `personnel_id`, `ref_date`, and `type_event = "retire"`. +A data.table with \code{personnel_id}, \code{ref_date}, and \code{type_event = "retire"}. } \description{ Identifies personnel who retired, i.e., whose status changed from "active" to "inactive". diff --git a/man/dictionary.Rd b/man/dictionary.Rd index 2d52a29..ad31de0 100644 --- a/man/dictionary.Rd +++ b/man/dictionary.Rd @@ -7,12 +7,12 @@ \format{ A tibble with 50 rows and 6 variables: \describe{ - \item{variable_name}{Character. Human-readable name of the standardized variable.} - \item{variable_id}{Character. Standardized machine-readable variable identifier.} - \item{variable_description}{Character. Definition and intended use of the variable.} - \item{variable_class}{Character. Expected R class for the variable.} - \item{module}{Character. Harmonization module to which the variable belongs.} - \item{values}{Character. Expected values, formats, coding schemes, or controlled vocabularies associated with the variable.} +\item{variable_name}{Character. Human-readable name of the standardized variable.} +\item{variable_id}{Character. Standardized machine-readable variable identifier.} +\item{variable_description}{Character. Definition and intended use of the variable.} +\item{variable_class}{Character. Expected R class for the variable.} +\item{module}{Character. Harmonization module to which the variable belongs.} +\item{values}{Character. Expected values, formats, coding schemes, or controlled vocabularies associated with the variable.} } } \source{ @@ -42,22 +42,22 @@ schema, enabling cross-country comparability and reproducible analytics. The dictionary contains the following fields: \itemize{ - \item \strong{variable_name} -- Human-readable name of the standardized variable. - \item \strong{variable_id} -- Machine-readable variable identifier used in harmonized datasets. - \item \strong{variable_description} -- Definition and intended use of the variable. - \item \strong{variable_class} -- Expected R data type for the variable. - \item \strong{module} -- Harmonization module to which the variable belongs (e.g., Establishment, Personnel, or Contract). - \item \strong{values} -- Expected values, formats, coding schemes, or controlled vocabularies associated with the variable. +\item \strong{variable_name} -- Human-readable name of the standardized variable. +\item \strong{variable_id} -- Machine-readable variable identifier used in harmonized datasets. +\item \strong{variable_description} -- Definition and intended use of the variable. +\item \strong{variable_class} -- Expected R data type for the variable. +\item \strong{module} -- Harmonization module to which the variable belongs (e.g., Establishment, Personnel, or Contract). +\item \strong{values} -- Expected values, formats, coding schemes, or controlled vocabularies associated with the variable. } This dictionary is designed to support: \enumerate{ - \item Validation of required variables and schema compliance; - \item Standardized renaming of source variables; - \item Data type coercion and consistency checks; - \item Generation of harmonized module-specific outputs; - \item Documentation and governance of the GovHR data standard. +\item Validation of required variables and schema compliance; +\item Standardized renaming of source variables; +\item Data type coercion and consistency checks; +\item Generation of harmonized module-specific outputs; +\item Documentation and governance of the GovHR data standard. } } \section{Dictionary Version}{ @@ -71,7 +71,7 @@ harmonization dictionary. \section{Version History}{ \itemize{ - \item \strong{Version 1.0.0} (2026-06-25): Initial release. +\item \strong{Version 1.0.0} (2026-06-25): Initial release. } } diff --git a/man/dot-compute_decrement_pair.Rd b/man/dot-compute_decrement_pair.Rd index d079597..ef6cf2b 100644 --- a/man/dot-compute_decrement_pair.Rd +++ b/man/dot-compute_decrement_pair.Rd @@ -45,24 +45,24 @@ service type) to stratify exposure and outcome counts by, alongside } \value{ A \code{data.table} with one row per - \code{(age_col, group_cols, status_col)} combination observed in the T0 - exposure cohort. Columns: - \describe{ - \item{age_col}{Integer. T0 age (column name taken from \code{age_col}).} - \item{group_cols}{The stratifying columns, taken directly from T0.} - \item{status_col}{Character. The T1 outcome type (column name taken - from \code{status_col}), e.g. \code{"active"}, \code{"pensioner"}, - \code{"non-retirement-exit"}.} - \item{pop}{Integer. Number of active persons at T0 in this age/group - (the exposure, and the denominator for \code{decrement_rate}).} - \item{exits}{Integer. Number of cohort members in this age/group who - had this outcome at T1. \code{0L} where the combination had no - occurrences.} - \item{decrement_rate}{Numeric. \eqn{exits / pop} for this - age/group/outcome combination.} - \item{t0_date}{Date. Reference date of the T0 snapshot.} - \item{t1_date}{Date. Reference date of the T1 snapshot.} - } +\code{(age_col, group_cols, status_col)} combination observed in the T0 +exposure cohort. Columns: +\describe{ +\item{age_col}{Integer. T0 age (column name taken from \code{age_col}).} +\item{group_cols}{The stratifying columns, taken directly from T0.} +\item{status_col}{Character. The T1 outcome type (column name taken +from \code{status_col}), e.g. \code{"active"}, \code{"pensioner"}, +\code{"non-retirement-exit"}.} +\item{pop}{Integer. Number of active persons at T0 in this age/group +(the exposure, and the denominator for \code{decrement_rate}).} +\item{exits}{Integer. Number of cohort members in this age/group who +had this outcome at T1. \code{0L} where the combination had no +occurrences.} +\item{decrement_rate}{Numeric. \eqn{exits / pop} for this +age/group/outcome combination.} +\item{t0_date}{Date. Reference date of the T0 snapshot.} +\item{t1_date}{Date. Reference date of the T1 snapshot.} +} } \description{ Internal workhorse intended to be called by \code{roll_snapshot_pairs()} @@ -72,30 +72,30 @@ consecutive panel snapshots (\code{snap_t0} at T0 and \code{snap_t1} at T1), this function: \enumerate{ - \item Defines the exposure cohort as every person with - \code{status_col == "active"} at T0, and tabulates exposure by - \code{age_col}/\code{group_cols} using each person's T0 age and - group -- ages are never shifted, since individuals are tracked by - identity rather than aggregated independently per snapshot. - \item Looks up each cohort member's \code{status_col} value at T1 via a - native data.table join (\code{x[i, on =]}) on - \code{personnel_id_col}. Anyone absent from \code{snap_t1} - altogether (i.e. dropped out of the panel) is assigned the - synthetic outcome \code{"non-retirement-exit"}. - \item Builds the outcome vocabulary from whatever \code{status_col} - values actually appear in \code{snap_t1} (e.g. \code{"active"}, - \code{"pensioner"}, \code{"deceased"}, ...), unioned with - \code{"non-retirement-exit"}, which is always included since it is - synthesized rather than drawn from the data. No status values are - hardcoded. - \item Counts, per \code{age_col}/\code{group_cols}/\code{status_col} - combination, how many cohort members ended up with each outcome at - T1 -- including \code{"active"} (i.e. stayed), so the resulting - rates for a given age/group sum to 1 across all outcome types. - \item Expands the result to a complete grid of every exposure - age/group crossed with every outcome type, filling \code{exits = 0} - where a combination had no occurrences, so no age/group ever - collapses into an ambiguous \code{NA}-status row. +\item Defines the exposure cohort as every person with +\code{status_col == "active"} at T0, and tabulates exposure by +\code{age_col}/\code{group_cols} using each person's T0 age and +group -- ages are never shifted, since individuals are tracked by +identity rather than aggregated independently per snapshot. +\item Looks up each cohort member's \code{status_col} value at T1 via a +native data.table join (\code{x[i, on =]}) on +\code{personnel_id_col}. Anyone absent from \code{snap_t1} +altogether (i.e. dropped out of the panel) is assigned the +synthetic outcome \code{"non-retirement-exit"}. +\item Builds the outcome vocabulary from whatever \code{status_col} +values actually appear in \code{snap_t1} (e.g. \code{"active"}, +\code{"pensioner"}, \code{"deceased"}, ...), unioned with +\code{"non-retirement-exit"}, which is always included since it is +synthesized rather than drawn from the data. No status values are +hardcoded. +\item Counts, per \code{age_col}/\code{group_cols}/\code{status_col} +combination, how many cohort members ended up with each outcome at +T1 -- including \code{"active"} (i.e. stayed), so the resulting +rates for a given age/group sum to 1 across all outcome types. +\item Expands the result to a complete grid of every exposure +age/group crossed with every outcome type, filling \code{exits = 0} +where a combination had no occurrences, so no age/group ever +collapses into an ambiguous \code{NA}-status row. } } \seealso{ diff --git a/man/dot-compute_transition_pair.Rd b/man/dot-compute_transition_pair.Rd index 9ab4205..03e1c6e 100644 --- a/man/dot-compute_transition_pair.Rd +++ b/man/dot-compute_transition_pair.Rd @@ -53,38 +53,38 @@ salary summary columns are appended to the output. Default: \code{NULL}.} } \value{ A \code{data.table} with one row per \code{(from_group, to_group)} - pair observed in this period, or \code{NULL} if either snapshot contains - no active contracts after filtering. Columns: - \describe{ - \item{from_group}{Character. Concatenated \code{group_cols} state at T0.} - \item{to_group}{Character. Concatenated \code{group_cols} state at T1. - \code{NA} for T0 groups where no movers were observed (these rows - carry \code{n_moves = 0L} and are filtered downstream).} - \item{n_moves}{Integer. Number of persons who moved from - \code{from_group} to \code{to_group} between T0 and T1. Set to - \code{0L} for T0 groups with no observed movers.} - \item{n_pop}{Integer. Number of active persons in \code{from_group} - at T0 (the denominator for \code{period_prob}).} - \item{period_prob}{Numeric. Transition probability for this pair in - this period: \eqn{n\_moves / n\_pop}.} - \item{t0_date}{Date. Reference date of the T0 snapshot.} - \item{t1_date}{Date. Reference date of the T1 snapshot.} - } - When \code{salary_col} is not \code{NULL}, the following columns are - prepended (computed over movers only, i.e., persons present in both - snapshots): - \describe{ - \item{mean_salary_t0}{Numeric. Mean of per-person salary sums in - \code{from_group} at T0.} - \item{mean_salary_t1}{Numeric. Mean of per-person salary sums in - \code{to_group} at T1.} - \item{mean_salary_change}{Numeric. Mean absolute salary change - (T1 sum minus T0 sum) across movers.} - \item{median_salary_change}{Numeric. Median absolute salary change - across movers.} - \item{mean_salary_pct_change}{Numeric. Mean percentage salary change - (\eqn{(salary_{T1} - salary_{T0}) / salary_{T0}}) across movers.} - } +pair observed in this period, or \code{NULL} if either snapshot contains +no active contracts after filtering. Columns: +\describe{ +\item{from_group}{Character. Concatenated \code{group_cols} state at T0.} +\item{to_group}{Character. Concatenated \code{group_cols} state at T1. +\code{NA} for T0 groups where no movers were observed (these rows +carry \code{n_moves = 0L} and are filtered downstream).} +\item{n_moves}{Integer. Number of persons who moved from +\code{from_group} to \code{to_group} between T0 and T1. Set to +\code{0L} for T0 groups with no observed movers.} +\item{n_pop}{Integer. Number of active persons in \code{from_group} +at T0 (the denominator for \code{period_prob}).} +\item{period_prob}{Numeric. Transition probability for this pair in +this period: \eqn{n\_moves / n\_pop}.} +\item{t0_date}{Date. Reference date of the T0 snapshot.} +\item{t1_date}{Date. Reference date of the T1 snapshot.} +} +When \code{salary_col} is not \code{NULL}, the following columns are +prepended (computed over movers only, i.e., persons present in both +snapshots): +\describe{ +\item{mean_salary_t0}{Numeric. Mean of per-person salary sums in +\code{from_group} at T0.} +\item{mean_salary_t1}{Numeric. Mean of per-person salary sums in +\code{to_group} at T1.} +\item{mean_salary_change}{Numeric. Mean absolute salary change +(T1 sum minus T0 sum) across movers.} +\item{median_salary_change}{Numeric. Median absolute salary change +across movers.} +\item{mean_salary_pct_change}{Numeric. Mean percentage salary change +(\eqn{(salary_{T1} - salary_{T0}) / salary_{T0}}) across movers.} +} } \description{ Internal workhorse called by \code{roll_snapshot_pairs()} inside @@ -92,24 +92,24 @@ Internal workhorse called by \code{roll_snapshot_pairs()} inside (\code{snap_t0} at T0 and \code{snap_t1} at T1), this function: \enumerate{ - \item Filters each snapshot to \emph{active} contracts, defined as records - where \code{start_date_col <= ref_date}, \code{end_date_col} >= \code{ref_date} - (or \code{end_date} is \code{NA}), and \code{contract_type_col != "inactive"}. - \item Constructs a state label per person at T0 (\code{from_group}) and T1 - (\code{to_group}) by concatenating \code{group_cols} values with - \code{"||"} as separator. When \code{salary_col} is supplied, salary - is first summed within each person-group combination via - \code{compute_fastsummary()} to handle multi-contract persons before - state labels are formed. - \item Joins T0 and T1 states on person ID (inner join), so persons who - exit between T0 and T1 are excluded from transition counts. - \item Counts transitions per \code{(from_group, to_group)} pair and - divides by the T0 population in \code{from_group} to obtain a - period-specific transition probability. Groups with zero movers are - retained with \code{n_moves = 0L}. - \item When \code{salary_col} is supplied, computes salary summary - statistics \emph{over movers only} (persons who appear in both - snapshots), not over the full T0 population. +\item Filters each snapshot to \emph{active} contracts, defined as records +where \code{start_date_col <= ref_date}, \code{end_date_col} >= \code{ref_date} +(or \code{end_date} is \code{NA}), and \code{contract_type_col != "inactive"}. +\item Constructs a state label per person at T0 (\code{from_group}) and T1 +(\code{to_group}) by concatenating \code{group_cols} values with +\code{"||"} as separator. When \code{salary_col} is supplied, salary +is first summed within each person-group combination via +\code{compute_fastsummary()} to handle multi-contract persons before +state labels are formed. +\item Joins T0 and T1 states on person ID (inner join), so persons who +exit between T0 and T1 are excluded from transition counts. +\item Counts transitions per \code{(from_group, to_group)} pair and +divides by the T0 population in \code{from_group} to obtain a +period-specific transition probability. Groups with zero movers are +retained with \code{n_moves = 0L}. +\item When \code{salary_col} is supplied, computes salary summary +statistics \emph{over movers only} (persons who appear in both +snapshots), not over the full T0 population. } } \seealso{ diff --git a/man/dot-smooth_rate_curve.Rd b/man/dot-smooth_rate_curve.Rd index f491c9d..7830f2b 100644 --- a/man/dot-smooth_rate_curve.Rd +++ b/man/dot-smooth_rate_curve.Rd @@ -24,8 +24,8 @@ more global fit, smaller values track local features more closely.} } \value{ A numeric vector of smoothed rates, one per element of - \code{full_ages}, in the same order. Not clipped to \code{[0, 1]} -- - callers (e.g. \code{smooth_decrement_rates()}) are responsible for that. +\code{full_ages}, in the same order. Not clipped to \code{[0, 1]} -- +callers (e.g. \code{smooth_decrement_rates()}) are responsible for that. } \description{ Internal single-curve workhorse called by \code{smooth_decrement_rates()} @@ -37,17 +37,17 @@ pensioner rate by age"), returns a smoothed rate for \emph{every} age in The method used depends on how much data is actually available, since a local regression needs enough support to be stable: \itemize{ - \item Exactly one distinct age observed: there is no trend to fit from a - single point, so that one rate is repeated flat across the whole grid. - \item Two or three distinct ages: too few for a stable \code{loess} fit, - so falls back to \code{stats::approx()} (piecewise linear - interpolation). Ages in \code{full_ages} outside the observed range get - the nearest boundary value (\code{rule = 2}) rather than \code{NA}. - \item Four or more distinct ages: fits - \code{stats::loess(rate ~ age, weights = weight, span = span, degree = 2)} - and predicts it onto \code{full_ages}. \code{weight} (exposure) means an - age with many people at risk pulls the local curve toward its raw rate - harder than a thin, noisy age. +\item Exactly one distinct age observed: there is no trend to fit from a +single point, so that one rate is repeated flat across the whole grid. +\item Two or three distinct ages: too few for a stable \code{loess} fit, +so falls back to \code{stats::approx()} (piecewise linear +interpolation). Ages in \code{full_ages} outside the observed range get +the nearest boundary value (\code{rule = 2}) rather than \code{NA}. +\item Four or more distinct ages: fits +\code{stats::loess(rate ~ age, weights = weight, span = span, degree = 2)} +and predicts it onto \code{full_ages}. \code{weight} (exposure) means an +age with many people at risk pulls the local curve toward its raw rate +harder than a thin, noisy age. } } \seealso{ diff --git a/man/enterprise_surveys.Rd b/man/enterprise_surveys.Rd index df06785..692d832 100644 --- a/man/enterprise_surveys.Rd +++ b/man/enterprise_surveys.Rd @@ -7,9 +7,9 @@ \format{ A data frame with 413 rows and 3 variables: \describe{ - \item{\code{country_code}}{character World Bank country code.} - \item{\code{year}}{character Year.} - \item{\code{workforce_constraint}}{character Proportion of establishments identifying an inadequately educated workforce as a major or severe constraint to the current operations of the establishment.} +\item{\code{country_code}}{character World Bank country code.} +\item{\code{year}}{character Year.} +\item{\code{workforce_constraint}}{character Proportion of establishments identifying an inadequately educated workforce as a major or severe constraint to the current operations of the establishment.} } } \source{ diff --git a/man/estimate_decrement_rates.Rd b/man/estimate_decrement_rates.Rd index 9167fb4..f49fb19 100644 --- a/man/estimate_decrement_rates.Rd +++ b/man/estimate_decrement_rates.Rd @@ -40,27 +40,27 @@ occupation, service type) to estimate separate rates by, alongside age.} } \value{ A data.table with one row per age / \code{group_cols} / outcome - type, pooled across every consecutive snapshot pair in - \code{personnel_dt}: - \describe{ - \item{age_col, group_cols}{The age and grouping columns, as supplied.} - \item{status_col}{The outcome type this row's rate applies to -- - \code{"active"} (stayed), an observed exit status (e.g. - \code{"pensioner"}), or the synthetic \code{"non-retirement-exit"} - (someone who dropped out of the panel without an explicit exit - status). For a given age/group, these rows sum to 1.} - \item{pop}{Total exposure: the number of person-periods active at the - start of a snapshot pair, summed across every pair that contributed - to this age/group.} - \item{exits}{Total number of people in that exposure who had this - outcome by the next snapshot, summed the same way.} - \item{decrement_rate}{The pooled rate, \code{exits / pop}. This is the - empirical \code{qx} (or \code{px}, for the \code{"active"} row) to - feed into a life table.} - \item{n_periods}{Number of distinct snapshot pairs that contributed to - this age/group/outcome cell -- a quick way to spot ages resting on - very little data.} - } +type, pooled across every consecutive snapshot pair in +\code{personnel_dt}: +\describe{ +\item{age_col, group_cols}{The age and grouping columns, as supplied.} +\item{status_col}{The outcome type this row's rate applies to -- +\code{"active"} (stayed), an observed exit status (e.g. +\code{"pensioner"}), or the synthetic \code{"non-retirement-exit"} +(someone who dropped out of the panel without an explicit exit +status). For a given age/group, these rows sum to 1.} +\item{pop}{Total exposure: the number of person-periods active at the +start of a snapshot pair, summed across every pair that contributed +to this age/group.} +\item{exits}{Total number of people in that exposure who had this +outcome by the next snapshot, summed the same way.} +\item{decrement_rate}{The pooled rate, \code{exits / pop}. This is the +empirical \code{qx} (or \code{px}, for the \code{"active"} row) to +feed into a life table.} +\item{n_periods}{Number of distinct snapshot pairs that contributed to +this age/group/outcome cell -- a quick way to spot ages resting on +very little data.} +} } \description{ Estimates, for each age (and any grouping columns you supply), the @@ -84,12 +84,12 @@ computed, not just what it means. collapsing two different axes, and this function only ever does the first one: \itemize{ - \item \emph{Time}, here: every consecutive snapshot pair in - \code{personnel_dt} (2015-2016, 2016-2017, ...) is walked via - \code{roll_snapshot_pairs()}, and each pair's exposure/outcome counts - are pooled into one age-indexed rate. This function never chains - anything across \emph{age} -- that is a separate step (a life-table - function operating purely on this function's output). +\item \emph{Time}, here: every consecutive snapshot pair in +\code{personnel_dt} (2015-2016, 2016-2017, ...) is walked via +\code{roll_snapshot_pairs()}, and each pair's exposure/outcome counts +are pooled into one age-indexed rate. This function never chains +anything across \emph{age} -- that is a separate step (a life-table +function operating purely on this function's output). } \strong{Pooling is exposure-weighted, not a mean of rates.} For a given diff --git a/man/estimate_exit_rates.Rd b/man/estimate_exit_rates.Rd index 43a2145..f307601 100644 --- a/man/estimate_exit_rates.Rd +++ b/man/estimate_exit_rates.Rd @@ -47,7 +47,7 @@ included to prevent partial argument matching against \code{ref_date_col}).} } \value{ data.table with \code{group_cols} (if specified) and - \code{exit_rate} column. +\code{exit_rate} column. } \description{ Uses \code{govhr::detect_personnel_event(event_type = "fire")} to identify diff --git a/man/estimate_movement_rates.Rd b/man/estimate_movement_rates.Rd index 6165d2f..2033cbe 100644 --- a/man/estimate_movement_rates.Rd +++ b/man/estimate_movement_rates.Rd @@ -46,34 +46,34 @@ the output (see Value). Default: \code{NULL}.} } \value{ A \code{data.table} with one row per - \code{(from_group, to_group, from_period, to_period)} transition pair, - keyed on those four columns. Returns an empty \code{data.table} with the - same schema if no valid transitions are found. Columns: - \describe{ - \item{from_group}{Character. Concatenated \code{group_cols} state at the - start of the period (T0).} - \item{to_group}{Character. Concatenated \code{group_cols} state at the - end of the period (T1).} - \item{movement_rate}{Numeric. Empirical transition probability for this - specific period pair: \eqn{n\_moves / n\_pop}.} - \item{from_period}{Date. Snapshot date at the start of the period (T0).} - \item{to_period}{Date. Snapshot date at the end of the period (T1).} - \item{n_pop}{Integer. Number of persons in \code{from_group} at T0.} - \item{n_moves}{Integer. Number of persons who moved from - \code{from_group} to \code{to_group} between T0 and T1.} - } - When \code{salary_col} is not \code{NULL}, five additional columns are - appended: - \describe{ - \item{mean_salary_t0}{Numeric. Mean salary in \code{from_group} at T0.} - \item{mean_salary_t1}{Numeric. Mean salary in \code{to_group} at T1.} - \item{mean_salary_change}{Numeric. Absolute change in mean salary - (T1 minus T0).} - \item{median_salary_change}{Numeric. Median absolute salary change across - movers.} - \item{mean_salary_pct_change}{Numeric. Mean percentage salary change - across movers.} - } +\code{(from_group, to_group, from_period, to_period)} transition pair, +keyed on those four columns. Returns an empty \code{data.table} with the +same schema if no valid transitions are found. Columns: +\describe{ +\item{from_group}{Character. Concatenated \code{group_cols} state at the +start of the period (T0).} +\item{to_group}{Character. Concatenated \code{group_cols} state at the +end of the period (T1).} +\item{movement_rate}{Numeric. Empirical transition probability for this +specific period pair: \eqn{n\_moves / n\_pop}.} +\item{from_period}{Date. Snapshot date at the start of the period (T0).} +\item{to_period}{Date. Snapshot date at the end of the period (T1).} +\item{n_pop}{Integer. Number of persons in \code{from_group} at T0.} +\item{n_moves}{Integer. Number of persons who moved from +\code{from_group} to \code{to_group} between T0 and T1.} +} +When \code{salary_col} is not \code{NULL}, five additional columns are +appended: +\describe{ +\item{mean_salary_t0}{Numeric. Mean salary in \code{from_group} at T0.} +\item{mean_salary_t1}{Numeric. Mean salary in \code{to_group} at T1.} +\item{mean_salary_change}{Numeric. Absolute change in mean salary +(T1 minus T0).} +\item{median_salary_change}{Numeric. Median absolute salary change across +movers.} +\item{mean_salary_pct_change}{Numeric. Mean percentage salary change +across movers.} +} } \description{ Analyzes longitudinal panel data to compute empirical transition probabilities diff --git a/man/fastcount.Rd b/man/fastcount.Rd index 6a53be8..7869313 100644 --- a/man/fastcount.Rd +++ b/man/fastcount.Rd @@ -32,9 +32,9 @@ it will use \code{nn}. If there's a column called \code{n} and \code{nn}, it'll A tibble with one row per group and a count column. } \description{ -`fastcount()` delegates [dplyr::count()] to a `data.table` backend by -converting the input to a lazy `dtplyr` table first. This preserves the -familiar `count()` interface while exploiting `data.table` performance. +\code{fastcount()} delegates \code{\link[dplyr:count]{dplyr::count()}} to a \code{data.table} backend by +converting the input to a lazy \code{dtplyr} table first. This preserves the +familiar \code{count()} interface while exploiting \code{data.table} performance. } \examples{ df <- tibble::tibble(group = c("a", "a", "b")) diff --git a/man/fastprop.Rd b/man/fastprop.Rd index 0d4b832..ea2b9bf 100644 --- a/man/fastprop.Rd +++ b/man/fastprop.Rd @@ -7,20 +7,20 @@ fastprop(.data, ...) } \arguments{ -\item{.data}{A data frame or tibble containing a count column `n`.} +\item{.data}{A data frame or tibble containing a count column \code{n}.} \item{...}{Grouping variables. Proportions are computed within the combinations of these variables.} } \value{ -A tibble with the same columns as `.data` plus a numeric - `prop` column giving the group share (0–1). Missing `n` values are - ignored in the denominator via `na.rm = TRUE`. +A tibble with the same columns as \code{.data} plus a numeric +\code{prop} column giving the group share (0–1). Missing \code{n} values are +ignored in the denominator via \code{na.rm = TRUE}. } \description{ fastprop() computes the proportion of counts within groups. -It expects the input to already contain a count column named `n` -(for example the output of `dplyr::count()` or `fastcount()`). +It expects the input to already contain a count column named \code{n} +(for example the output of \code{dplyr::count()} or \code{fastcount()}). } \examples{ library(dplyr) diff --git a/man/find_duplicate_ids.Rd b/man/find_duplicate_ids.Rd index 7695b9e..e9fca07 100644 --- a/man/find_duplicate_ids.Rd +++ b/man/find_duplicate_ids.Rd @@ -12,7 +12,7 @@ find_duplicate_ids(data, identifier) \item{identifier}{The column to check for duplicates. This should be passed as a bare (unquoted) column name using tidy evaluation.} } \value{ -A tibble with the identifier column and a count column `n` indicating the number of times each duplicate appears. +A tibble with the identifier column and a count column \code{n} indicating the number of times each duplicate appears. } \description{ Identifies duplicated values of a specified identifier column in a data frame or tibble. diff --git a/man/fix_invalid_birthdates.Rd b/man/fix_invalid_birthdates.Rd index 3e0bd93..10a2d33 100644 --- a/man/fix_invalid_birthdates.Rd +++ b/man/fix_invalid_birthdates.Rd @@ -12,21 +12,21 @@ fix_invalid_birthdates( ) } \arguments{ -\item{data}{A data.frame with a `birth_date` column (Date class).} +\item{data}{A data.frame with a \code{birth_date} column (Date class).} -\item{min_date}{Minimum valid birth date (default: `1920-01-01`).} +\item{min_date}{Minimum valid birth date (default: \code{1920-01-01}).} -\item{max_date}{Maximum valid birth date (default: `Sys.Date()`).} +\item{max_date}{Maximum valid birth date (default: \code{Sys.Date()}).} -\item{treatment}{Correction strategy: `"na"`, `"clamp"`, or `"filter"`. +\item{treatment}{Correction strategy: \code{"na"}, \code{"clamp"}, or \code{"filter"}. See \code{\link{fix_invalid_dates}}.} } \value{ -A data.frame with corrected `birth_date` values. +A data.frame with corrected \code{birth_date} values. } \description{ -Corrects `birth_date` values outside the valid range, addressing violations -of the `personnel_birth_date` rule. Defaults assume no active worker was born +Corrects \code{birth_date} values outside the valid range, addressing violations +of the \code{personnel_birth_date} rule. Defaults assume no active worker was born before 1920 or in the future. } \examples{ diff --git a/man/fix_invalid_dates.Rd b/man/fix_invalid_dates.Rd index 5d128f7..0a156f4 100644 --- a/man/fix_invalid_dates.Rd +++ b/man/fix_invalid_dates.Rd @@ -12,25 +12,25 @@ fix_invalid_dates( ) } \arguments{ -\item{data}{A data.frame with a `ref_date` column (Date class).} +\item{data}{A data.frame with a \code{ref_date} column (Date class).} -\item{min_date}{Minimum valid date (default: `1900-01-01`).} +\item{min_date}{Minimum valid date (default: \code{1900-01-01}).} -\item{max_date}{Maximum valid date (default: `Sys.Date()`).} +\item{max_date}{Maximum valid date (default: \code{Sys.Date()}).} \item{treatment}{Correction strategy: \itemize{ - \item `"na"`: Set invalid dates to `NA` - \item `"clamp"`: Replace out-of-range dates with `min_date` or `max_date` - \item `"filter"`: Remove records with invalid dates +\item \code{"na"}: Set invalid dates to \code{NA} +\item \code{"clamp"}: Replace out-of-range dates with \code{min_date} or \code{max_date} +\item \code{"filter"}: Remove records with invalid dates }} } \value{ -A data.frame with corrected `ref_date` values. +A data.frame with corrected \code{ref_date} values. } \description{ -Corrects `ref_date` values outside the valid range, addressing violations of -`personnel_ref_date_valid` and `contract_ref_date_valid` rules. +Corrects \code{ref_date} values outside the valid range, addressing violations of +\code{personnel_ref_date_valid} and \code{contract_ref_date_valid} rules. } \examples{ \dontrun{ diff --git a/man/fix_negative_salaries.Rd b/man/fix_negative_salaries.Rd index 9335385..7f949e1 100644 --- a/man/fix_negative_salaries.Rd +++ b/man/fix_negative_salaries.Rd @@ -13,21 +13,21 @@ fix_negative_salaries( \arguments{ \item{data}{A data.frame with salary columns.} -\item{columns}{Salary columns to fix (default: `gross_salary_lcu`, -`base_salary_lcu`, `net_salary_lcu`).} +\item{columns}{Salary columns to fix (default: \code{gross_salary_lcu}, +\code{base_salary_lcu}, \code{net_salary_lcu}).} \item{treatment}{Correction strategy: \itemize{ - \item `"na"`: Set negative values to `NA` - \item `"abs"`: Take absolute value - \item `"zero"`: Set negative values to `0` +\item \code{"na"}: Set negative values to \code{NA} +\item \code{"abs"}: Take absolute value +\item \code{"zero"}: Set negative values to \code{0} }} } \value{ A data.frame with corrected salary values in the specified columns. } \description{ -Addresses violations of positive salary rules (`wagebill_*_positive`) by +Addresses violations of positive salary rules (\verb{wagebill_*_positive}) by handling negative values across salary columns. } \examples{ diff --git a/man/fix_retirement_age.Rd b/man/fix_retirement_age.Rd index 976c5be..8025148 100644 --- a/man/fix_retirement_age.Rd +++ b/man/fix_retirement_age.Rd @@ -7,23 +7,23 @@ fix_retirement_age(data, max_age = 65, treatment = c("flag", "adjust_status")) } \arguments{ -\item{data}{A data.frame with `birth_date`, `ref_date`, and `status` columns.} +\item{data}{A data.frame with \code{birth_date}, \code{ref_date}, and \code{status} columns.} \item{max_age}{Retirement age threshold in years (default: 65).} \item{treatment}{Handling strategy: \itemize{ - \item `"flag"`: Add `over_retirement_flag` column - \item `"adjust_status"`: Set `status` to `"retired"` for affected workers +\item \code{"flag"}: Add \code{over_retirement_flag} column +\item \code{"adjust_status"}: Set \code{status} to \code{"retired"} for affected workers }} } \value{ A data.frame with over-retirement-age workers handled according to - `treatment`. +\code{treatment}. } \description{ -Addresses violations of the `personnel_maximum_age` rule. Only targets -workers with `status == "active"`; retired or inactive workers are ignored. +Addresses violations of the \code{personnel_maximum_age} rule. Only targets +workers with \code{status == "active"}; retired or inactive workers are ignored. } \examples{ \dontrun{ diff --git a/man/fix_salary_components.Rd b/man/fix_salary_components.Rd index 988ed67..30f8f2c 100644 --- a/man/fix_salary_components.Rd +++ b/man/fix_salary_components.Rd @@ -10,16 +10,16 @@ fix_salary_components( ) } \arguments{ -\item{data}{A data.frame with columns `gross_salary_lcu`, `base_salary_lcu`, -`net_salary_lcu`, `allowance_lcu`.} +\item{data}{A data.frame with columns \code{gross_salary_lcu}, \code{base_salary_lcu}, +\code{net_salary_lcu}, \code{allowance_lcu}.} \item{strategy}{Correction strategy: \itemize{ - \item `"recalculate_gross"`: Set `gross = base + allowance` - \item `"cap_net"`: Cap net at gross - \item `"cap_base"`: Cap base at gross - \item `"flag"`: Add flag columns `gross_composition_flag`, - `net_exceeds_gross_flag`, `base_exceeds_gross_flag` +\item \code{"recalculate_gross"}: Set \code{gross = base + allowance} +\item \code{"cap_net"}: Cap net at gross +\item \code{"cap_base"}: Cap base at gross +\item \code{"flag"}: Add flag columns \code{gross_composition_flag}, +\code{net_exceeds_gross_flag}, \code{base_exceeds_gross_flag} }} } \value{ diff --git a/man/fix_underage_workers.Rd b/man/fix_underage_workers.Rd index 082dc79..02c7b36 100644 --- a/man/fix_underage_workers.Rd +++ b/man/fix_underage_workers.Rd @@ -7,23 +7,23 @@ fix_underage_workers(data, min_age = 18, treatment = c("flag", "filter")) } \arguments{ -\item{data}{A data.frame with `birth_date` and `ref_date` columns (Date class).} +\item{data}{A data.frame with \code{birth_date} and \code{ref_date} columns (Date class).} \item{min_age}{Minimum working age in years (default: 18).} \item{treatment}{Handling strategy: \itemize{ - \item `"flag"`: Add `underage_flag` column (TRUE for underage workers) - \item `"filter"`: Remove underage worker records +\item \code{"flag"}: Add \code{underage_flag} column (TRUE for underage workers) +\item \code{"filter"}: Remove underage worker records }} } \value{ -A data.frame with underage workers handled according to `treatment`. +A data.frame with underage workers handled according to \code{treatment}. } \description{ -Addresses violations of the `personnel_minimum_age` rule. Workers below -`min_age` (default: 18) are identified using `birth_date` and `ref_date`. -Age is calculated as `difftime(ref_date, birth_date, units = "days") / 365.25`. +Addresses violations of the \code{personnel_minimum_age} rule. Workers below +\code{min_age} (default: 18) are identified using \code{birth_date} and \code{ref_date}. +Age is calculated as \code{difftime(ref_date, birth_date, units = "days") / 365.25}. } \examples{ \dontrun{ diff --git a/man/fix_working_hours.Rd b/man/fix_working_hours.Rd index acdc8b5..e84ef1e 100644 --- a/man/fix_working_hours.Rd +++ b/man/fix_working_hours.Rd @@ -7,21 +7,21 @@ fix_working_hours(data, treatment = c("na", "clamp", "flag")) } \arguments{ -\item{data}{A data.frame with a `whours` column (numeric).} +\item{data}{A data.frame with a \code{whours} column (numeric).} \item{treatment}{Correction strategy: \itemize{ - \item `"na"`: Set invalid hours to `NA` - \item `"clamp"`: Clamp to `[0, 40]` - \item `"flag"`: Add `invalid_hours_flag` column (also flags `NA`) +\item \code{"na"}: Set invalid hours to \code{NA} +\item \code{"clamp"}: Clamp to \verb{[0, 40]} +\item \code{"flag"}: Add \code{invalid_hours_flag} column (also flags \code{NA}) }} } \value{ A data.frame with corrected working hours. } \description{ -Corrects `whours` values outside the valid range [0, 168], addressing -violations of the `contract_whours` rule. The maximum of 168 reflects +Corrects \code{whours} values outside the valid range \link{0, 168}, addressing +violations of the \code{contract_whours} rule. The maximum of 168 reflects 5 days × 8 hours per week. } \examples{ diff --git a/man/get_data360_api.Rd b/man/get_data360_api.Rd index b31658e..22a244b 100644 --- a/man/get_data360_api.Rd +++ b/man/get_data360_api.Rd @@ -15,7 +15,7 @@ get_data360_api(dataset_id, indicator_id, pivot = TRUE) } \value{ A tibble containing data, including country codes, country names, - years, and values. +years, and values. } \description{ This function retrieves data from the Data360 API. diff --git a/man/get_metadata360.Rd b/man/get_metadata360.Rd index da25161..59b5292 100644 --- a/man/get_metadata360.Rd +++ b/man/get_metadata360.Rd @@ -12,11 +12,11 @@ dataset for which metadata should be retrieved.} } \value{ A list (or data frame) containing the metadata associated with the - requested dataset, as returned by the Data360 API. +requested dataset, as returned by the Data360 API. } \description{ This function queries the World Bank Data360 API to fetch metadata for a -specified dataset, identified by its `dataset_id`. It constructs the request +specified dataset, identified by its \code{dataset_id}. It constructs the request URL, retrieves the metadata in JSON format, and parses it into an R list or data frame. } diff --git a/man/guess_date_frequency.Rd b/man/guess_date_frequency.Rd index 7ce919f..e4d2b2f 100644 --- a/man/guess_date_frequency.Rd +++ b/man/guess_date_frequency.Rd @@ -11,7 +11,7 @@ guess_date_frequency(.data) } \value{ A single character scalar: \code{"year"}, \code{"quarter"}, - \code{"month"}, \code{"week"}, or \code{"day"}. +\code{"month"}, \code{"week"}, or \code{"day"}. } \description{ Evaluates a vector of reference dates and returns a single diff --git a/man/harmonize_columns.Rd b/man/harmonize_columns.Rd index 8fd668f..e13daaf 100644 --- a/man/harmonize_columns.Rd +++ b/man/harmonize_columns.Rd @@ -11,7 +11,7 @@ harmonize_columns(data, dictionary) \item{dictionary}{Either a named character vector (names are the desired standardized column names and values are the original column names), or a data frame with -two columns: `from` (original column names) and `to` (standardized names).} +two columns: \code{from} (original column names) and \code{to} (standardized names).} } \value{ A data frame with harmonized column names. diff --git a/man/isco.Rd b/man/isco.Rd index 8416209..d4811c3 100644 --- a/man/isco.Rd +++ b/man/isco.Rd @@ -7,18 +7,18 @@ \format{ A data frame with 436 rows and 9 variables: \describe{ - \item{isco_version}{Character. Version of the ISCO classification (e.g., `"ISCO-08"`).} - \item{major}{Character. One-digit major group code.} - \item{major_label}{Character. Title of the major group (e.g., `"Managers"`).} - \item{sub_major}{Character. Two-digit sub-major group code.} - \item{sub_major_label}{Character. Title of the sub-major group (e.g., - `"Chief Executives, Senior Officials and Legislators"`).} - \item{minor}{Character. Three-digit minor group code.} - \item{minor_label}{Character. Title of the minor group (e.g., - `"Legislators and Senior Officials"`).} - \item{unit}{Character. Four-digit unit group code.} - \item{description}{Character. Definition or title of the occupation - at the unit group level (e.g., `"Legislators"`, `"Senior Government Officials"`).} +\item{isco_version}{Character. Version of the ISCO classification (e.g., \code{"ISCO-08"}).} +\item{major}{Character. One-digit major group code.} +\item{major_label}{Character. Title of the major group (e.g., \code{"Managers"}).} +\item{sub_major}{Character. Two-digit sub-major group code.} +\item{sub_major_label}{Character. Title of the sub-major group (e.g., +\code{"Chief Executives, Senior Officials and Legislators"}).} +\item{minor}{Character. Three-digit minor group code.} +\item{minor_label}{Character. Title of the minor group (e.g., +\code{"Legislators and Senior Officials"}).} +\item{unit}{Character. Four-digit unit group code.} +\item{description}{Character. Definition or title of the occupation +at the unit group level (e.g., \code{"Legislators"}, \code{"Senior Government Officials"}).} } } \source{ @@ -39,12 +39,13 @@ information to facilitate international comparisons and harmonization of occupational statistics. It is widely used in labor statistics, survey design, and policy analysis. - ISCO-08 is structured hierarchically: -- \strong{Major groups} (1 digit) – broad occupational categories -- \strong{Sub-major groups} (2 digits) – subdivisions of major groups -- \strong{Minor groups} (3 digits) – subdivisions of sub-major groups -- \strong{Unit groups} (4 digits) – most detailed level, individual occupations +\itemize{ +\item \strong{Major groups} (1 digit) – broad occupational categories +\item \strong{Sub-major groups} (2 digits) – subdivisions of major groups +\item \strong{Minor groups} (3 digits) – subdivisions of sub-major groups +\item \strong{Unit groups} (4 digits) – most detailed level, individual occupations +} Each unit group includes a description outlining the scope of the occupation according to ILO’s ISCO-08 documentation. diff --git a/man/macro_indicators.Rd b/man/macro_indicators.Rd index b1b388c..c67bd7a 100644 --- a/man/macro_indicators.Rd +++ b/man/macro_indicators.Rd @@ -7,24 +7,24 @@ \format{ A tibble with 11652 rows and 14 variables: \describe{ - \item{country_code}{ISO3 country code (originally from Data360 API).} - \item{year}{Year of observation (character, originally from Data360 API).} - \item{gdp_lcu}{Gross Domestic Product (local currency units). Original WDI code: WB_WDI_NY_GDP_MKTP_CN.} - \item{pexpenditure_lcu}{Total government expenditure (local currency units). Original WDI code: WB_WDI_GC_XPN_TOTL_CN.} - \item{prevenue_lcu}{Total government revenue (local currency units). Original WDI code: WB_WDI_GC_REV_XGRT_CN.} - \item{taxrevenue_lcu}{Total government tax revenue (local currency units). Original WDI code: WB_WDI_GC_TAX_TOTL_CN.} - \item{emp_pop_rate}{Employment-to-population ratio (in percent). Original WDI code: WB_WDI_SL_EMP_TOTL_SP_NE_ZS.} - \item{labor_force_total}{Labor force, total. Original WDI code: WB_WDI_SL_TLF_TOTL_IN.} - \item{labor_force_advanced_edu}{Labor force with advanced education (percentage of total working-age population with advanced education). Original WDI code: WB_WDI_SL_TLF_ADVN_ZS.} - \item{labor_force_women}{Labor force, women (percentage of total labor force). Original WDI code: WB_WDI_SL_TLF_TOTL_FE_ZS.} - \item{tot_pop}{Total population. Original WDI code: WB_WDI_SP_POP_TOTL.} - \item{government_expenditure_gdp}{General government final consumption expenditure (percentage of GDP). Original WDI code: WB_WDI_NE_CON_GOVT_ZS.} - \item{salaried_rate}{Share of employed people who are salaried (in percent). Original WDI code: WB_WDI_SL_EMP_WORK_ZS.} - \item{cpi}{Consumer Price Index, total. Original WDI code: WB_WDI_FP_CPI_TOTL.} - \item{ppp}{Purchasing Power Parity (local currency units per international USD). Original WDI code: WB_WDI_PA_NUS_PRVT_PP.} - \item{fiscal_balance}{Overall Fiscal Balance, USD, percentage of GDP.} - \item{emp_pop}{The population of employed i.e. `emp_pop_rate` * `tot_pop`.} - \item{salaried_pop}{The population of salaried personnel i.e. `salaried_rate` * `emp_pop`.} +\item{country_code}{ISO3 country code (originally from Data360 API).} +\item{year}{Year of observation (character, originally from Data360 API).} +\item{gdp_lcu}{Gross Domestic Product (local currency units). Original WDI code: WB_WDI_NY_GDP_MKTP_CN.} +\item{pexpenditure_lcu}{Total government expenditure (local currency units). Original WDI code: WB_WDI_GC_XPN_TOTL_CN.} +\item{prevenue_lcu}{Total government revenue (local currency units). Original WDI code: WB_WDI_GC_REV_XGRT_CN.} +\item{taxrevenue_lcu}{Total government tax revenue (local currency units). Original WDI code: WB_WDI_GC_TAX_TOTL_CN.} +\item{emp_pop_rate}{Employment-to-population ratio (in percent). Original WDI code: WB_WDI_SL_EMP_TOTL_SP_NE_ZS.} +\item{labor_force_total}{Labor force, total. Original WDI code: WB_WDI_SL_TLF_TOTL_IN.} +\item{labor_force_advanced_edu}{Labor force with advanced education (percentage of total working-age population with advanced education). Original WDI code: WB_WDI_SL_TLF_ADVN_ZS.} +\item{labor_force_women}{Labor force, women (percentage of total labor force). Original WDI code: WB_WDI_SL_TLF_TOTL_FE_ZS.} +\item{tot_pop}{Total population. Original WDI code: WB_WDI_SP_POP_TOTL.} +\item{government_expenditure_gdp}{General government final consumption expenditure (percentage of GDP). Original WDI code: WB_WDI_NE_CON_GOVT_ZS.} +\item{salaried_rate}{Share of employed people who are salaried (in percent). Original WDI code: WB_WDI_SL_EMP_WORK_ZS.} +\item{cpi}{Consumer Price Index, total. Original WDI code: WB_WDI_FP_CPI_TOTL.} +\item{ppp}{Purchasing Power Parity (local currency units per international USD). Original WDI code: WB_WDI_PA_NUS_PRVT_PP.} +\item{fiscal_balance}{Overall Fiscal Balance, USD, percentage of GDP.} +\item{emp_pop}{The population of employed i.e. \code{emp_pop_rate} * \code{tot_pop}.} +\item{salaried_pop}{The population of salaried personnel i.e. \code{salaried_rate} * \code{emp_pop}.} } } \source{ diff --git a/man/model_wage.Rd b/man/model_wage.Rd index 8444513..54db229 100644 --- a/man/model_wage.Rd +++ b/man/model_wage.Rd @@ -17,24 +17,24 @@ model_wage( effects columns.} \item{outcome_var}{Character. Name of the outcome column. -Default `"gross_salary_lcu"`.} +Default \code{"gross_salary_lcu"}.} \item{predictor_vars}{Character vector. Names of predictor columns. -Default `c("contract_type", "occupation_native", "educat7", "whours", "paygrade")`.} +Default \code{c("contract_type", "occupation_native", "educat7", "whours", "paygrade")}.} -\item{fixed_effects_vars}{Character vector, or `NULL` to fit without fixed +\item{fixed_effects_vars}{Character vector, or \code{NULL} to fit without fixed effects. Names of fixed effects columns. -Default `c("personnel_id", "est_id", "ref_date")`.} +Default \code{c("personnel_id", "est_id", "ref_date")}.} } \value{ -A `fixest` model object, as returned by `fixest::feols()`. +A \code{fixest} model object, as returned by \code{fixest::feols()}. } \description{ Fits a linear wage model based on a set of predictors and fixed effects. } \details{ -`outcome_var` and `fixed_effects_vars` are required to be present in -`data`. `predictor_vars` are covariates and are dropped with a +\code{outcome_var} and \code{fixed_effects_vars} are required to be present in +\code{data}. \code{predictor_vars} are covariates and are dropped with a warning rather than failing the whole call; if none remain, the model is -fit with an intercept-only right-hand side (`1`). +fit with an intercept-only right-hand side (\code{1}). } diff --git a/man/personnel_rules.Rd b/man/personnel_rules.Rd index 77375a0..501d3c8 100644 --- a/man/personnel_rules.Rd +++ b/man/personnel_rules.Rd @@ -7,11 +7,11 @@ \format{ A tibble with 9 rows and 5 variables: \describe{ - \item{rule}{Character. The validation rule expression as a string that can be parsed by \code{validate::validator()}.} - \item{name}{Character. Unique identifier for the rule (e.g., "personnel_ref_date_valid").} - \item{description}{Character. Detailed explanation of what the rule checks. This description appears in validation summaries.} - \item{label}{Character. Short 2-3 word label for the rule, useful for plotting and quick reference.} - \item{required_vars}{Character. Comma-separated list of minimum required variables for the rule to be evaluated. At minimum: personnel_id and birth_date.} +\item{rule}{Character. The validation rule expression as a string that can be parsed by \code{validate::validator()}.} +\item{name}{Character. Unique identifier for the rule (e.g., "personnel_ref_date_valid").} +\item{description}{Character. Detailed explanation of what the rule checks. This description appears in validation summaries.} +\item{label}{Character. Short 2-3 word label for the rule, useful for plotting and quick reference.} +\item{required_vars}{Character. Comma-separated list of minimum required variables for the rule to be evaluated. At minimum: personnel_id and birth_date.} } } \source{ @@ -28,12 +28,12 @@ assess the quality and consistency of personnel records in HRMIS data. \details{ The personnel validation rules check: \itemize{ - \item Column existence (personnel_id, ref_date, birth_date, status) - \item ID uniqueness (personnel_id + ref_date combination is unique) - \item Reference date validity (within reasonable historical bounds) - \item Age range (18-70 years calculated from birth_date and ref_date) - \item Birth date reasonableness - \item Employment status validity (active, inactive, retired, terminated) +\item Column existence (personnel_id, ref_date, birth_date, status) +\item ID uniqueness (personnel_id + ref_date combination is unique) +\item Reference date validity (within reasonable historical bounds) +\item Age range (18-70 years calculated from birth_date and ref_date) +\item Birth date reasonableness +\item Employment status validity (active, inactive, retired, terminated) } These rules can be programmatically converted to \code{validate::validator()} objects diff --git a/man/pivot_data360.Rd b/man/pivot_data360.Rd index 3e8b9c4..cdb6351 100644 --- a/man/pivot_data360.Rd +++ b/man/pivot_data360.Rd @@ -8,28 +8,32 @@ pivot_data360(data) } \arguments{ \item{data}{A data frame or tibble containing the variables: -- `REF_AREA`: Country or region code -- `TIME_PERIOD`: Year or time reference -- `INDICATOR`: Indicator code or name -- `OBS_VALUE`: Observation value for the indicator} +\itemize{ +\item \code{REF_AREA}: Country or region code +\item \code{TIME_PERIOD}: Year or time reference +\item \code{INDICATOR}: Indicator code or name +\item \code{OBS_VALUE}: Observation value for the indicator +}} } \value{ A tibble in wide format with columns: - - `country_code`: The country or region code (from `REF_AREA`) - - `year`: The year or time period (from `TIME_PERIOD`) - - One column per unique `INDICATOR`, containing corresponding values from `OBS_VALUE` +\itemize{ +\item \code{country_code}: The country or region code (from \code{REF_AREA}) +\item \code{year}: The year or time period (from \code{TIME_PERIOD}) +\item One column per unique \code{INDICATOR}, containing corresponding values from \code{OBS_VALUE} +} } \description{ This function reshapes a Data360-style dataset from long to wide format. -It spreads indicator values (`OBS_VALUE`) across multiple columns based on -the indicator variable (`INDICATOR`), while keeping the reference area and +It spreads indicator values (\code{OBS_VALUE}) across multiple columns based on +the indicator variable (\code{INDICATOR}), while keeping the reference area and time period identifiers. The resulting dataset is renamed and cleaned to have snake_case variable names. } \details{ This function is particularly useful for preparing Data360 or similar datasets for analysis, where multiple indicators are recorded by country -and year. The output dataset is cleaned using `janitor::clean_names()` to +and year. The output dataset is cleaned using \code{janitor::clean_names()} to ensure consistent naming. } \examples{ diff --git a/man/plot_bar_growth.Rd b/man/plot_bar_growth.Rd index 84982ab..c6eef37 100644 --- a/man/plot_bar_growth.Rd +++ b/man/plot_bar_growth.Rd @@ -7,8 +7,8 @@ plot_bar_growth(.data, group_col) } \arguments{ -\item{.data}{Data frame with the grouping column and a `growth_rate` column, -as returned by [compute_growth_summary()].} +\item{.data}{Data frame with the grouping column and a \code{growth_rate} column, +as returned by \code{\link[=compute_growth_summary]{compute_growth_summary()}}.} \item{group_col}{Character. Column to group by.} } @@ -16,6 +16,6 @@ as returned by [compute_growth_summary()].} A ggplot2 object. } \description{ -Draws a horizontal bar chart with groups ordered by `growth_rate`, with a +Draws a horizontal bar chart with groups ordered by \code{growth_rate}, with a dashed reference line at zero separating growth from decline. } diff --git a/man/plot_bar_total.Rd b/man/plot_bar_total.Rd index 23d56f4..09cc6fa 100644 --- a/man/plot_bar_total.Rd +++ b/man/plot_bar_total.Rd @@ -8,13 +8,13 @@ plot_bar_total(.data, group_col, x_col = "value", x_label = "Value") } \arguments{ \item{.data}{Data frame with the grouping column and the x-axis column, as -returned by [compute_cross_section_summary()].} +returned by \code{\link[=compute_cross_section_summary]{compute_cross_section_summary()}}.} \item{group_col}{Character. Column to group by.} -\item{x_col}{Character. Column to plot on the x-axis. Default `"value"`.} +\item{x_col}{Character. Column to plot on the x-axis. Default \code{"value"}.} -\item{x_label}{Character. x-axis label. Default `"Value"`.} +\item{x_label}{Character. x-axis label. Default \code{"Value"}.} } \value{ A ggplot2 object. diff --git a/man/plot_compression_ratio.Rd b/man/plot_compression_ratio.Rd index 988b7b8..1451cfa 100644 --- a/man/plot_compression_ratio.Rd +++ b/man/plot_compression_ratio.Rd @@ -7,9 +7,9 @@ plot_compression_ratio(.data, group_cols = NULL) } \arguments{ -\item{.data}{A data frame containing the compression ratio data produced by `compute_compression_ratio()`.} +\item{.data}{A data frame containing the compression ratio data produced by \code{compute_compression_ratio()}.} -\item{group_cols}{A character string indicating the grouping column, or "ref_date" +\item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } \value{ diff --git a/man/plot_consistency_trend.Rd b/man/plot_consistency_trend.Rd index 837f391..46f8f90 100644 --- a/man/plot_consistency_trend.Rd +++ b/man/plot_consistency_trend.Rd @@ -24,7 +24,7 @@ plot_consistency_trend( \item{type_plot}{Character string. The type of consistency plot ("record" or "value").} -\item{toggle_growth}{Logical. When `TRUE` the y-axis switches to a baseline-index view (first period = 100). Defaults to `FALSE`.} +\item{toggle_growth}{Logical. When \code{TRUE} the y-axis switches to a baseline-index view (first period = 100). Defaults to \code{FALSE}.} } \value{ A ggplot2 object. diff --git a/man/plot_coverage_bar.Rd b/man/plot_coverage_bar.Rd index 46f9110..f53fbe2 100644 --- a/man/plot_coverage_bar.Rd +++ b/man/plot_coverage_bar.Rd @@ -14,12 +14,14 @@ establishment dataset for the active module.} A ggplot2 object. } \description{ -Computes per-group coverage using [compute_coverage()] (without -`ref_date`, not aggregated) and renders a horizontal bar chart coloured +Computes per-group coverage using \code{\link[=compute_coverage]{compute_coverage()}} (without +\code{ref_date}, not aggregated) and renders a horizontal bar chart coloured green-yellow-red according to the same cutpoints used by the value boxes: } \details{ -* **High (>=80%)** — green (`#388e3c`) -* **Medium (50-79%)** — yellow (`#f9a825`) -* **Low (<50%)** — red (`#d32f2f`) +\itemize{ +\item \strong{High (>=80\%)} — green (\verb{#388e3c}) +\item \strong{Medium (50-79\%)} — yellow (\verb{#f9a825}) +\item \strong{Low (<50\%)} — red (\verb{#d32f2f}) +} } diff --git a/man/plot_coverage_trend.Rd b/man/plot_coverage_trend.Rd index b9a945b..992914e 100644 --- a/man/plot_coverage_trend.Rd +++ b/man/plot_coverage_trend.Rd @@ -11,16 +11,16 @@ plot_coverage_trend(data, group, toggle_growth = FALSE) establishment dataset for the active module.} \item{group}{Character string. Grouping variable inherited from the -`coverage_group` UI input (e.g. `"ref_date"`, `"grade_id"`).} +\code{coverage_group} UI input (e.g. \code{"ref_date"}, \code{"grade_id"}).} -\item{toggle_growth}{Logical. When `TRUE` the y-axis switches to a -baseline-index view (first period = 100). Defaults to `FALSE`.} +\item{toggle_growth}{Logical. When \code{TRUE} the y-axis switches to a +baseline-index view (first period = 100). Defaults to \code{FALSE}.} } \value{ A ggplot2 object. } \description{ -Computes coverage using [compute_coverage()] (with `ref_date` always +Computes coverage using \code{\link[=compute_coverage]{compute_coverage()}} (with \code{ref_date} always included, aggregated across variables) and renders a trend line via -[plot_trend()]. +\code{\link[=plot_trend]{plot_trend()}}. } diff --git a/man/plot_decile.Rd b/man/plot_decile.Rd index 7f9b454..e59ed04 100644 --- a/man/plot_decile.Rd +++ b/man/plot_decile.Rd @@ -7,9 +7,9 @@ plot_decile(.data, group_cols) } \arguments{ -\item{.data}{A data frame produced by `compute_decile()`, containing columns `decile`, `mean_value`, and optionally a grouping column.} +\item{.data}{A data frame produced by \code{compute_decile()}, containing columns \code{decile}, \code{mean_value}, and optionally a grouping column.} -\item{group_cols}{A character string indicating the grouping column, or "ref_date" for no grouping.} +\item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } \value{ A ggplot2 object representing the decile summary. diff --git a/man/plot_histogram.Rd b/man/plot_histogram.Rd index 8988909..2341c0d 100644 --- a/man/plot_histogram.Rd +++ b/man/plot_histogram.Rd @@ -7,7 +7,7 @@ plot_histogram(.data, plot_type = "histogram", group_col = NULL) } \arguments{ -\item{.data}{A data frame produced by `compute_histogram()` or `compute_cumulative()`, containing columns `bin`, `pct`, and optionally a grouping column.} +\item{.data}{A data frame produced by \code{compute_histogram()} or \code{compute_cumulative()}, containing columns \code{bin}, \code{pct}, and optionally a grouping column.} \item{plot_type}{A character string indicating the type of plot: "histogram" or "cumulative".} diff --git a/man/plot_model_wage.Rd b/man/plot_model_wage.Rd index 5f44997..60a5646 100644 --- a/man/plot_model_wage.Rd +++ b/man/plot_model_wage.Rd @@ -7,10 +7,10 @@ plot_model_wage(model_fit) } \arguments{ -\item{model_fit}{A `fixest` model object, as returned by `model_wage()`.} +\item{model_fit}{A \code{fixest} model object, as returned by \code{model_wage()}.} } \value{ -A `ggplot` object visualizing the model coefficients. +A \code{ggplot} object visualizing the model coefficients. } \description{ Plot a wage model fit diff --git a/man/plot_model_wage_fes.Rd b/man/plot_model_wage_fes.Rd index fa9d56e..15aedf9 100644 --- a/man/plot_model_wage_fes.Rd +++ b/man/plot_model_wage_fes.Rd @@ -10,12 +10,12 @@ plot_model_wage_fes( ) } \arguments{ -\item{model_fit}{A `fixest` model object, as returned by `model_wage()`.} +\item{model_fit}{A \code{fixest} model object, as returned by \code{model_wage()}.} \item{fixed_effects_var}{Character. Name of the fixed effects variable to plot.} } \value{ -A `ggplot` object visualizing the fixed effects. +A \code{ggplot} object visualizing the fixed effects. } \description{ Plot fixed effects from a wage model fit diff --git a/man/plot_movement.Rd b/man/plot_movement.Rd index 250702d..eeb76a3 100644 --- a/man/plot_movement.Rd +++ b/man/plot_movement.Rd @@ -7,13 +7,13 @@ plot_movement(.data, movement_type, measurement_type, group_cols) } \arguments{ -\item{.data}{A data frame containing the movement data with columns `ref_date`, `indicator`, and optionally a grouping column.} +\item{.data}{A data frame containing the movement data with columns \code{ref_date}, \code{indicator}, and optionally a grouping column.} \item{movement_type}{A character string indicating the type of movement: "hire", "fire", or "turnover".} \item{measurement_type}{A character string indicating the measurement type: "count" or "rate".} -\item{group_cols}{A character string indicating the grouping column, or "ref_date" for no grouping.} +\item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } \value{ A ggplot2 object representing the personnel movement over time. diff --git a/man/plot_movement_cost.Rd b/man/plot_movement_cost.Rd index 47c55df..75bfa02 100644 --- a/man/plot_movement_cost.Rd +++ b/man/plot_movement_cost.Rd @@ -7,9 +7,9 @@ plot_movement_cost(.data, group_cols) } \arguments{ -\item{.data}{A data frame containing the movement cost data with columns `movement_cost` and optionally a grouping column.} +\item{.data}{A data frame containing the movement cost data with columns \code{movement_cost} and optionally a grouping column.} -\item{group_cols}{A character string indicating the grouping column, or "ref_date" for no grouping.} +\item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } \value{ A ggplot2 object representing the movement cost. diff --git a/man/plot_segment.Rd b/man/plot_segment.Rd index 08f7af8..00321d3 100644 --- a/man/plot_segment.Rd +++ b/man/plot_segment.Rd @@ -17,11 +17,11 @@ the y-axis.} } \value{ A ggplot2 object displaying: - \itemize{ - \item Grey horizontal segments showing the range (min to max) for each group - \item Jittered points showing the distribution of individual observations - \item Groups ordered by median value (highest to lowest, top to bottom) - } +\itemize{ +\item Grey horizontal segments showing the range (min to max) for each group +\item Jittered points showing the distribution of individual observations +\item Groups ordered by median value (highest to lowest, top to bottom) +} } \description{ Produces a ggplot2 visualization showing the range (min to max) and distribution @@ -31,11 +31,11 @@ their median values in descending order. \details{ The function: \itemize{ - \item Computes min, max, and median for each group - \item Handles infinite values by converting them to NA - \item Orders groups by median in descending order - \item Uses hollow circles (shape = 1) for points with 70% transparency - \item Applies minimal theme styling +\item Computes min, max, and median for each group +\item Handles infinite values by converting them to NA +\item Orders groups by median in descending order +\item Uses hollow circles (shape = 1) for points with 70\% transparency +\item Applies minimal theme styling } } \examples{ diff --git a/man/plot_transfer_heatmap.Rd b/man/plot_transfer_heatmap.Rd index 3d03608..73170f8 100644 --- a/man/plot_transfer_heatmap.Rd +++ b/man/plot_transfer_heatmap.Rd @@ -7,7 +7,7 @@ plot_transfer_heatmap(.data) } \arguments{ -\item{.data}{Data frame with `from`, `to` and `transfer` columns.} +\item{.data}{Data frame with \code{from}, \code{to} and \code{transfer} columns.} } \value{ A plotly object. diff --git a/man/plot_transition_network.Rd b/man/plot_transition_network.Rd index 3ec3096..5365078 100644 --- a/man/plot_transition_network.Rd +++ b/man/plot_transition_network.Rd @@ -7,8 +7,8 @@ plot_transition_network(.data) } \arguments{ -\item{.data}{Data frame with `from` and `to` columns, as returned by -[detect_career_transition()].} +\item{.data}{Data frame with \code{from} and \code{to} columns, as returned by +\code{\link[=detect_career_transition]{detect_career_transition()}}.} } \value{ A ggiraph girafe object. diff --git a/man/plot_trend.Rd b/man/plot_trend.Rd index f1320d7..3bb09c8 100644 --- a/man/plot_trend.Rd +++ b/man/plot_trend.Rd @@ -13,25 +13,25 @@ plot_trend( ) } \arguments{ -\item{.data}{Data frame with `ref_date` and the y-axis column, as returned by -[compute_trend_summary()] and optionally [govhr::apply_baseline_index()].} +\item{.data}{Data frame with \code{ref_date} and the y-axis column, as returned by +\code{\link[=compute_trend_summary]{compute_trend_summary()}} and optionally \code{\link[=apply_baseline_index]{apply_baseline_index()}}.} -\item{group_col}{Character. Column to group by, or `"ref_date"` for no +\item{group_col}{Character. Column to group by, or \code{"ref_date"} for no grouping.} \item{toggle_growth}{Logical. Format the y-axis as a baseline index. Default -`FALSE`.} +\code{FALSE}.} -\item{y_col}{Character. Column to plot on the y-axis. Default `"value"`.} +\item{y_col}{Character. Column to plot on the y-axis. Default \code{"value"}.} -\item{y_label}{Character. y-axis label, used when `toggle_growth` is `FALSE`. -Default `"Value"`.} +\item{y_label}{Character. y-axis label, used when \code{toggle_growth} is \code{FALSE}. +Default \code{"Value"}.} } \value{ A ggplot2 object. } \description{ -Draws a line-and-point chart of the measure over `ref_date`, one coloured -series per group. When `toggle_growth` is `TRUE` the y-axis is formatted as a +Draws a line-and-point chart of the measure over \code{ref_date}, one coloured +series per group. When \code{toggle_growth} is \code{TRUE} the y-axis is formatted as a baseline index with a dashed reference line at 100. } diff --git a/man/remove_duplicate_contracts.Rd b/man/remove_duplicate_contracts.Rd index fdbccf7..b4c599a 100644 --- a/man/remove_duplicate_contracts.Rd +++ b/man/remove_duplicate_contracts.Rd @@ -11,23 +11,23 @@ remove_duplicate_contracts( ) } \arguments{ -\item{data}{A data.frame with columns `contract_id`, `personnel_id`, and `ref_date`.} +\item{data}{A data.frame with columns \code{contract_id}, \code{personnel_id}, and \code{ref_date}.} \item{level}{Deduplication scope: \itemize{ - \item `"contract"`: Deduplicate on `contract_id` + `ref_date` - \item `"assignment"`: Deduplicate on `contract_id` + `personnel_id` + `ref_date` +\item \code{"contract"}: Deduplicate on \code{contract_id} + \code{ref_date} +\item \code{"assignment"}: Deduplicate on \code{contract_id} + \code{personnel_id} + \code{ref_date} }} -\item{keep}{Which record to keep: `"first"`, `"last"`, or `"none"`. +\item{keep}{Which record to keep: \code{"first"}, \code{"last"}, or \code{"none"}. See \code{\link{remove_duplicate_personnel}}.} } \value{ A data.frame with duplicates removed. } \description{ -Removes duplicate contract records, addressing violations of `contract_unique_id` -(contract-level) and `contract_unique_personnel` (assignment-level) rules. +Removes duplicate contract records, addressing violations of \code{contract_unique_id} +(contract-level) and \code{contract_unique_personnel} (assignment-level) rules. } \examples{ \dontrun{ diff --git a/man/remove_duplicate_personnel.Rd b/man/remove_duplicate_personnel.Rd index 9aa86bc..07b92df 100644 --- a/man/remove_duplicate_personnel.Rd +++ b/man/remove_duplicate_personnel.Rd @@ -7,17 +7,17 @@ remove_duplicate_personnel(data, keep = c("first", "last", "none")) } \arguments{ -\item{data}{A data.frame with columns `personnel_id` and `ref_date`.} +\item{data}{A data.frame with columns \code{personnel_id} and \code{ref_date}.} -\item{keep}{Which record to keep per duplicate group: `"first"` (default), -`"last"`, or `"none"` (drops all records in a duplicate group).} +\item{keep}{Which record to keep per duplicate group: \code{"first"} (default), +\code{"last"}, or \code{"none"} (drops all records in a duplicate group).} } \value{ A data.frame with duplicates removed. } \description{ -Removes duplicate `personnel_id` + `ref_date` combinations, addressing -violations of the `personnel_unique_id` rule. +Removes duplicate \code{personnel_id} + \code{ref_date} combinations, addressing +violations of the \code{personnel_unique_id} rule. } \examples{ \dontrun{ diff --git a/man/rescale_baseline.Rd b/man/rescale_baseline.Rd index 9e29571..92edd8f 100644 --- a/man/rescale_baseline.Rd +++ b/man/rescale_baseline.Rd @@ -7,17 +7,17 @@ rescale_baseline(data, group) } \arguments{ -\item{data}{A data frame with columns `ref_date` and `value`, as returned by -[compute_time_trend()].} +\item{data}{A data frame with columns \code{ref_date} and \code{value}, as returned by +\code{\link[=compute_time_trend]{compute_time_trend()}}.} -\item{group}{Character string naming the grouping column, or `"ref_date"` for +\item{group}{Character string naming the grouping column, or \code{"ref_date"} for no grouping.} } \value{ -The input data frame with `value` rescaled to a baseline index. +The input data frame with \code{value} rescaled to a baseline index. } \description{ -Rescales the `value` column so that the first observation equals 100, +Rescales the \code{value} column so that the first observation equals 100, producing a baseline index. When a grouping variable is present, the rescaling is applied within each group. } diff --git a/man/roll_snapshot_pairs.Rd b/man/roll_snapshot_pairs.Rd index 36360f5..3c4bf3d 100644 --- a/man/roll_snapshot_pairs.Rd +++ b/man/roll_snapshot_pairs.Rd @@ -24,9 +24,9 @@ skipped.} } \value{ A single \code{data.table} produced by - \code{rbindlist(results, fill = TRUE, use.names = TRUE)} over all - non-\code{NULL} results. Returns an empty \code{data.table()} when all - calls return \code{NULL} or the panel has fewer than two distinct dates. +\code{rbindlist(results, fill = TRUE, use.names = TRUE)} over all +non-\code{NULL} results. Returns an empty \code{data.table()} when all +calls return \code{NULL} or the panel has fewer than two distinct dates. } \description{ Sets a data.table key on \code{date_col} (enabling O(log N) binary-search diff --git a/man/sample_group.Rd b/man/sample_group.Rd index e7496ff..98b6427 100644 --- a/man/sample_group.Rd +++ b/man/sample_group.Rd @@ -15,9 +15,9 @@ sample_group(.data, group, n) number of available groups, all groups are returned.} } \value{ -An object of the same class as `.data` (tibble -> tibble, - data.table -> data.table, data.frame -> data.frame) containing only rows - whose group value was sampled. +An object of the same class as \code{.data} (tibble -> tibble, +data.table -> data.table, data.frame -> data.frame) containing only rows +whose group value was sampled. } \description{ sample_group() randomly samples a specified number of unique values from a diff --git a/man/smooth_decrement_rates.Rd b/man/smooth_decrement_rates.Rd index f3b6a76..ce91904 100644 --- a/man/smooth_decrement_rates.Rd +++ b/man/smooth_decrement_rates.Rd @@ -34,18 +34,18 @@ represents "stayed" rather than an exit. Defaults to \code{"active"}.} } \value{ A data.table with one row per age / \code{group_cols} / - \code{status_col}, spanning the full observed age range within each - group with no gaps: - \describe{ - \item{age_col, group_cols}{As supplied.} - \item{status_col}{The outcome type, including \code{active_value}.} - \item{decrement_rate}{The graduated rate, clipped to \code{[0, 1]}. - Sums to 1 across outcome types for a given age/group (up to the - clamping caveat below).} - } - \code{pop}, \code{exits}, and \code{n_periods} from \code{decrement_dt} - are not carried forward: an interpolated age never had a real headcount, - so those columns would be fabricated rather than meaningful. +\code{status_col}, spanning the full observed age range within each +group with no gaps: +\describe{ +\item{age_col, group_cols}{As supplied.} +\item{status_col}{The outcome type, including \code{active_value}.} +\item{decrement_rate}{The graduated rate, clipped to \code{[0, 1]}. +Sums to 1 across outcome types for a given age/group (up to the +clamping caveat below).} +} +\code{pop}, \code{exits}, and \code{n_periods} from \code{decrement_dt} +are not carried forward: an interpolated age never had a real headcount, +so those columns would be fabricated rather than meaningful. } \description{ Takes the pooled output of \code{estimate_decrement_rates()} and returns a @@ -78,5 +78,5 @@ that is not further corrected. } \seealso{ \code{\link{.smooth_rate_curve}}, \code{\link{estimate_decrement_rates}}, - \code{\link{compute_service_table}} +\code{\link{compute_service_table}} } diff --git a/man/social_sustainability.Rd b/man/social_sustainability.Rd index 579dced..34aaad0 100644 --- a/man/social_sustainability.Rd +++ b/man/social_sustainability.Rd @@ -7,9 +7,9 @@ \format{ A data frame with 195 rows and 3 variables: \describe{ - \item{\code{country_code}}{character World Bank country code.} - \item{\code{year}}{numeric Year.} - \item{\code{confidence_in_gov}}{numeric Percentage of population with confidence in government.} +\item{\code{country_code}}{character World Bank country code.} +\item{\code{year}}{numeric Year.} +\item{\code{confidence_in_gov}}{numeric Percentage of population with confidence in government.} } } \source{ @@ -20,6 +20,6 @@ World Bank social_sustainability } \description{ -The Social Sustainability global database and its visualization dashboard are global public goods produced by the Social Development Global Practice of The World Bank Group. They feature leading indicators of inclusion, resilience, social cohesion, and process legitimacy, for 222 countries, disaggregated by population group and analyzed spatially and over time. In addition, the dashboard allows the user to overlay the indicators in the geospatial platform of the World Bank Group. +The Social Sustainability global database and its visualization dashboard \url{https://public.tableau.com/app/profile/social.sustainability.and.inclusion.world.bank/viz/SocialSustainabilityGlobalDashboard2_0/Historia1?publish=yes/} are global public goods produced by the Social Development Global Practice of The World Bank Group. They feature leading indicators of inclusion, resilience, social cohesion, and process legitimacy, for 222 countries, disaggregated by population group and analyzed spatially and over time. In addition, the dashboard allows the user to overlay the indicators in the geospatial platform of the World Bank Group. } \keyword{datasets} diff --git a/man/validate_data.Rd b/man/validate_data.Rd index d498a22..f262657 100644 --- a/man/validate_data.Rd +++ b/man/validate_data.Rd @@ -18,12 +18,12 @@ ignored. The function now always returns \code{list(report, violations)}.} \value{ A named list: \describe{ - \item{\code{report}}{data.table with columns \code{Rule}, - \code{Description}, \code{Total Records}, \code{Passes}, - \code{Pass Rate}, \code{Fails}, \code{Errors}.} - \item{\code{violations}}{Named list of data.tables, one per rule label. - Each element contains the rows of \code{data} that failed that rule. - Rules with zero failures return a zero-row data.table.} +\item{\code{report}}{data.table with columns \code{Rule}, +\code{Description}, \code{Total Records}, \code{Passes}, +\code{Pass Rate}, \code{Fails}, \code{Errors}.} +\item{\code{violations}}{Named list of data.tables, one per rule label. +Each element contains the rows of \code{data} that failed that rule. +Rules with zero failures return a zero-row data.table.} } } \description{ diff --git a/man/wwbi.Rd b/man/wwbi.Rd index 78ecd31..b4fccbb 100644 --- a/man/wwbi.Rd +++ b/man/wwbi.Rd @@ -7,31 +7,31 @@ \format{ A data frame with 993 rows and 11 variables: \describe{ - \item{\code{country_code}}{character World Bank country code.} - \item{\code{year}}{double Year.} - \item{\code{share_no_edu}}{double Share of public sector personnel with no education.} - \item{\code{share_primary_edu}}{double Share of public sector personnel with primary education completed.} - \item{\code{share_secondary_edu}}{double Share of public sector personnel with secondary education completed.} - \item{\code{share_tertiary_edu}}{double Share of public sector personnel with tertiary education completed.} - \item{\code{ps_wage_premium_edu_sector}}{double Public sector wage premium in the education sector, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_hea_sector}}{double Public sector wage premium in the health sector, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_female}}{double Public sector wage premium for female personnel, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_male}}{double Public sector wage premium for male personnel, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_pooled}}{double Public sector wage premium for all public sector personnel, compared to formal wage employees in the private sector.} - \item{\code{ps_share_total_emp}}{double Public sector employment, as a share of total employment} - \item{\code{ps_share_paid_emp}}{double Public sector employment, as a share of paid employment} - \item{\code{ps_share_formal_emp}}{double Public sector employment, as a share of formal employment} - \item{\code{ps_wage_premium_isced_n}}{double Public sector wage premium for personnel with no education, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_isced_1}}{double Public sector wage premium for personnel with primary education completed, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_isced_2_3}}{double Public sector wage premium for personnel with secondary education completed, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_isced_5t8}}{double Public sector wage premium for personnel with tertiary education completed, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_clerk}}{double Public sector wage premium for personnel in clerical support occupations, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_elementary}}{double Public sector wage premium for personnel in elementary occupations, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_professional}}{double Public sector wage premium for personnel in professional occupations, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_manager}}{double Public sector wage premium for personnel in managerial occupations, compared to formal wage employees in the private sector.} - \item{\code{ps_wage_premium_technical}}{double Public sector wage premium for personnel in technical and associate professional occupations, compared to formal wage employees in the private sector.} - \item{\code{ps_wagebill_share_gdp}}{double Public sector wage bill, as a share of GDP.} - \item{\code{ps_wagebill_share_expenditure}}{double Public sector wage bill, as a share of total government expenditure.} +\item{\code{country_code}}{character World Bank country code.} +\item{\code{year}}{double Year.} +\item{\code{share_no_edu}}{double Share of public sector personnel with no education.} +\item{\code{share_primary_edu}}{double Share of public sector personnel with primary education completed.} +\item{\code{share_secondary_edu}}{double Share of public sector personnel with secondary education completed.} +\item{\code{share_tertiary_edu}}{double Share of public sector personnel with tertiary education completed.} +\item{\code{ps_wage_premium_edu_sector}}{double Public sector wage premium in the education sector, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_hea_sector}}{double Public sector wage premium in the health sector, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_female}}{double Public sector wage premium for female personnel, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_male}}{double Public sector wage premium for male personnel, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_pooled}}{double Public sector wage premium for all public sector personnel, compared to formal wage employees in the private sector.} +\item{\code{ps_share_total_emp}}{double Public sector employment, as a share of total employment} +\item{\code{ps_share_paid_emp}}{double Public sector employment, as a share of paid employment} +\item{\code{ps_share_formal_emp}}{double Public sector employment, as a share of formal employment} +\item{\code{ps_wage_premium_isced_n}}{double Public sector wage premium for personnel with no education, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_isced_1}}{double Public sector wage premium for personnel with primary education completed, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_isced_2_3}}{double Public sector wage premium for personnel with secondary education completed, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_isced_5t8}}{double Public sector wage premium for personnel with tertiary education completed, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_clerk}}{double Public sector wage premium for personnel in clerical support occupations, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_elementary}}{double Public sector wage premium for personnel in elementary occupations, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_professional}}{double Public sector wage premium for personnel in professional occupations, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_manager}}{double Public sector wage premium for personnel in managerial occupations, compared to formal wage employees in the private sector.} +\item{\code{ps_wage_premium_technical}}{double Public sector wage premium for personnel in technical and associate professional occupations, compared to formal wage employees in the private sector.} +\item{\code{ps_wagebill_share_gdp}}{double Public sector wage bill, as a share of GDP.} +\item{\code{ps_wagebill_share_expenditure}}{double Public sector wage bill, as a share of total government expenditure.} } } \source{ From 9d850d3c77f92be96ebe8343f1e276766b7404af Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:38:47 -0400 Subject: [PATCH 17/23] rename the .data argument to data The tidyverse reserves a dotted `.data` for functions that also take `...`, so user column names cannot collide with the argument. Only 3 of 73 functions here take `...`, and they straddled both conventions, so the 37/36 split between `data` and `.data` tracked nothing. Rename `.data` to `data` on the 34 functions without `...`, and give ggplot_point_line() the dotted name it should have had. compute_baseline_index() and fastprop() keep `.data`. `.data` is also the rlang pronoun, so the rename was driven off getParseData() token positions rather than text matching: 104 argument references were renamed and 97 pronoun uses inside data-masked calls (aes(), vars(), dplyr verbs) were left alone. The data argument of a masking call is not itself masked, which is what made `fastcount(.data, ...)` and `dplyr::filter(.data, ...)` argument references rather than pronouns. Tests: 596 pass, 0 failures. Co-Authored-By: Claude Opus 5 --- R/coverage.R | 6 +- R/equity.R | 18 ++--- R/growth_decomposition.R | 14 ++-- R/harmonization.R | 16 ++--- R/movement.R | 34 +++++----- R/overview.R | 52 +++++++-------- R/plots.R | 66 +++++++++---------- R/retirement.R | 10 +-- R/summarize.R | 42 ++++++------ R/transition.R | 26 ++++---- R/zzz.R | 1 + man/apply_baseline_index.Rd | 4 +- man/classify_personnel_event.Rd | 4 +- man/compute_baseline_index.Rd | 4 +- man/compute_compression_ratio.Rd | 4 +- man/compute_coverage.Rd | 4 +- man/compute_cross_section.Rd | 4 +- man/compute_cross_section_summary.Rd | 4 +- man/compute_decile.Rd | 4 +- man/compute_density.Rd | 4 +- man/compute_growth.Rd | 4 +- man/compute_growth_decomposition.Rd | 4 +- man/compute_growth_summary.Rd | 4 +- man/compute_movement_cost.Rd | 4 +- man/compute_percentile.Rd | 4 +- man/compute_quantile.Rd | 4 +- man/compute_time_trend.Rd | 4 +- man/compute_trend_summary.Rd | 4 +- man/compute_workforce_movement.Rd | 4 +- man/count_entity.Rd | 4 +- man/detect_career_transition.Rd | 4 +- man/fastprop.Rd | 4 +- man/ggplot_point_line.Rd | 4 +- man/ggplot_segment.Rd | 4 +- man/guess_date_frequency.Rd | 4 +- man/plot_bar_growth.Rd | 4 +- man/plot_bar_total.Rd | 4 +- man/plot_compression_ratio.Rd | 4 +- man/plot_decile.Rd | 4 +- man/plot_histogram.Rd | 4 +- man/plot_movement.Rd | 4 +- man/plot_movement_cost.Rd | 4 +- man/plot_segment.Rd | 4 +- man/plot_transfer_heatmap.Rd | 4 +- man/plot_transition_network.Rd | 4 +- man/plot_trend.Rd | 4 +- man/project_retirement.Rd | 4 +- man/sample_group.Rd | 4 +- man/scale_plot_height.Rd | 4 +- .../test-compute_workforce_movement.R | 12 ++-- tests/testthat/test-movement.R | 8 +-- 51 files changed, 229 insertions(+), 228 deletions(-) diff --git a/R/coverage.R b/R/coverage.R index f900287..da380ac 100644 --- a/R/coverage.R +++ b/R/coverage.R @@ -1,6 +1,6 @@ #' Compute coverage of non-missing values in a dataset. #' -#' @param .data A data frame. +#' @param data A data frame. #' @param group A character string specifying the column name to group by. If NULL, coverage is computed for the entire data set. #' @param include_ref_date A logical value indicating whether to include the `ref_date` column in the grouping. #' @param aggregate A logical value indicating whether to aggregate coverage values by the `group`. @@ -12,12 +12,12 @@ #' #' @export compute_coverage <- function( - .data, + data, group = NULL, include_ref_date = FALSE, aggregate = FALSE ) { - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) data_cols <- colnames(dt) if (include_ref_date) { diff --git a/R/equity.R b/R/equity.R index 5c58e71..8be2589 100644 --- a/R/equity.R +++ b/R/equity.R @@ -3,7 +3,7 @@ #' Assigns rows to deciles of `measure_col` within each group and reference #' date, then reports the median and mean of the measure in each decile. #' -#' @param .data Data frame containing a `ref_date` column and the measure. +#' @param data Data frame containing a `ref_date` column and the measure. #' @param group_cols Character vector of columns to group by, or `NULL` for no #' grouping. #' @param measure_col Character. Numeric column to rank into deciles. @@ -18,12 +18,12 @@ #' @importFrom stats median #' @export compute_decile <- function( - .data, + data, group_cols = NULL, measure_col, latest_measure = FALSE ) { - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) by_cols <- if (latest_measure) { group_cols @@ -57,7 +57,7 @@ compute_decile <- function( #' cumulative share of observations, filling empty bins with zero so the #' distribution is gap-free. #' -#' @param .data Data frame containing a `ref_date` column and the measure. +#' @param data Data frame containing a `ref_date` column and the measure. #' @param group_col Character. Column to group by, or `NULL` for no grouping. #' @param measure_col Character. Numeric column to bin. #' @param binwidth Numeric. Width of each bin. Default `1`. @@ -71,17 +71,17 @@ compute_decile <- function( #' @keywords internal #' @export compute_percentile <- function( - .data, + data, group_col = NULL, measure_col, binwidth = 1, latest_measure = FALSE ) { if (latest_measure) { - .data <- .data[.data[["ref_date"]] == max(.data[["ref_date"]]), ] + data <- data[data[["ref_date"]] == max(data[["ref_date"]]), ] } - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) dt[, bin := floor(get(measure_col) / binwidth) * binwidth] dt <- dt[!is.na(bin)] @@ -122,13 +122,13 @@ compute_percentile <- function( compute_compression_ratio <- function( - .data, + data, group_cols = NULL, percentiles = c(0.9, 0.5, 0.1), measure_col ) { # consider generalizing this function to compute any percentile, not just 90th, 50th, and 10th - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) by_cols <- group_cols diff --git a/R/growth_decomposition.R b/R/growth_decomposition.R index 2a8b60b..e6ec444 100644 --- a/R/growth_decomposition.R +++ b/R/growth_decomposition.R @@ -1,6 +1,6 @@ #' Compute growth decomposition of wagebill #' -#' @param .data A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary). +#' @param data A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary). #' @param group_cols A character vector specifying the names of the columns to group by. #' @param measure_col A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu"). #' @@ -20,11 +20,11 @@ #' @importFrom tidyr complete nesting #' @export compute_growth_decomposition <- function( - .data, + data, group_cols = NULL, measure_col = "gross_salary_lcu" ) { - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) if (!is.null(group_cols)) { keep <- rowSums(is.na(dt[, ..group_cols])) == 0 @@ -45,9 +45,9 @@ compute_growth_decomposition <- function( summary_table[, is_observed := TRUE] - min_date <- min(.data$ref_date) - max_date <- max(.data$ref_date) - date_interval <- guess_date_frequency(.data) + min_date <- min(data$ref_date) + max_date <- max(data$ref_date) + date_interval <- guess_date_frequency(data) # explicit date sequence (not just observed dates) so a period missing # for EVERY group still gets a row, rather than silently vanishing @@ -232,4 +232,4 @@ compute_wage_decomposition <- function(growth_decomp, group_cols = NULL) { )] period_decomp[] -} \ No newline at end of file +} diff --git a/R/harmonization.R b/R/harmonization.R index 6985e3e..449a5cf 100644 --- a/R/harmonization.R +++ b/R/harmonization.R @@ -645,7 +645,7 @@ classify_text <- function( #' sample_group() randomly samples a specified number of unique values from a #' grouping column and returns all rows belonging to the sampled groups. #' -#' @param .data A data.frame, tibble, or data.table. +#' @param data A data.frame, tibble, or data.table. #' @param group Unquoted column name used to define groups. #' @param n Integer; number of distinct groups to sample. If greater than the #' number of available groups, all groups are returned. @@ -662,8 +662,8 @@ classify_text <- function( #' @importFrom data.table as.data.table is.data.table #' @importFrom rlang ensym as_string #' @importFrom tibble is_tibble as_tibble -sample_group <- function(.data, group, n) { - dt <- data.table::as.data.table(.data) +sample_group <- function(data, group, n) { + dt <- data.table::as.data.table(data) group_sym <- rlang::ensym(group) group_col <- rlang::as_string(group_sym) @@ -678,9 +678,9 @@ sample_group <- function(.data, group, n) { res_dt <- dt[get(group_col) %in% sampled_vals] # return in same "type" the user passed: tibble -> tibble, data.frame -> data.frame, data.table -> data.table - if (tibble::is_tibble(.data)) { + if (tibble::is_tibble(data)) { tibble::as_tibble(res_dt) - } else if (data.table::is.data.table(.data)) { + } else if (data.table::is.data.table(data)) { res_dt } else { as.data.frame(res_dt) @@ -742,7 +742,7 @@ convert_data <- function(data, data_original) { #' string representing the data's reporting interval (e.g., "year", "month"). #' The function calculates the median day difference between consecutive dates. #' -#' @param .data A dataset containing a column named \code{ref_date} with date values. +#' @param data A dataset containing a column named \code{ref_date} with date values. #' #' @return A single character scalar: \code{"year"}, \code{"quarter"}, #' \code{"month"}, \code{"week"}, or \code{"day"}. @@ -758,8 +758,8 @@ convert_data <- function(data, data_original) { #' guess_date_frequency(data) #' #> [1] "month" #' @importFrom stats median -guess_date_frequency <- function(.data) { - ref_date <- .data[["ref_date"]] |> +guess_date_frequency <- function(data) { + ref_date <- data[["ref_date"]] |> unique() |> sort() diff --git a/R/movement.R b/R/movement.R index 383bdd6..d3f48ec 100644 --- a/R/movement.R +++ b/R/movement.R @@ -162,7 +162,7 @@ detect_retirement <- function(data) { #' #' This function classifies the personnel module into three types of movements: hires, fires, or retirements. #' -#' @param .data A data frame containing personnel data. +#' @param data A data frame containing personnel data. #' @param id_col The name of the column representing personnel IDs. #' @param event_type The type of movement to classify (e.g., "hire", "fire", and "retirement"). #' @param start_date The start date for the classification period. @@ -177,7 +177,7 @@ detect_retirement <- function(data) { #' #' @export classify_personnel_event <- function( - .data, + data, id_col, event_type, start_date, @@ -187,7 +187,7 @@ classify_personnel_event <- function( ) { if (event_type %in% c("hire", "fire")) { personnel_event <- detect_personnel_event( - data = .data, + data = data, event_type = event_type, id_col = id_col, start_date = start_date, @@ -196,15 +196,15 @@ classify_personnel_event <- function( freq = freq ) } else if (event_type == "retirement") { - personnel_event <- detect_retirement(.data) + personnel_event <- detect_retirement(data) } - .data <- data.table::copy(setDT(.data)) + data <- data.table::copy(setDT(data)) personnel_event <- data.table::setDT(personnel_event) - .data[personnel_event, on = c(id_col, "ref_date"), type_event := i.type_event] + data[personnel_event, on = c(id_col, "ref_date"), type_event := i.type_event] - .data[, + data[, type_event := fcase( type_event == "hire" , "hire" , type_event == "fire" , "fire" , @@ -219,17 +219,17 @@ classify_personnel_event <- function( end_ref_date <- lubridate::ymd(end_date) if (event_type == "hire") { - .data <- .data[ref_date > start_ref_date] + data <- data[ref_date > start_ref_date] } else if (event_type == "fire") { - .data <- .data[ref_date < end_ref_date] + data <- data[ref_date < end_ref_date] } - .data[] + data[] } #' Function to compute the total cost associated with personnel movements. #' -#' @param .data A data frame containing the data to be processed. +#' @param data A data frame containing the data to be processed. #' @param id_col The name of the column representing personnel IDs (default is "personnel_id"). #' @param event_type A character vector indicating which movement event(s) to include (e.g., "hire", "fire", "retirement"). Multiple types can be supplied to compute costs for each type. #' @param start_date The start date for the classification period. Defaults to the minimum reference date found in `.data`. @@ -245,7 +245,7 @@ classify_personnel_event <- function( #' @export #' @return A data frame containing the movement cost for each requested event type within the specified groups and reference dates. compute_movement_cost <- function( - .data, + data, id_col = "personnel_id", event_type, start_date = NULL, @@ -256,7 +256,7 @@ compute_movement_cost <- function( group_cols = NULL, latest_measure = FALSE ) { - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) if (is.null(start_date)) { start_date <- as.character(min(dt[["ref_date"]])) @@ -274,7 +274,7 @@ compute_movement_cost <- function( lapply(event_type, function(type) { # classify personnel events classified <- classify_personnel_event( - .data = dt, + data = dt, id_col = id_col, event_type = type, start_date = start_date, @@ -309,7 +309,7 @@ compute_movement_cost <- function( #' Function to compute workforce movement for hires, fires, retirement, or turnover #' -#' @param .data A data frame containing personnel data. +#' @param data A data frame containing personnel data. #' @param movement_type A character string indicating the type of movement: "hire", "fire", "retirement", or "turnover". #' @param measurement_type A character string indicating the measurement type: "count" or "rate". Ignored for turnover, which is a ratio. #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. @@ -321,12 +321,12 @@ compute_movement_cost <- function( #' @details The function computes workforce movement counts or rates, based on the specified movement type. For hires, fires, and retirements, it calculates either the count or rate of events. For turnover, it calculates the ratio of hires to separations (including retirements). The data is grouped by the specified columns. #' @export compute_workforce_movement <- function( - .data, + data, movement_type, measurement_type, group_cols ) { - dt <- as.data.table(.data) + dt <- as.data.table(data) min_date <- as.character(min(dt[["ref_date"]])) max_date <- as.character(max(dt[["ref_date"]])) diff --git a/R/overview.R b/R/overview.R index c8c3419..4ddcdbb 100644 --- a/R/overview.R +++ b/R/overview.R @@ -1,7 +1,7 @@ #' Count Unique Entities by Group #' -#' @param .data Data frame containing the data. +#' @param data Data frame containing the data. #' @param id_col Character. Column name of the unique identifier for the entity. #' @param group_cols Character vector of column names to group by, or `NULL` for no grouping. #' @@ -9,8 +9,8 @@ #' #' @importFrom data.table as.data.table uniqueN setorderv #' @export -count_entity <- function(.data, id_col, group_cols = NULL){ - dt <- data.table::as.data.table(.data) +count_entity <- function(data, id_col, group_cols = NULL){ + dt <- data.table::as.data.table(data) out <- dt[ !is.na(get(id_col)), @@ -32,7 +32,7 @@ count_entity <- function(.data, id_col, group_cols = NULL){ #' grouping column, and `value`. Counts rows when `measure_col` is `NULL` #' (headcount) and sums the column otherwise (wage bill). #' -#' @param .data Data frame containing at least a `ref_date` column. +#' @param data Data frame containing at least a `ref_date` column. #' @param group_col Character. Column to group by, or `"ref_date"` for no #' grouping. #' @param measure_col Character. Numeric column to sum, or `NULL` to count rows. @@ -41,14 +41,14 @@ count_entity <- function(.data, id_col, group_cols = NULL){ #' #' @importFrom dplyr across all_of #' @export -compute_trend_summary <- function(.data, group_col, measure_col = NULL) { +compute_trend_summary <- function(data, group_col, measure_col = NULL) { groups <- if (group_col == "ref_date") "ref_date" else c("ref_date", group_col) if (is.null(measure_col)) { - fastcount(.data, dplyr::across(dplyr::all_of(groups)), name = "value") + fastcount(data, dplyr::across(dplyr::all_of(groups)), name = "value") } else { compute_fastsummary( - .data, + data, cols = measure_col, fns = "sum", groups = groups @@ -61,7 +61,7 @@ compute_trend_summary <- function(.data, group_col, measure_col = NULL) { #' Rescales `value` so the earliest observation equals 100. When a grouping #' column is supplied the rescaling is applied independently within each group. #' -#' @param .data Data frame with `ref_date` and `value`, as returned by +#' @param data Data frame with `ref_date` and `value`, as returned by #' [compute_trend_summary()]. #' @param group_col Character. Column to group by, or `"ref_date"` for no #' grouping. @@ -70,8 +70,8 @@ compute_trend_summary <- function(.data, group_col, measure_col = NULL) { #' #' @importFrom dplyr arrange mutate all_of first #' @export -apply_baseline_index <- function(.data, group_col) { - indexed <- dplyr::arrange(.data, .data[["ref_date"]]) +apply_baseline_index <- function(data, group_col) { + indexed <- dplyr::arrange(data, .data[["ref_date"]]) if (group_col == "ref_date") { dplyr::mutate( @@ -93,7 +93,7 @@ apply_baseline_index <- function(.data, group_col) { #' `value` per group. Counts rows when `measure_col` is `NULL` (headcount) and #' sums the column otherwise (wage bill). #' -#' @param .data Data frame containing `ref_date` and the grouping column. +#' @param data Data frame containing `ref_date` and the grouping column. #' @param group_col Character. Column to group by. #' @param measure_col Character. Numeric column to sum, or `NULL` to count rows. #' @@ -101,10 +101,10 @@ apply_baseline_index <- function(.data, group_col) { #' #' @importFrom dplyr all_of filter n summarise #' @export -compute_cross_section_summary <- function(.data, group_col, measure_col = NULL) { +compute_cross_section_summary <- function(data, group_col, measure_col = NULL) { # only consider each group's latest reference date data_latest <- dplyr::filter( - .data, + data, .data[["ref_date"]] == max(.data[["ref_date"]]), .by = dplyr::all_of(group_col) ) @@ -131,7 +131,7 @@ compute_cross_section_summary <- function(.data, group_col, measure_col = NULL) #' change between them. Counts rows when `measure_col` is `NULL` (headcount) and #' sums the column otherwise (wage bill). #' -#' @param .data Data frame containing `ref_date` and the grouping column. +#' @param data Data frame containing `ref_date` and the grouping column. #' @param group_col Character. Column to group by. #' @param measure_col Character. Numeric column to sum, or `NULL` to count rows. #' @@ -140,8 +140,8 @@ compute_cross_section_summary <- function(.data, group_col, measure_col = NULL) #' #' @importFrom dplyr all_of arrange filter first last n summarise #' @export -compute_growth_summary <- function(.data, group_col, measure_col = NULL) { - labelled <- dplyr::filter(.data, !is.na(.data[[group_col]])) +compute_growth_summary <- function(data, group_col, measure_col = NULL) { + labelled <- dplyr::filter(data, !is.na(.data[[group_col]])) # aggregate every period once; picking endpoints out of the (small) aggregate # is cheaper than scanning the raw rows for each group's first and last date @@ -206,7 +206,7 @@ group_color_scale <- function(values) { #' series per group. When `toggle_growth` is `TRUE` the y-axis is formatted as a #' baseline index with a dashed reference line at 100. #' -#' @param .data Data frame with `ref_date` and the y-axis column, as returned by +#' @param data Data frame with `ref_date` and the y-axis column, as returned by #' [compute_trend_summary()] and optionally [govhr::apply_baseline_index()]. #' @param group_col Character. Column to group by, or `"ref_date"` for no #' grouping. @@ -222,13 +222,13 @@ group_color_scale <- function(values) { #' @importFrom scales cut_short_scale label_number #' @export plot_trend <- function( - .data, + data, group_col, toggle_growth = FALSE, y_col = "value", y_label = "Value" ) { - plot <- .data |> + plot <- data |> ggplot2::ggplot( ggplot2::aes(x = .data[["ref_date"]], y = .data[[y_col]]) ) + @@ -242,7 +242,7 @@ plot_trend <- function( color = .data[[group_col]], group = .data[[group_col]] ) + - group_color_scale(.data[[group_col]]) + group_color_scale(data[[group_col]]) } if (toggle_growth) { @@ -266,7 +266,7 @@ plot_trend <- function( #' Draws a horizontal bar chart with groups ordered by the plotted value. Rows #' missing either the value or the group label are dropped. #' -#' @param .data Data frame with the grouping column and the x-axis column, as +#' @param data Data frame with the grouping column and the x-axis column, as #' returned by [compute_cross_section_summary()]. #' @param group_col Character. Column to group by. #' @param x_col Character. Column to plot on the x-axis. Default `"value"`. @@ -280,8 +280,8 @@ plot_trend <- function( #' @importFrom stats reorder #' @importFrom stringr str_wrap #' @export -plot_bar_total <- function(.data, group_col, x_col = "value", x_label = "Value") { - .data |> +plot_bar_total <- function(data, group_col, x_col = "value", x_label = "Value") { + data |> dplyr::filter( !is.na(.data[[x_col]]) & !is.na(.data[[group_col]]) ) |> @@ -307,7 +307,7 @@ plot_bar_total <- function(.data, group_col, x_col = "value", x_label = "Value") #' Draws a horizontal bar chart with groups ordered by `growth_rate`, with a #' dashed reference line at zero separating growth from decline. #' -#' @param .data Data frame with the grouping column and a `growth_rate` column, +#' @param data Data frame with the grouping column and a `growth_rate` column, #' as returned by [compute_growth_summary()]. #' @param group_col Character. Column to group by. #' @@ -318,8 +318,8 @@ plot_bar_total <- function(.data, group_col, x_col = "value", x_label = "Value") #' @importFrom stats reorder #' @importFrom stringr str_wrap #' @export -plot_bar_growth <- function(.data, group_col) { - .data |> +plot_bar_growth <- function(data, group_col) { + data |> ggplot2::ggplot( ggplot2::aes( x = .data[["growth_rate"]], diff --git a/R/plots.R b/R/plots.R index 688e3d3..fba5980 100644 --- a/R/plots.R +++ b/R/plots.R @@ -2,13 +2,13 @@ #' #' Scales chart height with the number of bars so category labels stay legible. #' -#' @param .data Data frame in which each row becomes one bar. +#' @param data Data frame in which each row becomes one bar. #' #' @return Numeric height in pixels, never below 350. #' #' @export -scale_plot_height <- function(.data) { - max(350, nrow(.data) * 35 + 100) +scale_plot_height <- function(data) { + max(350, nrow(data) * 35 + 100) } #' Plot grouped line chart with labeled points @@ -16,7 +16,7 @@ scale_plot_height <- function(.data) { #' This function creates a line plot with labeled points, showing how a variable #' (y) evolves along another variable (x). #' -#' @param data A data frame or tibble containing the variables to plot. +#' @param .data A data frame or tibble containing the variables to plot. #' @param x Column to be mapped to the x-axis. #' @param y Column to be mapped to the y-axis. #' @param group Column specifying the grouping variable (mapped to color). @@ -43,9 +43,9 @@ scale_plot_height <- function(.data) { #' @importFrom scales pretty_breaks #' #' @export -ggplot_point_line <- function(data, x, y, group = NULL, label = NULL, ...) { +ggplot_point_line <- function(.data, x, y, group = NULL, label = NULL, ...) { plot <- ggplot( - data, + .data, aes(x = {{ x }}, y = {{ y }}, color = {{ group }}, ...) ) + geom_line(linewidth = 3) + @@ -86,7 +86,7 @@ ggplot_point_line <- function(data, x, y, group = NULL, label = NULL, ...) { #' segment per group with individual points overlaid. Groups are #' ordered from highest median to lowest. #' -#' @param .data A data.frame or tibble. +#' @param data A data.frame or tibble. #' @param col Unquoted numeric column (values). #' @param group Unquoted grouping column. #' @@ -102,14 +102,14 @@ ggplot_point_line <- function(data, x, y, group = NULL, label = NULL, ...) { #' @importFrom dplyr group_by summarise mutate arrange pull desc #' @importFrom ggplot2 ggplot geom_segment geom_point scale_y_discrete labs theme_minimal #' @importFrom stats median -ggplot_segment <- function(.data, col, group) { +ggplot_segment <- function(data, col, group) { colq <- rlang::enquo(col) gq <- rlang::enquo(group) col_name <- rlang::as_label(colq) g_name <- rlang::as_label(gq) - df <- .data + df <- data summary_df <- df |> dtplyr::lazy_dt() |> @@ -210,7 +210,7 @@ ggplot_coef <- function(model, coef) { #' of values for a numeric variable across different groups. Groups are ordered by #' their median values in descending order. #' -#' @param .data A data frame containing the variables to plot. +#' @param data A data frame containing the variables to plot. #' @param col Character string specifying the name of the numeric column to plot #' on the x-axis. #' @param group Character string specifying the name of the grouping column for @@ -241,8 +241,8 @@ ggplot_coef <- function(model, coef) { #' @importFrom tibble tibble #' #' @export -plot_segment <- function(.data, col, group) { - df <- .data +plot_segment <- function(data, col, group) { + df <- data # Calculate summary statistics using .data[[]] summary_df <- df |> @@ -308,7 +308,7 @@ plot_segment <- function(.data, col, group) { #' Plot Personnel Movement Over Time #' -#' @param .data A data frame containing the movement data with columns `ref_date`, `indicator`, and optionally a grouping column. +#' @param data A data frame containing the movement data with columns `ref_date`, `indicator`, and optionally a grouping column. #' @param movement_type A character string indicating the type of movement: "hire", "fire", or "turnover". #' @param measurement_type A character string indicating the measurement type: "count" or "rate". #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. @@ -320,8 +320,8 @@ plot_segment <- function(.data, col, group) { #' @importFrom grDevices colorRampPalette #' #' @export -plot_movement <- function(.data, movement_type, measurement_type, group_cols) { - plot <- .data |> +plot_movement <- function(data, movement_type, measurement_type, group_cols) { + plot <- data |> ggplot( aes(.data[["ref_date"]], .data[["indicator"]]) ) + @@ -334,7 +334,7 @@ plot_movement <- function(.data, movement_type, measurement_type, group_cols) { if (group_cols != "ref_date") { n_groups <- dplyr::n_distinct( - .data[[group_cols]], + data[[group_cols]], na.rm = TRUE ) orange_palette <- colorRampPalette(c("#C34729", "#F5C6A0"))(n_groups) @@ -367,9 +367,9 @@ plot_movement <- function(.data, movement_type, measurement_type, group_cols) { ) + ggplot2::annotate( "text", - x = as.Date(max(.data[["ref_date"]])) - - (as.Date(max(.data[["ref_date"]])) - - as.Date(min(.data[["ref_date"]]))) * + x = as.Date(max(data[["ref_date"]])) - + (as.Date(max(data[["ref_date"]])) - + as.Date(min(data[["ref_date"]]))) * 0.05, y = 1.15, label = "Replacement rate = 1", @@ -385,7 +385,7 @@ plot_movement <- function(.data, movement_type, measurement_type, group_cols) { #' Plot Decile Summary #' -#' @param .data A data frame produced by `compute_decile()`, containing columns `decile`, `mean_value`, and optionally a grouping column. +#' @param data A data frame produced by `compute_decile()`, containing columns `decile`, `mean_value`, and optionally a grouping column. #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' #' @return A ggplot2 object representing the decile summary. @@ -401,8 +401,8 @@ plot_movement <- function(.data, movement_type, measurement_type, group_cols) { #' group_cols = "paygrade" #' ) |> #' govhr::plot_decile(group_cols = "paygrade") -plot_decile <- function(.data, group_cols) { - plot <- .data |> +plot_decile <- function(data, group_cols) { + plot <- data |> ggplot2::ggplot( ggplot2::aes(x = .data[["decile"]], y = .data[["mean_value"]]) ) + @@ -440,7 +440,7 @@ plot_decile <- function(.data, group_cols) { #' Plot Density as Percentage Share #' -#' @param .data A data frame produced by `compute_histogram()` or `compute_cumulative()`, containing columns `bin`, `pct`, and optionally a grouping column. +#' @param data A data frame produced by `compute_histogram()` or `compute_cumulative()`, containing columns `bin`, `pct`, and optionally a grouping column. #' @param plot_type A character string indicating the type of plot: "histogram" or "cumulative". #' @param group_col The column name to group by. #' @@ -449,7 +449,7 @@ plot_decile <- function(.data, group_cols) { #' #' @return A ggplot2 object. #' @export -plot_histogram <- function(.data, plot_type = "histogram", group_col = NULL) { +plot_histogram <- function(data, plot_type = "histogram", group_col = NULL) { plot_type <- match.arg(plot_type, c("histogram", "cumulative")) y_var <- switch( @@ -458,7 +458,7 @@ plot_histogram <- function(.data, plot_type = "histogram", group_col = NULL) { cumulative = "cum_pct" ) - plot <- .data |> + plot <- data |> ggplot2::ggplot(ggplot2::aes(x = bin, y = .data[[y_var]])) + ggplot2::geom_col() + ggplot2::scale_y_continuous(labels = scales::label_percent()) + @@ -477,7 +477,7 @@ plot_histogram <- function(.data, plot_type = "histogram", group_col = NULL) { #' Plot Compression Ratio #' -#' @param .data A data frame containing the compression ratio data produced by `compute_compression_ratio()`. +#' @param data A data frame containing the compression ratio data produced by `compute_compression_ratio()`. #' @param group_cols A character vector of columns to group by, or `"ref_date"` #' for no grouping. #' @@ -488,12 +488,12 @@ plot_histogram <- function(.data, plot_type = "histogram", group_col = NULL) { #' @importFrom grDevices colorRampPalette #' #' @export -plot_compression_ratio <- function(.data, group_cols = NULL) { +plot_compression_ratio <- function(data, group_cols = NULL) { group_cols <- if (is.null(group_cols)) "ref_date" else group_cols # plot as a line range between percentile_10 and percentile_90, with a point at percentile_50 # and the y-axis is the group_cols, and the x-axis is the percentile values - plot <- .data |> + plot <- data |> ggplot2::ggplot( ggplot2::aes( x = .data[["percentile_50"]], @@ -516,7 +516,7 @@ plot_compression_ratio <- function(.data, group_cols = NULL) { if (group_cols != "ref_date") { n_groups <- dplyr::n_distinct( - .data[[group_cols]], + data[[group_cols]], na.rm = TRUE ) orange_palette <- colorRampPalette(c("#C34729", "#F5C6A0"))(n_groups) @@ -533,7 +533,7 @@ plot_compression_ratio <- function(.data, group_cols = NULL) { #' Plot Movement Cost #' -#' @param .data A data frame containing the movement cost data with columns `movement_cost` and optionally a grouping column. +#' @param data A data frame containing the movement cost data with columns `movement_cost` and optionally a grouping column. #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' #' @return A ggplot2 object representing the movement cost. @@ -543,10 +543,10 @@ plot_compression_ratio <- function(.data, group_cols = NULL) { #' @importFrom grDevices colorRampPalette #' #' @export -plot_movement_cost <- function(.data, group_cols) { +plot_movement_cost <- function(data, group_cols) { group_cols <- if (is.null(group_cols)) "ref_date" else group_cols - plot <- .data |> + plot <- data |> ggplot2::ggplot( ggplot2::aes( x = .data[["movement_cost"]], @@ -563,7 +563,7 @@ plot_movement_cost <- function(.data, group_cols) { if (group_cols != "ref_date") { n_groups <- dplyr::n_distinct( - .data[[group_cols]], + data[[group_cols]], na.rm = TRUE ) orange_palette <- colorRampPalette(c("#C34729", "#F5C6A0"))(n_groups) diff --git a/R/retirement.R b/R/retirement.R index 814b34c..4aae89f 100644 --- a/R/retirement.R +++ b/R/retirement.R @@ -1,6 +1,6 @@ #' Project Retirement Dates #' @details The function takes a data frame containing personnel data with birth dates and reference dates. It only considers the last reference date in the data. It then calculates the projected retirement date for each staff member based on the specified threshold age, and counts the number of staff eligible for retirement at each future reference date. -#' @param .data A data frame, either the workforce or wage bill data. +#' @param data A data frame, either the workforce or wage bill data. #' @param threshold_age The age at which personnel are considered eligible for retirement (default is 60). #' @param birth_col The name of the column representing birth dates (default is "birth_date"). #' @param group_cols A character vector of column names to group the data by when counting eligible retirees (default is NULL, meaning no grouping). @@ -17,7 +17,7 @@ #' #' @export project_retirement <- function( - .data, + data, threshold_age = 60, birth_col = "birth_date", group_cols = NULL, @@ -26,7 +26,7 @@ project_retirement <- function( simplify_retirement_date = TRUE, cutoff_date = 10 ) { - data_dt <- as.data.table(.data) + data_dt <- as.data.table(data) # future extension: (a) incorporate threshold_tenure (b) enable user to choose which reference date to use as a baseline for projection. @@ -39,7 +39,7 @@ project_retirement <- function( # retain only projected retirements after last reference date in the data data_dt <- data_dt[ - retirement_date > max(.data[["ref_date"]]) + retirement_date > max(data[["ref_date"]]) ] if (simplify_retirement_date) { @@ -87,7 +87,7 @@ project_retirement <- function( # cut-off date projected_retirement_data <- projected_retirement_data[ retirement_date <= - (max(.data[["ref_date"]]) + lubridate::years(cutoff_date)) + (max(data[["ref_date"]]) + lubridate::years(cutoff_date)) ] projected_retirement_data[] diff --git a/R/summarize.R b/R/summarize.R index 58109a1..32cec4b 100644 --- a/R/summarize.R +++ b/R/summarize.R @@ -441,7 +441,7 @@ fastcount <- function(x, ..., wt = NULL, sort = FALSE, name = NULL) { #' It expects the input to already contain a count column named `n` #' (for example the output of `dplyr::count()` or `fastcount()`). #' -#' @param .data A data frame or tibble containing a count column `n`. +#' @param data A data frame or tibble containing a count column `n`. #' @param ... Grouping variables. Proportions are #' computed within the combinations of these variables. #' @@ -477,7 +477,7 @@ fastprop <- function(.data, ...) { #' base year value. This is useful for comparing growth trends across multiple #' time series on a common scale. #' -#' @param .data A data.frame or tibble containing the time series data. +#' @param data A data.frame or tibble containing the time series data. #' @param date_col Unquoted column name containing the time/year variable. #' @param ... Unquoted column names to compute indices for. Each selected #' column must be numeric. @@ -537,7 +537,7 @@ compute_baseline_index <- function(.data, date_col, ...) { #' Function to compute quantiles of a measure column within groups and reference dates. #' -#' @param .data A data frame containing the data to be processed. +#' @param data A data frame containing the data to be processed. #' @param group_cols A character vector of column names to group the data by. #' @param measure_col The name of the column for which quantiles will be computed. #' @param latest_measure A logical value indicating whether to return only the measures for the latest reference date's quantiles (default is FALSE). @@ -550,13 +550,13 @@ compute_baseline_index <- function(.data, date_col, ...) { #' #' @export compute_quantile <- function( - .data, + data, group_cols = NULL, measure_col, latest_measure = FALSE, n_quantiles = 10 ) { - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) # change group_cols based on the choice of latest measure if (latest_measure) { @@ -586,7 +586,7 @@ compute_quantile <- function( #' Function to compute the compression ratio #' -#' @param .data A data frame. +#' @param data A data frame. #' @param group_cols A character vector of column names to group the data by. #' @param percentiles A numeric vector of length 3 indicating the upper, middle, and lower percentiles to compute (default is c(0.9, 0.5, 0.1)). #' @param measure_col The name of the column for which the compression ratio will be computed. @@ -599,14 +599,14 @@ compute_quantile <- function( #' #' @export compute_compression_ratio <- function( - .data, + data, group_cols = NULL, percentiles = c(0.9, 0.5, 0.1), measure_col, latest_measure = FALSE ) { # consider generalizing this function to compute any percentile, not just 90th, 50th, and 10th - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) by_cols <- c(group_cols, "ref_date") @@ -643,7 +643,7 @@ compute_compression_ratio <- function( #' Function to compute the distribution function of a variable. #' -#' @param .data A data frame. +#' @param data A data frame. #' @param group_col A string naming a single column to group by, or `NULL` for no grouping. #' @param measure_col The name of the column for which the percentile values will be computed. #' @param binwidth The width of the bins for grouping the measure values (default is 1). @@ -656,17 +656,17 @@ compute_compression_ratio <- function( #' #' @export compute_density <- function( - .data, + data, group_col = NULL, measure_col, binwidth = 1, latest_measure = FALSE ) { if (latest_measure) { - .data <- .data[.data[["ref_date"]] == max(.data[["ref_date"]]), ] + data <- data[data[["ref_date"]] == max(data[["ref_date"]]), ] } - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) dt[, bin := floor(get(measure_col) / binwidth) * binwidth] dt <- dt[!is.na(bin)] @@ -713,7 +713,7 @@ compute_density <- function( #' When `measure_col` is `NULL`, counts rows per period (headcount). When a #' column name is supplied, sums that column per period (wage bill). #' -#' @param .data A data frame containing at least a `ref_date` column. +#' @param data A data frame containing at least a `ref_date` column. #' @param group Character string naming the grouping column, or `"ref_date"` for #' no grouping. #' @param measure_col Character string naming the numeric column to sum, or @@ -724,8 +724,8 @@ compute_density <- function( #' @importFrom data.table as.data.table #' #' @export -compute_time_trend <- function(.data, group, measure_col = NULL) { - .data_dt <- data.table::as.data.table(.data) +compute_time_trend <- function(data, group, measure_col = NULL) { + .data_dt <- data.table::as.data.table(data) groups <- if (group == "ref_date") "ref_date" else c("ref_date", group) @@ -789,7 +789,7 @@ rescale_baseline <- function(data, group) { #' When `measure_col` is `NULL`, counts rows (headcount). When a column name is #' supplied, sums that column (wage bill). #' -#' @param .data A data frame containing a `ref_date` column and the grouping +#' @param data A data frame containing a `ref_date` column and the grouping #' column. #' @param group Character string naming the grouping column. #' @param measure_col Character string naming the numeric column to sum, or @@ -800,9 +800,9 @@ rescale_baseline <- function(data, group) { #' @importFrom dplyr group_by across all_of filter ungroup summarise n #' #' @export -compute_cross_section <- function(.data, group, measure_col = NULL) { +compute_cross_section <- function(data, group, measure_col = NULL) { # only consider latest reference date - data_latest <- .data |> + data_latest <- data |> dplyr::filter( .data[["ref_date"]] == max(.data[["ref_date"]]), .by = dplyr::all_of(group) @@ -832,7 +832,7 @@ compute_cross_section <- function(.data, group, measure_col = NULL) { #' When `measure_col` is `NULL`, counts rows per date-group cell (headcount). #' When a column name is supplied, sums that column (wage bill). #' -#' @param .data A data frame with `ref_date` and the grouping column. +#' @param data A data frame with `ref_date` and the grouping column. #' @param group Character string naming the grouping column. #' @param measure_col Character string naming the numeric column to sum, or #' `NULL` to count rows. @@ -843,8 +843,8 @@ compute_cross_section <- function(.data, group, measure_col = NULL) { #' @importFrom dplyr filter arrange summarise last first all_of #' #' @export -compute_growth <- function(.data, group, measure_col = NULL) { - endpoints <- .data |> +compute_growth <- function(data, group, measure_col = NULL) { + endpoints <- data |> dplyr::filter( .data[["ref_date"]] %in% c(max(.data[["ref_date"]]), min(.data[["ref_date"]])), diff --git a/R/transition.R b/R/transition.R index fd4b4db..bdf750b 100644 --- a/R/transition.R +++ b/R/transition.R @@ -80,7 +80,7 @@ detect_reallocation <- function(data, personnel_hire) { #' holding more than one record in the same period has no well-defined position, #' so every record for that entity is dropped with a warning reporting how many. #' -#' @param .data Data frame containing a `ref_date` column, the identifier and +#' @param data Data frame containing a `ref_date` column, the identifier and #' the grouping columns. #' @param id_col Character. Column identifying the entity whose career is #' tracked. Default `"contract_id"`. @@ -96,10 +96,10 @@ detect_reallocation <- function(data, personnel_hire) { #' @importFrom stats complete.cases #' @export detect_career_transition <- function( - .data, id_col = "contract_id", group_cols, + data, id_col = "contract_id", group_cols, return_all = FALSE ) { - dt <- data.table::as.data.table(.data) + dt <- data.table::as.data.table(data) dt <- dt[ stats::complete.cases(dt[, c(id_col, group_cols), with = FALSE]) @@ -190,21 +190,21 @@ detect_career_transition <- function( #' Draws transfers between groups as a heatmap, origin groups on the y-axis and #' destination groups on the x-axis. #' -#' @param .data Data frame with `from`, `to` and `transfer` columns. +#' @param data Data frame with `from`, `to` and `transfer` columns. #' #' @return A plotly object. #' #' @importFrom plotly layout plot_ly #' @importFrom stats median #' @keywords internal -plot_transfer_heatmap <- function(.data) { - transfer <- .data[["transfer"]] +plot_transfer_heatmap <- function(data) { + transfer <- data[["transfer"]] plotly::plot_ly( - data = .data, - x = ~ .data[["to"]], - y = ~ .data[["from"]], - z = ~ .data[["transfer"]], + data = data, + x = ~ data[["to"]], + y = ~ data[["from"]], + z = ~ data[["transfer"]], type = "heatmap", colorscale = list( c(min(transfer, na.rm = TRUE), "#d32f2f"), @@ -235,7 +235,7 @@ plot_transfer_heatmap <- function(.data) { #' the number of transitions and node size to degree centrality. Networks of ten #' or more nodes are labelled by index rather than by name. #' -#' @param .data Data frame with `from` and `to` columns, as returned by +#' @param data Data frame with `from` and `to` columns, as returned by #' [detect_career_transition()]. #' #' @return A ggiraph girafe object. @@ -252,8 +252,8 @@ plot_transfer_heatmap <- function(.data) { #' #' @keywords internal #' @export -plot_transition_network <- function(.data) { - edges <- govhr::fastcount(.data, .data[["from"]], .data[["to"]], name = "weight") |> +plot_transition_network <- function(data) { + edges <- govhr::fastcount(data, .data[["from"]], .data[["to"]], name = "weight") |> # coerce to character to ensure that as_tble_graph produces a `name` column dplyr::mutate( dplyr::across( diff --git a/R/zzz.R b/R/zzz.R index 5c22df6..58d28a1 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -359,3 +359,4 @@ validate_date_format <- function(date, varname) { return(date) } + diff --git a/man/apply_baseline_index.Rd b/man/apply_baseline_index.Rd index 2643a88..3b11a07 100644 --- a/man/apply_baseline_index.Rd +++ b/man/apply_baseline_index.Rd @@ -4,10 +4,10 @@ \alias{apply_baseline_index} \title{Apply Baseline Index to a Trend Summary} \usage{ -apply_baseline_index(.data, group_col) +apply_baseline_index(data, group_col) } \arguments{ -\item{.data}{Data frame with \code{ref_date} and \code{value}, as returned by +\item{data}{Data frame with \code{ref_date} and \code{value}, as returned by \code{\link[=compute_trend_summary]{compute_trend_summary()}}.} \item{group_col}{Character. Column to group by, or \code{"ref_date"} for no diff --git a/man/classify_personnel_event.Rd b/man/classify_personnel_event.Rd index 870f6a0..68cba1c 100644 --- a/man/classify_personnel_event.Rd +++ b/man/classify_personnel_event.Rd @@ -5,7 +5,7 @@ \title{Classify Personnel Movement Events} \usage{ classify_personnel_event( - .data, + data, id_col, event_type, start_date, @@ -15,7 +15,7 @@ classify_personnel_event( ) } \arguments{ -\item{.data}{A data frame containing personnel data.} +\item{data}{A data frame containing personnel data.} \item{id_col}{The name of the column representing personnel IDs.} diff --git a/man/compute_baseline_index.Rd b/man/compute_baseline_index.Rd index 054d0ef..d3fec9a 100644 --- a/man/compute_baseline_index.Rd +++ b/man/compute_baseline_index.Rd @@ -7,12 +7,12 @@ compute_baseline_index(.data, date_col, ...) } \arguments{ -\item{.data}{A data.frame or tibble containing the time series data.} - \item{date_col}{Unquoted column name containing the time/year variable.} \item{...}{Unquoted column names to compute indices for. Each selected column must be numeric.} + +\item{data}{A data.frame or tibble containing the time series data.} } \value{ A tibble with the date column and computed index columns. Index diff --git a/man/compute_compression_ratio.Rd b/man/compute_compression_ratio.Rd index 2ea8d25..8431d90 100644 --- a/man/compute_compression_ratio.Rd +++ b/man/compute_compression_ratio.Rd @@ -5,7 +5,7 @@ \title{Function to compute the compression ratio} \usage{ compute_compression_ratio( - .data, + data, group_cols = NULL, percentiles = c(0.9, 0.5, 0.1), measure_col, @@ -13,7 +13,7 @@ compute_compression_ratio( ) } \arguments{ -\item{.data}{A data frame.} +\item{data}{A data frame.} \item{group_cols}{A character vector of column names to group the data by.} diff --git a/man/compute_coverage.Rd b/man/compute_coverage.Rd index 9a2b040..8d68626 100644 --- a/man/compute_coverage.Rd +++ b/man/compute_coverage.Rd @@ -5,14 +5,14 @@ \title{Compute coverage of non-missing values in a dataset.} \usage{ compute_coverage( - .data, + data, group = NULL, include_ref_date = FALSE, aggregate = FALSE ) } \arguments{ -\item{.data}{A data frame.} +\item{data}{A data frame.} \item{group}{A character string specifying the column name to group by. If NULL, coverage is computed for the entire data set.} diff --git a/man/compute_cross_section.Rd b/man/compute_cross_section.Rd index 555d63e..89833e1 100644 --- a/man/compute_cross_section.Rd +++ b/man/compute_cross_section.Rd @@ -4,10 +4,10 @@ \alias{compute_cross_section} \title{Compute Cross-Section Summary Table} \usage{ -compute_cross_section(.data, group, measure_col = NULL) +compute_cross_section(data, group, measure_col = NULL) } \arguments{ -\item{.data}{A data frame containing a \code{ref_date} column and the grouping +\item{data}{A data frame containing a \code{ref_date} column and the grouping column.} \item{group}{Character string naming the grouping column.} diff --git a/man/compute_cross_section_summary.Rd b/man/compute_cross_section_summary.Rd index 0d04af4..e304bf6 100644 --- a/man/compute_cross_section_summary.Rd +++ b/man/compute_cross_section_summary.Rd @@ -4,10 +4,10 @@ \alias{compute_cross_section_summary} \title{Compute Cross-Section Summary} \usage{ -compute_cross_section_summary(.data, group_col, measure_col = NULL) +compute_cross_section_summary(data, group_col, measure_col = NULL) } \arguments{ -\item{.data}{Data frame containing \code{ref_date} and the grouping column.} +\item{data}{Data frame containing \code{ref_date} and the grouping column.} \item{group_col}{Character. Column to group by.} diff --git a/man/compute_decile.Rd b/man/compute_decile.Rd index fc0e07f..fd0a325 100644 --- a/man/compute_decile.Rd +++ b/man/compute_decile.Rd @@ -4,10 +4,10 @@ \alias{compute_decile} \title{Compute Deciles of a Measure} \usage{ -compute_decile(.data, group_cols = NULL, measure_col, latest_measure = FALSE) +compute_decile(data, group_cols = NULL, measure_col, latest_measure = FALSE) } \arguments{ -\item{.data}{Data frame containing a \code{ref_date} column and the measure.} +\item{data}{Data frame containing a \code{ref_date} column and the measure.} \item{group_cols}{Character vector of columns to group by, or \code{NULL} for no grouping.} diff --git a/man/compute_density.Rd b/man/compute_density.Rd index d07f773..e10dc74 100644 --- a/man/compute_density.Rd +++ b/man/compute_density.Rd @@ -5,7 +5,7 @@ \title{Function to compute the distribution function of a variable.} \usage{ compute_density( - .data, + data, group_col = NULL, measure_col, binwidth = 1, @@ -13,7 +13,7 @@ compute_density( ) } \arguments{ -\item{.data}{A data frame.} +\item{data}{A data frame.} \item{group_col}{A string naming a single column to group by, or \code{NULL} for no grouping.} diff --git a/man/compute_growth.Rd b/man/compute_growth.Rd index 37a321a..fbbec5a 100644 --- a/man/compute_growth.Rd +++ b/man/compute_growth.Rd @@ -4,10 +4,10 @@ \alias{compute_growth} \title{Compute Growth Rate Summary Table} \usage{ -compute_growth(.data, group, measure_col = NULL) +compute_growth(data, group, measure_col = NULL) } \arguments{ -\item{.data}{A data frame with \code{ref_date} and the grouping column.} +\item{data}{A data frame with \code{ref_date} and the grouping column.} \item{group}{Character string naming the grouping column.} diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd index 870c327..3aed82b 100644 --- a/man/compute_growth_decomposition.Rd +++ b/man/compute_growth_decomposition.Rd @@ -5,13 +5,13 @@ \title{Compute growth decomposition of wagebill} \usage{ compute_growth_decomposition( - .data, + data, group_cols = NULL, measure_col = "gross_salary_lcu" ) } \arguments{ -\item{.data}{A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary).} +\item{data}{A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary).} \item{group_cols}{A character vector specifying the names of the columns to group by.} diff --git a/man/compute_growth_summary.Rd b/man/compute_growth_summary.Rd index 393e030..dd5c3ba 100644 --- a/man/compute_growth_summary.Rd +++ b/man/compute_growth_summary.Rd @@ -4,10 +4,10 @@ \alias{compute_growth_summary} \title{Compute Growth Rate Summary} \usage{ -compute_growth_summary(.data, group_col, measure_col = NULL) +compute_growth_summary(data, group_col, measure_col = NULL) } \arguments{ -\item{.data}{Data frame containing \code{ref_date} and the grouping column.} +\item{data}{Data frame containing \code{ref_date} and the grouping column.} \item{group_col}{Character. Column to group by.} diff --git a/man/compute_movement_cost.Rd b/man/compute_movement_cost.Rd index 5f69591..51d5738 100644 --- a/man/compute_movement_cost.Rd +++ b/man/compute_movement_cost.Rd @@ -5,7 +5,7 @@ \title{Function to compute the total cost associated with personnel movements.} \usage{ compute_movement_cost( - .data, + data, id_col = "personnel_id", event_type, start_date = NULL, @@ -18,7 +18,7 @@ compute_movement_cost( ) } \arguments{ -\item{.data}{A data frame containing the data to be processed.} +\item{data}{A data frame containing the data to be processed.} \item{id_col}{The name of the column representing personnel IDs (default is "personnel_id").} diff --git a/man/compute_percentile.Rd b/man/compute_percentile.Rd index 8394a6e..9a494e1 100644 --- a/man/compute_percentile.Rd +++ b/man/compute_percentile.Rd @@ -5,7 +5,7 @@ \title{Bin a Measure into a Share Distribution} \usage{ compute_percentile( - .data, + data, group_col = NULL, measure_col, binwidth = 1, @@ -13,7 +13,7 @@ compute_percentile( ) } \arguments{ -\item{.data}{Data frame containing a \code{ref_date} column and the measure.} +\item{data}{Data frame containing a \code{ref_date} column and the measure.} \item{group_col}{Character. Column to group by, or \code{NULL} for no grouping.} diff --git a/man/compute_quantile.Rd b/man/compute_quantile.Rd index 1a6e8c1..e9bf96a 100644 --- a/man/compute_quantile.Rd +++ b/man/compute_quantile.Rd @@ -5,7 +5,7 @@ \title{Function to compute quantiles of a measure column within groups and reference dates.} \usage{ compute_quantile( - .data, + data, group_cols = NULL, measure_col, latest_measure = FALSE, @@ -13,7 +13,7 @@ compute_quantile( ) } \arguments{ -\item{.data}{A data frame containing the data to be processed.} +\item{data}{A data frame containing the data to be processed.} \item{group_cols}{A character vector of column names to group the data by.} diff --git a/man/compute_time_trend.Rd b/man/compute_time_trend.Rd index 1cfb0c7..947d4ea 100644 --- a/man/compute_time_trend.Rd +++ b/man/compute_time_trend.Rd @@ -4,10 +4,10 @@ \alias{compute_time_trend} \title{Compute time trend} \usage{ -compute_time_trend(.data, group, measure_col = NULL) +compute_time_trend(data, group, measure_col = NULL) } \arguments{ -\item{.data}{A data frame containing at least a \code{ref_date} column.} +\item{data}{A data frame containing at least a \code{ref_date} column.} \item{group}{Character string naming the grouping column, or \code{"ref_date"} for no grouping.} diff --git a/man/compute_trend_summary.Rd b/man/compute_trend_summary.Rd index a72251a..1b4b918 100644 --- a/man/compute_trend_summary.Rd +++ b/man/compute_trend_summary.Rd @@ -4,10 +4,10 @@ \alias{compute_trend_summary} \title{Compute Trend Summary} \usage{ -compute_trend_summary(.data, group_col, measure_col = NULL) +compute_trend_summary(data, group_col, measure_col = NULL) } \arguments{ -\item{.data}{Data frame containing at least a \code{ref_date} column.} +\item{data}{Data frame containing at least a \code{ref_date} column.} \item{group_col}{Character. Column to group by, or \code{"ref_date"} for no grouping.} diff --git a/man/compute_workforce_movement.Rd b/man/compute_workforce_movement.Rd index 7a7d088..e0c38a5 100644 --- a/man/compute_workforce_movement.Rd +++ b/man/compute_workforce_movement.Rd @@ -4,10 +4,10 @@ \alias{compute_workforce_movement} \title{Function to compute workforce movement for hires, fires, retirement, or turnover} \usage{ -compute_workforce_movement(.data, movement_type, measurement_type, group_cols) +compute_workforce_movement(data, movement_type, measurement_type, group_cols) } \arguments{ -\item{.data}{A data frame containing personnel data.} +\item{data}{A data frame containing personnel data.} \item{movement_type}{A character string indicating the type of movement: "hire", "fire", "retirement", or "turnover".} diff --git a/man/count_entity.Rd b/man/count_entity.Rd index 5307c35..2b722e0 100644 --- a/man/count_entity.Rd +++ b/man/count_entity.Rd @@ -4,10 +4,10 @@ \alias{count_entity} \title{Count Unique Entities by Group} \usage{ -count_entity(.data, id_col, group_cols = NULL) +count_entity(data, id_col, group_cols = NULL) } \arguments{ -\item{.data}{Data frame containing the data.} +\item{data}{Data frame containing the data.} \item{id_col}{Character. Column name of the unique identifier for the entity.} diff --git a/man/detect_career_transition.Rd b/man/detect_career_transition.Rd index bb05a69..5cf3949 100644 --- a/man/detect_career_transition.Rd +++ b/man/detect_career_transition.Rd @@ -5,14 +5,14 @@ \title{Detect Career Transitions} \usage{ detect_career_transition( - .data, + data, id_col = "contract_id", group_cols, return_all = FALSE ) } \arguments{ -\item{.data}{Data frame containing a \code{ref_date} column, the identifier and +\item{data}{Data frame containing a \code{ref_date} column, the identifier and the grouping columns.} \item{id_col}{Character. Column identifying the entity whose career is diff --git a/man/fastprop.Rd b/man/fastprop.Rd index ea2b9bf..04dfa8f 100644 --- a/man/fastprop.Rd +++ b/man/fastprop.Rd @@ -7,10 +7,10 @@ fastprop(.data, ...) } \arguments{ -\item{.data}{A data frame or tibble containing a count column \code{n}.} - \item{...}{Grouping variables. Proportions are computed within the combinations of these variables.} + +\item{data}{A data frame or tibble containing a count column \code{n}.} } \value{ A tibble with the same columns as \code{.data} plus a numeric diff --git a/man/ggplot_point_line.Rd b/man/ggplot_point_line.Rd index f7619ea..df98d4d 100644 --- a/man/ggplot_point_line.Rd +++ b/man/ggplot_point_line.Rd @@ -4,10 +4,10 @@ \alias{ggplot_point_line} \title{Plot grouped line chart with labeled points} \usage{ -ggplot_point_line(data, x, y, group = NULL, label = NULL, ...) +ggplot_point_line(.data, x, y, group = NULL, label = NULL, ...) } \arguments{ -\item{data}{A data frame or tibble containing the variables to plot.} +\item{.data}{A data frame or tibble containing the variables to plot.} \item{x}{Column to be mapped to the x-axis.} diff --git a/man/ggplot_segment.Rd b/man/ggplot_segment.Rd index 9856e25..a9a4ac7 100644 --- a/man/ggplot_segment.Rd +++ b/man/ggplot_segment.Rd @@ -4,10 +4,10 @@ \alias{ggplot_segment} \title{Plot segments overlaid with points, ordered by median} \usage{ -ggplot_segment(.data, col, group) +ggplot_segment(data, col, group) } \arguments{ -\item{.data}{A data.frame or tibble.} +\item{data}{A data.frame or tibble.} \item{col}{Unquoted numeric column (values).} diff --git a/man/guess_date_frequency.Rd b/man/guess_date_frequency.Rd index e4d2b2f..087ef87 100644 --- a/man/guess_date_frequency.Rd +++ b/man/guess_date_frequency.Rd @@ -4,10 +4,10 @@ \alias{guess_date_frequency} \title{Guess the Reporting Frequency of the Reference Dates} \usage{ -guess_date_frequency(.data) +guess_date_frequency(data) } \arguments{ -\item{.data}{A dataset containing a column named \code{ref_date} with date values.} +\item{data}{A dataset containing a column named \code{ref_date} with date values.} } \value{ A single character scalar: \code{"year"}, \code{"quarter"}, diff --git a/man/plot_bar_growth.Rd b/man/plot_bar_growth.Rd index c6eef37..391f69d 100644 --- a/man/plot_bar_growth.Rd +++ b/man/plot_bar_growth.Rd @@ -4,10 +4,10 @@ \alias{plot_bar_growth} \title{Plot Growth Rates by Group} \usage{ -plot_bar_growth(.data, group_col) +plot_bar_growth(data, group_col) } \arguments{ -\item{.data}{Data frame with the grouping column and a \code{growth_rate} column, +\item{data}{Data frame with the grouping column and a \code{growth_rate} column, as returned by \code{\link[=compute_growth_summary]{compute_growth_summary()}}.} \item{group_col}{Character. Column to group by.} diff --git a/man/plot_bar_total.Rd b/man/plot_bar_total.Rd index 09cc6fa..73312fe 100644 --- a/man/plot_bar_total.Rd +++ b/man/plot_bar_total.Rd @@ -4,10 +4,10 @@ \alias{plot_bar_total} \title{Plot Totals by Group} \usage{ -plot_bar_total(.data, group_col, x_col = "value", x_label = "Value") +plot_bar_total(data, group_col, x_col = "value", x_label = "Value") } \arguments{ -\item{.data}{Data frame with the grouping column and the x-axis column, as +\item{data}{Data frame with the grouping column and the x-axis column, as returned by \code{\link[=compute_cross_section_summary]{compute_cross_section_summary()}}.} \item{group_col}{Character. Column to group by.} diff --git a/man/plot_compression_ratio.Rd b/man/plot_compression_ratio.Rd index 1451cfa..25493eb 100644 --- a/man/plot_compression_ratio.Rd +++ b/man/plot_compression_ratio.Rd @@ -4,10 +4,10 @@ \alias{plot_compression_ratio} \title{Plot Compression Ratio} \usage{ -plot_compression_ratio(.data, group_cols = NULL) +plot_compression_ratio(data, group_cols = NULL) } \arguments{ -\item{.data}{A data frame containing the compression ratio data produced by \code{compute_compression_ratio()}.} +\item{data}{A data frame containing the compression ratio data produced by \code{compute_compression_ratio()}.} \item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} diff --git a/man/plot_decile.Rd b/man/plot_decile.Rd index e59ed04..5676e58 100644 --- a/man/plot_decile.Rd +++ b/man/plot_decile.Rd @@ -4,10 +4,10 @@ \alias{plot_decile} \title{Plot Decile Summary} \usage{ -plot_decile(.data, group_cols) +plot_decile(data, group_cols) } \arguments{ -\item{.data}{A data frame produced by \code{compute_decile()}, containing columns \code{decile}, \code{mean_value}, and optionally a grouping column.} +\item{data}{A data frame produced by \code{compute_decile()}, containing columns \code{decile}, \code{mean_value}, and optionally a grouping column.} \item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } diff --git a/man/plot_histogram.Rd b/man/plot_histogram.Rd index 2341c0d..a9fd185 100644 --- a/man/plot_histogram.Rd +++ b/man/plot_histogram.Rd @@ -4,10 +4,10 @@ \alias{plot_histogram} \title{Plot Density as Percentage Share} \usage{ -plot_histogram(.data, plot_type = "histogram", group_col = NULL) +plot_histogram(data, plot_type = "histogram", group_col = NULL) } \arguments{ -\item{.data}{A data frame produced by \code{compute_histogram()} or \code{compute_cumulative()}, containing columns \code{bin}, \code{pct}, and optionally a grouping column.} +\item{data}{A data frame produced by \code{compute_histogram()} or \code{compute_cumulative()}, containing columns \code{bin}, \code{pct}, and optionally a grouping column.} \item{plot_type}{A character string indicating the type of plot: "histogram" or "cumulative".} diff --git a/man/plot_movement.Rd b/man/plot_movement.Rd index eeb76a3..460a07c 100644 --- a/man/plot_movement.Rd +++ b/man/plot_movement.Rd @@ -4,10 +4,10 @@ \alias{plot_movement} \title{Plot Personnel Movement Over Time} \usage{ -plot_movement(.data, movement_type, measurement_type, group_cols) +plot_movement(data, movement_type, measurement_type, group_cols) } \arguments{ -\item{.data}{A data frame containing the movement data with columns \code{ref_date}, \code{indicator}, and optionally a grouping column.} +\item{data}{A data frame containing the movement data with columns \code{ref_date}, \code{indicator}, and optionally a grouping column.} \item{movement_type}{A character string indicating the type of movement: "hire", "fire", or "turnover".} diff --git a/man/plot_movement_cost.Rd b/man/plot_movement_cost.Rd index 75bfa02..717e1b9 100644 --- a/man/plot_movement_cost.Rd +++ b/man/plot_movement_cost.Rd @@ -4,10 +4,10 @@ \alias{plot_movement_cost} \title{Plot Movement Cost} \usage{ -plot_movement_cost(.data, group_cols) +plot_movement_cost(data, group_cols) } \arguments{ -\item{.data}{A data frame containing the movement cost data with columns \code{movement_cost} and optionally a grouping column.} +\item{data}{A data frame containing the movement cost data with columns \code{movement_cost} and optionally a grouping column.} \item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } diff --git a/man/plot_segment.Rd b/man/plot_segment.Rd index 00321d3..fbd80f8 100644 --- a/man/plot_segment.Rd +++ b/man/plot_segment.Rd @@ -4,10 +4,10 @@ \alias{plot_segment} \title{Create a Segment Plot with Jittered Points} \usage{ -plot_segment(.data, col, group) +plot_segment(data, col, group) } \arguments{ -\item{.data}{A data frame containing the variables to plot.} +\item{data}{A data frame containing the variables to plot.} \item{col}{Character string specifying the name of the numeric column to plot on the x-axis.} diff --git a/man/plot_transfer_heatmap.Rd b/man/plot_transfer_heatmap.Rd index 73170f8..1e14f22 100644 --- a/man/plot_transfer_heatmap.Rd +++ b/man/plot_transfer_heatmap.Rd @@ -4,10 +4,10 @@ \alias{plot_transfer_heatmap} \title{Plot Transfer Heatmap} \usage{ -plot_transfer_heatmap(.data) +plot_transfer_heatmap(data) } \arguments{ -\item{.data}{Data frame with \code{from}, \code{to} and \code{transfer} columns.} +\item{data}{Data frame with \code{from}, \code{to} and \code{transfer} columns.} } \value{ A plotly object. diff --git a/man/plot_transition_network.Rd b/man/plot_transition_network.Rd index 5365078..05f365f 100644 --- a/man/plot_transition_network.Rd +++ b/man/plot_transition_network.Rd @@ -4,10 +4,10 @@ \alias{plot_transition_network} \title{Plot Transition Network} \usage{ -plot_transition_network(.data) +plot_transition_network(data) } \arguments{ -\item{.data}{Data frame with \code{from} and \code{to} columns, as returned by +\item{data}{Data frame with \code{from} and \code{to} columns, as returned by \code{\link[=detect_career_transition]{detect_career_transition()}}.} } \value{ diff --git a/man/plot_trend.Rd b/man/plot_trend.Rd index 3bb09c8..873fa4f 100644 --- a/man/plot_trend.Rd +++ b/man/plot_trend.Rd @@ -5,7 +5,7 @@ \title{Plot Time Trend} \usage{ plot_trend( - .data, + data, group_col, toggle_growth = FALSE, y_col = "value", @@ -13,7 +13,7 @@ plot_trend( ) } \arguments{ -\item{.data}{Data frame with \code{ref_date} and the y-axis column, as returned by +\item{data}{Data frame with \code{ref_date} and the y-axis column, as returned by \code{\link[=compute_trend_summary]{compute_trend_summary()}} and optionally \code{\link[=apply_baseline_index]{apply_baseline_index()}}.} \item{group_col}{Character. Column to group by, or \code{"ref_date"} for no diff --git a/man/project_retirement.Rd b/man/project_retirement.Rd index f733a37..373598f 100644 --- a/man/project_retirement.Rd +++ b/man/project_retirement.Rd @@ -5,7 +5,7 @@ \title{Project Retirement Dates} \usage{ project_retirement( - .data, + data, threshold_age = 60, birth_col = "birth_date", group_cols = NULL, @@ -16,7 +16,7 @@ project_retirement( ) } \arguments{ -\item{.data}{A data frame, either the workforce or wage bill data.} +\item{data}{A data frame, either the workforce or wage bill data.} \item{threshold_age}{The age at which personnel are considered eligible for retirement (default is 60).} diff --git a/man/sample_group.Rd b/man/sample_group.Rd index 98b6427..57a397f 100644 --- a/man/sample_group.Rd +++ b/man/sample_group.Rd @@ -4,10 +4,10 @@ \alias{sample_group} \title{Sample groups and return all rows for those groups} \usage{ -sample_group(.data, group, n) +sample_group(data, group, n) } \arguments{ -\item{.data}{A data.frame, tibble, or data.table.} +\item{data}{A data.frame, tibble, or data.table.} \item{group}{Unquoted column name used to define groups.} diff --git a/man/scale_plot_height.Rd b/man/scale_plot_height.Rd index c774661..aabfaba 100644 --- a/man/scale_plot_height.Rd +++ b/man/scale_plot_height.Rd @@ -4,10 +4,10 @@ \alias{scale_plot_height} \title{Plot Height for a Grouped Bar Chart} \usage{ -scale_plot_height(.data) +scale_plot_height(data) } \arguments{ -\item{.data}{Data frame in which each row becomes one bar.} +\item{data}{Data frame in which each row becomes one bar.} } \value{ Numeric height in pixels, never below 350. diff --git a/tests/testthat/test-compute_workforce_movement.R b/tests/testthat/test-compute_workforce_movement.R index 484b569..8483ceb 100644 --- a/tests/testthat/test-compute_workforce_movement.R +++ b/tests/testthat/test-compute_workforce_movement.R @@ -10,13 +10,13 @@ test_that("compute_workforce_movement computes hire count and rate correctly", { ) res_count <- compute_workforce_movement( - .data = panel_dt, + data = panel_dt, movement_type = "hire", measurement_type = "count", group_cols = NULL ) res_rate <- compute_workforce_movement( - .data = panel_dt, + data = panel_dt, movement_type = "hire", measurement_type = "rate", group_cols = NULL @@ -42,13 +42,13 @@ test_that("compute_workforce_movement computes fire count and rate correctly", { ) res_count <- compute_workforce_movement( - .data = panel_dt, + data = panel_dt, movement_type = "fire", measurement_type = "count", group_cols = NULL ) res_rate <- compute_workforce_movement( - .data = panel_dt, + data = panel_dt, movement_type = "fire", measurement_type = "rate", group_cols = NULL @@ -74,13 +74,13 @@ test_that("compute_workforce_movement computes turnover and accepts count/rate a ) res_count <- compute_workforce_movement( - .data = panel_dt, + data = panel_dt, movement_type = "turnover", measurement_type = "count", group_cols = NULL ) res_rate <- compute_workforce_movement( - .data = panel_dt, + data = panel_dt, movement_type = "turnover", measurement_type = "rate", group_cols = NULL diff --git a/tests/testthat/test-movement.R b/tests/testthat/test-movement.R index 6b38cca..d9ce539 100644 --- a/tests/testthat/test-movement.R +++ b/tests/testthat/test-movement.R @@ -8,7 +8,7 @@ test_that("classify_personnel_event('hire') flags a genuine mid-panel hire and e ) out <- classify_personnel_event( - .data = df, + data = df, id_col = "personnel_id", event_type = "hire", start_date = "2019-01-01", @@ -36,7 +36,7 @@ test_that("classify_personnel_event('retirement') flags the active->pensioner tr ) out <- classify_personnel_event( - .data = df, + data = df, id_col = "personnel_id", event_type = "retirement", start_date = "2019-01-01", @@ -62,7 +62,7 @@ test_that("compute_movement_cost sums wage only for personnel with a genuine hir ) out <- compute_movement_cost( - .data = df, + data = df, event_type = "hire", start_date = "2019-01-01", end_date = "2021-01-01", @@ -85,7 +85,7 @@ test_that("compute_movement_cost with latest_measure = TRUE keeps only the max r ) out <- compute_movement_cost( - .data = df, + data = df, event_type = "retirement", start_date = "2020-01-01", end_date = "2021-01-01", From e13cd56a48c61d5f829829c6dd9bbaa40760d16f Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:40:27 -0400 Subject: [PATCH 18/23] standardise grouping and data argument names Grouping arguments carried four names for one concept: group_cols (20), group (13), group_col (10) and groups (3). The _col/_cols suffix was sound where used, so keep it and retire the bare forms, assigning each function the suffix its actual arity demands. Arity was verified by calling each function with one and two columns rather than trusting the docs, which were wrong in both directions. Also drop storage-type suffixes from argument names: personnel_dt -> personnel, contract_dt/contract_df -> contracts, event_dt -> events, decrement_dt -> decrements, est_dt -> establishments. The suffix was a false promise; all of these accept a plain data.frame or tibble. Old names still work via resolve_renamed_arg(), which warns and errors if both names are supplied. ggplot_point_line(), ggplot_segment() and sample_group() are renamed without a shim because their arguments are evaluated lazily ({{ }} / enquo() / ensym()), which a forcing shim cannot forward. Call sites were rewritten off parse-tree positions so that aes(group =), data.frame(group =) and dplyr's .groups were left untouched. This also applies the tidyverse documentation style to the same roxygen blocks: sentence-case titles, @return -> @returns, and @param descriptions that start with a capital and end with a full stop. Tests: 605 pass (596 existing plus 9 new deprecation tests), 0 failures, 0 warnings. Co-Authored-By: Claude Opus 5 --- R/consistency.R | 18 ++-- R/coverage.R | 25 +++-- R/data360api.R | 8 +- R/demographics.R | 70 ++++++------ R/equity.R | 6 +- R/growth_decomposition.R | 10 +- R/harmonization.R | 38 +++---- R/model_wage.R | 8 +- R/movement.R | 56 +++++----- R/movement_summarize.R | 42 ++++---- R/overview.R | 42 ++++---- R/plots.R | 82 +++++++------- R/qcheck_plots.R | 75 +++++++------ R/report.R | 31 ++++-- R/retirement.R | 70 ++++++------ R/summarize.R | 126 ++++++++++++---------- R/tenure.R | 32 +++--- R/transition.R | 16 +-- R/treatment.R | 42 ++++---- R/validation.R | 2 +- R/wagebill.R | 24 +++-- R/zzz.R | 63 ++++++++--- man/add_contract_to_event.Rd | 18 +++- man/apply_baseline_index.Rd | 2 +- man/classify_personnel_event.Rd | 2 +- man/clean_hr_data.Rd | 2 +- man/complete_dates.Rd | 2 +- man/compute_baseline_index.Rd | 4 +- man/compute_coverage.Rd | 9 +- man/compute_cross_section.Rd | 8 +- man/compute_cross_section_summary.Rd | 2 +- man/compute_density.Rd | 4 +- man/compute_employment_spells.Rd | 4 +- man/compute_fastshare.Rd | 9 +- man/compute_fastsummary.Rd | 9 +- man/compute_global_consistency.Rd | 2 +- man/compute_growth.Rd | 8 +- man/compute_growth_decomposition.Rd | 2 +- man/compute_growth_summary.Rd | 2 +- man/compute_movement_cost.Rd | 4 +- man/compute_pension_ratio.Rd | 18 ++-- man/compute_percentile.Rd | 2 +- man/compute_quantile.Rd | 4 +- man/compute_record_consistency.Rd | 6 +- man/compute_service_table.Rd | 11 +- man/compute_tenure.Rd | 4 +- man/compute_tenure_panel.Rd | 4 +- man/compute_time_trend.Rd | 6 +- man/compute_trend_summary.Rd | 2 +- man/compute_value_consistency.Rd | 8 +- man/compute_wage_decomposition.Rd | 4 +- man/compute_wagebill.Rd | 16 ++- man/compute_workforce_movement.Rd | 4 +- man/convert_data.Rd | 2 +- man/count_entity.Rd | 4 +- man/count_unique.Rd | 2 +- man/cp_ratio.Rd | 2 +- man/cv.Rd | 2 +- man/define_fns.Rd | 2 +- man/detect_career_transition.Rd | 2 +- man/detect_inconsistent_cols.Rd | 2 +- man/detect_personnel_event.Rd | 2 +- man/detect_reallocation.Rd | 2 +- man/detect_retirement.Rd | 2 +- man/dot-compute_decrement_pair.Rd | 6 +- man/dot-compute_transition_pair.Rd | 8 +- man/dot-smooth_rate_curve.Rd | 2 +- man/estimate_decrement_rates.Rd | 11 +- man/estimate_exit_rates.Rd | 18 ++-- man/estimate_movement_rates.Rd | 8 +- man/fastprop.Rd | 4 +- man/find_duplicate_ids.Rd | 2 +- man/fix_invalid_birthdates.Rd | 2 +- man/fix_invalid_dates.Rd | 2 +- man/fix_negative_salaries.Rd | 2 +- man/fix_retirement_age.Rd | 2 +- man/fix_salary_components.Rd | 2 +- man/fix_underage_workers.Rd | 2 +- man/fix_working_hours.Rd | 4 +- man/generate_hr_report.Rd | 25 +++-- man/get_metadata360.Rd | 2 +- man/ggplot_coef.Rd | 2 +- man/ggplot_point_line.Rd | 4 +- man/ggplot_segment.Rd | 4 +- man/group_color_scale.Rd | 2 +- man/guess_date_frequency.Rd | 2 +- man/model_wage.Rd | 2 +- man/plot_bar_growth.Rd | 2 +- man/plot_bar_total.Rd | 2 +- man/plot_compression_ratio.Rd | 4 +- man/plot_consistency_heatmap.Rd | 12 ++- man/plot_consistency_trend.Rd | 19 ++-- man/plot_coverage_bar.Rd | 2 +- man/plot_coverage_heatmap.Rd | 10 +- man/plot_coverage_trend.Rd | 6 +- man/plot_decile.Rd | 4 +- man/plot_histogram.Rd | 6 +- man/plot_movement.Rd | 8 +- man/plot_movement_cost.Rd | 4 +- man/plot_segment.Rd | 10 +- man/plot_transfer_heatmap.Rd | 2 +- man/plot_transition_network.Rd | 2 +- man/plot_trend.Rd | 2 +- man/remove_duplicate_contracts.Rd | 2 +- man/remove_duplicate_personnel.Rd | 2 +- man/rescale_baseline.Rd | 8 +- man/roll_snapshot_pairs.Rd | 4 +- man/sample_group.Rd | 4 +- man/smooth_decrement_rates.Rd | 11 +- man/validate_column_exists.Rd | 10 +- man/validate_columns_exist.Rd | 10 +- man/validate_date_format.Rd | 8 +- tests/testthat/test-compute_fastshare.R | 12 +-- tests/testthat/test-compute_fastsummary.R | 14 +-- tests/testthat/test-deprecated-args.R | 107 ++++++++++++++++++ tests/testthat/test-estimate_exit_rates.R | 32 +++--- tests/testthat/test-ggplot_point_line.R | 4 +- tests/testthat/test-qcheck_plots.R | 20 ++-- tests/testthat/test-summary_statistics.R | 18 ++-- 119 files changed, 926 insertions(+), 645 deletions(-) create mode 100644 tests/testthat/test-deprecated-args.R diff --git a/R/consistency.R b/R/consistency.R index 4954bdf..9c9ccc7 100644 --- a/R/consistency.R +++ b/R/consistency.R @@ -1,7 +1,7 @@ #' Compute the proportion of consistent records and values in a data frame. #' #' @param data A data frame. -#' @param id_col A character string specifying the name of the column that uniquely identifies records. +#' @param id_col A string specifying the name of the column that uniquely identifies records. #' @param value_cols A character vector specifying the name(s) of columns whose values #' are to be checked for consistency. Value consistency is computed separately for #' each column and averaged across columns before being combined with record consistency. @@ -10,7 +10,7 @@ #' @import dplyr #' @importFrom purrr map_dbl #' -#' @return A numeric value representing the proportion of consistent records and values in the data frame. +#' @returns A numeric value representing the proportion of consistent records and values in the data frame. #' @details Consistency is defined as the proportion of records and values that are consistent #' across the dataset. A record is considered consistent if it has a unique identifier and all #' its associated values are consistent. A value is considered consistent if it does not @@ -57,10 +57,10 @@ compute_global_consistency <- function(data, id_col, value_cols, digits = 2) { round(digits) } -#' Compute the proportion of consistent records in a data frame. +#' Compute the proportion of consistent records in a data frame #' #' @param data A data frame. -#' @param id_col A character string specifying the name of the column that uniquely identifies records (e.g., "personnel_id" or "contract_id"). +#' @param id_col A string specifying the name of the column that uniquely identifies records (e.g., "personnel_id" or "contract_id"). #' @param group_cols A character vector specifying the names of the columns to group by. Default is NULL, which means no grouping. #' @param digits An integer specifying the number of decimal places to round the result to. Default is 2. #' @@ -68,7 +68,7 @@ compute_global_consistency <- function(data, id_col, value_cols, digits = 2) { #' @importFrom data.table as.data.table fifelse #' @importFrom tibble as_tibble #' -#' @return A data frame with the proportion of consistent records in the data frame, optionally by group. +#' @returns A data frame with the proportion of consistent records in the data frame, optionally by group. #' #' @details A record is considered consistent if it has a unique identifier and all its associated values are consistent. #' The function computes the proportion of consistent records in the data frame, optionally grouped by specified columns. @@ -130,18 +130,18 @@ compute_record_consistency <- function( tibble::as_tibble(result) } -#' Compute the proportion of consistent values in a data frame. +#' Compute the proportion of consistent values in a data frame #' #' @param data A data frame. -#' @param id_col A character string specifying the name of the column that uniquely identifies records. -#' @param value_col A character string specifying the name of the column whose values are to be checked for consistency. +#' @param id_col A string specifying the name of the column that uniquely identifies records. +#' @param value_col A string specifying the name of the column whose values are to be checked for consistency. #' @param group_cols A character vector specifying the names of the columns to group by. Default is no grouping. #' @param digits An integer specifying the number of decimal places to round the result to. Default is 2. #' #' @importFrom data.table as.data.table #' @importFrom tibble as_tibble #' -#' @return A data frame with the proportion of consistent values in the data frame, optionally by group. +#' @returns A data frame with the proportion of consistent values in the data frame, optionally by group. #' #' @details Consistency is broadly defined as the proportion of records and values that are consistent #' across the dataset. A value is considered consistent if it does not differ from diff --git a/R/coverage.R b/R/coverage.R index da380ac..a4cfde5 100644 --- a/R/coverage.R +++ b/R/coverage.R @@ -1,33 +1,36 @@ #' Compute coverage of non-missing values in a dataset. #' #' @param data A data frame. -#' @param group A character string specifying the column name to group by. If NULL, coverage is computed for the entire data set. +#' @param group_cols A string specifying the column name to group by. If NULL, coverage is computed for the entire data set. #' @param include_ref_date A logical value indicating whether to include the `ref_date` column in the grouping. #' @param aggregate A logical value indicating whether to aggregate coverage values by the `group`. +#' @param group Deprecated. Use `group_cols` instead. #' #' @importFrom data.table as.data.table #' @importFrom tibble as_tibble #' -#' @return A data frame with coverage values for each column, optionally grouped by the specified `group`. +#' @returns A data frame with coverage values for each column, optionally grouped by the specified `group`. #' #' @export compute_coverage <- function( data, - group = NULL, + group_cols = NULL, include_ref_date = FALSE, - aggregate = FALSE + aggregate = FALSE, + group = NULL ) { + group_cols <- resolve_renamed_arg(group_cols, group, "group", "group_cols") dt <- data.table::as.data.table(data) data_cols <- colnames(dt) if (include_ref_date) { - group <- unique(c("ref_date", group)) + group_cols <- unique(c("ref_date", group_cols)) } - summary_cols <- setdiff(data_cols, group) + summary_cols <- setdiff(data_cols, group_cols) # wide: one coverage value per summary column, one row per group - if (is.null(group)) { + if (is.null(group_cols)) { coverage_wide <- dt[, lapply(.SD, \(col) (sum(!is.na(col)) / length(col)) * 100), .SDcols = summary_cols @@ -35,7 +38,7 @@ compute_coverage <- function( } else { coverage_wide <- dt[, lapply(.SD, \(col) (sum(!is.na(col)) / length(col)) * 100), - by = c(group), + by = c(group_cols), .SDcols = summary_cols ] } @@ -43,7 +46,7 @@ compute_coverage <- function( # long: pivot summary_cols into variable/coverage pairs coverage_data <- data.table::melt( coverage_wide, - id.vars = group, + id.vars = group_cols, measure.vars = summary_cols, variable.name = "variable", value.name = "coverage", @@ -53,7 +56,7 @@ compute_coverage <- function( if (aggregate) { coverage_data <- coverage_data[, .(coverage = mean(coverage, na.rm = TRUE)), - by = c(group) + by = c(group_cols) ] } @@ -65,7 +68,7 @@ compute_coverage <- function( #' @param data A data frame. #' @param digits An integer specifying the number of decimal places to round the result to. Default is 2. #' -#' @return A numeric value representing the proportion of missing values in the data frame. +#' @returns A numeric value representing the proportion of missing values in the data frame. #' #' @export compute_global_coverage <- function(data, digits = 2) { diff --git a/R/data360api.R b/R/data360api.R index 5cefab1..a77619e 100644 --- a/R/data360api.R +++ b/R/data360api.R @@ -1,6 +1,6 @@ #' This function retrieves data from the Data360 API. #' -#' @return A tibble containing data, including country codes, country names, +#' @returns A tibble containing data, including country codes, country names, #' years, and values. #' @examples #' \dontrun{ @@ -89,7 +89,7 @@ get_data360_api <- function(dataset_id, indicator_id, pivot = TRUE) { #' - `INDICATOR`: Indicator code or name #' - `OBS_VALUE`: Observation value for the indicator #' -#' @return A tibble in wide format with columns: +#' @returns A tibble in wide format with columns: #' - `country_code`: The country or region code (from `REF_AREA`) #' - `year`: The year or time period (from `TIME_PERIOD`) #' - One column per unique `INDICATOR`, containing corresponding values from `OBS_VALUE` @@ -143,10 +143,10 @@ pivot_data360 <- function(data) { #' URL, retrieves the metadata in JSON format, and parses it into an R list or #' data frame. #' -#' @param dataset_id A character string or numeric identifier specifying the +#' @param dataset_id A string or numeric identifier specifying the #' dataset for which metadata should be retrieved. #' -#' @return A list (or data frame) containing the metadata associated with the +#' @returns A list (or data frame) containing the metadata associated with the #' requested dataset, as returned by the Data360 API. #' #' @examples diff --git a/R/demographics.R b/R/demographics.R index 618c182..8e2309c 100644 --- a/R/demographics.R +++ b/R/demographics.R @@ -34,11 +34,11 @@ #' collapses into an ambiguous \code{NA}-status row. #' } #' -#' @param snap_t0 data.table. Subset of the full personnel panel at snapshot +#' @param snap_t0 Data.table. Subset of the full personnel panel at snapshot #' T0, already filtered to a single reference date. Must contain #' \code{age_col}, \code{status_col}, \code{personnel_id_col}, #' \code{ref_date_col}, and \code{group_cols}. -#' @param snap_t1 data.table. Subset of the full personnel panel at snapshot +#' @param snap_t1 Data.table. Subset of the full personnel panel at snapshot #' T1 (the period immediately following T0). Same column requirements as #' \code{snap_t0}. #' @param age_col Character. Name of the (integer or coercible-to-integer) @@ -52,11 +52,11 @@ #' column, used to join each cohort member's T0 record to their T1 status. #' @param ref_date_col Character. Name of the reference date column used to #' extract the T0 and T1 dates attached to the output. -#' @param group_cols Character vector. Additional columns (e.g. gender, +#' @param group_cols A character vector. Additional columns (e.g. gender, #' service type) to stratify exposure and outcome counts by, alongside #' \code{age_col}. #' -#' @return A \code{data.table} with one row per +#' @returns A \code{data.table} with one row per #' \code{(age_col, group_cols, status_col)} combination observed in the T0 #' exposure cohort. Columns: #' \describe{ @@ -176,7 +176,7 @@ } -#' Estimate Empirical Decrement Rates from a Personnel Panel +#' Estimate empirical decrement rates from a personnel panel #' #' @description #' Estimates, for each age (and any grouping columns you supply), the @@ -192,7 +192,7 @@ #' using all of the data available, rather than relying on any single pair #' of snapshots (which can be noisy for ages with few people). #' -#' @param personnel_dt A data.table (or data.frame/tibble, coerced +#' @param personnel A data.table (or data.frame/tibble, coerced #' automatically) containing the personnel panel: multiple snapshots of #' the same population over time, identified by \code{ref_date_col}. Must #' contain at least two distinct, non-missing reference dates. @@ -210,8 +210,9 @@ #' identifies each snapshot. #' @param group_cols A character vector of additional columns (e.g. gender, #' occupation, service type) to estimate separate rates by, alongside age. +#' @param personnel_dt Deprecated. Use `personnel` instead. #' -#' @return A data.table with one row per age / \code{group_cols} / outcome +#' @returns A data.table with one row per age / \code{group_cols} / outcome #' type, pooled across every consecutive snapshot pair in #' \code{personnel_dt}: #' \describe{ @@ -306,24 +307,25 @@ #' #' @seealso \code{\link{.compute_decrement_pair}}, \code{\link{roll_snapshot_pairs}} #' @export -estimate_decrement_rates <- function(personnel_dt, +estimate_decrement_rates <- function(personnel, age_col, status_col, personnel_id_col, ref_date_col, - group_cols){ + group_cols, personnel_dt = NULL) { + personnel <- resolve_renamed_arg(personnel, personnel_dt, "personnel_dt", "personnel") # Validate inputs - if (!data.table::is.data.table(personnel_dt)) { + if (!data.table::is.data.table(personnel)) { - personnel_dt <- as.data.table(personnel_dt) + personnel <- as.data.table(personnel) } # Get sorted unique reference dates - all_dates <- sort(unique(personnel_dt[[ref_date_col]])) + all_dates <- sort(unique(personnel[[ref_date_col]])) all_dates <- all_dates[!is.na(all_dates)] # check if there are gaps in all_dates @@ -347,7 +349,7 @@ estimate_decrement_rates <- function(personnel_dt, ### roll through the panel, computing decrement counts for each consecutive ### snapshot pair, then rbindlist() them all together into a single table - decrement_dt <- roll_snapshot_pairs(panel_dt = personnel_dt, + decrement_dt <- roll_snapshot_pairs(panel_dt = personnel, date_col = ref_date_col, f = .compute_decrement_pair, # extra args forwarded to .compute_decrement_pair: @@ -377,7 +379,7 @@ estimate_decrement_rates <- function(personnel_dt, -#' Graduate a Single Age Curve Onto a Complete Age Grid +#' Graduate a single age curve onto a complete age grid #' #' @description #' Internal single-curve workhorse called by \code{smooth_decrement_rates()} @@ -413,7 +415,7 @@ estimate_decrement_rates <- function(personnel_dt, #' there are at least 4 distinct ages); larger values produce a smoother, #' more global fit, smaller values track local features more closely. #' -#' @return A numeric vector of smoothed rates, one per element of +#' @returns A numeric vector of smoothed rates, one per element of #' \code{full_ages}, in the same order. Not clipped to \code{[0, 1]} -- #' callers (e.g. \code{smooth_decrement_rates()}) are responsible for that. #' @@ -434,7 +436,7 @@ estimate_decrement_rates <- function(personnel_dt, as.numeric(stats::predict(fit, newdata = data.frame(age = full_ages))) } -#' Graduate (Smooth and Gap-Fill) Empirical Decrement Rates +#' Graduate (smooth and gap-fill) empirical decrement rates #' #' @description #' Takes the pooled output of \code{estimate_decrement_rates()} and returns a @@ -452,7 +454,7 @@ estimate_decrement_rates <- function(personnel_dt, #' still sum to exactly 1 after smoothing (independently smoothing every #' outcome type would not preserve that). #' -#' @param decrement_dt A data.table (or coercible) shaped like the output of +#' @param decrements A data.table (or coercible) shaped like the output of #' \code{estimate_decrement_rates()}: one row per age / \code{group_cols} / #' \code{status_col}, with a \code{pop} (exposure) and \code{decrement_rate} #' column. @@ -464,8 +466,9 @@ estimate_decrement_rates <- function(personnel_dt, #' represents "stayed" rather than an exit. Defaults to \code{"active"}. #' @param span Numeric. The \code{loess()} smoothing span passed through to #' \code{.smooth_rate_curve()}. Defaults to \code{0.75}. +#' @param decrement_dt Deprecated. Use `decrements` instead. #' -#' @return A data.table with one row per age / \code{group_cols} / +#' @returns A data.table with one row per age / \code{group_cols} / #' \code{status_col}, spanning the full observed age range within each #' group with no gaps: #' \describe{ @@ -495,24 +498,25 @@ estimate_decrement_rates <- function(personnel_dt, #' @seealso \code{\link{.smooth_rate_curve}}, \code{\link{estimate_decrement_rates}}, #' \code{\link{compute_service_table}} #' @export -smooth_decrement_rates <- function(decrement_dt, +smooth_decrement_rates <- function(decrements, age_col, status_col, group_cols, active_value = "active", - span = 0.75) { + span = 0.75, decrement_dt = NULL) { + decrements <- resolve_renamed_arg(decrements, decrement_dt, "decrement_dt", "decrements") - decrement_dt <- as.data.table(decrement_dt) + decrements <- as.data.table(decrements) ### the age grid to graduate onto: the full observed age range within ### each group, computed once across all outcome types (not per-status) ### so every exit cause ends up on exactly the same age sequence - age_range_dt <- decrement_dt[, + age_range_dt <- decrements[, .(min_age = min(get(age_col)), max_age = max(get(age_col))), by = group_cols ] - exit_dt <- decrement_dt[get(status_col) != active_value] + exit_dt <- decrements[get(status_col) != active_value] ### when there are no group_cols, age_range_dt is a single global row -- ### a join has no columns to match on in that case (data.table's `on =` @@ -558,7 +562,7 @@ smooth_decrement_rates <- function(decrement_dt, } -#' Compute an Actuarial Service Table from a Personnel Panel +#' Compute an actuarial service table from a personnel panel #' #' @description #' Builds a multiple-decrement service table: for each age (and any @@ -574,7 +578,7 @@ smooth_decrement_rates <- function(decrement_dt, #' complete, gapless, reasonably stable \code{qx} curve to produce a sensible #' result. #' -#' @param personnel_dt A data.table (or data.frame/tibble, coerced +#' @param personnel A data.table (or data.frame/tibble, coerced #' automatically) containing the personnel panel. Passed straight through #' to \code{estimate_decrement_rates()}. #' @param age_col A single string naming the age column. @@ -601,8 +605,9 @@ smooth_decrement_rates <- function(decrement_dt, #' for noise reduction on strata that have no gap at all. #' @param span Numeric. Forwarded to \code{smooth_decrement_rates()} when #' \code{smooth = TRUE}. Defaults to \code{0.75}. +#' @param personnel_dt Deprecated. Use `personnel` instead. #' -#' @return A data.table with one row per age / \code{group_cols}: +#' @returns A data.table with one row per age / \code{group_cols}: #' \describe{ #' \item{age_col, group_cols}{As supplied.} #' \item{px}{Probability of remaining active from age x to x+1.} @@ -657,7 +662,7 @@ smooth_decrement_rates <- function(decrement_dt, #' #' @seealso \code{\link{estimate_decrement_rates}}, \code{\link{smooth_decrement_rates}} #' @export -compute_service_table <- function(personnel_dt, +compute_service_table <- function(personnel, age_col, status_col, personnel_id_col, @@ -665,12 +670,13 @@ compute_service_table <- function(personnel_dt, group_cols, radix = 100000, smooth = FALSE, - span = 0.75) { + span = 0.75, personnel_dt = NULL) { + personnel <- resolve_renamed_arg(personnel, personnel_dt, "personnel_dt", "personnel") ## compute the decrement rates using the estimate_decrement_rates function ## across all time periods and groupings decrement_dt <- - estimate_decrement_rates(personnel_dt = personnel_dt, + estimate_decrement_rates(personnel = personnel, age_col = age_col, status_col = status_col, personnel_id_col = personnel_id_col, @@ -683,7 +689,7 @@ compute_service_table <- function(personnel_dt, ### smoothing fills gaps and grades away small-cell noise in one step if (isTRUE(smooth)) { decrement_dt <- smooth_decrement_rates( - decrement_dt = decrement_dt, + decrements = decrement_dt, age_col = age_col, status_col = status_col, group_cols = group_cols, @@ -727,7 +733,7 @@ compute_service_table <- function(personnel_dt, ) decrement_dt <- smooth_decrement_rates( - decrement_dt = decrement_dt, + decrements = decrement_dt, age_col = age_col, status_col = status_col, group_cols = group_cols, @@ -759,4 +765,4 @@ compute_service_table <- function(personnel_dt, survival_dt[, ex := Tx / lx] return(survival_dt[]) -} \ No newline at end of file +} diff --git a/R/equity.R b/R/equity.R index 8be2589..f38b92d 100644 --- a/R/equity.R +++ b/R/equity.R @@ -10,7 +10,7 @@ #' @param latest_measure Logical. Restrict to the latest reference date and drop #' `ref_date` from the grouping. Default `FALSE`. #' -#' @return A data frame with the grouping columns, `decile`, `median_value` and +#' @returns A data frame with the grouping columns, `decile`, `median_value` and #' `mean_value`. #' #' @importFrom data.table as.data.table setorderv @@ -51,7 +51,7 @@ compute_decile <- function( out[] } -#' Bin a Measure into a Share Distribution +#' Bin a measure into a share distribution #' #' Bins `measure_col` at a fixed width and reports each bin's share and #' cumulative share of observations, filling empty bins with zero so the @@ -64,7 +64,7 @@ compute_decile <- function( #' @param latest_measure Logical. Restrict to the latest reference date. Default #' `FALSE`. #' -#' @return A data frame with the grouping column, `bin`, `count`, `pct` and +#' @returns A data frame with the grouping column, `bin`, `count`, `pct` and #' `cum_pct`. #' #' @importFrom data.table CJ as.data.table data.table setnames setorderv diff --git a/R/growth_decomposition.R b/R/growth_decomposition.R index e6ec444..94364c4 100644 --- a/R/growth_decomposition.R +++ b/R/growth_decomposition.R @@ -2,9 +2,9 @@ #' #' @param data A data frame containing the data to be analyzed. It should include columns for the grouping variables, a column for the reference date, and a column for the measure of interest (e.g., gross salary). #' @param group_cols A character vector specifying the names of the columns to group by. -#' @param measure_col A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu"). +#' @param measure_col A string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu"). #' -#' @return A data.table with headcount, compensation, wagebill, wagebill_lag, +#' @returns A data.table with headcount, compensation, wagebill, wagebill_lag, #' the continuing-period decomposition (employment/compensation/interaction #' effects), entry/exit effects, is_observed, and a `transition_type` label #' for each row: "start" (panel's first period for this group -- left- @@ -151,12 +151,12 @@ compute_growth_decomposition <- function( #' combined change" -- specifically, how much is pay growth within groups #' versus a shift in headcount share toward higher- or lower-paid groups. #' -#' @param growth_decomp output of compute_growth_decomposition() -#' @param group_cols optional character vector of columns identifying a higher-level +#' @param growth_decomp Output of compute_growth_decomposition() +#' @param group_cols Optional character vector of columns identifying a higher-level #' unit (e.g. "country_code") within which shares/composition are computed #' separately. NULL pools all rows into one global composition per ref_date. #' -#' @return A data.table, one row per ref_date (or per ref_date x `group_cols`), +#' @returns A data.table, one row per ref_date (or per ref_date x `group_cols`), #' with avg_compensation, avg_compensation_lag, within_effect, #' between_effect, cross_effect, entry_effect, exit_effect, and total_effect #' (which equals avg_compensation - avg_compensation_lag by construction, diff --git a/R/harmonization.R b/R/harmonization.R index 449a5cf..27480e9 100644 --- a/R/harmonization.R +++ b/R/harmonization.R @@ -9,7 +9,7 @@ #' #' @param data_list A list of data frames to check. #' -#' @return A character vector of column names that are not shared across all data frames. +#' @returns A character vector of column names that are not shared across all data frames. #' These are the inconsistent or unique column names that appear in only some of the data frames. #' #' @examples @@ -34,7 +34,7 @@ find_inconsistent_colnames <- function(data_list) { dplyr::symdiff(shared_cols, all_cols) } -#' Detect Inconsistent Columns in a Data Frame +#' Detect inconsistent columns in a data frame #' #' This function checks whether any of the specified column names appear in a given data frame. #' It is typically used to identify the presence of inconsistent or unexpected column names across multiple data frames. @@ -42,7 +42,7 @@ find_inconsistent_colnames <- function(data_list) { #' @param data A data frame to inspect. #' @param inconsistent_cols A character vector of column names considered inconsistent. #' -#' @return A logical value: `TRUE` if any inconsistent columns are present in the data frame, `FALSE` otherwise. +#' @returns A logical value: `TRUE` if any inconsistent columns are present in the data frame, `FALSE` otherwise. #' #' @examples #' df <- data.frame(a = 1:3, b = 4:6) @@ -70,7 +70,7 @@ detect_inconsistent_cols <- function(data, inconsistent_cols) { #' column names and values are the original column names), or a data frame with #' two columns: `from` (original column names) and `to` (standardized names). #' -#' @return A data frame with harmonized column names. +#' @returns A data frame with harmonized column names. #' #' @examples #' # Using a named character vector @@ -108,7 +108,7 @@ harmonize_columns <- function(data, dictionary) { return(data_renamed) } -#' Find Duplicate Identifiers in a Data Frame +#' Find duplicate identifiers in a data frame #' #' Identifies duplicated values of a specified identifier column in a data frame or tibble. #' Returns a tibble with the identifier values that appear more than once and their counts. @@ -116,7 +116,7 @@ harmonize_columns <- function(data, dictionary) { #' @param data A data frame or tibble. #' @param identifier The column to check for duplicates. This should be passed as a bare (unquoted) column name using tidy evaluation. #' -#' @return A tibble with the identifier column and a count column `n` indicating the number of times each duplicate appears. +#' @returns A tibble with the identifier column and a count column `n` indicating the number of times each duplicate appears. #' #' @importFrom dplyr count filter #' @@ -155,7 +155,7 @@ find_duplicate_ids <- function(data, identifier) { #' For \code{method = "mode"}, ties are broken arbitrarily by selecting the #' first encountered maximum. Missing values are ignored when computing the mode. #' -#' @return A tibble with one row per unique combination of \code{id_col} and \code{date_col}, +#' @returns A tibble with one row per unique combination of \code{id_col} and \code{date_col}, #' containing the deduplicated \code{value_col}. #' #' @examples @@ -216,7 +216,7 @@ dedup_values <- function( #' @param data A data frame or tibble. #' @param cols A character vector of column names to check. #' -#' @return A tibble with all requested columns, missing ones filled with NA. +#' @returns A tibble with all requested columns, missing ones filled with NA. #' #' @examples #' library(tibble) @@ -258,7 +258,7 @@ complete_columns <- function(data, cols) { #' #' @param data Data frame with columns (country_code, year, wage). #' @param cols A character vector with column name to convert to constant PPP in international 2021 dollars. -#' @return `data_out` augmented with columns converted to international 2021 dollars. +#' @returns `data_out` augmented with columns converted to international 2021 dollars. #' @examples #' library(tibble) #' data <- tibble( @@ -328,7 +328,7 @@ convert_constant_ppp <- function(data, cols) { #' @param base_year Integer scalar. The base year to deflate to. Defaults to #' \code{2021}. #' -#' @return A numeric vector of the same length as \code{col}, expressed in +#' @returns A numeric vector of the same length as \code{col}, expressed in #' constant \code{base_year} LCU prices. Returns \code{NA} for any row where #' CPI data is missing for the given country/year combination. #' @@ -413,7 +413,7 @@ merge_wrapper <- function(...) { #' @param string_dist String distance method passed to `stringdist::amatch()`. NULL disables fuzzy matching. #' @param stopwords Character vector of stopwords to remove. NULL uses a built-in English set. #' -#' @return A data.table with columns: , class_id, class_label, score +#' @returns A data.table with columns: , class_id, class_label, score #' #' @importFrom rlang .data #' @@ -646,11 +646,11 @@ classify_text <- function( #' grouping column and returns all rows belonging to the sampled groups. #' #' @param data A data.frame, tibble, or data.table. -#' @param group Unquoted column name used to define groups. +#' @param group_col Unquoted column name used to define groups. #' @param n Integer; number of distinct groups to sample. If greater than the #' number of available groups, all groups are returned. #' -#' @return An object of the same class as `.data` (tibble -> tibble, +#' @returns An object of the same class as `.data` (tibble -> tibble, #' data.table -> data.table, data.frame -> data.frame) containing only rows #' whose group value was sampled. #' @@ -662,9 +662,9 @@ classify_text <- function( #' @importFrom data.table as.data.table is.data.table #' @importFrom rlang ensym as_string #' @importFrom tibble is_tibble as_tibble -sample_group <- function(data, group, n) { +sample_group <- function(data, group_col, n) { dt <- data.table::as.data.table(data) - group_sym <- rlang::ensym(group) + group_sym <- rlang::ensym(group_col) group_col <- rlang::as_string(group_sym) uniq_vals <- unique(dt[[group_col]]) @@ -687,7 +687,7 @@ sample_group <- function(data, group, n) { } } -#' Convert Data to Match Original Class +#' Convert data to match original class #' #' Converts a dataset to have the same class as another reference dataset. #' This is useful for ensuring consistent output formats when performing @@ -697,7 +697,7 @@ sample_group <- function(data, group, n) { #' @param data A dataset to be converted. Typically a `data.table` or `data.frame`. #' @param data_original The original dataset whose class should be matched. #' -#' @return The input \code{data} converted to the same class as \code{data_original}. +#' @returns The input \code{data} converted to the same class as \code{data_original}. #' #' @details #' The function checks the class of \code{data_original} in the following order: @@ -736,7 +736,7 @@ convert_data <- function(data, data_original) { return(data) } -#' Guess the Reporting Frequency of the Reference Dates +#' Guess the reporting frequency of the reference dates #' #' Evaluates a vector of reference dates and returns a single #' string representing the data's reporting interval (e.g., "year", "month"). @@ -744,7 +744,7 @@ convert_data <- function(data, data_original) { #' #' @param data A dataset containing a column named \code{ref_date} with date values. #' -#' @return A single character scalar: \code{"year"}, \code{"quarter"}, +#' @returns A single character scalar: \code{"year"}, \code{"quarter"}, #' \code{"month"}, \code{"week"}, or \code{"day"}. #' #' @export diff --git a/R/model_wage.R b/R/model_wage.R index 4880487..f7abb47 100644 --- a/R/model_wage.R +++ b/R/model_wage.R @@ -6,7 +6,7 @@ #' effects columns. #' @param outcome_var Character. Name of the outcome column. #' Default `"gross_salary_lcu"`. -#' @param predictor_vars Character vector. Names of predictor columns. +#' @param predictor_vars A character vector. Names of predictor columns. #' Default `c("contract_type", "occupation_native", "educat7", "whours", "paygrade")`. #' @param fixed_effects_vars Character vector, or `NULL` to fit without fixed #' effects. Names of fixed effects columns. @@ -18,7 +18,7 @@ #' warning rather than failing the whole call; if none remain, the model is #' fit with an intercept-only right-hand side (`1`). #' -#' @return A `fixest` model object, as returned by `fixest::feols()`. +#' @returns A `fixest` model object, as returned by `fixest::feols()`. #' #' @export model_wage <- function( @@ -76,7 +76,7 @@ model_wage <- function( #' Plot a wage model fit #' #' @param model_fit A `fixest` model object, as returned by `model_wage()`. -#' @return A `ggplot` object visualizing the model coefficients. +#' @returns A `ggplot` object visualizing the model coefficients. #' @export #' #' @importFrom ggstats ggcoef_model @@ -98,7 +98,7 @@ plot_model_wage <- function(model_fit) { #' #' @param model_fit A `fixest` model object, as returned by `model_wage()`. #' @param fixed_effects_var Character. Name of the fixed effects variable to plot. -#' @return A `ggplot` object visualizing the fixed effects. +#' @returns A `ggplot` object visualizing the fixed effects. #' #' @export #' diff --git a/R/movement.R b/R/movement.R index d3f48ec..046fb8b 100644 --- a/R/movement.R +++ b/R/movement.R @@ -12,13 +12,13 @@ #' @param event_type Character. Either `"hire"` or `"fire"`, controlling which event to detect. #' @param start_date Optional start date for the full date sequence #' (default: `"2007-09-01"`). -#' @param status_col a column within `data` object for the employment status of personnel +#' @param status_col A column within `data` object for the employment status of personnel. #' @param end_date Optional end date for the full date sequence #' (default: `"2018-01-01"`). #' @param freq Frequency for the sequence of dates (default: `"year"`). #' Can be any valid value for \code{seq.Date(by = ...)}. #' -#' @return A dataset with event types detected (e.g., hire or fire). +#' @returns A dataset with event types detected (e.g., hire or fire). #' #' @importFrom data.table as.data.table copy setorderv shift fifelse #' @importFrom lubridate ymd @@ -115,13 +115,13 @@ detect_personnel_event <- function( return(data_out) } -#' Detect Personnel Retirement Events +#' Detect personnel retirement events #' #' Identifies personnel who retired, i.e., whose status changed from "active" to "inactive". #' #' @param data A data.frame or data.table with columns `personnel_id`, `ref_date`, and `status`. #' -#' @return A data.table with `personnel_id`, `ref_date`, and `type_event = "retire"`. +#' @returns A data.table with `personnel_id`, `ref_date`, and `type_event = "retire"`. #' #' @importFrom data.table as.data.table shift #' @@ -158,7 +158,7 @@ detect_retirement <- function(data) { return(retire_dt) } -#' Classify Personnel Movement Events +#' Classify personnel movement events #' #' This function classifies the personnel module into three types of movements: hires, fires, or retirements. #' @@ -170,7 +170,7 @@ detect_retirement <- function(data) { #' @param status_col The name of the column representing employment status. #' @param freq The frequency of the reference dates (default is "year"). #' -#' @return A data frame with an additional column indicating the type of movement for each personnel record. +#' @returns A data frame with an additional column indicating the type of movement for each personnel record. #' #' @importFrom data.table setDT fcase copy #' @importFrom lubridate ymd @@ -227,7 +227,7 @@ classify_personnel_event <- function( data[] } -#' Function to compute the total cost associated with personnel movements. +#' Function to compute the total cost associated with personnel movements #' #' @param data A data frame containing the data to be processed. #' @param id_col The name of the column representing personnel IDs (default is "personnel_id"). @@ -243,7 +243,7 @@ classify_personnel_event <- function( #' @importFrom data.table as.data.table setorderv rbindlist #' #' @export -#' @return A data frame containing the movement cost for each requested event type within the specified groups and reference dates. +#' @returns A data frame containing the movement cost for each requested event type within the specified groups and reference dates. compute_movement_cost <- function( data, id_col = "personnel_id", @@ -310,11 +310,11 @@ compute_movement_cost <- function( #' Function to compute workforce movement for hires, fires, retirement, or turnover #' #' @param data A data frame containing personnel data. -#' @param movement_type A character string indicating the type of movement: "hire", "fire", "retirement", or "turnover". -#' @param measurement_type A character string indicating the measurement type: "count" or "rate". Ignored for turnover, which is a ratio. +#' @param movement_type A string indicating the type of movement: "hire", "fire", "retirement", or "turnover". +#' @param measurement_type A string indicating the measurement type: "count" or "rate". Ignored for turnover, which is a ratio. #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' -#' @return A data.table containing the aggregated movement data. +#' @returns A data.table containing the aggregated movement data. #' #' @importFrom data.table as.data.table setDT #' @@ -408,7 +408,7 @@ compute_workforce_movement <- function( movement_data[] } -#' Estimate Historical Non-Retirement Exit Rates from Panel Data +#' Estimate historical non-retirement exit rates from panel data #' #' @description #' Uses \code{govhr::detect_personnel_event(event_type = "fire")} to identify @@ -417,9 +417,9 @@ compute_workforce_movement <- function( #' \code{exit_rate = n_exits / n_active} per group per panel snapshot, then #' returns the mean rate per group. #' -#' @param contract_dt data.table. Full panel of contract data (all +#' @param contracts Data.table. Full panel of contract data (all #' \code{ref_date} snapshots). -#' @param personnel_dt data.table. Full panel of personnel data. +#' @param personnel Data.table. Full panel of personnel data. #' @param group_cols Character vector or \code{NULL}. Columns to group by #' (e.g. \code{"est_id"}). Pass \code{NULL} for an overall (ungrouped) rate. #' @param freq Character. Frequency passed to @@ -432,13 +432,15 @@ compute_workforce_movement <- function( #' @param end_date_col Character. Default \code{"end_date"}. #' @param contract_type_col Character. Default \code{"contract_type_code"}. #' @param status_col Character. Default \code{"employment_status"}. +#' @param contract_dt Deprecated. Use `contracts` instead. +#' @param personnel_dt Deprecated. Use `personnel` instead. #' -#' @return data.table with \code{group_cols} (if specified) and +#' @returns data.table with \code{group_cols} (if specified) and #' \code{exit_rate} column. #' @export estimate_exit_rates <- function( - contract_dt, - personnel_dt, + contracts, + personnel, group_cols = NULL, freq = "year", ref_date = NULL, @@ -447,10 +449,14 @@ estimate_exit_rates <- function( start_date_col = "start_date", contract_type_col = "contract_type", end_date_col = "end_date", - status_col = "employment_status" + status_col = "employment_status", + contract_dt = NULL, + personnel_dt = NULL ) { - panel_contract_dt <- data.table::as.data.table(contract_dt) - panel_personnel_dt <- data.table::as.data.table(personnel_dt) + contracts <- resolve_renamed_arg(contracts, contract_dt, "contract_dt", "contracts") + personnel <- resolve_renamed_arg(personnel, personnel_dt, "personnel_dt", "personnel") + panel_contract_dt <- data.table::as.data.table(contracts) + panel_personnel_dt <- data.table::as.data.table(personnel) # Validate required columns exist before any downstream operations required_contract <- unique(c( @@ -464,14 +470,14 @@ estimate_exit_rates <- function( missing_p <- setdiff(required_personnel, names(panel_personnel_dt)) if (length(missing_c) > 0) { stop( - "Columns not found in contract_dt: ", + "Columns not found in contracts: ", paste(missing_c, collapse = ", "), call. = FALSE ) } if (length(missing_p) > 0) { stop( - "Columns not found in personnel_dt: ", + "Columns not found in personnel: ", paste(missing_p, collapse = ", "), call. = FALSE ) @@ -492,7 +498,7 @@ estimate_exit_rates <- function( if (length(panel_dates) < 2L) { stop( - "personnel_dt must contain at least 2 distinct ref_date snapshots. ", + "personnel must contain at least 2 distinct ref_date snapshots. ", "Found ", length(panel_dates), ".", @@ -584,7 +590,7 @@ estimate_exit_rates <- function( # helpers ---------------------------------------------------------------- -#' Complete Panel Data by Identifier and Reference Dates +#' Complete panel data by identifier and reference dates #' #' Expands a dataset to include all combinations of identifiers and reference #' dates within a specified start–end range. This is useful for ensuring that @@ -599,7 +605,7 @@ estimate_exit_rates <- function( #' @param freq Character. Interval for date sequence passed to #' \code{seq.Date(by = ...)}. Default is `"year"`. #' -#' @return A \code{data.table} containing all possible combinations of identifiers +#' @returns A \code{data.table} containing all possible combinations of identifiers #' and reference dates between the given start and end points, merged with #' the original data. #' diff --git a/R/movement_summarize.R b/R/movement_summarize.R index 0df9b1e..1bae0b6 100644 --- a/R/movement_summarize.R +++ b/R/movement_summarize.R @@ -1,5 +1,5 @@ -#' Estimate Movement Baseline from Panel Data +#' Estimate movement baseline from panel data #' #' @description #' Analyzes longitudinal panel data to compute empirical transition probabilities @@ -17,9 +17,9 @@ #' result[, .(movement_rate = mean(movement_rate)), by = .(from_group, to_group)] #' } #' -#' @param contract_dt data.table. Contract data in long (panel) format. +#' @param contracts Data.table. Contract data in long (panel) format. #' Must contain \code{ref_date_col} for panel snapshot identification. -#' @param group_cols Character vector. One or more columns defining the movement +#' @param group_cols A character vector. One or more columns defining the movement #' states between which transitions are measured #' (e.g., \code{c("est_id", "paygrade")} or \code{c("paygrade")}). Values #' are concatenated into a single state label when multiple columns are @@ -38,7 +38,7 @@ #' \code{contract_dt}. When provided, salary summary columns are appended to #' the output (see Value). Default: \code{NULL}. #' -#' @return A \code{data.table} with one row per +#' @returns A \code{data.table} with one row per #' \code{(from_group, to_group, from_period, to_period)} transition pair, #' keyed on those four columns. Returns an empty \code{data.table} with the #' same schema if no valid transitions are found. Columns: @@ -70,7 +70,7 @@ #' #' @keywords internal estimate_movement_rates <- function( - contract_dt, + contracts, group_cols, personnel_id_col = "personnel_id", ref_date_col = "ref_date", @@ -80,8 +80,8 @@ estimate_movement_rates <- function( salary_col = NULL ) { # Validate inputs - if (!data.table::is.data.table(contract_dt)) { - stop("contract_dt must be a data.table", call. = FALSE) + if (!data.table::is.data.table(contracts)) { + stop("contracts must be a data.table", call. = FALSE) } if (is.null(group_cols) || length(group_cols) == 0) { stop( @@ -99,18 +99,18 @@ estimate_movement_rates <- function( end_date_col, contract_type_col ), - names(contract_dt) + names(contracts) ) if (length(missing_cols) > 0) { stop( - "Columns not found in contract_dt: ", + "Columns not found in contracts: ", paste(missing_cols, collapse = ", "), call. = FALSE ) } # Get sorted unique reference dates - all_dates <- sort(unique(contract_dt[[ref_date_col]])) + all_dates <- sort(unique(contracts[[ref_date_col]])) all_dates <- all_dates[!is.na(all_dates)] if (length(all_dates) < 2) { @@ -128,7 +128,7 @@ estimate_movement_rates <- function( # iterating — converting full O(N_total) scans into O(log N) binary # lookups per snapshot, which is the dominant cost at scale. all_periods <- roll_snapshot_pairs( - panel_dt = contract_dt, + panel_dt = contracts, date_col = ref_date_col, f = .compute_transition_pair, # extra args forwarded to .compute_transition_pair: @@ -210,7 +210,7 @@ estimate_movement_rates <- function( return(baseline_matrix) } -#' Iterate Consecutive Snapshot Pairs in a Panel data.table +#' Iterate consecutive snapshot pairs in a panel data.table #' #' @description #' Sets a data.table key on \code{date_col} (enabling O(log N) binary-search @@ -224,7 +224,7 @@ estimate_movement_rates <- function( #' annual snapshots) the difference between an unkeyed and a keyed scan is #' roughly 5–10×. #' -#' @param panel_dt data.table. Panel data containing all snapshots. The key +#' @param panel_dt Data.table. Panel data containing all snapshots. The key #' is set/updated in-place on entry; pass \code{data.table::copy()} if the #' caller must preserve the original key. #' @param date_col Character scalar. Name of the date column that identifies @@ -236,7 +236,7 @@ estimate_movement_rates <- function( #' skipped. #' @param ... Additional arguments forwarded to \code{f} unchanged. #' -#' @return A single \code{data.table} produced by +#' @returns A single \code{data.table} produced by #' \code{rbindlist(results, fill = TRUE, use.names = TRUE)} over all #' non-\code{NULL} results. Returns an empty \code{data.table()} when all #' calls return \code{NULL} or the panel has fewer than two distinct dates. @@ -306,7 +306,7 @@ roll_snapshot_pairs <- function(panel_dt, date_col, f, ...) { # helpers ---------------------------------------------------------------- -#' Compute Transition Counts for a Single Consecutive Snapshot Pair +#' Compute transition counts for a single consecutive snapshot pair #' #' @description #' Internal workhorse called by \code{roll_snapshot_pairs()} inside @@ -334,16 +334,16 @@ roll_snapshot_pairs <- function(panel_dt, date_col, f, ...) { #' snapshots), not over the full T0 population. #' } #' -#' @param snap_t0 data.table. Subset of the full panel at snapshot T0, already +#' @param snap_t0 Data.table. Subset of the full panel at snapshot T0, already #' filtered to a single reference date. Must contain \code{ref_date_col}, #' \code{personnel_id_col}, \code{group_cols}, \code{start_date_col}, #' \code{end_date_col}, and \code{contract_type_col}. -#' @param snap_t1 data.table. Subset of the full panel at snapshot T1 (the +#' @param snap_t1 Data.table. Subset of the full panel at snapshot T1 (the #' period immediately following T0). Same column requirements as #' \code{snap_t0}. #' @param ref_date_col Character. Name of the reference date column used to #' extract T0 and T1 dates from the snapshots. -#' @param group_cols Character vector. Columns whose concatenated values define +#' @param group_cols A character vector. Columns whose concatenated values define #' the movement state for each person. Rows with \code{NA} in any of these #' columns are dropped via \code{na.omit()} before state labels are formed. #' @param personnel_id_col Character. Name of the personnel identifier column. @@ -360,7 +360,7 @@ roll_snapshot_pairs <- function(panel_dt, date_col, f, ...) { #' \code{compute_fastsummary(fns = "sum")} before state construction, and #' salary summary columns are appended to the output. Default: \code{NULL}. #' -#' @return A \code{data.table} with one row per \code{(from_group, to_group)} +#' @returns A \code{data.table} with one row per \code{(from_group, to_group)} #' pair observed in this period, or \code{NULL} if either snapshot contains #' no active contracts after filtering. Columns: #' \describe{ @@ -439,7 +439,7 @@ roll_snapshot_pairs <- function(panel_dt, date_col, f, ...) { data = active_t0, cols = salary_col, fns = "sum", - groups = c(personnel_id_col, group_cols), + group_cols = c(personnel_id_col, group_cols), output = "wide" ) } @@ -469,7 +469,7 @@ roll_snapshot_pairs <- function(panel_dt, date_col, f, ...) { data = active_t1, cols = salary_col, fns = "sum", - groups = c(personnel_id_col, group_cols), + group_cols = c(personnel_id_col, group_cols), output = "wide" ) } diff --git a/R/overview.R b/R/overview.R index 4ddcdbb..199b778 100644 --- a/R/overview.R +++ b/R/overview.R @@ -1,11 +1,11 @@ -#' Count Unique Entities by Group +#' Count unique entities by group #' #' @param data Data frame containing the data. #' @param id_col Character. Column name of the unique identifier for the entity. #' @param group_cols Character vector of column names to group by, or `NULL` for no grouping. #' -#' @return A data frame with the grouping columns and a `count` column representing the number of unique entities in each group. +#' @returns A data frame with the grouping columns and a `count` column representing the number of unique entities in each group. #' #' @importFrom data.table as.data.table uniqueN setorderv #' @export @@ -26,7 +26,7 @@ count_entity <- function(data, id_col, group_cols = NULL){ } -#' Compute Trend Summary +#' Compute trend summary #' #' Aggregates data over time into a tidy frame of `ref_date`, the optional #' grouping column, and `value`. Counts rows when `measure_col` is `NULL` @@ -37,7 +37,7 @@ count_entity <- function(data, id_col, group_cols = NULL){ #' grouping. #' @param measure_col Character. Numeric column to sum, or `NULL` to count rows. #' -#' @return A data frame with `ref_date`, optionally `group_col`, and `value`. +#' @returns A data frame with `ref_date`, optionally `group_col`, and `value`. #' #' @importFrom dplyr across all_of #' @export @@ -51,12 +51,12 @@ compute_trend_summary <- function(data, group_col, measure_col = NULL) { data, cols = measure_col, fns = "sum", - groups = groups + group_cols = groups ) } } -#' Apply Baseline Index to a Trend Summary +#' Apply baseline index to a trend summary #' #' Rescales `value` so the earliest observation equals 100. When a grouping #' column is supplied the rescaling is applied independently within each group. @@ -66,7 +66,7 @@ compute_trend_summary <- function(data, group_col, measure_col = NULL) { #' @param group_col Character. Column to group by, or `"ref_date"` for no #' grouping. #' -#' @return The input data frame with `value` rescaled to a baseline index. +#' @returns The input data frame with `value` rescaled to a baseline index. #' #' @importFrom dplyr arrange mutate all_of first #' @export @@ -87,7 +87,7 @@ apply_baseline_index <- function(data, group_col) { } } -#' Compute Cross-Section Summary +#' Compute cross-section summary #' #' Keeps each group's latest reference date and aggregates it into a single #' `value` per group. Counts rows when `measure_col` is `NULL` (headcount) and @@ -97,7 +97,7 @@ apply_baseline_index <- function(data, group_col) { #' @param group_col Character. Column to group by. #' @param measure_col Character. Numeric column to sum, or `NULL` to count rows. #' -#' @return A data frame with the grouping column and a `value` column. +#' @returns A data frame with the grouping column and a `value` column. #' #' @importFrom dplyr all_of filter n summarise #' @export @@ -120,12 +120,12 @@ compute_cross_section_summary <- function(data, group_col, measure_col = NULL) { data_latest, cols = measure_col, fns = "sum", - groups = group_col + group_cols = group_col ) } } -#' Compute Growth Rate Summary +#' Compute growth rate summary #' #' Keeps each group's first and last reference date and computes the percentage #' change between them. Counts rows when `measure_col` is `NULL` (headcount) and @@ -135,7 +135,7 @@ compute_cross_section_summary <- function(data, group_col, measure_col = NULL) { #' @param group_col Character. Column to group by. #' @param measure_col Character. Numeric column to sum, or `NULL` to count rows. #' -#' @return A data frame with the grouping column and a `growth_rate` column, in +#' @returns A data frame with the grouping column and a `growth_rate` column, in #' percentage points (e.g. `12.5` for +12.5%). #' #' @importFrom dplyr all_of arrange filter first last n summarise @@ -156,7 +156,7 @@ compute_growth_summary <- function(data, group_col, measure_col = NULL) { labelled, cols = measure_col, fns = "sum", - groups = c("ref_date", group_col) + group_cols = c("ref_date", group_col) ) } @@ -178,7 +178,7 @@ compute_growth_summary <- function(data, group_col, measure_col = NULL) { } -#' Orange Gradient Colour Scale for Grouped Series +#' Orange gradient colour scale for grouped series #' #' Builds the package's standard sequential orange scale, sized to the number #' of distinct groups present in the data. @@ -186,7 +186,7 @@ compute_growth_summary <- function(data, group_col, measure_col = NULL) { #' @param values Vector of group values. Distinct non-missing values determine #' the number of colours. #' -#' @return A ggplot2 manual colour scale. +#' @returns A ggplot2 manual colour scale. #' #' @importFrom dplyr n_distinct #' @importFrom ggplot2 scale_color_manual @@ -200,7 +200,7 @@ group_color_scale <- function(values) { ) } -#' Plot Time Trend +#' Plot time trend #' #' Draws a line-and-point chart of the measure over `ref_date`, one coloured #' series per group. When `toggle_growth` is `TRUE` the y-axis is formatted as a @@ -216,7 +216,7 @@ group_color_scale <- function(values) { #' @param y_label Character. y-axis label, used when `toggle_growth` is `FALSE`. #' Default `"Value"`. #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' #' @importFrom ggplot2 aes geom_hline geom_line geom_point ggplot scale_y_continuous xlab ylab #' @importFrom scales cut_short_scale label_number @@ -261,7 +261,7 @@ plot_trend <- function( } } -#' Plot Totals by Group +#' Plot totals by group #' #' Draws a horizontal bar chart with groups ordered by the plotted value. Rows #' missing either the value or the group label are dropped. @@ -272,7 +272,7 @@ plot_trend <- function( #' @param x_col Character. Column to plot on the x-axis. Default `"value"`. #' @param x_label Character. x-axis label. Default `"Value"`. #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' #' @importFrom dplyr filter #' @importFrom ggplot2 aes geom_col ggplot guide_axis labs scale_x_continuous scale_y_discrete @@ -302,7 +302,7 @@ plot_bar_total <- function(data, group_col, x_col = "value", x_label = "Value") ggplot2::labs(x = x_label, y = "") } -#' Plot Growth Rates by Group +#' Plot growth rates by group #' #' Draws a horizontal bar chart with groups ordered by `growth_rate`, with a #' dashed reference line at zero separating growth from decline. @@ -311,7 +311,7 @@ plot_bar_total <- function(data, group_col, x_col = "value", x_label = "Value") #' as returned by [compute_growth_summary()]. #' @param group_col Character. Column to group by. #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' #' @importFrom ggplot2 aes geom_col geom_vline ggplot guide_axis labs scale_x_continuous scale_y_discrete #' @importFrom scales cut_short_scale label_number diff --git a/R/plots.R b/R/plots.R index fba5980..2121508 100644 --- a/R/plots.R +++ b/R/plots.R @@ -4,7 +4,7 @@ #' #' @param data Data frame in which each row becomes one bar. #' -#' @return Numeric height in pixels, never below 350. +#' @returns Numeric height in pixels, never below 350. #' #' @export scale_plot_height <- function(data) { @@ -19,11 +19,11 @@ scale_plot_height <- function(data) { #' @param .data A data frame or tibble containing the variables to plot. #' @param x Column to be mapped to the x-axis. #' @param y Column to be mapped to the y-axis. -#' @param group Column specifying the grouping variable (mapped to color). +#' @param group_col Column specifying the grouping variable (mapped to color). #' @param label Column specifying the labels for each point (optional). #' @param ... Any other arguments passed to \code{aes()}. #' -#' @return A \code{ggplot} object representing the grouped line chart. +#' @returns A \code{ggplot} object representing the grouped line chart. #' #' @examples #' \dontrun{ @@ -43,10 +43,10 @@ scale_plot_height <- function(data) { #' @importFrom scales pretty_breaks #' #' @export -ggplot_point_line <- function(.data, x, y, group = NULL, label = NULL, ...) { +ggplot_point_line <- function(.data, x, y, group_col = NULL, label = NULL, ...) { plot <- ggplot( .data, - aes(x = {{ x }}, y = {{ y }}, color = {{ group }}, ...) + aes(x = {{ x }}, y = {{ y }}, color = {{ group_col }}, ...) ) + geom_line(linewidth = 3) + geom_point(size = 8) + @@ -69,7 +69,7 @@ ggplot_point_line <- function(.data, x, y, group = NULL, label = NULL, ...) { ) } - if (!rlang::quo_is_null(rlang::enquo(group))) { + if (!rlang::quo_is_null(rlang::enquo(group_col))) { plot <- plot + ggthemes::scale_colour_few() } @@ -88,9 +88,9 @@ ggplot_point_line <- function(.data, x, y, group = NULL, label = NULL, ...) { #' #' @param data A data.frame or tibble. #' @param col Unquoted numeric column (values). -#' @param group Unquoted grouping column. +#' @param group_col Unquoted grouping column. #' -#' @return A ggplot object. +#' @returns A ggplot object. #' @examples #' \dontrun{ #' ggplot_segment(df, salary, occupation) @@ -102,9 +102,9 @@ ggplot_point_line <- function(.data, x, y, group = NULL, label = NULL, ...) { #' @importFrom dplyr group_by summarise mutate arrange pull desc #' @importFrom ggplot2 ggplot geom_segment geom_point scale_y_discrete labs theme_minimal #' @importFrom stats median -ggplot_segment <- function(data, col, group) { +ggplot_segment <- function(data, col, group_col) { colq <- rlang::enquo(col) - gq <- rlang::enquo(group) + gq <- rlang::enquo(group_col) col_name <- rlang::as_label(colq) g_name <- rlang::as_label(gq) @@ -170,8 +170,8 @@ ggplot_segment <- function(data, col, group) { #' Plot model coefficients with confidence intervals #' @param model A fitted model object (e.g., lm, glm). -#' @param coef A character string of coefficient name to plot. It can be a regular expression (e.g., "^term"). -#' @return A ggplot object showing coefficients with error bars. +#' @param coef A string of coefficient name to plot. It can be a regular expression (e.g., "^term"). +#' @returns A ggplot object showing coefficients with error bars. #' @examples #' \dontrun{ #' model <- lm(mpg ~ wt + hp, data = mtcars) @@ -204,7 +204,7 @@ ggplot_coef <- function(model, coef) { } -#' Create a Segment Plot with Jittered Points +#' Create a segment plot with jittered points #' #' Produces a ggplot2 visualization showing the range (min to max) and distribution #' of values for a numeric variable across different groups. Groups are ordered by @@ -213,10 +213,11 @@ ggplot_coef <- function(model, coef) { #' @param data A data frame containing the variables to plot. #' @param col Character string specifying the name of the numeric column to plot #' on the x-axis. -#' @param group Character string specifying the name of the grouping column for +#' @param group_col Character string specifying the name of the grouping column for #' the y-axis. +#' @param group Deprecated. Use `group_col` instead. #' -#' @return A ggplot2 object displaying: +#' @returns A ggplot2 object displaying: #' \itemize{ #' \item Grey horizontal segments showing the range (min to max) for each group #' \item Jittered points showing the distribution of individual observations @@ -234,14 +235,15 @@ ggplot_coef <- function(model, coef) { #' } #' #' @examples -#' plot_segment(mtcars, col = "mpg", group = "cyl") +#' plot_segment(mtcars, col = "mpg", group_col = "cyl") #' #' @importFrom dplyr group_by summarise mutate arrange pull #' @importFrom ggplot2 ggplot aes geom_segment geom_jitter scale_y_discrete labs #' @importFrom tibble tibble #' #' @export -plot_segment <- function(data, col, group) { +plot_segment <- function(data, col, group_col, group = NULL) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") df <- data # Calculate summary statistics using .data[[]] @@ -250,7 +252,7 @@ plot_segment <- function(data, col, group) { xmin = min(.data[[col]], na.rm = TRUE), xmax = max(.data[[col]], na.rm = TRUE), mean = mean(.data[[col]], na.rm = TRUE), - .by = .data[[group]] + .by = .data[[group_col]] ) |> # drop if any components are missing for a group na.omit() |> @@ -263,19 +265,19 @@ plot_segment <- function(data, col, group) { # Determine group ordering by median ordered_levels <- summary_df |> dplyr::arrange(dplyr::desc(.data[["mean"]])) |> - dplyr::pull(.data[[group]]) |> + dplyr::pull(.data[[group_col]]) |> as.character() # Apply factor ordering for plotting - summary_df[[group]] <- factor( - as.character(summary_df[[group]]), + summary_df[[group_col]] <- factor( + as.character(summary_df[[group_col]]), levels = rev(ordered_levels) ) plot_data <- df |> dplyr::mutate( - !!group := factor( - as.character(.data[[group]]), + !!group_col := factor( + as.character(.data[[group_col]]), levels = rev(ordered_levels) ) ) @@ -287,15 +289,15 @@ plot_segment <- function(data, col, group) { ggplot2::aes( x = .data[["xmin"]], xend = .data[["xmax"]], - y = .data[[group]], - yend = .data[[group]] + y = .data[[group_col]], + yend = .data[[group_col]] ), color = "grey70", linewidth = 1 ) + ggplot2::geom_jitter( data = plot_data, - ggplot2::aes(x = .data[[col]], y = .data[[group]]), + ggplot2::aes(x = .data[[col]], y = .data[[group_col]]), height = 0.1, width = 0.1, alpha = 0.7, @@ -303,17 +305,17 @@ plot_segment <- function(data, col, group) { shape = 1 ) + ggplot2::scale_y_discrete() + - ggplot2::labs(x = col, y = group) + ggplot2::labs(x = col, y = group_col) } -#' Plot Personnel Movement Over Time +#' Plot personnel movement over time #' #' @param data A data frame containing the movement data with columns `ref_date`, `indicator`, and optionally a grouping column. -#' @param movement_type A character string indicating the type of movement: "hire", "fire", or "turnover". -#' @param measurement_type A character string indicating the measurement type: "count" or "rate". +#' @param movement_type A string indicating the type of movement: "hire", "fire", or "turnover". +#' @param measurement_type A string indicating the measurement type: "count" or "rate". #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' -#' @return A ggplot2 object representing the personnel movement over time. +#' @returns A ggplot2 object representing the personnel movement over time. #' #' @importFrom ggplot2 ggplot aes geom_point geom_line labs scale_y_continuous #' @importFrom dplyr n_distinct @@ -383,12 +385,12 @@ plot_movement <- function(data, movement_type, measurement_type, group_cols) { plot } -#' Plot Decile Summary +#' Plot decile summary #' #' @param data A data frame produced by `compute_decile()`, containing columns `decile`, `mean_value`, and optionally a grouping column. #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' -#' @return A ggplot2 object representing the decile summary. +#' @returns A ggplot2 object representing the decile summary. #' #' @importFrom ggplot2 ggplot aes geom_col labs scale_x_continuous facet_wrap #' @@ -438,16 +440,16 @@ plot_decile <- function(data, group_cols) { plot } -#' Plot Density as Percentage Share +#' Plot density as percentage share #' #' @param data A data frame produced by `compute_histogram()` or `compute_cumulative()`, containing columns `bin`, `pct`, and optionally a grouping column. -#' @param plot_type A character string indicating the type of plot: "histogram" or "cumulative". +#' @param plot_type A string indicating the type of plot: "histogram" or "cumulative". #' @param group_col The column name to group by. #' #' @import ggplot2 #' @importFrom grDevices colorRampPalette #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' @export plot_histogram <- function(data, plot_type = "histogram", group_col = NULL) { plot_type <- match.arg(plot_type, c("histogram", "cumulative")) @@ -475,13 +477,13 @@ plot_histogram <- function(data, plot_type = "histogram", group_col = NULL) { plot } -#' Plot Compression Ratio +#' Plot compression ratio #' #' @param data A data frame containing the compression ratio data produced by `compute_compression_ratio()`. #' @param group_cols A character vector of columns to group by, or `"ref_date"` #' for no grouping. #' -#' @return A ggplot2 object representing the compression ratio. +#' @returns A ggplot2 object representing the compression ratio. #' #' @importFrom ggplot2 ggplot aes geom_point geom_linerange labs scale_color_manual #' @importFrom dplyr n_distinct @@ -531,12 +533,12 @@ plot_compression_ratio <- function(data, group_cols = NULL) { plot } -#' Plot Movement Cost +#' Plot movement cost #' #' @param data A data frame containing the movement cost data with columns `movement_cost` and optionally a grouping column. #' @param group_cols A character vector of columns to group by, or `"ref_date"` for no grouping. #' -#' @return A ggplot2 object representing the movement cost. +#' @returns A ggplot2 object representing the movement cost. #' #' @importFrom ggplot2 ggplot aes geom_col labs scale_color_manual #' @importFrom dplyr n_distinct diff --git a/R/qcheck_plots.R b/R/qcheck_plots.R index 8c72c6e..f668276 100644 --- a/R/qcheck_plots.R +++ b/R/qcheck_plots.R @@ -6,18 +6,20 @@ #' #' @param data A data frame. Typically the contract, personnel, or #' establishment dataset for the active module. -#' @param group Character string. Grouping variable inherited from the +#' @param group_col A string. Grouping variable inherited from the #' `coverage_group` UI input (e.g. `"ref_date"`, `"grade_id"`). #' @param toggle_growth Logical. When `TRUE` the y-axis switches to a #' baseline-index view (first period = 100). Defaults to `FALSE`. +#' @param group Deprecated. Use `group_col` instead. #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' #' @export -plot_coverage_trend <- function(data, group, toggle_growth = FALSE) { +plot_coverage_trend <- function(data, group_col, toggle_growth = FALSE, group = NULL) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") coverage_data <- compute_coverage( data, - group = group, + group_cols = group_col, include_ref_date = TRUE, aggregate = TRUE ) @@ -25,36 +27,39 @@ plot_coverage_trend <- function(data, group, toggle_growth = FALSE) { plot_trend( coverage_data, y_col = "coverage", - group_col = group, + group_col = group_col, toggle_growth = toggle_growth, y_label = "Coverage" ) } -#' Plot Consistency Over Time +#' Plot consistency over time #' #' @param data A data frame. -#' @param id_col Character string. The column name of the unique identifier for each record. -#' @param group Character string. The column name of the grouping variable (e.g., "ref_date"). -#' @param value_col Character string. The column name of the value to be checked for consistency. -#' @param type_plot Character string. The type of consistency plot ("record" or "value"). +#' @param id_col A string. The column name of the unique identifier for each record. +#' @param group_col A string. The column name of the grouping variable (e.g., "ref_date"). +#' @param value_col A string. The column name of the value to be checked for consistency. +#' @param type_plot A string. The type of consistency plot ("record" or "value"). #' @param toggle_growth Logical. When `TRUE` the y-axis switches to a baseline-index view (first period = 100). Defaults to `FALSE`. +#' @param group Deprecated. Use `group_col` instead. #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' #' @export plot_consistency_trend <- function( data, id_col, - group, + group_col, value_col, type_plot, - toggle_growth = FALSE + toggle_growth = FALSE, + group = NULL ) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") # add ref_date to the group if not already included group_with_ref_date <- unique( c( - group, + group_col, "ref_date" ) ) @@ -72,13 +77,13 @@ plot_consistency_trend <- function( plot_trend( data, y_col = consistency_col, - group_col = group, + group_col = group_col, toggle_growth = toggle_growth, y_label = "Consistency" ) } -#' Plot Coverage by Group (Coloured Bar Chart) +#' Plot coverage by group (coloured bar chart) #' #' Computes per-group coverage using [compute_coverage()] (without #' `ref_date`, not aggregated) and renders a horizontal bar chart coloured @@ -91,7 +96,7 @@ plot_consistency_trend <- function( #' @param data A data frame. Typically the contract, personnel, or #' establishment dataset for the active module. #' -#' @return A ggplot2 object. +#' @returns A ggplot2 object. #' #' @import ggplot2 #' @importFrom dplyr filter mutate case_when @@ -151,25 +156,27 @@ plot_coverage_bar <- function(data) { ggplot2::labs(x = "Coverage", y = "", fill = "Coverage") } -#' Plot Coverage Heatmap by Group +#' Plot coverage heatmap by group #' #' @param data A data frame. -#' @param group Character string. Grouping variable. +#' @param group_col A string. Grouping variable. +#' @param group Deprecated. Use `group_col` instead. #' #' @importFrom plotly plot_ly layout #' @importFrom dplyr mutate #' @importFrom scales label_percent #' -#' @return A plotly object representing a heatmap of coverage values by group and variable. +#' @returns A plotly object representing a heatmap of coverage values by group and variable. #' @export -plot_coverage_heatmap <- function(data, group = NULL) { - if (is.null(group) || group == "none") { - group <- "ref_date" +plot_coverage_heatmap <- function(data, group_col = NULL, group = NULL) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") + if (is.null(group_col) || group_col == "none") { + group_col <- "ref_date" } coverage_data <- compute_coverage( data, - group = group, + group_cols = group_col, aggregate = FALSE ) |> dplyr::mutate( @@ -179,7 +186,7 @@ plot_coverage_heatmap <- function(data, group = NULL) { # plot heatmap plotly::plot_ly( data = coverage_data, - x = ~ .data[[group]], + x = ~ .data[[group_col]], y = ~variable, z = ~coverage, type = "heatmap", @@ -205,21 +212,23 @@ plot_coverage_heatmap <- function(data, group = NULL) { ) } -#' Plot Consistency Heatmap by Group +#' Plot consistency heatmap by group #' #' @param data A data frame. -#' @param id_col Character string. The column name of the unique identifier for each record. -#' @param group Character string. The column name of the grouping variable (e.g., "ref_date"). +#' @param id_col A string. The column name of the unique identifier for each record. +#' @param group_cols A string. The column name of the grouping variable (e.g., "ref_date"). +#' @param group Deprecated. Use `group_cols` instead. #' #' @importFrom plotly plot_ly layout #' @importFrom dplyr mutate #' @importFrom scales label_percent #' @importFrom purrr map_dfr #' -#' @return A plotly heatmap object representing consistency values by group and variable. +#' @returns A plotly heatmap object representing consistency values by group and variable. #' @export -plot_consistency_heatmap <- function(data, id_col, group) { - value_cols <- setdiff(names(data), c(id_col, group)) +plot_consistency_heatmap <- function(data, id_col, group_cols, group = NULL) { + group_cols <- resolve_renamed_arg(group_cols, group, "group", "group_cols") + value_cols <- setdiff(names(data), c(id_col, group_cols)) consistency_data <- purrr::map_dfr( value_cols, @@ -227,7 +236,7 @@ plot_consistency_heatmap <- function(data, id_col, group) { data, id_col = id_col, value_col = .x, - group_cols = group + group_cols = group_cols ) |> dplyr::mutate( variable = .x, @@ -237,7 +246,7 @@ plot_consistency_heatmap <- function(data, id_col, group) { plotly::plot_ly( data = consistency_data, - x = ~ .data[[group]], + x = ~ .data[[group_cols]], y = ~variable, z = ~value_consistency, type = "heatmap", diff --git a/R/report.R b/R/report.R index 43e3823..ba2c72e 100644 --- a/R/report.R +++ b/R/report.R @@ -6,22 +6,25 @@ #' and optional quality control diagnostics across Contract, Personnel, and #' Establishment modules. #' -#' @param contract_dt A data.table containing the Contract module data with +#' @param contracts A data.table containing the Contract module data with #' harmonized column names according to \code{\link{dictionary}}. #' Should include columns such as contract_id, personnel_id, est_id, #' ref_date, salary fields, and occupation information. -#' @param personnel_dt A data.table containing the Personnel module data with +#' @param personnel A data.table containing the Personnel module data with #' harmonized column names. Should include personnel_id and demographic #' information. -#' @param est_dt A data.table containing the Establishment module data with +#' @param establishments A data.table containing the Establishment module data with #' harmonized column names. Should include est_id and establishment #' characteristics. #' @param country_code The reference country code. Must be specified in the three-letter, World Bank standard (e.g., BRA for Brazil). #' @param output Character string specifying the output file name. Defaults to #' "hr_report.html". The file will be created in the current working #' directory. +#' @param contract_dt Deprecated. Use `contracts` instead. +#' @param personnel_dt Deprecated. Use `personnel` instead. +#' @param est_dt Deprecated. Use `establishments` instead. #' -#' @return An HR report, in HTML. +#' @returns An HR report, in HTML. #' #' @examples #' \dontrun{ @@ -29,7 +32,7 @@ #' generate_hr_report( #' contract_dt = bra_hrmis_contract, #' personnel_dt = bra_hrmis_personnel, -#' est_dt = bra_hrmis_est, +#' establishments = bra_hrmis_est, #' country_code = "BRA", #' output = "brazil_hr_report.html" #' ) @@ -41,12 +44,18 @@ #' @importFrom rmarkdown render #' @export generate_hr_report <- function( - contract_dt, - personnel_dt, - est_dt, + contracts, + personnel, + establishments, country_code, - output = "hr_report.html" + output = "hr_report.html", + contract_dt = NULL, + personnel_dt = NULL, + est_dt = NULL ) { + contracts <- resolve_renamed_arg(contracts, contract_dt, "contract_dt", "contracts") + personnel <- resolve_renamed_arg(personnel, personnel_dt, "personnel_dt", "personnel") + establishments <- resolve_renamed_arg(establishments, est_dt, "est_dt", "establishments") qmd_path <- system.file( "templates", "standard_hr_report.qmd", @@ -56,8 +65,8 @@ generate_hr_report <- function( rmarkdown::render( input = qmd_path, params = list( - contract_dt = contract_dt, - personnel_dt = personnel_dt, + contract_dt = contracts, + personnel_dt = personnel, country_code = country_code ), output_file = output diff --git a/R/retirement.R b/R/retirement.R index 4aae89f..acc8624 100644 --- a/R/retirement.R +++ b/R/retirement.R @@ -9,7 +9,7 @@ #' @param simplify_retirement_date A logical value indicating whether to simplify the retirement date to the end of the year (default is TRUE). #' @param cutoff_date A numeric value indicating the cut-off for future retirement projections in years (default is 10). #' -#' @return A data frame with projected retirement dates and counts of staff eligible for retirement at each reference date. +#' @returns A data frame with projected retirement dates and counts of staff eligible for retirement at each reference date. #' #' @importFrom data.table as.data.table #' @importFrom lubridate years @@ -93,14 +93,14 @@ project_retirement <- function( projected_retirement_data[] } -#' Compute Ratio of Last Salary to First Pension for Retired Workers +#' Compute ratio of last salary to first pension for retired workers #' #' For each individual who has retired, computes the ratio of their first #' pension payment to their last active salary. #' -#' @param personnel_dt A data.table (or tibble/data.frame) containing at minimum +#' @param personnel A data.table (or tibble/data.frame) containing at minimum #' the columns named in `id_col`, `status_col`, and `date_col`. -#' @param contract_dt A data.table (or tibble/data.frame) containing at minimum +#' @param contracts A data.table (or tibble/data.frame) containing at minimum #' the columns named in `id_col`, `date_col`, and `salary_col`. #' @param salary_col A single string naming the compensation column to use, #' e.g. `"gross_salary_def"` (default), `"base_salary_lcu"`, etc. @@ -115,9 +115,11 @@ project_retirement <- function( #' that identifies a pensioner record. Defaults to `"pensioner"`. #' @param keep_vars A character vector of additional contract-level columns #' to attach via `govhr::add_contract_to_event()`. Defaults to NULL +#' @param personnel_dt Deprecated. Use `personnel` instead. +#' @param contract_dt Deprecated. Use `contracts` instead. #' #' -#' @return A data.table with one row per retiring individual containing +#' @returns A data.table with one row per retiring individual containing #' the `id_col` identifier, `ref_date_active` (last active date), #' `last_salary`, `ref_date_pension` (first pension date), #' `first_pension`, and `replacement_rate`. @@ -145,38 +147,42 @@ project_retirement <- function( #' #' @export compute_pension_ratio <- function( - personnel_dt, - contract_dt, + personnel, + contracts, salary_col, personnel_id_col = "personnel_id", status_col = "employment_status", date_col = "ref_date", pensioner_value = "pensioner", - keep_vars = NULL + keep_vars = NULL, + personnel_dt = NULL, + contract_dt = NULL ) { + personnel <- resolve_renamed_arg(personnel, personnel_dt, "personnel_dt", "personnel") + contracts <- resolve_renamed_arg(contracts, contract_dt, "contract_dt", "contracts") ## ensure we have data.tables - personnel_dt <- data.table::as.data.table(personnel_dt) - contract_dt <- data.table::as.data.table(contract_dt) + personnel <- data.table::as.data.table(personnel) + contracts <- data.table::as.data.table(contracts) stopifnot( - salary_col %in% names(contract_dt), - status_col %in% names(personnel_dt), - personnel_id_col %in% names(personnel_dt), - personnel_id_col %in% names(contract_dt), - date_col %in% names(personnel_dt), - date_col %in% names(contract_dt) + salary_col %in% names(contracts), + status_col %in% names(personnel), + personnel_id_col %in% names(personnel), + personnel_id_col %in% names(contracts), + date_col %in% names(personnel), + date_col %in% names(contracts) ) # Identify pensioner IDs - retiree_ids <- unique(personnel_dt[ + retiree_ids <- unique(personnel[ get(status_col) == pensioner_value, get(personnel_id_col) ]) # Tag retiree contracts with employment_status from personnel table retiree_tagged <- merge( - contract_dt[get(personnel_id_col) %in% retiree_ids], - personnel_dt[, c(personnel_id_col, status_col, date_col), with = FALSE], + contracts[get(personnel_id_col) %in% retiree_ids], + personnel[, c(personnel_id_col, status_col, date_col), with = FALSE], by = c(personnel_id_col, date_col), all.x = TRUE ) @@ -204,8 +210,8 @@ compute_pension_ratio <- function( # Add contract details last_active <- add_contract_to_event( - event_dt = last_active, - contract_dt = contract_dt, + events = last_active, + contracts = contracts, keep_vars = keep_vars ) data.table::setorderv( @@ -216,8 +222,8 @@ compute_pension_ratio <- function( last_active <- last_active[, .SD[1L], by = c(personnel_id_col, date_col)] first_pension <- add_contract_to_event( - event_dt = first_pension, - contract_dt = contract_dt, + events = first_pension, + contracts = contracts, keep_vars = keep_vars ) data.table::setorderv( @@ -259,21 +265,23 @@ compute_pension_ratio <- function( # helpers ---------------------------------------------------------------- -#' Add Contract Information to Event Records +#' Add contract information to event records #' #' @description #' This function merges contract information into an event dataset (such as hires, terminations, or transfers) #' by matching on `personnel_id` and `ref_date`. It ensures that selected variables from the contract dataset #' are attached to corresponding events without duplicating records. #' -#' @param event_dt A data.table containing personnel event records. Must include the columns +#' @param events A data.table containing personnel event records. Must include the columns #' `personnel_id` and `ref_date`. -#' @param contract_dt A data.table containing contract information, also including `personnel_id` +#' @param contracts A data.table containing contract information, also including `personnel_id` #' and `ref_date`. The contract dataset provides additional attributes describing the personnel's #' contractual context on each reference date. #' @param keep_vars A character vector of variable names in `contract_dt` to be merged into the #' event dataset. These typically describe contract-level attributes such as position, department, #' or employment type. +#' @param event_dt Deprecated. Use `events` instead. +#' @param contract_dt Deprecated. Use `contracts` instead. #' #' @return #' A data.table identical to `event_dt`, but with the specified variables from `contract_dt` @@ -314,13 +322,15 @@ compute_pension_ratio <- function( #' #' @seealso [data.table::merge()], [data.table::unique()] #' @export -add_contract_to_event <- function(event_dt, contract_dt, keep_vars) { - contract_dt <- unique(contract_dt[, +add_contract_to_event <- function(events, contracts, keep_vars, event_dt = NULL, contract_dt = NULL) { + events <- resolve_renamed_arg(events, event_dt, "event_dt", "events") + contracts <- resolve_renamed_arg(contracts, contract_dt, "contract_dt", "contracts") + contracts <- unique(contracts[, c("personnel_id", "ref_date", keep_vars), with = FALSE ]) - event_dt <- contract_dt[event_dt, on = c("personnel_id", "ref_date")] + events <- contracts[events, on = c("personnel_id", "ref_date")] - return(event_dt) + return(events) } diff --git a/R/summarize.R b/R/summarize.R index 32cec4b..dda3e26 100644 --- a/R/summarize.R +++ b/R/summarize.R @@ -17,15 +17,16 @@ #' \item A list of functions or formulas, possibly mixed with character #' names referring to `define_fns()`. #' } -#' @param groups A character vector. Column(s) by which to group the data +#' @param group_cols A character vector. Column(s) by which to group the data #' before computing the summary statistics. #' @param output Character. Either `"long"` (default) or `"wide"` to specify #' the output format. `"long"` returns one row per group per summary #' statistic, `"wide"` returns one row per group with multiple columns for #' each summary statistic. #' @param tbl Logical. If `TRUE`, converts the result to a tibble (`tibble::as_tibble()`). +#' @param groups Deprecated. Use `group_cols` instead. #' -#' @return A dataset containing the summary statistics for the selected columns. +#' @returns A dataset containing the summary statistics for the selected columns. #' The output will be either long or wide depending on the `output` argument. #' The returned object will match the class of the input `data` (unless `tbl = TRUE`). #' @@ -64,10 +65,12 @@ compute_fastsummary <- function( data, cols, fns = NULL, - groups, + group_cols, output = c("long", "wide"), - tbl = FALSE + tbl = FALSE, + groups = NULL ) { + group_cols <- resolve_renamed_arg(group_cols, groups, "groups", "group_cols") output <- match.arg(output) orig_class <- class(data) if (!data.table::is.data.table(data)) { @@ -109,12 +112,12 @@ compute_fastsummary <- function( } j_call <- as.call(c(as.name("list"), calls)) - stats_dt <- data[, eval(j_call), by = groups] + stats_dt <- data[, eval(j_call), by = group_cols] if (output == "long") { stats_dt <- data.table::melt( stats_dt, - id.vars = groups, + id.vars = group_cols, variable.name = "indicator", value.name = "value" ) @@ -149,15 +152,16 @@ compute_fastsummary <- function( #' @param macro_cols A character vector of column names in `macro_data` to use as denominators #' for ratio calculations. #' @param cols A character vector of column names in `data` to summarize. -#' @param groups A character vector of column names in `data` to group by. +#' @param group_cols A character vector of column names in `data` to group by. #' Typically includes country and date/year variables. Default is `c("country_code", "year")`. #' @param fns A character vector of summary functions to apply to `cols`. #' Examples: `"sum"`, `"mean"`, `"median"`. #' @param output Either `"long"` or `"wide"` (default `"long"`). #' - `"long"` returns a tidy table with columns: group variables, `macro_var`, `summary_var`, `indicator`, and `value`. #' - `"wide"` returns a table with one column per indicator and original macro/summary values. +#' @param groups Deprecated. Use `group_cols` instead. #' -#' @return A dataset containing: +#' @returns A dataset containing: #' - In `"long"` format: group variables, `macro_var`, `macro_value`, `summary_var`, `summary_value`, `indicator`, and `value`. #' - In `"wide"` format: group variables, one column per indicator (`summary_var` per `macro_var`), and original macro and summary values. #' The returned object will match the class of the input `data`. @@ -205,10 +209,12 @@ compute_fastshare <- function( macro_data = macro_indicators |> data.table::as.data.table(), macro_cols, cols, - groups, + group_cols, fns, - output = c("long", "wide") + output = c("long", "wide"), + groups = NULL ) { + group_cols <- resolve_renamed_arg(group_cols, groups, "groups", "group_cols") output <- match.arg(output) orig_class <- class(data) orig_macro_class <- class(macro_data) @@ -223,7 +229,7 @@ compute_fastshare <- function( data = data, cols = cols, fns = fns, - groups = groups, + group_cols = group_cols, output = "wide" ) @@ -341,7 +347,7 @@ compute_fastshare <- function( #' @param date_col A date or numeric column (either unquoted or as a string) #' used to order the data and define the time sequence (typically a year column). #' -#' @return A dataset with: +#' @returns A dataset with: #' \itemize{ #' \item The completed `date_col` sequence. #' \item A new column named `"growth_"` containing the year-over-year growth rates. @@ -416,7 +422,7 @@ compute_fastchange <- function(data, col, date_col) { #' #' @inheritParams dplyr::count #' -#' @return A tibble with one row per group and a count column. +#' @returns A tibble with one row per group and a count column. #' #' @examples #' df <- tibble::tibble(group = c("a", "a", "b")) @@ -441,11 +447,11 @@ fastcount <- function(x, ..., wt = NULL, sort = FALSE, name = NULL) { #' It expects the input to already contain a count column named `n` #' (for example the output of `dplyr::count()` or `fastcount()`). #' -#' @param data A data frame or tibble containing a count column `n`. +#' @param .data A data frame or tibble containing a count column `n`. #' @param ... Grouping variables. Proportions are #' computed within the combinations of these variables. #' -#' @return A tibble with the same columns as `.data` plus a numeric +#' @returns A tibble with the same columns as `.data` plus a numeric #' `prop` column giving the group share (0–1). Missing `n` values are #' ignored in the denominator via `na.rm = TRUE`. #' @@ -477,12 +483,12 @@ fastprop <- function(.data, ...) { #' base year value. This is useful for comparing growth trends across multiple #' time series on a common scale. #' -#' @param data A data.frame or tibble containing the time series data. +#' @param .data A data.frame or tibble containing the time series data. #' @param date_col Unquoted column name containing the time/year variable. #' @param ... Unquoted column names to compute indices for. Each selected #' column must be numeric. #' -#' @return A tibble with the date column and computed index columns. Index +#' @returns A tibble with the date column and computed index columns. Index #' column names are formed by appending "_index" to the original column names. #' #' @examples @@ -535,7 +541,7 @@ compute_baseline_index <- function(.data, date_col, ...) { indexed_df } -#' Function to compute quantiles of a measure column within groups and reference dates. +#' Function to compute quantiles of a measure column within groups and reference dates #' #' @param data A data frame containing the data to be processed. #' @param group_cols A character vector of column names to group the data by. @@ -543,7 +549,7 @@ compute_baseline_index <- function(.data, date_col, ...) { #' @param latest_measure A logical value indicating whether to return only the measures for the latest reference date's quantiles (default is FALSE). #' @param n_quantiles The number of quantiles to compute (default is 10 for deciles). #' -#' @return A data frame containing the quantiles, median values, and mean values for the specified measure column within the specified groups and reference dates. +#' @returns A data frame containing the quantiles, median values, and mean values for the specified measure column within the specified groups and reference dates. #' #' @importFrom data.table as.data.table setorderv #' @importFrom dplyr ntile @@ -592,7 +598,7 @@ compute_quantile <- function( #' @param measure_col The name of the column for which the compression ratio will be computed. #' @param latest_measure A logical value indicating whether to return only the measures for the latest reference date. #' -#' @return A data frame containing the 90th, 50th, and 10th percentiles for the specified measure column within the specified groups and reference dates. +#' @returns A data frame containing the 90th, 50th, and 10th percentiles for the specified measure column within the specified groups and reference dates. #' #' @importFrom data.table as.data.table setorderv #' @importFrom collapse fquantile @@ -641,7 +647,7 @@ compute_compression_ratio <- function( out[] } -#' Function to compute the distribution function of a variable. +#' Function to compute the distribution function of a variable #' #' @param data A data frame. #' @param group_col A string naming a single column to group by, or `NULL` for no grouping. @@ -649,7 +655,7 @@ compute_compression_ratio <- function( #' @param binwidth The width of the bins for grouping the measure values (default is 1). #' @param latest_measure A logical value indicating whether to return only the measures for the latest reference date. #' -#' @return A data frame with the distribution function, where `pct` denotes the percentage of observations in each bin and `cum_pct` denotes the cumulative percentage. +#' @returns A data frame with the distribution function, where `pct` denotes the percentage of observations in each bin and `cum_pct` denotes the cumulative percentage. #' #' @importFrom data.table as.data.table setorderv #' @importFrom collapse fquantile @@ -714,20 +720,22 @@ compute_density <- function( #' column name is supplied, sums that column per period (wage bill). #' #' @param data A data frame containing at least a `ref_date` column. -#' @param group Character string naming the grouping column, or `"ref_date"` for +#' @param group_col Character string naming the grouping column, or `"ref_date"` for #' no grouping. #' @param measure_col Character string naming the numeric column to sum, or #' `NULL` to count rows. +#' @param group Deprecated. Use `group_col` instead. #' -#' @return A summarized data frame with columns `ref_date`, optionally `group`, and `value`. Value denotes either a sum or headcount (if `measure_col` is `NULL`). +#' @returns A summarized data frame with columns `ref_date`, optionally `group`, and `value`. Value denotes either a sum or headcount (if `measure_col` is `NULL`). #' #' @importFrom data.table as.data.table #' #' @export -compute_time_trend <- function(data, group, measure_col = NULL) { +compute_time_trend <- function(data, group_col, measure_col = NULL, group = NULL) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") .data_dt <- data.table::as.data.table(data) - groups <- if (group == "ref_date") "ref_date" else c("ref_date", group) + groups <- if (group_col == "ref_date") "ref_date" else c("ref_date", group_col) if (is.null(measure_col)) { # headcount by group @@ -742,12 +750,12 @@ compute_time_trend <- function(data, group, measure_col = NULL) { compute_fastsummary( cols = measure_col, fns = "sum", - groups = groups + group_cols = groups ) } } -#' Rescale to Baseline Index +#' Rescale to baseline index #' #' Rescales the `value` column so that the first observation equals 100, #' producing a baseline index. When a grouping variable is present, the @@ -755,16 +763,18 @@ compute_time_trend <- function(data, group, measure_col = NULL) { #' #' @param data A data frame with columns `ref_date` and `value`, as returned by #' [compute_time_trend()]. -#' @param group Character string naming the grouping column, or `"ref_date"` for +#' @param group_col Character string naming the grouping column, or `"ref_date"` for #' no grouping. +#' @param group Deprecated. Use `group_col` instead. #' -#' @return The input data frame with `value` rescaled to a baseline index. +#' @returns The input data frame with `value` rescaled to a baseline index. #' #' @importFrom dplyr arrange mutate across all_of ungroup first #' #' @export -rescale_baseline <- function(data, group) { - if (group == "ref_date") { +rescale_baseline <- function(data, group_col, group = NULL) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") + if (group_col == "ref_date") { data |> dplyr::arrange(.data[["ref_date"]]) |> dplyr::mutate( @@ -775,12 +785,12 @@ rescale_baseline <- function(data, group) { dplyr::arrange(.data[["ref_date"]]) |> dplyr::mutate( value = .data[["value"]] / dplyr::first(.data[["value"]]) * 100, - .by = dplyr::all_of(group) + .by = dplyr::all_of(group_col) ) } } -#' Compute Cross-Section Summary Table +#' Compute cross-section summary table #' #' Filters to the latest reference date within each group, then aggregates to #' produce a per-group `value`. Used as the data source for total-by-group bar @@ -791,27 +801,29 @@ rescale_baseline <- function(data, group) { #' #' @param data A data frame containing a `ref_date` column and the grouping #' column. -#' @param group Character string naming the grouping column. +#' @param group_cols Character string naming the grouping column. #' @param measure_col Character string naming the numeric column to sum, or #' `NULL` to count rows. +#' @param group Deprecated. Use `group_cols` instead. #' -#' @return A data frame with the grouping column and a `value` column. +#' @returns A data frame with the grouping column and a `value` column. #' #' @importFrom dplyr group_by across all_of filter ungroup summarise n #' #' @export -compute_cross_section <- function(data, group, measure_col = NULL) { +compute_cross_section <- function(data, group_cols, measure_col = NULL, group = NULL) { + group_cols <- resolve_renamed_arg(group_cols, group, "group", "group_cols") # only consider latest reference date data_latest <- data |> dplyr::filter( .data[["ref_date"]] == max(.data[["ref_date"]]), - .by = dplyr::all_of(group) + .by = dplyr::all_of(group_cols) ) if (is.null(measure_col)) { data_latest |> fastcount( - dplyr::across(dplyr::all_of(group)), + dplyr::across(dplyr::all_of(group_cols)), name = "value" ) } else { @@ -819,12 +831,12 @@ compute_cross_section <- function(data, group, measure_col = NULL) { compute_fastsummary( cols = measure_col, fns = "sum", - groups = group + group_cols = group_cols ) } } -#' Compute Growth Rate Summary Table +#' Compute growth rate summary table #' #' Filters to the first and last reference date within each group and computes #' the percentage change from first `ref_date` to last `ref_date`. @@ -833,22 +845,24 @@ compute_cross_section <- function(data, group, measure_col = NULL) { #' When a column name is supplied, sums that column (wage bill). #' #' @param data A data frame with `ref_date` and the grouping column. -#' @param group Character string naming the grouping column. +#' @param group_col Character string naming the grouping column. #' @param measure_col Character string naming the numeric column to sum, or #' `NULL` to count rows. +#' @param group Deprecated. Use `group_col` instead. #' -#' @return A data frame with the grouping column and a `growth_rate` column +#' @returns A data frame with the grouping column and a `growth_rate` column #' (percentage points, e.g. 12.5 for +12.5%). #' #' @importFrom dplyr filter arrange summarise last first all_of #' #' @export -compute_growth <- function(data, group, measure_col = NULL) { +compute_growth <- function(data, group_col, measure_col = NULL, group = NULL) { + group_col <- resolve_renamed_arg(group_col, group, "group", "group_col") endpoints <- data |> dplyr::filter( .data[["ref_date"]] %in% c(max(.data[["ref_date"]]), min(.data[["ref_date"]])), - .by = dplyr::all_of(group) + .by = dplyr::all_of(group_col) ) |> dplyr::arrange(.data[["ref_date"]]) @@ -856,31 +870,31 @@ compute_growth <- function(data, group, measure_col = NULL) { endpoints |> dplyr::summarise( value = dplyr::n(), - .by = dplyr::all_of(c("ref_date", group)) + .by = dplyr::all_of(c("ref_date", group_col)) ) } else { endpoints |> compute_fastsummary( cols = measure_col, fns = "sum", - groups = c("ref_date", group) + group_cols = c("ref_date", group_col) ) } summarized |> - dplyr::filter(!is.na(.data[[group]])) |> + dplyr::filter(!is.na(.data[[group_col]])) |> dplyr::summarise( growth_rate = round( dplyr::last(.data[["value"]]) / dplyr::first(.data[["value"]]) - 1, 3 ) * 100, - .by = dplyr::all_of(group) + .by = dplyr::all_of(group_col) ) |> dplyr::filter(!is.na(.data[["growth_rate"]])) } -#' Compute the Coefficient of Variation (CV) +#' Compute the coefficient of variation (CV) #' #' Calculates the coefficient of variation for a numeric vector, defined as the #' ratio of the standard deviation to the mean. This provides a unitless measure @@ -896,7 +910,7 @@ compute_growth <- function(data, group, measure_col = NULL) { #' (to avoid division by zero). If the input vector is empty or the mean equals #' zero, the function returns `NA_real_`. #' -#' @return A numeric value representing the coefficient of variation (CV). +#' @returns A numeric value representing the coefficient of variation (CV). #' Returns `NA_real_` if the computation is not possible (e.g., all values are #' missing or the mean is zero). #' @@ -924,7 +938,7 @@ cv <- function(x, na.rm = TRUE) { return(y) } -#' Compute a Compression Ratio Between Two Percentiles +#' Compute a compression ratio between two percentiles #' #' Calculates a wage (or value) compression ratio by dividing one quantile by #' another, typically the 90th percentile divided by the 10th percentile. @@ -943,7 +957,7 @@ cv <- function(x, na.rm = TRUE) { #' their ratio (`upper / lower`). If either quantile is `NA` or the lower #' quantile is zero, the function returns `NA_real_`. #' -#' @return A numeric value representing the ratio of the specified upper to +#' @returns A numeric value representing the ratio of the specified upper to #' lower percentile values. Returns `NA_real_` if computation is not possible #' (e.g., due to missing data or zero denominator). #' @@ -981,13 +995,13 @@ prop <- function(x) { } -#' Count Unique Non-Missing Values +#' Count unique non-missing values #' #' Returns the number of unique values in a vector, excluding missing values (NA). #' #' @param x A vector of any type (numeric, character, factor, etc.) #' -#' @return An integer representing the count of unique non-missing values in `x`. +#' @returns An integer representing the count of unique non-missing values in `x`. #' #' @examples #' # Basic usage @@ -1012,7 +1026,7 @@ count_unique <- function(x) { return(y) } -#' Define Default Summary Functions +#' Define default summary functions #' #' @description #' Creates and returns a named list of default summary functions used diff --git a/R/tenure.R b/R/tenure.R index 5c9666a..7f1ac08 100644 --- a/R/tenure.R +++ b/R/tenure.R @@ -18,7 +18,7 @@ #' resulting in an \eqn{O(n \log n)} algorithm dominated by the initial #' sorting step. #' -#' @param contract_dt data.table containing the contract history. Must include +#' @param contracts Data.table containing the contract history. Must include #' personnel identifiers, contract identifiers, contract start and end #' dates, contract types, and any grouping variables supplied in #' \code{group_cols}. @@ -38,7 +38,7 @@ #' establishment, occupation, or organization). Default is #' \code{NULL}. #' -#' @return A data.table with one row per unique combination of +#' @returns A data.table with one row per unique combination of #' \code{personnel_id} and optional \code{group_cols}, containing: #' \describe{ #' \item{tenure_days}{Total employment tenure in days.} @@ -57,7 +57,7 @@ #' } #' compute_tenure <- function( - contract_dt, + contracts, ref_date, personnel_id_col = "personnel_id", contract_id_col = "contract_id", @@ -67,10 +67,10 @@ compute_tenure <- function( group_cols = NULL ) { # 0. always ensure data.table - contract_dt <- as.data.table(contract_dt) + contracts <- as.data.table(contracts) if (is.null(group_cols) == FALSE) { - validate_columns_exist(dt = contract_dt, colnames = group_cols) + validate_columns_exist(dt = contracts, colnames = group_cols) } # Alias ref_date to a name that cannot be shadowed by a column named 'ref_date' @@ -78,7 +78,7 @@ compute_tenure <- function( .ref_date_ <- if (inherits(ref_date, "Date")) ref_date else as.Date(ref_date) # 1. Filter inactive types — subset returns a new object, no copy() needed - dt <- contract_dt[!get(contract_type_col) %in% c("inactive", "pensioner")] + dt <- contracts[!get(contract_type_col) %in% c("inactive", "pensioner")] # 2. Keep only contracts that started on or before ref_date dt <- dt[get(start_date_col) <= .ref_date_] @@ -172,7 +172,7 @@ compute_tenure <- function( #' \code{personnel_id}, optional grouping variables supplied through #' \code{group_cols}, and \code{ref_date}. #' -#' @param contract_dt data.table containing the stacked contract panel. +#' @param contracts Data.table containing the stacked contract panel. #' Must include personnel identifiers, contract identifiers, contract #' start and end dates, reference dates, contract types, and any grouping #' variables supplied in \code{group_cols}. @@ -192,7 +192,7 @@ compute_tenure <- function( #' which tenure should be calculated independently (for example, #' establishment, occupation, or organization). Default is \code{NULL}. #' -#' @return A data.table with one row per unique combination of +#' @returns A data.table with one row per unique combination of #' \code{personnel_id}, optional \code{group_cols}, and #' \code{ref_date}, containing: #' \describe{ @@ -203,7 +203,7 @@ compute_tenure <- function( #' #' @keywords internal compute_tenure_panel <- function( - contract_dt, + contracts, personnel_id_col = "personnel_id", ref_date_col = "ref_date", contract_id_col = "contract_id", @@ -213,16 +213,16 @@ compute_tenure_panel <- function( group_cols = NULL ) { # 0. Quick set up ensuring data.table and to define a grouping key once at the start - contract_dt <- as.data.table(contract_dt) + contracts <- as.data.table(contracts) if (is.null(group_cols) == FALSE) { - validate_columns_exist(dt = contract_dt, colnames = group_cols) + validate_columns_exist(dt = contracts, colnames = group_cols) } by_cols <- c(personnel_id_col, group_cols, ref_date_col) # 1. Filter: active types only, started on or before each row's ref_date - dt <- contract_dt[ + dt <- contracts[ get(start_date_col) <= get(ref_date_col) & !get(contract_type_col) %in% c("inactive", "pensioner") ] @@ -332,7 +332,7 @@ compute_tenure_panel <- function( #' last available panel snapshot (right-censored spells); both are treated #' identically. #' -#' @param contract_dt data.table. Stacked contract panel, as passed to +#' @param contracts Data.table. Stacked contract panel, as passed to #' \code{\link{compute_tenure_panel}}. #' @param personnel_id_col Character. Name of the personnel identifier #' column. Default is \code{"personnel_id"}. @@ -350,7 +350,7 @@ compute_tenure_panel <- function( #' over which tenure should be calculated independently (for example, #' establishment, occupation, or organization). Default is \code{NULL}. #' -#' @return A data.table with one row per unique combination of +#' @returns A data.table with one row per unique combination of #' \code{personnel_id} and \code{group_cols}, containing: #' \describe{ #' \item{ref_date}{The last reference date at which the person was @@ -362,7 +362,7 @@ compute_tenure_panel <- function( #' @seealso \code{\link{compute_tenure_panel}} #' @keywords internal compute_employment_spells <- function( - contract_dt, + contracts, personnel_id_col = "personnel_id", ref_date_col = "ref_date", contract_id_col = "contract_id", @@ -375,7 +375,7 @@ compute_employment_spells <- function( ### at each ref_date tenure_dt <- compute_tenure_panel( - contract_dt = contract_dt, + contracts = contracts, personnel_id_col = personnel_id_col, ref_date_col = ref_date_col, contract_id_col = contract_id_col, diff --git a/R/transition.R b/R/transition.R index bdf750b..b0e6b1c 100644 --- a/R/transition.R +++ b/R/transition.R @@ -1,6 +1,6 @@ -#' Detect Personnel Reallocation Events +#' Detect personnel reallocation events #' #' Identifies reallocation events when a personnel's set of establishments changes #' between consecutive reference dates. Removes hire events and only keeps @@ -13,7 +13,7 @@ #' @param personnel_hire A data.frame or tibble containing hire events with columns #' `personnel_id` and `ref_date`. #' -#' @return A tibble with columns: +#' @returns A tibble with columns: #' - `personnel_id` #' - `ref_date` #' - `est_id_nested`: List-column of establishment IDs for that personnel and date. @@ -68,7 +68,7 @@ detect_reallocation <- function(data, personnel_hire) { return(data_reallocation) } -#' Detect Career Transitions +#' Detect career transitions #' #' Collapses each entity's history into spells of consecutive periods in the #' same group, then pairs each spell with the one that follows it. A row is @@ -89,7 +89,7 @@ detect_reallocation <- function(data, personnel_hire) { #' @param return_all Logical. Keep terminal spells, which have no destination #' and so carry `NA` in both `to` and `ref_date`. Default `FALSE`. #' -#' @return A data table with the identifier, `from`, `to`, `from_date` and +#' @returns A data table with the identifier, `from`, `to`, `from_date` and #' `ref_date`. #' #' @importFrom data.table as.data.table rleidv setnames setorderv shift @@ -185,14 +185,14 @@ detect_career_transition <- function( } -#' Plot Transfer Heatmap +#' Plot transfer heatmap #' #' Draws transfers between groups as a heatmap, origin groups on the y-axis and #' destination groups on the x-axis. #' #' @param data Data frame with `from`, `to` and `transfer` columns. #' -#' @return A plotly object. +#' @returns A plotly object. #' #' @importFrom plotly layout plot_ly #' @importFrom stats median @@ -229,7 +229,7 @@ plot_transfer_heatmap <- function(data) { ) } -#' Plot Transition Network +#' Plot transition network #' #' Draws career transitions as a directed graph, with edge width proportional to #' the number of transitions and node size to degree centrality. Networks of ten @@ -238,7 +238,7 @@ plot_transfer_heatmap <- function(data) { #' @param data Data frame with `from` and `to` columns, as returned by #' [detect_career_transition()]. #' -#' @return A ggiraph girafe object. +#' @returns A ggiraph girafe object. #' #' @importFrom dplyr across mutate pull row_number #' @importFrom ggplot2 aes coord_cartesian expansion margin scale_color_manual diff --git a/R/treatment.R b/R/treatment.R index f9f42d9..1cf1f78 100644 --- a/R/treatment.R +++ b/R/treatment.R @@ -17,7 +17,7 @@ # 1. HANDLE DUPLICATE RECORDS ================================================ -#' Remove Duplicate Personnel Records +#' Remove duplicate personnel records #' #' @description #' Removes duplicate `personnel_id` + `ref_date` combinations, addressing @@ -27,7 +27,7 @@ #' @param keep Which record to keep per duplicate group: `"first"` (default), #' `"last"`, or `"none"` (drops all records in a duplicate group). #' -#' @return A data.frame with duplicates removed. +#' @returns A data.frame with duplicates removed. #' #' @examples #' \dontrun{ @@ -68,7 +68,7 @@ remove_duplicate_personnel <- function( } } -#' Remove Duplicate Contract Records +#' Remove duplicate contract records #' #' @description #' Removes duplicate contract records, addressing violations of `contract_unique_id` @@ -83,7 +83,7 @@ remove_duplicate_personnel <- function( #' @param keep Which record to keep: `"first"`, `"last"`, or `"none"`. #' See \code{\link{remove_duplicate_personnel}}. #' -#' @return A data.frame with duplicates removed. +#' @returns A data.frame with duplicates removed. #' #' @examples #' \dontrun{ @@ -135,7 +135,7 @@ remove_duplicate_contracts <- function( # 2. FIX DATE ISSUES ========================================================== -#' Fix Invalid Reference Dates +#' Fix invalid reference dates #' #' @description #' Corrects `ref_date` values outside the valid range, addressing violations of @@ -151,7 +151,7 @@ remove_duplicate_contracts <- function( #' \item `"filter"`: Remove records with invalid dates #' } #' -#' @return A data.frame with corrected `ref_date` values. +#' @returns A data.frame with corrected `ref_date` values. #' #' @examples #' \dontrun{ @@ -203,7 +203,7 @@ fix_invalid_dates <- function( } } -#' Fix Invalid Birth Dates +#' Fix invalid birth dates #' #' @description #' Corrects `birth_date` values outside the valid range, addressing violations @@ -216,7 +216,7 @@ fix_invalid_dates <- function( #' @param treatment Correction strategy: `"na"`, `"clamp"`, or `"filter"`. #' See \code{\link{fix_invalid_dates}}. #' -#' @return A data.frame with corrected `birth_date` values. +#' @returns A data.frame with corrected `birth_date` values. #' #' @examples #' \dontrun{ @@ -260,7 +260,7 @@ fix_invalid_birthdates <- function( # 3. FIX AGE-RELATED ISSUES ================================================== -#' Flag or Remove Underage Workers +#' Flag or remove underage workers #' #' @description #' Addresses violations of the `personnel_minimum_age` rule. Workers below @@ -275,7 +275,7 @@ fix_invalid_birthdates <- function( #' \item `"filter"`: Remove underage worker records #' } #' -#' @return A data.frame with underage workers handled according to `treatment`. +#' @returns A data.frame with underage workers handled according to `treatment`. #' #' @examples #' \dontrun{ @@ -324,7 +324,7 @@ fix_underage_workers <- function( } } -#' Flag or Adjust Over-Retirement-Age Workers +#' Flag or adjust over-retirement-age workers #' #' @description #' Addresses violations of the `personnel_maximum_age` rule. Only targets @@ -338,7 +338,7 @@ fix_underage_workers <- function( #' \item `"adjust_status"`: Set `status` to `"retired"` for affected workers #' } #' -#' @return A data.frame with over-retirement-age workers handled according to +#' @returns A data.frame with over-retirement-age workers handled according to #' `treatment`. #' #' @examples @@ -390,10 +390,10 @@ fix_retirement_age <- function( # 4. FIX WORKING HOURS ISSUES ================================================ -#' Fix Invalid Working Hours +#' Fix invalid working hours #' #' @description -#' Corrects `whours` values outside the valid range [0, 168], addressing +#' Corrects `whours` values outside the valid range \[0, 168\], addressing #' violations of the `contract_whours` rule. The maximum of 168 reflects #' 5 days × 8 hours per week. #' @@ -405,7 +405,7 @@ fix_retirement_age <- function( #' \item `"flag"`: Add `invalid_hours_flag` column (also flags `NA`) #' } #' -#' @return A data.frame with corrected working hours. +#' @returns A data.frame with corrected working hours. #' #' @examples #' \dontrun{ @@ -450,7 +450,7 @@ fix_working_hours <- function(data, treatment = c("na", "clamp", "flag")) { # 5. FIX WAGE BILL INCONSISTENCIES =========================================== -#' Fix Salary Component Inconsistencies +#' Fix salary component inconsistencies #' #' @description #' Corrects violations of wage bill consistency rules: gross ≥ base + allowance, @@ -467,7 +467,7 @@ fix_working_hours <- function(data, treatment = c("na", "clamp", "flag")) { #' `net_exceeds_gross_flag`, `base_exceeds_gross_flag` #' } #' -#' @return A data.frame with corrected salary components. +#' @returns A data.frame with corrected salary components. #' #' @examples #' \dontrun{ @@ -536,7 +536,7 @@ fix_salary_components <- function( } } -#' Fix Negative Salary Values +#' Fix negative salary values #' #' @description #' Addresses violations of positive salary rules (`wagebill_*_positive`) by @@ -552,7 +552,7 @@ fix_salary_components <- function( #' \item `"zero"`: Set negative values to `0` #' } #' -#' @return A data.frame with corrected salary values in the specified columns. +#' @returns A data.frame with corrected salary values in the specified columns. #' #' @examples #' \dontrun{ @@ -587,7 +587,7 @@ fix_negative_salaries <- function( # 6. MASTER CLEANING FUNCTION ================================================ -#' Apply Standard HR Data Cleaning Pipeline +#' Apply Standard HR data cleaning pipeline #' #' @description #' Chains the treatment functions in a recommended order. Steps applied per @@ -609,7 +609,7 @@ fix_negative_salaries <- function( #' @param fix_salaries Logical, contract only (default: `TRUE`). #' @param verbose Logical, print step-level messages (default: `FALSE`). #' -#' @return A cleaned data.frame. +#' @returns A cleaned data.frame. #' #' @examples #' \dontrun{ diff --git a/R/validation.R b/R/validation.R index 79f4cb3..a6a01b5 100644 --- a/R/validation.R +++ b/R/validation.R @@ -15,7 +15,7 @@ #' @param output_format Deprecated — kept for backward compatibility but #' ignored. The function now always returns \code{list(report, violations)}. #' -#' @return A named list: +#' @returns A named list: #' \describe{ #' \item{\code{report}}{data.table with columns \code{Rule}, #' \code{Description}, \code{Total Records}, \code{Passes}, diff --git a/R/wagebill.R b/R/wagebill.R index 7af1ac9..042aada 100644 --- a/R/wagebill.R +++ b/R/wagebill.R @@ -8,11 +8,11 @@ #' Optionally computes wage bill shares relative to macro-fiscal aggregates #' (e.g., GDP, public expenditure, revenue). #' -#' @param contract_df A data.frame or tibble containing contract-level salary data. +#' @param contracts A data.frame or tibble containing contract-level salary data. #' Must include the columns specified in `wage_vars` and `groups`. #' @param wage_vars Character vector of salary column names to aggregate. #' Defaults to `c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu")`. -#' @param groups Character vector of grouping columns for aggregation. +#' @param group_cols Character vector of grouping columns for aggregation. #' Defaults to `c("country_code", "year")`. #' @param share_macro Logical; if `TRUE`, computes wage bill shares relative #' to macro-fiscal aggregates specified in `macro_vars`. Defaults to `FALSE`. @@ -21,8 +21,10 @@ #' `c("gdp_lcu", "pexpenditure_lcu", "prevenue_lcu", "taxrevenue_lcu")`. #' @param drop_na Logical; if `TRUE`, removes `NA` values before aggregation. #' Defaults to `TRUE`. +#' @param groups Deprecated. Use `group_cols` instead. +#' @param contract_df Deprecated. Use `contracts` instead. #' -#' @return A wage bill table with optional grouping variables, +#' @returns A wage bill table with optional grouping variables, #' an `indicator` column (describing the wage variable and level of analysis), #' and a `value` column. When `share_macro = TRUE`, values represent #' shares (wage bill / macro aggregate). @@ -53,9 +55,9 @@ #' #' @export compute_wagebill <- function( - contract_df, + contracts, wage_vars = c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu"), - groups = c("country_code", "year"), + group_cols = c("country_code", "year"), share_macro = FALSE, macro_vars = c( "gdp_lcu", @@ -63,9 +65,13 @@ compute_wagebill <- function( "prevenue_lcu", "taxrevenue_lcu" ), - drop_na = TRUE + drop_na = TRUE, + groups = NULL, + contract_df = NULL ) { - data_ppp <- contract_df |> + group_cols <- resolve_renamed_arg(group_cols, groups, "groups", "group_cols") + contracts <- resolve_renamed_arg(contracts, contract_df, "contract_df", "contracts") + data_ppp <- contracts |> convert_constant_ppp( cols = wage_vars ) @@ -75,7 +81,7 @@ compute_wagebill <- function( compute_fastshare( cols = wage_vars, macro_cols = macro_vars, - groups = groups, + group_cols = group_cols, fns = "sum", output = "long" ) @@ -83,7 +89,7 @@ compute_wagebill <- function( data_ppp |> compute_fastsummary( cols = wage_vars, - groups = groups, + group_cols = group_cols, fns = "sum", output = "long" ) diff --git a/R/zzz.R b/R/zzz.R index 58d28a1..1d2cee7 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -153,6 +153,8 @@ if (getRversion() >= "2.15.1") { "hires", "consistent_record", "coverage", + "label", + "description", "status", # compute_tenure ".eff_end", @@ -269,13 +271,13 @@ if (getRversion() >= "2.15.1") { )) } -#' Validate Column Exists in Data Table +#' Validate column exists in data table #' -#' @param dt data.table to check -#' @param colname Character. Column name to validate -#' @param varname Character. Variable name for error messages +#' @param dt Data.table to check. +#' @param colname Character. Column name to validate. +#' @param varname Character. Variable name for error messages. #' -#' @return Invisible TRUE if valid, stops with error otherwise +#' @returns Invisible TRUE if valid, stops with error otherwise #' @keywords internal validate_column_exists <- function(dt, colname, varname) { if (!colname %in% names(dt)) { @@ -291,13 +293,13 @@ validate_column_exists <- function(dt, colname, varname) { return(invisible(TRUE)) } -#' Validate Multiple Columns Exist +#' Validate multiple columns exist #' -#' @param dt data.table to check -#' @param colnames Character vector. Column names to validate -#' @param varname Character. Variable name for error messages +#' @param dt Data.table to check. +#' @param colnames A character vector. Column names to validate. +#' @param varname Character. Variable name for error messages. #' -#' @return Invisible TRUE if valid, stops with error otherwise +#' @returns Invisible TRUE if valid, stops with error otherwise #' @keywords internal validate_columns_exist <- function(dt, colnames, varname) { missing_cols <- setdiff(colnames, names(dt)) @@ -315,12 +317,12 @@ validate_columns_exist <- function(dt, colnames, varname) { return(invisible(TRUE)) } -#' Validate Date Format +#' Validate date format #' -#' @param date Object to validate -#' @param varname Character. Variable name for error messages +#' @param date Object to validate. +#' @param varname Character. Variable name for error messages. #' -#' @return Invisible TRUE if valid, stops with error otherwise +#' @returns Invisible TRUE if valid, stops with error otherwise #' @keywords internal validate_date_format <- function(date, varname) { # Accept both Date objects and character strings @@ -360,3 +362,36 @@ validate_date_format <- function(date, varname) { return(date) } +# Support a renamed argument for one deprecation cycle. +# +# Returns the value for the new argument, warning if the caller supplied the +# old name instead. `old` defaults to NULL in the wrapping function, so a +# non-NULL value means the caller explicitly passed the deprecated argument. +#' @noRd +resolve_renamed_arg <- function(new, old, old_name, new_name) { + if (is.null(old)) { + return(new) + } + + warning( + "`", old_name, "` is deprecated and will be removed in a future release; ", + "use `", new_name, "` instead.", + call. = FALSE + ) + + # `new` may be a required formal the caller never supplied, so probe it + # without letting the missing-argument error escape. + supplied <- !inherits( + tryCatch(force(new), error = function(e) e), + "error" + ) + + if (supplied && !is.null(new)) { + stop( + "Supply either `", new_name, "` or `", old_name, "`, not both.", + call. = FALSE + ) + } + + old +} diff --git a/man/add_contract_to_event.Rd b/man/add_contract_to_event.Rd index ec99d32..4e78ece 100644 --- a/man/add_contract_to_event.Rd +++ b/man/add_contract_to_event.Rd @@ -2,21 +2,31 @@ % Please edit documentation in R/retirement.R \name{add_contract_to_event} \alias{add_contract_to_event} -\title{Add Contract Information to Event Records} +\title{Add contract information to event records} \usage{ -add_contract_to_event(event_dt, contract_dt, keep_vars) +add_contract_to_event( + events, + contracts, + keep_vars, + event_dt = NULL, + contract_dt = NULL +) } \arguments{ -\item{event_dt}{A data.table containing personnel event records. Must include the columns +\item{events}{A data.table containing personnel event records. Must include the columns \code{personnel_id} and \code{ref_date}.} -\item{contract_dt}{A data.table containing contract information, also including \code{personnel_id} +\item{contracts}{A data.table containing contract information, also including \code{personnel_id} and \code{ref_date}. The contract dataset provides additional attributes describing the personnel's contractual context on each reference date.} \item{keep_vars}{A character vector of variable names in \code{contract_dt} to be merged into the event dataset. These typically describe contract-level attributes such as position, department, or employment type.} + +\item{event_dt}{Deprecated. Use \code{events} instead.} + +\item{contract_dt}{Deprecated. Use \code{contracts} instead.} } \value{ A data.table identical to \code{event_dt}, but with the specified variables from \code{contract_dt} diff --git a/man/apply_baseline_index.Rd b/man/apply_baseline_index.Rd index 3b11a07..bbf7c7c 100644 --- a/man/apply_baseline_index.Rd +++ b/man/apply_baseline_index.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{apply_baseline_index} \alias{apply_baseline_index} -\title{Apply Baseline Index to a Trend Summary} +\title{Apply baseline index to a trend summary} \usage{ apply_baseline_index(data, group_col) } diff --git a/man/classify_personnel_event.Rd b/man/classify_personnel_event.Rd index 68cba1c..4aa8d82 100644 --- a/man/classify_personnel_event.Rd +++ b/man/classify_personnel_event.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/movement.R \name{classify_personnel_event} \alias{classify_personnel_event} -\title{Classify Personnel Movement Events} +\title{Classify personnel movement events} \usage{ classify_personnel_event( data, diff --git a/man/clean_hr_data.Rd b/man/clean_hr_data.Rd index 1f39870..0f7b63f 100644 --- a/man/clean_hr_data.Rd +++ b/man/clean_hr_data.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{clean_hr_data} \alias{clean_hr_data} -\title{Apply Standard HR Data Cleaning Pipeline} +\title{Apply Standard HR data cleaning pipeline} \usage{ clean_hr_data( data, diff --git a/man/complete_dates.Rd b/man/complete_dates.Rd index 1b257c0..7e65380 100644 --- a/man/complete_dates.Rd +++ b/man/complete_dates.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/movement.R \name{complete_dates} \alias{complete_dates} -\title{Complete Panel Data by Identifier and Reference Dates} +\title{Complete panel data by identifier and reference dates} \usage{ complete_dates(data, id_col, start_date = NULL, end_date = NULL, freq = "year") } diff --git a/man/compute_baseline_index.Rd b/man/compute_baseline_index.Rd index d3fec9a..054d0ef 100644 --- a/man/compute_baseline_index.Rd +++ b/man/compute_baseline_index.Rd @@ -7,12 +7,12 @@ compute_baseline_index(.data, date_col, ...) } \arguments{ +\item{.data}{A data.frame or tibble containing the time series data.} + \item{date_col}{Unquoted column name containing the time/year variable.} \item{...}{Unquoted column names to compute indices for. Each selected column must be numeric.} - -\item{data}{A data.frame or tibble containing the time series data.} } \value{ A tibble with the date column and computed index columns. Index diff --git a/man/compute_coverage.Rd b/man/compute_coverage.Rd index 8d68626..fe3ded6 100644 --- a/man/compute_coverage.Rd +++ b/man/compute_coverage.Rd @@ -6,19 +6,22 @@ \usage{ compute_coverage( data, - group = NULL, + group_cols = NULL, include_ref_date = FALSE, - aggregate = FALSE + aggregate = FALSE, + group = NULL ) } \arguments{ \item{data}{A data frame.} -\item{group}{A character string specifying the column name to group by. If NULL, coverage is computed for the entire data set.} +\item{group_cols}{A string specifying the column name to group by. If NULL, coverage is computed for the entire data set.} \item{include_ref_date}{A logical value indicating whether to include the \code{ref_date} column in the grouping.} \item{aggregate}{A logical value indicating whether to aggregate coverage values by the \code{group}.} + +\item{group}{Deprecated. Use \code{group_cols} instead.} } \value{ A data frame with coverage values for each column, optionally grouped by the specified \code{group}. diff --git a/man/compute_cross_section.Rd b/man/compute_cross_section.Rd index 89833e1..f34c3da 100644 --- a/man/compute_cross_section.Rd +++ b/man/compute_cross_section.Rd @@ -2,18 +2,20 @@ % Please edit documentation in R/summarize.R \name{compute_cross_section} \alias{compute_cross_section} -\title{Compute Cross-Section Summary Table} +\title{Compute cross-section summary table} \usage{ -compute_cross_section(data, group, measure_col = NULL) +compute_cross_section(data, group_cols, measure_col = NULL, group = NULL) } \arguments{ \item{data}{A data frame containing a \code{ref_date} column and the grouping column.} -\item{group}{Character string naming the grouping column.} +\item{group_cols}{Character string naming the grouping column.} \item{measure_col}{Character string naming the numeric column to sum, or \code{NULL} to count rows.} + +\item{group}{Deprecated. Use \code{group_cols} instead.} } \value{ A data frame with the grouping column and a \code{value} column. diff --git a/man/compute_cross_section_summary.Rd b/man/compute_cross_section_summary.Rd index e304bf6..b57d0f2 100644 --- a/man/compute_cross_section_summary.Rd +++ b/man/compute_cross_section_summary.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{compute_cross_section_summary} \alias{compute_cross_section_summary} -\title{Compute Cross-Section Summary} +\title{Compute cross-section summary} \usage{ compute_cross_section_summary(data, group_col, measure_col = NULL) } diff --git a/man/compute_density.Rd b/man/compute_density.Rd index e10dc74..09c6833 100644 --- a/man/compute_density.Rd +++ b/man/compute_density.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/summarize.R \name{compute_density} \alias{compute_density} -\title{Function to compute the distribution function of a variable.} +\title{Function to compute the distribution function of a variable} \usage{ compute_density( data, @@ -27,5 +27,5 @@ compute_density( A data frame with the distribution function, where \code{pct} denotes the percentage of observations in each bin and \code{cum_pct} denotes the cumulative percentage. } \description{ -Function to compute the distribution function of a variable. +Function to compute the distribution function of a variable } diff --git a/man/compute_employment_spells.Rd b/man/compute_employment_spells.Rd index 90f95e9..7eafb35 100644 --- a/man/compute_employment_spells.Rd +++ b/man/compute_employment_spells.Rd @@ -5,7 +5,7 @@ \title{Compute total time spent in each specific group per person (eg paygrade, occupation)} \usage{ compute_employment_spells( - contract_dt, + contracts, personnel_id_col = "personnel_id", ref_date_col = "ref_date", contract_id_col = "contract_id", @@ -16,7 +16,7 @@ compute_employment_spells( ) } \arguments{ -\item{contract_dt}{data.table. Stacked contract panel, as passed to +\item{contracts}{Data.table. Stacked contract panel, as passed to \code{\link{compute_tenure_panel}}.} \item{personnel_id_col}{Character. Name of the personnel identifier diff --git a/man/compute_fastshare.Rd b/man/compute_fastshare.Rd index ed7e715..2a43fe7 100644 --- a/man/compute_fastshare.Rd +++ b/man/compute_fastshare.Rd @@ -9,9 +9,10 @@ compute_fastshare( macro_data = data.table::as.data.table(macro_indicators), macro_cols, cols, - groups, + group_cols, fns, - output = c("long", "wide") + output = c("long", "wide"), + groups = NULL ) } \arguments{ @@ -26,7 +27,7 @@ for ratio calculations.} \item{cols}{A character vector of column names in \code{data} to summarize.} -\item{groups}{A character vector of column names in \code{data} to group by. +\item{group_cols}{A character vector of column names in \code{data} to group by. Typically includes country and date/year variables. Default is \code{c("country_code", "year")}.} \item{fns}{A character vector of summary functions to apply to \code{cols}. @@ -37,6 +38,8 @@ Examples: \code{"sum"}, \code{"mean"}, \code{"median"}.} \item \code{"long"} returns a tidy table with columns: group variables, \code{macro_var}, \code{summary_var}, \code{indicator}, and \code{value}. \item \code{"wide"} returns a table with one column per indicator and original macro/summary values. }} + +\item{groups}{Deprecated. Use \code{group_cols} instead.} } \value{ A dataset containing: diff --git a/man/compute_fastsummary.Rd b/man/compute_fastsummary.Rd index fac8765..52baff3 100644 --- a/man/compute_fastsummary.Rd +++ b/man/compute_fastsummary.Rd @@ -8,9 +8,10 @@ compute_fastsummary( data, cols, fns = NULL, - groups, + group_cols, output = c("long", "wide"), - tbl = FALSE + tbl = FALSE, + groups = NULL ) } \arguments{ @@ -29,7 +30,7 @@ The result will be returned in the same class as the input (unless \code{tbl = T names referring to \code{define_fns()}. }} -\item{groups}{A character vector. Column(s) by which to group the data +\item{group_cols}{A character vector. Column(s) by which to group the data before computing the summary statistics.} \item{output}{Character. Either \code{"long"} (default) or \code{"wide"} to specify @@ -38,6 +39,8 @@ statistic, \code{"wide"} returns one row per group with multiple columns for each summary statistic.} \item{tbl}{Logical. If \code{TRUE}, converts the result to a tibble (\code{tibble::as_tibble()}).} + +\item{groups}{Deprecated. Use \code{group_cols} instead.} } \value{ A dataset containing the summary statistics for the selected columns. diff --git a/man/compute_global_consistency.Rd b/man/compute_global_consistency.Rd index b861e0b..77283b3 100644 --- a/man/compute_global_consistency.Rd +++ b/man/compute_global_consistency.Rd @@ -9,7 +9,7 @@ compute_global_consistency(data, id_col, value_cols, digits = 2) \arguments{ \item{data}{A data frame.} -\item{id_col}{A character string specifying the name of the column that uniquely identifies records.} +\item{id_col}{A string specifying the name of the column that uniquely identifies records.} \item{value_cols}{A character vector specifying the name(s) of columns whose values are to be checked for consistency. Value consistency is computed separately for diff --git a/man/compute_growth.Rd b/man/compute_growth.Rd index fbbec5a..078f927 100644 --- a/man/compute_growth.Rd +++ b/man/compute_growth.Rd @@ -2,17 +2,19 @@ % Please edit documentation in R/summarize.R \name{compute_growth} \alias{compute_growth} -\title{Compute Growth Rate Summary Table} +\title{Compute growth rate summary table} \usage{ -compute_growth(data, group, measure_col = NULL) +compute_growth(data, group_col, measure_col = NULL, group = NULL) } \arguments{ \item{data}{A data frame with \code{ref_date} and the grouping column.} -\item{group}{Character string naming the grouping column.} +\item{group_col}{Character string naming the grouping column.} \item{measure_col}{Character string naming the numeric column to sum, or \code{NULL} to count rows.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ A data frame with the grouping column and a \code{growth_rate} column diff --git a/man/compute_growth_decomposition.Rd b/man/compute_growth_decomposition.Rd index 3aed82b..35404ef 100644 --- a/man/compute_growth_decomposition.Rd +++ b/man/compute_growth_decomposition.Rd @@ -15,7 +15,7 @@ compute_growth_decomposition( \item{group_cols}{A character vector specifying the names of the columns to group by.} -\item{measure_col}{A character string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu").} +\item{measure_col}{A string specifying the name of the column containing the measure of interest (default is "gross_salary_lcu").} } \value{ A data.table with headcount, compensation, wagebill, wagebill_lag, diff --git a/man/compute_growth_summary.Rd b/man/compute_growth_summary.Rd index dd5c3ba..fff5530 100644 --- a/man/compute_growth_summary.Rd +++ b/man/compute_growth_summary.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{compute_growth_summary} \alias{compute_growth_summary} -\title{Compute Growth Rate Summary} +\title{Compute growth rate summary} \usage{ compute_growth_summary(data, group_col, measure_col = NULL) } diff --git a/man/compute_movement_cost.Rd b/man/compute_movement_cost.Rd index 51d5738..ec3d854 100644 --- a/man/compute_movement_cost.Rd +++ b/man/compute_movement_cost.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/movement.R \name{compute_movement_cost} \alias{compute_movement_cost} -\title{Function to compute the total cost associated with personnel movements.} +\title{Function to compute the total cost associated with personnel movements} \usage{ compute_movement_cost( data, @@ -42,5 +42,5 @@ compute_movement_cost( A data frame containing the movement cost for each requested event type within the specified groups and reference dates. } \description{ -Function to compute the total cost associated with personnel movements. +Function to compute the total cost associated with personnel movements } diff --git a/man/compute_pension_ratio.Rd b/man/compute_pension_ratio.Rd index 4e3b88e..4b783af 100644 --- a/man/compute_pension_ratio.Rd +++ b/man/compute_pension_ratio.Rd @@ -2,24 +2,26 @@ % Please edit documentation in R/retirement.R \name{compute_pension_ratio} \alias{compute_pension_ratio} -\title{Compute Ratio of Last Salary to First Pension for Retired Workers} +\title{Compute ratio of last salary to first pension for retired workers} \usage{ compute_pension_ratio( - personnel_dt, - contract_dt, + personnel, + contracts, salary_col, personnel_id_col = "personnel_id", status_col = "employment_status", date_col = "ref_date", pensioner_value = "pensioner", - keep_vars = NULL + keep_vars = NULL, + personnel_dt = NULL, + contract_dt = NULL ) } \arguments{ -\item{personnel_dt}{A data.table (or tibble/data.frame) containing at minimum +\item{personnel}{A data.table (or tibble/data.frame) containing at minimum the columns named in \code{id_col}, \code{status_col}, and \code{date_col}.} -\item{contract_dt}{A data.table (or tibble/data.frame) containing at minimum +\item{contracts}{A data.table (or tibble/data.frame) containing at minimum the columns named in \code{id_col}, \code{date_col}, and \code{salary_col}.} \item{salary_col}{A single string naming the compensation column to use, @@ -40,6 +42,10 @@ that identifies a pensioner record. Defaults to \code{"pensioner"}.} \item{keep_vars}{A character vector of additional contract-level columns to attach via \code{govhr::add_contract_to_event()}. Defaults to NULL} + +\item{personnel_dt}{Deprecated. Use \code{personnel} instead.} + +\item{contract_dt}{Deprecated. Use \code{contracts} instead.} } \value{ A data.table with one row per retiring individual containing diff --git a/man/compute_percentile.Rd b/man/compute_percentile.Rd index 9a494e1..2c9d859 100644 --- a/man/compute_percentile.Rd +++ b/man/compute_percentile.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/equity.R \name{compute_percentile} \alias{compute_percentile} -\title{Bin a Measure into a Share Distribution} +\title{Bin a measure into a share distribution} \usage{ compute_percentile( data, diff --git a/man/compute_quantile.Rd b/man/compute_quantile.Rd index e9bf96a..2f340c8 100644 --- a/man/compute_quantile.Rd +++ b/man/compute_quantile.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/summarize.R \name{compute_quantile} \alias{compute_quantile} -\title{Function to compute quantiles of a measure column within groups and reference dates.} +\title{Function to compute quantiles of a measure column within groups and reference dates} \usage{ compute_quantile( data, @@ -27,5 +27,5 @@ compute_quantile( A data frame containing the quantiles, median values, and mean values for the specified measure column within the specified groups and reference dates. } \description{ -Function to compute quantiles of a measure column within groups and reference dates. +Function to compute quantiles of a measure column within groups and reference dates } diff --git a/man/compute_record_consistency.Rd b/man/compute_record_consistency.Rd index e4f04d5..8eaa706 100644 --- a/man/compute_record_consistency.Rd +++ b/man/compute_record_consistency.Rd @@ -2,14 +2,14 @@ % Please edit documentation in R/consistency.R \name{compute_record_consistency} \alias{compute_record_consistency} -\title{Compute the proportion of consistent records in a data frame.} +\title{Compute the proportion of consistent records in a data frame} \usage{ compute_record_consistency(data, id_col, group_cols = NULL, digits = 2) } \arguments{ \item{data}{A data frame.} -\item{id_col}{A character string specifying the name of the column that uniquely identifies records (e.g., "personnel_id" or "contract_id").} +\item{id_col}{A string specifying the name of the column that uniquely identifies records (e.g., "personnel_id" or "contract_id").} \item{group_cols}{A character vector specifying the names of the columns to group by. Default is NULL, which means no grouping.} @@ -19,7 +19,7 @@ compute_record_consistency(data, id_col, group_cols = NULL, digits = 2) A data frame with the proportion of consistent records in the data frame, optionally by group. } \description{ -Compute the proportion of consistent records in a data frame. +Compute the proportion of consistent records in a data frame } \details{ A record is considered consistent if it has a unique identifier and all its associated values are consistent. diff --git a/man/compute_service_table.Rd b/man/compute_service_table.Rd index a79ec02..b20fa27 100644 --- a/man/compute_service_table.Rd +++ b/man/compute_service_table.Rd @@ -2,10 +2,10 @@ % Please edit documentation in R/demographics.R \name{compute_service_table} \alias{compute_service_table} -\title{Compute an Actuarial Service Table from a Personnel Panel} +\title{Compute an actuarial service table from a personnel panel} \usage{ compute_service_table( - personnel_dt, + personnel, age_col, status_col, personnel_id_col, @@ -13,11 +13,12 @@ compute_service_table( group_cols, radix = 1e+05, smooth = FALSE, - span = 0.75 + span = 0.75, + personnel_dt = NULL ) } \arguments{ -\item{personnel_dt}{A data.table (or data.frame/tibble, coerced +\item{personnel}{A data.table (or data.frame/tibble, coerced automatically) containing the personnel panel. Passed straight through to \code{estimate_decrement_rates()}.} @@ -52,6 +53,8 @@ for noise reduction on strata that have no gap at all.} \item{span}{Numeric. Forwarded to \code{smooth_decrement_rates()} when \code{smooth = TRUE}. Defaults to \code{0.75}.} + +\item{personnel_dt}{Deprecated. Use \code{personnel} instead.} } \value{ A data.table with one row per age / \code{group_cols}: diff --git a/man/compute_tenure.Rd b/man/compute_tenure.Rd index 27bd9fd..b948397 100644 --- a/man/compute_tenure.Rd +++ b/man/compute_tenure.Rd @@ -5,7 +5,7 @@ \title{Compute employment tenure from contract history} \usage{ compute_tenure( - contract_dt, + contracts, ref_date, personnel_id_col = "personnel_id", contract_id_col = "contract_id", @@ -16,7 +16,7 @@ compute_tenure( ) } \arguments{ -\item{contract_dt}{data.table containing the contract history. Must include +\item{contracts}{Data.table containing the contract history. Must include personnel identifiers, contract identifiers, contract start and end dates, contract types, and any grouping variables supplied in \code{group_cols}.} diff --git a/man/compute_tenure_panel.Rd b/man/compute_tenure_panel.Rd index 5a9bd34..fe48ea2 100644 --- a/man/compute_tenure_panel.Rd +++ b/man/compute_tenure_panel.Rd @@ -5,7 +5,7 @@ \title{Compute employment tenure from a stacked contract panel} \usage{ compute_tenure_panel( - contract_dt, + contracts, personnel_id_col = "personnel_id", ref_date_col = "ref_date", contract_id_col = "contract_id", @@ -16,7 +16,7 @@ compute_tenure_panel( ) } \arguments{ -\item{contract_dt}{data.table containing the stacked contract panel. +\item{contracts}{Data.table containing the stacked contract panel. Must include personnel identifiers, contract identifiers, contract start and end dates, reference dates, contract types, and any grouping variables supplied in \code{group_cols}.} diff --git a/man/compute_time_trend.Rd b/man/compute_time_trend.Rd index 947d4ea..2c6c901 100644 --- a/man/compute_time_trend.Rd +++ b/man/compute_time_trend.Rd @@ -4,16 +4,18 @@ \alias{compute_time_trend} \title{Compute time trend} \usage{ -compute_time_trend(data, group, measure_col = NULL) +compute_time_trend(data, group_col, measure_col = NULL, group = NULL) } \arguments{ \item{data}{A data frame containing at least a \code{ref_date} column.} -\item{group}{Character string naming the grouping column, or \code{"ref_date"} for +\item{group_col}{Character string naming the grouping column, or \code{"ref_date"} for no grouping.} \item{measure_col}{Character string naming the numeric column to sum, or \code{NULL} to count rows.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ A summarized data frame with columns \code{ref_date}, optionally \code{group}, and \code{value}. Value denotes either a sum or headcount (if \code{measure_col} is \code{NULL}). diff --git a/man/compute_trend_summary.Rd b/man/compute_trend_summary.Rd index 1b4b918..4e958c3 100644 --- a/man/compute_trend_summary.Rd +++ b/man/compute_trend_summary.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{compute_trend_summary} \alias{compute_trend_summary} -\title{Compute Trend Summary} +\title{Compute trend summary} \usage{ compute_trend_summary(data, group_col, measure_col = NULL) } diff --git a/man/compute_value_consistency.Rd b/man/compute_value_consistency.Rd index 6f429b2..0388cb2 100644 --- a/man/compute_value_consistency.Rd +++ b/man/compute_value_consistency.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/consistency.R \name{compute_value_consistency} \alias{compute_value_consistency} -\title{Compute the proportion of consistent values in a data frame.} +\title{Compute the proportion of consistent values in a data frame} \usage{ compute_value_consistency( data, @@ -15,9 +15,9 @@ compute_value_consistency( \arguments{ \item{data}{A data frame.} -\item{id_col}{A character string specifying the name of the column that uniquely identifies records.} +\item{id_col}{A string specifying the name of the column that uniquely identifies records.} -\item{value_col}{A character string specifying the name of the column whose values are to be checked for consistency.} +\item{value_col}{A string specifying the name of the column whose values are to be checked for consistency.} \item{group_cols}{A character vector specifying the names of the columns to group by. Default is no grouping.} @@ -27,7 +27,7 @@ compute_value_consistency( A data frame with the proportion of consistent values in the data frame, optionally by group. } \description{ -Compute the proportion of consistent values in a data frame. +Compute the proportion of consistent values in a data frame } \details{ Consistency is broadly defined as the proportion of records and values that are consistent diff --git a/man/compute_wage_decomposition.Rd b/man/compute_wage_decomposition.Rd index 6891b78..c934cf2 100644 --- a/man/compute_wage_decomposition.Rd +++ b/man/compute_wage_decomposition.Rd @@ -8,9 +8,9 @@ cross, entry, and exit effects (Foster-Haltiwanger-Krizan style)} compute_wage_decomposition(growth_decomp, group_cols = NULL) } \arguments{ -\item{growth_decomp}{output of compute_growth_decomposition()} +\item{growth_decomp}{Output of compute_growth_decomposition()} -\item{group_cols}{optional character vector of columns identifying a higher-level +\item{group_cols}{Optional character vector of columns identifying a higher-level unit (e.g. "country_code") within which shares/composition are computed separately. NULL pools all rows into one global composition per ref_date.} } diff --git a/man/compute_wagebill.Rd b/man/compute_wagebill.Rd index dc59192..4a0e1c9 100644 --- a/man/compute_wagebill.Rd +++ b/man/compute_wagebill.Rd @@ -5,22 +5,24 @@ \title{Compute wage bill aggregates with optional macro-fiscal shares} \usage{ compute_wagebill( - contract_df, + contracts, wage_vars = c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu"), - groups = c("country_code", "year"), + group_cols = c("country_code", "year"), share_macro = FALSE, macro_vars = c("gdp_lcu", "pexpenditure_lcu", "prevenue_lcu", "taxrevenue_lcu"), - drop_na = TRUE + drop_na = TRUE, + groups = NULL, + contract_df = NULL ) } \arguments{ -\item{contract_df}{A data.frame or tibble containing contract-level salary data. +\item{contracts}{A data.frame or tibble containing contract-level salary data. Must include the columns specified in \code{wage_vars} and \code{groups}.} \item{wage_vars}{Character vector of salary column names to aggregate. Defaults to \code{c("gross_salary_lcu", "net_salary_lcu", "base_salary_lcu")}.} -\item{groups}{Character vector of grouping columns for aggregation. +\item{group_cols}{Character vector of grouping columns for aggregation. Defaults to \code{c("country_code", "year")}.} \item{share_macro}{Logical; if \code{TRUE}, computes wage bill shares relative @@ -32,6 +34,10 @@ as denominators when \code{share_macro = TRUE}. Defaults to \item{drop_na}{Logical; if \code{TRUE}, removes \code{NA} values before aggregation. Defaults to \code{TRUE}.} + +\item{groups}{Deprecated. Use \code{group_cols} instead.} + +\item{contract_df}{Deprecated. Use \code{contracts} instead.} } \value{ A wage bill table with optional grouping variables, diff --git a/man/compute_workforce_movement.Rd b/man/compute_workforce_movement.Rd index e0c38a5..97b4072 100644 --- a/man/compute_workforce_movement.Rd +++ b/man/compute_workforce_movement.Rd @@ -9,9 +9,9 @@ compute_workforce_movement(data, movement_type, measurement_type, group_cols) \arguments{ \item{data}{A data frame containing personnel data.} -\item{movement_type}{A character string indicating the type of movement: "hire", "fire", "retirement", or "turnover".} +\item{movement_type}{A string indicating the type of movement: "hire", "fire", "retirement", or "turnover".} -\item{measurement_type}{A character string indicating the measurement type: "count" or "rate". Ignored for turnover, which is a ratio.} +\item{measurement_type}{A string indicating the measurement type: "count" or "rate". Ignored for turnover, which is a ratio.} \item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } diff --git a/man/convert_data.Rd b/man/convert_data.Rd index fa23580..e5687fb 100644 --- a/man/convert_data.Rd +++ b/man/convert_data.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/harmonization.R \name{convert_data} \alias{convert_data} -\title{Convert Data to Match Original Class} +\title{Convert data to match original class} \usage{ convert_data(data, data_original) } diff --git a/man/count_entity.Rd b/man/count_entity.Rd index 2b722e0..522fa45 100644 --- a/man/count_entity.Rd +++ b/man/count_entity.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{count_entity} \alias{count_entity} -\title{Count Unique Entities by Group} +\title{Count unique entities by group} \usage{ count_entity(data, id_col, group_cols = NULL) } @@ -17,5 +17,5 @@ count_entity(data, id_col, group_cols = NULL) A data frame with the grouping columns and a \code{count} column representing the number of unique entities in each group. } \description{ -Count Unique Entities by Group +Count unique entities by group } diff --git a/man/count_unique.Rd b/man/count_unique.Rd index d51a2ed..bd6aae5 100644 --- a/man/count_unique.Rd +++ b/man/count_unique.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/summarize.R \name{count_unique} \alias{count_unique} -\title{Count Unique Non-Missing Values} +\title{Count unique non-missing values} \usage{ count_unique(x) } diff --git a/man/cp_ratio.Rd b/man/cp_ratio.Rd index e82463c..00099d4 100644 --- a/man/cp_ratio.Rd +++ b/man/cp_ratio.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/summarize.R \name{cp_ratio} \alias{cp_ratio} -\title{Compute a Compression Ratio Between Two Percentiles} +\title{Compute a compression ratio between two percentiles} \usage{ cp_ratio(x, upper = 0.9, lower = 0.1, na.rm = TRUE) } diff --git a/man/cv.Rd b/man/cv.Rd index 9582723..c0a245d 100644 --- a/man/cv.Rd +++ b/man/cv.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/summarize.R \name{cv} \alias{cv} -\title{Compute the Coefficient of Variation (CV)} +\title{Compute the coefficient of variation (CV)} \usage{ cv(x, na.rm = TRUE) } diff --git a/man/define_fns.Rd b/man/define_fns.Rd index 64e4db7..aa86c53 100644 --- a/man/define_fns.Rd +++ b/man/define_fns.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/summarize.R \name{define_fns} \alias{define_fns} -\title{Define Default Summary Functions} +\title{Define default summary functions} \format{ The list includes the following summary functions: \describe{ diff --git a/man/detect_career_transition.Rd b/man/detect_career_transition.Rd index 5cf3949..a5b871d 100644 --- a/man/detect_career_transition.Rd +++ b/man/detect_career_transition.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/transition.R \name{detect_career_transition} \alias{detect_career_transition} -\title{Detect Career Transitions} +\title{Detect career transitions} \usage{ detect_career_transition( data, diff --git a/man/detect_inconsistent_cols.Rd b/man/detect_inconsistent_cols.Rd index 658f34f..d0ccca7 100644 --- a/man/detect_inconsistent_cols.Rd +++ b/man/detect_inconsistent_cols.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/harmonization.R \name{detect_inconsistent_cols} \alias{detect_inconsistent_cols} -\title{Detect Inconsistent Columns in a Data Frame} +\title{Detect inconsistent columns in a data frame} \usage{ detect_inconsistent_cols(data, inconsistent_cols) } diff --git a/man/detect_personnel_event.Rd b/man/detect_personnel_event.Rd index 04834e0..c393bf6 100644 --- a/man/detect_personnel_event.Rd +++ b/man/detect_personnel_event.Rd @@ -32,7 +32,7 @@ detect_personnel_event( \item{end_date}{Optional end date for the full date sequence (default: \code{"2018-01-01"}).} -\item{status_col}{a column within \code{data} object for the employment status of personnel} +\item{status_col}{A column within \code{data} object for the employment status of personnel.} \item{freq}{Frequency for the sequence of dates (default: \code{"year"}). Can be any valid value for \code{seq.Date(by = ...)}.} diff --git a/man/detect_reallocation.Rd b/man/detect_reallocation.Rd index 1e6f28a..3dd100e 100644 --- a/man/detect_reallocation.Rd +++ b/man/detect_reallocation.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/transition.R \name{detect_reallocation} \alias{detect_reallocation} -\title{Detect Personnel Reallocation Events} +\title{Detect personnel reallocation events} \usage{ detect_reallocation(data, personnel_hire) } diff --git a/man/detect_retirement.Rd b/man/detect_retirement.Rd index 2e3da11..0d3764e 100644 --- a/man/detect_retirement.Rd +++ b/man/detect_retirement.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/movement.R \name{detect_retirement} \alias{detect_retirement} -\title{Detect Personnel Retirement Events} +\title{Detect personnel retirement events} \usage{ detect_retirement(data) } diff --git a/man/dot-compute_decrement_pair.Rd b/man/dot-compute_decrement_pair.Rd index ef6cf2b..ee64fd7 100644 --- a/man/dot-compute_decrement_pair.Rd +++ b/man/dot-compute_decrement_pair.Rd @@ -15,12 +15,12 @@ ) } \arguments{ -\item{snap_t0}{data.table. Subset of the full personnel panel at snapshot +\item{snap_t0}{Data.table. Subset of the full personnel panel at snapshot T0, already filtered to a single reference date. Must contain \code{age_col}, \code{status_col}, \code{personnel_id_col}, \code{ref_date_col}, and \code{group_cols}.} -\item{snap_t1}{data.table. Subset of the full personnel panel at snapshot +\item{snap_t1}{Data.table. Subset of the full personnel panel at snapshot T1 (the period immediately following T0). Same column requirements as \code{snap_t0}.} @@ -39,7 +39,7 @@ column, used to join each cohort member's T0 record to their T1 status.} \item{ref_date_col}{Character. Name of the reference date column used to extract the T0 and T1 dates attached to the output.} -\item{group_cols}{Character vector. Additional columns (e.g. gender, +\item{group_cols}{A character vector. Additional columns (e.g. gender, service type) to stratify exposure and outcome counts by, alongside \code{age_col}.} } diff --git a/man/dot-compute_transition_pair.Rd b/man/dot-compute_transition_pair.Rd index 03e1c6e..d52381a 100644 --- a/man/dot-compute_transition_pair.Rd +++ b/man/dot-compute_transition_pair.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/movement_summarize.R \name{.compute_transition_pair} \alias{.compute_transition_pair} -\title{Compute Transition Counts for a Single Consecutive Snapshot Pair} +\title{Compute transition counts for a single consecutive snapshot pair} \usage{ .compute_transition_pair( snap_t0, @@ -17,19 +17,19 @@ ) } \arguments{ -\item{snap_t0}{data.table. Subset of the full panel at snapshot T0, already +\item{snap_t0}{Data.table. Subset of the full panel at snapshot T0, already filtered to a single reference date. Must contain \code{ref_date_col}, \code{personnel_id_col}, \code{group_cols}, \code{start_date_col}, \code{end_date_col}, and \code{contract_type_col}.} -\item{snap_t1}{data.table. Subset of the full panel at snapshot T1 (the +\item{snap_t1}{Data.table. Subset of the full panel at snapshot T1 (the period immediately following T0). Same column requirements as \code{snap_t0}.} \item{ref_date_col}{Character. Name of the reference date column used to extract T0 and T1 dates from the snapshots.} -\item{group_cols}{Character vector. Columns whose concatenated values define +\item{group_cols}{A character vector. Columns whose concatenated values define the movement state for each person. Rows with \code{NA} in any of these columns are dropped via \code{na.omit()} before state labels are formed.} diff --git a/man/dot-smooth_rate_curve.Rd b/man/dot-smooth_rate_curve.Rd index 7830f2b..35ab80b 100644 --- a/man/dot-smooth_rate_curve.Rd +++ b/man/dot-smooth_rate_curve.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/demographics.R \name{.smooth_rate_curve} \alias{.smooth_rate_curve} -\title{Graduate a Single Age Curve Onto a Complete Age Grid} +\title{Graduate a single age curve onto a complete age grid} \usage{ .smooth_rate_curve(age, rate, weight, full_ages, span) } diff --git a/man/estimate_decrement_rates.Rd b/man/estimate_decrement_rates.Rd index f49fb19..76f35ef 100644 --- a/man/estimate_decrement_rates.Rd +++ b/man/estimate_decrement_rates.Rd @@ -2,19 +2,20 @@ % Please edit documentation in R/demographics.R \name{estimate_decrement_rates} \alias{estimate_decrement_rates} -\title{Estimate Empirical Decrement Rates from a Personnel Panel} +\title{Estimate empirical decrement rates from a personnel panel} \usage{ estimate_decrement_rates( - personnel_dt, + personnel, age_col, status_col, personnel_id_col, ref_date_col, - group_cols + group_cols, + personnel_dt = NULL ) } \arguments{ -\item{personnel_dt}{A data.table (or data.frame/tibble, coerced +\item{personnel}{A data.table (or data.frame/tibble, coerced automatically) containing the personnel panel: multiple snapshots of the same population over time, identified by \code{ref_date_col}. Must contain at least two distinct, non-missing reference dates.} @@ -37,6 +38,8 @@ identifies each snapshot.} \item{group_cols}{A character vector of additional columns (e.g. gender, occupation, service type) to estimate separate rates by, alongside age.} + +\item{personnel_dt}{Deprecated. Use \code{personnel} instead.} } \value{ A data.table with one row per age / \code{group_cols} / outcome diff --git a/man/estimate_exit_rates.Rd b/man/estimate_exit_rates.Rd index f307601..ec53274 100644 --- a/man/estimate_exit_rates.Rd +++ b/man/estimate_exit_rates.Rd @@ -2,11 +2,11 @@ % Please edit documentation in R/movement.R \name{estimate_exit_rates} \alias{estimate_exit_rates} -\title{Estimate Historical Non-Retirement Exit Rates from Panel Data} +\title{Estimate historical non-retirement exit rates from panel data} \usage{ estimate_exit_rates( - contract_dt, - personnel_dt, + contracts, + personnel, group_cols = NULL, freq = "year", ref_date = NULL, @@ -15,14 +15,16 @@ estimate_exit_rates( start_date_col = "start_date", contract_type_col = "contract_type", end_date_col = "end_date", - status_col = "employment_status" + status_col = "employment_status", + contract_dt = NULL, + personnel_dt = NULL ) } \arguments{ -\item{contract_dt}{data.table. Full panel of contract data (all +\item{contracts}{Data.table. Full panel of contract data (all \code{ref_date} snapshots).} -\item{personnel_dt}{data.table. Full panel of personnel data.} +\item{personnel}{Data.table. Full panel of personnel data.} \item{group_cols}{Character vector or \code{NULL}. Columns to group by (e.g. \code{"est_id"}). Pass \code{NULL} for an overall (ungrouped) rate.} @@ -44,6 +46,10 @@ included to prevent partial argument matching against \code{ref_date_col}).} \item{end_date_col}{Character. Default \code{"end_date"}.} \item{status_col}{Character. Default \code{"employment_status"}.} + +\item{contract_dt}{Deprecated. Use \code{contracts} instead.} + +\item{personnel_dt}{Deprecated. Use \code{personnel} instead.} } \value{ data.table with \code{group_cols} (if specified) and diff --git a/man/estimate_movement_rates.Rd b/man/estimate_movement_rates.Rd index 2033cbe..2aa963c 100644 --- a/man/estimate_movement_rates.Rd +++ b/man/estimate_movement_rates.Rd @@ -2,10 +2,10 @@ % Please edit documentation in R/movement_summarize.R \name{estimate_movement_rates} \alias{estimate_movement_rates} -\title{Estimate Movement Baseline from Panel Data} +\title{Estimate movement baseline from panel data} \usage{ estimate_movement_rates( - contract_dt, + contracts, group_cols, personnel_id_col = "personnel_id", ref_date_col = "ref_date", @@ -16,10 +16,10 @@ estimate_movement_rates( ) } \arguments{ -\item{contract_dt}{data.table. Contract data in long (panel) format. +\item{contracts}{Data.table. Contract data in long (panel) format. Must contain \code{ref_date_col} for panel snapshot identification.} -\item{group_cols}{Character vector. One or more columns defining the movement +\item{group_cols}{A character vector. One or more columns defining the movement states between which transitions are measured (e.g., \code{c("est_id", "paygrade")} or \code{c("paygrade")}). Values are concatenated into a single state label when multiple columns are diff --git a/man/fastprop.Rd b/man/fastprop.Rd index 04dfa8f..ea2b9bf 100644 --- a/man/fastprop.Rd +++ b/man/fastprop.Rd @@ -7,10 +7,10 @@ fastprop(.data, ...) } \arguments{ +\item{.data}{A data frame or tibble containing a count column \code{n}.} + \item{...}{Grouping variables. Proportions are computed within the combinations of these variables.} - -\item{data}{A data frame or tibble containing a count column \code{n}.} } \value{ A tibble with the same columns as \code{.data} plus a numeric diff --git a/man/find_duplicate_ids.Rd b/man/find_duplicate_ids.Rd index e9fca07..572e30f 100644 --- a/man/find_duplicate_ids.Rd +++ b/man/find_duplicate_ids.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/harmonization.R \name{find_duplicate_ids} \alias{find_duplicate_ids} -\title{Find Duplicate Identifiers in a Data Frame} +\title{Find duplicate identifiers in a data frame} \usage{ find_duplicate_ids(data, identifier) } diff --git a/man/fix_invalid_birthdates.Rd b/man/fix_invalid_birthdates.Rd index 10a2d33..91ba339 100644 --- a/man/fix_invalid_birthdates.Rd +++ b/man/fix_invalid_birthdates.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_invalid_birthdates} \alias{fix_invalid_birthdates} -\title{Fix Invalid Birth Dates} +\title{Fix invalid birth dates} \usage{ fix_invalid_birthdates( data, diff --git a/man/fix_invalid_dates.Rd b/man/fix_invalid_dates.Rd index 0a156f4..e4eba6f 100644 --- a/man/fix_invalid_dates.Rd +++ b/man/fix_invalid_dates.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_invalid_dates} \alias{fix_invalid_dates} -\title{Fix Invalid Reference Dates} +\title{Fix invalid reference dates} \usage{ fix_invalid_dates( data, diff --git a/man/fix_negative_salaries.Rd b/man/fix_negative_salaries.Rd index 7f949e1..87864ee 100644 --- a/man/fix_negative_salaries.Rd +++ b/man/fix_negative_salaries.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_negative_salaries} \alias{fix_negative_salaries} -\title{Fix Negative Salary Values} +\title{Fix negative salary values} \usage{ fix_negative_salaries( data, diff --git a/man/fix_retirement_age.Rd b/man/fix_retirement_age.Rd index 8025148..031fb7d 100644 --- a/man/fix_retirement_age.Rd +++ b/man/fix_retirement_age.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_retirement_age} \alias{fix_retirement_age} -\title{Flag or Adjust Over-Retirement-Age Workers} +\title{Flag or adjust over-retirement-age workers} \usage{ fix_retirement_age(data, max_age = 65, treatment = c("flag", "adjust_status")) } diff --git a/man/fix_salary_components.Rd b/man/fix_salary_components.Rd index 30f8f2c..42349da 100644 --- a/man/fix_salary_components.Rd +++ b/man/fix_salary_components.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_salary_components} \alias{fix_salary_components} -\title{Fix Salary Component Inconsistencies} +\title{Fix salary component inconsistencies} \usage{ fix_salary_components( data, diff --git a/man/fix_underage_workers.Rd b/man/fix_underage_workers.Rd index 02c7b36..8f1cc82 100644 --- a/man/fix_underage_workers.Rd +++ b/man/fix_underage_workers.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_underage_workers} \alias{fix_underage_workers} -\title{Flag or Remove Underage Workers} +\title{Flag or remove underage workers} \usage{ fix_underage_workers(data, min_age = 18, treatment = c("flag", "filter")) } diff --git a/man/fix_working_hours.Rd b/man/fix_working_hours.Rd index e84ef1e..7b2a647 100644 --- a/man/fix_working_hours.Rd +++ b/man/fix_working_hours.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{fix_working_hours} \alias{fix_working_hours} -\title{Fix Invalid Working Hours} +\title{Fix invalid working hours} \usage{ fix_working_hours(data, treatment = c("na", "clamp", "flag")) } @@ -20,7 +20,7 @@ fix_working_hours(data, treatment = c("na", "clamp", "flag")) A data.frame with corrected working hours. } \description{ -Corrects \code{whours} values outside the valid range \link{0, 168}, addressing +Corrects \code{whours} values outside the valid range [0, 168], addressing violations of the \code{contract_whours} rule. The maximum of 168 reflects 5 days × 8 hours per week. } diff --git a/man/generate_hr_report.Rd b/man/generate_hr_report.Rd index 76aa299..abae1b8 100644 --- a/man/generate_hr_report.Rd +++ b/man/generate_hr_report.Rd @@ -5,24 +5,27 @@ \title{Generate Standard HR Analytics Report} \usage{ generate_hr_report( - contract_dt, - personnel_dt, - est_dt, + contracts, + personnel, + establishments, country_code, - output = "hr_report.html" + output = "hr_report.html", + contract_dt = NULL, + personnel_dt = NULL, + est_dt = NULL ) } \arguments{ -\item{contract_dt}{A data.table containing the Contract module data with +\item{contracts}{A data.table containing the Contract module data with harmonized column names according to \code{\link{dictionary}}. Should include columns such as contract_id, personnel_id, est_id, ref_date, salary fields, and occupation information.} -\item{personnel_dt}{A data.table containing the Personnel module data with +\item{personnel}{A data.table containing the Personnel module data with harmonized column names. Should include personnel_id and demographic information.} -\item{est_dt}{A data.table containing the Establishment module data with +\item{establishments}{A data.table containing the Establishment module data with harmonized column names. Should include est_id and establishment characteristics.} @@ -31,6 +34,12 @@ characteristics.} \item{output}{Character string specifying the output file name. Defaults to "hr_report.html". The file will be created in the current working directory.} + +\item{contract_dt}{Deprecated. Use \code{contracts} instead.} + +\item{personnel_dt}{Deprecated. Use \code{personnel} instead.} + +\item{est_dt}{Deprecated. Use \code{establishments} instead.} } \value{ An HR report, in HTML. @@ -47,7 +56,7 @@ Establishment modules. generate_hr_report( contract_dt = bra_hrmis_contract, personnel_dt = bra_hrmis_personnel, - est_dt = bra_hrmis_est, + establishments = bra_hrmis_est, country_code = "BRA", output = "brazil_hr_report.html" ) diff --git a/man/get_metadata360.Rd b/man/get_metadata360.Rd index 59b5292..88a9707 100644 --- a/man/get_metadata360.Rd +++ b/man/get_metadata360.Rd @@ -7,7 +7,7 @@ get_metadata360(dataset_id) } \arguments{ -\item{dataset_id}{A character string or numeric identifier specifying the +\item{dataset_id}{A string or numeric identifier specifying the dataset for which metadata should be retrieved.} } \value{ diff --git a/man/ggplot_coef.Rd b/man/ggplot_coef.Rd index 0846dc6..b1f4a79 100644 --- a/man/ggplot_coef.Rd +++ b/man/ggplot_coef.Rd @@ -9,7 +9,7 @@ ggplot_coef(model, coef) \arguments{ \item{model}{A fitted model object (e.g., lm, glm).} -\item{coef}{A character string of coefficient name to plot. It can be a regular expression (e.g., "^term").} +\item{coef}{A string of coefficient name to plot. It can be a regular expression (e.g., "^term").} } \value{ A ggplot object showing coefficients with error bars. diff --git a/man/ggplot_point_line.Rd b/man/ggplot_point_line.Rd index df98d4d..eb7fb0b 100644 --- a/man/ggplot_point_line.Rd +++ b/man/ggplot_point_line.Rd @@ -4,7 +4,7 @@ \alias{ggplot_point_line} \title{Plot grouped line chart with labeled points} \usage{ -ggplot_point_line(.data, x, y, group = NULL, label = NULL, ...) +ggplot_point_line(.data, x, y, group_col = NULL, label = NULL, ...) } \arguments{ \item{.data}{A data frame or tibble containing the variables to plot.} @@ -13,7 +13,7 @@ ggplot_point_line(.data, x, y, group = NULL, label = NULL, ...) \item{y}{Column to be mapped to the y-axis.} -\item{group}{Column specifying the grouping variable (mapped to color).} +\item{group_col}{Column specifying the grouping variable (mapped to color).} \item{label}{Column specifying the labels for each point (optional).} diff --git a/man/ggplot_segment.Rd b/man/ggplot_segment.Rd index a9a4ac7..a11a991 100644 --- a/man/ggplot_segment.Rd +++ b/man/ggplot_segment.Rd @@ -4,14 +4,14 @@ \alias{ggplot_segment} \title{Plot segments overlaid with points, ordered by median} \usage{ -ggplot_segment(data, col, group) +ggplot_segment(data, col, group_col) } \arguments{ \item{data}{A data.frame or tibble.} \item{col}{Unquoted numeric column (values).} -\item{group}{Unquoted grouping column.} +\item{group_col}{Unquoted grouping column.} } \value{ A ggplot object. diff --git a/man/group_color_scale.Rd b/man/group_color_scale.Rd index e2c919e..690b328 100644 --- a/man/group_color_scale.Rd +++ b/man/group_color_scale.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{group_color_scale} \alias{group_color_scale} -\title{Orange Gradient Colour Scale for Grouped Series} +\title{Orange gradient colour scale for grouped series} \usage{ group_color_scale(values) } diff --git a/man/guess_date_frequency.Rd b/man/guess_date_frequency.Rd index 087ef87..027ed8e 100644 --- a/man/guess_date_frequency.Rd +++ b/man/guess_date_frequency.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/harmonization.R \name{guess_date_frequency} \alias{guess_date_frequency} -\title{Guess the Reporting Frequency of the Reference Dates} +\title{Guess the reporting frequency of the reference dates} \usage{ guess_date_frequency(data) } diff --git a/man/model_wage.Rd b/man/model_wage.Rd index 54db229..f73126d 100644 --- a/man/model_wage.Rd +++ b/man/model_wage.Rd @@ -19,7 +19,7 @@ effects columns.} \item{outcome_var}{Character. Name of the outcome column. Default \code{"gross_salary_lcu"}.} -\item{predictor_vars}{Character vector. Names of predictor columns. +\item{predictor_vars}{A character vector. Names of predictor columns. Default \code{c("contract_type", "occupation_native", "educat7", "whours", "paygrade")}.} \item{fixed_effects_vars}{Character vector, or \code{NULL} to fit without fixed diff --git a/man/plot_bar_growth.Rd b/man/plot_bar_growth.Rd index 391f69d..00dd86d 100644 --- a/man/plot_bar_growth.Rd +++ b/man/plot_bar_growth.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{plot_bar_growth} \alias{plot_bar_growth} -\title{Plot Growth Rates by Group} +\title{Plot growth rates by group} \usage{ plot_bar_growth(data, group_col) } diff --git a/man/plot_bar_total.Rd b/man/plot_bar_total.Rd index 73312fe..668d3b9 100644 --- a/man/plot_bar_total.Rd +++ b/man/plot_bar_total.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{plot_bar_total} \alias{plot_bar_total} -\title{Plot Totals by Group} +\title{Plot totals by group} \usage{ plot_bar_total(data, group_col, x_col = "value", x_label = "Value") } diff --git a/man/plot_compression_ratio.Rd b/man/plot_compression_ratio.Rd index 25493eb..c5eb547 100644 --- a/man/plot_compression_ratio.Rd +++ b/man/plot_compression_ratio.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plots.R \name{plot_compression_ratio} \alias{plot_compression_ratio} -\title{Plot Compression Ratio} +\title{Plot compression ratio} \usage{ plot_compression_ratio(data, group_cols = NULL) } @@ -16,5 +16,5 @@ for no grouping.} A ggplot2 object representing the compression ratio. } \description{ -Plot Compression Ratio +Plot compression ratio } diff --git a/man/plot_consistency_heatmap.Rd b/man/plot_consistency_heatmap.Rd index 89fb710..98e2295 100644 --- a/man/plot_consistency_heatmap.Rd +++ b/man/plot_consistency_heatmap.Rd @@ -2,20 +2,22 @@ % Please edit documentation in R/qcheck_plots.R \name{plot_consistency_heatmap} \alias{plot_consistency_heatmap} -\title{Plot Consistency Heatmap by Group} +\title{Plot consistency heatmap by group} \usage{ -plot_consistency_heatmap(data, id_col, group) +plot_consistency_heatmap(data, id_col, group_cols, group = NULL) } \arguments{ \item{data}{A data frame.} -\item{id_col}{Character string. The column name of the unique identifier for each record.} +\item{id_col}{A string. The column name of the unique identifier for each record.} -\item{group}{Character string. The column name of the grouping variable (e.g., "ref_date").} +\item{group_cols}{A string. The column name of the grouping variable (e.g., "ref_date").} + +\item{group}{Deprecated. Use \code{group_cols} instead.} } \value{ A plotly heatmap object representing consistency values by group and variable. } \description{ -Plot Consistency Heatmap by Group +Plot consistency heatmap by group } diff --git a/man/plot_consistency_trend.Rd b/man/plot_consistency_trend.Rd index 46f8f90..8f70085 100644 --- a/man/plot_consistency_trend.Rd +++ b/man/plot_consistency_trend.Rd @@ -2,33 +2,36 @@ % Please edit documentation in R/qcheck_plots.R \name{plot_consistency_trend} \alias{plot_consistency_trend} -\title{Plot Consistency Over Time} +\title{Plot consistency over time} \usage{ plot_consistency_trend( data, id_col, - group, + group_col, value_col, type_plot, - toggle_growth = FALSE + toggle_growth = FALSE, + group = NULL ) } \arguments{ \item{data}{A data frame.} -\item{id_col}{Character string. The column name of the unique identifier for each record.} +\item{id_col}{A string. The column name of the unique identifier for each record.} -\item{group}{Character string. The column name of the grouping variable (e.g., "ref_date").} +\item{group_col}{A string. The column name of the grouping variable (e.g., "ref_date").} -\item{value_col}{Character string. The column name of the value to be checked for consistency.} +\item{value_col}{A string. The column name of the value to be checked for consistency.} -\item{type_plot}{Character string. The type of consistency plot ("record" or "value").} +\item{type_plot}{A string. The type of consistency plot ("record" or "value").} \item{toggle_growth}{Logical. When \code{TRUE} the y-axis switches to a baseline-index view (first period = 100). Defaults to \code{FALSE}.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ A ggplot2 object. } \description{ -Plot Consistency Over Time +Plot consistency over time } diff --git a/man/plot_coverage_bar.Rd b/man/plot_coverage_bar.Rd index f53fbe2..f4fd480 100644 --- a/man/plot_coverage_bar.Rd +++ b/man/plot_coverage_bar.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/qcheck_plots.R \name{plot_coverage_bar} \alias{plot_coverage_bar} -\title{Plot Coverage by Group (Coloured Bar Chart)} +\title{Plot coverage by group (coloured bar chart)} \usage{ plot_coverage_bar(data) } diff --git a/man/plot_coverage_heatmap.Rd b/man/plot_coverage_heatmap.Rd index f3c5eda..c012711 100644 --- a/man/plot_coverage_heatmap.Rd +++ b/man/plot_coverage_heatmap.Rd @@ -2,18 +2,20 @@ % Please edit documentation in R/qcheck_plots.R \name{plot_coverage_heatmap} \alias{plot_coverage_heatmap} -\title{Plot Coverage Heatmap by Group} +\title{Plot coverage heatmap by group} \usage{ -plot_coverage_heatmap(data, group = NULL) +plot_coverage_heatmap(data, group_col = NULL, group = NULL) } \arguments{ \item{data}{A data frame.} -\item{group}{Character string. Grouping variable.} +\item{group_col}{A string. Grouping variable.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ A plotly object representing a heatmap of coverage values by group and variable. } \description{ -Plot Coverage Heatmap by Group +Plot coverage heatmap by group } diff --git a/man/plot_coverage_trend.Rd b/man/plot_coverage_trend.Rd index 992914e..381609d 100644 --- a/man/plot_coverage_trend.Rd +++ b/man/plot_coverage_trend.Rd @@ -4,17 +4,19 @@ \alias{plot_coverage_trend} \title{Plot Coverage Over Time} \usage{ -plot_coverage_trend(data, group, toggle_growth = FALSE) +plot_coverage_trend(data, group_col, toggle_growth = FALSE, group = NULL) } \arguments{ \item{data}{A data frame. Typically the contract, personnel, or establishment dataset for the active module.} -\item{group}{Character string. Grouping variable inherited from the +\item{group_col}{A string. Grouping variable inherited from the \code{coverage_group} UI input (e.g. \code{"ref_date"}, \code{"grade_id"}).} \item{toggle_growth}{Logical. When \code{TRUE} the y-axis switches to a baseline-index view (first period = 100). Defaults to \code{FALSE}.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ A ggplot2 object. diff --git a/man/plot_decile.Rd b/man/plot_decile.Rd index 5676e58..2befd46 100644 --- a/man/plot_decile.Rd +++ b/man/plot_decile.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plots.R \name{plot_decile} \alias{plot_decile} -\title{Plot Decile Summary} +\title{Plot decile summary} \usage{ plot_decile(data, group_cols) } @@ -15,7 +15,7 @@ plot_decile(data, group_cols) A ggplot2 object representing the decile summary. } \description{ -Plot Decile Summary +Plot decile summary } \examples{ govhr::compute_decile( diff --git a/man/plot_histogram.Rd b/man/plot_histogram.Rd index a9fd185..9a87fd4 100644 --- a/man/plot_histogram.Rd +++ b/man/plot_histogram.Rd @@ -2,14 +2,14 @@ % Please edit documentation in R/plots.R \name{plot_histogram} \alias{plot_histogram} -\title{Plot Density as Percentage Share} +\title{Plot density as percentage share} \usage{ plot_histogram(data, plot_type = "histogram", group_col = NULL) } \arguments{ \item{data}{A data frame produced by \code{compute_histogram()} or \code{compute_cumulative()}, containing columns \code{bin}, \code{pct}, and optionally a grouping column.} -\item{plot_type}{A character string indicating the type of plot: "histogram" or "cumulative".} +\item{plot_type}{A string indicating the type of plot: "histogram" or "cumulative".} \item{group_col}{The column name to group by.} } @@ -17,5 +17,5 @@ plot_histogram(data, plot_type = "histogram", group_col = NULL) A ggplot2 object. } \description{ -Plot Density as Percentage Share +Plot density as percentage share } diff --git a/man/plot_movement.Rd b/man/plot_movement.Rd index 460a07c..9bb25f1 100644 --- a/man/plot_movement.Rd +++ b/man/plot_movement.Rd @@ -2,16 +2,16 @@ % Please edit documentation in R/plots.R \name{plot_movement} \alias{plot_movement} -\title{Plot Personnel Movement Over Time} +\title{Plot personnel movement over time} \usage{ plot_movement(data, movement_type, measurement_type, group_cols) } \arguments{ \item{data}{A data frame containing the movement data with columns \code{ref_date}, \code{indicator}, and optionally a grouping column.} -\item{movement_type}{A character string indicating the type of movement: "hire", "fire", or "turnover".} +\item{movement_type}{A string indicating the type of movement: "hire", "fire", or "turnover".} -\item{measurement_type}{A character string indicating the measurement type: "count" or "rate".} +\item{measurement_type}{A string indicating the measurement type: "count" or "rate".} \item{group_cols}{A character vector of columns to group by, or \code{"ref_date"} for no grouping.} } @@ -19,5 +19,5 @@ plot_movement(data, movement_type, measurement_type, group_cols) A ggplot2 object representing the personnel movement over time. } \description{ -Plot Personnel Movement Over Time +Plot personnel movement over time } diff --git a/man/plot_movement_cost.Rd b/man/plot_movement_cost.Rd index 717e1b9..bb08d8e 100644 --- a/man/plot_movement_cost.Rd +++ b/man/plot_movement_cost.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plots.R \name{plot_movement_cost} \alias{plot_movement_cost} -\title{Plot Movement Cost} +\title{Plot movement cost} \usage{ plot_movement_cost(data, group_cols) } @@ -15,5 +15,5 @@ plot_movement_cost(data, group_cols) A ggplot2 object representing the movement cost. } \description{ -Plot Movement Cost +Plot movement cost } diff --git a/man/plot_segment.Rd b/man/plot_segment.Rd index fbd80f8..8a12761 100644 --- a/man/plot_segment.Rd +++ b/man/plot_segment.Rd @@ -2,9 +2,9 @@ % Please edit documentation in R/plots.R \name{plot_segment} \alias{plot_segment} -\title{Create a Segment Plot with Jittered Points} +\title{Create a segment plot with jittered points} \usage{ -plot_segment(data, col, group) +plot_segment(data, col, group_col, group = NULL) } \arguments{ \item{data}{A data frame containing the variables to plot.} @@ -12,8 +12,10 @@ plot_segment(data, col, group) \item{col}{Character string specifying the name of the numeric column to plot on the x-axis.} -\item{group}{Character string specifying the name of the grouping column for +\item{group_col}{Character string specifying the name of the grouping column for the y-axis.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ A ggplot2 object displaying: @@ -39,6 +41,6 @@ The function: } } \examples{ -plot_segment(mtcars, col = "mpg", group = "cyl") +plot_segment(mtcars, col = "mpg", group_col = "cyl") } diff --git a/man/plot_transfer_heatmap.Rd b/man/plot_transfer_heatmap.Rd index 1e14f22..4694155 100644 --- a/man/plot_transfer_heatmap.Rd +++ b/man/plot_transfer_heatmap.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/transition.R \name{plot_transfer_heatmap} \alias{plot_transfer_heatmap} -\title{Plot Transfer Heatmap} +\title{Plot transfer heatmap} \usage{ plot_transfer_heatmap(data) } diff --git a/man/plot_transition_network.Rd b/man/plot_transition_network.Rd index 05f365f..4d127f9 100644 --- a/man/plot_transition_network.Rd +++ b/man/plot_transition_network.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/transition.R \name{plot_transition_network} \alias{plot_transition_network} -\title{Plot Transition Network} +\title{Plot transition network} \usage{ plot_transition_network(data) } diff --git a/man/plot_trend.Rd b/man/plot_trend.Rd index 873fa4f..175be0e 100644 --- a/man/plot_trend.Rd +++ b/man/plot_trend.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/overview.R \name{plot_trend} \alias{plot_trend} -\title{Plot Time Trend} +\title{Plot time trend} \usage{ plot_trend( data, diff --git a/man/remove_duplicate_contracts.Rd b/man/remove_duplicate_contracts.Rd index b4c599a..e73d38d 100644 --- a/man/remove_duplicate_contracts.Rd +++ b/man/remove_duplicate_contracts.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{remove_duplicate_contracts} \alias{remove_duplicate_contracts} -\title{Remove Duplicate Contract Records} +\title{Remove duplicate contract records} \usage{ remove_duplicate_contracts( data, diff --git a/man/remove_duplicate_personnel.Rd b/man/remove_duplicate_personnel.Rd index 07b92df..9da0e58 100644 --- a/man/remove_duplicate_personnel.Rd +++ b/man/remove_duplicate_personnel.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/treatment.R \name{remove_duplicate_personnel} \alias{remove_duplicate_personnel} -\title{Remove Duplicate Personnel Records} +\title{Remove duplicate personnel records} \usage{ remove_duplicate_personnel(data, keep = c("first", "last", "none")) } diff --git a/man/rescale_baseline.Rd b/man/rescale_baseline.Rd index 92edd8f..056df59 100644 --- a/man/rescale_baseline.Rd +++ b/man/rescale_baseline.Rd @@ -2,16 +2,18 @@ % Please edit documentation in R/summarize.R \name{rescale_baseline} \alias{rescale_baseline} -\title{Rescale to Baseline Index} +\title{Rescale to baseline index} \usage{ -rescale_baseline(data, group) +rescale_baseline(data, group_col, group = NULL) } \arguments{ \item{data}{A data frame with columns \code{ref_date} and \code{value}, as returned by \code{\link[=compute_time_trend]{compute_time_trend()}}.} -\item{group}{Character string naming the grouping column, or \code{"ref_date"} for +\item{group_col}{Character string naming the grouping column, or \code{"ref_date"} for no grouping.} + +\item{group}{Deprecated. Use \code{group_col} instead.} } \value{ The input data frame with \code{value} rescaled to a baseline index. diff --git a/man/roll_snapshot_pairs.Rd b/man/roll_snapshot_pairs.Rd index 3c4bf3d..4b8d488 100644 --- a/man/roll_snapshot_pairs.Rd +++ b/man/roll_snapshot_pairs.Rd @@ -2,12 +2,12 @@ % Please edit documentation in R/movement_summarize.R \name{roll_snapshot_pairs} \alias{roll_snapshot_pairs} -\title{Iterate Consecutive Snapshot Pairs in a Panel data.table} +\title{Iterate consecutive snapshot pairs in a panel data.table} \usage{ roll_snapshot_pairs(panel_dt, date_col, f, ...) } \arguments{ -\item{panel_dt}{data.table. Panel data containing all snapshots. The key +\item{panel_dt}{Data.table. Panel data containing all snapshots. The key is set/updated in-place on entry; pass \code{data.table::copy()} if the caller must preserve the original key.} diff --git a/man/sample_group.Rd b/man/sample_group.Rd index 57a397f..beef747 100644 --- a/man/sample_group.Rd +++ b/man/sample_group.Rd @@ -4,12 +4,12 @@ \alias{sample_group} \title{Sample groups and return all rows for those groups} \usage{ -sample_group(data, group, n) +sample_group(data, group_col, n) } \arguments{ \item{data}{A data.frame, tibble, or data.table.} -\item{group}{Unquoted column name used to define groups.} +\item{group_col}{Unquoted column name used to define groups.} \item{n}{Integer; number of distinct groups to sample. If greater than the number of available groups, all groups are returned.} diff --git a/man/smooth_decrement_rates.Rd b/man/smooth_decrement_rates.Rd index ce91904..5b356ec 100644 --- a/man/smooth_decrement_rates.Rd +++ b/man/smooth_decrement_rates.Rd @@ -2,19 +2,20 @@ % Please edit documentation in R/demographics.R \name{smooth_decrement_rates} \alias{smooth_decrement_rates} -\title{Graduate (Smooth and Gap-Fill) Empirical Decrement Rates} +\title{Graduate (smooth and gap-fill) empirical decrement rates} \usage{ smooth_decrement_rates( - decrement_dt, + decrements, age_col, status_col, group_cols, active_value = "active", - span = 0.75 + span = 0.75, + decrement_dt = NULL ) } \arguments{ -\item{decrement_dt}{A data.table (or coercible) shaped like the output of +\item{decrements}{A data.table (or coercible) shaped like the output of \code{estimate_decrement_rates()}: one row per age / \code{group_cols} / \code{status_col}, with a \code{pop} (exposure) and \code{decrement_rate} column.} @@ -31,6 +32,8 @@ represents "stayed" rather than an exit. Defaults to \code{"active"}.} \item{span}{Numeric. The \code{loess()} smoothing span passed through to \code{.smooth_rate_curve()}. Defaults to \code{0.75}.} + +\item{decrement_dt}{Deprecated. Use \code{decrements} instead.} } \value{ A data.table with one row per age / \code{group_cols} / diff --git a/man/validate_column_exists.Rd b/man/validate_column_exists.Rd index f36b599..6656e2b 100644 --- a/man/validate_column_exists.Rd +++ b/man/validate_column_exists.Rd @@ -2,21 +2,21 @@ % Please edit documentation in R/zzz.R \name{validate_column_exists} \alias{validate_column_exists} -\title{Validate Column Exists in Data Table} +\title{Validate column exists in data table} \usage{ validate_column_exists(dt, colname, varname) } \arguments{ -\item{dt}{data.table to check} +\item{dt}{Data.table to check.} -\item{colname}{Character. Column name to validate} +\item{colname}{Character. Column name to validate.} -\item{varname}{Character. Variable name for error messages} +\item{varname}{Character. Variable name for error messages.} } \value{ Invisible TRUE if valid, stops with error otherwise } \description{ -Validate Column Exists in Data Table +Validate column exists in data table } \keyword{internal} diff --git a/man/validate_columns_exist.Rd b/man/validate_columns_exist.Rd index 14ec060..ed96baf 100644 --- a/man/validate_columns_exist.Rd +++ b/man/validate_columns_exist.Rd @@ -2,21 +2,21 @@ % Please edit documentation in R/zzz.R \name{validate_columns_exist} \alias{validate_columns_exist} -\title{Validate Multiple Columns Exist} +\title{Validate multiple columns exist} \usage{ validate_columns_exist(dt, colnames, varname) } \arguments{ -\item{dt}{data.table to check} +\item{dt}{Data.table to check.} -\item{colnames}{Character vector. Column names to validate} +\item{colnames}{A character vector. Column names to validate.} -\item{varname}{Character. Variable name for error messages} +\item{varname}{Character. Variable name for error messages.} } \value{ Invisible TRUE if valid, stops with error otherwise } \description{ -Validate Multiple Columns Exist +Validate multiple columns exist } \keyword{internal} diff --git a/man/validate_date_format.Rd b/man/validate_date_format.Rd index 790c5e9..ab85a1b 100644 --- a/man/validate_date_format.Rd +++ b/man/validate_date_format.Rd @@ -2,19 +2,19 @@ % Please edit documentation in R/zzz.R \name{validate_date_format} \alias{validate_date_format} -\title{Validate Date Format} +\title{Validate date format} \usage{ validate_date_format(date, varname) } \arguments{ -\item{date}{Object to validate} +\item{date}{Object to validate.} -\item{varname}{Character. Variable name for error messages} +\item{varname}{Character. Variable name for error messages.} } \value{ Invisible TRUE if valid, stops with error otherwise } \description{ -Validate Date Format +Validate date format } \keyword{internal} diff --git a/tests/testthat/test-compute_fastshare.R b/tests/testthat/test-compute_fastshare.R index 84f2c4c..99a7776 100644 --- a/tests/testthat/test-compute_fastshare.R +++ b/tests/testthat/test-compute_fastshare.R @@ -23,7 +23,7 @@ test_that("compute_fastshare computes correct long output", { macro_data = macro_dt, macro_cols = c("pop", "gdp"), cols = c("x"), - groups = "group", + group_cols = "group", fns = c("sum"), output = "long" ) @@ -60,7 +60,7 @@ test_that("compute_fastshare computes correct wide output", { macro_data = macro_dt, macro_cols = c("pop", "gdp"), cols = c("x"), - groups = "group", + group_cols = "group", fns = c("sum"), output = "wide" ) @@ -80,7 +80,7 @@ test_that("compute_fastshare works with user-defined functions", { macro_data = macro_dt, macro_cols = c("pop"), cols = "x", - groups = "group", + group_cols = "group", fns = list("mean", rng = ~ max(.x) - min(.x)), output = "long" ) @@ -99,7 +99,7 @@ test_that("compute_fastshare automatically detects join keys", { macro_data = macro_dt, macro_cols = "pop", cols = "x", - groups = "group", + group_cols = "group", fns = "sum" ) @@ -119,7 +119,7 @@ test_that("compute_fastshare errors when there are no join keys", { macro_data = macro2, macro_cols = "pop", cols = "x", - groups = "group", + group_cols = "group", fns = "sum" ), "No common grouping variables" @@ -134,7 +134,7 @@ test_that("compute_fastshare works with multiple summary columns", { macro_data = macro_dt, macro_cols = c("pop"), cols = c("x","y"), - groups = "group", + group_cols = "group", fns = c("sum") ) diff --git a/tests/testthat/test-compute_fastsummary.R b/tests/testthat/test-compute_fastsummary.R index a05fe40..e2aaeaa 100644 --- a/tests/testthat/test-compute_fastsummary.R +++ b/tests/testthat/test-compute_fastsummary.R @@ -12,7 +12,7 @@ dt <- data.table( cv_fun <- function(x) sd(x) / mean(x) test_that("compute_fastsummary returns correct structure", { - res <- compute_fastsummary(dt, cols = c("x", "y"), groups = "group", fns = c("mean", "sd")) + res <- compute_fastsummary(dt, cols = c("x", "y"), group_cols = "group", fns = c("mean", "sd")) expect_s3_class(res, "data.table") expect_true(all(c("group", "indicator", "value") %in% names(res))) }) @@ -22,12 +22,12 @@ test_that("compute_fastsummary handles long and wide outputs as expected", { long_res <- compute_fastsummary(dt, cols = c("x", "y"), - groups = "group", + group_cols = "group", output = "long", fns = def_fns) wide_res <- compute_fastsummary(dt, cols = c("x", "y"), - groups = "group", + group_cols = "group", output = "wide", fns = def_fns) @@ -38,7 +38,7 @@ test_that("compute_fastsummary handles long and wide outputs as expected", { }) test_that("compute_fastsummary returns tibble if tbl = TRUE", { - res_tbl <- compute_fastsummary(dt, cols = "x", groups = "group", tbl = TRUE, fns = c("sd", "mean")) + res_tbl <- compute_fastsummary(dt, cols = "x", group_cols = "group", tbl = TRUE, fns = c("sd", "mean")) expect_s3_class(res_tbl, "tbl_df") }) @@ -51,7 +51,7 @@ test_that("compute_fastsummary works with both default and user-defined function dt, cols = c("x", "y"), fns = list("mean", newind = ~ sd(.x) * 10 / mean(.x)), - groups = "group", + group_cols = "group", output = "long" ) @@ -77,7 +77,7 @@ test_that("compute_fastsummary works with both default and user-defined function test_that("compute_fastsummary errors on unknown function names", { expect_error( - compute_fastsummary(dt, cols = "x", fns = c("not_a_fn"), groups = "group"), + compute_fastsummary(dt, cols = "x", fns = c("not_a_fn"), group_cols = "group"), "Unknown function name" ) -}) \ No newline at end of file +}) diff --git a/tests/testthat/test-deprecated-args.R b/tests/testthat/test-deprecated-args.R new file mode 100644 index 0000000..7040ab9 --- /dev/null +++ b/tests/testthat/test-deprecated-args.R @@ -0,0 +1,107 @@ +# Renamed arguments keep working for one deprecation cycle. See NEWS.md. + +make_panel <- function() { + set.seed(1) + data.frame( + personnel_id = rep(1:50, 2), + ref_date = rep(as.Date(c("2020-01-01", "2021-01-01")), each = 50), + gender = rep(c("f", "m"), 50), + employment_status = "active", + wage = runif(100, 1000, 5000) + ) +} + +# Capture every warning so unrelated ones (data.table coercion notes, domain +# warnings) do not leak into the reporter. +with_warnings <- function(expr) { + seen <- character(0) + value <- withCallingHandlers( + expr, + warning = function(w) { + seen <<- c(seen, conditionMessage(w)) + invokeRestart("muffleWarning") + } + ) + list(value = value, warnings = seen) +} + +expect_deprecated <- function(res, arg) { + expect_true( + any(grepl(paste0("`", arg, "` is deprecated"), res$warnings, fixed = TRUE)), + info = paste0("expected a deprecation warning for `", arg, "`") + ) +} + +test_that("`group` still works and matches `group_cols`", { + data <- make_panel() + + res <- with_warnings(compute_coverage(data, group = "gender")) + expect_deprecated(res, "group") + expect_equal(res$value, compute_coverage(data, group_cols = "gender")) +}) + +test_that("`group` still works and matches `group_col`", { + data <- make_panel() + + res <- with_warnings( + compute_growth(data, group = "gender", measure_col = "wage") + ) + expect_deprecated(res, "group") + expect_equal( + res$value, + compute_growth(data, group_col = "gender", measure_col = "wage") + ) +}) + +test_that("`groups` still works and matches `group_cols`", { + data <- make_panel() + + res <- with_warnings( + compute_fastsummary(data, cols = "wage", groups = "gender") + ) + expect_deprecated(res, "groups") + expect_equal( + res$value, + with_warnings( + compute_fastsummary(data, cols = "wage", group_cols = "gender") + )$value + ) +}) + +test_that("`personnel_dt` still works and matches `personnel`", { + personnel <- data.frame( + personnel_id = rep(1:60, 2), + ref_date = rep(as.Date(c("2020-01-01", "2021-01-01")), each = 60), + age = rep(sample(25:60, 60, TRUE), 2), + employment_status = "active" + ) + args <- list( + age_col = "age", + status_col = "employment_status", + personnel_id_col = "personnel_id", + ref_date_col = "ref_date", + group_cols = NULL + ) + + res <- with_warnings( + do.call(compute_service_table, c(list(personnel_dt = personnel), args)) + ) + expect_deprecated(res, "personnel_dt") + expect_equal( + res$value, + with_warnings( + do.call(compute_service_table, c(list(personnel = personnel), args)) + )$value + ) +}) + +test_that("supplying both the old and the new name is an error", { + data <- make_panel() + + expect_error( + suppressWarnings( + compute_coverage(data, group_cols = "gender", group = "gender") + ), + "not both" + ) +}) diff --git a/tests/testthat/test-estimate_exit_rates.R b/tests/testthat/test-estimate_exit_rates.R index f4c668b..dd994d8 100644 --- a/tests/testthat/test-estimate_exit_rates.R +++ b/tests/testthat/test-estimate_exit_rates.R @@ -52,7 +52,7 @@ test_that("fewer than 2 personnel snapshots raises error", { p <- data.table(personnel_id = "P1", ref_date = as.Date("2015-09-01"), status = "active") c <- make_contract() expect_error( - estimate_exit_rates(contract_dt = c, personnel_dt = p), + estimate_exit_rates(contracts = c, personnel = p), "2 distinct ref_date" ) }) @@ -60,8 +60,8 @@ test_that("fewer than 2 personnel snapshots raises error", { test_that("data.frame inputs are accepted without error", { expect_no_error( estimate_exit_rates( - contract_dt = as.data.frame(make_contract()), - personnel_dt = as.data.frame(make_personnel()) + contracts = as.data.frame(make_contract()), + personnel = as.data.frame(make_personnel()) ) ) }) @@ -69,8 +69,8 @@ test_that("data.frame inputs are accepted without error", { test_that("ref_date extra argument is silently absorbed (no partial-match error)", { expect_no_error( estimate_exit_rates( - contract_dt = make_contract(), - personnel_dt = make_personnel(), + contracts = make_contract(), + personnel = make_personnel(), ref_date = "2015-09-01" ) ) @@ -81,8 +81,8 @@ test_that("ref_date extra argument is silently absorbed (no partial-match error) # --------------------------------------------------------------------------- test_that("ungrouped result has exactly one row with exit_rate column", { out <- estimate_exit_rates( - contract_dt = make_contract(), - personnel_dt = make_personnel(), + contracts = make_contract(), + personnel = make_personnel(), group_cols = NULL ) expect_s3_class(out, "data.table") @@ -101,8 +101,8 @@ test_that("grouped result has one row per group", { make_personnel()[, personnel_id := paste0("X", personnel_id)] )) out <- estimate_exit_rates( - contract_dt = c_dt, - personnel_dt = p_dt, + contracts = c_dt, + personnel = p_dt, group_cols = "est_id" ) expect_equal(nrow(out), 2L) @@ -112,8 +112,8 @@ test_that("grouped result has one row per group", { test_that("exit_rate is numeric and non-negative", { out <- estimate_exit_rates( - contract_dt = make_contract(), - personnel_dt = make_personnel() + contracts = make_contract(), + personnel = make_personnel() ) expect_type(out$exit_rate, "double") expect_true(all(out$exit_rate >= 0, na.rm = TRUE)) @@ -136,7 +136,7 @@ test_that("zero exits produces exit_rate of 0", { make_contract()[personnel_id == "P1"][, ref_date := as.Date("2016-09-01")], make_contract()[personnel_id == "P2"][, ref_date := as.Date("2016-09-01")] )) - out <- estimate_exit_rates(contract_dt = c, personnel_dt = p) + out <- estimate_exit_rates(contracts = c, personnel = p) expect_equal(out$exit_rate, 0) }) @@ -147,7 +147,7 @@ test_that("integer ref_date column is coerced without error", { p[, ref_date := as.integer(ref_date)] c[, ref_date := as.integer(ref_date)] expect_no_error( - estimate_exit_rates(contract_dt = c, personnel_dt = p) + estimate_exit_rates(contracts = c, personnel = p) ) }) @@ -156,7 +156,7 @@ test_that("contracts with non-active types (inactive) are excluded from stock", # Replace contract type with inactive — stock should be 0 c[, contract_type := "inactive"] p <- make_personnel() - out <- estimate_exit_rates(contract_dt = c, personnel_dt = p) + out <- estimate_exit_rates(contracts = c, personnel = p) # No active stock → exit_rate = 0 (fifelse guard) expect_equal(out$exit_rate, 0) }) @@ -170,8 +170,8 @@ test_that("group with no contract stock gets exit_rate of 0, not NA", { c[, contract_type := "inactive"] p <- make_personnel() out <- estimate_exit_rates( - contract_dt = c, - personnel_dt = p, + contracts = c, + personnel = p, group_cols = "est_id" ) expect_false(any(is.na(out$exit_rate))) diff --git a/tests/testthat/test-ggplot_point_line.R b/tests/testthat/test-ggplot_point_line.R index 688129c..0668baa 100644 --- a/tests/testthat/test-ggplot_point_line.R +++ b/tests/testthat/test-ggplot_point_line.R @@ -45,7 +45,7 @@ test_that("ggplot_point_line applies color grouping when 'group' argument is use group_var = rep(c("A", "B"), each = 3) ) - p <- ggplot_point_line(df, x = year, y = value, group = group_var) + p <- ggplot_point_line(df, x = year, y = value, group_col = group_var) mapping <- ggplot2::ggplot_build(p)$plot$mapping expect_true("colour" %in% names(mapping)) @@ -59,7 +59,7 @@ test_that("ggplot_point_line works when both group and label are specified", { group_var = rep(c("A", "B"), each = 3) ) - p <- ggplot_point_line(df, x = year, y = value, group = group_var, label = year) + p <- ggplot_point_line(df, x = year, y = value, group_col = group_var, label = year) expect_s3_class(p, "ggplot") layer_classes <- sapply(p$layers, function(l) class(l$geom)[1]) diff --git a/tests/testthat/test-qcheck_plots.R b/tests/testthat/test-qcheck_plots.R index 6e4381a..198be29 100644 --- a/tests/testthat/test-qcheck_plots.R +++ b/tests/testthat/test-qcheck_plots.R @@ -12,7 +12,7 @@ qc_data <- tibble::tibble( # ---- plot_coverage_trend ------------------------------------------------------ test_that("plot_coverage_trend returns a ggplot line trend over ref_date", { - p <- plot_coverage_trend(qc_data, group = "ref_date") + p <- plot_coverage_trend(qc_data, group_col = "ref_date") expect_s3_class(p, "ggplot") layer_geoms <- sapply(p$layers, \(l) class(l$geom)[1]) @@ -20,14 +20,14 @@ test_that("plot_coverage_trend returns a ggplot line trend over ref_date", { }) test_that("plot_coverage_trend toggle_growth adds a baseline reference line", { - p <- plot_coverage_trend(qc_data, group = "ref_date", toggle_growth = TRUE) + p <- plot_coverage_trend(qc_data, group_col = "ref_date", toggle_growth = TRUE) layer_geoms <- sapply(p$layers, \(l) class(l$geom)[1]) expect_true("GeomHline" %in% layer_geoms) }) test_that("plot_coverage_trend accepts a real grouping column", { - expect_no_error(plot_coverage_trend(qc_data, group = "paygrade")) + expect_no_error(plot_coverage_trend(qc_data, group_col = "paygrade")) }) # ---- plot_consistency_trend --------------------------------------------------- @@ -38,7 +38,7 @@ test_that("plot_consistency_trend plots record consistency over time", { p <- plot_consistency_trend( record_consistency, id_col = "personnel_id", - group = "ref_date", + group_col = "ref_date", value_col = NULL, type_plot = "record" ) @@ -56,7 +56,7 @@ test_that("plot_consistency_trend plots value consistency over time", { p <- plot_consistency_trend( value_consistency, id_col = "personnel_id", - group = "ref_date", + group_col = "ref_date", value_col = "birth_date", type_plot = "value" ) @@ -71,7 +71,7 @@ test_that("plot_consistency_trend rejects an invalid type_plot", { plot_consistency_trend( record_consistency, id_col = "personnel_id", - group = "ref_date", + group_col = "ref_date", value_col = NULL, type_plot = "not_a_type" ), @@ -99,20 +99,20 @@ test_that("plot_coverage_bar tiers coverage into Low/Medium/High", { # ---- plot_coverage_heatmap ------------------------------------------------------ test_that("plot_coverage_heatmap returns a plotly heatmap", { - p <- plot_coverage_heatmap(qc_data, group = "ref_date") + p <- plot_coverage_heatmap(qc_data, group_col = "ref_date") expect_s3_class(p, "plotly") }) test_that("plot_coverage_heatmap treats NULL and 'none' group as ref_date", { - expect_no_error(plot_coverage_heatmap(qc_data, group = NULL)) - expect_no_error(plot_coverage_heatmap(qc_data, group = "none")) + expect_no_error(plot_coverage_heatmap(qc_data, group_col = NULL)) + expect_no_error(plot_coverage_heatmap(qc_data, group_col = "none")) }) # ---- plot_consistency_heatmap --------------------------------------------------- test_that("plot_consistency_heatmap returns a plotly heatmap", { - p <- plot_consistency_heatmap(qc_data, id_col = "personnel_id", group = "ref_date") + p <- plot_consistency_heatmap(qc_data, id_col = "personnel_id", group_cols = "ref_date") expect_s3_class(p, "plotly") }) diff --git a/tests/testthat/test-summary_statistics.R b/tests/testthat/test-summary_statistics.R index 10549a6..9c95625 100644 --- a/tests/testthat/test-summary_statistics.R +++ b/tests/testthat/test-summary_statistics.R @@ -92,7 +92,7 @@ test_that("compute_time_trend counts rows per period when measure_col is NULL", group = c("A", "A", "A") ) - out <- compute_time_trend(df, group = "ref_date") + out <- compute_time_trend(df, group_col = "ref_date") expect_equal(out$value, c(2, 1)) }) @@ -104,7 +104,7 @@ test_that("compute_time_trend sums measure_col per group and ref_date when suppl wage = c(10, 20, 5) ) - out <- compute_time_trend(df, group = "group", measure_col = "wage") + out <- compute_time_trend(df, group_col = "group", measure_col = "wage") expect_equal(sum(out$value), 35) }) @@ -117,7 +117,7 @@ test_that("rescale_baseline indexes the first ungrouped value to 100", { value = c(50, 75, 100) ) - out <- rescale_baseline(df, group = "ref_date") + out <- rescale_baseline(df, group_col = "ref_date") expect_equal(out$value[1], 100) expect_equal(out$value[2], 150) @@ -130,7 +130,7 @@ test_that("rescale_baseline indexes within each group separately", { value = c(10, 20, 5, 15) ) - out <- rescale_baseline(df, group = "group") + out <- rescale_baseline(df, group_col = "group") expect_equal(out$value[out$group == "A"], c(100, 200)) expect_equal(out$value[out$group == "B"], c(100, 300)) @@ -145,7 +145,7 @@ test_that("compute_cross_section filters to the latest ref_date per group and su wage = c(10, 20, 5, 15) ) - out <- compute_cross_section(df, group = "group", measure_col = "wage") + out <- compute_cross_section(df, group_cols = "group", measure_col = "wage") expect_equal(out$value[out$group == "A"], 20) expect_equal(out$value[out$group == "B"], 15) @@ -157,7 +157,7 @@ test_that("compute_cross_section counts rows when measure_col is NULL", { ref_date = as.Date(c("2020-01-01", "2020-02-01", "2020-02-01", "2020-01-01")) ) - out <- compute_cross_section(df, group = "group") + out <- compute_cross_section(df, group_cols = "group") expect_equal(out$value[out$group == "A"], 2) expect_equal(out$value[out$group == "B"], 1) @@ -172,7 +172,7 @@ test_that("compute_growth computes percentage change from first to last ref_date wage = c(100, 110, 150) ) - out <- compute_growth(df, group = "group", measure_col = "wage") + out <- compute_growth(df, group_col = "group", measure_col = "wage") expect_equal(out$growth_rate, 50) }) @@ -183,7 +183,7 @@ test_that("compute_growth counts rows per group when measure_col is NULL", { ref_date = as.Date(c("2020-01-01", "2020-01-01", "2020-03-01", "2020-03-01")) ) # first period: 2 rows, last period: 2 rows -> 0% growth - out <- compute_growth(df, group = "group") + out <- compute_growth(df, group_col = "group") expect_equal(out$growth_rate, 0) -}) \ No newline at end of file +}) From 2ac32290b8d64d47d4cad2ee9eb19875ae4e4ab5 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:41:25 -0400 Subject: [PATCH 19/23] update articles for the renamed arguments Rewrite call sites in the vignettes and the pkgdown assessment article off parse-tree positions, and update the prose that names the `group` argument. ggplot_point_line() and ggplot_segment() calls in the assessment article passed bare symbols to `group`, which has no deprecation shim, so those had to change. Several plot_trend() calls were reaching `group_col` only through R's partial argument matching; they now name it in full. All four vignettes render, and the rendered text is identical to the pre-change output apart from the argument names shown in code. Co-Authored-By: Claude Opus 5 --- .../articles/04-standard_hrmis_assessment.Rmd | 40 +++++++++---------- vignettes/articles/03-analytics.Rmd | 26 ++++++------ vignettes/articles/govhr.Rmd | 6 +-- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/inst/pkgdown/assets/articles/04-standard_hrmis_assessment.Rmd b/inst/pkgdown/assets/articles/04-standard_hrmis_assessment.Rmd index 8528a97..8c8bc79 100644 --- a/inst/pkgdown/assets/articles/04-standard_hrmis_assessment.Rmd +++ b/inst/pkgdown/assets/articles/04-standard_hrmis_assessment.Rmd @@ -140,7 +140,7 @@ wagebill_shares_dt <- bra_wagebill |> compute_fastshare( cols = wage_vars, macro_cols = lcu_vars, - groups = c("country_code", "year"), + group_cols = c("country_code", "year"), fns = "sum", output = "long" ) @@ -191,7 +191,7 @@ bra_wagebill |> as.data.table() |> compute_fastsummary( cols = wage_vars, - groups = c("occupation_native", "year"), + group_cols = c("occupation_native", "year"), fns = "sum", output = "long" ) |> @@ -323,7 +323,7 @@ govhr::wwbi |> ggplot_point_line( year, value, - group = name + group_col = name ) + scale_color_few( labels = c("Formal Employment", "Paid Employment", "Total Employment"), @@ -347,7 +347,7 @@ contract_df |> ) |> compute_fastsummary( cols = "personnel_id", - groups = c("occupation_native", "year"), + group_cols = c("occupation_native", "year"), fns = list(n_distinct = ~n_distinct(.x)), output = "long" ) |> @@ -380,7 +380,7 @@ contract_df |> personnel_df |> compute_fastsummary( cols = "personnel_id", - groups = c("educat7", "year"), + group_cols = c("educat7", "year"), fns = list(n_distinct = ~n_distinct(.x)), output = "long" ) |> @@ -614,7 +614,7 @@ wwbi |> ggplot_point_line( year, value, - group = name + group_col = name ) ``` @@ -647,7 +647,7 @@ contract_df |> ) |> compute_fastsummary( cols = "base_salary_lcu", - groups = c("year"), + group_cols = c("year"), fns = c("cp_ratio"), output = "wide" ) |> @@ -672,13 +672,13 @@ salary_dispersion <- contract_df |> mutate(year = lubridate::year(ref_date) |> as.integer()) |> compute_fastsummary( cols = "base_salary_ppp", - groups = c("occupation_isconame", "year"), + group_cols = c("occupation_isconame", "year"), fns = "median", output = "long" ) |> ggplot_segment( col = value, - group = year + group_col = year ) + coord_flip() + labs( @@ -704,7 +704,7 @@ salary_dispersion_occupation <- contract_df |> salary_dispersion_occupation |> ggplot_segment( col = base_salary_ppp, - group = occupation_native + group_col = occupation_native ) + scale_x_continuous(labels = scales::label_comma()) + labs( @@ -729,7 +729,7 @@ contract_df |> ) |> compute_fastsummary( cols = "base_salary_lcu", - groups = c("gender", "year"), + group_cols = c("gender", "year"), fns = "median" ) |> filter( @@ -831,7 +831,7 @@ contract_df |> ggplot_point_line( year, median_base_salary_ppp, - group = paygrade + group_col = paygrade ) + scale_color_few( name = "Paygrade" @@ -897,7 +897,7 @@ contract_df |> mutate(year = lubridate::year(ref_date) |> as.integer()) |> compute_fastsummary( cols = c("base_salary_ppp", "allowance_ppp"), - groups = c("paygrade", "year"), + group_cols = c("paygrade", "year"), fns = "mean", output = "wide" ) |> @@ -910,7 +910,7 @@ contract_df |> ggplot_point_line( year, share_allowance, - group = paygrade + group_col = paygrade ) + facet_wrap( vars(paygrade) @@ -947,7 +947,7 @@ contract_annual_growth <- contract_df |> mutate(year = lubridate::year(ref_date) |> as.integer()) |> compute_fastsummary( cols = "base_salary_ppp", - groups = c("year"), + group_cols = c("year"), fns = "median", output = "wide" ) |> @@ -1010,7 +1010,7 @@ contract_growth |> ggplot_point_line( year, value, - group = Indicator + group_col = Indicator ) + labs( x = "Year", @@ -1089,7 +1089,7 @@ wwbi |> ggplot_point_line( year, value, - group = name + group_col = name ) ``` @@ -1116,7 +1116,7 @@ contract_growth |> ggplot_point_line( year, value, - group = Indicator + group_col = Indicator ) + labs( x = "Year", @@ -1150,7 +1150,7 @@ personnel_df |> ggplot_point_line( year, value, - group = name + group_col = name ) ``` @@ -1184,4 +1184,4 @@ contract_growth |> ```{r} print("Enterprise surveys coverage is limited.") -``` \ No newline at end of file +``` diff --git a/vignettes/articles/03-analytics.Rmd b/vignettes/articles/03-analytics.Rmd index eb4583e..1cb5eb1 100644 --- a/vignettes/articles/03-analytics.Rmd +++ b/vignettes/articles/03-analytics.Rmd @@ -27,22 +27,22 @@ The function `compute_time_trend` and its companion plotting function `plot_tren # total headcount by reference date headcount_trend <- compute_time_trend( govhr::bra_hrmis_personnel, - group = "ref_date" + group_col = "ref_date" ) -plot_trend(headcount_trend, group = "ref_date") +plot_trend(headcount_trend, group_col = "ref_date") ``` -You might also be curious about how time trends for headcount varies across groups, such as gender. Modifying the `group` argument makes that possible. Note that implicitly the function will still take the reference date into account. +You might also be curious about how time trends for headcount varies across groups, such as gender. Modifying the `group_col` argument makes that possible. Note that implicitly the function will still take the reference date into account. ```{r} # total headcount by reference date and gender headcount_trend_gender <- compute_time_trend( govhr::bra_hrmis_personnel, - group = c("gender") + group_col = c("gender") ) -plot_trend(headcount_trend_gender, group = c("gender")) +plot_trend(headcount_trend_gender, group_col = c("gender")) ``` ## Movement @@ -61,7 +61,7 @@ plot_movement( movement_hire_count, movement_type = "hire", measurement_type = "count", - group = "ref_date" + group_cols = "ref_date" ) ``` Again, if you are interested in how these flows vary across groups, you can modify the `group_cols` argument to include additional grouping variables. @@ -78,7 +78,7 @@ plot_movement( movement_hire_gender_count, movement_type = "hire", measurement_type = "count", - group = "gender" + group_cols = "gender" ) ``` @@ -90,25 +90,25 @@ Most of the analysis presented in the workforce analytics section can be replica # total wagebill by reference date wagebill_trend <- compute_time_trend( govhr::bra_hrmis_contract, - group = "ref_date", + group_col = "ref_date", measure_col = "gross_salary_lcu" ) -plot_trend(wagebill_trend, group = "ref_date") +plot_trend(wagebill_trend, group_col = "ref_date") ``` -A similar differentiation by group is possible, using the same grammar for the `group` argument. +A similar differentiation by group is possible, using the same grammar for the `group_col` argument. ```{r} # total wagebill by reference date wagebill_paygrade_trend <- govhr::bra_hrmis_contract |> filter(!is.na(paygrade)) |> compute_time_trend( - group = "paygrade", + group_col = "paygrade", measure_col = "gross_salary_lcu" ) -plot_trend(wagebill_paygrade_trend, group = "paygrade") +plot_trend(wagebill_paygrade_trend, group_col = "paygrade") ``` ## Equity @@ -126,4 +126,4 @@ compression_ratio <- compute_compression_ratio( ) plot_compression_ratio(compression_ratio) -``` \ No newline at end of file +``` diff --git a/vignettes/articles/govhr.Rmd b/vignettes/articles/govhr.Rmd index d2f966d..1a73206 100644 --- a/vignettes/articles/govhr.Rmd +++ b/vignettes/articles/govhr.Rmd @@ -62,7 +62,7 @@ Once the data is treated, you might want to assess the coverage of the data. A s # assess coverage (share of non-missing values) by employment status compute_coverage( personnel_clean, - group = "employment_status" + group_cols = "employment_status" ) ``` @@ -91,6 +91,6 @@ Another government may want to know whether there was an increase in the number # growth in headcount from the first to the last reference date, by service type compute_growth( bra_hrmis_personnel, - group = "educat7" + group_col = "educat7" ) -``` \ No newline at end of file +``` From 5c2f1d14e060492034ea547654aa76f87a22f7d3 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:41:31 -0400 Subject: [PATCH 20/23] bump to 0.4.0 and document the changes Co-Authored-By: Claude Opus 5 --- DESCRIPTION | 2 +- NEWS.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8f76f95..21efb21 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: govhr Type: Package Title: Clean and analyze data that informs human resource management -Version: 0.3.5 +Version: 0.4.0 Description: This package is a toolkit developed by the World Bank. It cleans, harmonizes, and analyzes human resource data with a standardized methodology. License: MIT + file LICENSE Encoding: UTF-8 diff --git a/NEWS.md b/NEWS.md index 02c9687..a245c5c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,38 @@ +# govhr 0.4.0 + +Standardises argument names and fixes documentation rendering. Renamed +arguments still work but warn; they will be removed in a future release. + +## Breaking changes + +- The data argument is now `data` everywhere. Only functions that also take + `...` keep `.data` (`compute_baseline_index()`, `fastprop()`, + `ggplot_point_line()`). +- Grouping arguments now carry their arity: `group_col` (one column) or + `group_cols` (a vector). `group` and `groups` are deprecated. +- Arguments no longer name a storage type: `personnel_dt` becomes `personnel`, + `contract_dt`/`contract_df` become `contracts`, `event_dt` becomes `events`, + `decrement_dt` becomes `decrements`, `est_dt` becomes `establishments`. All + already accepted a plain `data.frame` or tibble. +- `group` on `ggplot_point_line()`, `ggplot_segment()` and `sample_group()` was + renamed with no deprecation warning: those arguments are evaluated lazily, so + a shim cannot forward them. + +## Documentation + +- Roxygen markdown is enabled, so backticks, bullet lists and `*emphasis*` now + render as code, lists and italics rather than literal characters. +- Titles use sentence case; `@return` is now `@returns`. +- Fixed six `@param` entries that documented the wrong arity, including + `group_cols` described as a single string on `compute_workforce_movement()` + and `group_col` as a vector on `compute_density()`. + +## Internal + +- Removed invalid `@importFrom govhr` self-imports and several dead import + tags. Dropping the unused `validate::summary` import also stops `validate` + masking `base::summary` in the package namespace. + # govhr 0.3.5 This release: - Ports data transformation and plotting functions from govhrapp to govhr. From 4584de557482f54bb1c7f190b54fafe580dd2927 Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:51:15 -0400 Subject: [PATCH 21/23] match release notes to the existing NEWS style Co-Authored-By: Claude Opus 5 --- NEWS.md | 40 +++++++--------------------------------- 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/NEWS.md b/NEWS.md index a245c5c..34c48e5 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,37 +1,11 @@ # govhr 0.4.0 - -Standardises argument names and fixes documentation rendering. Renamed -arguments still work but warn; they will be removed in a future release. - -## Breaking changes - -- The data argument is now `data` everywhere. Only functions that also take - `...` keep `.data` (`compute_baseline_index()`, `fastprop()`, - `ggplot_point_line()`). -- Grouping arguments now carry their arity: `group_col` (one column) or - `group_cols` (a vector). `group` and `groups` are deprecated. -- Arguments no longer name a storage type: `personnel_dt` becomes `personnel`, - `contract_dt`/`contract_df` become `contracts`, `event_dt` becomes `events`, - `decrement_dt` becomes `decrements`, `est_dt` becomes `establishments`. All - already accepted a plain `data.frame` or tibble. -- `group` on `ggplot_point_line()`, `ggplot_segment()` and `sample_group()` was - renamed with no deprecation warning: those arguments are evaluated lazily, so - a shim cannot forward them. - -## Documentation - -- Roxygen markdown is enabled, so backticks, bullet lists and `*emphasis*` now - render as code, lists and italics rather than literal characters. -- Titles use sentence case; `@return` is now `@returns`. -- Fixed six `@param` entries that documented the wrong arity, including - `group_cols` described as a single string on `compute_workforce_movement()` - and `group_col` as a vector on `compute_density()`. - -## Internal - -- Removed invalid `@importFrom govhr` self-imports and several dead import - tags. Dropping the unused `validate::summary` import also stops `validate` - masking `base::summary` in the package namespace. +This release: +- Renames the data argument to `data`, keeping `.data` only for functions that take `...`. +- Renames grouping arguments to `group_col` or `group_cols` to match their arity, deprecating `group` and `groups`. +- Drops storage-type suffixes from argument names, such as `personnel_dt` to `personnel` and `contract_dt` to `contracts`. +- Warns on deprecated argument names, except in `ggplot_point_line`, `ggplot_segment` and `sample_group`, where they are removed outright. +- Enables roxygen markdown, so code, lists and emphasis render correctly in the help pages. +- Fixes invalid and unused imports, including one that masked `base::summary`. # govhr 0.3.5 This release: From 4aab8aedbac9540154fcfb6f606a0313b554de7c Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 21:52:26 -0400 Subject: [PATCH 22/23] redact news --- NEWS.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index 34c48e5..7124c24 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,11 +1,9 @@ # govhr 0.4.0 This release: -- Renames the data argument to `data`, keeping `.data` only for functions that take `...`. -- Renames grouping arguments to `group_col` or `group_cols` to match their arity, deprecating `group` and `groups`. -- Drops storage-type suffixes from argument names, such as `personnel_dt` to `personnel` and `contract_dt` to `contracts`. -- Warns on deprecated argument names, except in `ggplot_point_line`, `ggplot_segment` and `sample_group`, where they are removed outright. -- Enables roxygen markdown, so code, lists and emphasis render correctly in the help pages. -- Fixes invalid and unused imports, including one that masked `base::summary`. +- Renames the function arguments, ensuring consistency. +- Warns on deprecated argument names, to be removed in the next relase. +- Fixes documentation and their rendering. +- Fixes invalid and unused imports. # govhr 0.3.5 This release: From fe6496d04cb9ac0a4f3dcf2f4a08d1a09e83066e Mon Sep 17 00:00:00 2001 From: Galileu Kim Date: Wed, 16 Sep 2026 22:07:23 -0400 Subject: [PATCH 23/23] append news --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 7124c24..a50188a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # govhr 0.4.0 This release: +- Introduces novel wage bill modelling and demographic analysis. - Renames the function arguments, ensuring consistency. - Warns on deprecated argument names, to be removed in the next relase. - Fixes documentation and their rendering.

    pC{0_IXh{wxFL@8`fQGuZhg#h*IeK--4a+5 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 VE5q@=R65U~)Y!$^YyE)2{{!wI+xY+h diff --git a/data/bra_hrmis_contract.rda b/data/bra_hrmis_contract.rda index 1a1043f4cdcd17c87a87ec4dfb4f6eda213ab572..4cad8646c0f20f6015750fbea4a4362176c2ae15 100644 GIT binary patch delta 222834 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 z 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%0A3XC2 znS^<7Z;?J1_7w8JN-Q%sc=2!lOcX?*9vbKAqLBL1Q%$Q3JuVs>%byl?Rw#iEWc^$u zXzfYVr4m|?kCefU6&3||R#<;Vjoh{0xWmv@1xF=?j-iSGrKwAT@XI;=*2k=>cE$_p zgGXjr3}&r-K55&H@|3ING$b-zUsAt{$WaUfWcY-i{xhJ}PsiEFN=52p+n!SG@y6jl=Zul)6 zTiZWeD!J2!3})?n8io4A4a>w^--86?i+UeyA_KB}{=9(j)qd}U*KU|waa{M_xTtl) zCH>P9+-_!t>Yq~mVwjoRWczjESC4mq#Yj-GyRD@-&D)q0GlgWFzbJMWD_ z_hNObIRkVi7#3p10>*!ni7_TK6?-4b^Sn5=3}M3=o7svktST=r=y2m%hnR(qRC|kN zdw(9R@{WIuGj@F-ug!v-+$suqR-~~9M+zdcHnC`k+BJMCzCG#czSCN{tIbvQ)p@Nc zSlaVl-LB2IPL}yAk!==}QW3V2v1;Y7k8xz$Od2cAd`k0gRm6YsJfp7diB~v+ zwmVVADCOgou7t@C3&@?&ohzsX5flvVlV_)qbPEZy8WI-tuTKNs?bP09a*_zB;_2zn zWJ2Vzs)HGB%@T%stdemustRS~7ok=nOLfxrOFU%_*H7~erSdcu=}h-sjL#Zm31Xg# zA|9c2_GI<#JH#b>3Gm#*zUqjkf%6 z#BRYPAJ7K(nqZU6fWitCq<5XbD0}JYvDGlG<_e0X6HvNhZM~Zf(Uw zMyWPLnlz(n0yZE=v}=Tku#nh-47dz}ax~mj{?B}&)XPLfL4|^$RA;<+#-%Iz!hJ>C zwI&2U>*@>s4$Sshd0ZTytA(S>#^HGU!OR-qRW*?nRoBqTMuV+igPD~lnlxK$YnszN zc&ED8rYwJKWRjMxAfafbhDg|920)k@+BV3dUJ@eTpb=UHRREAl>@l+(&5)ae8~nc~ z+VXyRIjqc)HW+{klneDif85v+L_OMp|FFCC2m{#)eU!HdKi-m*@57c(_QOaluD zcBhqb_kD)vzA#O~hZW?8qyD?@2aG2yMC6FPX$!fa=ObUD&(OUmv;A?}5G3s)DoNOq z0XqpHROaAu5-ECwyce6ALD(7BBfz|iASq;wfA`xDFSFn60>ty8M$C(`{smNs(hr~} z*p`1lJ@7p6w~cEbx%rJ(`ThUy>&v`UwS#?XZ(G`4g>+5)pC|OfYV!{DJ9*yDBP2YZ zTe}ZsoFMB&26dh-*n(JUFSoS-VwGH)EH0dA2)Pxu7#C!Xax|&o;WvvBT~6h7vtl9kCwV;T?AN z36lkp!ib0#d~oU^0}XOj2MS&k7bVU9!uAX+Hc>bOM$FGDO<*zHb&1vbwLJ<7J0*WE z1yul)jsQD!%V){=kTNa#K$7wopipPT;-W5a4bRSR(Bl|W`SQ#-awhRGfO zgC}V8CytHfiY`{e5vmwrOw42bVOD?pw%XXJTD*VXNX8z{D;s-=ZTxW~LU)aoL6&Jo z{#jv_Jnv)c!p8UnDKGnK^4WmF)k4@cnS-&t&n>y?!duYQVuPPoSHMws_I66Vm72+L zNK^T)E^N8au;=mLacvPfTNBZM|K2nGLYDnSpQnKG8r`|i+cH)_YogJ#j6r`@9H+lZ zvYFTliuJnzSN=A@z521@H)}n^gn`e-#l>%;uJFDQllyyqgGY9F1x_9Np z;HJ%vVtG%xhFMCo7FWrxt0lvW7s2*^C!ba$%!JD!+E7dini^}JG5h|s=L`|57F!1( zWqIyUaSdkyvWLQeSq8QjR&ak2I8H=Zn<(NZ9=K+p$sBwROuC+BK%yh*lTd_42uyBG z$oT*)t5sfc4;MBPeQh`!oi3LlIDY@&zP9Oew{?4ec5-VjSR0d<;*+%$m}KO*Zv$jR z+o=%&^s?qFC&D?4%%HELf*gWq_wlOqwY=0F?-u!R%mG!007tn*D5!rA`O3OOHoea` zUr!bL(IgN_*NxR_#C~5M=ehc8x0^lB3ZC6hxW^X4{hVsdX|}w#$3y3?KAtB{*1^N` zc_g*9%OWUJA!G2^+Zw5*(u}qi*rrF*D;wTZ!}^?pu8b@1t1x0v&EGQzavHk8IiNs- zW3v(HnJCnFq(mp!ft!D7m_RX-2pNnqk5+_%R5`y3>32Tg(PbLC>j~8*|t^PNzKXK+y@Z_;y{Ca{8=R)bK|8(KeYESvAaCWAV_O?c}>j-AsqB%k#Aw!e* z8@ff86WpJj93_AI9$+D>8AvJAcq2*vb59-@3y)Njp30wF=~zqgcq9L9f}-wGBEI%Y zSr>T`PWYYmGBhSy<9FHMrBWmwBgrhtA7P3zKlYQu{4tfS&O2)%yHz+o(>CThYdDEax1)yhgsl`DUclXy{a{N?|1iJ18p*QbS( zD7L_(k(ybNXDG+?E^ul}1XY=mBljJC2m3A^kMrRkIT^$>sjT(jC%8Gi^sQb=wAsc3 zJaC$byGB1;op1E?nq>J4ee_|X4-+c7N5uig8L`*C#qDU=-^^{K*W+>Aln7Sj{hme0 zg}CemMLT~#JAS1Odv=cvDdtt3swr=>Qr|S}cvM#1R;C%9|( zRNCsz^066|s4R9r4hs$GdT%)OCK0@wEUv%8;au~yhi7p#oY@1tT-c+*QH=Z+PjTsv zo9X^TqQqmf8P1+QYkN4cOsP z_Vuk5OvzIUU%_JQ^!{nMb^am&a;PdiM%F+}5&U-=8_`2-9UE}*HGGXjNq?WL9Kw&IX-^i)H=pd?v2qb*vgNLF$9X9Z z*5|7#jUiEQ=MgNuNZ#pUdR^H5+Af;&XoqJG^?f;&pg|`{Pe4>$Eo`gaGWLI!my79B zHeCpY>#@x9UclvtpuO&2Xw;4qDdlmFtMO;y+AFiod1Lk1n<7()AqY`XVgY-Tc5dhtSarjtyK|}bt zZ7q|S*7Vx0H2j#x_wM~a=lFk}d?)sHYea-09!HVx{Y6+q^tB@z6AvGMKRYAdE}kT~ ztL4Q=&Un5V@Vl?r2Z;b(WJ5`Tyx8_U)UJbP>w?Cv#;(9&3lhrF3F^@MMogqeOQmdQ zL7hZG9-27at2gR0{kVmzU;&&}2t+W!8|C5m$MXNr<+Ijw@&8~tmOOuK6LPPj_9C}i zZj&v5cdK$Af~Btf(@gtBs()nVy%*qT9*^xTU+KTsV_5-(38u8u`MrO=GG`|6D!E}H zt~U|tH^tZFTzHl#JGBRT#}2@ZpXBF8Vp3ft2-`abOe;a9Q2ZRjXEk51*Z;7ea!Ve} z2pjs`L}f@Klpl0OEh~R&{=v>q`ERjN=kgx8@jJQUAo4dk?tTlT?{?jg$oBjpA)ZHl zwTbL-bU3aCN5AMZoi6@gnx{DJZUY@pc=PCb-wf*e0mG~An^~V}*+~K80K@_J^1#QeZNH~ok*AXB}espB9IS9&654qB; zpV7!cD2^F~ARLWlef8yKwF+Q{1QKMdd)H2xW7G#$1x*LKgmG z@R^#K1PgZ^GqF}?h)d^kU*8{Zwa6EM=ej>0rkWpFN`{K$qasQ$6PDQ1c#}0o#^h$a zFBX}d;cF(O$VrM7_Jo4Kl!A1fhKr$(dxdr*@mMYda@^v?L_`oHL&G~Pw^7mPBW=qsLC_rifEHRtw{p~ORz0RCYtYZr2I1F zw-kRv6T?4D+0XcAAsRSF-1wsGOz80=hSbcUD2{0=q4a|#Mp$UXcmtA5V*hiV{tcbx zS%=QMA*3W+R(MD9N245gjDO9`3zM-tc`>_r<%weO zV6R-Q#SIT15K8$_$BuX9prP0op>vk_Mqwk>!2EWP=A83E*+x9s1 zv3wc(?^Ro$vx%%J@?7*nY_>4bOecgWQDC)-Fl-qCN<+O+5xc5m2faL?fOsQb?rS=E zU_@BbHDMy?fu)y&!v^c%- z>YK=cAtHBibky-)K-m{oV*-DOGt@2;#zuT({xddzD)QAF^^tVM2y}s}a0m`>;dY&G zOVcalbvzSB+f1R$$}8HPTPXqR$coqb7XNTGr=Vkk(!Oi>hw5PO=L7utV5mj)=VQhj^s z!=mGUhCVK<`(yUYvcq*NIZt7J%CO3d61&JB?HfEc8-&h#UG4jq_Jd%nIMPhEBI!lp z427OuGUAI{Gc;VHS}4aV-?(KwGW0{fnJiKSsFTG>Nf~`fr?;$_Tk9}Ja2*)4zCCJ_+>7KbwrhUyi+GanL;kbtQ7Qy69XTQkdkt3y#!XH1Ad zCOUwG`jFV9f%7Tlj*GN6#P|O2{g2(erzvR+1YV zafoV2pISZDRS{n0KyX^^a`_Q-c@_1@6eS$EI&^rUkg`3d-2kkvH$nM-})QhQ`F|*j71@( zu`xGTB)fkt>J4FlnjBV1F4b{^$T5>eM~E9~|{=G8Sgs`c8Pj*ktRM>qB2k5JNy!2v0M_ zdvlpdC{#99OATqJ#5bKEN2>OkPJ@JIf$+$5#72Lh>Pn#~AlQTv6QDv57$|anXeYrk zef^K3OG7M~WA$vz>gM#(5=c`)t-3sr zq9)wg*LHs{H?1*Wk5O7P_^AKYr-i2MGv!dV9r^cCD?Q}r)eo(C{jvUVWEQ%Z5}syr3;T{lnn`ER z6)ri?UkTkfMY0@=$fI}1%3-d7M_{fo?V_uX#E+RfC|>8Ja)f_gn0ED7B}vFOd4puQp?YAkSMYp9se~qv zdH6D#h?vTxk!4zbLx-2}E@>O}bteFH@+GqqQq+svtmPy+ zoKax2!?j5g7GZA$*AQ*;v3=ZF$k8n^$5iq|v4TKR@E!4DNaqhfH^%;c1J9mBQp11b zr)tB)oi5XsT5?4n{os2rh*#m;Ir_$`g)tv+^W}jZg3qOf@p^4tJFh(=r%_c`p~u_* z^y2yIuB<$N!8++lt6XU&wBRLP9)oIM8v2Uv3D4*L%3#Cm{TRdBXgkMaqJnlSXF}X{ zC7MnOmr(ilTSkv7^Nk1UTIOa?b&-FYXw04!ELIvQoYNUCaiAZ9J|Pj}=F zk>90+!F-hQl_zcIJaD>FmLZknF?cztH-?2-i==o~(rvhTuQgrT(j@0sF0qt_{AzwK zYfUTNs>oV%Hjw3Umd@s#;*@@Mxo_$ZshQ@d2bp8e>gifwsn``}{mFCWuTFpE#7|{H z^HFs8o4SXR^M%$i09xTFRr<@hlgYauZA*WnVKeeA?TG#bS2fI*vgA^bQ+JrF#Cj@~ zb$XHLaEGo4p*Ftb05wh&#*9Z=ln7OsiK=K^Yj%SF}Mb0oK%H zA6aOaM(_LVy?XQdc-^v}xv@Bw4hB;un+@2NAjEnA|ww8bDDG64vvMFjQ z1d$08{@Ja3d#n0p*0^f=c65xg??D29C*YFT*h3}}r@5NxXuX{`77hQvP4X`e~ zc)#m#E|UNBM*LpdAY8~oNU`&{8!xTbVAs0d_j8!mwW$sMo3T#cxjVe(9_tO%35;`@ z(;Pa8f@VC9+QV08<3I;N06i3P&W+*Hn)51E-v-G+gDU(_dkDQ*nWHW`Fk(VrR6g8{Y^RoTc{%A)S4{CTPVn5&jV$qE{23EU{C`V zbhii?yb?NP%fC^CU7>-%U@-VB>7qT6A|fajC?VmD7DkB~H^9R#9~Xu1!(oxe)MX5R zp6*-Or?J!<<`KVxbrc6vLRUmJIoTA%*HMg3n8H1IT$g_qQL!@eJmI4bFqPyL3Q6@- z!n*2CB^rPofO?B8(m{GkMtb~EH^&PpNFgEtT^>H3JnDxM4t9*DH$lCLk=6fyt~YIw zzp{2}D?O}={f|qngYatMLxI5ZSRNCX;dvZKz1@5NzUR_<>+&ERGmFf7(VUji!L5gx zZAT-o@nC->CV`eU*L=S++CWECzBT4Dv7+W&DEEtTPt^;vQgbaL(a}ZD`6N=O6F81BGT}|drBafE`8{b>w;=(S;R+EhA1rpa1;Z%+Oh+p#MnnV+ zc%pyA6~~I&2ph3(aM9rkWGKB%(0ebCM$ei1qiX1ZF9Ae_*J1k~4S@gUT`4ymBGWD5 zb~d9Z>V@I`{=r)AOHQWTJ>`|GAg`f$XnWDLq@)^B2O;a!m`=LQ#Blo8-^XVu%H7_p zI?Ce=AeLgRmY18MlJ5BWwW(&N;UN=>+=+jkGKq>C=9dY02gt%@)GUySYF^q2%CsZd z0}52KA|Q%UhwHCnn0y&Ez(bNS*i^(6`>lQ`eQyv#K`)qwqn&K4(FsJ7v#KKKp0e6= zbReB-3CoH?(|`VnADpO8EyBP8T{ zmI7afZ>OP!Q0a5^rzhbEB8MyfX7hi4*ZQNrKhNY?*_#uzIn|zrk@lMoF`@y6Slj2g zU;IwN7nFp;FklaMA@|u6QQS6Vrt#|Z$Ozf!SM}w56w)~b-Z$@dA4aJp|grW;k)^`Ta?O_0y%19yVn!4M=U{8Ojlk~Dr%JfVIPkn#p7$33Ye!jb( zn62FcQ<^b|2hI5SV+nXuM4LO;ofA0AfTk7*N>F0TmS8FZlwcG@G- zBL?o@LMgiIt^JPM#h1hK6WWbe-Qk~B9wA*$%iD^EHZL}#U3smh<#iA;onBrHX$nY1 z3z*yJ(OE}zk&k(&;(vb`QZV?ss4n=lobPJ7KP}xue>)94_x9>zl-H?-CWr`~DkJrtQ1PXDxPl9YqOOz6aFL|H`wjJ-~nBZuo?Iw zFAUz4UPcsflreP+R`X*?x2=`Gs(SBlf7coOue$q3f+%ZXNT5g~ARe+>>1>w9wQ{QE zx8&P&-fFqGmu#~4S7xd2dfsX%wvgD2SK?acuQk(C-D>8_Y6>c(u|~AOE7|a!wTEVN(sSD48d5bpiVMS6EZszP zM<})1Vl;x_wzhLUswebR_C4D8S-i`lT^Y4|T(i}yO6h;bro3ZC!o-?OC0e94oYmhu zw3iOP9Emf{)OSj_z^0*S7Z9;kYgn)f0(LI{rK9&de=DXi81?#3g|7qbEPZZ28AhlH z55oAnH7Cz1N8qq8{Z5agtFipid)Q!M2b^TQnl2Ps2>>Kk;2w%10z8Po;H2c#7f5y% zEX71RLDm8%tLqa1blv3z#NYH_AzVVrP@t-Wk z6_R3*6MRC=Wt_QUA_lm3zYd@}RTU2;WgXE~4FcCgs`e)1yW+6kIEL8;(yb>?#V(@2 zg`yu*U$Qj!1+I^CffL@;kvjbBHoG{6zSDz|%CCQZtSZxnP=!HZ3z>K ztyr6Wi-9Z-A+N#bPGf<5{1JBX^EovNG7Mvsfw{SPQ;;CELj4TpaTw8{im4w`%hopl zOF*>0FkoEaS+y!;KJuuaj`6a zNAI0}Ziu{TpgKIeBr73%12#$lF%8af$EB4FN z_gniaWcawR^_Ty3Hl_zSHdt|m{Hhz*3)iW|IYO;$hPDn{$*ALDGx{@P;|Ki5^)tu) z);$Q~BLyso%zno)7E0rPv3K~+6XsL-l6+@h>MZ}a{zD62lZcEdMlxo8H$=CX_}aLG zMx8%@_#ak(e>CkBq;vlxJ%99X|2Irhzrou7n{5IQ_gx9)=|5Qi$b>_ARww$cpTb;Z z$1kp&zq>HfpVH%5v-z*)|Nlqt-5ft@{^^cV+4px+8kHfoWkGH;KkCSAqTR<{R?F_N z#12uI!BaDwoh91GAUxf1xpV#TU|D;auz@Fk>|5r4z=AqOc}h_a{ig@A+(yby#J^AT zvq`kgKZv!)5RHV(`4V^J5exX|NdD2b2cVzxY8v0~NWuJa_t;H%n2QYIBTwGPj`05{ zrqQ%uLHwjYo?U+&f25E8Tiq|yKhFIR-n;iH`}k-1Kjqse{rUQEr4nQRN(Md+OoB3h z-2Pib^FPr4c{*;ECCY+d*T05r|52~yJs+G{m|N#HhJO?GnAY{wA~q7=b~pGd%VF5@ z^`EbY@_zq+Z||iW{(r_=$$zmn%P;q$`Ux>882g?=yJ`nm;=wXneWx)0i5C@z?w$N1 z`}tVU_;0vD9YKUW{ref^a$coBXFCXge*tw}pYfk?V$PU^+cI`p5TEtg{QQ&oB6Lg@ z+s-!?b!8gY#+N;iEx*s-}OZ0xWDR@uNXvLzAMr4~VCB zOt)QyZ48+yyF4ZWnaEOC5$pp+uQhG;H{BwXHh(x`zN}HoSMI6V8FXoZmIoMr7V?Na zly(MSFFys)W2xy#Lqm*A{B4Oh~0q( zjMPK$zHj3f4~WDzM}h&Mfhj~4f)ZGAH)8z7YcMDv3^l6?sUKWcHX4Gf;|_spo7^ z$lx_MSwI-Ekbxu!Kp?AxJD1e0D1d@vgfGLWS*cjtylSgGWZMq=LEvcE`O3u%F5wlK zFlo#Q;@lRY7kGvu9kW+|5EaJRF$IWZYGT+E4Hj->1ldwTRV8v7U=hv)#fD-eH2~0H z$o?4%3b1Hq&E{c>EgXqPLk527f@@XUJqV~P;9MSq3ltAQ=%B|hj|^#Qh{Bkuv!*7n zK-9HrN??RtSqLdeuV6k5lLmwb5&%wd_f?bSGEGRZ0f_x5$jUK)em4dR2?n2}id!l^ zH7qm33P3@NRN$jh)Ios|YJx+1W&#Q>5q990_JIvZ3}TA(5Z;9WhJ}};ihwIvVHcQ( zDT0I|DdQBxG&C(NK$Ibudyv3S9T1;Y65Sw?qg40_RZm#B(9kzDc;UA#Q)p#FLu{{g zXG?fbYCIRd_~wFt0wVzwfx&+|O4Gr5D-gH9tPn|Fg_Wxp4vNz_TJXTW}1K7*VN*(dZ{pVpc4K4^`%B^ej|SjUDT9HbtF^QU&j`??;aoAn-sC zk1S^&Z?@6F>Js$mA%KMOKpYl58(=r-CJ9?1(0gwXI4&uFr_uoDKOPqe>T+3_)jm z!HZJ_g@{JR63ZAD6b%x*gO|0D@q#`j0@M&pAV4zX7Y6361SaX=ptel1eyj*{5jOD_ zb-76(s)7xh&n_O2zRqQw$Yt%nka;*@P#(nVVV+J@c7*Ar(-Bze{2}XL$in_-1uZma znr#fAyFrM5x>lm*E&cW|N=Ej$@ zVJKE;nC@xdJUZAj4<0tmSqX>b$oe34l7ul8*}(-2ueYCv96{N*`Su@IBXgsS*F~*k zE3c4bU|W!bK6EaZ<{Qp}bj7}++z`HiF;#+4?S8$yzcb{tzU_zaPX^5)?db?VQR`3> zkJg%h_#$iS{9%|`qOj0lhpUt)X$ZVeyy?*^oH_z!R|0lG1c;oNf^LF0#ind2}e;m1sAvmCwEreSi8?KYW;5&w?WC`?w+uv6`)ig^dE+mX*QOhW!BH8CK zYCl*iIR_1p43!&0y(I&(U3#`X+nd4S8=B1x8O1M_c(szM;AqOd7YZExcy`#Fj{O*a zWM1)Vjgr>VlR^563xr?f9I2y|30*H%$Bj=e8W$O4rmk4ijgZ+Vmm|Wp2?W=3(U4}0< z0)+1|R#q+tbpwLwToY0VyX z{Ya%I*+6kK9$xgv4nhTx)4cCaU8~epRcyD$Mbos?Oth)3 z)i7GfZ({R|SzjHfuCMS{uXHY&zNl{V_3Yj|n6H$uh%S3;g( zOT!koF$XUSX$Qzpmn1==2mu9!79aa!pSJMD57Z;Sl3?h;s(F!A%)=$8HpUtn-Q`gX zZ0a1Z-ex~Dxo~&MZ-bN5CjNMOF^=uA=UpDtke$* zYNA-6XqydzhNBHNDG(t%Em}oX>>{zTT(o}#*dSdd1{%jqsVp!tOeIMa`(5p6DrD%8 zVih%JFIwU*F6}whw;h!c(5$a<9}6nP12n_YP>_Hif_DoC+e)2(qGIctdkV4rps2x! z_ld%OvVw#(UMRjMiw8Kpc<=^GJC7xCRMQZesNqhq=DlsT$3^iWEYPD4hRitt- zvWici6BP0yLPH?I0#~KIgPE(VYp;x_4e4|E zuSRLnTbSx??(EAg%|_0Z*2{*Nbn6l}bnU=$({pWz9mR8hHMvQX5+VqQ0Qr~% z<&OkdYE_W7$!&bCy|40o1mA!eZmR#YdU)M`SOR>tRkN z4Rh36H=|d78q+~#DeP|*Dm9TrgI@s;pIT zTGspGx6)>6*p*WWY~WjmWd$B1s5Biu&kESkoe^+7rh1gg;iM00_+wM!IG{M!tktz}d zjQ!?|O)m<5@1bPLk@4-}?-6i4~u)cej| zNcpLMeWYAWqW80l3lncUZ*(Keshh?m)#+~uYsPvmeC?NOc=O_Si#2VlQZ2UcTG;mT zd&ZhBeM>!Q^Rw1`zMmF7yUp#q?T;%vy+fAp`&{AgY4dFEOJ{Ez+q_r3-qz>K?`*ks zc;4Fcs-eB+Usm>>_Pvj9dsmmzr?h7*?|9yS?e8_~!i#Nf^Wla0?U^|(u#4Kh6Ynnc zr4POD2-JI1$e_LF-t~`dg(YMXAtF-Kr4h+(89i-sQdwy7dm_Gi-i&H*IlQU8p1gS? z&y8eD-kfdEp$+2=d)J~HdnbfFu$~WWTi(y9eWtVRI%)H~vAb8cEb`eOdUPYbaJCCe6ITY4?iUbd2a`mY|%?`zpS_O0djy!q3zCGD?n zdhz4WoLkAVKK8e=?u#z>y!gHE9&u0gwJ)ijY1QUZ8(_1TZyQb-&ha|z?|XQ? z>qgt#OTC5BtJcwvN4&Q_FFVhkak6h`*2MeK>(QsyH71Q_r1sp8r)zF!d(-ECv7MLL z)a+g^W%l#Y?@rz{zQyFD+whN{ijxWPQodU6JePZK9?JXEKHkZCGqdjtc^lLZsPm&f z^uA-(#O0H0ZLe%w#-DrMJXfSkPM104@}!yQ_6ru+cO9Qslg_b~ZbJ6=w)edI&TNLR z_oL5mQQ^7p_>XUQpLxfN+Z!Q&v?jd!-aT(^bGvpmxKq{Y_Q~cOd3EnydyjbWZCKH3 zH)lK7do-1+!Fl(u3A|2S?Xxj+uVP)Vd5<@|K4e?dqg&hFeD6<<=X>6xcy{({+hpE( z%trT(%w)aeCbsRc?{9dYV0_o3-qAL(c`%Oijl7G2uDe+hfUlK6}fGBg^B~H?fK*(0RALz2~XhH27@l=V{G@2JdYf4#$m;dOaz< zIo`d!=i1w)^`)KO?VP)R+V;nfFR^B0-uI7goqH5VsV!waN++d{OQB(OjUJso=#}2` zd)u*Tn+?0mT8c^VlbvM2Emc;O$-L~Cq&D}v(s@05cf8uGMZK?7n+#5`N2tnV*Qq?$ zqC8&mmz6Tk_q!hVk9*l~d3y)8*?sQvn71zU+X7}id*0OhXvCX;#nnmgDSO0Gy!#K6 zZRgtCdLKr%n!Rs(KF^rgpI-CqdvANfduB)7?K*L@?A+6qGv)HS)q1_>H?U{PIit&Y zC*D&IO&+7((EHu)O!+p^=93$DiMvib-m#-{QjcrTn|s@5yV7f-J~ z#y6{Z-rDz%E4_Qt-eE=S1dj3HeeXWTz3+FE+uPP(R6g*Y-CpT!u&|13`+FkQ()zqq zmb~HHY(C4MUYXhTtVWMYUc659YuASh?_Q?}^F5CydiRWfxZ3xekZs25hy zvz=o#pL-d0wzD+*El;P{nsiNFyB^~S=iYtidiK2M)a{QiQLh?T3B2`})*kk`cegLI zsP$As~Jx4i4v%7g0kWaDu0BbnP?)9m?I zJbMgvOv0DF?dR0_J+bd|p?k@CmF;Ux7`JXzx>RFA2&b^1#>spT*-uHXO?-Fl&8+h_N z(}UK3-k&`#_oLpQO&7h9J%99h&$gRGIiAYGiqsi8Z5-&#uX2(Pqt0aBBzw(9PCSL^kWW?UiEK2 zqs<~rspMkf^RW4pQ+swF9>V+HoY#9}-uHO-uV+5Zj4kBeWed-}=Aw(UY z{w)Ud+oO^r7ru0Xh?svU6lP1OM z)2}{+)v=R%&%Js}V<(5LtdB#H-MspHY^FRzUF*&rn`~_!HuG-|FGswB*Ny7Sz3)D! zx378?dPv^ReEJ_1B756$RhS_iXT9uy?<+Dvv*X><-X2~v3Ws|svZtcz^V!Vvt_0h6 zFL$&XToMj8OKw}7;rG4oa)*b4Mn+XgHj8N3x~e79-E=wsGYfN}I$X17vdxC)Hep)p zRqFLSyhCgK$NB59d~>Jq)%YYp_=FOO0|+pLcdCiRvM{WcA9k^!RpnyV7aU7}f@xG4 ztMnEy>G+>fUIjT{$HYzvj6yZj*}>YuY7f~UA@qGTq~m^7`v4|4%=KDAJ+#_i9vn}n z+?_|6dL>@+c&ZPEd{ChA$OW=WJ;*# z{hraV{)_auBvmw|Gr}3U=TBjOs3)$1zSP!1hNs!&d+B_}Ca8cJY$wYoFB@`$IY=Ki zE{Z6=jtHN)9W`u@B>!V!Pu+p6iJEvtDdAm8zVL&@=o^#N-L8lmVhPd2^8Qsi(gCc3 z9nFY3YSmy)UfH*jCw`NeO{<)%Od}#eff;bS97+VzfQiSK@i zKpO35Bh2gX0lzgog@6n3U18o%>Uf?`Q3>IB)&eoqFpnMiScLT|jTJQbpB3Xw z;mv-5o>3mCru-Z#!XpJ~b~Z02ew>DhWLqC)_5O!KI^2V{uB|giqgf5^d5EQi^nVu{ zJ97h;!_^|1k|mNn=c_3b^&Hw!lO37Jk*3kh#G!Erk1B-Tn^u&6av)Hh zIBN{-$x7nK_A++Y{QJTN`%6L`9O_ae}3524Eo`ftJd*x#5KnYS|%`Zk-_pTxTg&#LEWx$R1XFyu8OCdzyyJL#lP7& zm3#l<&t*SSL@RKAhl-xAK4Ik&2a`=}xEVIHv1PGHuN$y`Na4_WL>sbc1}@9=IH8mG zN!S^_O9Dpsh|pm_?aVPl!NV7_o>qw4?;$&*FfiH1#ibNzndWVn>&?Sed@Mwcq=1&u zAfFd`|;WgA5T=^SInf&T|-IMP5szQIGWo7XSaIo)`&_x z%iQK#28|B*!SD1@48y~>E@O&cvj#&+Zo*)W4fY{_O;S%}T4U6hxtHLg$uIlko`|GS zp-ps3A7o0+WLmb-)(-8+`|m^G{w;Ad-?>SKpprFSln8j;xp=$NO8euIy|=Wi#ZaqG z`Yn%RYNegY{~jJvomcm18lw2cdaPqWzU{n>7KOKdZ3FE!B($St9b9AVRzMRH)_R%P z9&bQ@)XY>I-F<~Q77{(``!Vp)2%2I$LnpT>#w54s)a_FL)a;;JM~9y019bycg<5Q5SGwiFv?)Q|IEW2Ci@M8`Mhkn{6}9*<@%n_ zplVM?-)H_BZcmWtX@*EGKmD`EDvPHV<~N0Z&HwK!ta0l{A8m$kRS}q0C)vB!Z^)zB z+hoj@^I^j{$h=<+u16i#CHodtimIFNT3kDuZ%fs+%)nZzzQ!0Z>;3*Mqybrq)3NPK zCHmS|rtbyKRkR+N8If=Bt(EuY0zPZd-YK&d+w-+7OKu(%a3vi`~XcNP{r*jAy#t zn;V~b?w;;qHZ>`U)Jg--ma5{Rdzz5sL0+!88U}^p8_XbzdEyUa0_A%yBUIt#7d#k6 z5JcN{OhwfTgbim-dWEuX&Wo@-J+I7v?74pvZ;|h>uNd+0&fWii*Ux+A`+dKs`@g&U zGzZx}#WPNJ}0aA6J}MzG#e#;`}J(Lsw+tF^?v~p5cO~|NMVf`T0S*hDHLZ_DHMdXsHAZ9Kf zbh}AP2hK6f zfLIYsK#O865piHtiE$C5&yb+4+@*{!l-*#!1>?wcP($bs5=wV495|u3gUuEx%@ctN zOsE&)zl)IPuWqj|L!C>A5a;pfUS0^AeolvvF(_QqR;xlHbe|@HIY|z_uS=BeR^^DE zM6RWWqoe5D4!aDUC1(zQM*^LuVMH$(u|vS{AN(0}{+%xW^5CwjAG)LrQ>Z!H1a?+^ z^9Ke;LXNdDPjl9Z|!way?rka6d&b>|gKyZXD8kZMzZ$76tzL_5ttS8RGt~?K}pu zpLeXp0&wRx^<#X0DJfb;vv0?lIgE!a^QQKn+*QqdN6OZQICJyU#r^R5p92RQ0{u6R z|7RO%12^!x#@(|8i~AxBGcIEL)k9(r6M}}xUDH7km0d5Pv1j2|nTfr)GN>Y!CkUg3 zQQ2kYV7Qsumo+s|Z!a(2$p1}#`LEC2`#I<8Rk!sWX42_@h6r>WU!=?}Lu#HN88TwT zHmVZ%XpMNl96FEUA|50|0E3y;;e`^y`dBzn?JL$qvDx92KC%n%&Jo)BtCt1=AdiFY zPhVl$5e&ZJ=ew(b?Bb{9&su%Ab4VCuME1s(6!%c|gP#mdNpdG@J*txjJ9`21iaNel zA=k5i^YBf76x6a$q*#528vzIVkasH)+~2WZmH8jJ>HdDi;jfF@!@PunsffHpG+A^8 znj1(J6Tg9h?5Py^C8<+1*-+v^1IJ(n1Q7OTx{%Wvo@gz3R@-_wm`INLC|$cLM}eP0 zW03;v>P})AkWj^rvy9Oaz}}DSL(hn1kq!J%GGLs4pNEBK%mkyuuy}8MSaDST13W$@ zi1&3kKIg#6F-U#6P({}Gy}l8?^6|dy)vn$-(B`g*wdjS%IrJbkb1vChtF8>6rQmU7e*MSNNHENq3f)9^KCI2tUec~e8OZ7I`OOj z3nY4fDjiRg7RrGs90p8V1MS&jORD z?mW9-3!CUtgL$f;bezYx4b)u%@&?W+#9>oBCCScEkX0dPa_HQ7#WuXn#3QZYL}#?y=XTHlL* zLV(A=1}bYmQU@HJMfB%~{UcmOyNlB?p~dvWmiV)w%#ZxOxaYf`feY9&ylwZ%J@f7C zuVl4%NBVu$B%(Y+JARCAwmmzwCwpQGEhl?W`YV&F+Y^X5q6vB)N(~_l|Aua553)wf z2H%oFfiCbka3x$aIL`NgIr{Pyq*}gzMk(YG!VyEJI|=Z5#=iKer+eA_prp=SN=FMW zY=a<{;Ce5n)-)d&PG zULdr(3wijG{#mg$v^i<9ew7~>q>)i)YKIBpbJwae z%Kv_3PM#w5XMMPmS#pj14BItI*p7sTjk}nYFrtN%f-D5297dO9qOl|7^K5WsJL(Jl~2Wzb$@AeA8 z4V7Mn$CbgYQSrt*V?6Vo*)AP+ zr#)dvXp*a2E@xCQ<*p^oLiG6F4cG5rOXb(=0Kx67iDpS*q=-F zj6jK%hpPCl7D1nXeBAn+Equ$s?_!>yf$zvYdzVUj_5jrZ7tx=;=7q=0HX!$c z!#gDEtcT`Q{8oG{k^G0$qXBv%zdXU#*+BDir~%SLPxW?rYjO4Br*#F`z#H*zaTG3w zJOl1dJ~;{@(L79tMM(PNUPx}DO**svi0T-YPBz@S9K&!5Oy2G%Kk zJ_T%(OATZ!Cz3D~-N8`Sc%=$>=4OB;l_V7P3O1@Ag|i9Xg+cajIKo8zOY9xuyV}TV zaHw492)S{82i>FB>wm_>>!UcD1Kq{>U$H^3V#B{r|s>vDa)c%s6)> zF9K>$TS|+A1P{sls?2jI$|e(^XTXUC5oDGf``3|mVk#n6yQb4 zf{COeqm)H?xN6{53xKaF9s^;K&iAP?dBmMq`-gY}p0w)zD!*a`N+fxDL z_8KyStfPBQ5+`+HIW;bMNEkr@!RX7Zqr(hVfx}q2q(tfcy5dB#;lx1uF)#A80PYwK z)+yG15Je;uG*M75K~rtZ!PrJdtf(C$bz(&Tb4dLtuML1AXF+xG4QT{iasq3EWN<92 z89;#LkB5@tdhEb(KF9vRT47SvNa4X$GgDs;YxQ}Jiksrz{}tD<2_S2iuV*aRwZUR6 zdt3W;AIA}RRBoe}jMD`XlfFShjT{K|euL?M+7CAc=DY=s3Ka-#bQk@wGPby{(tC;Q!sE-G5LIk5v+`(Jy9#W?IA@`1E1T^VmEW5B9K{;rH{LR6%XTK$GjK( z%1m;9XO8Lh(3I?Ggd~Rtyp!DaFdBdTnm-X)H=bwLDBui8p@_|yOx)*!*2yzt2H37xr!*m)e}t`^|wN$ zEbVG5D|ohDv{lJ(quSpoODVLk$UrqB9MZuMJ^YH!5kPE+fOjx`qwl?^Z+_`{P|qN{ zW44s29TAn|jhDTEsoVN;kzKSsNdfkM1|=CWa}3H?FX)sxeb;|(NP~u99WEWhJ@gUi z2nVi+YOhef$|EyM90-UyNC&YqM>MjENWM%CbkgLV>X$BjZpENR&u)zb~sWe&zKCUL72o4by-`vnIZbG68Zz0A_K@cu~g6Tv# zYlFznysposDL~9fqHwfSs%ZP#NbEE1UAk>0b(?OTvl1nmZPO+pG`+U`?rZNYebTO9 zsP%cZjL4b#It&O8H4y{b7wFY)XkAoQ+>t-=*Q_=8E><4F-YezqFm*oXWv+G}N0@Lx#@hnK6RQ*wS|HrBm2&sOa79%q`=+KxDboWqxj;lVnn znEfJTN2r*$fL)25u%g0x?*RHe)<4nmJvK?1hKg;UemK#DEE<@C>k#2YDe80#f0Bo4 z$sp$|*4TQ-XQag3$j%XeI4n@(P4rqZPM(9XhT1J;&_T3Z3H%*ZJO~$v7}3}& zC2-aW}@Jg z!1dAy_RX-XQ-$<@B=1$nk9*{w@bjsmSr`)qIPnY#;VMOEw=>h;Mk={j)YYfC*}h}W z;$ft0dvouV3>gebe7z9g7kadX&9I?l|9rg|ql%OD4ii2~&OnR$8k*xXRb{IuoZb!{ zj@0t+6bUJKGh_jTn`nR9k&tlL6=j8FYN9VsPXf$?9I6(7luIq}QRDZ1e@R|K{>UWh zm_wrQNrSx%bHM!-trRV0XHK0Y5`Nr4;Pr@GZ@W{ODEU~VbL0OS-bx%G&GM9;P`^6 zNH;`WCmI~GMB%8PESXB3lFW%= zO?;p5I<+IOEf%FLTbPb1d}a4xX^^yyk(x0vU;X~z-Idt$5(!F_rLCU8sA74eB3#FX z=DFx+mkJo8+3WYlB0-vOsx(JwA;>wL#R{L-F;NqL{OkKBJxPlx9fxMbVXTUyvvmXT zsg`{BM=?JXP-6uW_{Gc?NUHiY^Sr*_SoOJpf<4VIvzLi&n4BV_(6fv?+SRt>mUJ3~ zYe;7EF%Bu%tFSOvlj>w)R>Wo)=44kf0M|1qLX88CQtIBGqlbpu@XN=knC&~?QK+ieD z+UQvzsD!P{-rhR;(`s=@VRcY1dLM2dy8J5aoW@}=u5Dk6pcOXy>}J9{@ ze^v)}FmSnBJ}}B+Ou4X^6PIbg?@l#?Z!B3j8{bz`t&V9P3yU z&F}IYW@x4kNQtUo$qEQj%`xsPrAc?8j%5vhQqgOEZrhc<^<25PH!W^syRKx>S({kX zbGcvCcW)x{^E7lM^z@vfh^>CHr%XuK?oUW->9GAfPv-jM$@5u0A6_2cUs31k`uvN3 z-(EfS?cAV!J@!TH=A>-x-%0(*a0&5g0$7jV%Q@;#Vxm75|30Mn>POqb!HT2SNBh3; z(C85m_6Ml_o?N+5Gz^ouKaI^lCWgg)-6P7plzF>JY>(AovJUFTSurxrA-5FvHZc`9 zsW(H7Qb}ly8)HVd;nu~jR9xsE&S(rPr#V2VUEYAYeJS&)+xGg%c8lT@UlN{TW_X(2IVMG=cO zTNY&*B6D(>f>WI^j7XDAqD&Zy1TsWyVi`o($wir#Mogn-k_izaBw00y83B@if<}g0 z7>a_5LkUKS@1a-N`qcT6UK9kP3Dh6fPZ!UcZQ0D6Wc{U5N)Y8FbqM8{tkka(Z@0il?69YLHqjjui@9wzUB%T(Rht|cQo)b zM?GO2mD#dPSl4)n_UbJtgwn_RtXkCxs5C5J5yIP)pc@F{MDEC=TxXhp{IBM;rt^HS zYwKr|?R?sG>tOD$8O!GDS>R(H^U7l3Nl8J%Q4m1YK)3PGh;l}>fN&rdcae3`IoN{w zc#p}xP#nq}Rt1%0IJgTS@w8IyNDl9H3O>w0*F|~*jG*KK98nzXe-EPOPqdhssnL@ed znurHB#WP5U%_5_8E>`_0Y9KDADT$HEnpWfuFAT@9olcuR$W65_bPRW& zMa$(fl1SY3csaIDw-~2UV%_G=}wk}*~NMs?WSpP zCZ;eJA<9Gwf)2dJr8tPM92gp&F6Au|cs}RzQTctj^*{0PtH9;>M|+#hdwf$6{pjvz z$YJ#za*r?WS}E1MDnh)MMY5{??Vh2&SET7F`}Mx>VzeQsWv&0z>{@rWjCB+9I=zo~ zplvkI!HU`8Lk!D*<#!I|zLn+(_xa{61|<73!a{+h^0iCdMWmQr*-+X%AfIGEdC~%# zm7sMHl!Hu|7Na;ay0-l{2Jg1NT`s+(ZAU_>&E3ysO4@YHbaZr4skg5&C}jo)D!4DT zqqS|d1Qo7Qgj$ggv9bTncm|MIQjxuVlbujs+oZy(`e&Yhh*Q8>j8fIDXNSNxm*pO> zY4z8P^|aS>eE*l-v6nEwsJsdtn4db)4Kt)Na;`7n6dkV!R6A|2Qdk49?I|AKS_AGN ztwr|-qoiKaCNu=dJPJl8sdIYqrO6tIC)_iuY& zUa9LCW^AH=Hrq+M=4L~oxuYb6@6>Wr>MV&9>W$LUW0K9j#tFG+wy@C`Q#;7|!}uXV z0xZv6^!f4iftqxs5TS>41{o<_)nQdtD%E7e3hc~Cbn-_caD~)8i0J<$h!F3I>M-{e zVydxNl&8@v3YA%~&UzMS?cUaGWvgkilPP0UM|GQjIAu1ORb?>N$&+bWR&}9RTcWXx zY_iI$KDn`_n?jWo(JNxiOr2$9l};ohys~{wk~_)<2x%!3*XO5wEGIep6e!*pznThO zi>QJKcX6~+T^8ah29aW6!A;3=LZPpShlsh5zhztq82%YOtymK%fZ>(jY8>k-oD$^B1bU{_r$8QyO@B_g!H+7+Nu6BpAu#2({=snRxVNb9? z(?LZq1XuRI`8-!Q`Pxhgv~iPmZBY42l3ay(Jicil~GQ8x?QGJXh`TM!I#kc=8b6r^f!Bhvfa5@oi`y}sbMC0b-ZGR1Izsf~h8l<&j$;@(A`sd;!*^|X6OzScgA;P&^^^?LhX zJc%tWYp+_@?y+>JUhjB(;i0F?;9~B!m4^~Oih zFh^;!`bkpwQY|_Cc5!M&as^w=7AH(CDaBONrtD+k&8_F@3=yj8R?wpeSCHJxavU?S zz#CeVg?+XwD@CLzCX`~wi;6~s)ft3qVwhP8563Ocoe?o0O7l@pI&b%Xqbm{7CpT(W z9P?=iVCRdsS$YxCwCt5ZZ83z=gZ9cb>FWqZ^q0g{vRmo}k9-9XyD{n++Xfk>4##-!#eNXk-yN^pu+H3W*=3PSYn@>7)Lu7V4p9ZvK-0roM>DWwV|{ctyy z#Ij48uUTY9MV`e)L!P+QMIwb#>$n5>Wc3Gdl*RA<*&V>#hrjMDi=1%y+~>Y&yeNa5e$5pI%~?85mFSTa7zD={aG7qO)$%!EOFvDn^z^v z@x(b`QB}A8kW!}Q`VKFTY(A=DUa#_J6AqhNT^$ zOn6t(k@5=xeTTK^SINeD6_(c&(sK^z)opLGE-T#Qq23gy_7E>Ix(2z~PBcfFnmE#Y zJRNSO>_l~9h|p==EEAqT%*5fx(We{(-%uESzI>?q3@t*3i7X24VxQ6VY zmrLG@G{>5M7xK<6O!y_A7;bmG0k6$!BzNq3clx$(Jbm9|QM2v0^=~Um&MlDObV1 zU-GIUA_jp-i1LL+gq2BAbrFFif8{L;7g7R%Y~rea0!Q=3KB)i$=qDpee4jV-(0u*v zN)n+7D^+66EvQt7`gQu27KnZgNz+%#u^kSj!PBR{Q5bMnuk2BEgjcKdx0m^%zjkhjh90_r z@nD?$BhW-i2~jjuB+)_rJy;mA2mGt}A}Z_rk|io@h>nYK0Hx!?*4s;zL&$<_ILZ)R zbOUHp_>cC*E^s0}i4H=WfZ_%pZokeM==(n>H=$2{w(PV1vM z?bchj2JP2wNW=|u9RQVcXvPT?9-gDFjA+oJYVEa$S?FPTGBR^>7j#HOml16&JvgFB zA&`c9ZOR%ka3Uk!hm#v|7vt}rc@`6>+gCLX>g%z(Fnzf1)S!+n;Gl3AChO|awjiT_ zZFMj6K;7?+Ns|>i;ffbP1Aag{%qc>=)DZL#sH=R4 z1Ndi20Y&AtMF9NsQA#cSH3IWGZi%vfK!QB*MHA%sztO5XMiI-&D8L?xi|V9v%ML574=Zw-H=^tMy)zS58HDf6`RA4Ti~RF4T{`U-cp5*`D>!7ps7 z0MYeD1Lkdt1L8qbnTon-iUyMR<+2~Y9*DObch)d(F0wj(U{bqtkK@Y|;lnfjqRoew*dZ z0|H1t&4aSD`?sDPEXff-&t9;kDe4PsQYk}ORe?S~xh=o5$$8Y^f8zFkG}b)h&ZA?i zS+JfU%7&Tu)Q#>}tu^ehDxz#ok)Zd~=Tq)5ge=8t1bh^70)Ritsb72v$r#}K|6=h9 zC3_DcyJjI3LMGX!P+*9%bTzV}O5U)S|Kk6``OQEbsqNUC*G@Jw>Ym|UWr8@TI$mI9 zC@CH`T-;}tvUl;fedGs!zl{cB$G(@Ih3Y*0Vxv$LimPyaWQLs^9dE(#+ebwPsr&OB zbq3(`otnpX3U#$%m=k)<%PVI%)!BxJUfLL!`0BngBFc$e_dDQqKT!&sduiXttqK+w z3?n50j0+<&mKs*qQ2~yPh@8isNctMW+F*MfN2&b(C$d8-0qvrHF8GKCXAoDzAcuDq z3rE&&{5vBf?)!>Q5)UmEa?a?w!E^<;d{7uL4>AfI%u}*6sT@vlr30(?lKEutU?t<$ z(2unugW3@l$$^s)(ZIxlft?g{z13tz4n%?AKxSPl^AB`=4u0e{0i%?O?_yxZUije} zolGu4KTe+cO@pL=fEa!Um|N1t2a9)s`}{D--M?pF63IRC$IX;)mP0!yMcc;vU`0Z}0tgcF_dyOAflg-@W`K zX;Vo7OasR#cky@q_=RsEZvr<27aj*0GA3gk?iXEPbAuL>1_0yde^Oq6c?J4JD5#E< z%dJpOL0xi$HD|ZA{Jy1CV>^G6Ul`8cgj%26QRezLHr-F@=4ign!_LU8{{O-bAxVhW zF1tfQ0ME%%AR=tkfrT#^Hl54n$!2S`_Q8(8(kvJa` zP$SPp-<#u}IJ<&Ce><+axmm}sUvp0}ZcC#2R##Co^z@n#FThaJ8;hJO$2 ze17kp!Coc_@QKmHHXu#B1n8jhWOU>gJ|<0ul}%d^o84Pve>Y?Ujw7#t99Ge!D1oJh z9Cc93iMur=tggEC^sys_06K({H~Xweb?kFjJ14JFM#D}&kz_rXN(=~|R2|!&OQV7r z#9at$GpX8U$_qf>1OglilTD0>l0)KHC9mAj|6;`UG~Myqu4=iXR-)M3Nn4t)g|98Q zn$^v%&68GUf7QymYSGBr=BhQ)sMqPMTITZA-P@aNT1l8-!pX#Oi`~cL|++rLokGy z>FyL!PMHQ}=_=)PG{5`$(F#FyBD~O|QX|U4AtigMf0JuD8jJRt&)3fx`XJbTUvoZZ z;q&Li$JIB{pP!5UgWmXlJOAJ5KhFLeu;^MYM!IwNA!+tM_qp-$@3w24k^DdGo$j*n zZhl_|guI=s&ZD8rvFLNG%QUf5WzXSQ>>+pugKjv)1_!G}y`m&AX!(N?C$WBgNgh(lzl*WOl|eD|PDqG8IAWXCXF6%|}*N7niLh^mu(O9BU^a6tM7zO zfx4xGj}4*gb&Q^jmA*Xwk((KrdNq>BYe!*u+xsqxjG_sioGU**3oRzeL|T6x^7RJ= zf5y^!f!Fk!b?=9BE()sTFsJ)~QQLV8>)|v&W`ASjv%G8Cev95qR#6!kkNotkMSUGJ zu5jK~ACdpx91Tgt=%B9=g4@_)<~VV@wU!#>n_1HOJY7{aVN@37yvg0q#X~~vs-86q z$w=ydOtT2pg3A>x;xuyv(mR)zx*L66e}zV_{V)Bn^)~<0-9=oC1l}hX^KS8tXY`WI z`kG!J#m&(F?gMiP{1qrnx^L>!|AVpiew%TAd^A{GCnE{cAk%6_IJbQr{r*|a{zXWr z@mj|1+iSwPen<=>&gEf%~M2Wn6Q-9W>tL@={xaUcTbf89g8HTdO| zjE_oPUY0syJE*x(on-tts;gL#{TGn^7o8_vTdOd`64RV({Otc|OU@vRjzKfvrPpkW zARo06Ej^?W_f#j5WKSJaq;`|8$qDEv@o0|!CB%^PvyD}1)*=zyH8+_N`81Mu6p37< z5iiO_OfNm%<~X}Yyp2T$e;2Rz-J|K9lj|v!&ZsN@PO?X1VZ4#*LACsR+-TcuoG((< zFn3~txDhc}hO9`Vph4C|P6-j{ zLI(4!`~KhOd_wpqTf~$no<-xLZXhY5iz2DuQf2DCYuDx;9VB$MW7*VK z%s}fp>OtGY4Kc(*f0SK8;!vrEKn@4r-X5nT7Nfn= z?iyrKQNwS{Qx9h{x_|p!n8@|;MV5zn4N{B5;s#F+@8c^51ufuA{!~rK|85d^O4}@z^ zL)HBofQi!FkI#?OS?6lrY9evJO%GZS>?D?_NPY|yL*r%mZVWnz_&7;wBWpMiSfOdH!E+r289JVxTj?RJBPv{*~Dx*AnqYT`sjy-9Veoq${Z)c0i_hw9o%}RPhCiKrfoB4z;JVB zohKz+fBkzz&CL32wwhAS3fijJa|kAkpoPGRLmK* z%kXTjswU4k=$cjqMK;#4tj*!<}>726v}p{4X`2}kd8o+cb~hzGuw?8eI_m)A!{{M^%hTC zVLQv>6&@moh0_BF>_tv`Cqtq+yD6#6r;a)rEKM{A4m${{{&Pe_k-aGWoU7^UVWuLa zAUa}SiGj!RmR{&!bHq^Dl? z%PsP83`c`u^Il&!%gpB8g+t6cl0RpgvsPt&^K{hHy6Tyqfx6wBdn+4uX8hvaw!gJ) zdnmNbmPTT)g;!;5B~nV{gy0^o5e`Kjm zUvW7bFPC;%Ft=^=NbR>Cr-_8@`M<>E&UZB)8jh`W^kcxh)e{{+0FYD>he|=E(&~F} z??3tHaBa;0Y@fyF9-n zim{b^CM1@3uQYwdxWfiN4aCqt2(CGqxGqe$YSmMhh6SnyOqw^*5_Jt91w7&SDuYq) zH>+xS7E1`~hq?kd*=k!O?z_&m757|2e>TL9Pt!H# znAcP8Q<$Kr5!9G`BL}`<`c7cKzMq)oQL?Zh4B0Je6s0_>guAD_LK_^X%-R0k3>MV( zLcF00QfQq$QHCIF01^f7TJ|eU%oM_j$uB z*BX@Mv7`@|@h(XYL%?*4VIt};>?CC(Y1yaht^2E=zS-mQR=rJpS?m{R)$P3ILTntB z*QX8GYQWVUKf3}VF|PKOz*ei!dba73ISHsk47T%3;<)!-%xWFtYnK8DK*QNEjc+-} zZ{2Jfyp>zk=p++JIDdv~=DP89KpQR~WOx=M6{#7GT$3uh$>qHXTyy>NHG z&PPHfd)ax9H~u;MVy```6wrOmlEly2tpTPkul`0L|IRbrVsj0D%D$sru)smgD-EdC z8IeK6;Hk}U+EkS5aAeEPwrP61L1q`xwsD+dn_%{q%;y`Ze_~9z2&To{{4rbIF8+ z5d$TPEw1haf5=K!TMza7x<&OJJQ)EIqGQQe79}x8L8eK0Pd}Nw(`@XV_pU1yh&{F`3x%%`TU(M{lr|V&wiLI&}Xk_ek z<&$9$9ERAk7_kjRTJrN4}M_W2iu0AFeo%pJ`SprfE!(z zETO$2rHXJP-L7*(xb|3S&c-9YlFsGE!@g6Tf2Q#j6LeVd!)EPOnMUZqFOI9T(LCYw zNEgoX#f%L!Glo7tlkxpWop2Wl4uO_G224`E)q4umE9bk#@%9X~_r9)$c6K`{s1yF0 zWE#0p2L?^aNq0O!{2M~~$Cn1`8v}z|c<$4gk0(-g+C6oR&%cd2m>F?* zf2TEtK$Z?t4bxW(#OE=n!Bdp8b4Qm%KwR}^FQHy z+kPB(f&3<#*S7ZkXE}VfzQDb0+x}YwvQQ=g6e{M-J z66*YmZ!3$?N}mnCK8X)-v7Rz!&w%MCr$vP1{jZA=xZOy!jpK20suKz6ZFRf1otvqJ z2=TW3lb;XE;y&s?RQw|KiXIiiEF544DVbqO=GiMO#lP{PRq_DVzT&9Ca5;9)OWau^ zIIy)}Z=Cg2tWq2rffC42Yqjf6e|ytLy}2>hO*-z#xHWL#lUeHMa7o$4yl3JzGNI}C z?@W&XGMc~$D-DJmSV#v~dcGRQGwRrzWLi3+895wd(}~%ioU@G+#bRennCAcLlQieb z4@uirr}E(zdx`#@e{2~gR!JvcEJu>XR%(i*Lx`&?#sYY91!q_?8+8F*f3AI7`F#z2OKX_y8fe<5N)Cu388L{FFhW4g5t<@tNX#Z6V42NRSN4 zAu!Wn2vTgxAeg|Af0-bK850p0VFqDLV;BvIVu(qRK}kW8GAN275+q{{fJsQnB7%sD z6DG_s7)$~}OhYp>Ei9!njf6skjiNLfQc$ESFwCL>0&HNSvNFOThNB@x1(GaTCQ>4q zF+fp_Bx6_vGDM{$6lEaMib^z6hLniL%+Sb*EMo}n}1 z?-cB_#3$u1Sz((d4LD-KV8#`M$yD$0CTk{Zm#k*cGd&Xw+n8#sHF}G)ZH)9UNo#9w zO1&k@wS0tU8j( z&gf8Pa}=6Pb(tO7#7A=60SS}|(M43KEMzpAL{Xv_e{5#}WNyi4Bh`9q4-c`d`1~ft zCLDCTLbKtgkL^L}^A4o87W#mZ;<=IsF9OG{X5u;7lAbt;wVJpbi59UZZ*BB3LN69T z^(L&X*#y|VVJHtsO*F->fNX zoA^t8fxRXv9~5%Kf=uuTgGHqC+^B?bTX)P64D=LCgIsbx{Bbkmkg285>kdqqZU+AY zMOFARkE)0NXx}`jy^@=yyfG(#FAhAMkf@q`qY!GltTzub2>CY+TE`AS;>xa5OLRFK ze{WD;q6Ae4&_dx9+>J&)sQOwsGo^r;KTGIH@ngv*{}<0T>U*baFd2&;)1|$&O3!0bOG)1x?9MNkw>zALVQZ5oSVBm95pDHX z=EiL*0Y`0t^XnJ(@{neC--IFAtDO^+f08qJWS?z=u8$QeqfKL}xNp*e^AN`nFmM?7 zEn@k@uD6uM&tk5kHvI3oJX`FS0_eMo@goyA=#?i^X8(OtdZDTEw zs#yp^g?-}6Ub^lN&!l6ngf106PXrF~Ap97oUl2H`1+P_Vz8gl{8pW(`T&gYQT#c{2ZP{1C zE2b@C-Q7X96JUtO$M5U1e4K>t*p5(@-O`qqE3{-S-N5GJNsTLC3z29_f9|^^!6?c> ztW2SrLNg=DG{QVBRR<`7DLraMIW3K%P81#$<(7w$5Sg)tn8coY-MMql-f`V0d2pJ! z5fN48C!jeK_~k=jKwS*lCa2`gfjy$>*xrFz5pr5oiyiG4CC6_=NsypAP>8 za#)-;YUee)y^)CVE7GqM@33i=vUIrQjt`(!{g*5vtxDx=l498rf17@lVF|&)T3^Ph zsyrqv)yWz{zUa;&hL#(md_(V>)wa0qjn$LCCeBS`t+C7y*?f9`5_S}2oBW$mHvP#- zwKn?$`n8+V1^>VdeqjuMhgf(>>!2ZORHB0S+c`_Fc*q`nwfao!#U8Ja_BxFBOQ^wp zv;W^CSN1Qz_$A|fe;;d;`(>rkb*FYMHJcGa-&@w zETN>XOqe+Xf9-QAOyPcYI|u4oKdGv0Y_h z-ByM28hMR>4#;v5(9naKVDz)i1PqNJFq146)3r!=x*3X=y_oW6Hm&+*Opg89sD?l0+0&HB8HI!p=I;#b5TR)?AU zYgp-X4RQF6fBl1xRES!;Za)xreXrdO?y4gXY-05biR}2iEg3}5gPgOG!b5*+P5ZyU zJkzc!2j8V-i2n-oeVm_SqZ2NkP40#_u)5OK9l85&m^e7zB{BtNT*|Pe;(tjI^^N?*RY7~&dl^?Gul4k z^y>4|OGY5HT-p6mhH^6U@fs`I+*>8`gn1IdLkKX%dtx2j?Y24g?M}-#x*t`0k0d*< zS!2P52XkA77h6S}Yk@_~FpH_QW z&9bX0e~>8+ikKyq5lO817%tt}lmLB(4sII|wR`uPNvmhT%s0brBK6B zWMfz>K4?!fv{gWy#pM{s2oglvF(|#PX+`Z(__{11aG{mYU^t|vQG3c!sX~!{O#{hu zOctnwrcEh(T)x8fk%SD^ScHn+PTZA zexEFDQ}h_|w)5M1wNF2{GkB%!j>FgeqsnCy8fDCKG=@I8DqKu=;oq==2qFaxL-?jr zf4&PHKbh;YcaBQ9aPYjy%cqFLjXSzpl~#`9&F=eEQ=yDPKSl%%f3)+F8c`MmOvV(vQ!p@y^Q8gI%2lFWbPEsd7FPJ z{MOIm9X>Cmk`{0@TqlO8i5Jz9f9F^Tf6-ofl=IZj>bDO;zukt9aUpuA%9~;lTiTp5 zUk=QRDE;KetT%9der8=l^gGljCEQCec_XaLS`Rm7+K26Vf&EyD$Wm}~ge_aW; zD`KB<#g{c*nYT}Nx*ENY3VKVdC5~kkjVh(6zs0XF#uXhduG#K-JLZ`Aw1m@-iTSG; z5hnODi1%(@mm{9I^pDLh2hX&|McfwHBJ**VI!sY2p8kBgBflyJ&Ly0xatCfA=dgK7l>deSO>U0e+vU-?i>P4J9*J*-y9NnZyIhmRn~F^N^_Dc!Cy1-;!l z6xbOvdVXEkcL<>kB;U9OC|-_zgrO8EO(hLNoA67aWJw?iQH1Jm2C1Ede?7hqAnvyc zjo2$XtkaPI(=3}Lh|qGeGG5FFHrW-O)+6G+v$n#7N7T>c!AVjY8ZMU+G8=v#(ZUIq zF^^sNd`**&9zeuo&sHj*2xOj#iX#~}>MPEgjsp0N>m^fe?Cz~t@>L1hAL>`VX#tht|{fe+jY_+a$J`Y77N)v;c3!v zAH^2)>$j=Q3L}tO2y64L>;IRUCbDm&AN{N|BTm&uQ^h9UIS=P<_m5wfg*MLKn)Sh2 z$adPliQEuq<~OJH-1PLf>2fr6mbaH->uUA3wsH2Gs%X#Nz8umVf9o*esq(S-`kakt zru2XI^Cos5rnQrG2Q$n&4*QFQ@6fv96*krQFwejBXTY5*5fXC`dD%RA;Br5kU7?ZE z;S)r4M+Rfh0LT?)M{n_Fv4yi2-EoY;8c1VHew@Aq*zkltg!gaPZ~1&x_SkOzraFti zgP7@gt_1#!^zwOve}&Cj*u`n6B;!dz@aFT4@Cg964gpnPM_$I?46!DWa35O zl8EG@DCS}{++;N!GJ?r;l1cq!Z483(A${`VUoej^d+_&fuUQ!-Bz-@2)lq!+)9;q} zk@r7`_4W5~XM~j`Flw7ZU4d_qD2jZP=zVAIeWK#-8dpK|f2-$))8}v(7VrS5eglu@ z0^IS<6lS)IB0qSI1TB4)_5W{L`c!SPw#M5Q&{ooIMx$8OlUqYI8wRMT+gR4gs|>VO zHpa!OG@C_5qi8lZEfp9`WYMdob7-nHrArhPV&&P23?`U~AtpcyOn}UinnZ}h0t!^o z5HiWBQUXfCe_{eN6lDO!G*FPsA~d8-D3umT8dE|UGfa%enWQWvMv@6MpaPMgjF3## z8bP;Cb_5BFL@Ha(o(OnNcc(+-TUV_K2-AyiD?UjP3nQjJ@)YL}Q) zD#1B;s&f7}YZ_C2C^cWpEh{Lk1Q8Jd?J~z(u6bjdb8AyeyQT>5~oopzmsu#$5_~y+haY5+LPqh1+&i~&3r}~@wm`{;X`+ENY z=99=#f3H!!y5*QNyk6CUljJrR1DC?H^TY7iTE#KUzxg!&dC_*2-oo)Cn~B{2k-ha8 z+2#{d14sAI>)Dypoak8@20+?ETaP(~{0F?}_gxWz<>Vy=)1)8p_+X;qQ89A!TudQM{d!gw}?N_Gne~7)>?xS?n&(ip>tu=bgq=F5_FpiMS z-R2*{L-30Z3DpoY>=({sPFdiegrx;Ue3aWpf|UcvYND`x8Kg{L9OcL%*0ULO9%w>8sfm*J@1>Ema*wvG>Zg*F;29=`?KdCndS z9r29yjW>Vbb_jb`|RcOZv5aokAN1X-U>A3qzrFpnl=;;^30+&nZ)SD!<)yU|-Y zS%)W>CF9D$mY65S?_I6#x42*5%lO(m4Wt1gC{|^EmxZI@Yj^Lx0NIKXO{ax(e|UG( zz%EQs?vEqy*L0dt;1nA{TnsXR8jC&3APwt~Kt&sKgl~^FEhi@kUfo4NE3D$mel3uE zQ6Lkh2y7n0@hwG+jid-m#2|^xDFG3CQMR_bOF-f&hfU;}_+&{6IV=AW>94cPFCoT3 z+DQr!=zQ& zd6lt#Kixa#5=>bf3oD&9MfGk#Y^RlU!b%DNpiv=<;Ej4mHvjSGE0tE8rh;>d9qD~efAJ(7WifcV zfWQft!{iiXl#}a*)W$OkbfJsKNW?$^N{Vx^u<43By!wi*RVesYtyLz{gs(o`XyS0*z{i)X(Sl5s%Tf`hm-l#iwj@e@9!|UoVfJ81MY) zcY_hBzV90E7fl5E{1e3{H8z;bx}JA&|4aY>G&x*W;EpRUJ2)E|_P)e^$5SZC@o8lm zuy?{MI%vC|^lU~B9rCq}NBgbuf5M2bp6SDec##zb8v(hiB5CUf+R6V8WP5iWV9D6;Gjyk;I#FSuC%;q&gE|P z8UuH;O|jugqN#t6aYyOM=(!W0h)}%1-`4%xBzEW&`+YaDfA_HNDb5O8Bnfu#{JxjG zbJ5eiWpYf(a*$^w?|fH0xa9AKtb z-!8g$T*C`#9;m1M8NDexMzj&KeM4y{m4a{G<3;Mx+pQBmtc!O?n8<9uV7<21+xC}I zo&5I?({*u!e;R0<*v~U*NN+=%_*^X?v7p{%?(M!6ZjNascO2`_(B!V)&T{rw*{gr3 zQLXN}ucdoQ5QswMvD7hX-7KlX>MCvtzD$b$Mx}^QAk80J8LM~NW$50Mti8%Pg@It? zvi9s$w=zwnLZd;0WgV3F{9dXy>BNh@dlj~4^LE&Df0ugLe%NcQCaal&q=zyY&;0le z!>%Xl#YZ(!C*5`NE=cJhfT1VPpCYO=91OPjMAak|zO_-gzk zTV$=Vf3a;EH5+P6S~b3w-+I+@uQf?xqioG4wF#}uZk0i4EktQHDlMm-vo?thjikKW zsi?m9w`j##H!{=mZ!S&SA}d+YhCWQno6Sc++;fscVyvsDhPXp0UFqbo!05H zU30C|6P+f2i^FnONn(!fvIPw@FDS1I%DnAJf9~CLS80+HB&Cg%H3%axoGaQPCK2s) zXoO@UZYP3HaP`V(YmpUrco(a>Icp5(v)zQpDp%!xvFnsUT!ag@?adO1=NYYxIuOW9 zT_o+&uMbtvGX%&lDxzeuOU}DJ$m1|!q`Q}C$L0RKDFED_Rd+YT+r{aL?fFf5@H-fP zf73SKZ?Ct}_8aW`ed~Pqo!@7OKt$!^k(k#*zOl7^$pgwfy~&=1W+*+KZ?bHfCJo3~ zy6UkDN)Z7KwE2EttbRv^cf3Bkb$+?mj8Kb-CP$*pXT)Ji7Nn?FGDbiieOUZVGtg!86&g0iL-ZIBFD$PZY& z+`K(W$Z{rkJ(bOap8?7`kxW7qe|>P)7xYTl9>aZ2Y}5%bEwQyUV6kAuWj8&XkB>xq zHd@mJ`J*}7f#(SF@);61YqOx4QzUWpP^CpDk8&haJsMj5c(Uu|!#jv|1AbqbS4U)N zvhL3{Q;K63b+@##=fNs9RaT@hjMF2H+xssM?p0s1Mqe!|tA(}Y`-msPf1?(b9kBIg zir)k1H~SBaG2*F(c}vyQtotG@v`OptRrW<{8iVRvOmNvH%w!q(4z3b5(J}0oKF>C7 z{XLWLd26=4Ki|Kqe)!YIeZCR9?=#yqpON0oF0!Wk?wr%kjxEFCb1(B~{-NUW<}P=Y zs+dzqIE(e3zD^A4sr`t_ulX?w(K-P_-M@x_8TOp`V*Tz_3 zUVCkFw!XeFY>A7j7%`Z+)|Rd@2jFI*JT`t#X{QWIIoDP2-qPi<8)N2~QMnxBw+c+1 ziu4La{R=*&8vTBv@uoC-fZ+Hg>b3!VHgGuJJR!LQj?!y+TN1>J8iTY8AKG zQ!uDn3ZVfI5Zj~&IP(+4XTA!a0z;+qW>iYbAtR3~$tdrx$miYk=v6V3k|b^DB3NRR zi{b?cm^(cifvMtjI0LroF|5n=a0{UUE4_8b&vmS@;G+`h=!#=Pd}O)@KtQ{Nd9XP# z5J3<%M+9hwQc@Oie?&qJMEYPNL-%t<|AX?F4l6c|iBKQqD5V%h zgd)H$g@eAeXbfJ0B zjBo;*bGt0x7v5rQBikEoX2YQ{ponxwPmhLujU)`nxjP-sv!J|iwFXs=Rg8og2?J%a z_+P|J!+x>}SY*^*GZ4tC>QMIE} z6vEL&CoUN_Oqv=~d$`=Xe<5|$E};nt5^N-#ill_{W>qu< z1Kfzw24!f0?nKqDkpg9IZWQFgNFq@@3lz6|yxHd>4CgjNd32QR7i3$SpZ*Z}i{lLZ zbD)Xhd14X^U69jANQs-3?2XDrY#;4;-aNlZN4>tjufCqIvxnvHvwwKYu5&gmvEUAC zq zAiYGD1E=Wy$K8j^){NQ^#htG2P+u@6G`*Ntd?j;Laj_8(kkK4L`v>7xW3af0ywdK ze-04lpP9b4NAQ1sK+pTPjIYOVqqz1nu!VD`j1*))u8h5s)utO0?|#!LUvwiV@TkT< z6eFMi>gTD`2Nb;gRe$4!pEyQv(nGdM0!}vt8xfhK6E`FTk%oe?)pgzj0doL#Dx4&6 z)QWhjg0|1tIPFDjMyV+Upt#SBo&dP`e@iwDlpvpq&s%2T%_f*toM#6Jtls*K(~Ti0 z|0=%e{w<@I$dgzgwf!y>wuw#qE;jyJ!OH6Puf0D>5>+yNn2YNYF$*~gze_Fp%lVvc zw?eO96$;~$;%{Rxc@3N$FCExBVW9eHCP7Ufm#q(vZ^Y+s)MF4EMSD;t&!_BLf6NiD zZN_T`r*~}e(YXfc%KkTlbZCbUgC=8S#V5URuUa5}Id)-^?UOau*0<&<#Sqjj6s0K5 zD2BrG_3ki^G`Zd6NBmaPL($OESyJnBz1uyuw^MlZ`2BC+eCeMQ<#v~jC6|5a%~+aW zF4f2#upag+WR1XcW3BB6zK^w!#4?BclpuKDI`l1&PO z`o>LRN>DQsemA;`Ca$+JYozuR)QKXhDi^&g%bYWFto5EH-fYjqP+Sg0M_%riu`{|Q zLOm#lml-Y(C$#VQwf5vfTvSBslzW{K77uMRu^`LuI&?vW2$G4)6apJue_45gIP`-n z&YVgecUkz~H!%3gW6y2jS{2jl6P6f{NhIhGE~7=++o@4JUj8LGkQ`O}t%yF7TaHzg zWqh!$U0qnvqh4(6E-xjf$h9sc6&?f`&)4QmQ0T<8?~9R&mr)an_ve})nkV@{=%MkW zeiz0bpXpInqXxc2e!nS4e<2LH+RhJ_=Y33HA&i|DD5F&|a81hBcmVQDJ#PRcsfdCJ zW+*Z$1UJM?D2Dui(+a{tIaq)l2LJ6GQNC~Q?-}^!FzPRtD|!XS+XZ?mMH-U)PJ%a# zS6vH(966h2=c+xqeUi;HCT%_pC{8e?9Ne1HoKX_GsHTaNqc0TFf2xW)rE?16wTFxp z#eP>5l_a$q44f(?Yj^xL_|~44eZgl}N+tRBm!d5jx-^On0*fB;Y77B@wxWc1WjcX@ zgF}sSUzyW-vHDeqj~Y18dGW`OD{tTXV=r`MlUlB3s(j3?{-+`Le{NyzZiM$6obCn?=FH>@ zv#V&Ky)(Q)pn(tPAVLpWV4}ylwqe`K4_~Rl_Z|M->~7}u93jB!O*|WKdJhL1PD1vE zb_*mZe~*drE+#vE_gRdaHbRARjh@YoP@`a|G`L~y!GuIao%0U|Cs?h(d|qp(YF1eq zDuWwRKBa}4f9YK8bJS-Y_q08n_5|~F@!qi64TRT+e`QBya(8mfCrtMvJQ5l1wbG1F0Hq{wYV+z)5`|HoEyH&Rfz;NM{=_f-RZUdCylKwjz`~8ivhjf85hs zkqiRIZ#AC&So>$yL+eks14P0`H~Zv_QB+RosA9f`$mQhY2`HHMZ8GLQ7+&jYPVQxU z2i>9K`cnCP@J>lc=|J-3#w{F9aZG*RTp!~%X%C~B{oc(3QACoE#T4Yqag+bGS;u7V zDT)yfFCB(=DCPlP@P9QUXo)0TfAMz)z zx1i&8kQc93v5Z3q()L9rNb2;WqZJA@WX4iTD-}caQh7H$S5O&1+iYqO++&9%qx{&%H+vvNQix+BA8?DY!aP<^#h~uS81~E5=?w z9sNfBXgqKB#OUeL=m|3rJ9P-18otj+PjV#4h$Sr%as9O+ntc_de?S0J&iMbk{6c*M z+n#^YKJVA_J~qJmy3%{q`4Gc@U&T4GzQ4uuF#JC|zaG&+JpVTF;6c@RXO23E9@2zC z07IXwn(E~9BO%lYMvFJiKQG?z&9R4&D*YB zjQeLgcJFt@@!xVze|i0x07OV-#xvJQ)@!`Q%c*J>$Ptu}^IjLUG!X~F?1#=2>2+Be z;Yitc+{S&VWr?wOld7URU7+D!O-jWjp?V9V%z-%xn7ko>{;y9NwU}!BL@I`=+h32P z*kUm{m~tuh6EJtuWlF6JHl$YEfqeESG+db2bbPYO3navzf5xI!;@t9YV2O`WEl49D zE;>WJ%U4we=4&WiD(v8R=mxrY;9;*JOncW?%~z{#AplT{D)Jb5Yv`os46VV*a5oyQ zsag6|9n2HN&h|p8f{&~Pgc7WX>C`H~VPW#>WQ!x#tilf3q|YKlngZ+l%L&WeUkKQ| zZ*oJ$*6gq~f958U_yz2gP@8nX6j4ZuQUypYVwu8~Yh9x5E zSf#l?ueY znf|i9Ucy~Ya)u+Fv*3>6wD|i!k~c+6w>1S+K6ke4e>@-Nxy^?E<0?{hkbjx@kE4>{ zAeVm|bAOCSVGpIG;e%e&!?e|620Z#a2Y;C9)%crUAgn+7!qRtvVbI>RdQ*YaD@q(4 z!)Ljrrwo?7-2<#~P!4Gj*XcNXjLk5IwkSBAc&&-DiLM0-)({eV@W_U@Qc9BKUM`=% z2Is`!e_)S9+I)($6v2(tvE1xhKA5urnhH=UE_lhL*NnLm1z@NFU}HGoHUg2LZ<0mV z6LyBowX=4`6PBw1GW0N)-h~m)n}= z@U<8`3j1x+`%fk_Tsv-KYW$|~m_1Xw%ckGnf32emE80|kyqu$$3Ko?%)v2Xzd$X6b zxKQRu6ej{*FwvcPJX{K&OCpPD; zmEK}WRN*N=s<0#yE=4w&InyXT$r#p*8I(leMIvL(M!SjMa>nZR7dN}-6kTx{8)EDf ze@fTvf#7uqV04Dd6Irw|(yO!MqbqMH$s?Y>%+1%20HXI2sJligNY^e@XL}`P)IljO#xa+mwpsiu|2-^mgoY)D?-_ z-|z%;`Ofaoo1GyY?MMEoD?ZaWvh4jc8)MbtiV$k~^>%pEoWmZ+!c`?wl%$dP@?JS% z&3C8AGBG&YV0j4^1~%J#S9hs6X3SSLG)DGyr%4j5kT{DiYQba%TjRv8_lW=ee__dU zM6^@suslemImllRyorWQWH+)Jm;soSQ&=3oQSy8Ua{$(yhFQ;YO}_?zTY*uXRy~~nFA5dPBFnA&+^=Jw6I-??=?-t zQUC45r>AcjyNiWryvDoxmA?`re*tGB_MY9|^~+Qa3|`P-ZdlRwz1R~R`rV@Mh4pdI zQ}q!M0^T=!^!WrHK&GQ6ObN6396rM}m0?gHi;kE7Rj=CQ;L|l35ZP4!92+B2vYZrT zno=n_qGVk5;qxs{ggbQe0FIwO;jm%j$##_Ykmao`_r4?queTk-cAma>e=_X17NJ-d zunc4rS#CRKB3eQKdq9N0W0K+^84WB({XBGT1*$%;hbOyoE#~zazRTV5YTIG|f8LUKueWryRp${AtHAL~tmx6G;vUvb5Breoe# z85JY8%e%hq{N;09f3t3=$E0H+L4Q+yQrJk}C+J(I+WdN-zjn77tr|_NXthFCux)c) zWwyrO&Z}JwQMIpi#;G$pRm~<%wk;aPu~d{+OLJVRGEClwOM2^d8Y#`XRGOi=k9(Hx z_q#PoCXr^#IlA+9piw4flqv4VD~`H)ce__M!Z9+HFfuAqff1bEZ)rrWd4G4M(o#Z5 z^SRn+%56!sLY>{n^aWfzg%At+@^N`6sScLB_hjLgSqGJNF3L&WCUd-r%Zo%KLRWjM z)0=iE6S=XF$KbSX?`&(Plr0!uuFiQ=J#r$7nqHn%w(K~1-xB<**nWTe^1}VTA8mR* zeMj(bzIpZUx25_W8$oZGlYe{HX`~I5O3U4L6WzUhcKEbljPiBF+fs@9hne;^l!tP6 zoeSXm4r=4E#7nTVenr2F3#s`+X`q{|F;zgr^*<-z6#X+4ev$6*Q5Pq>`PaC=I~@%i zdVuptYHhMdhWryeNUfkVMemuz!nLXTKlG_&_{0Jf1QyjlqIk*;>3=Cfr`As4Z^c4| zb$@*CyCWAPSKOInxG^8Cqt*x4t%uv$hc10w@WlJo?|(3Fjqe$g@$^Q4kpezsn|(!E zL&!L^AH5L7FT-KoU7m}PuhnbS!GV(!fP@&4kc5iMW|f5M%nM8D-yn%y#?!&}XkDP}zk);|4#K8zD?VrqnKNy@Z_ zqW+S2g}Qr6E9<2Z=93=QWeZ?c2Sa~9sDUk-5D_$GMaWss z(qw;6C)D7H-%9+pTxo<})k4$gSTBO{nCF=Vge}>QU}u3?LLORKdkgM7rNvNsKm7sz z30%8uj2#;PRevx;qfVy8U%Wz z{RXNoFwLj4UBYEA+TWMHuAe33%XxnOPC@@12WJ~5pZvPJrbkCi6wW%{Nj2Dg1L5p( zuxN^8=AbU^o-gzC+8G;#i>3TmxZ;xG$V@V&D$1dpwSV3ZppQZ%1?twXN0Z|(H6C95 zARWHz{H9a>suVLb11C({FDb7gx{2pQdk>qT#dcoYmuc?ukRzMof+Ue(qFDDpweVh3 z19i%m7w~Ei8Tfa2zEKVbPEJGx_o92~dW^+SMuMD_0QUXQv;)EIDZtz0cBy>B*T2DQ zT>AJ}yniYlKYk>FL?x0$;rGH3pl^n8We$OaXl!G$k4eGqMD96$RKyxObUHCs7^Oky z{Em7>HZm8Res^5b>;z+5%8fIbp%F@F(958ihi6-G~xh`aaYi^*T=FD6p+D?&cM3O+V8-7N z)bZLQkDLP!^>2Ooi^lQYL5Aq#l@zEMCB`lVFoKav6ry&2YSAU6QPD_*nxw(ux}shh zq)*3WC7m2ZKus1n#gGjc^!8y9S;!tQ%xHuos6for^iQOWfR)v0WXh~8ii;7fu4bP0 z8dG{_qI`GaJRVemszCqz#RX)UO=gv`%y1DcJD1Up0w4_k|AWqZ>Mwx#R1&kS>000F507w7; z02BZKG5`%E5h6fRhKywy+oxq%*3e`DWMBXezyQOcL4iZJ1ovm7At8eC4umI+#JhB* z+C7?-v~&SPmwKa;>rFewdK3Tv00000H3P^13&fq?+GWCYb~}w600028i<2h+45*+0 z2{(B&PkTxR03-sEwTE-w0JGlR)=t5%g}j$x6af@}51>gQB~T~a1h|t!+%R^NH&v*&|8jY#MC?egq+O6HvGs!BdC~E0dfCR+7cJw{y z3IM7Ev<(0ND%f@JH5Es*0YI66&}aY+15E`CqMUfDDnbu@000M|02BZP0YCr&eD-Ld zk@cy66q2NrQu3MT<~C)Vk>ih2+eBR~N#jEw*Q04526G%{quGBnYqhCmH8 zG!p?Z36ns=X^Ex)A)`i#=o$pT(inhf#3qbW(w=0XlSvU1LIO0R1lhiUjMvXK8Z9_l+4^RLy9;c{j zqd*#D8&DFSN>Ws&(rN(2dV@gG>KK{;8UO$^(?cT@Odx0)Xa;})0002c(9=Kw&W{`rUcJYKT>2okOM#f z27mwn28Mthpa1{{fF7U#000004FCWD00ku^K{QN&nrSgGX&Diz?G-;$(;AHogvsiU zDB7MiPeau+0-mAhfb&!UJwP;Q2dU+M8USXX2ATi^N2CUgJw|{U29HoQ8X6Dx)d-KB ziF^!Oe+QgwiOngrQME;|wiU2PG?3;EhcY&l+00ilE^A_Q6gEdOBH9VER?^tHhcs2O zHj>(=z}lNg=Bln?vufBalsT0g(I&`iDA~;ol&xh})0mO1V{BNgYjbGTxovZQa=EQs zsx@1ia@EZR8(7;!5nGXn*EZX7#dAitD$%tTHHzUypd(i{r*#pw=Ech8i&tISa=FUo zxo%a>7UiyUa@r#m8YtUxcWS%4ZgZUG*EDpMa1yc{t4$PhAxT#?BSKOYC_OO4D8&=q zBDvkyan5zbkZKESlu_;{ffuQNZkTzc;;97@;$SUs*DIyEos(mo9TbX3QZT%{w57-; z2^UO^T~R$OFhauJ2{KBrJc%T-(u*uj0>~mG)!eUK+`|+#R1EYqFHqGfRJ65HP?N-n zsYJ37C0)Ait|iXrIZUi=i)h8JT-`RiH#a$8#dMBsu7aF16FtkqJT)SJRJ2G7-QBKS zv~sd-ySm2Q+}zll1Q9q+6Mz7MA{?DRgUJrQg~U{{Ssza>aP#(Ra5RC?Gnv2hH0FtE z6c`uj{_Fp*sk={S{gMlHQfhz6c&uBRiJnjW10Y+#C^AxqWE*)va66Ca5eQECKH&EH z?1&M|^?cZWEV5ACc~07YdmrHx<)(sr20Bu&iEmH<8i?S3n~v7XE}Zwrt~$}35D1IG z5!$=GKI-Q}0@~ZVndde&*R}x!!)J zh(?x{oaICU>BTlgu>t^r*^}Y9%gAdHvteG{8kPp9kIrqVwF`CmAF#%$Rn-5U1nvNo zq(CZXond@(iq%_&t3HqzvCzr-PF%%J7W+Ea21seMSkP0=*ZU38z+{m7|tz(j9lCa#j&|*>$ zpUk^!;xyK=n7qM%Kex&^t##4;)u)GC>PEpwHAO~y%0O>_ZIiJ(YBNX)2Wlk8uaZVb z`1-Zm%;^MzB2s_tx1}$z%^RhCo{nXiZuwL>fHydj1Cq-S;8<3i&&?%Q4g;Y}OE-z2 zWQw(V4DOEsTq-h@7ilKay9I1twrI`RG*lYI^a8kuFFi9yMg%1jx=I@$s{sKK5eC0l zoL@*vG95C1pHKbpi3?5*3syUC4-y2u6YIVWud*;@%VJ51a#>vW;fzO+a`BOMzyKl( z{B==Xes}$!tNR?E(gYo2KMK_*@%KeM$Zoe8$N;o)Az%>m%X7LHJT-0jR`$7TuQJ_B zf45bhqc#Ea@)!E5{Q6*DdQVlD^L3o0XRg$563703CPxR%-DQ4w{^fIqnBsgIT+`Pr z`uOGY*mH7FNXZ33UA0-0HqA{6vXZDc%hI;Y+w>w#GVMQP@5(D9I%gv2t7q5f9GZkc z`94Q~v0PL$EbJ9N7B8yubV_iLM`TUJ&#&Wi2j?NJc5jm1UHaPk@@h7FY&?ry5)V*C z(!~Y^5(em-1W?r(1c<;x1lj1Yy~J_%iMb;~MxSuL3mh`>lQ#HLyBEE;**g{sW}q4)85XC42qEQ*7{US%q!?utrQ^Fbts3#_< zfDpqMVoA9~H0)KG;bWn|QL9F$t4GI$0rp<#9bJAKSa|mu%p7Ur4~}uc82;nM{Di`k z{Mek{KMX@;!O=nx5J=-wV14QAOA zh>$`b>69I)x`%LdyqqgX-Oog@A!X?F{#U zp09zGB7F^3hsu?@J>#s6rwAG4Hdrh$Kc3FNjtK{FgHM*!mx%lRd@*ft=sit;8+#(_ z34~G#BoQDDi86(_&THzta?^LGDMw{ih023*r2!E?C10!U|5?>o@l3*VlO;*Cpr<&F?33D6+`fp@8!*S}g8pjug z5lBcc$nrhl$i*Ofx}RWY5J zN5*$!Lf)Jz(Ei&j0r$j$Lvz12`(VBlcIR!w(&W|G@;5f2$gHGBaz0wN%ejyJvb?XS zK&(-(Cr7H5nF~2xHdw=_K!C<+Bn8XkCcdQ;#tl&bZJoBl3*StCw22Tn?-3Z6^X?qW zM?-UdT=g06n0>eHe*viRRvuE3@94{COx^w40xQFc~LGf!%Qr{a^N0+;0+?r8TlR238~8;nW|uELU}uaeY`TP^6b zsLO3GJj<{Zyi??Vto6G-&5}w7VNG8uPv>y~c67`dz1Z{nMYP&5!BjAK&lv4o>=~$= z{M_dV{>LKeky~6PXtb?Jb6^!D|s%?>6TB4&1G4OD(U2Z3mI!0EES+#+bP|%L(8UhsSW}-LtJ%#FQU6;MZX6BYYcc6Yr((`aZ-%`yl z@qP5%B%_yInNFvgJ8vz(d)yQM<42?8|4<$&7C*uH!}9n7JZ@@T?P(|<&d%3l9n$Nikz~6{e*`US6qz> zbgrxTltcssInENl;m&uq-iGaub4ASVc8Oq9P2@BJzvy#;AFth5SUUM~C)&DnFxQ29na`6(13@9z*we{i&}I+bPx z)UI5@C(4##DO#c_Fx-kR=$Ta9DxE2%;}if*$LiAx_d8@}-mCps7CH1|yuqAB7Dy!p zR9HGmkfdbHpFY4q>{?;~O$Elx3eM1d2GxHcX$RiuftIAvY0|{?X)^TRvzt%y3q)kI z+E1>3l1_S3M6!~Uv$Y7)OqOq{FGzZfX9}_auBw}*YKMtGax#0u#s~2c8-@!N>pZ_j{g#Aj&eOU<16U|6i#= zW!^A*Lm_}8^#Ji9V<3me>FP4B(N@dbV#u3 z_;C#11JSc|bu}LNlA%l5_^G>B7Z&f2V#_jP2S;JZ)#Gz8xX2bLY9k+x!UVF!M2m^# z?3V#12ldxjtSY2qk5NVv_Z(zw*X(8#;#Ij_owHT+v<;inaa@GB;_K8)K5zHvwhN?x z>D#Z*-PE~o>I#g^E=H{1mX?S2R-P1H2COzfd@<>}3l5u;-h6!P1m&MiY>yt|_HmYf z@CdRBF5iJT)#VD#omF(o)2T5s$hcquMLR(jd(zudfji|7JR$F`nzB5oD51BG4OW#34#?Tthm@VRgE~Js!4%natrfh!DU)PEKGqJdy*U1HDRW78)`^ z`D8A_jlF1m@!Ge?g(uKV?IcL+zZY8|l!hrJ16MPfQZ8A)F_yDKGQOdlzh(P2`)qXL zDCVKwp5w(o5lw!?&L1;>C}qY-ktEA0uH3~-YXw0}z`F-2V@5&l=5kH0+LH?Dk)Hew zx-MG;DhsX~1X;j)M2qXocB)22kCmgT&3KP!D`WGE7Op=I3iMZWL2oZ`?gnWrHR#o| zsI4BSd}a#Leo4Y-!DfXMP3 zke>8qSzDfpswsB2eR62fBz*yHlT`$lGmQ3zt_1#ykFfE7XXHX2e7#bWp!B$7(|KobTWV1I+v2*MD$0B1_6#U0Fnn zZ<()^N8-bOyFCNRdu)}uC8I0JCM8Ckc0LOns1E zq3CA^|V#`DAAkMWcx~eH?-oLK321Uso?I zd|6Tefi{JgQcku_NokZ)5nv=CW?PsDq3ABfA)0J|ngcLDyJ#XHA|eC*{HvHaP~@X8 zxmYzOo?)8Irq)_bw?Z(UnaaiPU}boCJ$o1vtJ2ukUaRN_^JRsf&m2V=8K_k ztl;aj_Ltr-c(fUUQqWt-To#oQI|oR`(w<=m!d6R}hFZAxFg(Wx5 zfBBA&I0i&HnjRG#fyV)(>Zm4S_(?Ly%9NXnB1FRE(}tH|8Iii1V1W@5v{qRKWRzf> zgQL||NqQ2-WX*uBozeV{d z=r{sTKUuBM_V*pU-w_Pk#e93tWNpvPB27RJu-3hd4k9{z8U0L`VVz%g(cZ zxpEpuq#ZfO0%@c|0)iwGSVMDZmP+bHB$s^p^t5$+O5t0B*$f*0Qz^}0g+h(Kj=&ronGvh1-*sjzIg3YO@aH#@ zT1olvOF1$QOo=AIsDY|anM163kkXxhH#?)(>HX`_N4$Z0EPg2%kO==B7CGbyk!-Qe#DBgdQc%wAW9*u zq-znfOcZodx#1-2U)AU-l$B|J4U$Q@WaYsCvTkN}$go5aaK?jvEkuJ?S4lcMKd>mP zSoA%UgyF6M2Nb6^Z8sR@^9mGQDIAN)`cX8}Fp=Q`iweNJjok5!K|W9yYe^)~h|DO- zHiam%B85>hDMvzsWD*6en;_^JEU5(&wo{hkllKF7`PKm8%a=@95E>wV$qfK$4%G-^ z0G;{-;3%9T0w5(Nm}lg%i~wWjeJ$2K?-C>@%^Oo%Lwh30IH|p~F<*}Nd&U={U$nwo zIG(rUL{o^^nsva%lxa$z}EWTZ}7}yS#GvxID-;;4d&i5sW2XhA*tE!IJbl+sz_xpO@fb3-xG(X&sV(LcJR z{;7UHmHYy8`jf=mhU)U_^fo(__VA--q~uS1HJhC;M`5xcUCW6k{;)GrQMYpR_by%1 z-hO##5^t{x#b_pC&AJ9O2Vm)NW<;Er&Rab*W(*3F1XS`iW=Xp? ziOCJ5u9}P)#xmM3w0vdBLH+vL+~{cZbr*W=heKaVnwjUf+3J@j9j!gCdcOU{N~M%= z6S?vjBwUfMd9pml>&7gNeqG0(pEIb(V`G;~RjsRkl8z??J`RD$2A{k^{&}{2Ua3HA ze?j^+ef&$^M<{+x8mOO5VVdnTW6JR+8@154gNs?Xuv1FvW!Bd$@vo-S=0h6+WWArG z^_Bz@YhW<@VK@Q-Md~ImOkbn=O4$^IRbDl@>VfwxQUx%fxVs`6xmK)|FNx@zLBJjl z`Av1PXXpC9hukN#v+Lnq<}=2U=I!WWHlat_)#tc(P_A_zZbz^xKw1#*?z+ttxomxQVWmrK|$>-Z-8 z^s6vFJ7T-Z-B2tEy;h$teQ)%8bIukYS}dbP5g0{}MopxI*!rJe?%J zEEcCuf#&@Vgmx+(bDAL1dNkODmlV~rKQCb*oT=(O9ac1fYwHa zTJ}n%Wmj<0cxhK8Dfh~i!13yllwhoXlw`ve5sv2=sMQ^B$sMVhpV3hc5Mb^~TrDP4 zrh`wTMIK&7wmlDFs(C+@x^_>ITT!X|3$*pHf1oZPB5=tF2%VG@iY2BvBWDKh8Jn41 zptbJ~#msZJ`$bIY@Dn_yLs>;o1ftqyq=8g$qoj)}A*+>nhBZjeYm4S7zPQ8R?xCP6xl5H0F_F zSMW8?H5b#_b>%aen`*CLQJY>uHN?GInwE*e%IW1NtAfgp5}eO6;b2bYNbB8GJsvxa zaWTXYd2&Nzb`6031ceQCHowJx?+ENCu0%0(zUD6B^(z{8gvsx7XjA7ba%>_1x<*<) zn@zSFQj?|7 zA&*dF&18=8R9PX*Doj#6iU{=2Jr+ek_OZ*Zip-d*$VRaiEs|&0z9Tw+p8G??5wZe< zcXt=wsBZ*L@@7xdh#36Y8UaK|KoU6CAQ^O}boan`H`D3fX0LMc>6j|DI@8!5eioF8 zGIqNKb&|-{ZdC zN3UM$zAmuk?rOUAc{k+i-`kwRxl{P(3vcWY~$MqUC0R;K*7O^%87) z1Ek^-ZAo|<40pPPbNpTg9h8Roln0u)0}8P7;d@b>12`#v(WQ$fXo*I!c+~(F zX_Y}?9#TZ;#RW4s|FcIUA+HPbBUm3@w?yNE#8@xVQI5!&7zq0O(E1J$U_uk``n#R| zZ!697E&4}p112_Cz;l=FXrIuG(SV^{er*6QRnC@Q7rzW90KG>h5VWNvo5t zlgiNWXMDC~j<*JX%<@9Yv~FECC?Fu%Kyq$tdU{qM$<;u72j-PjLMuBq#3K{VX2oT( zgN*&2tX`7+Vx!oFq6=S-`H-X`07y!_Eud*0a}1Pe>0PR(hwk!gc|R=Xdp<=W@wt? ze=VUxTF%^bI?O&%6~-fPG@eynu^%ygP6AjO*+)Hr#GfLKj4T!-$$6+v7rhYY-qM<$3xcVk;WivWN#r# z=qC-W#{85%c!elg(UvlkwqyYF$y@JGeHP{^g4XyCLii6t`Va!6T)7!dQ$K+OAm;FtHtqufCRAdYjt&kTE9In24IUC!Wkco{x#T4=mqK^{zHhg@v1 z-}@LHiH`8FMExz2>XZ}G>d)++F$hz~f%KcDclkT4?OjkL;FKdi}~ z2b!Nhp~6U<)eGM)FYL|B1*1zk6YQsZq9P=J&DvCF^V!X&y2N|dr#usfUJQqOz73#f za5ouZ0fSl^3BZ5?Ib8|Q%65oE`Raw&Od4y54MunpN|xr8R4DZt$bu*S)~3hLok#*g zL(*C;;%Ve#q@^V`=gaXN;Z$KvWMVtQK!wF%Kg|H%&k4|OK(nF)aZ=kc<&0)q9^29LV<`uCjzB`2tXb`JBSV5{iML;)IiCy z(|3(*g~O6-aph%3t(NrxBVrO&IP#Qt9yY2OV6lpUz zkp6tcW~*;{3nu9U3E||#kIMQ)@~0;qygdcAdCs9)ZITsj;sDJGdhI23%{sdYakmlTgy$SIl2r8RFwt0&48sLBW1?4 zd2!v0=Hx$HS6vG2FRKyUW}1C}!-oV?Ng&zHFeE~IQygr)=BP(Sk(OV<4*I&s{2w)GPqKLDG%SDGgs`FYGnDlx)&29#U0jT8BoWf*Wy6V;2*S&(;{#6J{MRw-| ziOOgi%JmpNyYO$8R}TIZSY%Zjb1@3?>1F4n5O|Z=oDP-mXq_cKv$xKFyM^rY!+aVi zn+W#Q)4csJHT8@e`4{*a2V+eNYn*A2)nm((7NOIzS!;b2kGrXP&)l({zDd32dbdA| zH#|w)MG(Lc&47rB+|F)%oWDe3nL>Zrr{-AbUeP^qyLv8S< z&xKkf!=6vj4!D-6y^leEjxe?8ZPuDylMTR}c}M^z2L(B~hyns80uTg52^(8oQ+Co85I-e*IXn#YZBWo|#eCR*q{`xbBXtQ81ZajssD!HQ zwyk$JYprRvsm#cGvYV1-x^BE!*A?Ak)_#<&4FmPNjtUcRd#+{Xbf8SX@V7+k=aI=?!(UJXd^px*%}XCYjG)qb(BZ|H5E2Ik2`_^-`h@bx>;|VzxZai zJB@EE$<4`1>-~FLf$#BqW0JjZQUW4(j3*JOh=~A11cd%?TarRag>`mGP(JST_DSHx z0s+E*QV5VhM51tGTJf~j^&h`Qps3F3s;De$EEr#VZ~K0SR(~k7*MRv@gpy$6m6TtI zwO)ra<F@szzA*k>JeMcs8Xz<3NIE|Ip<5$laZ4KDj#zWaXO{t-)GxLIbLI%-91zx8~7 zQ4{b8PhM*!BGlj~^eb8&Tbs9YImANi26krrEpO~*#CGuGIh6M~ zPtw7MUaz7B-V~m%r!<69`T2b*P&bZ$8|mN7@jO^BFk_47K#JXw0y_PzM~%OwYa;y{ zH{M@vQykIW82(+n`h~Ra6H0i02HivV)U?#!r8+P-^l;@trcY5%jS5-rRIu8$y$4Tz| zF=Ez^ogW5a$W}Cs&t_q~-exCYj2AG~uvMfdvZi3@&^DLdwtZZTfv@ef_L*w2mHx3B z$G#uQtjB}o;WZ_?o=hztlz)(a%Ff)Oq>aCS|9=F?Ejvk_8W_)F%Qcq7R-4*C;IjKzi#88o6v}k>nD$i zvGVvnIzP8y8u%HrnzO~o4Oj7m11wJgsTv3Q*Ne4mX0E!wZN{BM1IF-w?J^Jj{_^a2 zlnKt``5tbzZH`~f(HHFEOzDRjNqqA!COxJ2C%)wcf93f;360A0Uwkd4rEIb3FYa3M>`M;UXFd8){$xX%LzE|ukFyzYBtS5sOj~k&(+laJx3AYBgwHKw)Isy z%Ucur=l^U-_}-nJy1|`)Ta^Wx1?PB~#({Bfklxp#!-vkkp3CQ}a00o*3HMlmHfNc) zF-sOcvCQ6XvTD_Rd$MY0!Ua?*#yuQ?m~me>;wiH{`)#D{AF0Xej*U3fCeIjXUIz~> z9l7AxBvofY9o-5#1^UcXt+Mzy+Auw}A_}uMrg`G~hn)s$XnRk84|UIE!wfuLloX^M zp7HERppyv5F7vVGQ>YZp;s^aL3O}DY8>c_UgCPMvr>6B;8Hg_3CZ;gP$}34TCl)?j zj0Mz^tzx`}^Shd0{fw$;l~(J%mILLSg0ko}0xpV6P6DmhYi!Oo$&AZ{-YpIkCpk!O z+{vxCo0fEp1tH0QPED@7HRe^GR#pmwB!U-|Gg9WCjekQKE>lUrWPFsW1ecq28rjS! ztjG};N|g=av^h1zS-AO&{A!T0$6&UONjnthzl7z6rp@H3A6 z1cEK@gp`7 zOW208Z@-otD9_@OptfOr*B9fI{uvy48~ne|mB%wV&_^%eG-HWwC?hfa=VNW7x)z4c zdwJel1N!W?+g^{gsE|+TUT66c-nWS@S@s9)V=Yt|;sQV+1OS2}2MNL=1t{GQS6^@W z&fa0=sF6Jtle1<_?Na;m)b%ES;#`p`n zjV9!~k>`;K9O#;Jq`SLwRlya}7fL+!5)vaM(nLH+EkLBh%@Petu&LqQxqHuXAd?+& z$c>F87nz5Ue9mf+QE94yEVMbAi2bUXso3N=JSQOZ%Fspy8~6lHn_Ng;=XRIYPOhG_1N=Q?n+ zE>jmw)T_!!EGs<}3)Lu<$}~uf(#^yOjI6VNFoda4D!`IaHPgtFy(Gd(M9B3OH1xji zQbii!OPY#--BqJn+}mSDv9fGdHqjbQZ5t6}+9O7y$yzAe8$}yLXtv0hh}tw;8Z87` zEJL4AAb}HZcW% zqeT##CbKBS7b}>ycW|Jhq_dfl@;J!Dy0~zlibS$hr7%jYJv=GGGgO5E>_}wg7$p!@ z<>rZaX+cJ5sTGD5N0fIu?2=C|l43(O-P!QwCQOE6^O2m_aypIO)K@@?Ak?UoQ#v!6 zE@!QY(S(KgKD9e{j$r*~Cy%<%=15AvltIAbZD@)x>NK@4cq^de6 zK?zbQiVVX(O)pBQD5<2Nf@I$JcNa;{ZdWNIF~hQgFMF?35i)O5oaC;=h@0Ji!9k?(fs8r&?4((v%GWNttR; zRbZ(~(Ih?GqMzW!53yw^`Rz-8@>};gDL+xDSD#9}w1u@KJh4TwA>*f6NqK51Ie|LJ zsM;0fl!sa0MOSQBS}C8J8FkA@WQ#S{NjzO*e=))@%bIv zOQv0PErr`BOzEXRS&?+f)>J#{C(nmkrrsH`&CL^AqzGviNEIZkkTk=85@JADpiVNv zZ6R0_Nl=rj0ayw{6{w6=Up1?h8yd!=SJD0lqq1^&WxGXz^sOlG{D5J*gEOq zj%e$b%jw%4a+@d5>bo}itsL6s`U`8z8lzmdDlRzH$HhT-Je+DcCp;1wAZ4XsES#n? z5YT~ALqbBK3f8>0n)26wm9I9uwOp?@^OdetYS*EXF^y5KTjsaYH?X#+TBO_y5^ zxa*wTO`BEA&nUI$HH=)Vl$j!jC;_G{A&k=&9T_x)Rfdq7d0H@9DA$$1#w~MPml~>z z779fLA>;VelW8HX*c~3uUolX;EbwGm0A5g@Br5{2Ib;k%V*sOn1Y~U^ZAevWRMnMR zVOU~9t0IuR{PA4lGp){=+4{X_`z%SN(SsC>F%hFiy!L#)IJQ0)2narMs&zX>$GV+$ zd>VtWZ5w0K-ty^xF|Rmci^jQhXsDaaa*_vf^z6BUDcF&gbmu>7?Weutcs!CDTp7;? zlP>nj%@o2T=VMk)fR? zwqh;$y@YuA9}ybSUF|_$a~deNJlmRr$wsk8DJo4xOPpqZK~x2kgg8vuT-dtQMl41< zwRK8>>Xcx+yTGHgl``2%Z+2)jQ8kAubmKE9bjoLb7?`h1mgj8+!Mb&qw|-%-9OsvK z+TO3|HLNJ~%5+1!bkg>3ZkM-Cc(m!4Wl=Z7 zFMHkv^EG+6r#V_Qh0V&*qIX@n*(5#{)88KL=O-N8h7?6cDvK%=iv+24o|M9BQkU3s z>)3v-lxkH^6%i$=Gj(d~IQNIddhaSMlC7nj_C*;TI3@8K#^Fw0c{K>~DvwXGFG(xO zFshk5PunrR!tcq!AaF%_Zuh;pG(+d3^CFuWlWU&bsq=xneyP&J#1WjKX}2 z(%%ci-r31DX(FBQE$FzuVY(f9~6SGd6UaR(R1GIf>br~@;>T)nm#90)7~Lzk7=NjJfcZ| z3*5XT&Z&i~v8|;ZK0_IV`nH88X6xqbe0I^4 zPei>^ub&z+hS9q$qDi#vr?zfJaEm46y+_nWR8N(e5ppz%t&gu?T-^EJJ8_|@T0N0QE+t3l zhtcF02ue@Pd(xgWX_{`^WYlecw<+dx!#AE>{Bnj#i{`_Ytkv0--tM(=rE4znZuGSj zc)QtktGJ=UR#if<+Ea@I8G|@USl3986oY(UM~^B?B8Yk9eDjN@_Dx>fRe6-qSG})& zSyNr+<=+{~$)eW-G3|N0Gi_mX;z7;Qm(%Zbo_RpEB}>z5iRNYQ+idWEDU-5BwA`U1 zQ`1`qi^q>c@JrJTMU&p})>7wcU5j<0RiIPPo_*@$HBSWhw&OmfJjVC2;XQd>HAu2b zZ98t>r_!lL%bMhB@w{YfC9->1@g>#kgC<=*u_pFv5{ZSID_fk9#E|h>Zm88b&Qo zeIaO%K)vyv6f@k+h|!ZdN|N?l7oeAr^>L3~p3LPvMRLzt>c_l)DV)f8$cS5P!Yq{w z!t7a>>uxflua{VRAt$sRy}DWiSBVrypN*OFapCu=Q^;E7_pUN|=NA*3mFkqwXFZT! zG77tG#uJ_G-RC~nWKl~uLM)0eWOON!9D+Fs1?f?)-g+{5Gu&G9*&jn*dxe?uaksE` zL$|fF;i&V&H1zj>p2D(coi)VdjC*9uHR@a5-R=e-CdRGpd)tJfWp}MOy0#;T*NmEY zb(_N;9NoGu)xx8OeqDTt@kT>^diCdDN7mjFeD-P)?O7MLxkr=VTPS?5k8{n{-Sc#B zml#Dk`nvToTuJO+^sm!*l3JgSXUP40-hEj!-a>bv^XI*PUP*<}rZlRLEcScjPC#7XCJK5rztrcra!4M>WJuTFM~+p+W7*HqKu?%wu&jf7jzx0@04d{?|~^&X#Z zo5{Xg6Vp8>e8;z@_Va8f&zs@yi*CtjTqP=s$|twCQeP;~dsz<@o%cVRjoXI%w5VAt zQKQrdVpfdUS|q6;h`md!h=kT&ZAxv@5_^`!h+Vr@TeEiUO{Jne|Ztznjc3`2UM00EvPi8HEeVY0hek#5+QNt@#> zFN?2Xd6qwqS2k$h*fjCflZC7k_}-b$E1Pb63yAauU8G{u6H`~8iTC{(%r82460u3D zfBMtzCsQI}Byq?!)M(2k?QXY!^3oP@>t5pfdjb<>T&++0WWI?4+%~%+ES!q6(;gUR zzy+m1^$~VCRuYfui=@G?tYto2h(IIe9|p$6xrG`vj=e+rTWPI0e2UO{>=Q_h|tt}>FO5+qA5v0D`Z|NeHC5Ht-e_7pCCqW0tLw|^$IZ_|aJY5$v*^jl^L+Vl zydKYepG80t?Wvt9{#veS0Sf&aN#zF{Y|`vJPtz5ud42nkK*t6v%qFWoADi`?I1xMW zz!f~BcLCqEO-W>rpI`2)+;_M95ce#Knx%q+KUQuBL_Knz`INbBc#Cz8h^-w??VT=L zwzB>DdHJC0zN1?(e@KmzKy|g@?iO@HeS06lGT6Xfs4xF@hD{ll(dC*naDT4y#3Yul zyB3Y^uDKOX9@`5FK?zsh+%0%XPYQOdbb5rXsYNz3=pMRXCJ9Sp7h3&hw zPP2f5uf&+cY!ll5{;-UFy?1)2#x|h>@-gQM$9D@g|Y5m9g;2T=XyIL$> z*{s?^Y)5_ZQ1^4WW9Zi0< zS#uNjT~9w^{AH%y5+#_A2V53X2$=|}SzA$h3Yps|u=gMSA{=tQcjRcV81# zG*_K}T~%w!XH3@83g$wI9>9cn1(pA2Du{8Bswn<27U|p8_IlW|J2EWtb=(b9#j}(V z4V>Mb6&-2Yx|V!>BSdAM;P&E}F#m>+*{y`( z?8`;xji={*PJ_yUmt`jI3D)V0J_kjHe@^n?i)a($JPHa+2@UD?kJkQFk3c(1aD0cJ z>TRdDK@TP{m}%cbriqa5ea>)|Z)x0oI!^B;J%7m`@WNi03%NP!LFkM=Ey(^^;7i6! zH#SYjoH7t6@x)2d(-$?Kl~!EB#i5GVC&Rp+$Az783x3tJW?6jao9}1iq+gRS)@L4y zgD#4N6WXALEH=HTE&eCk3lFk(-Os!6RV=HNxX7q)M{b+%4POzClltA@Nzhj)W`S%m zg8x8`L)OVfNuj-^7kH%;p61|U!Z9r?kt!|VS`%;RPTVCYnBKgWDmOV!ZT^~y4d zyHh0Xyqgv&sefsZ-ZRHIL27lFsdRp9os##)4{P&WL=ri|J$|tCAIebgh16g@KWOnI zoC`cu#S>eToVFGu0p3xsv)xgS{Pj`ZDy(bPQXDv8#V^C@Q#dh@LU7D>vKg+P0DMW( z@mg2K5sR3PUCp-Mg|&=3^Q(fVT6+8Q^fDz`uh6@rktx$g-nqCE8IjbXlA7q(KDsyyw$ByDM?|57H?lqyqyehYP*q>Nt3dJ0Xf#yTs|3^$-&@7&`eo@ zjH9xOOf8EE!I;leX3eb`YFG0$envQ~btxS`Cweil2duI?YMdvW(W2(}5e?DbBU`N! zNRm%2i*2cv)(|`{=@oy6OO5SfHBV9!C1JKzvN2Ud;Z)1_B+)s5jd7(s_d$nLVr?78 zjD)akW!74e-K(=keNdl@%Cw`-i0jqu$+Hbt5PZH;Ed~+Q<8xC90 zAkM}sZ|sylF2>J)=SvQ7d?tyq0`Ars##OXs1avLYYfQDS@Rr!Y(1bEW=eK^Qnk|B+ z)(q_}GcrmF>hK{-mqfwES-)FuDsz0}kjq3$sx&+%`TD!*ZkFmVE4A=&1D~R`xw`tN z=XKt}*>)xz?RCfc&b1zNR;cV(55Mqo5j8v9Ue)eT(t4A+X!W=)fJKRP&iYFDnR?XL z1-1d)RV7hf)UNyRNPCj%-n%0nHoogPi@wJ;&O3{3guC}UaPdP)JX7`LPH-c3WXf>h z2?zYf+z`km)_JY--|t6F?RyX&p8Ew`PA8hwL z7&VodvZzbiec{J96F20a*r`j{l)T}iJ|DrVW{i?pDjCIfLFR(2on=#9apV<1NZw@m`VEgzRLNhl1drldx7fj`VqjF6 zhpXb!+(Bo}TlK>o`;b>#9U)yJ-S^B1nyJ%p=A_G@m1}hZW%n(EJUz(X+OcRfUlGss zKxI*d&=>TDZ8?w-Psa(ufIdpGb(U3EzuuuaZ|zz~$wXWJZf;&9wwb7YxTT3RD$j&1 z0Qv!`;f6Q1$d*Ub5bx5P`V(9nUs0vNQ2tb{Uy^Y}YGI$WnsUQkbMdvsSjyb7kH54s zwibwN@0FE6X|_`V8Dj_%{YX1jS{9GDo%OYDug>?y6Y4BFc_37rbg}@zv7Nt(4amcd zL<8V%0{jqQU<+~VaJAVI2UX#GJjhHMwSn%4s$5r3cw>zchof7k1h7*W5;fnE)`M=9 zCN5?DR}y`f_sr+!4D6BW$u-DrN-LBn_0aEt z-S^rTqy9bTzPg&AD3Y=2;CG+9{2!<&8~L^NbgW1DjM}Dhhcy14H(JuBq!KSM zj-617*z{~mw+C8S-DB1-3SXtELbs^^0uQ7?muIVeq@6aeoHLB2_1m+(z%I&KUqH%X zc55v|auQ$))n(pT2`d(m_r?w29|FK8BcMsp_BQ8N(I?v-T7K75sHm-t|L*V*#h6G2 zC6|gx3{!rkxQ%MyR$FIleYR7i3cPf%v+fB7l1oKQ`T8L02$yiL!w8P8%?<+pFOR3p zI)u>zjBqxP2#5(TyAu=uy`$XY{`ow_k>a65p9>dwALmK(UZ4u7=r{Oi<6CLm7dTJf^JT^%hrEX0v zGZwXSWyxJKJJ43v>1Djhbl0~$Er%-;=^2m}5gEW^@CnkEg`S=fe;Qu2^Ey(Z@zemN z=!D(Q>ceSFEG?K2ErZf#xSn4Fuf0s#x1M8n4)xLun%*vb`S|`27~MJ~@Ugcg-GJWJ z_R{_FEdlqW`!Umc42v9@Q7OwW4;QV4NM=W_?OfbcVe3YhN;XL;CJo^diT-ph z{cK~$fiYBOaPL6{{>ehtaMPvS6oQ1u-7lU->x1 z?4V|A&5~;cF95fSw|xL>)7U5;oE^tuJtiXnl;Ro$2S8%&$DG-qNeU#LPu%3s#TFrE zBXtF&CJ5$<0)wW^5Go8qZjm8iL{gOdkO4l9uDP>iP&8qYMoVX8Fmk{lx)vFckLKK+Hk79U^Gaj={xiJl5th!u>qy2fw6B;=%D6%Xqv0| z+{5RAU!PUo$&D#VK$jKKj@3VhH(T2J$0DI*-W{Ey8RHp4y;K-td_Tq!h;>q5?>17@W%x#2fRPVj4?HgQPTjx5- z7V_ied$HUACjcf@hl|Vq&HkpTuef$ui`x*aM4W<5q z`hys{Wm)z6k>KXidgX$ii5n2r9RDop&;Kg_{=1QlTtyYEn>Y&@1#!3OP+sK*ebAqy z9Rc>}AMKR=?_@}*CT+G$?(ekTf1}L3DD1VAO}m{PK1t=Mu~bDpcvFV_ol-I~^0v`q z!4O;AAySAdX!vU1evd{#GUnT_B2ynH!>{j&dO(zrh0#07zz~*K>+(MZdmO)Ij|87a z4y?#;$;_9Zgc&_A@H2KcHLUv_WP1DI#Q&adyfc-4t*Zs`L$k~cuL*l^RPSv+mx;G^DBcDcAE>s?-<)X=LwufyQABk%)DP5(@86!4mYvxLJZhYJf ztzr1KnD8y~=*)6k+pkY+y7ZR)+-M|!!ZStU|3bPSRn?EJ1T;pc{`AY-5Z6FS>AyF1 z`;hPBH~Y_{`EQ?qOkokjn=0a@R@2*D-x!)n_oi`6%bQBE`FnrH+y19Ew>D=JHWB~% zbl$z86*`xtzAT++{ep5sw$w^6G-vHWiyZ3Z{HUsCFj)xr{?q8+8}bfgt4jkPS|_%g zm52j3OIH5^xc-q8iVS^Fa_sNd%3JO_loab{<_mTg*`JuAiNAgs{ZC+dc}8+fOInMr z_>ucB=b59G>=n&ldV*I*c~}9+qJb24pOG<948Z!Eu)Z+%`ImrikN&`U9I3`nq+RtA zTt92m9ds?&;+QV$kLhQ4{c1T)$?JE`a_J{7E>OKf4I`WWw{JuIbZ_cD;nPBsFJu#b zBJ*zR`*wQ;UxnkU_tFO}bxvEM2WZMHn%5e5UU8x?%s6y)Wl7K3v7#_6q3CLpz=yEx z=hdNl@xDRtehZDz`Y|tp?=Y!ueLNJh`}wq!2gh$$@Ny8Zgc-2vvoIpDu= zVt{u=b^f5?_v-oZmma^$)mA_DPZ}U4=vM#OeU*6Nnl(s@GL5R?dfA7R=BQ!uz*xx< z+SFps^`uOyA|CN>Z~gW8>9+BTs!*;ip zwD@(-Gy6*V>R#?n;LrbL4+VIga?g%+5@8R8em$=b^LD#wld+kx{?Fw8+XMEY?9;X{ zDDdy!)xO>*l0B04HZ$;k!)*h_U8V^k$&mfSJ`h zeDnA9p?KV3r_uO^DX_}^Z~8>|wQSU~-f5P3Xh_26d#$d^N8A~s*EJuklgymVTP%p4 zg1lesudS*r(PL_>LU#x9DWC3#)E|o%TPzATc5)X%jOSl|%`LVl(DIT#$_wt^gZ#Gf zRgEe*d{nvoOg-#wOuOJA?Mvx}D=2hhxuCJy19xEs7Kg>RycC*ZMw?FuIsr%>(vG+!N=-j$?`dyZxXaD`O40Nn;(z;UiX0&$B z8Mj||uElTmy=o?f$?2^5Eq_3JpjFRuT{r5kL9P4`uj|rV{AiQptF)Kt8Bfn|DCS$) zq1Fxiv(>8H`BJip0~QNHxF;KbxcArp96(>*OD;XK=f(I$GYu%_#dB_e zA$0khp`J#A`JlWu>t1ZL^0%mu;qhOHu}7h_dcWX~3Agq~Aq5i?HV5~p_d_@9nT0m{ zP_>n$_>K!y?t1;g-rvW3EZ)jbX%LVZqqp$QE_~LIORqXOT~T?x^q{iJ)+g-ppO+@x zy{hkTSL7{8w6?unY*{=%qMp5dw_#Ks$$qEB$F;mVY2cRERrR`CdXz_HfB)QDAs$eD zAB-(Ezwh7CMiQAn+{_PrIGM2|@u}D)VaQjx-SX+lQdFg{=IZ`yToPeV5BEEEJOlF`RRDF~y<90v|4lG@F4$*il*v4fp9QCj zI{nV&$L#y5=5Nua{Ia`RGh6tlD0-CJ53*t&@O4_n6{38SYt~BPCi{u9v55^R;&?lW z0JT5#eBI-hsYLIv%z(Y?*=2Boq z8Bb!2;8MbT+y+Cieg-6SGLgfK;|`tx7f$D9Wj0u1GIr&70*D1LJJ17S#gtvlrI@8) zFDP))95Of|#V#lPKYkew)*%K6T}C+~5lm;CFzLaf#HEYmAVrG`r=f+1o`8%&rJ}|& zNRo151|2CUu_0y500BWJ&|DEEX{BRyFbhT*KDY?@k|nx~E}e*I07)c3Ql~00%Hv9a zey%hmb_8B(kTMEPn8aSdaKXd2BpyBzZ>zxuflnG@hVNsQR@6mA>&?*TL~|oxvl2M~ zSk3}Ap@a><YX>k`Ovz{v&!93P^(6oZP+BHns5FjK!qYY- zb#VykZb)=VB%A5x#M0$wPJ_tUo^<80V)x;UEa52Ggu!AGC-0J;VYEkzLbMsLXo?ir z(*h3Uf%YpJh#?wsfiYrO5^Y{u366pRGV;K)$VLYsH&hxtOue{wfpfM#5eFflM)aI+ zFf%vzWm2m$9uC0B@Q{*>@pv+J-qn>4P7I!lgucnNo%PB4zUKyu1;4tHTB(p{Mz=WD zh?dOeYe;cpctTG~ZDj^c31Eg@2EYnVYd+(QxvW*o2(re~a{Mv3;U9MEUEAe^ zSsoIFjgXLAa^cElVkjMc@nheIOu&+A;|N@Npjq2_l_pVH8DO*E{dmPzD=3=SAeSEe zVcP+^T$^kQwZfaPZlzc;tO)QdG>136oI&)4oxIp`N|W^WaGz*#`WiM@TSE|LFi=s zhh=@}kN_JKE@; zt}aw8-Ry0?&8{sr{mHqY{0S}~>z$1lWlQ@i;IqAhx$%nP+i%A5$0x)J_pdx%(|dJS zAI;mjk4rk>pp7$H4`io4)|7suITPUNhEiK5*Xc7U1Tu;lHib^^7szR~&vl z&}BzLJs0@|YPWdUK91?gc9a(wZkx3m&1bxJ(9vD>1YE?$g*9tKZq9 z`=5Umm4|`oFs)w}Pf`hOac1 zJPgxmpt$)}{Iz^tGxKfbdEI`z(@p&5et{85K#tsT{_pOwj_yA2`#F=?YZ4Nw7xDbE z(#ENdd&s>Ka|JWSuqI6qas13RlfB8eJ6?Cx48}5Si6t z`EZmDAOIO=anLHcD!FC?<@v3ME}vkUK~l37&u?Tacjonn&CXJZqC!r& z&X?WmCXeyN__X-kYZ}^$`cCKLO9qj&GC!0RIGJK6U3`lfG)>F0(H=Q8D{wMr{xUT@Uc3RajKa+ioun?24q za6Qb9^$6v*y=&v4FW1Ivjl5g#>y^u`UG!y|Zwb{Q*wj=tsAR^>>=pZwa$T-4MHRoh zMw=lPwuoDc!pZrGA~CRGWzB}nT@*{7V@^{htLS$FxUBqqqnG-8Pr5XJh818>qE!k} z*CJ)d1D@g@84zD`=D`*LEt(GsPEVKjllFs(*3=qEmC6GHijK$irs^+{Jgo*6O_B@| ziJMt89UO>$6a4F#4lzSV{^f!eP8Lqz7If7l|g`wRVTBRWrBLQ?XmN`jG z0Gkx0Y%2?sqNBS~`s~FEhMWPt$-NJ6;D`p&e@RrWFSZMr<4L4a(GH)?Eni{iZ(-Shv{4YrKPIK4QBRW^VZ4D}(8s8_2!gcQ*`2|JybIeNgkd42;es zH{X#)WHDd1@=w|x2)Ix4Bqtfn{<=mylY7YDVdfC|y8-{75~$JJEYt}4%lsxsVRW7= zWD@Y|gFl^Lb;*HQP1W!^*2%2&R((hi)6a^)$Qao7un4a-UVfF!Y*U0orS)^6r-w}H zK&{lrnejUbXCKl({9d05Ot18*ZLNU@hmRa|x&bjL);3Rl`9q*W%qg!feU<@nYhss0 zv|w%c(o5aRlR?jL@1&#_W5cYrpFBG^}NV&C?_zK z*V;~t#}UW@OoXOLzfebt6}SC`1}(5utI1NjBwTMJ^3{5ly7O1Ce+yf;9o3f6vqu8pfb@{)D-#H z%+YoMw8Aw`(ZVCY(DFp2c$mH!YUo93%;_^dh>=l2vTvHQA+4L7pGy?Ko&i%-B)3#c zG?xAec`^}h(!6%LD=#V{FZN6CINsxcD%2@i?>gq^8?VBiG#WUEC)l@4ZsHGucd*T( zznVt(l*>2tESLlFZ2}nBAfIUT$acGhRf*z`8!D~UfB61MFPBr04c!KhCF)8Fh(z)- zmHNCgbl^Hl8uJmr5a((-WY@+{)1{xR*fn@bK-LF7ch2|g&+#dO-qgZtG;Mc3PoXi} zOLMKW1(Vth7xrWY+<{K_2=*Ia5!OKfFZM;S=vZ{@OphYgnk+l9K8ofy?snk&)r&ZQ>v4le5EfjY`-K#$~29 z8t0)}R9xn&%6a6J5y>cAA17t7PvpDB;X5ns{Ws}iU#=$-+axi+-0w)XooF|E>si(! zip>pyQ3k|@#`zK9zfSQx6e9c2Q2sbp#bGJl+u*CpP@m1F3ZKt(mfdU4TP@biUM;+r zXumCsmWqxVXI9b!RN+W8~-d z&&c2PiRLcv#tYYlsusMo-rt=%*_avAg}+@bRLvtoQIGXhG9ZOsX1nvr+APs)xJ6usf`p0QvTxn5_7(#gHsG z5NL>@lMp{_Q({b-^#SsvrsTCxbJd`&h+%CiygSB;Rl+Syh}w}^8=a2rS<&(%G#-O2 zqNV$W$MG@eBFiYsUIn*gP#lRMarKDxa}d{-zruG_|4$)-Dc9};+{@ES=OOOHb^A}~ z6d6a5{=0@EzWyn=i0*@>&e{M3)p~od&bD+*l1*HF)+MRE!vRUfsZ@`SP;tcLDSoy( z!gvj#!A7MGv_fwqR||Bkx#fRcU@0iF#x4j$jx%sz#!?5O3zK zH5(+jP|>MJNatfL{eQu~Z@eJ-&wuW@R&Kv(BFQlVXSrlJ(o5x{ju@toz@mMvVZaJ#RA4fMYD za3tyKTBbDvmuthU2R-WQejF8rQ92~jDjXZT57?t_r98Bu66L6Wtc=|FZ3pRrvc*l& zrs?y*G@ccY`)-Q?r0Lhs1kroXZfl+mlYM`ezmC(M$ySxNcqs1>q0Nqd$E&S0$L}?t zUpA{T>Q))?9JsYd6g+$H|JT)*SWI+{(s#(cm{5vEjXjrIeKlViS+G}Q&orD1<$eky z*)Lyxn;`PlmT2@z{ewwkD3XEQ;-WO%FjeB7r=_A&%cx^_M`w1} z1hLQf^Y!jp)Nc$QnVq}H8UTAQGW*ZqPzUfoBi|O^5@MXYYYke@im(1M7f-N`KSiAD zj{Q(Wk`Whpe&*?OpT$1j|GEDXSvh=iK<4Ft8DqD?R@fr%;Fk3iy1t|MUPa_4LjR>R z?cuG^BfN|(`;~Ch1kPW#J8t*hcJ?|a>aQ=c-#(iD)Othd7?>+!QGy4$0sD{Tb~pRXOl-4z2qd=MI~ z3{4P6M4evxBcl2&-{WRoN}=rgbS~Mq75?jbkDkgrQ6m0pA4JdUahQ`!?JpHbq>-hV zFH2~zIX#TX|5Ns(E^;41*ga`FD>?r+M|_nD$!2e3`cu^P{Ne3=;a(ca9&r ztP-t=UENByU^D_!mQ^%s+Y9GcYjEnVTSSqT+Hr>*+T6&R3MkFSa3DDj;=?oVIoxc! zSgDfi(%R3-vvtvUKtZ9sc+4=LjQ@i0d_n^p+kiBt(3%}M$t-TxvTpw+tN@ewAZ&_m zR{VxZgHS^WA0GVSuIS~-VF)ZO#l9cIh8ES0Ze^qT@K5788Dt5$I8x=>*cdVW<=hM= zVR4z4sXF8V1uYHDZ7vn}zM|O60}>@CJPBL?w}3A4DRga$9TdY=K`UwIn}t=0?-uc#byM! zp&Ee3$N{YT0L=t%S(p_QGw*=C3V%Z@gvyf)%Ss*KCnhBe@Xk#j%nkdPrH32Lt)Ye} zU@n4`qNj_g^R%=TMo@96urFNvwlJFm5${;gY6i+DbvA@*p zLzEB`r(%-%p`KR|m2y&82mZ=r&PEAY1XPq!83(_!wkD3f}IC%72NmluIMV!7o7x4=#}7<5Rs8l z5ig-)WbM+y13=zELoqr}mr__df{&lff~=`MTmTP8dq`l!!JaM(7YCdcY+Psn-hwU# zqc@xyv)IHMoqNG6K$gSAVQwxtilurYQH^=588ChjqXGz{m&>mLAiDIph%>^F8F{b^ ztLptE;maNXG9Ry@t?MP!rA11Dr*fWW8YIb^%Z&4hCz@kCP1YqLMGGI~l=#x8@#OEDM}-9@h1kXR-q>bUJG1siVQ7nTy`Lh~aij~KO*9Gb z!zo_6Y~Sw#6d)o>m%(W{$|DedVF(RuKzU-DEP@>%>t9sZ=*Y@=Gyp?3U;`)P#2iaoW2|dVE~g5!9n>J9(G3pgGEW8= zXBZpwG$IofJh&9SO95ysxEEX6Dw~tWFFbCfAdwW!=?zUwNYWeNz+Z&t*m-Vqq8mSX zaZsYt7St^AUmmBPk+e}G);~@L_QF<<6K@Mk760~w6%w^tKd??k77@_F_7lPtupLO*zLvC@keD@PBf$?}k>hJ0n0 z88Ggw=}N4{lZhq9i*{VtemA0oG!&|U!GQ)z(Qe-KjI&81uqzNStOrtd>Eh;sGX`gt z>Oz&`f(hsvfCR)zQJ|P&QhRb9v)GMKXn>+YX+tWBwLBU;M3P9!0!=mZP9gM25>u3z zQiBF=rkr$9#V2r*c#<(siXG#mz0siK%aWP45F1H1eig*90Ahg1Y5SPUDZrV;l@iOD zjSmSSED?Z+DG;0ra2nG)U{ag`4fyUy7mH;F7f|r_D&jEy8Bx#>(hZg&z>pG067cN| z3V9GB|3%F4Ldh#d76G6@Mj$-n2wCc|`h`LU12oA~rP16{+kWrymcMCc4xH@2|@<-CI<$dCR#ed&C`d-RB5@z{WQM0>1(^nWB`Jb z30xe)?Y}$y79)^hl!md6q2B-)#)3OF)W_5gHTsS2E=O-jxFLaiVZ3X{NKz z@vyV0u&*J6_hs<_G%7RQLN~RuYKx!5!40ClG0e#1yB=HzH>#uUP=qY$;553Yi6l-& zvyC;)_URqRG~~rALwwr2UHt|L8Wc3lr|I;v1L4cOW>mhdw6X57hK%z`e6Z>(7SNH9 z783k1phVC2ke*gV7W!;Mj6M8>B;z>SpsV*H{z7>h`Tac8pYjc>K`V~b`A?1{e~iUp zEL9gqe<~IH??wbq`%0!f^~`kocEay{`q8RJb=YmB!v8QM)`TR7izb+Z2WJwy95dYi z+(>1X8GLFgO1>x!0Id9*3Bl<9X|6shJNfbKrqS`v=*K@Ttv`N<5GBBTnWCU!5>GVh z35?5)=ZUVn6ciPcr1y)bOaI8_9$hyh>gy7wg$0cnj4`~6%bbR)I&|Pzq+-aPWbCw< z_}W}FDT&QS&cB`1UT1U7F~Ip zKOPfk`u5%JjvV3#XKS8t3vV51p*5AjOKCt}YS z4QF_x?YX6vzYPEADm#m87kMvU`uneN-=Vi?dq4H_UiH}7;dH_?jl$Kdfn_7rABC9y zXX|WP{U&+xURUA{B>eL~wZQ2k^YrN}JsP{_)nmP4F$IOh*bSSrXPf*pVtyaKW$*nj zQ}x@uGW@twetzxPuQKP=sxd>JNJS$Sfb|O3$#~c1O7Bvjq*hzc1yJv_Zt&!O&XYCA z6UX-H)2x168gFG@3@4{EO!0UV>bctfpXj#s!KAd-HixB6Q?Li+YHV?*CWx2Sn>xA~ zd89ZQV62=kL zL43&n$MR>z-a|{-fKNDM6_2m zK_UKtc4rQF@Me!8T$kW+_isd8U&x@qFtR8SdjEmx!NFoNGbDgZqJ3!AEDxM~Rpx0B zeG(+Zmj)FBWXqIt+^Cx}#)yjXD_+7F6R|xpRJcfDn!=27A^;)A`NX&;Bf!Qy#h6aG znFAx1Z7imG^jg3Wstc~`$^dAMp4*bkhHbdm{$mf!?w*$$+G#)XlZB6ufQCw@>NJ^i zuVt-dsJ**t_qb1}G~PhZpkC|iG%yL^YG<$Fo0Fdtjr<&YHPfzW_t1&osIzd5m|v)2 zCoSGlYEajahXQi8ZiR#xRlY2>1AIueb4UbTcKwW$zYrjXXx8Cu%z7B3jN2DyI`(Dr zNE(Oxby0vDg>!wre3$Lphh}Pn)`m4YJ3)bLl;saC`etPP147v^Md9Nr9KdX$vM!qm%R6HEC@Y1(V2n%Hg^1d!G6GJ(2}4uq!-lfVdw% zc}OTShBI@mYKz(W8&j};9Nm78OfoMs;{e&UiBnn8$)T))!AO}N(Tgfw>l(3uZYoPqEqUXL%L>?9h7Npt>2P9`8t96o{;FHGfAm(oD&6$t*LP%8GJ;<-2|qtv3~>1DGFs-<`juI-G22=@6OKX@Sfbh^emLN@qJceEj~}`U7>} z-g93g4#q5QWw_QF9a$`*?aq+)T0kR{qVZ#Mr?u@9Kd40D+LflP9bMI+sj@g!U~@M} zn#FSHSPDiq#1doS5@7+1Fhdzd6>)=XUja^|c<+KbftLsVv9eY?QgrCD7Xfu!fCc#h zE6I0ld^(&vSvykc+%V0KbLVr-I6u1Asr|2FKu9 z(BxrGSUAqRG!z~dW>X$+hzW-~Z&$?6FWd@tr8B1K1z9jAOvy=2&aF~sCZ*8eu``8~ z`2G=W>=uqw+o|k!Y7gdw>5|7I=tNBBR|%ct1qegG5?d~Ye11W z#zYf~ld(?4{O*KHvSwCR2L5!*&cdt{YP=9(-Ndk6+tfd@?asi62R0p!v5Plj4ZDyU zHV;A`(*3@dX){#Xb=!3R=W4|C_U^0Bl$G5Nceu^ z_kroEgXXQL*q6A;>KI>wY3!oLwV^KsYO5ARYbyssY~={mq2NJI1FrB%14~J;r}cbR zHIC3?JpA-!dvdNabZhj%h)c&vHTpr2EpCR@LP=E(r`8U6vtuRx5jnNk0ranI@|*(? zY=O~LF914YRe?^@wkgD5_c6=HnT%)hdbxFQS3w@)AFC;6eM5o(i9|z(+ zp7#-dO>Vzc@p^q${h7YvwZ+Ff%r_fdEb{#WMd=8Lwb z_1}?xqklxts(x2J8I}r9WjU@Yygq;aTI{D?*4yWb+xO=?zCYQhSbIg#IUyCOvQ<3N zi8*raKlowwEqRac%1^q;gu;J~|8D($B~J{nl8H2R%8gUcy}}Y8QuIx8PHel39`ee* z`oL!5-sQSSB044CYhI=0XK%LdXl+D&dxzwW7Yg%KfI)<1Wzw2m`XRYY6&z!usq-ag zGmLNU6!qR9SDFT2UF>+jq=ry=#BYrH{mc_rfWPxgLd zVmvwK=jihBflc+xht0#uC2;Jm6v%UZ5?qP1$Om~n} z@&yDemvWmMYV4I~%!X}Mcq(Oh69yU@?agv7ETKkpDN&V@LFLOz;BDrQnT%y()}a;guH1_{X~L^mtR-`wrD*#=dYL478SQRQBUmo35$C9IJ8l%tg|SzWaPrd%SV5{=qe~ z$a2{23ITyTHKz(0?)iM_p(tW;X2gB*mYU{)%)-w1CHsj-kh07$(*&!?+5Y$uz3Nq? zQ`6XA0z;;d+&J4$t#e)nW2{e!|70I19IyHN4c>WH>%lN+RK|y`gOo2%P6?R-njEImv=Ysr+Z8p*`IkNlO>z@2z_^zmPmCfSMFN#vwdIF`4u z1pQ*WdAp@S`*F8)(QM()pRn|4KKd$k^V*9GHatl*Yy|F z&>r`XtetUlv#}}}7eq~kw)V>HTQ#xvTDlwZ$i-*CustPY6Amhu*0{uZSYFx%Znzm8 zT4_<@@=W76{mE`QzCXvlpV&NS^-y)@;cWqIVy37)w5Gk2biX_!L75{;L?4vKWMfw4 z1mx(JMnBNv?oS>Oy)JCg!6cTqQM%Y30Ka&?2lA;W3ioO@O3}TO(h?k1P#J+MCo_p= zzEjbo$|iCtD!|OL1E&TS+_E18;x4uz@=7Dxv&ubMW(HN6Xn>V8(a|EgJOuk-eklY# z(}*@fdzIvf2yunK%q+{2-%nhpcXsZ`fa&=_vxgmlFM}39 zE6ifsJ7BTI$Z)@w1ij{%f zpe=^uvn_}>3^iFRCXQ1r&Mgg?0sDMqWjD_(>lRl2@ngW2DWb@iw%CznBJpvl<5no8 zYv4!Ac99g`x_=pwm=;Y+HnM``m7^5jv56I|7>_hX5&e@zs_bjLF|z}=1kFZ!ksrPF zcUii^-lYxB)r>)^{VLCHT#u4mA_&MR;Rym}c>bhWd~4oiC0?n7H>K$eXpwZRA~qdK z^M+6e{L&2s%3>{^8mvn#nJ@RBuyGtu7bmlnZ?e^QvAGKR$>s4Lr zJ^@J|w}t{F43}l%`Zog7)Evv>8tw0LITE*9s`}E?)6zX#1Y8F^QoRSuNBP~S^P_(Z z{NOyDr?ONITk}4@UU_hEE0Yqo{_d^ZiH!~{An*&#}U(~XbpPM?ieKExJ zu)AL_Sa{n6b5FqJRAAf`RKe4zOLXY2?skl`*F3`@m@i>CJ z|15Bix9)d`JG)@+OQz0+SY7UOZy)Tg1Ho379IqP=ta=w;sDCy&NW7~SWhS5O4Rzo> zb=1F@;cL}Xq1*mC?IC~LnuV$Sgm5Hz`VS)IIm{0e4lj81({t7iqU5@9V)RMJx~|lh z_J0xmssEt$o&xtEukO^U?l1fUzxBu~e?ILW^Go}fRm!hi_$P(zV%nqDK2r9J-bMX- zxzlJDs;xi2&V|ytIC0(Trxnupqhi&E5;2V=?PYSS`u^&>&Wrn%@T|NK{xQF}&M)PM z#IG04dyQA~yl27vr5PUTj`8u26XcrZ=;9@?6Zqc4A&S)Mh>o5^DmM7 zq1ASW`S3ibJ&XCT?}+d}x<8(Ocz>Ec*K@h(m-n+v$$S?iFYpwZ>r2u-NM8HZC4XUk zn)ZZ#8{%p1C456sBiTN%z6Z!Usq_oXC$&hu*WwtJSMQ=Pe?3KdiuZ9nhu%LD_9f4O zx^%9O@)Z4t7CHHR+1dGb-1&H`_8;(!e(nC8o)f6-{cMx=|Hf^Nws|9y*LxlB84G>~ z*B*5;olm^do{L&t43p~+duyrXJb!FT*zs;WI66I~Up&24PWPz1eAk%odDn^ghmA@e zpz@cCM8MRJgyPW}YOGyAcdM(tI}4zm1zp6Y)20yS+1M06D zil5l0Pjn;5Pe9P$zWYTJ(v$^gpHJ|=ri7%aZ`w>`%5(yGr8OSpe1}8Z@qZoX#5hag zE-S`ivq>WHqbMu#r+HNP0osovs#d)G9&yo$rdQKl`O(^a5%Sl{boHizPc#*IE>01o z!{e$nsN<8Bc^Z=Q1ES*&L>h_8 zF-&S}I1C(el%H(Tj6igLX@A3%cEnZ7@ym+jt2CId#m>v9ISR6C*|fnIcPWS3yw-RS7?`Vqoa`XsuQPAMKFcz>X;f+YTsx(nci zUljHFrRPJ_dm@~-DR`*|r6_RiO42&bL0vg9Icng_oRer(>=RXS3nIO>J-3_Rq2+iU z+C7AM4x@QWrm0?pbzO@?*n+TW2cneqRVsG!d=FP{7qi+Yc{bFoQ=QmyL%_VMrB{fg z^^Vm;-93tQdklKsbboB|FFV^^3FeQU`6>Jf%xz~e?knJ(qI&gunR$gu;2_tnP9%62 zcs}G0&MsOwzqcQ@yO)u8J~n(kY}V7{pL~6H=FhR%=JhM0y6d5v5r(q@1|(pBU=Fos z$fA7h+Z9CoCzSL)2>5}9r?mxiN3<>=C(4TGevjgj_;kOfzkj{`AKM>9=jJ8n$J{?@ z(b12oAGDvhJ{b4rkE~x4E^|~q8FrZRE{nHlu9SaEM^*Cu6Ip}y|F3_hekhG3J@;UnX`6w(y=3OnJ^w{H@A)7nM~j zDOfrSw_g_u?wtYJv|TyYI*9GN8j@vr7nMa$za-`596v1eM^f@G<>b9{;HI`@=pKdp zqw^Ff{J$dhdXX0_Nd*-W0%Tu87gTT6>Z(4h=~rEHAFt$-qVOZKI(i=1{PWsd$Iz0zcC?p`^Fx88mHc&2Q0MPvrzq38IA5UZ zLF9>fM$E&0gsOKh13rRLTqyWXjxDYC*8LcxDu3$sX?shY-fkY~#-i^-w0A#Fr)PKRdY@YSfaj;#@aMZe-=zz5KMmTBz9>`PoRIsJ z=YM7QJf~iFPLk{ggN z5_8BLYDojN0tWfj+#-)b*%&*r8iXLoFz(`HTj2o71HSMFDa(W$DRy$TwBU; z=pGKij)^(Zo-w-9nyxwcyPm0YuyiqSyno&kvFN>BRoNBN>LZCxF1z?XD8<3h^`8^Q zrxyF97(VZ4`II_`rRJ^zs{E*rbUm}m3+zfeg{rDC?2jf;@O5-dc}v?>aeNm+?_<2P zmm6hE6xqntj$wBr1WtZuTp&qHHr-$|frTbJ@=p{ILRNvG~ zoPSbY;8k3!;~yjD%*#=k_|@+h?n}TQZjZrVpZXijfEk^VH%*k=+$zpBAHQ^Lq^f4C*h%ws0!-pDmxe6R+;xj!MaJyx%$UQQGeqa@a1=2 zH91FP$vva-R^c9R87T1Y9ZB~@@X@Zf<`;p>)@9(OGVHDeaEln8$3%NIDXd=hiYbgxdLoN%>aP0E^+UdgS$`Kn72Z4!H0}94@Hu9aZEibHh8yJ_J1cg-3gp972v* z&!bT=+hwdOdK^19hQEhvG zQN<0#I#tJVTz}?ZySj2BxbEFZw-SQU!7GO8%IO;iE>`aC8V8nwCTFLSRv0ScR9K>p zOQe!jlI4{KVx|~gM37jnm}FMxsg#~Bl^Kk=+^)iRMXsF0n(pg@qX|7Su$0t=#H|v@ z-Ca4zATzGHTw$Hi?cF?yB=b_IPb(!Vq^T2hQp|$)NPndAQFBBqFsjh1r9#grB@z)e z$qma+E}W$2W^UbcnB1$8E{Wwi9u$O_BAyfps40;g?2b#Wxg5s3x-~BCi*YUORNS}KilCCyEjHA*?4p|Vm);Mn!Cqd+?z&Z9ZAOY;Q?0XIYT zm-LUvJH9A+AR+q0_lJkq?IoM{T<$2pe4?B$QGdHubFN(dTyNF%&NJWax$XL1^m|SE ze*e|?bLq2ca&a;AUKXdk{fH?$UpbgLgmEouqBZH1j%)ftgc`YTAt2`u+)umdNbBXSYL`qHDIb$ zG9LWK@`<*~@jS0S%)e}~*L26ZCoa}qXA^Lr(?kn&j_^ual)fSjfL!++b>@_pmni~V-;zBklz$Nw zNpgR!A_|}q){*JTfdnTo;5Et8MHFL@xysHJYSt_-;{mfP6UDI^o(G_F5`zWa5TZ0N z3X~EmEYHGlnd!A;AZ7v-YNUd0_&1dKFPLiMP9pE}hA>3V>A}ZLZyFOmx>HZ7X6tTg zP^Lmoy6?7T_)h?VMI}IhP^j+^(|^@95-9eNYUFZN18#J}VH(ZQP{+tS79%1r0_xHr zXm|eMdURFZQwhd1h1NX=wh|;-~(B@r!e0;h<_mTV*nqN z@|X&RS=m6Mbi%}`92UZ$fy-qaLEL(tlcj_c0BX@viR1wjmI9P>0Qm3(0LQW*7-G;B zGbM)T7)Bj#Aq+qhVzQNY4&?!$AwKLQ9EEb=amNO_AVHOcP@T$BNRWgmq5astIx<9G zj<1mqHr<>!5MK}>Sc$+v1AmX)@)NSJ{beP_grV?ivAxopg8MH>j!wN0Yeqo!!h#0Odtjx?ES&6G{9lX^iV`wTmUOi6fE@NZgbD~xk(F$E<_We=w{h+ee4KhC z5^r$0DaVW5jcJp2K(v?yz?=dCaGg&!#$os%glFC-aWWo*F$K2KqJJfa5J(ft;0aC; z5N;tsl%^Z z$*pEXDT5yv#XVEl9;VXbO*C<~M;r`q8RlZwV{0!rRrCu?EP6mm(%a|^#GWQT&tRsl zfeQCwtB#=9dkExUw0~+YM2%gzbb4*Yp-@^|)@R3iURr^dS~pQ&w3NHR7~J64%a4ITXsCntu#ZY*uni<6y#4JV`Px z-n>t539BO{{mE5m*}S8}*vG({B1yc8xKrn8HYBK}X-iTnmSiLL=%T6fg##ut1<8H_ z0gwVA{7&*jE15P(1&bAyKm~!2Y|#)sq2QY^A(WkHdJ9J%Fv-IgDLq9znmPGUk&T|M zg4h&cJlai~5r5A~7MzQXe1m2QP{u}>=nVxlO&)R8E(B{L%~s9Vc;ErWI3=gu(L1PS z>Y|*3R)bc#IZ1>Z!gPWqbqN@hTkIYufS@2JiG<-P04cx@!8qVlGvx6GPR~q*n6zz9 za8ZfJOVf#G0$8vmsSrT-1~nwgVwrVlkc158M1hYsM1Lej5{8`dK*ywEK){Hkc!5jd zA|inZDT&~MMA*J`dZ~b^5r|p}nPq8_QJEMrNEOS5K!^>@31)!=!VNY9GezqhJZYGx z6ap~v0Ey)&j5o0ai~u*`+T0Q02_)_7)E>SA7BJ)vUy3kLGAW6gwg$o^B0``9bhKbv z1}F@n2!Dauv3DvNtv+CY&Gi)$=2P$uYvWzK`~Lr2(WmJN=2xD*-0E=m zTfDs1jOojaVuO z4Ds!yjxbyo$AHK)0W3e*fJtHygqR_2Y=hAZI{Pqrd3gA_NvS-=SYZ=h6Hyd(u-R|) z**gFj5z(L^G$0cPNf3e`hyoen^3w zBY!kG37IxvyQh(egU!*$2A7fn5b7>q22!L#uq-V}Vp#&&6pCCjT!V}GPB4yW~6M)*}J;CPsxW=S(i%;L3@MfKwt>^5s(CdL~9 z2ty1@D9Je8Ot#WRB*;bt&KE?Bc_nZQDo~XMh%Bna73VLUpnxs{NnR~Skrl+&^nWOo z-HUfMR@?d1(M%pSY(~zB;uMcfr%Zs70)bFSKue!Bh#wW0Q`KCvctD2AK+5AKl>iS=4f^!?rp5@AVOLVjyD)PLEfgI`^> zANBYDbOEs6NKw`s&$p?5>C>#P);wjVZLQn?sxQW{A%vy_j8mk>E*^y$9dl{h5?sH9 z9hS8v;Gr67##rV`BrCLaaS<%rBC|)xJj`>q+GE=uybVOr4gmoW5SxoFiJNCH7!LF1 zQ16m-CqbI~2y`uf6=N!)3Q_g$@JX_2K)W0DeBD3k$riwLpd9$W=Vm%f6qWiwC9QyTVPX z&Al<_ao%a&=gt81<*5C1S1)$HUH}o0OO{&lU}Jl{B1Rv>gGUHLAAh0N)!6@rxIU18 zoG@~YvGHibY5_%4_jf?x3kb@Gx_>Ieks#xJsMBn9Boc`SuuZ_`^5D2{Zl!daaWRIq zeZ>1goZd5!fcf7qkFbFuEWELKeC}h;w`HIwNZJ|PG3~Z4pD3kdkJ3xn!#EglvWIE&iD6z5gjGSQpuh1Vy!HJ8vAX1c) z#b+xV;ES^KBd2Lkm-VIFHp=7o8#m^8)LSqIGdJM&6(2V+8-Jgt3QBitSJZ2r_+F-ZaIN@T=yrdLWp;@MVj;G@XhzYz0Wa{_W zd9QzLq#32Ohxv9=W9S>#66XXyjiq{;r<*BUy9-TL??Iwz(+O6V)K@MleEr*MS=|js zJ@jTGo+wKk=YJ0ueIp8DwYw4h(w#T#ZthBp1J26@7U9 z)sVCaK^ZEa;9=Ajee`xaS(-q9$6+7p$b7f!^*M91`%T+D(9KSN;pLO~bs> zO>@jWuJ#`WU#)AB;c2kumWA`Hhc8;*n=;OLGk^S?y&VvrX|V0pf0{k!XImpUHtIUn zg8pX~f`NcK((`zx$=jM2C&-}F2b>Op%b;~Zh#p(Pvq2QK`czf(Tlsn@6puqrdjZkx zsgiF?3PJpRT;(DTn>X3r;l+H;D>9jnood29O|}ED%{qwhVvKqXpM z_J8?!QV~S?IB}kJ46OW&q*-|++VkV6CS?wweRAj>7DQ*RBAP{w6Nw`1Shrc5YBv)k zboxs=-3W26*|m^!<;FE(Nj~CAeHpe(EcN81gSMe8ET~(#LP_-EYeu(SgNBlWCk|qc zf`UNFo3pAb_(DIEJ9$Axwau z+0W(TBw_oY{mL^*t%u(w|3DtAb;2< zp=I!%R$hjHN!TXO6z}j-|MC9^5UgM(x=Gx_b6G340G?;2fQx#E*u*t#uu=iOj|F5V{YTGY(3@##yS}d4>=ME&D*)VO8Gozer@LY7F7*6osJFf7PZQek4OI)TW(o+L+W?{w zU_}ZGY4JR)0X{?99U<3_K#njSYK54**WkJihOH z3tBVKIEp4pl)eHRdg9_{=Ca@yld2OLnMLto@kI@pcyiI|KvsodDAOPSr9$EndvE_ zQPhmho@oweoDe5)6Dbee9l<)6AWvUlo%4BAs}W>TNzC^;|H7ZP?n?V?(UWJk+V6K5 z#wzb9q8$n03g(UTA?BM7tAA&FJ#)O&$j-Cf6Opd2v)(T;cv!r>+HGvSo)f)!MaE@> z16}_K5Ie*y$U*f>RIgcd)h~WJ>obMhz=!sI44Qb0e@C#CwY1$wMC-@ zr4UI_w${6%Iojuw^Th#d zlUrgz?vk*=0pfYm2*rr8rs7X4Rj-qR<%{R~4_@MXsnFwTvU6PTcUPp;pI+v(jEpM;}(}G ze5R${J&DAh(kcCZ_23l)_soV2BF-IQVT^QSxdlXzIcASdbZvP!@rpi9%WO7h3VGNr z_7lZ+-&0)7a%=E6YDj%}q-=l$>ml9X3|HHW-r^R%zYAf~fX1e_#&g*^)etmVaZ;S@<=fWBj*!oG+N~8JS*s zsv3E~pV#P~MoTVx4g4ebEDy(IAy|Ki|5Dh~kLUg`!upfyA>q+H{Xbpl@cjQi;MZZ& zOn@Lgi6@(OVIR3u&D{9@V)%q_&tP%=5^A|}H0=9{IrwLIjJ#$MuuuT|9RDA&VHl^v z?k=MgdVl8l9RM78^vOQ`&4QJbnT-BEp!7-9=v34JK~EoV-}id`@9h8kpW0VHFQYlt z#@!tK$S>5ey%wsBF&O<8+M8eKbaP!MTx!v;Ek)_KHE%5mRD=d(=DI(twL<=(V4uOK z?>7)W`hSSgn;+Eh;nJ__m8BiUl%5ks9H;Obl7FKYlH!v7wtk-3*~MDgicn>`ZixUO zeL4Kil0p#sj$`eIFqs^yl5i42Y{w>X^0?1)$zsxHngl}jK<2u}aFWT(JLmd4FP3Sb-VXa}Tvral9tv91yJd!{O(6Ug3l6khIQHRonNov2JbV&$zf#`Y; z5`P5u>`CgS{3nLXsFdsYcFFtvwKp=ghK$B$&Agqd3%Ilcu_LoCm)AG=+QD{JNdZI4N0L1@CUBO3l3q#gX|Zn`+)68S!#?z(uh#_-rrrm zFQ<~CLl)6d7QT3hkYN0G{?F#eF#ZA>W%_3DZu8jKC$WSgg@fetxolPFaSeo@5r2?G zkX4Xb0PGMvlkt7ld5@-HYD@+0X#R~(fKEfdf@DSlVcL8iqxAY@_HRd%-ePFJ_(aj3 z^!<_k@4kMeJ=m3fVQ@5D13y$@XBOv3d|`)#?$MPVy{E1BPYlra{M@csZ8VX_kdkPm zfzYQ9aC)MH1V(wZO&ll2S=#B~ynl08%h68ce$VxPnDlhpSx7f7WeI{;Aavl#K|T~P zCw`B5L#ZN={YSBEk*YPcWs20k)qo>KW=mG|3DQnV6UcTvijhjiT{WDW(SO5yp*Z6A zHq6<&FX_UiEBimC`>*s}I=s7Q2QIyPVqeF=IM-Gh4mkN?IP}TS`%%P9lgss6Npj4W zHBK^o3+NN&%{{TR%-1!V^91WB%Qx`F8SRoN%59BXadY}R%5OMk|C-<7Li%y*iaaB^|4vM(Ozhr342#_%KF{0PO|ah2No zBe$2BxpK<+bd}?B(?-4jk9(76IC(jplk3xs$F@9mEP8=Y6Eg_PN@5A`TQUcg5 zGmdq>H1z4^JW19~$VW)iGatM`2>a|wFN@PYi!O7Oww#?PlokBwlokK;6cv(XHJmN^ z6R>1o_x=oj|NsC0|NgK4f9V7N|NjI40RR914g{0;$WRIZp;0P|RZ3DKl9f~ffB=X9 zrAQI(dL=ayioUtTx=riD^#mpz1E zlP$N<{`N2W;_HI0*>Qi5`QTHwD{SeAJYmxh`{reHov~87<1qBgw;Hd{>!G}L$X)S0 za!$G9opi~1%qzAt73GBQ-&Vi-($*JjMD}G4 zaoZC2q!h*}B9DrtYKSCXYRZRN7r`s|a7pWg%t)_HA@9mj?8$!vj6%Kn5iT=jR~om& zwpG&;c(pmf*C$*PkZC3V6X*Fo1K zSaFlDLT!e{%bkBqSxYeAE%KYzmrX;hOvq*p}H#uKehSr%zqWX=(pC1%Tx70+~Yr#Uy;*E&wKU25Y( z>yj+NbF~99s=M?o$Xdx6h;x%LmpLPxB(;(p;a#v!a3bCz9WoU-GtRGNFX;Aa z7XIjr$~Au|y>dT41WNwzjOmo`94BmcX_PJpY*70hTG*@h;_l={AJ55uOiQM{ameNYu7<_pttYRcvjt%#U)P;x+x*3-v+yCmeozVT%SQ&=C1hR*Lx#3Ek{Ik z9W-azRVH9hVOG)7;!d5CI`A2p?Q~0e^qGk2vEYE-z0S?6~w^?#S{E{>>MSlQK)3MJ}0ATIC&T zx$@HV^!7LB|cNP1p+49?P`^Tj2clWw^>rR87-^;}bXC9XkU{)G*~u1=Us#ZLbH z)UMvLl*x?MO>wGn11(@V&;IpR)bjSNRdavp;avQyD(%0CvCgP@?v6NDcR|XoxRzF8 znbJFV)GcPx+MExq5kZ@^ahJPW+kJw^y@gmbR6+SD`rSmrTm1cp0s@ ztdU!%W*$0Ie5SiloiYXsyyIPxTl|Y^x>M86VCN~U&Z*Ei_EIJ^UQzn zt2-8TUOR+$s@6OE$E9gC8=W#4ltu01&A2@< zCUdByI6Cuo%v;B^xOVjIQ7-rb+j_f&@9LilkSXd3!ZuRCWpDCS>hd6>xB7 zSy=8;>|L(KHi!DDg&k_yd*pu}U#W`Zj)I&TeW?c$(Ho?lil(TBptYKtBrtftvPr~tDTw*Zc~Gz{d*H8HIYZekR2MWoQ1y_FM4nYe7?^{HI%R~cM(O3` z-pW^+Nr+;nu#2_SGLeov*hR|okdHRelQ`waOKi52*^hjc?WWb-xMHmo)wT@baUEe5qCJK?h`i;80|W{BlsVOP(`gLUz$E@AI*M}g}+ zdHW5^;T|sJ+VX#jI?4J|zeERu!R;>HDpnO{=eDLP>N*U-$E4hbvUKQk;Teo{obzPP zm8$bBd!H+@beV^=%JQBbhqR9~!PvHkYCWaE;^pewz3U66Qz_!+_@h&a(;Q81-tOLR zjb*MF$#yG(^DRT6$<@^@=U8UzPZNS&#oJWFJWQ8$W$%Bxi_9y;CyhEz-x7vMwXB5A ze1v@FypHEX+3Ob_?xU}ZT)4xFS;pM-=zS5>lG44ip*@9xTkQz&_o^$k!s$;ca-*d> z8lJbcc0JEyrD(xwb6Ykqe1=tbBxLjSPQ>d|!wU=6xp#QNu(KgGxfUWa6BT@_%Jq0s z(}mz(s+E7HsCDT0d;41UcpH=e~p3v7~=hpVC#5>i&%+Ow)OJeRXIrDNCS$K8~ zLo+MDu|lpRpsSP0a8Y(@Qe=X$jt4p{neFQ6=d7t5Q&!v38{rtFZ%&(ZDNQXVtdfs4 z&%I%uG;%9ya>A~fT=`|&js8Z3U3^~<*t@GEDEWU27-d;ZLh7RT((4Zedk%fQEW2+k zxA2;$nHsviC>|qv48e}NO(M<&&20x9Zmf$kOpe!5gS_N=zDq}H zdAUz;+lRALQFYbp9ljn*spUHndcE8%EcNyZoxPb>W|1r3t1vRAj{x+gUByhbcFJ0= zRjz*vkQR__4UVptp#5J$Pnh{?d*`rTC&_A!M-bhthqB|%`^@BhNR&TN&#yI#QdTTA zty%X4C~d#i$Kd8`6k5q^iZQ8~#G@MCYxTI+(z6P4h~^e%P3G|4^=&nQBU-V&7PJ}_ zZ!0jO+YuX@LW}B4;;tK~8q`f`8S&r#cQai&|RQlu57|ojU7#+jMUMzPt&=L7YwNTas9EMuf>T zgmYIU{8~m$7d1pTMyM_-=Az^{3y3SC*rT0n8K|1;S+NsX)69omo5HIZs%uk)y=Q+_ zKij@a98*^sRj6B8ft=EsvzFW0D&D}Wd|JUK%8NB}?H?|@70Z(h&PuW=jIqy5%T|ji z6G)FiP+_kLGd&1bN{vbwv5ApCpN3sVnvz z=5=M^sY~h1Jr@SX}`| z`HK}*r5GHgLBAQ9gjNBiL)~HSGYi!yUZ8IwA90=xN3gJ{@-b-}dS5o3?B*8{h z7CQCR9d@E@-tbHriIP>kr89q8)r}T4z*Jn(KX=(H{bbJKVpBsLx7UpvJ|KB zmJ|G!>PD)+w2R_@S#|$>mH27@MO|B=Wk@`sVu$sbl~1%tf4v?kauh!;`SMrgm+@+j z8=AQPEDz=*Q;t75)~0_?7Wk&Kp`3}=wKHcOLzgt)TYas;U9Kq>R1DLs)N;wXD$!e; zRIDtY=@(_sZU;2~sSJNl2u(^T?v)+xOXN?{U&4@oa-%Qloe9N%*oLFQdAu?MFX#&N zsrqH$${65Z%62Xuslk*F{AhQduQHF!SqHgDz`kW_rk|1e*WpJbjY|9_P}GzD1=V#v zysDk(!Dqf7*D`w~i~S}QE9@iNA8Pv*T8BblYY~;7INGJ$APYOfYE7*Poe`MHJPw* zGOKu`48(BA6Ki7GY>K%tM7+Yg7m86^uqUoXSQ(1FxEp^qsamFt=>W^psg)OwG3HAW zjKOMBu+o95rRI)KYSDkj_tE;SsP+EjNA@cC9fa6DR4UbZBhNbI%TQv-(FeMnRr4yp z(E4v^zf>u*C+MK*i28Ba)T+%iL8B0=}xOKj(Tk4iZl( ze&Xo>UvPguwHB2*D!-II{M}C9NXz?o^B0sN`(%6b4|rm)s$~(Xd#HWa>XLO-rwDC+ z<}9h6Ws!N9jLKpd%F0-2sVlK|&KK+%eCS~rI4uK-O6G}Aga%blpNusnsG4e)ET%?4 zH&j3BGFD^fVLvSW$)b;J`eJhV$v%=FHGHk^`bvMihvHY5i|xhttB<6S|GhpXN@=A> z;VR@Ml96|uKZkes9{BrI>j&d#D&}oPZVjOPo$78IIK-J@UFu|PuoLl? z0${Qz%9vF1TuOZDl=6~!56?>MI@6|QUOxLOH%yekVo&4lpZ+21IbCK3GNwqfq=pts zs4=wx%m{WLXyCm84(gj$>_YAyM*s`Q|U{{i%G2<4KYPJgMt}ov?)_EE>hXGoozF@8Yr@ffcIN`3v#0=GOvIBf}3U`pLF&Uo<#9e?1_~o(T9VID(B<&5g(4| zeqFayFqbzxLpk9MSVe|PQ=Ds^BGq4qI4H9Pyi!?-ZZvP9CREod4h%^)l22lzfaM#d z2NL8b5{=w3MOm1FGLwZ`MyOpWhcLhNVIINF#ziu)y3pX-mlH{{7wtP!QaXPwg9adCc^)!FT9d`ik{_8^fH(5LkC0KF7qSd#URE+ z`Rr92mHF@2gZ!4#a(PbdP{BNwlo|)oFGR=HK1wv0ug)@8IF-)Hn)Z}c?Q@N*%fA9K zO-EZ{g4Wi^VM4JnXzx{AsD=XyOGT6P(9w6Ju%3{g;|Z}`mVK;sR9AoGrCtdfQ2ScK zRh68FX*64jyI&OWNk>c7+?Gbn_f?128Ts?L*!xuO0KeIZIr( z(Ej8vhojH78d2puIU?MpJgLy&mcrArqNO#hT&ZDI`(W)yfVtC2hDRw0{MaPjY zPf_5HBI`{YOkAgBec{kuLn`FCmeNZ>Qq+>@ImeV#9SGsexL1Ezv|)HjMxpOOU}ac1 z^7v~!#@@G$TJqOH>4l+Ad__}6a@PCNQn$$)$u2VK(oZE@@ct zq;0xtgszqC>|TFbxC@CX`A3m)3$6=7`|ws$G#B;0#rkWa^OfBzgkk`c3)-}uv|`m+A|e3Ry(SBdSRJK^oT1-G1%{XfloXR^Os z|G}kSGEcKFrD2s~!9Qdx_K(a<`%|p_HHp>PlOYb&6;prtkp@VtM0?}q`z8h=445Hr zDXAsSs{Q!$svU(tzEXNFVf=yockr&v4n34%dliF4+8Ub@NcFNx-lFn7^$I=}LF77- z(M^hl!i8BRHaR_^cROX8j-?kvfH+vH;wrMCxxEq4w*ttGl7{N~O8r_?FeQ>hz~)QU0lUsoK)u;-cMOT@2I)sj7cUN$BAZNlNNze*H2NgYl7d zk|%=UDJ^W(S6VVkXt`gR~>GyeX&STByCz zl_O-sBL!Sgx)!O5vC*uf3XzC|B?HK0qe#k?TF@nlA)+eLOq+^Umupc{=vWtu4%J+B zsxBvK4oJHf)FQDsa{<&c@uA@)@=r8(C!8u?P#PvYN`@)bB>faR)0c9$PRxZh?F|?097FL24-tRBm#D!EsxV)zRM*XYEgwN_AJk1Iq}if; z3X1KRvjvGvV3fq8F-mb3QZ+)E5!$UTU#LD}FOl^X54LVdoYDCVt`w?zA@vjwg)A!h zp+?Wtcs1w@MN5iT>SlTSINrl!rbugt3C$Ks%9$&JdeN?ari+8yM!NIZT4vdFD>;8~ zS*7Jpbrd(Caa1MOm|l}tcH4Cgo4oa%+b58q0=4Cwj zOh#{86`@q%t8lMX97@$Cl_6jyX7NjvC6qTxwvkW3r=UHTqjaMV%cWwkuy$4P$G*L3 zS7rDNU!=hFq1_Y4l*+2KI$D&l#RY$v*IB7!DTf3!N*iF>UFu-7F-%h#d$3`FXps8U z&=(@g3t-A5%B6v05@k`7MW~Bob7HI}>8TouFvw3!3u4NJwGXSIN8yb8XtJze=v>ug z>wIC5qXFJN`sd)pQ_C|wC@T4qPV_m#@m^=|olvQGmzg?L=%4Z*r?EIAg^GWr)#TA# zBNlWiv`+d(U5Up!6FNmF+?DKA+#y>|WDm$M5*N@zz09dtr+ZdHjQ3|B()- zfVr3R(8RM4`l({J79;h~-JX9H=2WM$X;bl1=smDk?{FKP355G6)ip|eRYy>(rC5>d zpJDO+t(wE|A&RB(RnpV&qof~Xcvb9PGs?NoAdiQ(5!U;Fq~R2KQo6}rh{#I%ley0> zEqv=s;w|PHIr|1gbR=8%DKdgO#VnCzW)#e#%4Q*u#AK*ovRe!>nIg!`CQz`;FgwaER*|N( zNEam*4HivNFv3F&TPU|wH;}DVQ-wzqa9F9ROHj~XAUUA73O^9K3uQUnsb(1Hj>$CQ z5ZQlwB&t@5pKU_bsIz}5yQE)&L3K<~AGoAjn`cQy9zf;b>XU$}IV)VPC3I9an^dXw zg!ct|%hF!y|C$|8cZ1*FqtV2bz**|_7TYXS0g;bNB%LIzqDizkFLgy4L2@W+g`;8T3@27NhSLzSI5d(<9*^Q*wV6B!3 z4w27ttm}CSY(C=u0sIbaa8#Fo8Wp~Zoy!m6j#_IqylIHPJm{*CwUbgpx3`}bFsYe) zM=5WzN1ips)m$VngKl4HlSJ1GZbq!G2b9m|oMCj@M5|4Nn>Z`Q4Z;a$mh?a)Rvp^5 zuC|0I^X+L<>1hOD57V4r*P78Z)EzZy+4I|Zp_sX9X74~0TvEMsb`RRB(R>XP@Atc> z88gprx}!d~GdZQt=pBzfIBIYgaZqrPDER6$?Re1`#p#7YJyVHS)vJpDma$hZ4_!OO zhLr%ik7@%}PqVJ1Kfb$Nb)4{D=4ca9!`bm+BmYVgCQgbgHogI@d-R0>^WS~%V(M)U zqjW`>)P6-2uHVyBe1>BFNG^bJU7(Bq@>#@)Ag{fnR5!7F!3p%OVF3{s@ZAfLcp%(Y z;txt>m%Z?MJ{#y7{?q6i_oDid#G&BN7&ABT0BYPA)G8uA50IovB& z4*?Mkl!jXOhku(9VI-YCEi)tNmbVhd*8)#)dlAN^$I5T4dn$_td&1D2z!vaR7FC{I z{!snRXkNP&`J9eDRCy=s<;|EvP>7bgnLc{nq<5v7)&wAiWczavNtIAF$Ak?Z_4**#v0DpDFTKRUY0nJ8J-U70 z{#w{{ceyC}K3!J2CxU47jPmLFM%djgzq0PsyjqFho^y0}MgAe8xTx$#nyFDy;*|u( z?GKo*+>0;kvr2wf2%JAue5^i1qm%tEQJTt%jvJYU!u&_zj0E=Z5$unFW#srbNbFz7 zesHRreJ1YF>D=>AI?JrO2K>o>h@LL#-$Ool&gd-Y=4wrlsVlr+PI(d1PWp5ZU+az%n3Cf9+U#n zsiFWRXEaRbGSJrM2IHp>U@KtD4l$jZukZ);V$;)TDQ!E~-_|!~{KpRqWmR%!1#MT8 zD0gU){!1y&(m8JNZ}$})+ub5{K4P|;;!lnFx%=;* zrvoLPoH^gb^PXHQ3(pm`FKvU<_1q1MZPRz0uuqn>)$f(&25Bixez**C&fL@6#keZL z`U-4Z1ukzr)!HmFu+=v~8SVwH3Ng&>ItNn515K3L+nZ<;)gZB>D&}gudttUt10m>% zOGQQYXrsK~lE8xywL=dzIKF~g+cWo;u8T0?vVU8D@>;Ff+&7+t&E7zzit!#04*aD#y>=8I(kN40c*pNzk zsG*UH|C(l=NK0v?oE#`{Rk`@~!x?RiD&j1iQ-l0>p3QEF-rGbq&+K_q zS4_HjuDuvOZDPN5A2n&&^ll@4A@|}&=gzi~&eMCK2aC-HYpGC}4Eud=#mqv|{y6GU zBI>a*xh+6zXq35UqLIjh}RUKT*LKjgxfWc{JU4V^m`I z?hg5$!k3;bTTtSQFWk%wMu{uBzSj6$`X+NdIPYg%)ZH-@45ANau8z@vaQ_lO;}iFH z4eF1B&OiB}O=8w*tg9O|w3qqS{JhTDO6ZXy7Tw}`7Y0w_kAMb*M?91&3ioGashW(i z>88?4&@cRD@tTDQqp80cz^N+ckPVoj4BSl{DeyVoRfg~ zaZYNosXpu5sdkxB@ry1oWmDqtmAa zOsrd38h-LjeAn}%KfIPUCNAy%D#gCHR{GAhLlT@wM?h>WqsR@j?qp@87M){Sn?rCs z34%iU7!OudTWt*frZ`9FsYZfste}PC0l_YgD#D-JXS;vI&<)5qkSO=gZ?7`YGc z&zb1hIpEt}L*J9PWR5al&3z0@3eq!vmt3QCH9=r=LW$}0z+L8k=q9N%PYKBIy5CyJ z_V}82PeB?W;dV|@N(G%1AC;6uVY6uP_5*92sMl~HZS!j+WM15))`%I@Y1)EO@=wEx z1tK9*s^wG9zBPpJt!ZFZ`y&se`$^OvTEVdC5+dD9SWr-f@V%_nQ+n!Xz_{hrcTikW zp~>s=pWLLZ{O>=m=ABxw4-h0BUHS2H`9u4qu}p@AhUMMkbB>>ne~Ub{^^MNq|IWl} z$DDBb4m5gQ@zLz`GyXdEZPL2kU!}k}%YX6k0JUM@kC#$(TxzDcECP^th!$!z8jtDa z?(N{brC*=sxtjiz|7x2F`y%)}i2ZEwYk4jV@)7uDLgfhAAl}jqT4#6KrQekh9H@D| zK_I&ElY;*K7$S|0NX+9E%s|M^-Ld$1OF%TP{lXo1mZF3WYm{N&oUF!_%VAJAvO&$tUXc%gEqV$NySMLwF8&Ow3 zc?3i5IbA68LaEnjpXngzwiazbB8?l&;1!r3m&FI|K?b4o`@+5o-yfx? z+)w*_om#Z>iF09|uWMP1^RH~*4}=xNZv_1pL1iIdOtt%-F${RF|G~=J06jaZFx`j8 zza;P$ySRjJ*Tj80x#u}#(R~-C3lsAJ?w(b?fFKHnaxIes^FCm`H9Mb{eALiOvV`{$hb zcaZQ&pZv?}rOae6jBa>{@JYO4;9^eD|NbQplrjC`PlYzlaswy#N7EGafBLihT*p6F zk^H~@xc^gk`B&TN+N?kHpId(a`K>I|pDD=6C(ATw3i<1Y<(y|M^xhEd7 z5q7#ZB$b8%fU;!~u(sGxWsLG{+FH!5z`F$-uX{mfJc9D8oY zUKM!xkxG+uq#jLc5WX{Inh>Q&&^sR0s?y?2VO28v#4O$foz?6&6KM`0HFE-_Q5064 z9zeO4!bHwsYoll^P0}>euLVc!XJSdUMBb#-udJ44IKk&sZkTzh55@sYa8gGZTfZrD7{5Si%{A z9+rk2quAv2YEAMQYYBWBua1eOpPHO#1R$YEIIpoWz?N4VAobSrV4Y$x`lsQI$T2)F zz)%`Wnw$wGH&b}L-ax-rzF(^m#awy9JcXsFiT7(nFl_u{JbeZ1FNFJLpucs|YPPT$WZ||Joa> zCIj%g9iuT)q|b4wdm=Kw?9b5;DLwNYgDG=$|%YpS8Jsz#>` zqm%+WEMrZZY96^Qg5n5UgW&0-f`0}C0rIUHR)r~^Q~MV)>{DsxjO$hvRYq2#omPSZ ztg=~!@*>?tSGjiFXr~8wG7tgZKNaYc_|`>S+AiK5uB2X;$H_|l+C>d;SWl~yOSpiV;3~~zIr;MS3C^l5`1cb$+ z@dNjGh~UVcR;^*KN1eFX#Sb2pONMiy8+3wnHb}*F+X)StSx!B*yw02)mOl{#;#1cm z378e`*J$od46k$fiB&?51VO1qL4HN2AAH{f!O%I$gSy4QI!#~gfDLp&)CLRU<@U4WjK0_R-Tch;?aVF%SDvpdC~ zK2#sHNGLD$+FE2fZ*s25IAhK?X+=QI>qH=V_Y}B~u?3qM z1(O*dHe<<+EtPOYOCz>PPZgdU3dpf}q7I)r&K@StDEH~%F=Fqd72K`!-X>!xlW8@7 zv^Y4O@m-0e{U6Bq0OA+05dsYe{~dGR8xg7Cm6P&QwivD(Dtms2=(ga^W#IjKd&f!Q zam(`Hv`BDQ4|JWN$^9mTG#h#~m3uW9-dVuC=YcFGYQdb~q0I-=;_OQURYIA`?G=d^ z?kHJcm=rncRf{Le(vI)O2UL%;YaKsH9Xm}q8NuGkWos^FkvNkpz%szGB1K=8HzUEf zsTY3|edz$8{3<;?1d${U_{c^r7+Ns0zX`*By!q^%ul9_MS>LUpDoPYq#v4pScBBSV z?-25yc+>L`P58zBj*db5#^_jtE_kx5laFfA!^X_qJZK*$(2kGegWq+;KkDjAK*h2E z!%yv)UFkR8v0|xQHJ#?3-Gkzn%ZJuF>)Rb-i;TK%&{vvHslT0PZN;#oJKyCkSiJ3s zcA*W+vQ*UMXu=TLqN~EAgV)&Z>p}96^io5KYwv=dVw|*hN@n|Oim^dYoweb!)rZoB zjV%L>{QQJYDOF9|E~q{_+My1CK;E2Kgm)nO?dyhx{pP;5F~ZuYC~8RuazV1#FBO}U zI_RzN>BVuTD>QnoZa_R+SDnyEi|L;c#1*1q4Ht_`vOB76l!hU#>2RJ0yY*@~iWZ2o z7f#t%vMQrW9)%1C)lz1s86z}bXfbJevULlMH%4R<(YC?~z6*jTLz9wP81=*jm)M|b zsINJ-7^_<~Fs1d7JY^h8Sron&(q&X1Yz-ij#shCB&*;LTK{Xu8LQpLYz>qfkjfcAF zsnxOCY=>E-2^d1peTHH=Hs=PdI)S3v5Ce)@d=tlGwSh{r)OIyd2rqXVO79Rgf6|A4ENBo?T97XMA4Xt zj@VEn6VXhKnJGrr6qk%k#4`F1f}GwPX_hxrvd|G4<^J>_94;d|31>pRDYkmZ2dBnp zOx;|Pncw74U!+y4j%n%L&kUqIXS?Z0~Bwd@7B3vHj+mISt-`MNg>n;cJgJxnHYpDQD+T1jJ z?kN^oAB)Eig|SXeUyHcL(t`61vEH)y2brGDJXKzcZ92v4h{fvVEpBVZ&&_QUT`4TT z4G!Vi1VA7bC5(>vSz^0vJIQcWj3&iqZTtz*+E0ifv2w}$uoO53X0B7W8y9NofAAb3 zHi&0d6j^|ajuZAqt#y?1(xnZ$DA2hx=VJPs@rcl9DqE*78}9CeKo+Xe_kb&n{lpkr z>ooJkA>^CbPHK8rI`0q;dpvs03{SRh4zR(}G|4;}QOctbfyetvdC;yptzIWw6b0B+ z00$eQ(pYYLpPFg*Rw);jy9=l#*>4WmxcJZ2H)Z!`1M{4_+RTT`d&7F=h)!1L;@sG4 zbLOyK#SDwp*+=y*biJ@?Beh!C1FOc2xt=|WH{B5jLFtD+D2HWrT+R%;+t#g3| z2XYta@Gsv)WE=hT37gPuDM?MkaixQw3Hchj9FNQLUPO!E%u3ixjk8xun8iNLX}~ z`?0LEz%*CYt3{|DvG8nqaJk)JbOqtXu?5E##nE$jdwm9SHxb7_NB4M6I+1sc9eIt4 z*LZwD1bBYB&!@xk>th$>9osYh z{XLe1XMBBtT16dr!EXkiHLzZ(e?dG7>b_SaHm&Z@CsIf_aMK>{V&pe|x|1vmV}m-lg)&XHk;)WG+cx@%=0Mzb3Z^ z9oDfk;}6cqJN$z`oB(*$rpgj)&7IGffYcAZ3QDyk9xHuQfB0vP3RPxB=^5l;Z5LuU z!as3r_Gu7?6;q8VpZ%I~79;@~y~q7iic23v3ZV&M#9vm!pze>{17~}`NDV{>j%430 zC(g&_zwo8e{+d19%YO;kK-4lAHHFpz4dp_b2<=UPmPTboGoF?gTiT9z96=6~re z(uL!8CWxhOugjX%|01AnRJXwG;gB)TKal+L{ClF#4Q+MoMsH<2%7IQe*%+S)ECF5m zCZrJ@-U?qqr?1_8>7~NHDDV3SC5=P9AIX=Ti~z2c@typYR&xg+;tmk7N9FF;)FTAx zv;4SD7HF@S7ZiCG)K9Se65sI7E$*!^I==Vjqj~m8?D_7*jKxay2YdqJ5Ds)kW&Oc= z&vn5wreWz6sJBc%if&>GBQ52MJ=wQ_86ghA2QaRK%4!eQ@EV3 zrCjCL=n>uQ>Y^JW`va;I$>EkxD7NU*rYF{W%ITJ-1}B8_Q4@q_AXxnqWL^&RqzM%6pZ zcvqVSDCq{Gr)>IG3TD(VAE4j#{=gy26r=1tH${$qjQ50f)O*zX|1vfVr#aJ6Q@EyU zg*nDft9tZfTL-Z(VApZ^iwUvKg)|euD_} zCq($EO8_3e|L+-K)&7sGO@ne0etz5K;Q@?owDe0w3F(h48U5^$ULxOsiwuSF)4dr z&Gnlq=RA8_0G+0ANS|+WF%N`khk3@6o6{(9aFtcD5HGpn}%2{yhR*d z!VJZ3q10$bx>t?+(>#P#-H2vEBEb;uoveVlSnJ#}c}}lpU%*k@ujv!$Q;UM$FYmKH<+x zh>(^9AD@n{4<04F5>d;JE>cITw(0D&DCk}GDyI|tPQKBn77kjNLvIMz05hsS|7sNC zN^Mo&sSvR&r^nA(mqO zLiJ^bSk}Ln&}Xj`@X=fGD{SY+xFqna%D8G$t>P;}uDE3Xs=UYnICc|=8HIU0_JV*1 zlbUlbG6db63n0?95<{F-+fHB@{}MVV!qt#Fz#-vV#Tn<)a4-2SL6v>kCq^8q=?6}T z{LJ=f1c=2SuZzl$m4ptVZ3sk8&KY9r45n@u+OfOzHG3mYv2Wklw5$Z!2@RH8{QV7ZPVynhD{({&Z`$FYCJ282Q7q51bZ1LI3m9IGY z7clI$7G%&7G!7b`B)sxuyjEm=qJRB&7Jt*r_K2xsq}wgTA?|sT-@dvAHn*q~m}l(w zoZKhik^GzYa(uxUj)Noqq9;D-vtto|GHsx(d_sV}b-;yG)84gE%cmruEo7Irs6@rp zB{w|!uS{PMB514zpPSq+vFNkBu_@4MngAIM=)V{f9YNsU0D63;6w7|m)%ATBvoA?- z!3C_Q>^S=7oEEL?Pq(rpZq60x%IrT$A zRsE<0CY98p)f^yfodCB^PW0(c=Av3XV47gzxH>YT8LKP{s#$6-g_Q_kw)%>8*R640MK;?gFs7x9{ifaB2#+)k*z3BPsI7-GWm( zZH!L4kJOUj_^MhS*8L-839|BE4g8*q%HJT50u}hGe=J$Lb@9YLTJn{uyzE;C*q{2G z>JavU@?TJI=(`oQwmdNZU0XHS1K}NBg0dkzSj@}tJ1^9q8rzBGqXg&n&$ll!gf{|j zc8SLmllM12EoBhoCU$$Svihk;7s>(t;d)qtT7lwrJL>U>U_H=f-j*#6(d;u|PEL?& n+i=s43-R5_1aDO!LoBbpAJRMm2!6TdR;{Y8UL*HdUhaPYDGL$D delta 222841 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