Section : Statistiques en Scilab
Précédent : Statistiques en Scilab
Suivant : Générateurs pseudo-aléatoires.
Lois discrètes
Nous verrons à la section suivante que le générateur grand
permet la simulation des lois discrètes usuelles.
Voici une fonction de génération d'une loi discrète quelconque,
par la méthode d'inversion.
function e = ech_dist(m,n,x,d)
// ech_dist(m,n,x,d) retourne une matrice de taille mXn dont les
// coefficients sont des realisations independantes de la loi
// sur x specifiee par le vecteur d, normalise a 1.
d = d/sum(d); // normaliser par la somme
loi=cumsum(d); // calculer la fonction de repartition
for i=1:m,
for j=1:n,
k=1;
r=rand(1,1); // appel de random
while r>loi(k), // simulation par inversion
k=k+1,
end;
e(i,j)=x(k);
end;
end
La fonction suivante nous servira à calculer les fréquences des
différentes valeurs apparaissant dans un échantillon.
function [f,v] = freq_emp(ech)
// freq_emp(ech) Calcule les frequences empiriques des valeurs
// differentes de ech. Retourne un vecteur des valeurs differentes
// de ech et un vecteur des frequences correspondantes.
taille=size(ech,"*"); // taille de l'echantillon
v=[ech(1)]; // valeurs differentes
for k = 2:taille, // parcourir l'echantillon
if ech(k)~=v then, // la valeur v(k) est nouvelle
v = [v,ech(k)]; // la rajouter
end;
end;
v = gsort(v,"c","i"); // trier les valeurs trouvees
nbval=size(v,"*"); // nombre de valeurs differentes
effectifs = []; // effectifs des valeurs
for k = 1:nbval, // parcourir les valeurs
e = size(find(ech==v(k)),"*");// calculer l'effectif de v(k)
effectifs = [effectifs,e]; // le rajouter
end;
f=effectifs/sum(effectifs); // calculer les frequences
Nous supposons que les deux fonctions ech_dist et freq_emp
ont été placées dans le fichier lois_discretes.sci.
Voici deux exemples d'utilisation.
getf("lois_discretes.sci")
x = ech_dist(1,100,["a","b","c"],[0.5,0.3,0.2])
x = ech_dist(1,1000,["a","b","c"],[0.5,0.3,0.2]);
[f,v] = freq_emp(x)
plot2d3("gnn",[1:3]',f',5,"111","frequences",[0,0,4,1])
x = ech_dist(1,1000,[1:10],ones(1,10));
[f,v] = freq_emp(x)
xbasc()
plot2d3("gnn",v',f',5,"111","frequences",[0,0,11,0.5])
© B. Ycart (2001)