en construction
Pour la définition: voir http://fr.wikipedia.org/wiki/Loi_hyperg%C3%A9om%C3%A9trique
On utilise la loi hypergéométrique au lieu de la loi binomiale lorsque la taille de l'échantillon n'est plus négligeable devant la taille de la population (>10%).
Par exemple pour un jeu de carte: probabilité d'avoir k=3 cœurs dans une main de n=5 cartes sachant qu'il y en a g=13 dans un jeu de t=52 cartes.
<m>Prob(k)=c_g_k_c_t-g^{n-k}}}/{{C_t}^n}</m>
Avec <m>{{C_n}^k}</m> = calcul du nombre de combinaisons de n objets pris k à k:
<m>{{C_n}^k}~=~{n!}/{k!(n-k)!}~=~{n(n-1)(n-2)…(n-k+1)}/{k!}</m>
Résultat:
hypgeo(3,5,13,52) => 0.0815426170468187 soit environ 8% de chances
Voici le code proposé. Il applique strictement la définition, et utilise la fonction combin() définie dans la page de l'analyse combinatoire de ce site.
#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import division def hypgeo(k,n,g,t): """hypgeo(k,n,g,t): prob d'avoir k réussites dans un échantillon de taille n, sachant qu'il y en a g dans la population de taille t""" return combin(g,k)*combin(t-g,n-k)/combin(t,n) # Exemple d'utilisation: print hypgeo(3,5,13,52) # affiche: 0.0815426170468187 soit environ 8% de chances
Il s'agit de la somme des probabilités précédentes pour 0,1,2,…,k.
Par exemple pour un jeu de carte: probabilité d'avoir k=0,1,2 ou 3 cœurs dans une main de n=5 cartes sachant qu'il y en a g=13 dans un jeu de t=52 cartes.
#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import division def hypgeocum(k,n,g,t): """hypgeocum(k,n,p,t): prob d'avoir 0,1,..,k réussites dans un échantillon de taille n, sachant qu'il y en a g dans la population de taille t""" x=0 for i in range(0,k+1): x+=hypgeo(i,n,g,t) return x # Exemple d'utilisation: print hypgeocum(3,5,13,52) => 0.988775510204082