← Back to Research

Placebo test: shuffle sentiment within ticker

Shuffle score_mean within ticker (destroys time ordering) and re-run predictive panel FE.

Updated: 2026-04-05
Study
RobustnessStatus: LIVE
Updated: 2026-04-05
β real
-0.000133
β placebo
-8.95e-05
Seed
7
Tickers
507
Sample ticker
Tickers (panel)
507
Obs (panel)
261179
R² (TS)
R² (FE)

Key findings

  • Placebo test: shuffling sentiment should remove any true predictive relationship.
  • Baseline β=-0.00013323464208029765 vs placebo β=-8.950510769708544e-05.
  • Interpretation: if placebo collapses toward zero while baseline does not, the signal is less likely to be driven only by fixed cross-sectional differences.
Specification
  • Compare baseline panel FE vs placebo with permuted score_mean.
Data
  • Universe: S&P 500 tickers in your snapshot pipeline.
  • Frequency: Daily.
  • Returns: log(P_t) − log(P_{t−1}) from ticker JSON prices.
  • Sentiment: score_mean from your sentiment pipeline (ticker JSON).
Limitations
  • Timing: after-close articles can contaminate same-day results; predictive tests mitigate this but do not fully solve it.
  • Causality: results are descriptive; omitted variables and measurement error remain.
  • Trading: no transaction costs / slippage / capacity modeled.
References (minimal)
  • Newey, W. K., & West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix.
  • Petersen, M. A. (2009). Estimating standard errors in finance panel data sets.

Methodology

  • Within each ticker, randomly permute the sentiment time series (deterministic seed).
  • Re-estimate y_ret(t+1) ~ score_mean(t) (+ controls) with panel FE and ticker-clustered SE.

Figures

Charts are from the sample ticker (not the full panel).

Series (sample)

No series available.

Sentiment (sample)

score_mean
No sentiment series available. Export results.series.score_mean.

Tables

Placebo (shuffle within ticker): panel FE comparison
Specβ(score_mean)pSig
Baseline-1.332e-40.199310
Placebo (seed=7)-8.951e-50.4226310
Note: exported by the Python builder; formatting is intentionally compact.
Models
This study is primarily descriptive (figures/tables). No regression model outputs were exported.

Appendix

Raw exported objects (reproducibility / debugging).
Raw exported JSON (collapsed)
{
  "results": {
    "n_tickers": 507,
    "n_obs_panel": 261179,
    "panel_fe_baseline": {
      "params": {
        "score_mean": -0.00013323464208029765
      },
      "bse": {
        "score_mean": 0.00010380408330189446
      },
      "tvalues": {
        "score_mean": -1.2835202416152551
      },
      "pvalues": {
        "score_mean": 0.1993098726609117
      },
      "nobs": 260672,
      "rsquared": 0.000006083300493009425,
      "rsquared_adj": 0.00000224707046869721,
      "cov_type": "cluster(ticker)"
    },
    "panel_fe_placebo": {
      "params": {
        "score_mean": -0.00008950510769708544
      },
      "bse": {
        "score_mean": 0.00011162110265869739
      },
      "tvalues": {
        "score_mean": -0.8018654677759655
      },
      "pvalues": {
        "score_mean": 0.42263078337295856
      },
      "nobs": 260672,
      "rsquared": 0.00000274536813915649,
      "rsquared_adj": -0.0000010908746903570687,
      "cov_type": "cluster(ticker)"
    },
    "tables": [
      {
        "title": "Placebo (shuffle within ticker): panel FE comparison",
        "columns": [
          "Spec",
          "β(score_mean)",
          "p",
          "Sig"
        ],
        "rows": [
          [
            "Baseline",
            -0.00013323464208029765,
            0.1993098726609117,
            ""
          ],
          [
            "Placebo (seed=7)",
            -0.00008950510769708544,
            0.42263078337295856,
            ""
          ]
        ]
      }
    ]
  },
  "methodology": [
    "Within each ticker, randomly permute the sentiment time series (deterministic seed).",
    "Re-estimate y_ret(t+1) ~ score_mean(t) (+ controls) with panel FE and ticker-clustered SE."
  ],
  "sections": [
    {
      "title": "Specification",
      "bullets": [
        "Compare baseline panel FE vs placebo with permuted score_mean."
      ]
    },
    {
      "title": "Data",
      "bullets": [
        "Universe: S&P 500 tickers in your snapshot pipeline.",
        "Frequency: Daily.",
        "Returns: log(P_t) − log(P_{t−1}) from ticker JSON prices.",
        "Sentiment: score_mean from your sentiment pipeline (ticker JSON)."
      ]
    },
    {
      "title": "Limitations",
      "bullets": [
        "Timing: after-close articles can contaminate same-day results; predictive tests mitigate this but do not fully solve it.",
        "Causality: results are descriptive; omitted variables and measurement error remain.",
        "Trading: no transaction costs / slippage / capacity modeled."
      ]
    },
    {
      "title": "References (minimal)",
      "bullets": [
        "Newey, W. K., & West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix.",
        "Petersen, M. A. (2009). Estimating standard errors in finance panel data sets."
      ]
    }
  ],
  "conclusions": [
    "Placebo test: shuffling sentiment should remove any true predictive relationship.",
    "Baseline β=-0.00013323464208029765 vs placebo β=-8.950510769708544e-05.",
    "Interpretation: if placebo collapses toward zero while baseline does not, the signal is less likely to be driven only by fixed cross-sectional differences."
  ]
}