Β‘Copiado!
Constructor
ComputationalStats(data, seed, lang)
data: pd.DataFrame | np.ndarray  Β·  seed: int | None = None  Β·  lang: 'es-ES' | 'en-US' = 'es-ES'

Inicializa con un DataFrame de pandas o array numpy. Detecta automΓ‘ticamente columnas numΓ©ricas y categΓ³ricas. Con seed garantiza reproducibilidad en K-Means y Bootstrapping.

ParΓ‘metroTipoDefaultDescripciΓ³n
datapd.DataFrame | np.ndarrayβ€”Dataset de entrada (requerido)
seedint | NoneNoneSemilla para reproducibilidad de mΓ©todos aleatorios
langstr'es-ES'Idioma de salidas: 'es-ES' o 'en-US'
Python
from statslibx import ComputationalStats
from statslibx.datasets import load_iris

data = load_iris()
cs = ComputationalStats(data, seed=42)
RegresiΓ³n
.regression(X, y, degree, interaction_terms)
X: str | List[str]  Β·  y: str  Β·  degree: int = 1  Β·  interaction_terms: bool = False
β†’ RegressionResult
↩ RegressionResult

RegresiΓ³n polinomial simple o mΓΊltiple. Para una variable, degree controla el grado del polinomio. Para varias variables usa regresiΓ³n lineal mΓΊltiple. Internamente resuelve con ecuaciones normales y fallback a pseudo-inversa. Genera expresiΓ³n simbΓ³lica con SymPy.

ParΓ‘metroTipoDefaultDescripciΓ³n
Xstr | List[str]β€”Columna(s) predictora(s)
ystrβ€”Columna objetivo
degreeint1Grado del polinomio (solo para una variable predictora)
interaction_termsboolFalseIncluir tΓ©rminos de interacciΓ³n en regresiΓ³n mΓΊltiple
Python
# RegresiΓ³n lineal simple
modelo = cs.regression(X='sepal_length', y='petal_length')
print(modelo)
# 

# Ver resumen completo
s = modelo.summary()
print(s['metrics'])      # RΒ², RMSE, MAE, AIC, BIC...
print(s['coefficients']) # tabla con t-stats y p-values
print(s['formula']['latex'])  # expresiΓ³n LaTeX

# Predicciones
preds = modelo.predict([5.0, 6.0, 7.0])

# RegresiΓ³n polinomial grado 3
modelo3 = cs.regression('sepal_length', 'petal_length', degree=3)
print(f"RΒ² = {modelo3.r2:.4f}")

# RegresiΓ³n mΓΊltiple
modelo_m = cs.regression(['sepal_length', 'sepal_width'], 'petal_length')
print(modelo_m.get_formula())
.linear_regression(X, y)
Atajo de .regression(X, y, degree=1)
β†’ RegressionResult

Atajo para regresiΓ³n lineal simple o mΓΊltiple (degree=1).

Python
modelo = cs.linear_regression('sepal_length', 'petal_length')
modelo.plot()                   # 4 paneles: fit, residuales, Q-Q, histograma
modelo.plot(interactive=True)  # Plotly interactivo
modelo.plot(plot_type='qq')    # Solo Q-Q plot
.polynomial_regression(X, y, degree)
X: str  Β·  y: str  Β·  degree: int = 2
β†’ RegressionResult

Atajo para regresiΓ³n polinomial. Solo admite una variable predictora.

Python
modelo = cs.polynomial_regression('sepal_length', 'petal_length', degree=3)
print(f"FΓ³rmula: {modelo.get_formula()}")
print(f"LaTeX:   {modelo.latex_expr}")

import numpy as np
preds = modelo.predict(np.linspace(4.5, 8.0, 20))
.find_best_degree(X, y, max_degree, metric)
X: str  Β·  y: str  Β·  max_degree: int = 5  Β·  metric: 'r2' | 'aic' | 'bic' = 'r2'
β†’ dict

EvalΓΊa grados 1 a max_degree y retorna el mejor segΓΊn la mΓ©trica. 'r2' se maximiza; 'aic' y 'bic' se minimizan. Incluye todos los resultados en 'all_results'.

Python
resultado = cs.find_best_degree('sepal_length', 'petal_length', max_degree=5, metric='bic')
print(f"Mejor grado: {resultado['degree']}")
print(f"RΒ²:  {resultado['r2']:.4f}")
print(f"BIC: {resultado['bic']:.4f}")

