Changes in version 0.2.1 (2026-06-08) Breaking changes - Removed predict.bean_ellipsoid(). The canonical implementation now lives in the companion package nicheR. New features - bean_ellipsoid objects returned by fit_ellipsoid() now carry a second S3 class, "nicheR_ellipsoid", and include the fields nicheR's predict.nicheR_ellipsoid() method expects: dimensions, cov_matrix, Sigma_inv, cl, var_names, and chi2_cutoff. As a result, once nicheR is loaded its predict() method dispatches directly on objects produced by bean::fit_ellipsoid() without any explicit conversion. - The existing centroid, covariance_matrix, points_in_ellipse, etc. fields are preserved for backward compatibility. - fit_ellipsoid() now pre-computes the inverse covariance matrix (Sigma_inv) using solve(), with a Moore-Penrose pseudo-inverse fallback (via SVD) and a warning if the covariance matrix is singular. Documentation - Vignette "3. Niche modeling" no longer ships a predict / suitability section; it shows the nicheR integration instead, with a plain-terra fallback for users who do not yet have nicheR installed. - README, vignette and fit_ellipsoid() references now direct users who want to project a bean_ellipsoid into geographic space to install nicheR and cite Castaneda-Guzman et al. (2026), nicheR: Ellipsoid-Based Virtual Niches and Visualization. Changes in version 0.2.0 (2026-05-30) Major changes - find_env_resolution() no longer uses a geometric "elbow" rule on nearest- neighbour distances. It now selects a kernel-density bandwidth for each environmental variable using the Sheather-Jones plug-in estimator (default), with Silverman and Scott rules also available via the new method argument. The bandwidth is a statistically defensible choice for the edge length of an environmental grid cell, and the new implementation is faster and more robust to ties. - rgl is now a Suggests dependency rather than an Imports. 3-D plots still work when rgl is installed; otherwise plot.bean_ellipsoid() falls back to a 2-D view of the first two requested dimensions. - The S3 method predict.bean_ellipsoid() is now documented under its canonical name (previously the help page was generated as predict.ellipsoid_bean). - Vignettes have been reorganised: - bean-overview — quickstart introduction. - data-preparation — preparing rasters and occurrences. - environmental-thinning — resolution selection and thinning. - niche-modeling — fitting ellipsoids and projecting suitability. All vignettes now build without requiring rgl. CRAN readiness - DESCRIPTION: trimmed Imports to MASS, stats, terra; moved rgl, ggplot2 and dplyr to Suggests (with dplyr removed entirely from the package — it was only used in one vignette). - Added a tests/testthat/ test suite covering find_env_resolution(), thin_env_nd(), thin_env_center(), fit_ellipsoid() and predict.bean_ellipsoid(). - Datasets are now documented as user-visible (not \keyword{internal}). - Replaced \dontrun{} examples that depended on missing files with \donttest{} examples that use the shipped sample data. - prepare_bean() now uses match.arg() for transform. - Cleaned up R/globals.R (was carrying many unused identifiers). Minor - print.bean_ellipsoid() output reformatted for clarity. - Internal helper .bean_ellipse_polygon() consolidates the 2-D ellipse polygon code path used by both fit_ellipsoid() and plot.bean_ellipsoid(). Changes in version 0.1.2 - Earlier development versions; see commit history on GitHub.