# Mixture parameters
lambda1 <- 100
lambda2 <- 500
pi1 <- 0.8
pi2 <- 0.2
# Observed traffic
x <- 300
# Posterior probability of attack
p_attack <- (pi2 * dpois(x, lambda2)) /
(pi1 * dpois(x, lambda1) +
pi2 * dpois(x, lambda2))
p_attack
## [1] 1
p_normal <- 1 - p_attack
p_normal
## [1] 0
classify_traffic <- function(x) {
p_normal <- 0.8 * dpois(x, 100)
p_attack <- 0.2 * dpois(x, 500)
posterior_attack <- p_attack /
(p_normal + p_attack)
if (posterior_attack > 0.5) {
"BOT ATTACK"
} else {
"NORMAL TRAFFIC"
}
}
classify_traffic(100)
## [1] "NORMAL TRAFFIC"
classify_traffic(300)
## [1] "BOT ATTACK"
classify_traffic(500)
## [1] "BOT ATTACK"
x <- 0:700
normal <- 0.8 * dpois(x, 100)
attack <- 0.2 * dpois(x, 500)
mixture <- normal + attack
plot(x, mixture,
type = "l",
lwd = 2,
main = "Website Traffic Poisson Mixture",
xlab = "Visitors per hour",
ylab = "Probability")

# second example
# Parameters
n <- 100
p1 <- 0.02
p2 <- 0.15
pi1 <- 0.90
pi2 <- 0.10
# Observed number of defects
x <- 15
# Probability under each machine
P_A <- dbinom(x, n, p1)
P_B <- dbinom(x, n, p2)
# Mixture probability
P_X <- pi1 * P_A + pi2 * P_B
# Posterior probability
P_machine_B <- (pi2 * P_B) / P_X
P_machine_A <- (pi1 * P_A) / P_X
P_machine_A
## [1] 1.207623e-07
P_machine_B
## [1] 0.9999999
# defects
for (x in c(0, 2, 5, 10, 15, 20, 25)) {
P_A <- dbinom(x, 100, 0.02)
P_B <- dbinom(x, 100, 0.15)
posterior_B <-
(0.10 * P_B) /
(0.90 * P_A + 0.10 * P_B)
cat("Defects:", x,
" | Probability Machine B:",
round(posterior_B, 4), "\n")
}
## Defects: 0 | Probability Machine B: 0
## Defects: 2 | Probability Machine B: 0
## Defects: 5 | Probability Machine B: 0.0035
## Defects: 10 | Probability Machine B: 0.9942
## Defects: 15 | Probability Machine B: 1
## Defects: 20 | Probability Machine B: 1
## Defects: 25 | Probability Machine B: 1
# visual
x <- 0:40
machine_A <- 0.90 * dbinom(x, 100, 0.02)
machine_B <- 0.10 * dbinom(x, 100, 0.15)
mixture <- machine_A + machine_B
plot(x, mixture,
type = "h",
lwd = 3,
main = "Binomial Mixture: Product Defects",
xlab = "Number of defects",
ylab = "Probability")
