Version: [5235] GeoStats Lab 3.12.1

3.12.1 - Hub listing text rewritten; author Geophilo; university
affiliation removed; documentation links use the standard geophilo.com
pages (manual.html, guide/); manual HTML no longer ships in the plugin
package.
3.12.0 - Regionalization: four new tools (102 in total). Max-p Regions
builds as many contiguous zones as possible that each meet a minimum
population or area; AZP (basic, simulated annealing, tabu) and REDCAP
(full-order linkage) build exactly k contiguous zones; Regionalization
Quality Assessment scores any partition with R-squared, attribute,
boundary and path silhouettes, compactness, contiguity and agreement
with a reference zoning. SKATER and Multivariate Clustering gain the
same quality report. Native numpy implementations - no spopt install
needed; the quality measures match esda and scikit-learn to
floating-point precision.
3.11.0 - Fixes Lee's L: both Lee's L tools computed the bivariate
Moran statistic under Lee's name; they now compute Lee (2001),
symmetric in the two fields, with permutation tests. Adds eight tools
(98 in total): Rate Smoothing (Empirical Bayes), Rate Cluster and
Outlier Analysis (EB Local Moran) with a raw-versus-EB cross-table,
Multivariate Local Geary, Local Join Count Statistics, Local Spatial
Heteroskedasticity (LOSH) with the Gi*/LOSH typology, Partial and
Conditional Local Moran, Gamma Index and the S-maup MAUP test. Every
statistic is checked against PySAL esda on the same data and agrees to
floating-point precision; the engines need numpy only.
3.10.1 - Fixed styling and field names being lost on 42 of 43 styled
tools whenever the output was saved to a GeoPackage or Shapefile.
3.10.0 - Completes group 07 | Interpolation and Geostatistics with the
two tools the group was missing, bringing the provider to 90
algorithms. Indicator Kriging (Threshold Exceedance Probability) turns
the observations into a 0/1 variable at each threshold - is this
location at or below the level - and kriges that variable on its own
by ordinary kriging, so the probability is produced by construction
rather than by assuming the field is well behaved around a predicted
value; it writes one band per threshold, an E-type estimate of the
field rebuilt from the repaired probabilities and an optional
variance, and reports the per-threshold fitted variograms, the
order-relation repair size, a Brier score with a skill score against
the base rate and a five-bin calibration table against the held-out
observations. A mapped band average that disagrees with the sample
frequency is now explained on the page with the numbers behind it:
ordinary kriging's far field converges on the declustered mean, so the
report prints the mapped, sample and cell-declustered frequencies side
by side for every threshold, together with the declustering sweep's
range, the cell sizes it spans and the busiest cell's count, and names
the threshold furthest from its declustered reference. Interpolation
Model Comparison scores inverse distance weighting, natural neighbour,
radial basis function, three polynomial trend orders and ordinary
kriging under one shared protocol - a single seeded fold split, with
every model refitted inside every fold so no exact interpolator can
score against its own fit - and reports the ranking with a paired
margin against the leader in standard errors, so a difference smaller
than the noise of the sample is reported as a tie rather than as a
finding. It writes a report and a CSV and deliberately no raster: the
winner's surface is produced by its own tool, carrying that tool's
settings and diagnostics. Also fixes a latent NameError in the
indicator report builder, where a comprehension referenced a name that
existed only as a local of the run, so report generation could only
ever have succeeded on a run that never wrote a report; and removes
two internal inconsistencies in that report, so that the surface
statistics describe the same cells as the band table rather than the
unmasked array behind them, and the cumulative probability column is
labelled as cumulative rather than as an exceedance probability. Adds
the two manual cards, the QA matrix rows, the README catalog entries
and a declustering check in the core smoke suite. No new required
dependency: the engines are numpy alone.
3.9.0 - Two new algorithms in a new group 07 | Interpolation and
Geostatistics, completing the classical geostatistics workflow the
plugin's name evokes. Empirical Semivariogram and Model
Fittingestimates how spatial similarity decays with distance and fits
one of five theoretical models (spherical, exponential, gaussian,
linear, stable) to it by Cressie-weighted least squares in
log-parameter space, reporting the nugget, sill and range alongside
the directional diagnostics that show whether a single isotropic model
is a fair description of the area. Ordinary / Universal Kriging
Interpolation builds a surface from those parameters - either
re-fitted inline or read straight from the semivariogram tool's output
layer - and writes kriging's own analytically derived variance as a
second raster, so each prediction carries the model's stated
uncertainty about itself. Universal kriging fits a linear or quadratic
drift by least squares and estimates the variogram from the residuals;
a run whose variogram was fitted to the raw trended values instead
produced a range of 513 against a true range of 220 and predicted
worse than ordinary kriging, which is why the residual fit is used and
disclosed in the report. Kriging cells are solved in memory-bounded
chunks, because an unchunked solve at 600 observations over a
4-million-cell grid measured about 18 GB. Both tools work on any
geometry type via feature centroids, refuse a constant field or a
zero-extent layer with an actionable message, and state their
point-count cost rather than hanging. Verified on QGIS 3.44 LTR and
QGIS 4.2 with 46 kriging and 76 semivariogram runtime checks. Also
fixes a wording defect found along the way: the shared report caveats
block named a distance band and a K value for interpolation tools that
have neither, and the hard-coded text was replaced by a per-method
argument that leaves the 81 pre-existing algorithms' reports
byte-identical.
3.8.2 - Repair the documentation path end to end. Every one of the 81
algorithms' Help buttons pointed at a retired documentation host and
returned a 404; the canonical manual host is now stated in one place
and pinned by a test. The Spatial Durbin manual card was missing a
closing tag, so its layout bled into the Methodological Notes that
follow it. Two CatBoost formulas contained an unescaped angle bracket
that the HTML parser consumed as an italic tag, so MathJax never
received the correct source. The manual advertised the previous
version in four places. Also repairs the release-verification gate
itself, which had been failing since 3.8.1 because README's verify
command still named 3.8.0.
3.8.1 - Redesign plugin icon to high-end 3D tactile brand design with
circular teal pedestal, zero margin, and refreshed documentation
links.
3.8.0 - Fix the Izmir 11-district FUR sample CRS; add multiple-testing
control, neighborhood-stability auditing, a spatial-weights workbench,
automatic GWR bandwidth selection, SDM impacts, reusable fitted-model
manifests, and enhanced dock workflows.
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.

yes

Token

2026-10-27T19:50:06.897079+00:00

3.28.0

4.99.0

None

no

Version management

Plugin details