# Tabla comparativa
for r in resultado['all_results']:
    print(f"Grado {r['degree']}: RΒ²={r['r2']:.4f}  AIC={r['aic']:.2f}  BIC={r['bic']:.2f}")

# Graficar el mejor modelo
resultado['model'].plot()
InterpolaciΓ³n
.interpolation(points, method, spline_degree)
points: List[Tuple[float, float]]  Β·  method: 'lagrange'|'newton'|'spline' = 'lagrange'  Β·  spline_degree: int = 3
β†’ InterpolationResult
↩ InterpolationResult

Calcula un polinomio de interpolaciΓ³n a partir de puntos (x, y). Lagrange y Newton generan expresiΓ³n simbΓ³lica SymPy y cΓ³digo LaTeX. Spline usa scipy.interpolate.interp1d.

MΓ©todoDescripciΓ³nExpr. simbΓ³lica
'lagrange'Polinomio de Lagrange clΓ‘sico. Eficiente para pocos puntos.SΓ­ (SymPy)
'newton'Diferencias divididas de Newton. MΓ‘s estable numΓ©ricamente.SΓ­ (SymPy)
'spline'Spline de grado spline_degree vΓ­a SciPy. Suaviza oscilaciones.No
Python
points = [(0, 1), (1, 3), (2, 2), (3, 5), (4, 4)]

# Lagrange
interp = cs.interpolation(points, method='lagrange')
print(interp.summary())
print(f"LaTeX: {interp.latex_expr}")
interp.plot()
interp.plot(interactive=True)

# Newton
interp_n = cs.interpolation(points, method='newton')
print(f"En x=2.5: {interp_n.predict(2.5):.4f}")

# Evaluar en mΓΊltiples puntos
import numpy as np
x_new = np.linspace(0, 4, 100)
y_new = interp.predict(x_new)

# Spline cΓΊbico
interp_s = cs.interpolation(points, method='spline', spline_degree=3)
Bootstrapping
.bootstrapping(column, n_samples, statistic, confidence_level, custom_func)
column: str  Β·  n_samples: int = 1000  Β·  statistic: 'mean'|'median'|'std'|'custom'  Β·  confidence_level: float = 0.95
β†’ BootstrappingResult
↩ BootstrappingResult

Remuestreo bootstrap sobre una columna. Calcula tres tipos de intervalos de confianza: percentil, bΓ‘sico y normal. Acepta funciones personalizadas con statistic='custom'.

ParΓ‘metroTipoDefaultDescripciΓ³n
columnstrβ€”Columna del DataFrame a remuestrear
n_samplesint1000NΓΊmero de muestras bootstrap
statisticstr'mean''mean', 'median', 'std' o 'custom'
confidence_levelfloat0.95Nivel de confianza para los 3 tipos de IC
custom_funccallable | NoneNoneFunciΓ³n personalizada si statistic='custom'. Recibe np.ndarray, retorna escalar.
Python
# Bootstrap de la media β€” IC 95%
boot = cs.bootstrapping('sepal_length', n_samples=2000, statistic='mean')
s = boot.summary()
print(f"EstadΓ­stico original: {s['original_statistic']:.4f}")
print(f"Sesgo:               {s['bias']:.6f}")
print(f"Error estΓ‘ndar:      {s['std_error']:.4f}")

ic = s['confidence_interval_95%']
print(f"IC Percentil: {ic['percentile']}")
print(f"IC BΓ‘sico:    {ic['basic']}")
print(f"IC Normal:    {ic['normal']}")

boot.plot()
boot.plot(interactive=True)

# Bootstrap de la mediana con IC 99%
boot_med = cs.bootstrapping('petal_length', statistic='median', confidence_level=0.99)

# Bootstrap con funciΓ³n personalizada (coeficiente de variaciΓ³n)
boot_cv = cs.bootstrapping(
    'sepal_width',
    statistic='custom',
    custom_func=lambda x: x.std() / x.mean()
)
Clustering (K-Means)
.k_means(k, max_iters, init_method)
k: int  Β·  max_iters: int = 100  Β·  init_method: 'random' | 'kmeans++' = 'kmeans++'
β†’ dict

