Correction du TP sur les tests de Kolmogorov.

Transcription

Correction du TP sur les tests de Kolmogorov.
Université de Provence. Préparation Agrégation.
Épreuve de modélisation, option Probabilité-Statistique.
.
.
Correction du TP sur les tests de Kolmogorov.
Fabienne CASTELL
Exercice 1: test d’ajustement de Kolmogorov.
Fonction calculant la statistique de Kolmogorov d’ajustement a une loi uniforme.
Cette fonction permet de genérer des échantillons de loi, la loi de la statistique de Kolmogorov, en vue d’une estimation Monte Carlo de la fonction de répartition de cette variable
pour de petites valeurs de la taille de l’échantillon.
function D=statKS(U)
%
% function D=statKS(U)
%
% Fonction calculant la statistique du test de Kolmogorov-Smirnov,
% d’ajustement a une loi uniforme.
%
% Entree: -U: echantillon de donnees (dimension nxN).
%
% Sortie: -D: statistique du test (dimension 1xN).
%
D= \sqrt(n) \max{ \hat{F}_n(x) - x } ou \hat{F}_n est la fonction
%
de repartition empirique des donnees de U. Le calcul se fait
%
sur chaque colonne de la matrice U.
%
[n,N]=size(U);
D=sort(U);
D=D-([1:n]’*ones(1,N))/n;
D=[zeros(1,N);-D;D+1/n];
D=sqrt(n)*max(D);
Fonction calculant la statistique de Kolmogorov d’ajustement à une loi normale.
function D=stat_KS_aj_nor(X,m,s)
%
% function D=stat_KS_aj_nor(X,m,s)
%
% Fonction calculant la statistique du test de Kolmogorov-Smirnov,
% d’ajustement a une loi normale N(m,s).
%
% Entree: -X: echantillon de donnees (dimension nxN).
%
-m: moyenne de la gaussienne \‘a laquelle on ajuste.
%
-s: ecart-type de la gaussienne \‘a laquelle on ajuste.
%
1
% Sortie: -D: statistique du test (dimension 1xN).
%
D= \sqrt(n) \max{ \hat{F}_n(x) - F_0(x) }
% Le calcul se fait par colonne.
%
X=(X-m)/s;
X=pnorm(X);
D=statKS(X);
La programme relatif à l’exercice 1.
%
%
%
%
%
%
%
%
%
%
TP3_1.m
Exercice 1 du TP3. Questions
Question 1: Test de Kolmogorov Smirnov du generateur randn de Matlab.
Question 2: Exemple tire du Saporta. Test par Kolmogorov Smirnov de
du caract\‘ere exponentiel de dur\’ees de vie.
Question 3: Test d’ajustement \a une normle d’un echantillone de
loi de Student.
% -------------------------------------------------% QUESTION 1: Test du generateur randn de matlab.
%----------------------------------------------------n=input(’Taille de l’’echantillon : ’);
rand(’state’,0)
X=randn(n,1);
% Calcul de la statistique de test.
np=floor(n/10);
D=ones(np,1);
for i=1:np,
XX=X([1:i*10]);
D(i)=stat_KS_aj_nor(XX,0,1);
end
% Calcul du seuil critique.Attention! Pour de petites valeurs de
% l’echantillon, cette valeur ne correspond a rien.
seuil=pks(D);
seuil=1-seuil;
% Affichage des resultats.
figure(1)
plot(seuil)
xlabel(’Taille de l’’echantillon x10’)
ylabel(’Seuil critique’)
title(’Ajustement a N(0,1) d’’un echantillon obtenu par randn’)
clear n np D i XX X D seuil
2
%----------------------------------------% QUESTION 2: Exemple du Saporta.
%----------------------------------------------% Calcul de la statistique.
X=[51 78 110 135 180];
X=X’/200;
t=statKS(X);
% Calcul du seuil critique.
% Comme on n’a pas la fonction de repartition de D_5, on l’approche
% par Monte-Carlo;
U=rand(5,1000);
D=statKS(U);
Pval=sum(D > t)/1000;
disp(’
EXEMPLE DU SAPORTA’)
disp(’Taille de l’’echantillon : 5’)
disp([’Statistique de Kolmogorov : ’ num2str(t)]);
disp([’Pvaleur du test: ’ num2str(Pval)])
clear X t U D Pval
%----------------------------------------% QUESTION 3: Ajustement d’un echantillon de Student a la loi normale.
%----------------------------------------% Comparaison des densites
x=[-6:0.1:6];
fg=exp(-0.5*x.^2)/sqrt(2*pi);
d=[[1:4] [5:5:50]]; %degres de la loi de Student;
nd=length(d);
figure(2)
for i=1:nd
ft=dt(x,d(i));
plot(x,fg,’r’,x,ft,’*g’)
title(’Comparaison des densites de la normale et de la Student’)
xlabel([’degre de liberte de la Student: ’ num2str(d(i))])
legend(’N(0,1)’,[’Student(’ num2str(d(i)) ’)’])
pause(0.01)
end
% Generation d’echantillons de Student. La meme suite de
% nombres aleatoires est utilisee.
n=2000;
rand(’state’,0)
u=rand(n,1);
T=qt(u*ones(1,nd), ones(n,1)*d);
% Calcul de la statistique de test.
D=stat_KS_aj_nor(T,0,1);
3
% Calcul du seuil critique.
seuil=pks(D);
seuil=1-seuil;
% Affichage des resultats.
figure(3)
plot(d,seuil’,’*’)
xlabel(’Degre de liberte de la Student’)
ylabel(’Seuil critique du test d’’ajustement a N(0,1)’)
title([’Ajustement a N(0,1) d’’un ’ num2str(n) ’ echantillon de Student’])
Les résultats.
>> TP3_1
Taille de l’echantillon : 10000
EXEMPLE DU SAPORTA
Taille de l’echantillon : 5
Statistique de Kolmogorov : 0.5702
Pvaleur du test : 0.817
Question1. Le graphique correspondant au test du générateur randn est la figure 1. On
peut voir que pour des échantillons de taille approximative 2000, on rejette l’hypothèse de
normalité avec environs 11 % de chances de se tromper ! !
Ajustement a N(0,1) d’un echantillon obtenu par randn
1
0.9
0.8
0.7
Seuil critique
0.6
0.5
0.4
0.3
0.2
0.1
0
0
100
200
300
400
500
600
Taille de l’echantillon x10
700
800
Fig. 1 – Test du générateur randn de Matlab
4
900
1000
Question 2. En ce qui concerne l’exemple du Saporta, qu’en rejetant le caractère exponentiel, on a plus de 80% de chances de se tromper.
Question 3. La loi de Student converge vers la loi normale quand n −→ +∞. On voit sur
les figures 2 et 3 que cette convergence est assez rapide.
Comparaison des densites de la normale et de la Student
0.4
N(0,1)
Student(1)
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
−6
−4
−2
0
2
degre de liberte de la Student: 1
4
6
Fig. 2 – Comparaison des densités de N(0, 1) et T1
Comparaison des densites de la normale et de la Student
0.4
N(0,1)
Student(10)
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
−6
−4
−2
0
2
degre de liberte de la Student: 10
4
6
Fig. 3 – Comparaison des densités de N(0, 1) et T10
Ceci est confirmé par la figure 4, où on voit que le test de Kolmogorov-Smirnov a du mal
à distinguer la loi Tn pour n ≥ 3 sur un échantillon de données de taille 200. Lorsqu’on
augmente la taille de l’échantillon, on arrive à mieux discriminer entre les deux lois (cf figure
5)
Exercice 2: Comparaison de deux échantillons par Kolmogorov-Smirnov.
1/
5
Ajustement a N(0,1) d’un 200 echantillon de Student
1
0.9
Seuil critique du test d’ajustement a N(0,1)
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
5
10
15
20
25
30
Degre de liberte de la Student
35
40
45
50
Fig. 4 – Ajustement d’un 200-échantillon de Student à N(0, 1)
Ajustement a N(0,1) d’un 2000 echantillon de Student
0.9
Seuil critique du test d’ajustement a N(0,1)
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
5
10
15
20
25
30
Degre de liberte de la Student
35
40
45
Fig. 5 – Ajustement d’un 2000-échantillon de Student à N(0, 1)
function D=stat_KS_hom(X,Y)
%
% function D=stat_KS_hom(X,Y)
%
% Fonction calculant la statistique du test de Kolmogorov-Smirnov,
% de comparaison de deux echantillons
%
% Entree: -X: premier echantillon de donnees (dimension nxN).
%
-Y: deuxieme echantillon de donnes (dimension mxN).
% Sortie: -D: statistique du test (dimension 1xN)
%
D= sqrt(nX*nY/(nX+nY)) \max{| \hat{F}_n(x) - \hat{G}_m(x) |}
% Le calcul se fait par colonne
%
[nX, N]=size(X);
[nY,N]=size(Y);
6
50
[Z,J]=sort([X;Y]);
K=(J<=nX);
K=cumsum(K);
K=K/nX;
J=(J>nX);
J=cumsum(J);
J=J/nY;
J=abs(K-J);
D=max(J);
D=sqrt(nX*nY/(nX+nY))*D
2/ Exemple des forêts. Le programme
%
%
%
%
%
%
KS_foret.m
Test d’homogeneite de Kolmogorov de deux echantillons
correspondant a la hauteur des arbres dans deux forets
differentes.%
% Rentrees des donnees.
%
X=[23.4 24.4 24.6 24.9 25 26.2 26.3 26.8 26.9 27 27.6 27.7];
X=X’;
lX=length(X);
Y=[22.5 22.9 23.7 24.0 24.4 24.5 25.3 26 26.2 26.4 26.7 26.9 27.4 28.5];
Y=Y’;
lY=length(Y);
% Calcul de la statistique et du niveau critique pour la loi asymptotique.
T=stat_KS_hom(X,Y);
niv=pks(T);
niv=1-niv;
% Calcul de la P_val par Monte-Carlo;
U=rand(lX,1000);
V=rand(lY,1000);
D=stat_KS_hom(U,V);
Pval=sum(D>T)/1000;
% Affichage des r\’esultats.
disp( ’HOMOGENEITE DE LA HAUTEUR DES ARBRES.’)
disp([’Statistique: ’ num2str(T)])
disp([’p-valeur pour la loi asymptotique: ’ num2str(niv)])
disp([’p-valeur estimee par Monte Carlo: ’ num2str(Pval)]);
Les résultats.
HOMOGENEITE DE LA HAUTEUR DES ARBRES.
7
Statistique: 0.2619
p-valeur pour la loi asymptotique: 0.76723
p-valeur estimee par Monte Carlo: 0.662
La hauteur des arbres dans les deux forêts n’est pas significativement différente.
3/
%
%
%
%
%
%
%
test_KS_hom_exp.m
Exercice 2 du TP3.
Test d’homogeneite de Kolmogorov de deux echantillons
independants d’exponentielles.
% Variation en fonction de l’ecart entre les param\‘etres.
%
X=-log(rand(1000,1));
Y=-log(rand(1000,1));
l=[1:.1:2];
ll=length(l);
Y=Y*(1./l);
X=X*ones(1,ll);
T=stat_KS_hom(X,Y);
niv=pks(T);
niv=1-niv;
figure(1)
plot(l, niv,’*’)
xlabel(’Parametre l’)
ylabel(’niveau a partir duquel l’’homogeneite est rejetee’)
title(’test de KS de comparaison entre exp(1) et exp(l)’)
legend([’Taille des echantillons: 1000’])
axis([1 2 0 1])
8
test de KS de comparaison entre exp(1) et exp(l)
1
Taille des echantillons: 1000
niveau a partir duquel l’homogeneite est rejetee
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
1
1.1
1.2
1.3
1.4
1.5
Parametre l
1.6
1.7
1.8
1.9
2
Fig. 6 – Evolution du seuil critique quand le paramètre de la loi varie.
9