Validación de un algoritmo

Un algoritmo genera ceros y unos con probabilidades respectivas 0,2 y 0,8. Generamos 1000 bits y obtenemos 836 unos. Nos preguntamos si el algoritmo está funcionando correctamente. Podemos simular la situación del siguiente modo, repetidas veces, para tratar de obtener empíricamente una respuesta:

#INICIO -------------------------
rm(list=ls(all=TRUE)) #Se borra todo lo anterior

x<-c(0,1)
prob<-c(0.2,0.8)
a<-replicate(100,sum(sample(x,1000,replace=T,prob)))
quantile(a,0.95)
#FIN

Después de haber ejecutado el script diez veces (téngase en cuenta que en otras diez simulaciones se obtendrían resultados diferentes), los percentiles 95 obtenidos son: 822.2, 823.2, 818.1, 817.1, 822.05, 819.05, 818, 819, 819.1 y 818.15. Estos resultados sugieren que el algoritmo, que no conocemos, no está funcionando bien, pues parece improbable que si lo hiciera generara 836 unos.

Desde luego que la forma adecuada de contrastar la hipótesis de que el algoritmo funciona bien es mediante un test Ji-cuadrado:

#INICIO
rm(list=ls(all=TRUE)) #Se borra todo lo anterior

x<-c(164,836)
prob.teóricas<-c(0.2,0.8)
chisq.test(x,p=prob.teóricas)
#FIN -------------------------

Como se obtiene un p-valor muy pequeño (<0.01) se rechaza la hipótesis nula y se concluye, igual que antes, que es muy improbable que el algoritmo esté funcionando bien.

No hay comentarios:

Publicar un comentario