diff --git a/blogs/posts/2024-01-17_nearest_neighbour.qmd b/blogs/posts/2024-01-17_nearest_neighbour.qmd new file mode 100644 index 0000000..8c55e66 --- /dev/null +++ b/blogs/posts/2024-01-17_nearest_neighbour.qmd @@ -0,0 +1,191 @@ +--- +title: "Nearest neighbour imputation" +author: + - Jacqueline Grout +date: "2024-01-17" +categories: [learning] +reference-location: margin +citation-location: margin +--- + +Recently I have been gathering data by GP practice, from a variety of different sources. The ultimate purpose of my project is to be able to report at an ICB/sub-ICB level[^1]. The various datasets cover different timescales and consequently changes in GP practices over time have left me with mismatching datasets. + +[^1]: An ICB (Integrated Care Board) is a statutory NHS organisation responsible for planning health services for their local populations + +My approach has been to take as the basis of my project a recent GP List. Later in my project I want to perform calculations at a GP practice level based on an underlying health need and the data for this need is a CHD prevalence value from a dataset that is around 8 years old, and for which there is no update or alternative. From my recent list of 6454 practices, when I match to the need dataset, I am left with 151 practices without a value for need. If I remove these practices from the analysis then this could impact the analysis by sub-ICB since often a group of practices in the same area could be subject to changes, mergers and reorganisation. + +Here's the packages and some demo objects to work with to create an example for two practices: + +```{r} +#| code-fold: true +#| warning: false +#| message: false +#| output: false + + +# Packages +library(tidyverse) +library(sf) +library(tidygeocoder) +library(leaflet) +library(viridisLite) +library(gt) + +# Create some data with two practices with no need data +# and a selection of practices locally with need data +practices <- tribble( + ~practice_code, ~postcode, ~has_orig_need, ~value, + "P1","CV1 4FS", 0, NA, + "P2","CV1 3GB", 1, 7.3, + "P3","CV11 5TW", 1, 6.9, + "P4","CV6 3HZ", 1, 7.1, + "P5","CV6 1HS", 1, 7.7, + "P6","CV6 5DF", 1, 8.2, + "P7","CV6 3FA", 1, 7.9, + "P8","CV1 2DL", 1, 7.5, + "P9","CV1 4JH", 1, 7.7, + "P10","CV10 0GQ", 1, 7.5, + "P11","CV10 0JH", 1, 7.8, + "P12","CV11 5QT", 0, NA, + "P13","CV11 6AB", 1, 7.6, + "P14","CV6 4DD", 1,7.9 +) + +# get domain of numeric data +(domain <- range(practices$has_orig_need)) + +# make a colour palette +pal <- colorNumeric(palette = viridis(2), domain = domain) + +``` + +To provide a suitable estimate of need for the newer practices without values, all the practices in the dataset were geocoded[^2] using the `geocode` function from the {tidygeocoder} package. + +[^2]: Geocoding is the process of converting addresses (often the postcode) into geographic coordinates (such as latitude and longitude) that can be plotted on a map. + +```{r} +#| output: false +practices <- practices |> + mutate(id = row_number()) |> + geocode(postalcode = postcode) |> + st_as_sf(coords = c("long", "lat"), crs = 4326) + + +``` + +```{r} +#| code-fold: true +#| warning: false +#| message: false +practices |> + gt() +``` + +This map shows the practices, purple are the practices with no need data and yellow are practices with need data available. + +```{r} +#| code-fold: true +#| warning: false +#| message: false +# make map to display practices +leaflet(practices) |> + addTiles() |> + addCircleMarkers(color = ~pal(has_orig_need)) + +``` + +The data was split into those with, and without, a value for need. Using `st_join` from the {sf} package to join those without, and those with, a value for need, using the geometry to find all those within 1500m (1.5km). + +```{r} + +no_need <- practices |> + filter(has_orig_need == 0) + +with_need <- practices |> + filter(has_orig_need == 1) + + +neighbours <- no_need |> + select(no_need_postcode = postcode,no_need_prac_code=practice_code) |> + st_join(with_need, st_is_within_distance, 1500) |> + st_drop_geometry() |> + select(id, no_need_postcode,no_need_prac_code) |> + inner_join(x = with_need, by = join_by("id")) + + +``` + +```{r} +#| code-fold: true +#| warning: false +#| message: false + + +leaflet(neighbours) |> + addTiles() |> + addCircleMarkers(color = "purple") |> + addMarkers( -1.50686326666667, 52.4141089666667, popup = "Practice with no data" +) |> + addCircles(-1.50686326666667, 52.4141089666667,radius=1500) |> + addMarkers(-1.46927, 52.51899, popup = "Practice with no data" +) |> +addCircles(-1.46927, 52.51899,radius=1500) +``` + +The data for the "neighbours" was grouped by the practice code of those without need data and a mean value was calculated for each practice to generate an estimated value. + +```{r} + +neighbours_estimate <- neighbours |> + group_by(no_need_prac_code) |> + summarise(need_est=mean(value)) |> + st_drop_geometry(select(no_need_prac_code,need_est)) + + + +``` + +The original data was joined back to the "neighbours". + +```{r} + + practices_with_neighbours_estimate <- practices |> + left_join(neighbours_estimate, join_by(practice_code==no_need_prac_code)) |> + st_drop_geometry(select(practice_code,need_est)) +``` + +```{r} +#| code-fold: true +#| warning: false +#| message: false + practices_with_neighbours_estimate |> + select(-has_orig_need,-id) |> + gt() + +``` + +Finally, an updated data frame was created of the need data using the actual need for the practice where available, otherwise using estimated need. + +```{r} + +practices_with_neighbours_estimate <- practices_with_neighbours_estimate |> + mutate(need_to_use = case_when(value>=0 ~ value, + .default = need_est)) |> + select(practice_code,need_to_use) + +``` + +```{r} +#| echo: false +#| warning: false +#| message: false +practices_with_neighbours_estimate |> + gt() +``` + +For my project, this method has successfully generated a prevalence for 125 of the 151 practices without a need value, leaving just 26 practices without a need. This is using a 1.5 km radius. In each use case there will be a decision to make regarding a more accurate estimate (smaller radius) and therefore fewer matches versus a less accurate estimate (using a larger radius) and therefore more matches. + +This approach could be replicated for other similar uses/purposes. A topical example from an SU project is the need to assign population prevalence for hypertension and compare it to current QOF[^3] data. Again, the prevalence data is a few years old so we have to move the historical data to fit with current practices and this leaves missing data that can be estimated using this method. + + +[^3]: QOF (Quality and Outcomes Framework) is a voluntary annual reward and incentive programme for all GP practices in England, detailing practice achievement results. diff --git a/renv.lock b/renv.lock index 892b095..94010bc 100644 --- a/renv.lock +++ b/renv.lock @@ -11,32 +11,32 @@ "Packages": { "BH": { "Package": "BH", - "Version": "1.81.0-1", + "Version": "1.84.0-0", "Source": "Repository", "Repository": "CRAN", - "Hash": "68122010f01c4dcfbe58ce7112f2433d" + "Hash": "a8235afbcd6316e6e91433ea47661013" }, "DBI": { "Package": "DBI", - "Version": "1.1.3", + "Version": "1.2.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "b2866e62bab9378c3cc9476a1954226b" + "Hash": "9b4993e98e0e19da84c168460c032fef" }, "KernSmooth": { "Package": "KernSmooth", - "Version": "2.23-22", + "Version": "2.23-21", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "stats" ], - "Hash": "2fecebc3047322fa5930f74fae5de70f" + "Hash": "6314fc110e09548ba889491db6ae67fb" }, "MASS": { "Package": "MASS", @@ -55,11 +55,12 @@ }, "Matrix": { "Package": "Matrix", - "Version": "1.5-4.1", + "Version": "1.6-1.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", + "grDevices", "graphics", "grid", "lattice", @@ -67,7 +68,7 @@ "stats", "utils" ], - "Hash": "38082d362d317745fb932e13956dccbb" + "Hash": "1a00d4828f33a9d690806e98bd17150c" }, "NHSRdatasets": { "Package": "NHSRdatasets", @@ -113,29 +114,29 @@ }, "Rcpp": { "Package": "Rcpp", - "Version": "1.0.11", + "Version": "1.0.12", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "methods", "utils" ], - "Hash": "ae6cbbe1492f4de79c45fce06f967ce8" + "Hash": "5ea2700d21e038ace58269ecdbeb9ec0" }, "RcppSimdJson": { "Package": "RcppSimdJson", - "Version": "0.1.10", + "Version": "0.1.11", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "Rcpp", "utils" ], - "Hash": "c38d303fa39dfb730685f17ce6da6edf" + "Hash": "40d6a1f3bb5905ee998f1d094a320457" }, "V8": { "Package": "V8", - "Version": "4.3.3", + "Version": "4.4.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -144,17 +145,17 @@ "jsonlite", "utils" ], - "Hash": "20d81ec18bde233d8cc3265761fe8c93" + "Hash": "435359b59b8a9b8f9235135da471ea3c" }, "askpass": { "Package": "askpass", - "Version": "1.1", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "sys" ], - "Hash": "e8a22846fff485f0be3770c2da758713" + "Hash": "cad6cf7f1d5f6e906700b9d3e718c796" }, "backports": { "Package": "backports", @@ -241,10 +242,13 @@ }, "brio": { "Package": "brio", - "Version": "1.1.3", + "Version": "1.1.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "976cf154dfb043c012d87cddd8bca363" + "Requirements": [ + "R" + ], + "Hash": "68bd2b066e1fe780bbf62fc8bcc36de3" }, "broom": { "Package": "broom", @@ -269,7 +273,7 @@ }, "bslib": { "Package": "bslib", - "Version": "0.5.0", + "Version": "0.6.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -280,12 +284,13 @@ "htmltools", "jquerylib", "jsonlite", + "lifecycle", "memoise", "mime", "rlang", "sass" ], - "Hash": "1b117970533deb6d4e992c1b34e9d905" + "Hash": "c0d8599494bc7fb408cd206bbdd9cab0" }, "cachem": { "Package": "cachem", @@ -338,7 +343,7 @@ }, "classInt": { "Package": "classInt", - "Version": "0.4-9", + "Version": "0.4-10", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -350,18 +355,18 @@ "graphics", "stats" ], - "Hash": "bee651a42a89633eccb36dca9d9ab413" + "Hash": "f5a40793b1ae463a7ffb3902a95bf864" }, "cli": { "Package": "cli", - "Version": "3.6.1", + "Version": "3.6.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "89e6d8219950eac806ae0c489052048a" + "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52" }, "clipr": { "Package": "clipr", @@ -419,10 +424,13 @@ }, "cpp11": { "Package": "cpp11", - "Version": "0.4.4", + "Version": "0.4.7", "Source": "Repository", "Repository": "CRAN", - "Hash": "3f7d8664d7324406cd10cd650ad85e5f" + "Requirements": [ + "R" + ], + "Hash": "5a295d7d963cc5035284dcdbaf334f4e" }, "crayon": { "Package": "crayon", @@ -438,7 +446,7 @@ }, "crosstalk": { "Package": "crosstalk", - "Version": "1.2.0", + "Version": "1.2.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -447,23 +455,23 @@ "jsonlite", "lazyeval" ], - "Hash": "6aa54f69598c32177e920eb3402e8293" + "Hash": "ab12c7b080a57475248a30f4db6298c0" }, "curl": { "Package": "curl", - "Version": "5.0.1", + "Version": "5.2.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "2118af9cb164c8d2dddc7b89eaf732d9" + "Hash": "ce88d13c0b10fe88a37d9c59dba2d7f9" }, "cyclocomp": { "Package": "cyclocomp", - "Version": "1.1.0", + "Version": "1.1.1", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "callr", "crayon", @@ -471,22 +479,22 @@ "remotes", "withr" ], - "Hash": "53cbed70a2f7472d48fb6aef08442f25" + "Hash": "cdc4a473222b0112d4df0bcfbed12d44" }, "data.table": { "Package": "data.table", - "Version": "1.14.8", + "Version": "1.14.10", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "b4c06e554f33344e044ccd7fdca750a9" + "Hash": "6ea17a32294d8ca00455825ab0cf71b9" }, "dbplyr": { "Package": "dbplyr", - "Version": "2.3.2", + "Version": "2.4.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -510,21 +518,20 @@ "vctrs", "withr" ], - "Hash": "d24305b92db333726aed162a2c23a147" + "Hash": "59351f28a81f0742720b85363c4fdd61" }, "desc": { "Package": "desc", - "Version": "1.4.2", + "Version": "1.4.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "R6", "cli", - "rprojroot", "utils" ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" }, "diffobj": { "Package": "diffobj", @@ -543,18 +550,18 @@ }, "digest": { "Package": "digest", - "Version": "0.6.32", + "Version": "0.6.34", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "011ce1464a4716c488f4fc649c3d4d50" + "Hash": "7ede2ee9ea8d3edbf1ca84c1e333ad1a" }, "dplyr": { "Package": "dplyr", - "Version": "1.1.2", + "Version": "1.1.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -573,7 +580,7 @@ "utils", "vctrs" ], - "Hash": "dea6970ff715ca541c387de363ff405e" + "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" }, "dtplyr": { "Package": "dtplyr", @@ -596,7 +603,7 @@ }, "e1071": { "Package": "e1071", - "Version": "1.7-13", + "Version": "1.7-14", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -608,7 +615,7 @@ "stats", "utils" ], - "Hash": "1046cb48d06cb40c2900d8878f03a0fe" + "Hash": "4ef372b716824753719a8a38b258442d" }, "ellipsis": { "Package": "ellipsis", @@ -623,18 +630,18 @@ }, "evaluate": { "Package": "evaluate", - "Version": "0.21", + "Version": "0.23", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "d59f3b464e8da1aef82dc04b588b8dfb" + "Hash": "daf4a1246be12c1fa8c7705a0935c1a0" }, "fansi": { "Package": "fansi", - "Version": "1.0.4", + "Version": "1.0.6", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -642,7 +649,7 @@ "grDevices", "utils" ], - "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" + "Hash": "962174cf2aeb5b9eea581522286a911f" }, "farver": { "Package": "farver", @@ -660,7 +667,7 @@ }, "fontawesome": { "Package": "fontawesome", - "Version": "0.5.1", + "Version": "0.5.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -668,7 +675,7 @@ "htmltools", "rlang" ], - "Hash": "1e22b8cabbad1eae951a75e9f8b52378" + "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" }, "forcats": { "Package": "forcats", @@ -688,18 +695,18 @@ }, "fs": { "Package": "fs", - "Version": "1.6.2", + "Version": "1.6.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "94af08e0aa9675a16fadbb3aaaa90d2a" + "Hash": "47b5f30c720c23999b913a1a635cf0bb" }, "gargle": { "Package": "gargle", - "Version": "1.5.1", + "Version": "1.5.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -717,7 +724,7 @@ "utils", "withr" ], - "Hash": "d3a3cb2fefea5b3d4f8e0ea33c948406" + "Hash": "fc0b272e5847c58cd5da9b20eedbd026" }, "generics": { "Package": "generics", @@ -732,7 +739,7 @@ }, "ggplot2": { "Package": "ggplot2", - "Version": "3.4.2", + "Version": "3.4.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -753,29 +760,29 @@ "vctrs", "withr" ], - "Hash": "3a147ee02e85a8941aad9909f1b43b7b" + "Hash": "313d31eff2274ecf4c1d3581db7241f9" }, "glue": { "Package": "glue", - "Version": "1.6.2", + "Version": "1.7.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + "Hash": "e0b3a53876554bd45879e596cdb10a52" }, "googlePolylines": { "Package": "googlePolylines", - "Version": "0.8.3", + "Version": "0.8.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "BH", "Rcpp" ], - "Hash": "0426bf00768eaf006cfe2954a145619d" + "Hash": "d01f12d522d359286ac745c815dd8201" }, "googledrive": { "Package": "googledrive", @@ -846,7 +853,7 @@ }, "gt": { "Package": "gt", - "Version": "0.9.0", + "Version": "0.10.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -872,11 +879,11 @@ "tidyselect", "xml2" ], - "Hash": "d55233a737e43e44987724e57dfec302" + "Hash": "21737c74811cccac01b5097bcb0f8b4c" }, "gtable": { "Package": "gtable", - "Version": "0.3.3", + "Version": "0.3.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -887,11 +894,11 @@ "lifecycle", "rlang" ], - "Hash": "b44addadb528a0d227794121c00572a0" + "Hash": "b29cf3031f49b04ab9c852c912547eef" }, "haven": { "Package": "haven", - "Version": "2.5.3", + "Version": "2.5.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -908,7 +915,7 @@ "tidyselect", "vctrs" ], - "Hash": "9b302fe352f9cfc5dcf0a4139af3a565" + "Hash": "9171f898db9d9c4c1b2c745adc2c1ef1" }, "highr": { "Package": "highr", @@ -937,7 +944,7 @@ }, "htmltools": { "Package": "htmltools", - "Version": "0.5.5", + "Version": "0.5.7", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -950,11 +957,11 @@ "rlang", "utils" ], - "Hash": "ba0240784ad50a62165058a27459304a" + "Hash": "2d7b3857980e0e0d0a1fd6f11928ab0f" }, "htmlwidgets": { "Package": "htmlwidgets", - "Version": "1.6.2", + "Version": "1.6.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -965,11 +972,11 @@ "rmarkdown", "yaml" ], - "Hash": "a865aa85bcb2697f47505bfd70422471" + "Hash": "04291cc45198225444a397606810ac37" }, "httr": { "Package": "httr", - "Version": "1.4.6", + "Version": "1.4.7", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -980,7 +987,7 @@ "mime", "openssl" ], - "Hash": "7e5e3cbd2a7bc07880c94e22348fb661" + "Hash": "ac107251d9d9fd72f0ca8049988f1d7f" }, "ids": { "Package": "ids", @@ -995,7 +1002,7 @@ }, "igraph": { "Package": "igraph", - "Version": "1.5.0.1", + "Version": "1.6.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1005,6 +1012,7 @@ "cpp11", "grDevices", "graphics", + "lifecycle", "magrittr", "methods", "pkgconfig", @@ -1012,7 +1020,7 @@ "stats", "utils" ], - "Hash": "08352b502db2eae1e46364de6e6421f4" + "Hash": "eef74fe28b747e52288ea9e1d3600034" }, "isoband": { "Package": "isoband", @@ -1025,6 +1033,28 @@ ], "Hash": "0080607b4a1a7b28979aecef976d8bc2" }, + "janitor": { + "Package": "janitor", + "Version": "2.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "dplyr", + "hms", + "lifecycle", + "lubridate", + "magrittr", + "purrr", + "rlang", + "snakecase", + "stringi", + "stringr", + "tidyr", + "tidyselect" + ], + "Hash": "5baae149f1082f466df9d1442ba7aa65" + }, "jquerylib": { "Package": "jquerylib", "Version": "0.1.4", @@ -1037,13 +1067,13 @@ }, "jsonlite": { "Package": "jsonlite", - "Version": "1.8.7", + "Version": "1.8.8", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "methods" ], - "Hash": "266a20443ca13c65688b2116d5220f76" + "Hash": "e1b9c55281c5adc4dd113652d9e26768" }, "juicyjuice": { "Package": "juicyjuice", @@ -1057,7 +1087,7 @@ }, "knitr": { "Package": "knitr", - "Version": "1.43", + "Version": "1.45", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1069,18 +1099,18 @@ "xfun", "yaml" ], - "Hash": "9775eb076713f627c07ce41d8199d8f6" + "Hash": "1ec462871063897135c1bcbe0fc8f07d" }, "labeling": { "Package": "labeling", - "Version": "0.4.2", + "Version": "0.4.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "graphics", "stats" ], - "Hash": "3d5108641f47470611a32d0bdf357a72" + "Hash": "b64ec208ac5bc1852b285f665d6368b3" }, "lattice": { "Package": "lattice", @@ -1109,42 +1139,43 @@ }, "leaflet": { "Package": "leaflet", - "Version": "2.1.2", + "Version": "2.2.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "RColorBrewer", - "base64enc", "crosstalk", "htmltools", "htmlwidgets", + "jquerylib", "leaflet.providers", "magrittr", - "markdown", "methods", "png", "raster", "scales", "sp", "stats", - "viridis" + "viridis", + "xfun" ], - "Hash": "ac2c7f21c2a6d2579eed8aaae4c42610" + "Hash": "6e09cb2c9dc2e5a1e71a413e60c3834e" }, "leaflet.providers": { "Package": "leaflet.providers", - "Version": "1.9.0", + "Version": "2.0.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ - "R" + "R", + "htmltools" ], - "Hash": "d3082a7beac4a1aeb96100ff06265d7e" + "Hash": "c0b81ad9d5d932772f7a457ac398cf36" }, "lifecycle": { "Package": "lifecycle", - "Version": "1.0.3", + "Version": "1.0.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1153,11 +1184,11 @@ "glue", "rlang" ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" + "Hash": "b8552d117e1b808b09a832f589b79035" }, "lintr": { "Package": "lintr", - "Version": "3.1.0", + "Version": "3.1.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1174,11 +1205,11 @@ "xml2", "xmlparsedata" ], - "Hash": "2b4b803af6017e93b67ddaf0eacba918" + "Hash": "93e9379f4be8c0bf1862dfc7f720193e" }, "lubridate": { "Package": "lubridate", - "Version": "1.9.2", + "Version": "1.9.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1187,7 +1218,7 @@ "methods", "timechange" ], - "Hash": "e25f18436e3efd42c7c590a1c4c15390" + "Hash": "680ad542fbcf801442c83a6ac5a2126c" }, "magrittr": { "Package": "magrittr", @@ -1213,7 +1244,7 @@ }, "markdown": { "Package": "markdown", - "Version": "1.7", + "Version": "1.12", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1222,7 +1253,7 @@ "utils", "xfun" ], - "Hash": "0ffaea87c070a56d140ce00b0727b278" + "Hash": "765cf53992401b3b6c297b69e1edb8bd" }, "memoise": { "Package": "memoise", @@ -1237,7 +1268,7 @@ }, "mgcv": { "Package": "mgcv", - "Version": "1.9-0", + "Version": "1.8-42", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1250,7 +1281,7 @@ "stats", "utils" ], - "Hash": "086028ca0460d0c368028d3bda58f31b" + "Hash": "3460beba7ccc8946249ba35327ba902a" }, "mime": { "Package": "mime", @@ -1307,13 +1338,13 @@ }, "openssl": { "Package": "openssl", - "Version": "2.0.6", + "Version": "2.1.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "askpass" ], - "Hash": "0f7cd2962e3044bb940cca4f4b5cecbe" + "Hash": "2a0dc8c6adfb6f032e4d4af82d258ab5" }, "osrm": { "Package": "osrm", @@ -1333,19 +1364,21 @@ }, "patchwork": { "Package": "patchwork", - "Version": "1.1.2", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ + "cli", "ggplot2", "grDevices", "graphics", "grid", "gtable", + "rlang", "stats", "utils" ], - "Hash": "63b611e9d909a9ed057639d9c3b77152" + "Hash": "9c8ab14c00ac07e9e04d1664c0b74486" }, "pillar": { "Package": "pillar", @@ -1364,6 +1397,21 @@ ], "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "desc", + "processx" + ], + "Hash": "c0143443203205e6a2760ce553dafc24" + }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", @@ -1376,7 +1424,7 @@ }, "pkgload": { "Package": "pkgload", - "Version": "1.3.2.1", + "Version": "1.3.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1387,12 +1435,13 @@ "fs", "glue", "methods", + "pkgbuild", "rlang", "rprojroot", "utils", "withr" ], - "Hash": "a7f498a1b2a4a6816148e498509f6e1d" + "Hash": "903d68319ae9923fb2e2ee7fa8230b91" }, "png": { "Package": "png", @@ -1413,14 +1462,17 @@ }, "prettyunits": { "Package": "prettyunits", - "Version": "1.1.1", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" + "Requirements": [ + "R" + ], + "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" }, "processx": { "Package": "processx", - "Version": "3.8.2", + "Version": "3.8.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1429,20 +1481,21 @@ "ps", "utils" ], - "Hash": "3efbd8ac1be0296a46c55387aeace0f3" + "Hash": "82d48b1aec56084d9438dbf98087a7e9" }, "progress": { "Package": "progress", - "Version": "1.2.2", + "Version": "1.2.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ + "R", "R6", "crayon", "hms", "prettyunits" ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" + "Hash": "f4625e061cb2865f111b47ff163a5ca6" }, "proxy": { "Package": "proxy", @@ -1469,7 +1522,7 @@ }, "purrr": { "Package": "purrr", - "Version": "1.0.1", + "Version": "1.0.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1480,18 +1533,18 @@ "rlang", "vctrs" ], - "Hash": "d71c815267c640f17ddbf7f16144b4bb" + "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" }, "ragg": { "Package": "ragg", - "Version": "1.2.5", + "Version": "1.2.7", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "systemfonts", "textshaping" ], - "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9" + "Hash": "90a1b8b7e518d7f90480d56453b4d062" }, "rappdirs": { "Package": "rappdirs", @@ -1505,7 +1558,7 @@ }, "raster": { "Package": "raster", - "Version": "3.6-23", + "Version": "3.6-26", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1515,17 +1568,17 @@ "sp", "terra" ], - "Hash": "337d6d70f7d6bf78df236a5a53f09db0" + "Hash": "7d6eda494f34a644420ac1bfd2a8023a" }, "reactR": { "Package": "reactR", - "Version": "0.4.4", + "Version": "0.5.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "htmltools" ], - "Hash": "75389c8091eb14ee21c6bc87a88b3809" + "Hash": "c9014fd1a435b2d790dd506589cb24e5" }, "reactable": { "Package": "reactable", @@ -1544,7 +1597,7 @@ }, "readr": { "Package": "readr", - "Version": "2.1.4", + "Version": "2.1.5", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1563,7 +1616,7 @@ "utils", "vroom" ], - "Hash": "b5047343b3825f37ad9d3b5d89aa1078" + "Hash": "9de96463d2117f6ac49980577939dfb3" }, "readxl": { "Package": "readxl", @@ -1582,10 +1635,10 @@ }, "rematch": { "Package": "rematch", - "Version": "1.0.1", + "Version": "2.0.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c" + "Hash": "cbff1b666c6fa6d21202f07e2318d4f1" }, "rematch2": { "Package": "rematch2", @@ -1623,7 +1676,7 @@ }, "reprex": { "Package": "reprex", - "Version": "2.0.2", + "Version": "2.1.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1641,7 +1694,7 @@ "utils", "withr" ], - "Hash": "d66fe009d4c20b7ab1927eb405db9ee2" + "Hash": "1425f91b4d5d9a8f25352c44a3d914ed" }, "rex": { "Package": "rex", @@ -1655,18 +1708,18 @@ }, "rlang": { "Package": "rlang", - "Version": "1.1.1", + "Version": "1.1.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "a85c767b55f0bf9b7ad16c6d7baee5bb" + "Hash": "42548638fae05fd9a9b5f3f437fbbbe2" }, "rmarkdown": { "Package": "rmarkdown", - "Version": "2.23", + "Version": "2.25", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1686,17 +1739,17 @@ "xfun", "yaml" ], - "Hash": "79f14e53725f28900d936f692bfdd69f" + "Hash": "d65e35823c817f09f4de424fcdfa812a" }, "rprojroot": { "Package": "rprojroot", - "Version": "2.0.3", + "Version": "2.0.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "1de7ab598047a87bba48434ba35d497d" + "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" }, "rstudioapi": { "Package": "rstudioapi", @@ -1727,7 +1780,7 @@ }, "s2": { "Package": "s2", - "Version": "1.1.4", + "Version": "1.1.6", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1735,11 +1788,11 @@ "Rcpp", "wk" ], - "Hash": "f1cbe03bb3346f8e817518ffa20f9f5a" + "Hash": "32f7b1a15bb01ae809022960abad5363" }, "sass": { "Package": "sass", - "Version": "0.4.6", + "Version": "0.4.8", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1749,25 +1802,27 @@ "rappdirs", "rlang" ], - "Hash": "cc3ec7dd33982ef56570229b62d6388e" + "Hash": "168f9353c76d4c4b0a0bbf72e2c2d035" }, "scales": { "Package": "scales", - "Version": "1.2.1", + "Version": "1.3.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "R6", "RColorBrewer", + "cli", "farver", + "glue", "labeling", "lifecycle", "munsell", "rlang", "viridisLite" ], - "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" + "Hash": "c19df082ba346b0ffa6f833e92de34d1" }, "selectr": { "Package": "selectr", @@ -1784,7 +1839,7 @@ }, "sf": { "Package": "sf", - "Version": "1.0-14", + "Version": "1.0-15", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1803,11 +1858,23 @@ "units", "utils" ], - "Hash": "e2111252a76984ca50bf8d6314348681" + "Hash": "f432b3379fb1a47046e253468b6b6b6d" + }, + "snakecase": { + "Package": "snakecase", + "Version": "0.11.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stringi", + "stringr" + ], + "Hash": "58767e44739b76965332e8a4fe3f91f1" }, "sp": { "Package": "sp", - "Version": "2.0-0", + "Version": "2.1-2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1820,11 +1887,11 @@ "stats", "utils" ], - "Hash": "2551981e6f85d59c81652bf654d6c3ca" + "Hash": "40a9887191d33b2521a1d741f8c8aea2" }, "stringi": { "Package": "stringi", - "Version": "1.7.12", + "Version": "1.8.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1833,11 +1900,11 @@ "tools", "utils" ], - "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + "Hash": "058aebddea264f4c99401515182e656a" }, "stringr": { "Package": "stringr", - "Version": "1.5.0", + "Version": "1.5.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1850,7 +1917,7 @@ "stringi", "vctrs" ], - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + "Hash": "960e2ae9e09656611e0b8214ad543207" }, "sys": { "Package": "sys", @@ -1861,18 +1928,18 @@ }, "systemfonts": { "Package": "systemfonts", - "Version": "1.0.4", + "Version": "1.0.5", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "cpp11" ], - "Hash": "90b28393209827327de889f49935140a" + "Hash": "15b594369e70b975ba9f064295983499" }, "targets": { "Package": "targets", - "Version": "1.2.0", + "Version": "1.4.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1895,11 +1962,11 @@ "vctrs", "yaml" ], - "Hash": "a1e56d84e94c41a03391aea66c32b732" + "Hash": "760c8dcdf3a21b7131c181f02705101c" }, "terra": { "Package": "terra", - "Version": "1.7-39", + "Version": "1.7-65", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1907,11 +1974,11 @@ "Rcpp", "methods" ], - "Hash": "6037d18193ca3f16900646e773937094" + "Hash": "8e245fd4eab07bf55ddb2e6ea353c0e1" }, "testthat": { "Package": "testthat", - "Version": "3.1.10", + "Version": "3.2.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1922,7 +1989,6 @@ "cli", "desc", "digest", - "ellipsis", "evaluate", "jsonlite", "lifecycle", @@ -1937,11 +2003,11 @@ "waldo", "withr" ], - "Hash": "6f403dc49295610a3a67ea1a9ca64346" + "Hash": "4767a686ebe986e6cb01d075b3f09729" }, "textshaping": { "Package": "textshaping", - "Version": "0.3.6", + "Version": "0.3.7", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1949,7 +2015,7 @@ "cpp11", "systemfonts" ], - "Hash": "1ab6223d3670fac7143202cb6a2d43d5" + "Hash": "997aac9ad649e0ef3b97f96cddd5622b" }, "tibble": { "Package": "tibble", @@ -2078,13 +2144,13 @@ }, "tinytex": { "Package": "tinytex", - "Version": "0.45", + "Version": "0.49", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "xfun" ], - "Hash": "e4e357f28c2edff493936b6cb30c3d65" + "Hash": "5ac22900ae0f386e54f1c307eca7d843" }, "tzdb": { "Package": "tzdb", @@ -2099,38 +2165,38 @@ }, "units": { "Package": "units", - "Version": "0.8-2", + "Version": "0.8-5", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "Rcpp" ], - "Hash": "422376fe53419adcde4710d43acbcdd0" + "Hash": "119d19da480e873f72241ff6962ffd83" }, "utf8": { "Package": "utf8", - "Version": "1.2.3", + "Version": "1.2.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "1fe17157424bb09c48a8b3b550c753bc" + "Hash": "62b65c52671e6665f803ff02954446e9" }, "uuid": { "Package": "uuid", - "Version": "1.1-0", + "Version": "1.2-0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "f1cb46c157d080b729159d407be83496" + "Hash": "303c19bfd970bece872f93a824e323d9" }, "vctrs": { "Package": "vctrs", - "Version": "0.6.3", + "Version": "0.6.5", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -2140,7 +2206,7 @@ "lifecycle", "rlang" ], - "Hash": "d0ef2856b83dc33ea6e255caf6229ee2" + "Hash": "c03fa420630029418f7e6da3667aac4a" }, "viridis": { "Package": "viridis", @@ -2167,7 +2233,7 @@ }, "vroom": { "Package": "vroom", - "Version": "1.6.3", + "Version": "1.6.5", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -2189,14 +2255,15 @@ "vctrs", "withr" ], - "Hash": "8318e64ffb3a70e652494017ec455561" + "Hash": "390f9315bc0025be03012054103d227c" }, "waldo": { "Package": "waldo", - "Version": "0.5.1", + "Version": "0.5.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ + "R", "cli", "diffobj", "fansi", @@ -2206,11 +2273,11 @@ "rlang", "tibble" ], - "Hash": "2c993415154cdb94649d99ae138ff5e5" + "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" }, "withr": { "Package": "withr", - "Version": "2.5.0", + "Version": "2.5.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -2219,39 +2286,41 @@ "graphics", "stats" ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" + "Hash": "4b25e70111b7d644322e9513f403a272" }, "wk": { "Package": "wk", - "Version": "0.7.3", + "Version": "0.9.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "68a7ab6ec1afb5f076172b983c069313" + "Hash": "5d4545e140e36476f35f20d0ca87963e" }, "xfun": { "Package": "xfun", - "Version": "0.39", + "Version": "0.41", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "stats", "tools" ], - "Hash": "8f56e9acb54fb525e66464d57ab58bcb" + "Hash": "460a5e0fe46a80ef87424ad216028014" }, "xml2": { "Package": "xml2", - "Version": "1.3.4", + "Version": "1.3.6", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", - "methods" + "cli", + "methods", + "rlang" ], - "Hash": "7dc765ac9b909487326a7d471fdd3821" + "Hash": "1d0336142f4cd25d8d23cd3ba7a8fb61" }, "xmlparsedata": { "Package": "xmlparsedata", @@ -2265,10 +2334,10 @@ }, "yaml": { "Package": "yaml", - "Version": "2.3.7", + "Version": "2.3.8", "Source": "Repository", "Repository": "CRAN", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + "Hash": "29240487a071f535f5e5d5a323b7afbd" } } }