[general]
name=PlanX GeoStats Lab
qgisMinimumVersion=3.28
qgisMaximumVersion=4.99
description=PlanX spatial analysis lab for QGIS planning workflows: data preparation, urban pattern scanning, hot spots, centers, exploratory models and scenarios, and machine learning and explainable AI.
version=3.7.0
author=Yusuf Eminoglu
email=yusuf.eminoglu@deu.edu.tr
about=PlanX GeoStats Lab brings advanced spatial statistics and machine learning tools to the QGIS Processing Toolbox with a planning-analysis workflow designed for PlanX: Setup and Diagnostics, Data Preparation and Neighborhoods, Urban Pattern Scan, Hot Spots and Spatial Outliers, Centers Direction and Dispersion, Models and Scenarios, and Machine Learning and Explainable AI. The model workflow includes OLS, Generalized Linear Regression, Spatial Lag Regression, Spatial Error Regression, Spatial Durbin, Spatial Regime Regression, Exploratory Regression, Quantile Regression, GWR, MGWR, Eigenvector Spatial Filtering, model comparison and sensitivity testing. The Machine Learning group adds Random Forest, Extra Trees, Gradient Boosting (scikit-learn/XGBoost/LightGBM/CatBoost), SVM, Neural Network, and TabPFN (2025 tabular foundation model) regression/classification; spatial k-fold cross-validation (K-Means block or kNNDM); and explainability tools including SHAP (global/spatial map/local), the exact-contribution Explainable Boosting Machine, DiCE counterfactual explanations, and distribution-free Conformal Prediction Intervals. Optional GeoStats Python libraries are managed only through Processing Toolbox tools under 00 | Setup and Diagnostics: GeoStats Library Status for non-installing diagnostics and Install / Update GeoStats Libraries for explicit, user-approved pip installation. Developed with feedback from educational workflows at Dokuz Eylul University, Department of City and Regional Planning. Online User Manual & Documentation: https://yusufeminoglu.github.io/planx_geostats/GEOSTATS_REFERENCE_MANUAL.html | If you find this plugin helpful, please consider starring the repository on GitHub (https://github.com/YusufEminoglu/planx_geostats)!
tracker=https://github.com/YusufEminoglu/planx_geostats/issues
repository=https://github.com/YusufEminoglu/planx_geostats
homepage=https://yusufeminoglu.github.io/planx_geostats/GEOSTATS_REFERENCE_MANUAL.html
category=Processing
hasProcessingProvider=yes
tags=planx,qgis,processing,spatial statistics,planning analysis,hotspot,lisa,moran,getis-ord,gini,spatial gini,inequality,equity,gwr,mgwr,regression,model comparison,spatial autoregression,spatial error,spreg,clustering,k-means,sensitivity,monte carlo,directional mean,machine learning,random forest,gradient boosting,xgboost,lightgbm,catboost,support vector machine,neural network,tabpfn,foundation model,explainable ai,xai,shap,explainable boosting machine,glass-box,counterfactual explanation,dice,conformal prediction,uncertainty quantification,knndm,cross-validation,dbscan,hdbscan,gaussian mixture,quantile regression,spatial regime
icon=icons/icon.png
experimental=False
deprecated=False
license=GPL-3
changelog=
    3.7.0 - CRITICAL BUG FIX: 22 tools' output layers were silently shipping with NO automatic symbology or field metadata at all, despite postProcessAlgorithm appearing to apply it - postProcessAlgorithm(context, feedback) looked the output layer up via QgsProject.instance().mapLayer(self.out_layer_id), but at that point in the QGIS Processing lifecycle the layer only exists in context's temporary layer store, not yet in the project, so the lookup silently returned None and every apply_renderer()/apply_output_metadata() call after it was skipped - the layer was later added to the map with QGIS's plain default renderer, no colors, no legend labels. Fixed by switching all 22 files to the documented-correct context.getMapLayer(self.out_layer_id) pattern (already used correctly by the other ~24 output-producing tools, which were never affected). Affected tools: Getis-Ord Gi*, Local Moran's I, Local Geary's C, Bivariate LISA, Bivariate Lee's L, OLS/GLR/SAR/SEM/SDM/GWR/MGWR/ESF Regression, SKATER, Multivariate Clustering, Similarity Search, and the six center/dispersion tools (Mean/Median/Central Feature, Standard Distance, Directional Distribution, Linear Directional Mean). Confirmed with a real-QGIS diagnostic script (not just mocks) before and after the fix. Also hardens tests/qgis_runtime_algorithm_matrix.py so this exact bug class can never regress silently again: new renderer_class/alias_check_field assertions on all 22 fixed tools' RuntimeCase entries, checking the actual QGIS renderer type or field alias on the real output layer, not just its feature count (which stayed green through this whole bug).
    3.6.0 - Four flagship LISA-family tools that previously produced a map layer only, with zero diagnostic narrative, now gain a full HTML report: Getis-Ord Gi*, Local Moran's I, Local Geary's C, and Bivariate LISA. Each report adds a new donut chart (core/charts.py::donut_chart_svg()) breaking down the hot/cold or HH/LL/HL/LH class counts, colored to match the output layer's own map symbology 1:1 (the report and the map now visually agree), plus a KPI summary row and full analyst guidance. Along the way: Getis-Ord Gi* gains a new shared gi_confidence_renderer() (core/symbology.py), replacing its hand-rolled categorized renderer; Local Geary's C and Bivariate LISA - which had independently hand-rolled the same LISA quadrant renderer Local Moran's I already shares via lisa_quadrant_renderer() since v3.0.0 - are now switched onto the shared helper too, removing the last two duplicate copies of that renderer in the plugin. Also closes a real test-coverage gap found while auditing this work: 4 algorithms (bivariate_lisa, gw_summary_statistics, quantile_regression, spatial_regime_regression) were missing from tests/qgis_runtime_algorithm_matrix.py entirely - the real-QGIS integration test now covers all 81 algorithms (was 77), not just 77.
    3.5.0 - Two more output layers gain automatic symbology, closing out the v3.x initiative: Geographically Weighted Summary Statistics colors by gw_std with the same sequential quantile ramp Prediction Uncertainty Map uses, making locally high-vs-low spread visible on the map; SHAP Spatial Attribution Map now auto-symbolizes the highest mean-|SHAP| field (from its own SHAP Global Feature Importance ranking) with diverging zero-centered coloring as a sensible default, instead of leaving every shap_<field> column unstyled. The remaining single-feature-output tools (Mean/Median/Central Feature centers, Standard Deviational Ellipse, Standard Distance, Linear Directional Mean) are intentionally left unstyled - classification symbology has no value on a 1-to-few-feature output. Every multi-feature output-layer algorithm in the plugin now ships with automatic QGIS symbology.
    3.4.0 - Seven more output layers gain automatic symbology: DBSCAN and HDBSCAN clustering now color by cluster_id with noise points (-1) in a fixed neutral gray; Gaussian Mixture clustering and Spatial k-Fold CV Evaluator color by cluster_id/cv_fold (no noise concept, every record belongs to a component or fold); Model Residual Spatial Autocorrelation Check gains the same diverging residual coloring every other residual-producing tool has; Prediction Uncertainty Map and Conformal Prediction Interval gain a new sequential single-hue coloring (core/symbology.py::sequential_quantile_renderer(), colorblind-safe, same ramp core/charts.py's confusion-matrix heatmap uses) on their uncertainty/interval-width field, so the most uncertain records are visually obvious on the map without opening the attribute table.
    3.3.0 - Every classifier in the plugin now colors its output layer by predicted class: Random Forest, Extra Trees, SVC, all 4 Gradient Boosting engines (via the shared _gbm_base.py), Neural Network (MLP), Explainable Boosting Machine (EBM), and TabPFN Classification - 10 tools total. Adds core/symbology.py::categorical_field_renderer(), a new data-driven qualitative renderer that cycles the same 10-color palette alg_skater.py's region_id already used, by POSITION in the sorted unique-value list rather than by integer modulo - so it works for the string class labels (land-use categories, zoning classes, ...) every classifier's <engine>_class field holds, not just integer IDs. This completes automatic symbology for every classification tool in the plugin.
    3.2.0 - Seven more regression tools gain diverging residual coloring: all 4 Gradient Boosting engines (scikit-learn/XGBoost/LightGBM/CatBoost, via the shared _gbm_base.py - one edit covers all four), Neural Network (MLP), Explainable Boosting Machine (EBM), and TabPFN Regression. Same core/symbology.py::diverging_residual_renderer() pattern as the previous release. This completes automatic symbology for every regression tool in the plugin's Group 06 (Machine Learning).
    3.1.0 - Six regression tools that previously shipped their output layer with QGIS's default symbology now get the same diverging residual coloring the spatial-econometric tools already had: Generalized Linear Regression (which had no postProcessAlgorithm at all until now - it also gained the layer-metadata aliasing every other tool already has), Quantile Regression, Spatial Regime Regression, and Random Forest/Extra Trees/SVR Regression. Uses the new data-driven diverging_residual_renderer() from core/symbology.py (v3.0.0), which computes mean and std dev straight off the built layer via QGIS's own aggregate functions - no new output field needed. Manual entries not applicable (this is map symbology, not report content).
    3.0.0 - Starts a new major initiative: automatic QGIS symbology (classification + coloring) for output layers, mirroring the inline-chart work's approach (a shared toolkit, wired to tools one release at a time). Adds core/symbology.py: shared, tested helpers for the categorized LISA HH/HL/LH/LL renderer, the diverging 7-class std-dev renderer, a new data-driven diverging-residual renderer for tools that only write a raw (non-standardized) residual column, a new sequential quantile renderer for confidence/uncertainty fields, and a new qualitative cluster-id renderer with dedicated noise-point coloring - extracted from the near-identical code Local Moran's I, OLS Regression, and SKATER each hand-rolled independently, which now call the shared helpers instead (no behavior change beyond SKATER's region outline harmonizing to the same gray used everywhere else). About 30 output layers across the plugin still ship with QGIS's default symbology; wiring them to this new toolkit is the major-version body of work ahead. Major version bump marks this as a deliberate new initiative, not a patch.
    2.11.1 - Documentation-only release: GEOSTATS_REFERENCE_MANUAL.html gains the "Report includes:" note for every tool that gained a chart across the last several releases (Spatial Durbin, GWR, MGWR, ESF, Spatial Regime, Quantile Regression, all 10 ML regressors' residual-vs-fitted scatterplot, and the SHAP Local Explanation waterfall chart), plus fills in a small pre-existing gap from the v2.7.0 classifier sweep (GBM x4, MLP, EBM, and TabPFN classification confusion-matrix notes). No code changes.
    2.11.0 - Completes the VISUALIZATION_PATHWAY.md sweep. Every remaining regression tool gains a residual-vs-fitted scatterplot: Quantile Regression, Spatial Regime Regression, and all 10 ML regressors (Random Forest, Extra Trees, SVR, Neural Network/MLP, Explainable Boosting Machine, TabPFN, and all 4 Gradient Boosting engines via the shared _gbm_base.py). Tier 3 lands: core/charts.py gains a new waterfall_svg() primitive (base value -> sequential signed contributions -> final prediction), wired into SHAP Local Explanation Report - the standard SHAP local-explanation visual, replacing a plain contributions table with a waterfall chart above it. Every algorithm report in the plugin that computes a chartable statistic now visualizes it inline, no external dependency, per VISUALIZATION_PATHWAY.md's original brief. Manual entries pending for this and the two prior releases.
    2.10.0 - Four more regression reports gain a residual-vs-fitted (or residual-vs-predicted) scatterplot: Spatial Durbin Model, Eigenvector Spatial Filtering (ESF) Regression, GWR, and MGWR. core/advanced_stats_engines.py::calculate_spatial_durbin now also returns its fitted-value array (GWR/MGWR already exposed predicted/residuals internally; ESF's fitted/residuals were computed in processAlgorithm but not yet passed to the report writer, now threaded through). Manual entries pending. Remaining regression tools (Quantile, Exploratory, Spatial Regime, and all ML regressors) and the Tier-3 SHAP waterfall chart follow in upcoming releases.
    2.9.0 - The four core linear/spatial-econometric regression reports gain a residual-vs-fitted (or residual-vs-predicted) scatterplot: OLS Regression, Generalized Linear Regression, Spatial Autoregression (Lag/SAR), and Spatial Error Regression (SEM). core/stats_engines.py::calculate_ols now also returns its fitted-value array alongside the existing residuals (GLR/SAR/SEM already exposed fitted/predicted internally). This starts the regression-tools sweep from VISUALIZATION_PATHWAY.md's Tier 2 list; more regression tools (Spatial Durbin, ESF, GWR, MGWR, Quantile, Exploratory, Spatial Regime, and the ML regressors) follow in upcoming releases. Manual entries updated.
    2.8.0 - Begins Tier 2 of the visualization pathway (reusing existing chart primitives on more tools, plus one new pattern). Note: Getis-Ord Gi*, Local Moran's I, Local Geary's C, Bivariate LISA, and Linear Directional Mean turned out to be map-output-only tools with no HTML report to chart, so this release covers the Tier-2 candidates that do produce a report instead: Colocation Quotient gains a permutation-histogram (observed CLQ marked); Join Count Statistics gains a bar chart of observed BB/WW/BW counts; Geodetector Q-Statistic gains a bar chart of per-stratum means; Prediction Uncertainty Map gains a histogram of unc_std; DiCE Counterfactual Explanation gains a diverging before-after bar chart per counterfactual (reusing bar_chart_svg, which is already zero-anchored and diverging for mixed-sign values - no new primitive needed). core/advanced_stats_engines.py::calculate_colocation_quotient now also returns its permuted-value array. Manual entries updated.
    2.7.0 - The remaining 7 classifier reports (Neural Network/MLP, Explainable Boosting Machine, TabPFN, and all 4 Gradient Boosting engines via the shared _gbm_base.py) gain the same confusion-matrix heatmap the first 3 classifiers got last release - every classifier in the plugin now charts its confusion matrix. Added the "default dashboard" KPI summary row (3 key numbers right under the title, before the existing tables) to the 3 tools that validated the chart pattern first: Global Moran's I, Spatial Gini, and ML Model Comparison. Manual entries updated.
    2.6.0 - Five more reports gain charts: Random Forest, Extra Trees, and Support Vector classification reports each gain a shaded heatmap of their confusion matrix (sequential single-hue, colorblind-safe) alongside the existing table; Partial Dependence Report gains a line chart of its sweep curve; Conformal Prediction Interval gains a sorted-prediction interval plot (shaded lower/upper ribbon with point predictions), deterministically subsampled to ~1,500 records on very large layers. core/charts.py::line_chart_svg() gained an optional band parameter for the ribbon plot, covered by its own smoke-test case. Manual entries updated.
    2.5.0 - Five more reports gain charts: Ripley's K-Function gets a line chart of observed vs. CSR-expected K(d) across distance bands with the peak L(d)-d departure marked; Spatial Gini gains a Lorenz curve with the classic Gini labeled; ML Model Comparison and Model Comparison Matrix both gain a ranked leaderboard bar chart (best model highlighted); Spatial k-Fold Cross-Validation Evaluator gains a per-fold metric bar chart. All five charts are computed directly from data these tools already extract or compute - no new statistics. Manual entries updated.
    2.4.0 - Four more spatial-autocorrelation reports gain charts: Geary's C gets a permutation-histogram (observed C marked), reusing the same permuted values the statistic already computes; Model Residual Spatial Autocorrelation Check gains a residual Moran scatterplot; Global Bivariate Lee's L gains a bivariate Moran-style scatterplot (standardized Field X vs. spatial lag of standardized Field Y); Incremental Spatial Autocorrelation's existing hand-rolled correlogram was refactored onto the shared line_chart_svg() helper (same visual output). core/analysis_diagnostics.py and core/advanced_stats_engines.py now expose the per-point/permutation arrays these charts need alongside their existing summary statistics. Manual entries updated.
    2.3.0 - First three HTML reports now draw the inline-SVG charts core/charts.py added last release: Global Moran's I gets a proper Moran scatterplot (standardized value vs. spatial lag, OLS trend line, HH/HL/LH/LL quadrant shading); Attribute Randomization Sensitivity Test's existing hand-rolled histogram was refactored to use the shared histogram_svg() helper (same visual output, now shared code); Permutation Feature Importance gained a ranked bar chart above its table. Manual entries updated to describe the new charts.
    2.2.0 - Added core/charts.py, a new dependency-free inline-SVG chart toolkit (bar/scatter/line/histogram/heatmap/rose/Lorenz charts plus KPI dashboard cards) that HTML reports will draw on starting next release. Stdlib-only (html, math), no matplotlib/PIL/network calls, enforced by a new AST-based smoke test alongside structural SVG-validity and edge-case coverage. No algorithm report output changed yet - this release ships the shared toolkit only, per VISUALIZATION_PATHWAY.md (now committed) increment 1.
    2.1.2 - Bug fixes found by adding real QGIS runtime execution coverage for 06 | Machine Learning and Explainable AI (previously untested end-to-end): Conformal Prediction Interval called a mapie API removed in mapie 1.0's rewrite (fixed against the current CrossConformalRegressor API, same jackknife+ method); TabPFN Regression/Classification crashed with a raw Windows socket error instead of a usable message when the one-time TabPFN license step had not been completed (now raises clear guidance to set a TABPFN_TOKEN environment variable, since TabPFN's interactive browser-login prompt is unreliable on Windows). 19 of the 34 Group 06 tools that need only scikit-learn now run for real on every verify.
    2.1.1 - Bug fix: the docked GeoStats Lab panel's group list (geostats_dock.py) was missing 06 | Machine Learning and Explainable AI entirely, so all 34 algorithms in that group (including every tool added in 2.1.0) were fully registered and runnable from the Processing Toolbox but never appeared in the docked panel. Fixed, and added a smoke test that fails loudly if a future group is ever left out of the dock's list again.
    2.1.0 - 8 new algorithms (73 to 81) in 06 | Machine Learning and Explainable AI: Conformal Prediction Interval (MAPIE jackknife+, distribution-free coverage guarantee, works for every model in the group); TabPFN Regression and Classification (Hollmann et al. 2025 Nature, zero-shot tabular foundation model); DiCE Counterfactual Explanation (minimal-edit "what would flip this prediction" recourse); CatBoost Regression and Classification (4th Gradient Boosting engine, ordered boosting); Explainable Boosting Machine Regression and Classification (glass-box additive model with exact, non-sampled per-field contribution columns). Spatial k-Fold Cross-Validation Evaluator gained a kNNDM fold-assignment option (Linnenbrink et al. 2024) alongside the existing K-Means block method. New optional dependencies (catboost, interpret, mapie, dice-ml, tabpfn) install through the same Setup and Diagnostics workflow. Reference manual expanded with full entries for all 8 new tools and deepened across the 26 pre-existing Machine Learning entries (additional theory, equations, interpretation, and citations). Also fixes two pre-existing MGWR bugs: an adaptive-kernel bandwidth-search precondition that failed with an opaque error on small samples, and a result-extraction crash when hat_matrix=False.
    2.0.0 - Major release: 29 new algorithms (44 to 73) across one new group plus one existing group. 06 | Machine Learning and Explainable AI (26 tools): Random Forest, Extra Trees, Support Vector, and Neural Network (MLP) regression/classification; Gradient Boosting regression/classification across three engines (scikit-learn, XGBoost, LightGBM); Spatial k-Fold Cross-Validation Evaluator, Permutation Feature Importance, Partial Dependence Report, and ML Model Comparison (Leaderboard); SHAP Global Feature Importance, SHAP Spatial Attribution Map (writes per-feature SHAP contributions back onto the map as symbolizable columns), and SHAP Local Explanation Report; Model Residual Spatial Autocorrelation Check and Prediction Uncertainty Map; DBSCAN, HDBSCAN, and Gaussian Mixture Model clustering. 05 | Models and Scenarios gained Spatial Regime Regression (spreg OLS_Regimes with a Chow test for structural instability), Quantile Regression (hand-rolled iteratively-reweighted-least-squares, no new dependency), and Geographically Weighted Summary Statistics. New optional dependencies (xgboost, lightgbm, shap) install through the same Setup and Diagnostics > Install / Update GeoStats Libraries workflow as the existing optional packages. A new synthetic classification QA/demo GeoPackage fills the gap the Izmir FUR sample cannot cover on its own (no categorical field); Sample Dataset Guide and Workflow Advisor updated to load and recommend it. Reference manual expanded with a full theory/math/parameters/interpretation/citations entry for every new tool (44 to 73 entries).
    1.0.0 - New Izmir Functional Urban Region (FUR) street-network/space-syntax sample dataset (391 features, 34 real fields), replacing the old population/heat-map sample, with every workflow example, Workflow Advisor recipe, and manual walkthrough rewritten to match. Added 10 new advanced spatial-statistics tools (34 to 44 algorithms): Geary's C, Join Count Statistics, Global Bivariate Lee's L, and the Geodetector Q-statistic in Urban Pattern Scan; Local Geary's C, Colocation Quotient, and native SKATER spatially constrained regionalization in Hot Spots and Spatial Outliers; Lagrange Multiplier Diagnostics, Spatial Durbin Model, and Eigenvector Spatial Filtering Regression in Models and Scenarios. Each new tool ships with a full elite-depth reference-manual entry (theory, math, parameters, interpretation, citations) and a unique icon. Redesigned the main plugin icon (was illegible at QGIS toolbar sizes) around a bolder spatial-weights network glyph, verified legible at 16px.
    0.10.0 - Deepened every algorithm's in-GUI help text with field-by-field interpretation guidance and cross-tool recommendations; added Theoretical Background sections to the Centers/Direction/Dispersion group; fixed broken helpUrl() deep links on all 34 algorithms, a wrong Bivariate LISA icon, a manual tag-balance bug, 4 mismatched algorithm-id labels, and 1 broken DOI link; added a dockable GeoStats Lab panel (toolbar icon + Plugins menu) grouping all 34 tools with search and one-click launch, now packaged as a hybrid Processing + dock-GUI plugin; added manual copy-anchor links, See Also cross-references, and performance badges.
    0.9.23 - Updated documentation links to point to GEOSTATS_REFERENCE_MANUAL.html.
    0.9.17 - Added Spatial Inequality (Gini and Spatial Gini) with Rey-Smith style neighbor/non-neighbor decomposition, polarization, CSV/JSON outputs, permutation inference, root PNG plugin icon packaging, full QGIS 3/4 runtime matrix coverage, and optional-library import diagnostics.
    0.9.14 - Code quality and Hub submission hygiene.
        - Added setup.cfg (flake8: W503, E203 disabled; max-line-length=120).
        - Fixed 21 flake8 issues: 8 unused QVariant imports, 3 E302 missing blank lines before classes, 1 E261 inline-comment spacing, 3 E122 continuation blocks hoisted from f-strings, W293/W291 trailing whitespace stripped across all 42 .py files.
   0.9.13 - GeoStats provider/runtime smoke coverage updates and QGIS 3.40+/4 compatibility validation.
    0.9.12 - Maintenance release: refreshed Plugin Hub package after QGIS 3 and QGIS 4 compatibility validation.
    0.9.11 - Internal stabilization patch for release pipeline alignment and package verification guards.
    0.9.10 - Beta stabilization complete: centralized optional dependency guidance, hardened output metadata persistence, added null/empty/failed-centroid geometry safeguards across centroid-based workflows, and expanded smoke coverage for release gates.
    0.9.9 - Workflow Advisor decision engine: added user-selectable analysis goal, geometry context, outcome type, explanatory-variable availability, and personalized recommended tool sequences.
    0.9.8 - Professional analytics release: added GeoStats Workflow Advisor, manual QA matrix, shared analyst guidance/report helpers, output-layer metadata aliases, VIF diagnostics, and Model Comparison rank/score auditing.
    0.9.7 - Release QA hardening: added smoke coverage that keeps metadata, changelog, and README release verification commands synchronized on the same plugin version.
    0.9.6 - Sample guide clarity: listed every synthetic model-output QA layer explicitly and added smoke coverage that verifies the guide mentions every loadable sample and QA layer.
    0.9.5 - Sample Dataset Guide improvement: documented loading modes in the generated guide and added smoke coverage that keeps QA fixture load options synchronized with bundled GeoPackage layers.
    0.9.4 - Deep QA expansion: added a separate synthetic QA GeoPackage for point, line, polygon, and model-output runtime checks; added a Sample Dataset Guide load selector for planning and QA fixtures; expanded smoke tests for sample coverage, HTML report module shadowing, multipart geometry guards, and QGIS spatial-index API compatibility.
    0.9.3 - Runtime fixes for QGIS 3.40: fixed Incremental Spatial Autocorrelation HTML report generation and updated KNN spatial weights to use the current QgsSpatialIndex.nearestNeighbor API with a legacy fallback.
    0.9.2 - Hub security scan fix: removed developer-only tests and hidden git metadata from release zip packages while keeping source smoke tests in the repository; no runtime GeoStats behavior changed.
    0.9.1 - Processing-only cleanup: removed the separate GeoStats Libraries menu/toolbar dialog, kept library status and installation under 00 | Setup and Diagnostics, added distinct PNG icons for every algorithm, corrected Poisson GLR likelihood/AIC, and expanded smoke-test coverage.
    0.9.0 - Renamed to PlanX GeoStats Lab; reorganized tools into English PlanX planning workflow groups; added Exploratory Regression; added GeoStats Library Status diagnostics; dependency diagnostics and installer are available only under 00 | Setup and Diagnostics with detailed guidance.
    0.8.0 - Linear Directional Mean; Attribute Randomization Sensitivity Test (Monte Carlo).
    0.7.0 - Multivariate Clustering (K-Means); Export Feature Attributes to CSV/ASCII.
    0.6.0 - Similarity Search; Calculate Distance Band from Neighbor Count.
    0.5.0 - Median Center (Weiszfeld); High/Low Clustering (Getis-Ord General G).
    0.4.0 - Average Nearest Neighbor; Standard Distance; Geographically Weighted Regression (GWR).
    0.3.0 - Global Moran's I; OLS Spatial Regression.
    0.2.0 - Local Moran's I (LISA); Mean Center; Standard Deviational Ellipse; Dependency Installer.
    0.1.0 - Initial release with Getis-Ord Gi* Hot Spot Analysis.
