# R CausalImpact Compatibility Matrix

Comparison of features between R CausalImpact (bsts 1.4.1) and this Python implementation.

## State Components

| Feature | R | Python | Notes |
|---|---|---|---|
| Local level | Yes | Yes | Identical algorithm |
| Local linear trend | Yes | Yes | `state_model="local_linear_trend"` |
| Seasonality | Yes | Yes | State-space model matching R bsts `AddSeasonal()` |
| Dynamic regression | Yes | Yes | `dynamic_regression=True` |
| Regression (static) | Yes | Yes | Identical algorithm |

## MCMC Parameters

| Parameter | R | Python | Notes |
|---|---|---|---|
| niter | Yes | Yes | Same default (1000) |
| nseasons | Yes | Yes | `ModelOptions.nseasons` or `model_args["nseasons"]` |
| season.duration | Yes | Yes | `ModelOptions.season_duration` or `model_args["season_duration"]` (R compat: `"season.duration"`) |
| prior.level.sd | Yes | Yes | Same default (0.01) |
| standardize.data | Yes | Yes | Same default (True) |
| expected.model.size | Yes | Yes | Unified default `2` |
| state model selection | Via bsts state spec | Yes | `state_model="local_level"` or `"local_linear_trend"` |

## Warmup Semantics

| Aspect | R | Python | Match |
|---|---|---|---|
| Default warmup | niter / 2 | niter / 2 | Yes |
| Warmup discarded | First N samples | First N samples | Yes |
| Post-warmup used | niter - nwarmup | niter - nwarmup | Yes |

## Summary and Plot Parity

| Feature | R | Python | Match |
|---|---|---|---|
| Summary table | Yes | Yes | Same format |
| Narrative report | Yes | Yes | Same structure |
| Original + counterfactual plot | Yes | Yes | Yes |
| Pointwise effect plot | Yes | Yes | Yes |
| Cumulative effect plot | Yes | Yes | Yes |
| CI bands on plots | Yes | Yes | Yes |

## Data Handling

| Feature | R | Python | Notes |
|---|---|---|---|
| zoo time series | Yes | No | Use pandas DataFrame |
| pandas DataFrame | No | Yes | - |
| numpy ndarray | No | Yes | - |
| Date string periods | Yes | Yes | - |
| Integer index periods | No | Yes | - |
| Missing data (NA) | Handled | Not handled | Raise error on NaN |
| Multiple covariates | Yes | Yes | - |
| No covariates | Yes | Yes | - |

## Spike-and-Slab Variable Selection

| Feature | R | Python | Notes |
|---|---|---|---|
| Coordinate-wise sampling | Yes | Yes | Same algorithm |
| expected.model.size | Yes | Yes | Same prior calculation |
| Posterior inclusion probs | Via bsts | `ci.posterior_inclusion_probs` | - |
| Fallback to blocked g-prior | pi >= 1.0 | pi >= 1.0 | Same threshold |

## Numerical Equivalence (CI-Verified)

| Metric | Tolerance | Status |
|---|---|---|
| point_effect_mean | ±3% relative | Passing |
| cumulative_effect_total | ±3% relative | Passing |
| ci_lower / ci_upper | Tight parity (`±1%` no-cov, `±1%` covariates, `±1%` seasonal) | Passing |
| p_value significance | Match at alpha=0.05 | Passing |

Tests run against R CausalImpact 1.4.1 fixtures on every PR.