K-Means implementado desde cero sobre todas las columnas numΓ©ricas. Usa K-Means++ por defecto para mejor inicializaciΓ³n y convergencia. Calcula inercia (WCSS) y silhouette score (requiere scikit-learn).

ParΓ‘metroTipoDefaultDescripciΓ³n
kintβ€”NΓΊmero de clusters (requerido)
max_itersint100Iteraciones mΓ‘ximas hasta convergencia
init_methodstr'kmeans++''kmeans++' (recomendado) o 'random'

Retorna dict con:

centroids
np.ndarray
Coordenadas de los k centroides finales
labels
np.ndarray
Cluster asignado a cada observaciΓ³n
inertia
float
Suma de cuadrados dentro del cluster (WCSS)
silhouette_score
float
PuntuaciΓ³n de silueta (-1 a 1)
n_iterations
int
Iteraciones hasta convergencia
Python
resultado = cs.k_means(k=3, init_method='kmeans++')
print(f"Inercia:     {resultado['inertia']:.2f}")
print(f"Silhouette:  {resultado['silhouette_score']:.4f}")
print(f"Iteraciones: {resultado['n_iterations']}")

# AΓ±adir etiquetas al DataFrame
data['cluster'] = resultado['labels']
print(data.groupby('cluster').mean())
.elbow_method(max_k)
max_k: int = 10
β†’ dict

Evalúa K-Means para k = 2 a max_k. Retorna inercias y silhouette scores para cada k. Útil para determinar visualmente el número óptimo de clusters.

Python
elbow = cs.elbow_method(max_k=8)
# {'k_values': [2,3,...,8], 'inertias': [...], 'silhouettes': [...]}

import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

axes[0].plot(elbow['k_values'], elbow['inertias'], 'bo-')
axes[0].set(xlabel='k', ylabel='Inercia', title='MΓ©todo del Codo')
axes[0].grid(alpha=0.3)

axes[1].plot(elbow['k_values'], elbow['silhouettes'], 'rs-')
axes[1].set(xlabel='k', ylabel='Silhouette Score')
axes[1].grid(alpha=0.3)

plt.tight_layout(); plt.show()
AnΓ‘lisis de CorrelaciΓ³n
.correlation_analysis(method)
method: 'pearson' | 'spearman' | 'kendall' = 'pearson'
β†’ dict

Calcula la matriz de correlaciΓ³n de todas las columnas numΓ©ricas. Para Pearson, calcula tambiΓ©n la matriz de p-values par a par.

Python
resultado = cs.correlation_analysis(method='pearson')
print(resultado['correlation_matrix'])
print(resultado['p_values'])   # Solo para Pearson

resultado_sp = cs.correlation_analysis(method='spearman')
.plot_correlation_heatmap(method, annot, interactive)
method: str = 'pearson'  Β·  annot: bool = True  Β·  interactive: bool = False

Heatmap de correlaciΓ³n con escala RdBu centrada en 0. Con interactive=True usa Plotly con hover tooltips; de lo contrario usa seaborn.

Python
cs.plot_correlation_heatmap(method='pearson', annot=True)
cs.plot_correlation_heatmap(method='spearman', interactive=True)
Utilidades
.descriptive_statistics(by)
by: str | None = None
β†’ pd.DataFrame

EstadΓ­sticas descriptivas de columnas numΓ©ricas. Con by agrupa por una columna categΓ³rica.

Python
print(cs.descriptive_statistics())
print(cs.descriptive_statistics(by='species'))  # Agrupado por categorΓ­a
.plot_distribution(column, by, kind, interactive)
column: str  Β·  by: str | None  Β·  kind: 'hist'|'box'|'violin' = 'hist'  Β·  interactive: bool = False

DistribuciΓ³n de una columna con soporte de agrupamiento por variable categΓ³rica. Backend estΓ‘tico (matplotlib/seaborn) o interactivo (Plotly).

Python
cs.plot_distribution('sepal_length', kind='hist')
cs.plot_distribution('petal_length', by='species', kind='violin')
cs.plot_distribution('sepal_width', kind='box', interactive=True)
Objetos de Resultado
RegressionResult
Retornado por .regression() Β· .linear_regression() Β· .polynomial_regression() Β· .find_best_degree()

Objeto completo con coeficientes, mΓ©tricas, expresiΓ³n simbΓ³lica SymPy, cΓ³digo LaTeX y visualizaciones.

