Prueba de Kolmogorov-Smirnov para la distribución de Poisson en los arribos de clientes del restaurante “El Castaño”

Author

Katerin

library(readxl)
Warning: package 'readxl' was built under R version 4.3.3
restaurante <- read_excel("C:/Users/MINEDUCYT/Desktop/CICLOII_2025/SEMINARIOII/Restaurante.xlsx")

head(restaurante)
# A tibble: 6 × 9
  Horario         T Lunes Martes Miércoles Jueves Viernes Sábado Domingo
  <chr>       <dbl> <dbl>  <dbl>     <dbl>  <dbl>   <dbl>  <dbl>   <dbl>
1 06:00 a. m.     0     0      0         0      0       0      0       0
2 07:00 a. m.     1     6      8        13      8      10     16      16
3 08:00 a. m.     2    11     12        12     15      18     14      10
4 09:00 a. m.     3    14      6        13      9      10     16      15
5 10:00 a. m.     4     7      7         9      7       8     16       8
6 11:00 a. m.     5     8      8        14      8      11     21      14
restaurante= restaurante[,c(3,4,5,6,7,8,9)]
head(restaurante)
# A tibble: 6 × 7
  Lunes Martes Miércoles Jueves Viernes Sábado Domingo
  <dbl>  <dbl>     <dbl>  <dbl>   <dbl>  <dbl>   <dbl>
1     0      0         0      0       0      0       0
2     6      8        13      8      10     16      16
3    11     12        12     15      18     14      10
4    14      6        13      9      10     16      15
5     7      7         9      7       8     16       8
6     8      8        14      8      11     21      14
restaurante=data.frame(restaurante)

head(restaurante)
  Lunes Martes Miércoles Jueves Viernes Sábado Domingo
1     0      0         0      0       0      0       0
2     6      8        13      8      10     16      16
3    11     12        12     15      18     14      10
4    14      6        13      9      10     16      15
5     7      7         9      7       8     16       8
6     8      8        14      8      11     21      14
# Tus datos de la columna "Lunes"
restaurante_lunes <- c(0,6,11,14,7,8,9,11,8,10,7,11)

# Estimamos lambda como la media de los datos
lambda <- mean(restaurante_lunes)
lambda
[1] 8.5
# Prueba de Kolmogorov-Smirnov para Poisson
resultado_ks <- ks.test(restaurante_lunes, "ppois", lambda)
Warning in ks.test.default(restaurante_lunes, "ppois", lambda): ties should not
be present for the Kolmogorov-Smirnov test
resultado_ks

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  restaurante_lunes
D = 0.21893, p-value = 0.613
alternative hypothesis: two-sided

El valor promedio de eventos es de 8.5 que es valor de lambda

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 21.9%, lo cual no es estadísticamente significativo según el p_value de 0.613 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.613 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

# Nombres de los días
dias <- c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")

# Aplicar la prueba a cada día
for (dia in dias) {
  datos <- restaurante[[dia]]
  lambda <- mean(datos)
  cat("\n---", dia, "---\n")
  print(lambda)
  print(ks.test(datos, "ppois", lambda))
}

--- Lunes ---
[1] 8.5
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.21893, p-value = 0.613
alternative hypothesis: two-sided


--- Martes ---
[1] 7.416667
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.25671, p-value = 0.4077
alternative hypothesis: two-sided


--- Miércoles ---
[1] 10.83333
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.37346, p-value = 0.07036
alternative hypothesis: two-sided


--- Jueves ---
[1] 8.75
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.18805, p-value = 0.7898
alternative hypothesis: two-sided


--- Viernes ---
[1] 9
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.20599, p-value = 0.6886
alternative hypothesis: two-sided


--- Sábado ---
[1] 14.16667
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.24132, p-value = 0.4869
alternative hypothesis: two-sided


--- Domingo ---
[1] 11.83333
Warning in ks.test.default(datos, "ppois", lambda): ties should not be present
for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos
D = 0.28689, p-value = 0.2767
alternative hypothesis: two-sided

Lunes

El valor promedio de eventos es de 8.5 que es valor de lambda

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 21.9%, lo cual no es estadísticamente significativo según el p_value de 0.613 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.613 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

Martes

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 25.67%, lo cual no es estadísticamente significativo según el p_value de 0.4077 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.4077 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

Miercoles

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 37.34%, lo cual no es estadísticamente significativo según el p_value de 0.07036 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.07036 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

Jueves

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 18.80%, lo cual no es estadísticamente significativo según el p_value de 0.7898 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.7898 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

