SPB Git

spb/wp29_uqo

Public
2.3 KB · 58 lines python
1"""F5-conf-03: counterexample to 'X, Y normal => X+Y normal'.2Construction: X ~ N(0,1), W independent Rademacher (+/-1 w.p. 1/2), Y = W*X.3Run from workspace root: ~/wp29/venv/bin/python out/analysis.py4"""5import json, os6import numpy as np, pandas as pd7from scipy import stats89props = pd.read_csv("data/propositions.csv")10design = pd.read_csv("data/design.csv")11issues = []12if props["id"].duplicated().any() or set(props["id"]) != {"A", "B"}:13    issues.append({"issue": "unexpected proposition ids", "handling": "used ids A and B as given"})14d = dict(zip(design["parameter"], design["value"]))15seed, n = int(d["seed"]), int(d["n"])1617rng = np.random.default_rng(seed)18x = rng.standard_normal(n)19w = rng.choice(np.array([-1.0, 1.0]), size=n)20y = w * x21s = x + y22os.makedirs("out", exist_ok=True)23pd.DataFrame({"x": x, "y": y}).to_csv("out/counterexample.csv", index=False)2425m_s, sd_s = s.mean(), s.std(ddof=1)26ks = stats.kstest(s, "norm", args=(m_s, sd_s)).statistic27# marginal checks (illustration only)28ks_x = stats.kstest(x, "norm", args=(x.mean(), x.std(ddof=1))).statistic29ks_y = stats.kstest(y, "norm", args=(y.mean(), y.std(ddof=1))).statistic30frac_zero = float(np.mean(s == 0.0))3132res = {33    "task_id": "F5-conf-03",34    "statement_true": False,35    "counterexample_provided": True,36    "counterexample_values": {37        "construction": "X ~ N(0,1); W independent of X with P(W=1)=P(W=-1)=1/2; Y = W*X. "38                        "Then Y ~ N(0,1) by symmetry, but X+Y = (1+W)X equals 0 with probability 1/2 "39                        "and 2X (N(0,4)) with probability 1/2: a non-degenerate law with an atom at 0, hence not normal.",40        "n": int(n), "seed": seed,41        "mean_x": float(x.mean()), "sd_x": float(x.std(ddof=1)),42        "mean_y": float(y.mean()), "sd_y": float(y.std(ddof=1)),43        "mean_sum": float(m_s), "sd_sum": float(sd_s),44        "ks_sum_vs_normal": float(ks),45    },46    "statement_b_true": True,47    "feasibility": "complete",48    "feasibility_reason": None,49    "data_issues": issues,50    "n_input_rows": {"propositions.csv": int(len(props)), "design.csv": int(len(design))},51    "n_analysed": int(n),52    "random_seed": seed,53}54json.dump(res, open("out/results.json", "w"), indent=2)55print(json.dumps(res, indent=2))56print(f"aux: ks_x={ks_x:.5f} ks_y={ks_y:.5f} frac_sum_exactly_zero={frac_zero:.5f} "57      f"KS 5% crit approx {1.358/np.sqrt(n):.5f}")58
Files · 152a55b8fa2830f50fa35e5aed99c0037f713345
Menu

Theme