Changes in version 0.4.0 (2026-05-11) New features - Added interactions(), which ranks numeric predictor pairs by the count-weighted magnitude of their centred second-order ALE surfaces. - Added top_n to bivariate() for method = "ale" so the plotting interface can rank all eligible pairs with interactions() and display only the strongest interaction surfaces. Changes in version 0.3.1 Fixes - bivariate(method = "ale") now masks grid cells that contain no observations as NA in the returned surface and renders them in the fill scale's na.value (default light grey) rather than colouring them with a value extrapolated from neighbouring cells. This prevents the interaction surface from displaying confident estimates over regions of feature space that the data does not support, which previously misled readers when predictors were correlated. - bivariate(method = "ale") now defaults to n = 10 (the second-order surface uses an n x n cell grid; n = 40 left most cells empty for typical data) and to rug = TRUE so the data density is always visible. - ale_surface_limits() is robust to surfaces that are entirely NA. - Updated docs/Rd to describe the half-cell centring convention used for the 2D ALE accumulation and the empty-cell masking behaviour. - Enabled categorical ALE in multimodel() and mapcurve(), matching the univariate ALE support and using a shared level order across ensemble members when multimodel() averages unordered factor effects. - Added extrapolate = FALSE to bivariate() so unsupported ALE grid cells remain masked by default but can be shown on request using the interpolated values already used internally for accumulation. Changes in version 0.3.0 New features - Extended univariate() with method = "profile", "pdp", "ice", and "ice+pdp" so single-profile, partial dependence, and ICE plots share one entry point. - Added method = "ale" to univariate() for accumulated local effects curves on numeric predictors. - Changed univariate(method = "ale") to warn and skip factor predictors instead of failing when numeric predictors are also available. - Split univariate() and mapcurve() sampling controls so n sets numeric grid resolution while background_n sets the number of randomly sampled background rows used for PDP/ICE. - Added interval to univariate() and mapcurve() so method = "pdp" can draw central quantile ribbons for numeric predictors. - Added adaptive raster sampling for univariate() so PDP/ICE methods can draw more background predictor combinations when predict_data comes from a SpatRaster. - Added bivariate() for bivariate response surfaces with static heatmap and contour views. - Extended bivariate() with method = "pdp" and method = "ale", plus optional marginal rugs for numeric predictor pairs in static plots. - Added optional interactive 3D response surfaces for numeric predictor pairs when plotly is installed. - Added support for selecting predictor pairs by column name or column index. - Added support for list-valued fun in multimodel() so mixed model types can use model-specific prediction wrappers before averaging curves. Changes - Renamed the bivariate plotting mode argument from type to plot_type so model-specific type arguments can still be passed through ... to predict(). - Changed bivariate(plot_type = "heatmap") to use a viridis fill scale by default and to stop drawing contour overlays on heatmaps. - Updated the random forest species distribution vignette to use a smaller predictor set and to include univariate() examples for profile, PDP, and ICE + PDP plots. - Stopped drawing connecting lines for unordered factor predictors in univariate(), so categorical panels no longer imply numeric intervals.