# Instalar ggplot2 y plotly si no están ya instalados
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
if (!requireNamespace("plotly", quietly = TRUE)) {
  install.packages("plotly")
}

# Cargar las librerías necesarias
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
# Crear un data frame con los datos proporcionados
proporcion_defectuosos <- c(0.001, 0.005, 0.010, 0.015, 0.020, 0.030, 0.040, 0.050, 0.060, 0.070, 0.080, 0.100, 0.150)

# Parámetros de los planes de muestreo
planes <- data.frame(
  n = c(60, 120, 240),
  c = c(1, 2, 4)
)

# Función para calcular la probabilidad de aceptación
calc_pa <- function(p, n, c) {
  pa <- sum(sapply(0:c, function(k) dbinom(k, size = n, prob = p)))
  return(pa)
}

# Calcular las probabilidades de aceptación para cada plan y proporción de defectuosos
resultados <- data.frame()
for (i in 1:nrow(planes)) {
  for (p in proporcion_defectuosos) {
    pa <- calc_pa(p, planes$n[i], planes$c[i])
    resultados <- rbind(resultados, data.frame(
      proporcion_defectuosos = p,
      pa_calculada = pa,
      plan = paste("n =", planes$n[i], ", c =", planes$c[i])
    ))
  }
}

# Graficar las curvas de operación
p <- ggplot(resultados, aes(x = proporcion_defectuosos, y = pa_calculada, color = plan, group = plan)) +
  geom_line(size = 1) +
  geom_point() +
  labs(title = "Curvas de Operación para Diferentes Planes de Muestreo",
       x = "Proporción de Defectuosos (p)",
       y = "Probabilidad de Aceptación (Pa)") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Convertir el gráfico a un gráfico interactivo con plotly
p_interactivo <- ggplotly(p)

# Mostrar el gráfico interactivo
p_interactivo