Quickstart Guide
PanelSFA models inherit from sklearn.base.BaseEstimator, meaning they follow the standard fit() and predict() design pattern.
Cross-Sectional Data (ALS 1977)
Here is a minimum working example of estimating a production frontier using cross-sectional data.
import numpy as np
from panelsfa import CrossSectionalSFA
# 1. Generate Synthetic Data
rng = np.random.default_rng(42)
N = 500
X = np.column_stack([np.ones(N), rng.standard_normal((N, 2))])
true_beta = [1.5, 0.4, 0.8]
# y = Xβ + v - u (Production Frontier)
v = rng.normal(0, 0.2, N)
u = np.abs(rng.normal(0, 0.5, N))
y = X @ true_beta + v - u
# 2. Fit the Model
model = CrossSectionalSFA(model_type="production")
model.fit(X, y)
# 3. View Results
print(f"Estimated Coefficients: {model.coef_}")
print(f"Variance Ratio (Gamma): {model.gamma_}")
# 4. Score Efficiency (JLMS)
te = model.score_efficiency(X, y)
print(f"Average Technical Efficiency: {te.mean():.4f}")
Panel Data (True Fixed Effects)
For panel data, models like Greene’s True Fixed Effects require a groups array to identify the entity (e.g., firm, farm, or country) for each observation.
from panelsfa import TrueFixedEffectsSFA
# X, y, and entity_ids must be aligned row-by-row
model = TrueFixedEffectsSFA(model_type="cost") # Note: Cost frontier
model.fit(X, y, groups=entity_ids)
# Extract the profiled firm-specific intercepts
print(model.alphas_)