Регрессия и GLM
NextStat включает полный стек GLM: линейную, логистическую, Пуассона и отрицательную биномиальную регрессию, с MLE-фитом, байесовским семплированием, кросс-валидацией и интерфейсом формул. Все вычисления выполняются в Rust; Python предоставляет API.
Линейная регрессия
import nextstat.glm.linear as lm
fit = lm.fit(X, y)
print(fit.params, fit.se, fit.confint())
# Через интерфейс формул
fit = lm.from_formula("y ~ x1 + x2 + x3", data)
# Гребневая регрессия (ridge, MAP/L2 prior)
fit = lm.fit(X, y, prior_scale=1.0)Логистическая регрессия
import nextstat.glm.logistic as logit
fit = logit.fit(X, y)
# Предупреждение об отделимости (separation) включается автоматически
# Интерфейс from_formula
fit = logit.from_formula("outcome ~ age + treatment", data)Пуассон и отрицательная биномиальная
import nextstat.glm.poisson as pois
import nextstat.glm.negbin as nb
fit = pois.fit(X, y, exposure=offset)
fit = nb.fit(X, y)
# Интерфейс формул
fit = pois.from_formula("counts ~ x1 + x2", data, exposure="log_pop")Кросс-валидация
from nextstat.glm.cv import cross_val_score, kfold_indices
from nextstat.glm.metrics import rmse, log_loss, poisson_deviance
scores = cross_val_score(lm.fit, X, y, k=5, metric=rmse)Иерархические модели
import nextstat.hier as hier
# Случайный интерсепт
fit = hier.linear_random_intercept(X, y, groups)
# Случайный интерсепт + наклон
fit = hier.linear_random_slope(X, y, groups)
# Коррелированные случайные эффекты (LKJ + Cholesky)
fit = hier.logistic_correlated_intercept_slope(X, y, groups)
# Интерфейс формул
fit = hier.linear_random_intercept_from_formula(
"y ~ x1 + x2", data, group_col="school"
)Сводки и робастные SE
from nextstat.summary import fit_summary, summary_to_str
from nextstat.robust import hc0, hc1, hc2, hc3, cluster_1way
summary = fit_summary(fit)
print(summary_to_str(summary))
# Робастная ковариация
robust_cov = hc3(fit)
cluster_cov = cluster_1way(fit, groups)Адаптеры scikit-learn
from nextstat.sklearn import (
NextStatLinearRegression,
NextStatLogisticRegression,
NextStatPoissonRegressor,
)
model = NextStatLinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)Gamma GLM
Гамма-распределение с log-связкой для строго положительных непрерывных откликов (страховые выплаты, стоимость госпитализации).
import nextstat
fit = nextstat.gamma_glm(y, X)
print(fit['params']) # коэффициенты
print(fit['alpha']) # общий параметр формы
print(fit['se']) # стандартные ошибки
print(fit['nll']) # отрицательный log-likelihoodTweedie GLM
Составная Пуассон-Гамма со степенью p ∈ (1, 2) и log-связкой. Обрабатывает точные нули — идеально для агрегатных страховых требований, данных об осадках.
fit = nextstat.tweedie_glm(y, X, p=1.5)
print(fit['params']) # коэффициенты
print(fit['phi']) # дисперсия
print(fit['p']) # параметр степениGEV и GPD (экстремальные значения)
Обобщённое распределение экстремальных значений (GEV) для блочных максимумов и обобщённое Парето (GPD) для пиков над порогом.
# GEV — блочные максимумы (наводнения, ветер, температура)
gev = nextstat.gev_fit(block_maxima)
print(f"mu={gev['mu']:.2f}, sigma={gev['sigma']:.2f}, xi={gev['xi']:.3f}")
print(f"100-летний уровень возврата: {gev['return_level_100']:.1f}")
# GPD — пики над порогом (VaR, ES)
gpd = nextstat.gpd_fit(exceedances)
print(f"sigma={gpd['sigma']:.2f}, xi={gpd['xi']:.3f}")
print(f"99-й перцентиль превышения: {gpd['quantile_99']:.1f}")Мета-анализ
Фиксированные эффекты (inverse-variance) и случайные эффекты (DerSimonian-Laird) с диагностикой гетерогенности.
# Мета-анализ с фиксированными эффектами
fe = nextstat.meta_fixed(effects, se_values)
print(f"Pooled = {fe['pooled']:.3f} [{fe['ci_lower']:.3f}, {fe['ci_upper']:.3f}]")
# Мета-анализ со случайными эффектами
re = nextstat.meta_random(effects, se_values)
print(f"Pooled = {re['pooled']:.3f}, tau2 = {re['tau_squared']:.4f}")
print(f"I2 = {re['i_squared']:.1f}%, Q = {re['q']:.2f}, p = {re['q_p_value']:.4f}")
# Веса по исследованиям для forest plot
for w, lo, hi in zip(re['weights'], re['study_ci_lower'], re['study_ci_upper']):
print(f" вес={w:.1f}% [{lo:.3f}, {hi:.3f}]")