Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
6e15754
Keep one invalid polygon from moving every other feature off its larg…
claude Sep 26, 2026
fb9d885
Score each cell's kriging variance against what that cell would have …
claude Sep 26, 2026
877d8e4
Fit and predict GWR on map distance when the points carry an elevation
claude Sep 26, 2026
e434390
Stop cv_gwr(parallel = n) hanging after a GWR has been fitted
claude Sep 26, 2026
889f031
Keep one missing value from making the resolution profile score the r…
claude Sep 26, 2026
e4eb628
Assign lon/lat features in the cells' own projected CRS
claude Sep 26, 2026
87a4340
Warn when some cross-validation folds fail instead of only logging it
claude Sep 26, 2026
58f8ee1
Krige repeat visits to a station from their mean instead of returning…
claude Sep 26, 2026
72c0f83
Turn empty line features into empty points instead of crashing R
claude Sep 26, 2026
9e16592
Make every point a vertex of the Delaunay triangles at UTM coordinates
claude Sep 26, 2026
0104df2
Score every candidate set on the same rows in forward selection
claude Sep 26, 2026
5495f3c
Project data around a pole on a polar projection, not Web Mercator
claude Sep 26, 2026
efa1b04
Merge the tessellation and CRS fixes from review
claude Sep 26, 2026
a067719
Compare models on the rows they all predicted in compare_models_cv()
claude Sep 26, 2026
e8e4a84
Bound and judge a subsampled resolution profile on the whole layer
claude Sep 26, 2026
074df05
Merge the kriging_adequacy fixes from review
claude Sep 26, 2026
fe43f50
Predict a GWR location by location, so one bad window costs one value
claude Sep 26, 2026
ef20a46
Merge the cross-validation and model-comparison fixes from review
claude Sep 26, 2026
7d3f51e
Stop one far-off point from moving every Bayesian prediction in the call
claude Sep 26, 2026
ae9a12c
Choose the split count for the whole layer it is applied to
claude Sep 26, 2026
4534837
Merge the GWR fixes from review
claude Sep 26, 2026
5855686
Merge the Bayesian GP boundary fix from review
claude Sep 26, 2026
3bdbf96
Stop an empty part inside a line feature from crashing R
claude Sep 26, 2026
124b148
Merge the empty-part crash fix from review
claude Sep 26, 2026
9a803aa
Record the review's fixes in NEWS
claude Sep 26, 2026
e213ab8
Stop reporting an elbow on points that have no cluster structure
claude Sep 26, 2026
9540b7e
Point the split comment at the variable it describes
claude Sep 26, 2026
8856c29
Merge the resolution-profile fixes from review
claude Sep 26, 2026
7a35881
Make the vignettes and NEWS say what the resolution fixes changed
claude Sep 26, 2026
88dca57
Put the example points stamped UTM zone 32N inside zone 32N
claude Sep 26, 2026
6d90df0
Require the ggplot2 and testthat versions the package uses, and date …
claude Sep 26, 2026
99a8a68
Run the gstat-gated vignettes and tests on every CI platform, and pub…
claude Sep 26, 2026
2aceb7a
Remove two obsolete dev scripts and make the other two check the work…
claude Sep 26, 2026
e6cd67c
Warn about a collinear GWR window with one predictor, and say what a …
claude Sep 26, 2026
9caa360
Expect the warning the pass-7 empty-geometry test provokes
claude Sep 26, 2026
9da626b
Count three dontrun examples in the CRAN notes, and describe six vign…
claude Sep 26, 2026
f183070
Keep a user's logger setup, a deleted temp directory and knitr from b…
claude Sep 26, 2026
0f3a2a6
Say when summarize_by_cell() could not correct the SEs it was asked t…
claude Sep 26, 2026
65f1abd
Stop a GWR whose windows interpolate the data from winning on AICc
claude Sep 26, 2026
c125a13
Label the tessellation map by default, and fill it from dates and areas
claude Sep 26, 2026
0efad46
Draw plot_folds() on the layer the folds came from, whatever its CRS
claude Sep 26, 2026
4fc4a83
Make the fitted-model plots say which variograms they compare
claude Sep 26, 2026
9982c29
Make the diagnostic plots' legends and labels match what is drawn
claude Sep 26, 2026
c629d46
Warn when an adaptive GWR bandwidth is capped at the number of points
claude Sep 26, 2026
202493a
Mark extrapolation on a dropped predictor, explain a zero threshold, …
claude Sep 26, 2026
1317601
Count a GWR predictor named twice once
claude Sep 26, 2026
db152dd
Stop assign_features_to_polygons() answering by row order or by a zer…
claude Sep 26, 2026
d58d450
Merge the packaging, CI and fixture fixes from review round 2
claude Sep 26, 2026
55a223e
Make two GWR no-warning tests fail when the fit itself fails
claude Sep 26, 2026
753c757
Say why an undefined GWR AICc misleads without overstating it
claude Sep 26, 2026
b79a056
Let dplyr::bind_rows() combine assigned and prepared layers
claude Sep 26, 2026
10aa788
Merge the plotting fixes from review round 2
claude Sep 26, 2026
b0f3dd9
Predict a polygon grid at its cells' points, refuse draws in ..., kee…
claude Sep 26, 2026
e74073b
Key the grid cache on the whole CRS, and take stable-ID sort keys on …
claude Sep 26, 2026
9a0a3f9
Keep every fold a cross-validation ran, and number, name and check th…
claude Sep 26, 2026
08503f3
Score R-squared one way everywhere, and label what compare_models() c…
claude Sep 26, 2026
359ce82
Return select_features_forward()'s split as rows of the layer passed in
claude Sep 26, 2026
e002ea6
Check gwr_model_selection()'s selected bandwidth against the new floor
claude Sep 26, 2026
93b5918
Merge the GWR fixes from review round 2
claude Sep 26, 2026
8ccbfba
Say when a GWR coefficient map has no collinearity survey, now that o…
claude Sep 26, 2026
4008cb4
Size the derived GP basis for the boundary factor the user sets
claude Sep 26, 2026
4bc9b23
Fit categorical and mixture families, and refuse a factor nothing can…
claude Sep 26, 2026
67ae882
Raise ranger's reason instead of NA, and say when rows have no OOB value
claude Sep 26, 2026
c5d095d
Say when Bayesian convergence was not checked, and quiet the capped ESS
claude Sep 26, 2026
147605d
Save a fitted model with its engine once
claude Sep 26, 2026
17863dc
Say that standardised coefficients are per SD, and fix the tour's GP …
claude Sep 26, 2026
a97dd41
Make the spatial half-split on a finer grid when the default one fail…
claude Sep 26, 2026
b1f215f
Keep every block fold populated, and say when a fold scheme quietly w…
claude Sep 26, 2026
7003388
Measure fold separation in the range's own CRS, and label folds as cv…
claude Sep 26, 2026
c23e185
Let the block-size sweep run on transects and lines, and say what its…
claude Sep 26, 2026
d78d162
Stop an empty point, a missing value or a misspelt column from changi…
claude Sep 26, 2026
c8e71c8
Merge the cross-validation and evaluation fixes from review round 2
claude Sep 26, 2026
bd1fd19
Remove the GWR kernel helper nothing can reach any more
claude Sep 26, 2026
30f2536
Stop a rejected, foreign or mismatched variogram from choosing the re…
claude Sep 26, 2026
b3d8aa8
Give the same layer the same cell count whatever order its rows come …
claude Sep 26, 2026
2b9b7e5
Number area_of_applicability()'s fold labels the way cv_*() does
claude Sep 26, 2026
e9c93e8
Caption every coverage level of a sweep by its closeness to the nomin…
claude Sep 26, 2026
ec87f19
Say what deff_applied holds on a cell no point fell in
claude Sep 26, 2026
edf77c9
Merge the resolution fixes from review round 2
claude Sep 26, 2026
c448a4f
Merge the fold construction fixes from review round 2
claude Sep 26, 2026
572468c
Choose one projection whatever sf_use_s2() says, and stop needing lwg…
claude Sep 26, 2026
7efd323
Merge the assignment, aggregation and split fixes from review round 2
claude Sep 26, 2026
a85fd6a
Tessellate points and boundaries that lack a CRS or come with a geogr…
claude Sep 26, 2026
2dfc7c6
Draw a new random seeding per call, and seed CRS-less lon/lat points …
claude Sep 26, 2026
5e0f95f
Stop promising nominal coverage from a split that has no buffer
claude Sep 26, 2026
8c9c112
Merge the area-of-applicability, prediction-surface and logging fixes…
claude Sep 26, 2026
3ef9f30
Merge the tessellation, CRS and seeding fixes from review round 2
claude Sep 26, 2026
fe39e96
Merge the Bayesian and random-forest fixes from review round 2
claude Sep 26, 2026
23608f7
Refuse autocorrelation ranges the variogram cannot identify, and say …
claude Sep 26, 2026
f3c5708
Krige each cell from all of its points, in the variogram's CRS, and k…
claude Sep 26, 2026
f554a54
Merge the range-estimation and kriging fixes from review round 2
claude Sep 26, 2026
5f4da1c
Record the second round of review fixes in NEWS
claude Sep 26, 2026
3653477
Declare the packages the tests call with ::
claude Sep 26, 2026
ee7bde4
Score a custom fit's residuals, keep carried fold ids, and name what …
claude Sep 26, 2026
353e99d
Merge the cross-validation and evaluation fixes from the recheck
claude Sep 26, 2026
ac2e71d
Keep a line's real part when its first part is empty, on current sf
claude Sep 26, 2026
64f7557
Fix the block-size sweep ladder and make_folds' leakage and grid mess…
claude Sep 26, 2026
0423257
Fix the AOA plot, prediction grid and plot captions found in recheck S9
claude Sep 26, 2026
24143ae
Merge the fold-construction and block-size-sweep fixes from the recheck
claude Sep 26, 2026
5bc8459
Merge the area-of-applicability, surface and plotting fixes from the …
claude Sep 26, 2026
efdc15a
Judge GWR slopes by an origin-free index; tidy GWR checks and messages
claude Sep 26, 2026
3bc62a8
Merge the GWR collinearity and bandwidth fixes from the recheck
claude Sep 26, 2026
3d8f27c
Compare plot layer classes without names, as ggplot2 3.5 names layers
claude Sep 26, 2026
7b0ae03
Read repeat visits, combined ranks and refused variograms as the data…
claude Sep 26, 2026
ebb1543
Merge the resolution and level-selection fixes from the recheck
claude Sep 26, 2026
3a513c8
Fix third-review findings in assignment, aggregation and row records
claude Sep 26, 2026
6e8201a
Merge the assignment, summary and row-record fixes from the recheck
claude Sep 26, 2026
b2529be
Say which mean the design-effect standard error is for
claude Sep 26, 2026
b20e052
Merge the documentation fixes from the recheck
claude Sep 26, 2026
b3429b5
Fix the third review's Bayesian and random-forest findings (S8)
claude Sep 26, 2026
234cb73
Merge the Bayesian and random-forest fixes from the recheck
claude Sep 26, 2026
c07c3ab
Size the REML range floor from its point pairs, and match kriging cel…
claude Sep 26, 2026
b9e252c
Merge the range-estimation and kriging-adequacy fixes from the recheck
claude Sep 26, 2026
47aff6b
Fix the third review's tessellation, CRS-choice and seeding findings
claude Sep 26, 2026
f12b7a8
Merge the tessellation, CRS and seeding fixes from the recheck
claude Sep 26, 2026
5c5d800
Look lwgeom up without requireNamespace() in the seeding test
claude Sep 27, 2026
b938553
Refuse folds from another layer, leave Inf rows out, and say why a ra…
claude Sep 27, 2026
771a54f
Merge the fold-provenance, range and random-forest leftovers from the…
claude Sep 27, 2026
cf7ea59
Take the folds cv_*() take in area_of_applicability(); warn once abou…
claude Sep 27, 2026
777c6b8
Record the recheck's fixes in NEWS
claude Sep 27, 2026
e62c807
Merge the AOA-provenance, CRS-less boundary and logging leftovers fro…
claude Sep 27, 2026
bfd6980
Say what the North Carolina GWR survey finds now that slopes have the…
claude Sep 27, 2026
2981599
Record the recheck's final-pass fixes in NEWS
claude Sep 27, 2026
f2551ec
Keep the fold count in the all-folds-failed warning
claude Sep 27, 2026
9f31b78
Match the all-folds-failed test to the message that now carries the c…
claude Sep 27, 2026
0f41bf3
Flag non-converged Bayesian fits where they are scored, and warn on C…
claude Sep 27, 2026
5bbb02a
Let "combined" return the geometric ranking when the elbow is below t…
claude Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,8 @@
(^|/)Rplots\.pdf$
\.DS_Store$
^Claude outputs$
# Local files a build from a working tree would otherwise ship: the internal
# review notes (kept out of git by .gitignore) and the .claude/ directory of
# assistant settings and worktrees.
^CODE_REVIEW\.md$
^\.claude$
35 changes: 21 additions & 14 deletions .github/workflows/R-CMD-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,26 +43,32 @@ jobs:
http-user-agent: ${{ matrix.config.http-user-agent }}
use-public-rspm: true

