{
  "research_audit": {
    "temporal_validation": {
      "name": "observed-versus-forecast separation",
      "passed": true,
      "details": "Observed game weather is explicitly limited to historical association research and is ineligible for pregame projection features."
    },
    "baseline_checks": [
      {
        "name": "calm-game comparison",
        "passed": true,
        "details": "The locked 15 mph group is compared with the preregistered below-10 mph baseline."
      },
      {
        "name": "adjusted continuous comparison",
        "passed": true,
        "details": "Continuous estimates adjust for temperature, week, and season fixed effects."
      }
    ],
    "uncertainty": {
      "name": "game-level uncertainty",
      "passed": true,
      "details": "The accepted bundle reports 4,000-draw bootstrap and HC3 robust intervals."
    },
    "missingness": {
      "input_rows": 1487,
      "analyzed_rows": 1323,
      "excluded_rows": 164,
      "missing_by_field": {
        "reported_weather_or_join": 164
      },
      "reconciled": true
    },
    "sensitivity_checks": [
      {
        "name": "registered wind thresholds",
        "passed": true,
        "details": "The accepted output includes the locked 10, 15, and 20 mph threshold analyses."
      },
      {
        "name": "nonlinear specification",
        "passed": true,
        "details": "A registered continuous piecewise-linear spline was evaluated."
      },
      {
        "name": "season stability",
        "passed": true,
        "details": "Primary effect directions are stable after leaving out each season in turn."
      }
    ],
    "leakage_checks": [
      {
        "name": "prediction boundary",
        "passed": true,
        "details": "The analysis labels observed conditions as retrospective and makes no forecast claim."
      }
    ],
    "withholding_checks": [
      {
        "name": "registered release gates",
        "passed": true,
        "details": "Sample, coverage, provenance, sensitivity, and reproducibility gates all passed."
      },
      {
        "name": "extreme-wind scope",
        "passed": true,
        "details": "The 20-plus mph result remains outside the standalone publication scope."
      }
    ]
  },
  "study": "Observed wind and NFL offensive outcomes",
  "data_through": "2025",
  "population": "NFL regular-season games at venues recorded as outdoors or open, with reported wind and temperature",
  "estimand": "Observed association between reported game wind and offense; not a causal effect or a pregame forecast evaluation",
  "publication_scope": "The 15+ mph association is supported; 20+ mph remains underpowered, and observed conditions do not establish pregame forecast value.",
  "sample": {
    "analyzed_games": 1323,
    "outdoor_schedule_games": 1487,
    "weather_coverage": 0.8897108271687962,
    "games_at_or_above_15_mph": 153,
    "games_at_or_above_20_mph": 31
  },
  "primary_effects": [
    {
      "calm_estimate": 0.5397624363965398,
      "calm_games": 822,
      "ci_95_lower": -0.03353263909222183,
      "ci_95_upper": -0.003680975868872558,
      "difference": -0.018499305499864893,
      "high_wind_estimate": 0.5212631308966749,
      "high_wind_games": 143,
      "holm_adjusted_p": 0.033,
      "is_primary_threshold": true,
      "label": "Neutral early-down dropback rate",
      "outcome": "neutral_dropback_rate",
      "p_value": 0.0165,
      "threshold_mph": 15,
      "units": "share"
    },
    {
      "calm_estimate": 0.6027659814198076,
      "calm_games": 871,
      "ci_95_lower": -0.03402132403343665,
      "ci_95_upper": -0.011392467219263297,
      "difference": -0.02277624160326519,
      "high_wind_estimate": 0.5799897398165424,
      "high_wind_games": 153,
      "holm_adjusted_p": 0.0,
      "is_primary_threshold": true,
      "label": "Completion rate",
      "outcome": "completion_rate",
      "p_value": 0.0,
      "threshold_mph": 15,
      "units": "share"
    },
    {
      "calm_estimate": 0.05632799424977222,
      "calm_games": 871,
      "ci_95_lower": -0.1038883903036669,
      "ci_95_upper": -0.03062298815498075,
      "difference": -0.06729519258243041,
      "high_wind_estimate": -0.010967198332658185,
      "high_wind_games": 153,
      "holm_adjusted_p": 0.0,
      "is_primary_threshold": true,
      "label": "Pass EPA per dropback",
      "outcome": "pass_epa_per_dropback",
      "p_value": 0.0,
      "threshold_mph": 15,
      "units": "epa-per-dropback"
    },
    {
      "calm_estimate": 46.091848450057405,
      "calm_games": 871,
      "ci_95_lower": -6.162701199882935,
      "ci_95_upper": -1.3354081778137983,
      "difference": -3.778122959861328,
      "high_wind_estimate": 42.31372549019608,
      "high_wind_games": 153,
      "holm_adjusted_p": 0.0045000000000000005,
      "is_primary_threshold": true,
      "label": "Combined points",
      "outcome": "total_points",
      "p_value": 0.0015,
      "threshold_mph": 15,
      "units": "points-per-game"
    }
  ],
  "adjusted_per_5_mph": [
    {
      "adjusted_difference": -0.006834851605220491,
      "ci_95_lower": -0.011847517470772184,
      "ci_95_upper": -0.001822185739668798,
      "controls": "temperature linear/quadratic, week, season fixed effects",
      "games": 1251,
      "label": "Neutral early-down dropback rate",
      "outcome": "neutral_dropback_rate",
      "robust_standard_error": 0.0025574825844651497,
      "units": "share",
      "wind_increment_mph": 5
    },
    {
      "adjusted_difference": -0.007832453268113822,
      "ci_95_lower": -0.011429901835072627,
      "ci_95_upper": -0.004235004701155018,
      "controls": "temperature linear/quadratic, week, season fixed effects",
      "games": 1323,
      "label": "Completion rate",
      "outcome": "completion_rate",
      "robust_standard_error": 0.0018354329423259203,
      "units": "share",
      "wind_increment_mph": 5
    },
    {
      "adjusted_difference": -0.020424237378162038,
      "ci_95_lower": -0.03328403442026056,
      "ci_95_upper": -0.007564440336063516,
      "controls": "temperature linear/quadratic, week, season fixed effects",
      "games": 1323,
      "label": "Pass EPA per dropback",
      "outcome": "pass_epa_per_dropback",
      "robust_standard_error": 0.0065611209398461845,
      "units": "epa-per-dropback",
      "wind_increment_mph": 5
    },
    {
      "adjusted_difference": -1.3895820972123476,
      "ci_95_lower": -2.2552435367842345,
      "ci_95_upper": -0.5239206576404606,
      "controls": "temperature linear/quadratic, week, season fixed effects",
      "games": 1323,
      "label": "Combined points",
      "outcome": "total_points",
      "robust_standard_error": 0.441663999781575,
      "units": "points-per-game",
      "wind_increment_mph": 5
    },
    {
      "adjusted_difference": -0.03022106673461724,
      "ci_95_lower": -0.10622993830839228,
      "ci_95_upper": 0.04578780483915781,
      "controls": "temperature linear/quadratic, week, season fixed effects",
      "games": 1323,
      "label": "Average target depth",
      "outcome": "average_depth_of_target",
      "robust_standard_error": 0.03878003651723217,
      "units": "yards",
      "wind_increment_mph": 5
    }
  ],
  "data_quality_blockers": [
    {
      "affected_seasons": [
        2022,
        2023
      ],
      "blocker_id": "season-weather-coverage",
      "limits": "complete-case representativeness",
      "remediation": "join NOAA Global Hourly observations and rerun W2"
    },
    {
      "blocker_id": "extreme-wind-sample",
      "limits": "standalone claims for games at or above 20 mph",
      "observed_games": 31,
      "remediation": "accumulate future seasons or combine with the registered summary",
      "required_games": 100
    }
  ],
  "result_sha256": "97fb72a118e8229efb2d172b45f45596cf7627fa0228deb176c4170be856449e"
}
