Kim Jong-Un inspects missile test
The War on the rocks has published very interesting analysis of the US BMD using GBS kill probability for KN-14 1. Meanwhile this paper has some drawbacks. First, KN-14 is postulated as 100% reliable missile. With 2 test events it is not the case. Second, North Korea has not got full scale test bed for long range ICBM test. Accuracy of RV for Korean missiles is unknown even for Kim. Third, atmospheric reentry test at the speed of 5-7 km per second has no records so far. At last, all estimates have been made by authors with point not interval method. From statistics point of view it is the most simple and primitive estimate of reliability for any stochastic system.
We want to estimate US BMD system reliability for the KN-11 as a real target 2. To this end we apply Bayesian binomial test and Markov chain model 3.
We use open source data 4.
We try Bayesian binomial test for our data converting confidence into credibility.
library(expm)
## Loading required package: Matrix
##
## Attaching package: 'expm'
## The following object is masked from 'package:Matrix':
##
## expm
library(diagram)
## Loading required package: shape
library(ggplot2)
library(rjags)
## Loading required package: coda
## Linked to JAGS 4.2.0
## Loaded modules: basemod,bugs
library(mcmc)
library(stringr)
library(bayesplot)
## This is bayesplot version 1.2.0
model_string <- "model{
# Likelihood
Y1 ~ dbinom(theta1,n1)
Y2 ~ dbinom(theta2,n2)
Y3 ~ dbinom(theta3,n3)
Y4 ~ dbinom(theta4,n4)
# Prior
theta1 ~ dbeta(a, b)
theta2 ~ dbeta(a, b)
theta3 ~ dbeta(a, b)
theta4 ~ dbeta(a, b)
}"
Y1 <- 4 # KN-11 failed test events
n1 <- 12# KN-11 all test events
Y2 <- 8# GMD failed test events
n2 <- 18# GMD all test events
Y3 <- 5# THAAD failed test events
n3 <- 11# THAAD all test events
Y4 <- 6# AEGIS failed test events
n4 <- 37# AEGIS all test events
a <- 1
b <- 1
model <- jags.model(textConnection(model_string), inits=list(.RNG.name="base::Wichmann-Hill",.RNG.seed= 12341),
data = list(Y1=Y1,n1=n1,Y2=Y2,
n2=n2,Y3=Y3,n3=n3,
Y4=Y4,n4=n4,a=a,b=b))
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 4
## Unobserved stochastic nodes: 4
## Total graph size: 14
##
## Initializing model
update(model, 10000, progress.bar="none"); # Burnin for 10000 samples
samp <- coda.samples(model,
variable.names=c("theta1","theta2","theta3","theta4"),
n.iter=20000, progress.bar="none")
summary(samp)
##
## Iterations = 10001:30000
## Thinning interval = 1
## Number of chains = 1
## Sample size per chain = 20000
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## theta1 0.3572 0.12274 0.0008679 0.0008679
## theta2 0.4506 0.10768 0.0007614 0.0007810
## theta3 0.4636 0.13350 0.0009440 0.0009440
## theta4 0.1794 0.06056 0.0004283 0.0004331
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## theta1 0.13980 0.2676 0.3507 0.4396 0.6086
## theta2 0.24542 0.3760 0.4487 0.5236 0.6660
## theta3 0.21107 0.3688 0.4613 0.5569 0.7270
## theta4 0.07767 0.1352 0.1743 0.2177 0.3118
mcmc_hist(samp,pars = c("theta1","theta2","theta3","theta4"),binwidth = 0.05)
mcmc_intervals(samp,pars = c("theta1","theta2","theta3","theta4"))
mcmc_combo(samp,pars = c("theta1","theta2","theta3","theta4"))
samp.dat <- as.data.frame(mcmc.list(samp)[[1]])
summary(samp.dat)
## theta1 theta2 theta3 theta4
## Min. :0.0451 Min. :0.1057 Min. :0.06498 Min. :0.03151
## 1st Qu.:0.2676 1st Qu.:0.3760 1st Qu.:0.36876 1st Qu.:0.13516
## Median :0.3507 Median :0.4487 Median :0.46131 Median :0.17431
## Mean :0.3572 Mean :0.4506 Mean :0.46364 Mean :0.17943
## 3rd Qu.:0.4396 3rd Qu.:0.5236 3rd Qu.:0.55689 3rd Qu.:0.21773
## Max. :0.8299 Max. :0.8386 Max. :0.89051 Max. :0.46727
icbm_F_post<-samp.dat$theta1
icbm_S_post<-1-samp.dat$theta1
thaad_F_post<-samp.dat$theta2
thaad_H_post<-1-samp.dat$theta2
gmd_F_post<-samp.dat$theta3
gmd_H_post<-1-samp.dat$theta3
aegis_F_post<-samp.dat$theta4
aegis_H_post<-1-samp.dat$theta4
# Markov chain states for 3 layers BMD system and ICBM as target
pS1S5<-icbm_F_post # KN-11 failed to start successfully
pS1S2<-icbm_S_post # KN-11 started successfully and went boosting
pS2S3<-aegis_F_post # AEGIS failed to hit KN-11 on boost and ICBM went to midterm phase
pS2S5<-aegis_H_post # AEGIS hit KN-11 on boost
pS3S4<-gmd_F_post # GMD failed to hit KN-11 on midterm and ICBM went reentry phase
pS3S5<-gmd_H_post # GMD hit KN-11 on midterm
pS4S6<-thaad_F_post # THAAD failed to hit KN-11 RV on impact - ICBM passed BMD
pS4S5<-thaad_H_post # THAAD hit KN-11 RV on impact - ICBM failed passing BMD
res1<-c()
res2<-c()
for (i in 1:5000) {
MC<-matrix(c(0.00,pS1S2[i],0,0,pS1S5[i],0,0,0,pS2S3[i],0,pS2S5[i],0,0,0,0,pS3S4[i],pS3S5[i],0,0,0,0,0,pS4S5[i],pS4S6[i],0,0,0,0,1,0,0,0,0,0,0,1),nrow=6,ncol=6,byrow=T)
# MC
MCT<-t(MC)
# MCT
res<-solve(diag(nrow=4,ncol=4)-MC[1:4,1:4])%*%MC[1:4,5:6]
# print(res[1,2])
res2[i]<-res[1,2]
res1[i]<-res[1,1]
}
i
## [1] 5000
summary(res2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.001502 0.014274 0.020909 0.023903 0.030329 0.106657
summary(res1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.8933 0.9697 0.9791 0.9761 0.9857 0.9985
hist(res2, col="lightblue", main="Successfull impact of KN-11 RV", xlab = "Probability", freq = F)
hist(res1, col="red", main="KN-11 failed to pass through BMD with 1 AEGIS + 1 GBD + 1 THAAD", xlab = "Probability", freq = F)
stateNames <- c("S1","S2","S3", "S4", "S5", "S6")
row.names(MCT) <- stateNames; colnames(MC) <- stateNames
plotmat(MCT,pos = NULL,
lwd = 1, box.lwd = 2,
cex.txt = 0.8,
box.size = 0.1,
box.type = "circle",
box.prop = 0.5,
box.col = "light yellow",
arr.length=.1,
arr.width=.1,
self.cex = .4,
self.shifty = -.01,
self.shiftx = .13,
main = "Markov chain for BMD: KN-11 killed by 1 AEGIS or 1 GBD or 1 THAAD")
For this case (1 AEGIS + 1 GBD + 1 THAAD) we have got 95% credible interval for the event KN-11 failed to pass through BMD as \(0.8933{\le}P_{KN11*}{\le}0.9985\) where \((P_{KN11*}>0.95)=0.947\) and \((P_{KN11*}<0.95)=0.053\)
res1<-c()
res2<-c()
for (i in 1:5000) {
MC<-matrix(c(0.00,pS1S2[i],0,0,pS1S5[i],0,0,0,(pS2S3[i])^2,0,1-(pS2S3[i])^2,
0,0,0,0,(pS3S4[i])^2,1-(pS3S4[i])^2,0,0,0,0,0,pS4S5[i],pS4S6[i],0,0,0,0,1,0,0,0,0,0,0,1),nrow=6,ncol=6,byrow=T)
# MC
MCT<-t(MC)
# MCT
res<-solve(diag(nrow=4,ncol=4)-MC[1:4,1:4])%*%MC[1:4,5:6]
# print(res[1,2])
res2[i]<-res[1,2]
res1[i]<-res[1,1]
}
i
## [1] 5000
summary(res2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.687e-05 8.123e-04 1.580e-03 2.376e-03 3.021e-03 2.510e-02
summary(res1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9749 0.9970 0.9984 0.9976 0.9992 1.0000
hist(res2, col="lightblue", main="Successfull impact of KN-11 RV", xlab = "Probability", freq = F)
hist(res1, col="red", main="KN-11 failed to pass through BMD with 2 AEGIS + 2 BMD + 1 THAAD", xlab = "Probability", freq = F)
stateNames <- c("S1","S2","S3", "S4", "S5", "S6")
row.names(MCT) <- stateNames; colnames(MC) <- stateNames
plotmat(MCT,pos = NULL,
lwd = 1, box.lwd = 2,
cex.txt = 0.8,
box.size = 0.1,
box.type = "circle",
box.prop = 0.5,
box.col = "light yellow",
arr.length=.1,
arr.width=.1,
self.cex = .4,
self.shifty = -.01,
self.shiftx = .13,
main = "Markov chain for BMD: KN-11 killed by 2 AEGIS or 2 GBD or 1 THAAD")
For this case (2 AEGIS + 2 GBD + 1 THAAD) we have got 95% credible interval for the event KN-11 failed to pass through BMD as \(0.9749{\le}P_{KN11**}{\le}0.9999\) where \((P_{KN11**}>0.99)=0.9796\) and \((P_{KN11**}<0.99)=0.0204\)
So two AEGIS and two GBD missiles launched for one KN-11 target do matter even for three layers of BMD!