# Hard dependencies only. Installing Suggests here pulled the entire
# Stan toolchain into every matrix job -- slow everywhere, and fatal on
# r-devel, where nothing arrives as a binary. There CRAN's rstan 2.32.7
# was compiled against StanHeaders 2.39.0.9000 from the stan-dev
# universe and died with "'ecuyer1988' is not a member of 'boost'":
# Stan dropped that typedef after 2.32. The optional backends are the
# job of the `backends` job below and of check-brms.yaml.
# Hard dependencies and a short list of Suggests. Installing all of
# Suggests here pulled the entire Stan toolchain into every matrix job --
# slow everywhere, and fatal on r-devel, where nothing arrives as a
# binary. There CRAN's rstan 2.32.7 was compiled against StanHeaders
# 2.39.0.9000 from the stan-dev universe and died with "'ecuyer1988' is
# not a member of 'boost'": Stan dropped that typedef after 2.32. The
# optional backends are the job of the `backends` job below and of
# check-brms.yaml.
#
# Three Suggests are not optional in practice. knitr and rmarkdown build
# the vignette during R CMD build, and tests/testthat.R opens with
# the vignettes during R CMD build, and tests/testthat.R opens with
# library(testthat), so without it the test stage errors rather than
# skipping. _R_CHECK_FORCE_SUGGESTS_ = false does not cover this -- it
# only downgrades the complaint about absent Suggests, it does not stop
# check from running the test file.
#
# ggplot2 is installed by choice rather than necessity. The vignette
# gates every chunk on requireNamespace("ggplot2") in its setup chunk, so
# R CMD build succeeds without it -- but then the vignette renders as code
# with no output and none of the plotting code runs anywhere in this
# matrix. It is a cheap pure-R install; keep it.
# ggplot2 and gstat are installed by choice rather than necessity. Every
# vignette gates its chunks on requireNamespace() in its setup chunk, so
# R CMD build succeeds without them -- but then the North Carolina demo
# (gated on ggplot2) and the resolution, diagnostics and spatial
# cross-validation vignettes (gated on gstat and ggplot2) render as code
# with no output, and the tests behind skip_if_not_installed("gstat")
# skip. Without these two, that code would run only on ubuntu, in the
# `backends` job below. gstat brings sp, FNN, zoo, xts, intervals,
# spacetime, sftime and stars with it; none declares a system
# requirement, but on r-devel they build from source, which is slower.
- uses: r-lib/actions/setup-r-dependencies@v2
with:
dependencies: '"hard"'
Expand All @@ -71,6 +77,7 @@ jobs:
any::knitr
any::rmarkdown
any::ggplot2
any::gstat
any::testthat
needs: check