Viernes

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 20.59%, lo cual no es estadísticamente significativo según el p_value de 0.6886 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.6886 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

Sabado

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 24.13%, lo cual no es estadísticamente significativo según el p_value de 0.4869 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.4869 y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

Domingo

La máxima diferencia (D) entre la distribución empirica y la de Poisson es aproximadamente un 28.68%, lo cual no es estadísticamente significativo según el p_value de 0.2767 y que es mayor que 0.05.

H0: Los datos siguen una distribución de Poisson

H1: Los datos no siguen una distribución de Poisson.

Como p_value es de 0.2767y estos es mayor que 0.05, no rechazamos H0 por lo que los datos siguen una distribución de Poisson.

import pandas as pd

# Leer el archivo Excel
restaurante = pd.read_excel("Restaurante.xlsx")

restaurante = restaurante.iloc[:, 2:9]

# Ver las primeras filas
print(restaurante.head())
   Lunes  Martes  Miércoles  Jueves  Viernes  Sábado  Domingo
0      0       0          0       0        0       0        0
1      6       8         13       8       10      16       16
2     11      12         12      15       18      14       10
3     14       6         13       9       10      16       15
4      7       7          9       7        8      16        8
import numpy as np
from scipy import stats

# Tus datos de la columna "Lunes"
restaurante_lunes = [0,6,11,14,7,8,9,11,8,10,7,11]

# Estimamos lambda como la media de los datos
lambda_est = np.mean(restaurante_lunes)
print(lambda_est)
8.5
# Prueba de Kolmogorov-Smirnov para Poisson
resultado_ks = stats.kstest(restaurante_lunes, 'poisson', args=(lambda_est,))

# Imprimir el resultado de la prueba
print(resultado_ks)
KstestResult(statistic=np.float64(0.21893043516048602), pvalue=np.float64(0.541708878626628), statistic_location=np.int64(7), statistic_sign=np.int8(-1))

Como el p_value fue de 0.54 y esto es mayo que 0.05 por lo que no se rechaza H0: los datos de Lunes se ajustan a una distribución Poisson.

import pandas as pd
import numpy as np
from scipy import stats

# Lista de días de la semana (columnas en tu Excel)
dias = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]

# Recorrer cada día y aplicar la prueba KS
for dia in dias:
    # Extraer los datos de ese día
    datos = restaurante[dia].dropna()
    
    # Calcular lambda (media)
    lambda_est = np.mean(datos)
    
    # Prueba Kolmogorov–Smirnov
    resultado_ks = stats.kstest(datos, 'poisson', args=(lambda_est,))
    
    # Mostrar resultados
    print(f"\n Día: {dia}")
    print(f"Lambda estimado: {lambda_est:.2f}")
    print(f"KS Statistic: {resultado_ks.statistic:.4f}")
    print(f"P-valor: {resultado_ks.pvalue:.4f}")

 Día: Lunes
Lambda estimado: 8.50
KS Statistic: 0.2189
P-valor: 0.5417

 Día: Martes
Lambda estimado: 7.42
KS Statistic: 0.2567
P-valor: 0.3469

 Día: Miércoles
Lambda estimado: 10.83
KS Statistic: 0.3735
P-valor: 0.0520

 Día: Jueves
Lambda estimado: 8.75
KS Statistic: 0.1880
P-valor: 0.7238

 Día: Viernes
Lambda estimado: 9.00
KS Statistic: 0.2060
P-valor: 0.6175

 Día: Sábado
Lambda estimado: 14.17
KS Statistic: 0.2413
P-valor: 0.4204

 Día: Domingo
Lambda estimado: 11.83
KS Statistic: 0.2869
P-valor: 0.2283

H0: Los datos siguen una distribución de Poisson.

H1: Los datos no siguen una distribución de Poisson.

Lunes: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

Martes: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

Miercoles: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

Jueves: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

Viernes: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

Sabado: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

Domingo: No se rechaza H0 por lo que los datos se ajustan a una distribución Poisson.

n <- 12
alpha <- 0.05
C_alpha <- sqrt(-0.5 * log(alpha / 2)) 
C_alpha
[1] 1.358102

constante crítica C_alpha se utiliza en la prueba de Kolmogorov–Smirnov (KS).

valor crítico C_alpha es de 1.358102 es adecuado para un nivel de significancia del 5%.

n <- 12   # Tamaño de la muestra
alpha <- 0.05  # Nivel de significancia

# Constante crítica para alfa = 0.05
c_alpha <- 1.358102

# Valor crítico de KS
D_alpha <- c_alpha / sqrt(n)
D_alpha
[1] 0.3920503

