Ejercicio tomado de: https://help.reliasoft.com/articles/content/hotwire/issue148/hottopics148.htm
Utilicemos un ejemplo simple de Weibull de 2 parámetros para explicar esto. Supongamos que tenemos el siguientes tiempos de falla: 15, 34, 56, 67, 118 y 234. Las soluciones MLE son:
A continuación se muestra el gráfico 3D de los valores de probabilidad.
SOLUCION CON LA LIBRERIA RELIABILITY EN GOOGLE COLAB
1. Instalación de la librería
>>! pip install reliability
2. Ajustamos una distribución de Weibull 2P a los datos de falla para encontrar los parámetros de forma (beta) y de escala (Alpha) por medio del método MLE.
>># Ajustar una distribución de weibull 2P a los datos de falla
>>from reliability.Fitters import Fit_Weibull_2P # importando modulo
>>import matplotlib.pyplot as plt # importanto modulo
>>data = [15, 34, 56, 67, 118, 234]
>>wb = Fit_Weibull_2P(failures=data)
>>plt.show()
5. trazar el grafico 3D de los valores de probabilidad.
Gráfico de la Superficie 3D de Log-Verosimilitud (Datos: 15, 34, 56, 67, 118, 234)
Calculamos y graficamos la verosimilitud conjunta para los parámetros de Weibull de este conjunto de datos específico.
>>import matplotlib.pyplot as plt
>>from scipy.stats import weibull_min
>># Datos solicitados por el usuario
>>datos_usuario = [15, 34, 56, 67, 118, 234]
>># Generar un rango de exploración alrededor de los parámetros óptimos (Alpha ~ 94.38, Beta ~ 1.25)
>>alphas_u = np.linspace(40, 180, 100)
>>betas_u = np.linspace(0.4, 2.5, 100)
>>A_u, B_u = np.meshgrid(alphas_u, betas_u)
>># Calcular la Log-Verosimilitud
>>Z_u = np.zeros_like(A_u)
>>for i in range(len(betas_u)):
>> for j in range(len(alphas_u)):
>> Z_u[i, j] = np.sum(weibull_min.logpdf(datos_usuario, c=B_u[i, j], scale=A_u[i, j]))
>># Graficar en 3D
>>fig = plt.figure(figsize=(12, 8))
>>ax = fig.add_subplot(111, projection='3d')
>>surf = ax.plot_surface(A_u, B_u, Z_u, cmap='plasma', edgecolor='none', alpha=0.9)
>># Ajustar etiquetas y diseño
>>ax.set_title('Superficie 3D de Log-Verosimilitud (Datos de Falla)', fontsize=14, fontweight='bold')
>>ax.set_xlabel('Parámetro de Escala (Alpha / η)')
>>ax.set_ylabel('Parámetro de Forma (Beta / β)')
>>ax.set_zlabel('Log-Likelihood')
>>fig.colorbar(surf, ax=ax, shrink=0.5, aspect=10, label='Log-Likelihood')
>># Destacar el punto óptimo (MLE)
>># De los fits anteriores sabemos: Alpha = 94.38, Beta = 1.25, Max Log-Likelihood ~ -32.58
>>ax.scatter(94.38, 1.25, -32.58, color='red', s=100, label='Máximo MLE (94.38, 1.25)', depthshade=False)
>>ax.legend()
>>plt.show()