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