Atributos principales:

r2
float
Coeficiente RΒ²
r2_adj
float
RΒ² ajustado
intercept
float
TΓ©rmino independiente Ξ²β‚€
slopes
np.ndarray
Coeficientes β₁, Ξ²β‚‚, …
residuals
np.ndarray
y βˆ’ Ε· para cada observaciΓ³n
mse / rmse / mae / mape
float
MΓ©tricas de error
aic / bic
float
Criterios de informaciΓ³n de Akaike y Bayesiano
p_values
np.ndarray
P-value de cada coeficiente
t_stats
np.ndarray
EstadΓ­stico t por coeficiente
symbolic_expr
sympy.Expr
ExpresiΓ³n simbΓ³lica simplificada
latex_expr
str
FΓ³rmula en formato LaTeX

MΓ©todos:

.summary()
β†’ dict
Tabla de coeficientes + todas las mΓ©tricas + fΓ³rmula
.predict(X_new)
β†’ np.ndarray
Predicciones sobre nuevos datos
.get_formula(decimals)
β†’ str
EcuaciΓ³n legible como string
.plot(plot_type, interactive)
β†’ None
'scatter', 'residuals', 'qq', 'all'. Plotly con interactive=True
InterpolationResult
Retornado por .interpolation()

Encapsula el interpolador vectorizado y la expresiΓ³n simbΓ³lica (Lagrange/Newton).

.predict(x)
β†’ float | ndarray
EvalΓΊa el interpolador en uno o varios puntos
.summary()
β†’ dict
MΓ©todo, n_points, rangos x/y, expresiΓ³n
.plot(n_points, interactive)
β†’ None
Curva de interpolaciΓ³n + puntos originales
.latex_expr
str
Polinomio en LaTeX (Lagrange / Newton)
BootstrappingResult
Retornado por .bootstrapping()

Contiene la distribuciΓ³n bootstrap y tres tipos de intervalos de confianza.

original_stat
float
EstadΓ­stico de la muestra original
bootstrap_stats
np.ndarray
Los n_samples estadΓ­sticos simulados
bias
float
Media bootstrap βˆ’ estadΓ­stico original
std_error
float
DesviaciΓ³n estΓ‘ndar de las simulaciones
percentile_ci
tuple
IC por percentiles (mΓ‘s comΓΊn)
basic_ci
tuple
IC bΓ‘sico por reflexiΓ³n
normal_ci
tuple
IC normal con z-score
.summary()
β†’ dict
Resumen con los 3 ICs, bias y std_error
.plot(interactive)
β†’ None
Histograma bootstrap + Q-Q plot
Ejemplo integrador β€” Pipeline completo
Python β€” Flujo completo
from statslibx import ComputationalStats
from statslibx.datasets import load_iris

data = load_iris()
cs = ComputationalStats(data, seed=42)

# 1. Mejor grado de regresiΓ³n por BIC
best = cs.find_best_degree('sepal_length', 'petal_length', max_degree=5, metric='bic')
print(f"Mejor grado: {best['degree']}, RΒ²={best['r2']:.4f}")
best['model'].plot()

# 2. Bootstrap de la media con IC 99%
boot = cs.bootstrapping('sepal_length', n_samples=5000, confidence_level=0.99)
s = boot.summary()
print(f"IC 99% percentil: {s['confidence_interval_99%']['percentile']}")
boot.plot(interactive=True)

# 3. InterpolaciΓ³n de Newton
points = [(4.5, 1.3), (5.0, 1.8), (5.5, 2.5), (6.0, 3.8), (7.0, 5.1)]
interp = cs.interpolation(points, method='newton')
print(f"LaTeX: {interp.latex_expr}")
interp.plot()

# 4. MΓ©todo del codo + clustering Γ³ptimo
elbow = cs.elbow_method(max_k=6)
clusters = cs.k_means(k=3)
data['cluster'] = clusters['labels']
print(f"Silhouette: {clusters['silhouette_score']:.4f}")

# 5. Heatmap de correlaciΓ³n interactivo
cs.plot_correlation_heatmap(method='spearman', interactive=True)
Tip: Los objetos RegressionResult, InterpolationResult y BootstrappingResult son independientes una vez creados. Puedes guardarlos, pasarlos a otras funciones o acceder a sus atributos directamente sin necesidad del objeto ComputationalStats padre.