Expand Down Expand Up @@ -145,7 +152,7 @@ jobs:
- name: Confirm optional backends are installed
run: |
for (p in c("sp", "GWmodel", "gstat", "FNN", "Matrix", "geometry",
"ranger", "tibble")) {
"ranger", "tibble", "spdep")) {
if (!requireNamespace(p, quietly = TRUE))
stop("Backend package not installed: ", p)
}
Expand Down
14 changes: 11 additions & 3 deletions .github/workflows/pkgdown.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
# Builds the pkgdown site and pushes it to the gh-pages branch, from which
# GitHub Pages serves https://elkronos.github.io/gis_modeling_toolkit/.
# Pull requests build the site (so a broken _pkgdown.yml or vignette fails
# the check) but do not deploy it.
# the check) but do not deploy it, and neither does a manual run from any
# branch but main.
on:
push:
branches: [main, master]
Expand Down Expand Up @@ -36,7 +37,7 @@ jobs:
with:
use-public-rspm: true

# Hard dependencies plus the optional packages the five vignettes gate
# Hard dependencies plus the optional packages the six vignettes gate
# their chunks on: ggplot2, gstat, sp and GWmodel, geometry, ranger and
# patchwork. Every gate is requireNamespace()-guarded, so a missing
# package does not fail the build -- it silently renders that article
Expand Down Expand Up @@ -80,8 +81,15 @@ jobs:
run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
shell: Rscript {0}

