Jean-François BERGEZ - Jean-François DELMAS
Date: dernière date de mise à jour : 19 novembre 2003
Un hôpital américain veut attribuer les congés de ses obstétriciens pour
l'année . Il dispose de l'observation des naissances de l'année
, (source : NVSR 1999)
Question 1
les naissances se répartissent-elles équitablement sur les jours de la
semaine?
|
On définit la statistique
![]() |
Si est vrai, alors
converge en loi vers un
à
degré de liberté. En particulier
prend les valeurs
typiques du
à
degré de liberté. En revanche si
n'est pas vraie i.e.
, alors
quand
. Ainsi
prend de grandes
valeurs. On rejette donc
si on observe des valeurs anormalement
grandes pour
, par exemple supérieures à un
donné. Toutefois, comme la loi du
est portée par
, toutes
les valeurs de
sont possibles. Il existe donc une
probabilité
de rejeter à tort
(risque de première
espèce). La valeur de
dépend de
:
![]() |
Ce risque incontournable dépend du contexte et est fixé par le
décisionnaire. Traditionnellement
, mais on peut choisir
des valeurs bien plus faibles pour des domaines sensibles.
On revient au problème initial. On dispose pour cela des nombres des naissances présentés dans le tableau (1).
// les occurences des naissances N=[564772,629408,609596,604812,605280,450840,404456]; // la loi uniforme sur {1,...,7} p0=ones(1,7)/7;
On définit la fonction qui calcule la p-valeur:
// cette fonction renvoie P(chi2>zeta_n) // N est une matrice des effectifs observés // p0 est une matrice dont chaque ligne est une probabilité // chaque ligne de N est le vecteur des occurences et la ligne // correspondante de p0 est la loi par rapport à laquelle on teste. function[proba]=chi2(N,p0) n=sum(N,'c');// cardinal de l'échantillon observé // on vérifie que tous les échantillons ont même taille. if norm(n(1)*ones(n)- n) > %eps then error("échantillons de tailles différentes"); return end n = n(1); // calcul de zeta_ n zeta_n=n*sum(((N/n-p0).^2)./p0,'c'); // nombre de degrés de liberté (= nombre de classes dans N-1) d= size(N,'c')-1 // on calcule la proba pour un chi 2 à d-1 degrés d'être supérieur à zeta [p,q]=cdfchi("PQ",zeta_n,d*ones(zeta_n)); proba=q; endfunction;
On calcule ainsi
et
. Comme on sait que
on rejette cette hypothèse au
niveau
. Les naissances ne se répartissent pas de manière
uniforme sur les jours de la semaine.
//exécution du test alpha=chi2(N,p0);
exec prog1.sce;
alpha
On veut tester la validité d'un générateur de nombres aléatoires à
valeurs dans
et de loi uniforme. On génère
nombres
suivant cette loi. On applique le test du
et on rejette à
. On effectue cette opération
fois et on compte le nombre de
rejets. En théorie, on devrait obtenir en première approximation
rejets puisque on simule suivant une loi uniforme et que
l'on rejette à
. On génère un vecteur ligne de
réalisations
d'une loi uniforme sur
, ici
:
X=grand(1,n,'uin',0,m)Ensuite on compte le nombre d'occurences des chiffres
function[N]=occurences(X,m) // X est une matrice dont chaque ligne est la réalisation // de variables aléatoires à valeurs // dans {0,...,m} mx= size(X,'r'); // taille de l'échantillon N=zeros(mx,m+1); for i=1:m+1 N(:,i)=sum(X==i-1,'c'); end endfunction;
Puis on utilise la fonction
// on teste K fois le générateur avec n tirages de la loi uniforme (sur // {0,...,m} à chaque test. function[nb_rejets]=test_generateur(n,K,m) // K fois n réalisations de la loi uniforme sur {0,...,m} X=grand(K,n,'uin',0,m); // calcul des nombres d'occurences de 1,...,m dans X No=occurences(X,m); // calcul des p-valeurs alpha=chi2(No,ones(K,m+1)/(m+1)); // nombre de rejets à 5% nb_rejets = sum(alpha<=0.05); endfunction;
et on obtient pour une simulation :
![]() |
![]() |
Nombre de rejets obtenus |
![]() |
![]() |
![]() |
Question 2
Quelle est la loi asymptotique (quand
![]() ![]() ![]() |
On réalise la même expérience mais avec une loi un peu différente
de la loi
uniforme sur
. Remarquons que la loi
des occurences lors de
simulations suivant la loi
est
exactement la loi multinômiale de paramètre
. Cette dernière loi
est directement simulable à l'aide de
grand.On choisit une probabilité
// loi uniforme sur {0,...,m} p0=ones(1,m+1)/(m+1); p1=p0; // $ désigne la dernière coordonnée du vecteur p1($)=0.15; p1($-1)=0.05; /////////////////////////////// // // ON ÉLIMINE LA DERNIÈRE COORDONNÉE DE P1 POUR // UTILISER LE GÉNÉRATEUR grand('mul') // /////////////////////////////// p1_tilde=p1([1:$-1]); // on génère une variable de loi multinômiale de paramètre (n,p1) grand(1,'mul',n,p1_tilde')
On simule fois suivant cette loi
et on compte le nombre de
rejets. Pour cela on utilise la forme vectorielle suivante:
// simule K fois les occurences de n simulations selon p1 // (p1_tilde se déduit de p1 en supprimant la dernière valeur de p1) X=grand(K,'mul',n,p1_tilde')'; // on calcule les p-valeurs pour les K simulations r=chi2(X,ones(K,1)*p0); // on détermine le nombre de rejets nb_rejets= sum(r<=0.05)
On obtient alors le résultat suivant pour une simulation particulière :
![]() |
![]() |
Nombre de rejets obtenus |
![]() |
![]() |
![]() |
Le nombre de rejets est plus important et à juste titre puisqu'on n'a pas simulé selon une loi uniforme. Cependant on ne rejette pas systématiquement car la loi simulée ``ressemble'' à une loi uniforme.
Cette fois-ci on remplace la loi uniforme par une loi binômiale
:
p1=binomial(1/2,9);
Question 3
Simuler le nombre de rejets pour
![]() ![]() |
Les histogrammes ci-dessous permettent de visualiser la différence entre
la loi uniforme sur
et la loi binômiale
.
//pseudo distance du chi2 //p1 est la loi à tester, p0 est la loi de référence function[d]=Dist(p1,p0) d=sum(((p1-p0).^2)./p0); endfunction;
Le programme qui réalise ceci est similaire à celui du test des générateurs :
// On effectue K fois n simulations suivant la loi p1, et on obtient la // probabilité de rejet comme fonction de la distance function [nb_rejets,D]=test(n,K,m,d) p0=ones(1,m+1)/(m+1);// loi uniforme sur {0,...,m} p1=p0; // avant de modifier p0, on vérifie que d est une valeur possible if max(p1($)-1,-p1($-1)) >= d | d >= min(1-p1($-1),p1($)) then error("d est incompatible") end p1($)= p1($) -d; p1($-1)= p1($-1) + d; // calcul de la pseudo distance du chi2 // entre p0 et p1 D=Dist(p1,p0); p1_tilde=p1([1:$-1]); X=grand(K,'mul',n,p1_tilde')'; // simule K fois les occurences de n simulations selon p1. r=chi2(X,ones(K,1)*p0); nb_rejets= sum(r<=0.05); endfunction;
Les résultats sont récapitulés dans le tableau suivant pour
.
//pour la courbe de puissance du test function[D,r]=df(k) n = 1000; K = 1000; m = 9; r = ones(1,k); D = ones(1,k); for i=1:k d =(i-1)/k/(m+1) [r1,D1]=test(n,K,m,d); r(i)=r1/K; D(i)=D1; end plot2d(D,r); endfunction;
![]() |
0.000 | 0.002 | 0.008 | 0.018 | 0.032 | 0.050 | 0.072 | 0.098 | 0.128 | 0.162 |
![]() |
0.042 | 0.127 | 0.455 | 0.873 | 0.993 | 1 | 1 | 1 | 1 | 1 |
La courbe est obtenue en tapant :
df(10);;
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
0.007033 | 0.043678 | 0.124116 | 0.208127 | 0.232418 | 0.197445 | 0.116589 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
0.050597 | 0.015320 | 0.003991 | 0.000532 | 0.000152 | 0.000000 |
Quand les dés ne sont pas biaisés la probabilité d'observer les faces
ou
dans un lancer est
. Les
suivent donc une loi
binomiale
. Le vecteur
représente les
occurrences correspondant aux fréquences empiriques.
N=[185,1149,3265,5475,6114,5194,3067,1331,403,105,14,4,0]; p0=binomial(1/3,12);
Question 4
Les dés sont-ils biaisés?
|
Question 5
Dans les cas où les dés sont biaisés, avec tous le même biais, calculer
la probabilité d'obtenir un
![]() ![]() ![]() ![]() ![]() |
On désire étudier la répartition des naissances suivant le type du jour de semaine (jours ouvrables ou week-end) et suivant le mode d'accouchement (naturel ou par césarienne). Les données proviennent du ``National Vital Statistics Report'' et concernent les naissances aux USA en 1997.
Naissances | Naturelles | César. | Total |
J.O. | 2331536 | 663540 | 2995076 |
W.E. | 715085 | 135493 | 850578 |
Total | 3046621 | 799033 | 3845654 |
Naissances | Naturelles | César. | Total |
J.O. | 60.6 % | 17.3 % | 77.9% |
W.E. | 18.6 % | 3.5 % | 22.1% |
Total | 79.2 % | 20.8 % | 100.0% |
N=[2331536 715085 663540 135493];
On note la probabilité qu'un bébé naisse un jour ouvrable et
sans césarienne,
la probabilité qu'un bébé naisse un week-end et
sans césarienne,
la probabilité qu'un bébé naisse un jour ouvrable et
par césarienne,
la probabilité qu'un bébé naisse un week-end et
par césarienne.
Question 6
Donner l'estimateur des fréquences empiriques de
![]() |
Question 7
À l'aide d'un test du
![]() |
Question 8
On désire savoir s'il existe une évolution significative dans
la répartition des naissances par rapport à 1996. À l'aide d'un
test du
![]() ![]() ![]() ![]() |
Naissances | Naturelles | Césariennes |
J.O. | 60.5 % | 17.0 % |
W.E. | 18.9 % | 3.6 % |
p0=[60.5 18.9 17 3.6]/100;