bayespecon.models.flow_panel.SARFlowPanel¶
-
class bayespecon.models.flow_panel.SARFlowPanel(y, G, X, T, col_names=
None, k=None, model=0, priors=None, logdet_method='traces', restrict_positive=True, robust=False, miter=30, titer=800, trace_riter=50, trace_seed=None, symmetric_xo_xd=None, backend=None)[source]¶ Panel spatial-lag origin-destination flow model with unrestricted dependence.
For each period \(t\), the vectorized flow matrix \(y_t \in \mathbb{R}^{N}\) with \(N = n^2\) satisfies
\[y_t = \rho_d W_d y_t + \rho_o W_o y_t + \rho_w W_w y_t + X_t \beta + \varepsilon_t, \qquad \varepsilon_t \sim \mathcal{N}(0, \sigma^2 I_N).\]The panel stack is time-first across \(T\) periods. The
modelargument controls pooled, pair fixed-effects, time fixed-effects, or two-way demeaning before the likelihood is evaluated. The Jacobian contribution scales as \(T \log |A(\rho_d, \rho_o, \rho_w)|\).- Parameters:¶
- y : array-like¶
Stacked panel response in shape
(T, n, n),(T, n^2), or(n^2 * T,).- G : libpysal.graph.Graph¶
Row-standardised graph on
nunits.- X¶
Stacked panel design matrix in time-first order.
- T : int¶
Number of panel periods (must be a positive integer).
- col_names : list of str, optional¶
Feature names for
X. Inferred from a DataFrame if omitted.- k : int, optional¶
Number of destination/origin covariate pairs used by flow effects; inferred from columns prefixed
dest_if omitted.- model : int, default 0¶
Fixed-effects transform:
0pooled,1pair FE,2time FE,3two-way FE.- logdet_method : str, default "traces"¶
Log-determinant method. Only
"traces"is supported here.- restrict_positive : bool, default True¶
If True, use
pm.Dirichlet("rho_simplex", a=ones(4))to enforce \(\rho_d, \rho_o, \rho_w \geq 0\) and \(\rho_d + \rho_o + \rho_w \leq 1\). If False, three independentpm.Uniform(rho_lower, rho_upper)priors are used with a differentiable quadratic-wall stability potential.- robust : bool, default False¶
If True, replace the Normal error with Student-t for robustness to heavy-tailed outliers. Adds a
nuparameter with prior \(\nu \sim \mathrm{TruncExp}(\lambda_\nu, \mathrm{lower}=2)\), ratenu_lam(default 1/30, mean ≈ 30).- miter : int, default 30¶
Trace polynomial order for the log-determinant.
- titer : int, default 800¶
Geometric tail cutoff for the log-determinant series.
- trace_riter : int, default 50¶
Number of Monte Carlo probes for trace estimation.
- trace_seed : int, optional¶
Random seed for trace estimation reproducibility.
- symmetric_xo_xd : bool, optional¶
If
None(default), origin and destination design blocks are compared and symmetry is auto-detected.- priors : dict, optional¶
Override default priors. Supported keys:
beta_mu: float, default 0.0 — Normal prior mean forbeta.beta_sigma: float, default 1e6 — Normal prior std forbeta.sigma_sigma: float, default 10.0 — HalfNormal prior std forsigma.rho_lower: float, default -1.0 — Lower bound of Uniform prior on each ρ (only whenrestrict_positive=False).rho_upper: float, default 1.0 — Upper bound of Uniform prior on each ρ (only whenrestrict_positive=False).nu_lam: float, default 1/30 — Rate of TruncExp prior onnu(only whenrobust=True).
-
__init__(y, G, X, T, col_names=
None, k=None, model=0, priors=None, logdet_method='traces', restrict_positive=True, robust=False, miter=30, titer=800, trace_riter=50, trace_seed=None, symmetric_xo_xd=None, backend=None)[source]¶
Methods
__init__(y, G, X, T[, col_names, k, model, ...])fit([draws, tune, chains, target_accept, ...])Draw samples from the posterior.
fit_approx([draws, n, method, random_seed, ...])Fit a variational approximation and return posterior draws.
posterior_predictive([n_draws, random_seed, ...])Draw posterior-predictive samples
y_repfor the full panel stack.Run Bayesian LM specification tests for flow panel models.
spatial_diagnostics_decision([alpha, ...])Return a model-selection decision from Bayesian LM test results.
spatial_effects([draws, ...])Summarise posterior origin/destination/intra/network/total effects.
summary([var_names])Return posterior summary table via ArviZ.
Attributes
Return the most recent PyMC variational approximation, if any.
Return posterior draws from the most recent fit.
Return the most recently built PyMC model.
-
fit(draws=
2000, tune=1000, chains=4, target_accept=0.9, random_seed=None, store_lambda=False, idata_kwargs=None, **sample_kwargs)[source]¶ Draw samples from the posterior.
-
fit_approx(draws=
2000, n=10000, method='advi', random_seed=None, store_lambda=False, compute_log_likelihood=True, **fit_kwargs)[source]¶ Fit a variational approximation and return posterior draws.
- property inference_data : arviz.data.inference_data.InferenceData | None[source]¶
Return posterior draws from the most recent fit.
-
posterior_predictive(n_draws=
None, random_seed=None, parallel=-1)[source]¶ Draw posterior-predictive samples
y_repfor the full panel stack.- Parameters:¶
- n_draws : int, optional¶
Number of posterior draws to use. Defaults to all.
- random_seed : int, optional¶
Seed for the noise/Poisson sampler.
- parallel : int or None, default -1¶
Number of worker threads for the per-draw loop.
-1usesos.cpu_count();None/0/1forces sequential execution. Reproducibility under a fixedrandom_seedis preserved across worker counts viaSeedSequence.spawn.
- Returns:¶
Array of shape
(n_draws, N_flow * T)with posterior-predictive flows in time-first stacked order.- Return type:¶
np.ndarray
- property pymc_model : pymc.model.core.Model | None[source]¶
Return the most recently built PyMC model.
- spatial_diagnostics()[source]¶
Run Bayesian LM specification tests for flow panel models.
See
bayespecon.models.base.SpatialModel.spatial_diagnostics()for the column schema.- Raises:¶
RuntimeError – If the model has not been fit yet.
-
spatial_diagnostics_decision(alpha=
0.05, format='graphviz', theme='default')[source]¶ Return a model-selection decision from Bayesian LM test results.
Walks the panel-flow decision tree using Bayesian p-values from
spatial_diagnostics()and recommends eitherOLSFlowPanel(no spatial dependence detected) orSARFlowPanel(at least one direction is significant).- Parameters:¶
- alpha : float, default 0.05¶
Significance level for the Bayesian p-values.
- format : {"graphviz", "ascii", "model"}, default "graphviz"¶
Output format.
"model"returns the recommended model name string."ascii"returns an indented box-drawing tree."graphviz"returns agraphviz.Digraph(with ASCII fallback if graphviz is not installed).
- Return type:¶
str or graphviz.Digraph
-
spatial_effects(draws=
None, return_posterior_samples=False, ci=0.95, mode='auto', parallel=-1)[source]¶ Summarise posterior origin/destination/intra/network/total effects.
See
bayespecon.models.flow.FlowModel.spatial_effects()for themodesemantics (auto / combined / separate destination-origin sides per Thomas-Agnan & LeSage 2014, §83.5.2) and theparallelkwarg.