{
  "task_slug": "spatial-domain-smoothing-null-control",
  "question": "在 DLPFC 12 张 Visium 切片上,一个零学习的 kNN 邻居平滑基线能拿到多少 ARI?以及一个只有几何、没有真实表达信息的空模型能白拿多少 ARI?",
  "falsifiable_prediction": "P1: 最佳 k 下平滑基线在 12 张切片上的平均 ARI >= 0.40,且相对 k=0 提升 >= +0.10(配对 Wilcoxon p<0.05);若平均 ARI < 0.40 或提升 < 0.10 或 p >= 0.05,则 P1 被推翻。P2: 几何空模型(坐标保留、表达替换为空间平滑高斯噪声)的 ARI <= 0.15;若 > 0.25 则 P2 被推翻,意味着该数据集上 ARI 存在显著的几何免费分数。两条均按实际结果照报。",
  "prediction_outcome": "refuted",
  "negative_result": true,
  "dataset": "LIBD Human DLPFC 10x Visium, 12 slices ([151507, 151508, 151509, 151510, 151673, 151674, 151675, 151676, 151669, 151670, 151671, 151672]), n_cells range 3431-4788, top-2000 HVGs, PCA-50.",
  "env": {
    "python": "3.12.3",
    "torch": "not used (no deep learning in this experiment)",
    "extra_packages": [
      "h5py==3.16.0"
    ]
  },
  "seeds": [
    0,
    1,
    2
  ],
  "arms": [
    {
      "name": "baseline-nonspatial",
      "is_baseline": true,
      "what": "k=0 (no spatial smoothing), clusterer=gmm_full, log-norm -> top2000 HVG -> PCA50 -> cluster(true K). Same preprocessing/PCA/clustering/seeds as proposed arm.",
      "metrics": {
        "ari": {
          "per_seed": [
            0.20480497922810123,
            0.20313894320479994,
            0.21182858900251997
          ],
          "mean": 0.20659083714514037,
          "std": 0.0037655856027402415
        },
        "nmi": {
          "per_seed": [
            0.32704470536523844,
            0.32505735376879363,
            0.3276336254267542
          ],
          "mean": 0.3265785615202621,
          "std": 0.0011021982510902933
        },
        "spatial_coherence": {
          "per_seed": [
            0.5764305894277021,
            0.5802095329250214,
            0.581629352147033
          ],
          "mean": 0.5794231581665855,
          "std": 0.0021940179881525103
        },
        "ari_seed_std": {
          "per_seed": [
            0.04710696454804716,
            0.04909558760772381,
            0.012033527337544174,
            0.01211229110132261,
            0.009738048807378247,
            0.004779219359728428,
            0.07739656108514928,
            0.02927099687475216,
            0.02901283034817836,
            0.033449575091633744,
            0.017095488718995487,
            0.017344344058265484
          ],
          "mean": 0.02820295291155991,
          "std": 0.020195848241436002,
          "note": "per_seed here lists per-slice (12 DLPFC samples) std-across-3-seeds of ARI, not per-global-seed values -- this metric is inherently a per-slice statistic."
        }
      }
    },
    {
      "name": "proposed-smooth-knn",
      "is_baseline": false,
      "what": "k=24 spatial kNN neighbor averaging (X'=0.5X+0.5*mean_kNN(X)) inserted after log-normalize/HVG selection, before PCA. clusterer=gmm_full. Zero trained parameters. best_k/best_clusterer chosen by max mean ARI over the full sweep k in [6, 12, 18, 24] x clusterer in ['kmeans', 'gmm_full'].",
      "metrics": {
        "ari": {
          "per_seed": [
            0.3533978034076144,
            0.3415927994737118,
            0.34830004696032907
          ],
          "mean": 0.3477635499472184,
          "std": 0.0048342804534333384
        },
        "nmi": {
          "per_seed": [
            0.5170509760791585,
            0.5030964648887775,
            0.515101524745153
          ],
          "mean": 0.5117496552376964,
          "std": 0.0061702710657302005
        },
        "spatial_coherence": {
          "per_seed": [
            0.9270955357429421,
            0.9232902051502424,
            0.9259003137260091
          ],
          "mean": 0.9254286848730645,
          "std": 0.001588911694867791
        },
        "ari_seed_std": {
          "per_seed": [
            0.0399239062371066,
            0.053483984162864304,
            0.009331064096462801,
            0.008473696896440971,
            0.06380752442546381,
            0.01369847466148901,
            0.044225873434127656,
            0.00996757455085876,
            0.024598705338994716,
            0.018193081804897846,
            0.02780100402802019,
            0.05725168060657977
          ],
          "mean": 0.030896380853608876,
          "std": 0.019277264331259713,
          "note": "per_seed here lists per-slice (12 DLPFC samples) std-across-3-seeds of ARI, not per-global-seed values -- this metric is inherently a per-slice statistic."
        }
      }
    },
    {
      "name": "null-shuffle-expr",
      "is_baseline": false,
      "what": "Expression rows randomly permuted relative to spatial coordinates (coords fixed), then run through the same best_k=24/best_clusterer=gmm_full smoothing pipeline. Tests whether smoothing alone fabricates apparent structure when expression carries no real positional information.",
      "metrics": {
        "ari": {
          "per_seed": [
            0.004988944189227557,
            0.004872746528169128,
            0.00515928072673162
          ],
          "mean": 0.0050069904813761015,
          "std": 0.00011767104778915198
        },
        "nmi": {
          "per_seed": [
            0.010157818082883227,
            0.010389424866238745,
            0.011458165332761677
          ],
          "mean": 0.010668469427294549,
          "std": 0.0005663480336670093
        },
        "spatial_coherence": {
          "per_seed": [
            0.34688417247924835,
            0.3482531293272475,
            0.35411644502578415
          ],
          "mean": 0.3497512489440933,
          "std": 0.003136846966475263
        },
        "ari_seed_std": {
          "per_seed": [
            0.001975510791661798,
            0.0013500439056670919,
            0.0017769912307149835,
            0.0013814914928558404,
            0.00286695392210882,
            0.0023945031901063253,
            0.0018013221393918296,
            0.0061348992128580655,
            0.002200920890224495,
            0.0027444436746208085,
            0.001650528036383863,
            0.002738573371581781
          ],
          "mean": 0.002418015154847975,
          "std": 0.0012269468008200707,
          "note": "per_seed here lists per-slice (12 DLPFC samples) std-across-3-seeds of ARI, not per-global-seed values -- this metric is inherently a per-slice statistic."
        }
      }
    },
    {
      "name": "null-geometry-only",
      "is_baseline": false,
      "what": "Expression matrix replaced by iid standard Gaussian noise of the same shape (coords real, unchanged), then run through the same best_k=24/best_clusterer=gmm_full smoothing pipeline. Measures the ARI floor obtainable purely from smooth-and-cluster geometry with zero real expression signal.",
      "metrics": {
        "ari": {
          "per_seed": [
            0.049546738495774706,
            0.04921626627086519,
            0.050649491359982125
          ],
          "mean": 0.04980416537554067,
          "std": 0.0006127723817960965
        },
        "nmi": {
          "per_seed": [
            0.08969215962976336,
            0.08918036224034748,
            0.09366981247902567
          ],
          "mean": 0.0908474447830455,
          "std": 0.0020066229840933467
        },
        "spatial_coherence": {
          "per_seed": [
            0.831078761306795,
            0.8259699372541439,
            0.8242683805437995
          ],
          "mean": 0.8271056930349129,
          "std": 0.00289399118052186
        },
        "ari_seed_std": {
          "per_seed": [
            0.01989631244694833,
            0.00625031171234919,
            0.005185668463724015,
            0.029529112203025305,
            0.009770677367416882,
            0.010738735742811228,
            0.02326177375116315,
            0.01228027103584847,
            0.0339264580861066,
            0.025684034371157325,
            0.0009504463278346012,
            8.019965870890079e-05
          ],
          "mean": 0.0147961667639245,
          "std": 0.010881775191894044,
          "note": "per_seed here lists per-slice (12 DLPFC samples) std-across-3-seeds of ARI, not per-global-seed values -- this metric is inherently a per-slice statistic."
        }
      }
    }
  ],
  "headline": {
    "metric": "ari",
    "baseline_mean": 0.20659083714514037,
    "proposed_mean": 0.3477635499472184,
    "delta": 0.14117271280207805,
    "claim": "kNN spatial smoothing (best k=24, gmm_full) reaches mean ARI=0.348 vs 0.207 for the no-smoothing baseline (delta=+0.141, paired Wilcoxon p=0.0005 over 12 slices); P1 refuted. The geometry-only null (real coords, noise expression) reaches ARI=0.050, so P2 is confirmed."
  },
  "selection": {
    "best_k": 24,
    "best_clusterer": "gmm_full",
    "wilcoxon_statistic": 0.0,
    "wilcoxon_p": 0.00048828125,
    "p1_confirmed": false,
    "p2_outcome": "confirmed",
    "null_geometry_ari_mean": 0.04980416537554067
  },
  "deviations": [
    "top-2000 HVG genes are selected ONCE per sample on the unsmoothed log-normalized matrix and reused for both baseline-nonspatial and proposed-smooth-knn (spec's own baseline description requires '与实验臂共用完全相同的预处理...唯一差别是不做邻居平滑', i.e. smoothing is the only difference); smoothing is applied to the already-HVG-selected 2000-gene matrix rather than the full >=10-cell gene set, to keep memory/compute tractable in the 45-minute CPU budget. This does not change what is being tested (does spatial averaging of the same features help) but does mean HVG selection itself is never re-run on smoothed data.",
    "alpha (smoothing weight) robustness sweep in {0.25,0.5,0.75} on slice 151673 was marked optional ('若时间有余') in the plan and was skipped to stay inside the time budget; alpha is fixed at 0.5.",
    "clusterer is swept over {kmeans, gmm_full} as specified, but the reported baseline/proposed arms both use whichever clusterer won the (k>0) sweep by mean ARI, so the baseline-vs-proposed comparison isolates the smoothing effect at a fixed, best-performing clusterer rather than reporting kmeans and gmm_full as separate baseline/proposed pairs."
  ],
  "runtime_sec": 682.5
}