=== versions === python 3.12.0 | numpy 2.5.4 | xarray 2026.9.0 | rasterio 1.5.2 | pymannkendall 1.4.3 | scipy 1.18.1 === MOD13A1 v6.1 items on the Planetary Computer === 570 Terra composites, tiles ['h26v05'], 2000-12-18 .. 2025-12-19 read 570 x 2 windows of 600 x 1076 pixels in 21 s cube: 570 composites x 600 x 1076 pixels (500 m, MODIS sinusoidal); 7 duplicate composites (reprocessed copies) dropped composites missing from the catalogue: 2022-09-30, 2022-11-17, 2022-12-03, 2023-02-18, 2024-12-18, 2025-07-12, 2025-07-28, 2025-08-13, 2025-08-29, 2025-09-14, 2025-09-30, 2025-10-16, 2025-11-01 -> 2025 lacks July-November, so the analysis uses 2001-2024 (24 growing seasons) === QA masking with the pixel reliability layer === reliability -1 (fill / no data): 0.0% of pixel-composites in the window reliability 0 (good): 80.3% of pixel-composites in the window reliability 1 (marginal): 15.6% of pixel-composites in the window reliability 2 (snow or ice): 1.1% of pixel-composites in the window reliability 3 (cloudy): 3.1% of pixel-composites in the window === growing-season aggregation === growing-season composites per year: 9.8 on average; median valid (QA-passed) per pixel-year inside the box 10 pixels analysed: 229,229 of 229,233 inside the box (dropped: mean growing-season NDVI <= 0.1 or any year with < 5 valid composites) === vectorised Mann-Kendall and Theil-Sen (annual growing-season means) === 229,229 pixels in 2.2 s cross-check with pymannkendall.original_test (pixel: S ours/pmk, p ours/pmk, slope ours/pmk): (394,830): S +158/ +158 p 0.0001/0.0001 slope +0.00771/+0.00771 (466,571): S +158/ +158 p 0.0001/0.0001 slope +0.00752/+0.00752 (262,408): S +184/ +184 p 0.0000/0.0000 slope +0.00669/+0.00669 (516,727): S +184/ +184 p 0.0000/0.0000 slope +0.00505/+0.00505 (265,611): S +180/ +180 p 0.0000/0.0000 slope +0.00901/+0.00901 ( 54,204): S +214/ +214 p 0.0000/0.0000 slope +0.00413/+0.00413 === seasonal Mann-Kendall (monthly means, May-September as seasons) === cross-check with pymannkendall.seasonal_test(period=5): (394,830): S +666/ +666 p 0.0000/0.0000 slope +0.00858/+0.00858 (466,571): S +699/ +699 p 0.0000/0.0000 slope +0.00724/+0.00724 (262,408): S +772/ +772 p 0.0000/0.0000 slope +0.00667/+0.00667 annual MK and seasonal MK agree on the sign of the trend for 99.9% of pixels; p < 0.05 (unadjusted): annual 97.8%, seasonal 99.0% === serial correlation === lag-1 autocorrelation, annual growing-season means: median +0.06; |r1| > 0.40 (approx. 5% test) for 13.7% of pixels lag-1 autocorrelation, 16-day deseasonalised anomalies: median +0.57 Original MK p < 0.05 for 97.6% of 2,000 random pixels Hamed-Rao modified MK p < 0.05 for 93.8% of 2,000 random pixels Yue-Wang modified MK p < 0.05 for 99.4% of 2,000 random pixels Pre-whitening (PW) p < 0.05 for 19.8% of 2,000 random pixels Trend-free pre-whitening (TFPW) p < 0.05 for 96.4% of 2,000 random pixels for contrast, MK on the 16-day anomaly series (547 values) of 500 pixels: p < 0.05 for 100.0% (original) vs 98.6% (Hamed-Rao) === false discovery rate across pixels === own Benjamini-Hochberg vs statsmodels: max |difference| in q = 1.11e-16 tests: 229,229; p < 0.05 unadjusted: 224,193 (97.8%); expected false positives if no trend anywhere: 11,461 BH q < 0.05: 224,193 (97.8%); equivalent p-value threshold 0.0445 Bonferroni p < 2.2e-07: 54,459 (23.8%) significant greening: 223,932 pixels (97.7%), median slope +0.080 NDVI/decade significant browning: 261 pixels (0.1%), median slope -0.038 NDVI/decade area-mean Theil-Sen slope: +0.0803 NDVI/decade; mean growing-season NDVI 0.310 (2001) -> 0.517 (2024) significant but small (|slope| < 0.02/decade): 3,848; large (> 0.05/decade) but not significant: 123 === sensitivity to the end of the series (Terra orbit drift after 2020) === 2001-2019: p < 0.05 for 96.8% of pixels (full series 97.8%); slope correlation with 2001-2024 0.93; same sign 99.7% === figures === example pixel 'Strong significant greening': 36.877 N, 109.195 E example pixel 'Significant browning': 38.044 N, 109.198 E example pixel 'Large slope, not significant': 36.627 N, 109.499 E example pixel 'Small slope, significant': 37.581 N, 108.826 E wrote 6 figures to output/