One-shot devices (e.g., electro-explosive devices, automotive airbags, fire extinguishers, and missiles) can be tested only once. Upon testing, the device is either destroyed or rendered unusable, yielding binary status data: whether the device was functional or failed at the inspection time.
To evaluate device reliability under operating conditions in a
reasonable timeframe, Accelerated Life Testing (ALT) is commonly used.
The OneShotEM package implements the
simple and efficient Expectation-Maximization (eM) algorithm proposed by
Zhu, Li, Li, and Balakrishnan (2026)
(Communications in Statistics - Simulation and Computation, doi:10.1080/03610918.2025.2515193).
Traditional EM algorithms for one-shot device data treat exact failure times as missing data. In contrast, the new eM-algorithm proposed by Zhu et al. (2026) treats the counts of failures occurring between successive inspection intervals as missing data. This structural shift provides: - Faster Convergence: Reduces iteration counts by 30% to 70%. - Guaranteed Convergence: Avoids numerical divergence because all interval probabilities remain bounded between 0 and 1. - Robust Estimation: Provides lower standard errors and consistent maximum likelihood estimation.
We illustrate the package using the electro-explosive device ALT dataset reported by Fan et al. (2009) and analyzed in Zhu et al. (2026).
data(electro_explosive)
print(electro_explosive)
#> temp it n r
#> 1 35 10 10 3
#> 2 35 20 10 3
#> 3 35 30 10 7
#> 4 45 10 10 1
#> 5 45 20 10 5
#> 6 45 30 10 7
#> 7 55 10 10 6
#> 8 55 20 10 7
#> 9 55 30 10 9The dataset contains testing results across 3 temperature levels (35°C, 45°C, 55°C) and 3 inspection times (10, 20, 30 hours), with 10 devices tested per condition (total \(N = 90\)).
We fit an exponential lifetime distribution where the scale parameter follows a log-linear model: \(\log(\beta_j) = \theta_0 + \theta_1 \cdot \text{temp}_j\).
fit_exp <- oneshot_em(
formula = cbind(r, n) ~ temp,
data = electro_explosive,
it = "it",
dist = "exponential"
)
summary(fit_exp)
#>
#> =================================================================
#> Summary of One-Shot Device EM Fit (NPM Algorithm)
#> =================================================================
#> Distribution: exponential
#> Convergence: Successful (12 iterations)
#> Observations: 90 tested devices
#>
#> Coefficients:
#> Estimate Std. Error z value Pr(>|z|)
#> (Intercept) 5.32030 0.91570 5.810 6.24e-09 ***
#> temp -0.04723 0.01948 -2.425 0.0153 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> 95% Confidence Intervals:
#> CI Lower CI Upper
#> (Intercept) 3.52556 7.11504
#> temp -0.08541 -0.00906
#>
#> Model Selection Criteria:
#> Log-likelihood: -53.61
#> AIC: 111.2
#> BIC: 116.2
#> AICc: 111.4
#> HQIC: 113.2
#>
#> =================================================================We fit a Weibull model with shape parameter \(a\) and scale parameter \(\beta_j = \exp(\theta_0 + \theta_1 \cdot \text{temp}_j)\).
fit_weibull <- oneshot_em(
formula = cbind(r, n) ~ temp,
data = electro_explosive,
it = "it",
dist = "weibull"
)
summary(fit_weibull)
#>
#> =================================================================
#> Summary of One-Shot Device EM Fit (NPM Algorithm)
#> =================================================================
#> Distribution: weibull
#> Convergence: Successful (55 iterations)
#> Observations: 90 tested devices
#>
#> Coefficients:
#> Estimate Std. Error z value Pr(>|z|)
#> log(shape) 0.19135 0.31223 0.613 0.5400
#> (Intercept) 4.94768 0.94109 5.257 1.46e-07 ***
#> temp -0.03968 0.01976 -2.008 0.0446 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> 95% Confidence Intervals:
#> CI Lower CI Upper
#> log(shape) -0.4206131 0.8033041
#> (Intercept) 3.1031859 6.7921823
#> temp -0.0784150 -0.0009519
#>
#> Model Selection Criteria:
#> Log-likelihood: -53.45
#> AIC: 112.9
#> BIC: 120.4
#> AICc: 113.2
#> HQIC: 115.9
#>
#> =================================================================We compare the convergence speed of the new eM-algorithm
(npm) against the traditional EM approach
(tm).
fit_npm <- oneshot_fit(cbind(r, n) ~ temp, data = electro_explosive, it = "it", dist = "weibull", method = "npm")
fit_tm <- oneshot_fit(cbind(r, n) ~ temp, data = electro_explosive, it = "it", dist = "weibull", method = "tm")
cat("New eM-Algorithm Iterations: ", fit_npm$iterations, "\n")
#> New eM-Algorithm Iterations: 55
cat("Traditional EM Iterations: ", fit_tm$iterations, "\n")
#> Traditional EM Iterations: 2As demonstrated in Zhu et al. (2026), the new eM-algorithm converges in significantly fewer iterations.
Fitted survival probabilities and model diagnostics can be visualized easily: