multiScaleR 0.7.0 --------- * CRAN resubmission: reduce Windows incoming check time by loading cached vignette objects for slow fitted-model summaries and plots. The calls used to regenerate those objects remain visible in the vignettes, and the cache can be rebuilt with `data-raw/generate_vignette_cache.R`. * Vignettes are self-contained for CRAN rebuilds. The main guide uses package data and bundled example objects rather than downloading precomputed objects from GitHub during vignette setup. * `profile_sigma()` is faster when profiling models with multiple expensive covariates. Along the profile grid only the profiled covariate's sigma changes, so the kernel-weighted columns of the other covariates are now computed once and reused, and only the profiled covariate is re-evaluated at each grid point. The reproducible benchmark in `tools/benchmarks/profile_sigma_covariate_reuse_benchmark.R` checks that the profile values match the legacy full-recompute loop before timing. On the local benchmark, the current path was 2.61x faster for four landscape metrics and 2.40x faster for four weighted surface metrics. * Internal: the covariate-weighting step of `kernel_scale_fn()` is factored into `.msr_kernel_cov_w()` (which can compute a single covariate column), and the objective accepts a precomputed covariate matrix via a new `cov_w` argument. Behavior of the optimizer and the profile-likelihood intervals is unchanged. * `kernel_prep()` and scale profiling now provide metric-specific guidance when fragile landscape metrics cannot be scaled because the derived covariate is all `NA` or has zero variance. The messages call out the common failure modes for `iji`, `siei`, and `msiei`, and the landscape-metric documentation now recommends prescreening these metrics before optimizing their scales. multiScaleR 0.6.36 --------- * `landscape_var()` gains nine categorical metrics, all reproducing the values returned by the `landscapemetrics` package (FRAGSTATS conventions) for both the fixed-buffer path and the FFT raster projection. * Configuration: `"iji"` (interspersion and juxtaposition), the evenness of the adjacencies among different classes. Like contagion, it is built from the per-window class-pair co-occurrence matrix that already powers `"contag"`, so it adds no extra convolutions. * Information theory (Nowosad & Stepinski 2019): `"ent"` (marginal entropy), `"condent"` (conditional entropy), `"joinent"` (joint entropy), `"mutinf"` (mutual information), and `"relmutinf"` (relative mutual information). These separate composition from configuration, which the diversity and contagion metrics confound. The `base` argument now sets the logarithm base for these entropies as well as the diversity metrics; set `base = 2` for bits, matching `landscapemetrics`. The ratio metrics (`"relmutinf"`, `"iji"`) are unaffected by `base`. * Class-level metrics, supplied through a new `class` argument naming the focal class: `"clumpy"` (clumpiness index, -1 to 1), `"pland"` (percentage of landscape), and `"ca"` (class area in hectares). `class` is required for these three metrics and is not accepted for any other metric. * The landscape-metric vignette gains tables for the new families and a worked example contrasting composition (`"ent"`) with configuration (`"mutinf"`, `"clumpy"`). multiScaleR 0.6.35 --------- * `surface_var()` gains the `"sdr"` metric (surface area ratio): the percentage by which the true 3D surface area of the neighborhood exceeds its flat projected area. It behaves as a continuous edge-density analog and uses the same quad triangulation as `geodiv::surface_area()`. Unlike `geodiv::sdr()`, which rescales the surface to a unit range and is dimensionless, multiScaleR computes `"sdr"` in physical units (real elevation values and the real cell size), so a tilted plane of slope `s` returns `(sqrt(1 + s^2) - 1) * 100`. The physical definition is the interpretable one for terrain and, unlike the rescaled version, is FFT-projectable. * `"sdr"` joins `"sdq"` as a neighbor-based surface metric (it caches raster cell IDs and its projection matches point extraction to a small boundary tolerance). Kernel weighting is not offered for the slope/area family. multiScaleR 0.6.34 --------- * `surface_var()` gains a `weighted` argument. With `weighted = TRUE`, the distribution metrics (`"sa"`, `"sq"`, `"ssk"`, `"sku"`) are computed as kernel-weighted moments: each cell is weighted by the model's distance kernel (gaussian, exp, or expow) and the optimized parameter is the kernel scale (sigma) rather than a hard neighborhood radius. Because the weights vary smoothly with sigma, the likelihood is smooth in the scale parameter, so `multiScale_optim()` estimates the scale of effect of heterogeneity with a standard error, exactly as it does for a kernel-weighted mean. The default (`weighted = FALSE`) is unchanged. * Weighted surface metrics are supported with every kernel, including `"expow"`, since they use the kernel (and its shape). Weighting is not available for the slope metric `"sdq"`, and the scale is always optimized (no fixed `radius`). * Projection of weighted `"sq"`, `"ssk"`, and `"sku"` uses kernel-weighted FFT power sums; weighted `"sa"` uses the compiled focal pass, now generalized to accept per-cell weights (a 0/1 mask reproduces the unweighted result exactly). * Added a vignette section contrasting hard-radius and kernel-weighted roughness. multiScaleR 0.6.33 --------- * `surface_var()` gains three metrics: `"ssk"` (skewness) and `"sku"` (excess kurtosis), which describe the shape of the neighborhood value distribution, and `"sdq"` (root mean square slope), which describes local gradient steepness or ruggedness. With `"sa"` and `"sq"` this completes the dispersion, distribution-shape, and slope families of gradient surface metrics. `"ssk"` and `"sku"` match `geodiv`'s adjusted-skewness and excess-kurtosis defaults; `"sdq"` matches `geodiv::sdq()` after accounting for cell resolution (multiScaleR reports a true slope, dividing the gradient by the cell size). * Raster projection of `"ssk"`, `"sku"`, and `"sdq"` uses FFT convolution. The moment projections center on the global raster mean first to avoid floating-point cancellation in the third and fourth power sums. Like the landscape edge metrics, `"sdq"` caches raster cell IDs and its projection agrees with point extraction to within a small boundary tolerance. * Added the `surface_metric_covariates` vignette section demonstrating the shape and slope surfaces. multiScaleR 0.6.32 --------- * Added `surface_var()`, a new covariate specification for continuous surface texture metrics, alongside the existing `kernel_var()` and `landscape_var()`. Two metrics are supported in this release: `"sa"` (average roughness, the mean absolute deviation from the neighborhood mean) and `"sq"` (root mean square roughness, the sample standard deviation of the neighborhood values). Both definitions match the `geodiv` package. These metrics summarize within-neighborhood heterogeneity of a continuous raster (elevation, NDVI, canopy height, temperature, and similar surfaces) rather than its mean, so they complement `kernel_var()`. The buffer radius can be fixed or optimized, and the covariates flow through `kernel_prep()`, `multiScale_optim()`, and `kernel_scale.raster()` exactly like landscape metrics. * `surface_var()` projections in `kernel_scale.raster()` compute `"sq"` with fast Fourier transform (FFT) convolution and `"sa"` with an exact masked focal pass. Average roughness has no closed-form FFT decomposition, so `"sa"` is projected with a compiled focal routine (`surface_sa_focal_cpp`) rather than an R closure; this is exact and roughly twice as fast as the equivalent `terra::focal()` call in benchmarks. Surface metrics require a continuous raster with square cells. * Added `geodiv` to `Suggests`; the surface-metric tests use it as a validation oracle and are skipped when it is not installed. * Added the `surface_metric_covariates` vignette, which walks through defining, fitting, optimizing, and projecting surface texture covariates and how to interpret roughness at different scales. multiScaleR 0.6.31 --------- * `multiScale_optim()` no longer queries system RAM on every call. The `next_run` recommendation previously invoked `estimate_multiscale_ram()` at the end of each fit, which shelled out to an external process (PowerShell on Windows) and rebuilt the optimization context; under load this could make `multiScale_optim()` appear to hang after the optimization had finished. The parallel worker-count suggestion is now obtained only on demand by calling `estimate_multiscale_ram()` directly. `next_run$n_cores` is now `NULL`. `estimate_multiscale_ram()`'s own RAM query is also bounded by a 5-second timeout so it degrades to `NA` instead of blocking. * `kernel_prep()` now precomputes distance-binned summaries of kernel-weighted covariates (`bin = TRUE`, `nbins = 256` by default). `multiScale_optim()`, `profile_sigma()`, and the screened-start path evaluate kernel covariates from these summaries in O(nbins) per point instead of iterating every buffer cell on each optimizer evaluation. The per-evaluation cost becomes independent of `max_D`, making optimization roughly 10-80x faster in benchmarks (the speedup grows with the number of points and the buffer size), while recovering sigma to within ~1e-5 (relative) of the exact per-cell result. Set `bin = FALSE` to force the exact path. * Added a "lean" storage mode (`kernel_prep(store_cell_data = FALSE)`) that drops the per-cell `d_list`/`raw_cov` data when every covariate is kernel-type, retaining only the binned summaries. This reduces the `multiScaleR_data` memory footprint by roughly 30-40x in benchmarks and is sufficient to optimize, profile, and refit. Cell-level data are retained automatically when landscape-metric covariates are present. * `estimate_multiscale_ram()` and `print.multiScaleR_data()` now report binned summary sizes and handle lean inputs. * `kernel_prep()` now stores each point's extracted cell values as a dense or sparse matrix, whichever is smaller (continuous and categorical layers store dense; low-prevalence binary layers stay sparse), so `raw_cov` memory is never worse than before and is ~1.5x smaller for continuous rasters. `scale_type()` evaluates dense values in vectorized R, matching the compiled sparse path to machine precision while avoiding per-cell sparse random access; this speeds up the exact (`bin = FALSE`) per-cell weighting and removes the repeated sparse-to-dense conversion in the landscape-metric path. (One-time `kernel_prep()` and landscape optimization wall-clock change little, as those are dominated by raster extraction and the C++ metric computation respectively.) * Landscape-metric optimization is ~3.4-4.2x faster: the source raster's categorical encoding is validated once in `kernel_prep()` instead of being re-scanned (with a per-call `unique()` class detection) on every optimizer evaluation. Optimized radii are unchanged. Direct calls to the landscape metric helpers still validate by default. * Hardware detection (physical/logical cores and total system RAM) is now memoized, so `multiScale_optim()` no longer spawns a PowerShell process to query RAM on every call when populating its parallel-worker recommendation. multiScaleR 0.6.30 --------- * Added `estimate_multiscale_ram()` to report `kernel_prep()` memory use, conservative parallel RAM budgets, and recommended worker counts based on available RAM and physical CPU cores while reserving two cores * Added a preflight warning in `multiScale_optim()` when requested parallel workers exceed the RAM-based budget estimated for the current `kernel_prep()` payload multiScaleR 0.6.29 --------- * Added aggregation index (`ai`) as a supported `landscape_var()` metric, including fixed-buffer, optimized-radius, and FFT raster projection paths with accuracy checks against `landscapemetrics` * Hardened `summary.multiScaleR()` argument handling so optional arguments such as `prob` and `profile` are validated consistently * Clarified screened-start documentation for `n_cores` and Windows PSOCK behavior, and added real-worker regression coverage multiScaleR 0.6.28 --------- * Parallelized short screened-start optimization attempts in `multiScale_optim()` using the same `n_cores` allocation as the main optimization when `start_strategy = "screen"` * Added a serial fallback path if parallel screening fails, and added regression coverage for core allocation behavior in screening multiScaleR 0.6.27 --------- * Expanded the landscape metric vignette workflow with release-ready examples, including fixed-radius metric projection guidance * Added optional parallel covariate profiling in `profile_sigma()` via `n_cores` and documented practical core-selection guidance in vignettes * Added regression coverage for standalone fixed-radius landscape metric projection and serial-versus-parallel sigma profile parity multiScaleR 0.6.26 --------- * Refined optimization diagnostics and next-run restart messaging in `multiScale_optim()` documentation and tests * Updated vignette guidance for iterative optimization workflows multiScaleR 0.6.25 --------- * Added `next_run` recommendations to `multiScale_optim()` output with follow-up starting values and a diagnostic-informed `max_D` suggestion * Suppressed benign package attach warnings in marginal-effect and PSOCK helper fallback loads so local checks do not fail on R patch-version mismatches alone multiScaleR 0.6.24 --------- * Corrected `aic_tab()` roxygen registration so package checks generate the proper help alias and no longer warn about missing documentation entries multiScaleR 0.6.23 --------- * Added a regression test that asserts the package's expected public exports remain available in the installed namespace multiScaleR 0.6.22 --------- * Restored missing exports for model-selection and simulation helpers used in package vignettes, including `aic_tab()`, `bic_tab()`, `sim_rast()`, `sim_dat()`, and `sim_dat_unmarked()` multiScaleR 0.6.21 --------- * Added an opt-in screened start strategy for `multiScale_optim()` that scouts sigma values with log-spaced prescreening and short serial screening runs before a single full optimization multiScaleR 0.6.20 --------- * Hardened `plot_marginal_effects()` for wrapped/nested fitted models such as `amt::fit_clogit()`-style objects * Added regression coverage for marginal effect plots built from nested `clogit` analysis models multiScaleR 0.6.19 --------- * Counted one optimized parameter per fitted `sigma`/shape term in `aic_tab()`, `bic_tab()`, and `profile_sigma()` AICc calculations * Rejected AIC/BIC comparisons when models use different observation sets, even if the sample sizes match * Propagated `.libPaths()` and `R_LIBS*` settings to PSOCK workers for more reliable project-local parallel optimization on Windows * Added an `opt_distance` summary alias alongside the existing `opt_dist` multiScaleR 0.6.18 --------- * Reconciled the merged landscape metric branch with a projection fix for fitted models that use only a subset of cached raster covariates * Added regression coverage for `kernel_scale.raster()` when stored `scale_vars` include unused source layers multiScaleR 0.6.17 --------- * Added a landscape metric covariates vignette demonstrating explicit `msr_vars()` specifications with 100 spatial sample points * Linked the quick-start guide to the landscape metric covariate workflow multiScaleR 0.6.16 --------- * Added `msr_vars()`, `kernel_var()`, and `landscape_var()` specifications for explicit derived raster covariates * Allowed multiple covariate transformations, such as kernel means and fixed landscape metrics, to be derived from the same source raster layer * Added exploratory raster projection support for specified landscape metric covariates multiScaleR 0.6.15 --------- * Added internal fixed-buffer SHDI helpers for exploratory landscape metric support * Added FFT-based SHDI raster projection prototype and reference tests * Added internal fixed-buffer and FFT projection prototypes for edge density * Expanded exploratory landscape metric helpers to composition/diversity, total edge, landscape shape, percentage-like-adjacency, and contagion metrics * Added compiled fixed-buffer metric primitives to improve repeated point-level landscape metric calculations * Added FFT raster projection support for exploratory landscape shape index calculations multiScaleR 0.6.14 --------- * Improved model-data, predictor, and log-likelihood handling for wrapped model objects * Added regression coverage for nested `clogit` wrappers in serial and PSOCK optimization * Avoided recoverable model-data warnings in marginal effect plots multiScaleR 0.6.13 --------- * Added a Windows R-devel compatibility shim for Rcpp header compilation multiScaleR 0.6.12 --------- * Forced C++17 compilation for compatibility with CRAN Windows R-devel checks multiScaleR 0.6.11 --------- * Fixed PSOCK optimization for unqualified model calls such as `glm.nb()` after `library(MASS)` multiScaleR 0.6.10 --------- * Preserved original sparse kernel dot-product behavior for complete raster layers * Preserved point row identities across `kernel_prep()` outputs used during optimization * Ensured PSOCK workers use the same multiScaleR code as the main R session * Fixed complete-case row alignment when fitted model frames retain original row names multiScaleR 0.6.8 --------- * Added linear and user-specified sigma grids to `profile_sigma()` multiScaleR 0.6.7 --------- * Fixed singular-Hessian fallback SE values to remain numeric * Excluded missing raster cells from sparse kernel weighted averages multiScaleR 0.6.6 --------- * Added an optional custom refit hook for model classes that cannot use default model updates * Improved internal model refitting and log-likelihood dispatch for broader model support multiScaleR 0.6.5 --------- * Added structured optimization diagnostics and a `diagnostics()` accessor * Fixed complete-case alignment in multiscale optimization inputs * Updated vignettes and restored `multiScale_optim()` export handling multiScaleR 0.6.4 --------- * Added sigma profiling and plot methods * Expanded plotting tests and updated vignettes * Streamlined GitHub Actions checks on direct pushes multiScaleR 0.6.3 --------- * Made profile-likelihood CIs optional in `summary` * Updated vignettes and compressed example data multiScaleR 0.6.2 --------- * Expanded test coverage * Improved error messaging multiScaleR 0.6.1 --------- * Fixed test error multiScaleR 0.6.0 --------- * Added unit testing multiScaleR 0.5.0 --------- * Updated handling of edge and NA values in `kernel_scale.raster` * Updated `kernel_scale.raster` to create 'dummy' layers for site effect variables * Added vignette on spatial projections * Submitted to CRAN multiScaleR 0.4.6 --------- * Updated handling of mixed effects models * Updated error handling multiScaleR 0.4.5 --------- * Added `verbose` argument to functions to optionally supress console printing * Made updates for CRAN checks multiScaleR 0.4.4 --------- * Updated `kernel_scale.raster` documentation and clamping defaults multiScaleR 0.4.3 --------- * Updated handling of zero-infalted models in `plot_marginal_effects` multiScaleR 0.4.2 --------- * Update dependencies to pass CRAN checks * Added hex sticker * Added `rhub.yaml` * Updated to pass CRAN checks multiScaleR 0.4.1-2 --------- * Updated vignette to demonstrate fitting of zero-inflated model multiScaleR 0.4.1-1 --------- * Updated `aic_tab` and `bic_tab` to properly check model types. * Fixed bug in `kernel_scale.raster` multiScaleR 0.4.1-0 --------- * Updated calculation of cumulative distance * Added marginal effects plot function `plot_marginal_effect` * Updated `kernel_scale.raster` multiScaleR 0.4.0-1 --------- * Updated `sim_rast` for efficiency. Uses custom fft multiScaleR 0.4.0-0 --------- * Incorporated scaling & centering `kernel_scale.raster` * `scale_opt` is now deprecated in `kernel_scale.raster`; replaced with `multiScaleR` argument. * Updated package data file structure * Passes CRAN checks multiScaleR 0.3.1-4 --------- * Updates to better generalize across model classes multiScaleR 0.3.1-3 --------- * Updated parallel processing handling to generalize use across model classes multiScaleR 0.3.1-2 --------- * Updated default `pct_wt` from 0.95 to 0.975 when smoothing raster layers * Fixed kernel_scale.raster error handling multiScaleR 0.3.1-1 --------- * Fixed bug in raster smoothing * Added na.rm argument multiScaleR 0.3.1-0 --------- * Implemented fft smoothing of rasters * Removed NLMR and RandomFields dependencies multiScaleR 0.3.0-5 --------- * Fixed bug causing optimization failure if only a single spatial covariate was used. multiScaleR 0.3.0-4 --------- * Updated documentation and created a PSOCK variable to force PSOCK cluster when using unix multiScaleR 0.3.0-3 --------- * Updated variable checks of `multiScale_optim` * Removed use of `method` and `opt_parallel` variables. Method is always 'L-BFGS-B` and if cores > 1 is specified, parallelization is implicit. multiScaleR 0.3.0-2 --------- * Uses sparse matrices for reduced memory demands multiScaleR 0.3.0-1 --------- * Updated kernel density functions to c++ for speed multiScaleR 0.2.0-8 --------- * Updated parallelization to use forking when operating on a Unix OS * Updated DESCRIPTION file to reflect necessary dependencies multiScaleR 0.2.0-7 --------- * Updated simulation function to create repeat sampling data * Updated vignette to demonstrate use of `multiScaleR` with `unmarked`. multiScaleR 0.2.0-6 --------- * Bug fixes * Added 'join_by' command when optimizing `unmarked` models with stacked data formats multiScaleR 0.2.0-3 --------- * Updated error handling across core functions multiScaleR 0.2.0-2 --------- * Fixed bug preventing optimization using unmarked models multiScaleR 0.2.0-1 --------- * Modified formatting of vignette document multiScaleR 0.2.0 --------- * Modified `multiScaleR_optim` to reduce size of final optimized object. * Completed vignette: use 'build_vignettes = TRUE' when installing * Updated code to accomodate lme4 and other model classes supported by `insight` package. multiScaleR 0.1.5 --------- * Updated plot function to show 95% confidence interval of scale of effect distance * Updated summary function to report mean and 95% scale of effect distance * Updated example data included with package to demonstrate more extensive use of package * Future addition -- A vignette demonstrating the use of the package multiScaleR 0.1.4 --------- * Cleaned code * Added documentation and examples to `multiScale_optim` multiScaleR 0.1.3 --------- * Corrected issue with distance weighting function * Updated how parameters are scaled multiScaleR 0.1.2 --------- * Fixed bug in optimization function multiScaleR 0.1.1 --------- * Fixed trap that was causing optimization with 'fixed' and 'expow' to fail * Updated plot and kernel_dist functions multiScaleR 0.1.0 --------- * Initial commit. Bugs and issues present, needed for class