\[ f(t) = \lambda e^{-\lambda t}, \lambda, t > 0. \] The mean is given by: \[ m = \frac{1}{\lambda}. \]
The pdf can then be obtained by \(m = L(V) = C e^{B/V}\). Substituting for \(m\) to make a pdf as afunction of time and stress: \[ f(t, V) = \frac{1}{C e^{B/V}} e^{-\frac{t}{C e^{B/V}}}. \]
\[ f(t, V) = \frac{e^{-B/V}}{C} e^{-\frac{e^{-B/V}}{C} t}, \] where: - \(t\): Time-to-failure, - \(V\): Stress level (temperature in Kelvin), - \(C\): One of the model parameters to be determined C > 0, - \(B\): Another model parameter to be determined.
For times-to-failure \(\{t_{ij}\}\) and for stress levels \(\{V_j\}\), where \(i = 1, \dots, n_j\) and \(j = 1, 2, 3\), the log-likelihood function is:
\[ \ell(C, B) = \sum_{j=1}^3 \sum_{i=1}^{n_j} \left[ -\ln C - \frac{B}{V_j} - \frac{e^{-B/V_j}}{C} t_{ij} \right]. \]
\[ \frac{\partial \ell}{\partial C} = -\frac{\sum_{j=1}^3 n_j}{C} + \sum_{j=1}^3 \sum_{i=1}^{n_j} \frac{e^{-B/V_j} t_{ij}}{C^2}. \] Setting \(\frac{\partial \ell}{\partial C} = 0\): \[ C = \frac{\sum_{j=1}^3 \sum_{i=1}^{n_j} e^{-B/V_j} t_{ij}}{\sum_{j=1}^3 n_j}. \]
\[ \frac{\partial \ell}{\partial B} = -\sum_{j=1}^3 \sum_{i=1}^{n_j} \frac{1}{V_j} + \sum_{j=1}^3 \sum_{i=1}^{n_j} \frac{t_{ij} e^{-B/V_j} \left(-\frac{1}{V_j}\right)}{C}. \] Setting \(\frac{\partial \ell}{\partial B} = 0\), solve numerically for \(B\).
Taking 2nd derivatives of the log-likelihood
\(\mathcal{I}_{C,C} = -\frac{\partial^2 \ell}{\partial C^2}\), \(\mathcal{I}_{B,B} = -\frac{\partial^2 \ell}{\partial B^2}\), \(\mathcal{I}_{C,B} = \mathcal{I}_{B,C} = -\frac{\partial^2 \ell}{\partial C \partial B}\).
\[ \mathcal{I}_{C,C} = \frac{\sum_{j=1}^3 n_j}{C^2} - 2 \sum_{j=1}^3 \sum_{i=1}^{n_j} \frac{e^{-B/V_j} t_{ij}}{C^3}. \]
Evaluate these expressions at the MLEs of \(C\) and \(B\).
Stress levels: \(V = [393, 408, 423] \, \text{K}\)
import numpy as np
from scipy.optimize import minimize
# Input
temperatures = np.array([393, 408, 423]) #
data = [
[3850, 4340, 4760, 5320, 5740, 6160, 6580, 7140, 7980, 8960],
[3300, 3720, 4080, 4560, 4920, 5280, 5640, 6120, 6840, 7680],
[2750, 3100, 3400, 3800, 4100, 4400, 4700, 5100, 5700, 6400]
]
#
failure_times = np.hstack(data)
stress_levels = np.repeat(temperatures, [len(d) for d in data])
# Log-Likelihood Function
def log_likelihood(params):
C, B = params
V = stress_levels
t = failure_times
lambda_v = np.exp(-B / V) / C
return -np.sum(np.log(lambda_v) - lambda_v * t)
# Iteratively solution
#Initial Guess for C and B
initial_guess = [1e4, 1]
# Optimization
result = minimize(log_likelihood, initial_guess, method='L-BFGS-B')
C_mle, B_mle = result.x
# Fisher Information Matrix
n = len(failure_times)
I_C_C = n / C_mle**2
I_B_B = np.sum((1 / stress_levels**2) * (failure_times * np.exp(-B_mle / stress_levels)) / C_mle)
fisher_info = np.array([[I_C_C, 0], [0, I_B_B]])
print("MLEs:", C_mle, B_mle)
print("Fisher Information Matrix:", fisher_info)