Skip to content

Instantly share code, notes, and snippets.

@robintux
Created December 14, 2025 21:59
Show Gist options
  • Select an option

  • Save robintux/5dbf62085a8f15685ad921d2b9f7576a to your computer and use it in GitHub Desktop.

Select an option

Save robintux/5dbf62085a8f15685ad921d2b9f7576a to your computer and use it in GitHub Desktop.
def analizar_convergencia_tlc(distribuciones, n_max=1000, n_simulaciones=10000):
"""
Analizar la velocidad de convergencia al TLC para diferentes distribuciones
"""
resultados = {}
for nombre, (dist_func, params) in distribuciones.items():
print(f"\nAnalizando: {nombre}")
# Parámetros teóricos
muestras_grandes = dist_func(*params, size=1000000)
mu = np.mean(muestras_grandes)
sigma = np.std(muestras_grandes)
# Medir convergencia para diferentes n
tamanos_n = np.logspace(np.log10(5), np.log10(n_max), 20).astype(int)
ks_distancias = []
for n in tamanos_n:
medias = np.array([
np.mean(dist_func(*params, size=n))
for _ in range(n_simulaciones)
])
medias_norm = (medias - mu) / (sigma / np.sqrt(n))
# Estadístico KS
ks_stat, _ = stats.kstest(medias_norm, 'norm')
ks_distancias.append(ks_stat)
resultados[nombre] = (tamanos_n, ks_distancias)
# Regresión para tasa de convergencia
log_n = np.log(tamanos_n)
log_ks = np.log(ks_distancias)
coef = np.polyfit(log_n, log_ks, 1)
print(f" Tasa de convergencia: O(n^{coef[0]:.3f})")
# Visualización
plt.figure(figsize=(10, 6))
for nombre, (tamanos_n, ks_distancias) in resultados.items():
plt.loglog(tamanos_n, ks_distancias, 'o-', label=nombre, alpha=0.7)
plt.xlabel('Tamaño de muestra (n) - escala log')
plt.ylabel('Distancia KS - escala log')
plt.title('Velocidad de Convergencia al TLC para Diferentes Distribuciones')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment