bayespecon.models.SEMPanelRE¶
- class bayespecon.models.SEMPanelRE(**kwargs)[source]¶
Bayesian spatial error panel model with unit random effects.
\[y_{it} = X_{it}\beta + \alpha_i + u_{it}, \quad u_{it} = \lambda (Wu)_{it} + \varepsilon_{it}\]Equivalently the spatially-filtered residual is i.i.d.:
\[\varepsilon_{it} = (I - \lambda W)(y - X\beta - \alpha)_{it} \sim N(0, \sigma^2)\]- Parameters:¶
- formula
- data
- y
- X
- W
- unit_col
- time_col
- N
- T
- priors
- logdet_method
- [ : _spatial_diagnostics_tests =
- (lambda m: __import__(
“bayespecon.diagnostics.bayesian_lmtests”, fromlist=[“bayesian_panel_lm_lag_test”],
).bayesian_panel_lm_lag_test(m), “Panel-LM-Lag”), (lambda m: __import__(
”bayespecon.diagnostics.bayesian_lmtests”, fromlist=[“bayesian_panel_lm_wx_sem_test”],
).bayesian_panel_lm_wx_sem_test(m), “Panel-LM-WX”),
- ]
See
SpatialPanelModel.modelis forced to 0.
Notes
The
priorsdict supports the following keys:lam_lower, lam_upper(float, default -1, 1): Bounds for the Uniform prior on lambda.beta_mu(float, default 0): Prior mean for beta.beta_sigma(float, default 1e6): Prior std for beta.sigma_sigma(float, default 10): Scale for HalfNormal prior on sigma.sigma_alpha_sigma(float, default 10): Scale for HalfNormal prior on sigma_alpha.
Robust regression
When
robust=True, the spatially-filtered error distribution is changed from Normal to Student-t, yielding a model that is robust to heavy-tailed outliers:\[\varepsilon_{it} = (I - \lambda W)(y - X\beta - \alpha_i) \sim t_\nu(0, \sigma^2)\]where \(\nu \sim \mathrm{TruncExp}(\lambda_\nu, \mathrm{lower}=2)\) with rate
nu_lam(default 1/30). The defaultnu_lam = 1/30gives a prior mean of approximately 30, favouring near-Normal tails. The lower bound of 2 ensures the variance exists.Methods
__init__(**kwargs)fit([draws, tune, chains, target_accept, ...])Sample posterior and attach pointwise log-likelihood for IC metrics.
Return fitted values at posterior mean parameters.
Return transformed residuals
y - fitted.Run Bayesian LM specification tests and return a summary table.
spatial_diagnostics_decision([alpha])Return a model-selection decision from Bayesian LM test results.
spatial_effects([return_posterior_samples])Compute Bayesian inference for direct, indirect, and total impacts.
summary([var_names])Return posterior summary table.
Attributes
Return the ArviZ InferenceData from the most recent fit.
Return the PyMC model object built for the most recent fit.
-
fit(draws=
2000, tune=1000, chains=4, target_accept=0.9, random_seed=None, idata_kwargs=None, **sample_kwargs)[source]¶ Sample posterior and attach pointwise log-likelihood for IC metrics.
The SEM panel RE model uses
pm.Potentialfor both the Gaussian error log-likelihood and the Jacobian, so neither is auto-captured. We compute the complete pointwise log-likelihood manually after sampling, including the random effectsalpha[unit_idx].
- property inference_data : arviz.data.inference_data.InferenceData | None[source]¶
Return the ArviZ InferenceData from the most recent fit.
- property pymc_model : pymc.model.core.Model | None[source]¶
Return the PyMC model object built for the most recent fit.
- spatial_diagnostics()[source]¶
Run Bayesian LM specification tests and return a summary table.
Iterates over the class-level
_spatial_diagnostics_testsregistry and calls each test function on this fitted model, collecting the results into a tidy DataFrame. The set of tests depends on the model type — for example, an OLSPanelFE model runs Panel-LM-Lag, Panel-LM-Error, Panel-LM-SDM-Joint, and Panel-LM-SLX-Error-Joint.Requires the model to have been fit (
.fit()called) and a spatial weights matrixWto have been supplied at construction time.- Returns:¶
DataFrame indexed by test name with columns:
Column
Description
statistic
Posterior mean of the LM statistic
median
Posterior median of the LM statistic
df
Degrees of freedom for the \(\chi^2\) reference
p_value
Bayesian p-value:
1 - chi2.cdf(mean, df)ci_lower
Lower bound of 95% credible interval (2.5%)
ci_upper
Upper bound of 95% credible interval (97.5%)
The DataFrame has
attrs["model_type"](class name) andattrs["n_draws"](total posterior draws) metadata.- Return type:¶
pandas.DataFrame
- Raises:¶
RuntimeError – If the model has not been fit yet.
See also
spatial_diagnostics_decisionModel-selection decision based on the test results.
-
spatial_diagnostics_decision(alpha=
0.05)[source]¶ Return a model-selection decision from Bayesian LM test results.
Implements the decision tree from Koley and Bera [2024] (the Bayesian analogue of the classical
stge_kbprocedure in Anselin et al. [1996]), adapted for panel models following Elhorst [2014].See also
spatial_diagnosticsCompute the Bayesian LM test statistics.
References
Koley and Bera [2024], Anselin et al. [1996], Elhorst [2014]
-
spatial_effects(return_posterior_samples=
False)[source]¶ Compute Bayesian inference for direct, indirect, and total impacts.
Computes impact measures for each posterior draw, then summarises the posterior distribution with means, 95% credible intervals, and Bayesian p-values.
- Parameters:¶
- Returns:¶
If return_posterior_samples is
False(default), returns a DataFrame indexed by feature names with columns for posterior means, credible-interval bounds, and Bayesian p-values.If return_posterior_samples is
True, returns(DataFrame, dict)where the dict has keys"direct","indirect","total", each mapping to a(G, k)array of posterior draws.- Return type:¶