El valor D_alpha es de 0.3920503 es el umbral de comparación con el valor calculado de la prueba KS.

Si D_alpha es menor o igual a 0.3920503 No rechazamos la H0 (los datos se ajustan a la distribucion de Poisson)

Si D_alpha es mayor a 0.3920503 se rechaza la H0 (los datos no se ajustan a la distibucion de Poisson)

import numpy as np

# Parámetros
n = 12
alpha = 0.05

# Cálculo del valor crítico C_alpha
C_alpha = np.sqrt(-0.5 * np.log(alpha / 2))

print("C_alpha =", C_alpha)
C_alpha = 1.3581015157406195
import numpy as np

# Parámetros
n = 12
alpha = 0.05

# Constante crítica para alfa = 0.05
c_alpha = 1.358102

# Valor crítico de KS
D_alpha = c_alpha / np.sqrt(n)
print(D_alpha)
0.39205027764348455

El valor de D_alpha es de 0.3920 y es el “margen de tolerancia” de diferencia entre los datos reales y la Poisson esperada.

Si la diferencia empírica (D_alpha) es menor o igual a 0.3920, los datos se ajustan a la distribución Poisson.
Si D_alpha es mayor que 0.3920, los datos no se ajustan.

Por lo que se considera que siguen razonablemente una distribución Poisson.

Probabilidades

Probabilidad #1

¿Cuál es la probabilidad de que un lunes lleguen exactamente 10 clientes al restaurante?

# Lambda estimado (promedio de lunes)
lambda_lunes <- mean(restaurante$Lunes)

# Probabilidad de que lleguen 10 clientes
P_lunes_10 <- dpois(10, lambda = lambda_lunes)
P_lunes_10
[1] 0.1103883

Probabilidad #2

¿Cuál es la probabilidad de que un martes lleguen más de 12 clientes?

lambda_martes <- mean(restaurante$Martes)

# P(X > 12) = 1 - P(X <= 12)
P_martes_mas12 <- 1 - ppois(12, lambda = lambda_martes)
P_martes_mas12
[1] 0.03969359

Probabilidad #3

¿Cuál es la probabilidad de que un miércoles lleguen menos de 8 clientes?

lambda_miercoles <- mean(restaurante$Miércoles)

# P(X < 8) = P(X <= 7)
P_miercoles_menos8 <- ppois(7, lambda = lambda_miercoles)
P_miercoles_menos8
[1] 0.1542842

Probabilidad #4

¿Cuál es la probabilidad de que un jueves lleguen entre 9 y 12 clientes (inclusive)?

lambda_jueves <- mean(restaurante$Jueves)

# P(9 <= X <= 12) = P(X <= 12) - P(X <= 8)
P_jueves_9a12 <- ppois(12, lambda = lambda_jueves) - ppois(8, lambda = lambda_jueves)
P_jueves_9a12
[1] 0.4041824

Probabilidad #5

¿Cuál es la probabilidad de que un viernes lleguen exactamente 15 clientes?

lambda_viernes <- mean(restaurante$Viernes)

# P(X = 15)
P_viernes_15 <- dpois(15, lambda = lambda_viernes)
P_viernes_15
[1] 0.01943067

Probabilidad #6

¿Cuál es la probabilidad de que un sábado lleguen más de 18 clientes?

lambda_sabado <- mean(restaurante$Sábado)

# P(X > 18)
P_sabado_mas18 <- 1 - ppois(18, lambda = lambda_sabado)
P_sabado_mas18
[1] 0.126817

Probabilidad #7

¿Cuál es la probabilidad de que un domingo lleguen entre 8 y 14 clientes?

lambda_domingo <- mean(restaurante$Domingo)

# P(8 <= X <= 14)
P_domingo_8a14 <- ppois(14, lambda = lambda_domingo) - ppois(7, lambda = lambda_domingo)

P_domingo_8a14
[1] 0.6898499

La mayoría de las personas no conocen la prueba de Poisson ni su utilidad práctica.

Esta prueba es muy importante porque permite analizar y estimar la cantidad de clientes que llegan al restaurante “El Castaño” durante la semana, ya sea de forma diaria o semanal.

A través de esta información, el restaurante puede tener una proyección más precisa sobre la cantidad de alimentos que necesita preparar o comprar.

Esto ayuda a optimizar los recursos, evitando el desperdicio de comida o la falta de productos frescos para los clientes.

En otras palabras, la prueba de Poisson se convierte en una herramienta útil para planificar la producción y las compras, garantizando un mejor control del inventario y una gestión más eficiente del negocio.