# 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")