# Publish from main, and from a published release as the r-lib template
# does. A pull request builds the site without publishing it, and so
# does a manual run started from any other branch: without the ref test
# a workflow_dispatch on an unmerged branch would replace the live site.
# The job-level `contents: write` above exists for this step. Pull
# requests from forks get a read-only token whatever it says, and the
# deploy action is pinned to a commit rather than a tag.
- name: Deploy to GitHub pages 🚀
if: github.event_name != 'pull_request'
if: github.event_name == 'release' || (github.event_name != 'pull_request' && github.ref == 'refs/heads/main')
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
with:
clean: false
Expand Down
9 changes: 6 additions & 3 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,18 @@ Suggests:
tibble,
geometry,
gstat,
ggplot2,
ggplot2 (>= 3.4.0),
patchwork,
FNN,
Matrix,
nlme,
spdep,
testthat (>= 3.1.5),
testthat (>= 3.1.7),
knitr,
rmarkdown
rmarkdown,
units,
vctrs,
withr
Additional_repositories: https://stan-dev.r-universe.dev
Config/testthat/edition: 3
VignetteBuilder: knitr
Expand Down
2 changes: 1 addition & 1 deletion NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ export(fit_gwr_model)
export(fit_rf_model)
export(fold_separation)
export(get_voronoi_seeds)
export(kriging_adequacy)
export(gp_lengthscale_bounds)
export(gwr_model_selection)
export(harmonize_crs)
export(kriging_adequacy)
export(make_folds)
export(model_metrics)
export(new_spatial_fit)
Expand Down
Loading
Loading