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Γ‘metro | Tipo | Default | DescripciΓ³n |
|---|---|---|---|
| data | pd.DataFrame | np.ndarray | β | Dataset de entrada (requerido) |
| seed | int | None | None | Semilla para reproducibilidad de mΓ©todos aleatorios |
| lang | str | 'es-ES' | Idioma de salidas: 'es-ES' o 'en-US' |
from statslibx import ComputationalStats
from statslibx.datasets import load_iris
data = load_iris()
cs = ComputationalStats(data, seed=42)
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Γ‘metro | Tipo | Default | DescripciΓ³n |
|---|---|---|---|
| X | str | List[str] | β | Columna(s) predictora(s) |
| y | str | β | Columna objetivo |
| degree | int | 1 | Grado del polinomio (solo para una variable predictora) |
| interaction_terms | bool | False | Incluir tΓ©rminos de interacciΓ³n en regresiΓ³n mΓΊltiple |
# 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())
Atajo para regresiΓ³n lineal simple o mΓΊltiple (degree=1).
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
Atajo para regresiΓ³n polinomial. Solo admite una variable predictora.
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))
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'.
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()
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Γ©todo | DescripciΓ³n | Expr. 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 |
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)
Remuestreo bootstrap sobre una columna. Calcula tres tipos de intervalos de confianza: percentil, bΓ‘sico y normal. Acepta funciones personalizadas con statistic='custom'.
| ParΓ‘metro | Tipo | Default | DescripciΓ³n |
|---|---|---|---|
| column | str | β | Columna del DataFrame a remuestrear |
| n_samples | int | 1000 | NΓΊmero de muestras bootstrap |
| statistic | str | 'mean' | 'mean', 'median', 'std' o 'custom' |
| confidence_level | float | 0.95 | Nivel de confianza para los 3 tipos de IC |
| custom_func | callable | None | None | FunciΓ³n personalizada si statistic='custom'. Recibe np.ndarray, retorna escalar. |
# 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()
)
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Γ‘metro | Tipo | Default | DescripciΓ³n |
|---|---|---|---|
| k | int | β | NΓΊmero de clusters (requerido) |
| max_iters | int | 100 | Iteraciones mΓ‘ximas hasta convergencia |
| init_method | str | 'kmeans++' | 'kmeans++' (recomendado) o 'random' |
Retorna dict con:
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())
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.
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()
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.
resultado = cs.correlation_analysis(method='pearson')
print(resultado['correlation_matrix'])
print(resultado['p_values']) # Solo para Pearson
resultado_sp = cs.correlation_analysis(method='spearman')
Heatmap de correlaciΓ³n con escala RdBu centrada en 0. Con interactive=True usa Plotly con hover tooltips; de lo contrario usa seaborn.
cs.plot_correlation_heatmap(method='pearson', annot=True)
cs.plot_correlation_heatmap(method='spearman', interactive=True)
EstadΓsticas descriptivas de columnas numΓ©ricas. Con by agrupa por una columna categΓ³rica.
print(cs.descriptive_statistics())
print(cs.descriptive_statistics(by='species')) # Agrupado por categorΓa
DistribuciΓ³n de una columna con soporte de agrupamiento por variable categΓ³rica. Backend estΓ‘tico (matplotlib/seaborn) o interactivo (Plotly).
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)
Objeto completo con coeficientes, mΓ©tricas, expresiΓ³n simbΓ³lica SymPy, cΓ³digo LaTeX y visualizaciones.
Atributos principales:
MΓ©todos:
Encapsula el interpolador vectorizado y la expresiΓ³n simbΓ³lica (Lagrange/Newton).
Contiene la distribuciΓ³n bootstrap y tres tipos de intervalos de confianza.
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)
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.