Bug #13369 fixed: samplef works on zero frequency values 83/14483/8
Pierre-Aime Agnel [Fri, 11 Apr 2014 15:36:53 +0000 (17:36 +0200)]
Added unit tests on sampling functions under statistics

Change-Id: I409cc936eb7fdb72411157be04a0f481afdf2fb2

20 files changed:
scilab/CHANGES_5.5.X
scilab/modules/statistics/help/en_US/sampling/sample.xml
scilab/modules/statistics/help/en_US/sampling/samplef.xml
scilab/modules/statistics/help/en_US/sampling/samwr.xml
scilab/modules/statistics/help/fr_FR/sampling/CHAPTER
scilab/modules/statistics/help/fr_FR/sampling/sample.xml [new file with mode: 0644]
scilab/modules/statistics/help/fr_FR/sampling/samplef.xml [new file with mode: 0644]
scilab/modules/statistics/help/fr_FR/sampling/samwr.xml [new file with mode: 0644]
scilab/modules/statistics/help/ja_JP/sampling/sample.xml
scilab/modules/statistics/help/ja_JP/sampling/samplef.xml
scilab/modules/statistics/help/ja_JP/sampling/samwr.xml
scilab/modules/statistics/macros/sample.sci
scilab/modules/statistics/macros/samplef.sci
scilab/modules/statistics/macros/samwr.sci
scilab/modules/statistics/tests/unit_tests/sample.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/sample.tst [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/samplef.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/samplef.tst [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/samwr.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/samwr.tst [new file with mode: 0644]

index 6b67a1c..9c70169 100644 (file)
@@ -116,6 +116,10 @@ Scilab Bug Fixes
 
 * Bug #13367 fixed - ATOMS default repository was 5.4 one instead of 5.5.
 
+* Bug #13369 fixed - Function samplef now works with 0 frequencies input values
+                     and normalized frequencies. sample and samplef now consistently
+                     return a row vector.
+
 * Bug #13378 fixed - The "Console" handle display was not homogeneous with others.
 
 * Bug #13381 fixed - eigs was failing when using a function as first input argument.
index 81ec193..045153b 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2000 - INRIA - Carlos Klimann
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
@@ -37,7 +37,7 @@
             <varlistentry>
                 <term>orient</term>
                 <listitem>
-                    <para>Optional parameter. Admissible values are 1, 2, 'r' or 'c'</para>
+                    <para>Optional parameter. Admissible values are <literal>{'*'}, 1, 2, 'r'</literal> or <literal>'c'</literal>. The orientation to sample rows or columns. See Description below.</para>
                 </listitem>
             </varlistentry>
             <varlistentry>
     <refsection>
         <title>Description</title>
         <para>
-            This function gives a  vector (or matrix) nx1. It contains
-            a random  sample of n extractions,  with replacement, from
-            the matrix X.
+            This function returns a  vector or matrix. It contains
+            a random  sample of <literal>n</literal> extractions,  with replacement, from
+            the matrix <literal>X</literal>.
         </para>
         <para>
-            s=sample(n,X)  (or s=sample(n,X,'*'))  returns a  vector s
-            whose  values are  a random  sample  of n  values from  X,
-            extracted with replacement, from X .
+            <literal>s = sample(n, X)</literal>  (or <literal>s = sample(n, X, '*')</literal>)  returns a  vector <literal>s</literal>
+            whose  values are  a random  sample  of <literal>n</literal>  values,
+            extracted with replacement, from <literal>X</literal>.
         </para>
         <para>
-            
-            s=sample(n,X,'r')   (or,   equivalently,  s=sample(n,X,1))
-            returns  a matrix  of type  size(X,'r')xn.  It  contains a
-            random sample of n  rows, extracted with replacement, from
-            the rows of X.
+
+            <literal>s = sample(n, X, 'r')</literal>   (or,   equivalently,  <literal>s = sample(n, X, 1)</literal>)
+            returns  a matrix  of size  <literal>size(X,'r') * n</literal>.  It  contains a
+            random sample of <literal>n</literal>  rows, extracted with replacement, from
+            the rows of <literal>X</literal>.
         </para>
         <para>
-            
-            s=sample(n,X,'c')   (or,   equivalently,  s=sample(n,X,2))
-            returns  a matrix  of type  nxsize(X,'c').  It  contains a
-            random  sample of  n columns,  extracted  with replacement
-            from the columns of X.
+
+            <literal>s = sample(n, X, 'c')</literal>   (or,   equivalently,  <literal>s = sample(n, X, 2)</literal>)
+            returns  a matrix  of size  <literal>n * size(X, 'c')</literal>.  It  contains a
+            random  sample of <literal>n</literal> columns,  extracted  with replacement
+            from the columns of <literal>X</literal>.
         </para>
     </refsection>
     <refsection>
+        <title> Random number generator </title>
+        <para> <literal>sample</literal> is based on <link linkend="grand">grand</link> for generating the random samples. Use <literal>grand("setsd", seed)</literal> to change the seed for <literal>samplef</literal>.</para>
+        <programlisting role="example"><![CDATA[
+            seed = getdate("s");
+            grand("setsd", seed); //sets the seed to current date
+
+            seed = 0;
+            grand("setsd", seed); //sets the seed to default value
+            ]]>
+        </programlisting>
+    </refsection>
+    <refsection>
         <title>Examples</title>
-        <programlisting role="example"><![CDATA[ 
-X=['a' 'dd' 'arreu'; 'ber' 'car' 'zon']
-s=sample(25,X)
-s=sample(25,X,'r')
-s=sample(25,X,'c')
+        <programlisting role="example"><![CDATA[
+X = ['a' 'dd' 'arreu'; 'ber' 'car' 'zon']
+s = sample(25, X)
+s = sample(25, X, 'r')
+s = sample(25, X, 'c')
  ]]></programlisting>
     </refsection>
     <refsection role="see also">
@@ -93,6 +105,9 @@ s=sample(25,X,'c')
             <member>
                 <link linkend="samwr">samwr</link>
             </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
         </simplelist>
     </refsection>
 </refentry>
index 4cc9f34..07a2f12 100644 (file)
@@ -13,8 +13,8 @@
 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="en" xml:id="samplef">
     <refnamediv>
         <refname>samplef</refname>
-        <refpurpose>sample with replacement from a population
-            and frequencies of his values.
+        <refpurpose>sample values with replacement from a population
+            with given frequencies.
         </refpurpose>
     </refnamediv>
     <refsynopsisdiv>
             <varlistentry>
                 <term>X</term>
                 <listitem>
-                    <para>matrix. Samples will be extracted from this matrix</para>
+                    <para>matrix. Population, samples are extracted from this matrix</para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>f</term>
                 <listitem>
-                    <para>positive integer matrix with same type than X. It indicates frequencies
-                        of corresponding values of X.
+                    <para>matrix of positive real values. Indicates the corresponding frequencies of the values in <literal>X</literal>.
                     </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>orient</term>
                 <listitem>
-                    <para>Optional parameter. Admissible values are 1, 2, 'r' or 'c'</para>
+                    <para>Optional parameter. Admissible values are <literal>{'*'}, 1, 2, 'r' </literal> or <literal>'c'</literal>. The orientation to sample rows or columns. See Description below.</para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>s</term>
                 <listitem>
-                    <para> vector or matrix containing sample</para>
+                    <para> vector or matrix containing the sampled values of <literal>X</literal> at frequencies <literal>f</literal>.</para>
                 </listitem>
             </varlistentry>
         </variablelist>
     <refsection>
         <title>Description</title>
         <para>
-            This function gives s, a  vector of length n.  It contains
-            a  sample of  n  extractions, with  replacement, from  the
-            vector  (or  matrix)  X,  each element  counted  with  the
-            frequency given by the corresponding value in vector f.
+            This function returns <literal>s</literal>, a  vector of length <literal>n</literal>.  It contains
+            a  sample of  <literal>n</literal>  extractions, with  replacement, from  the
+            vector  (or  matrix)  <literal>X</literal>,  each element  counted  with  the
+            frequency given by the corresponding value in vector <literal>f</literal>.
         </para>
         <para>
-            s=samplef(n,X,f)   (or  s=samplef(n,X,f,'*'))   returns  a
-            vector s whose values are a random sample of n values from
-            X,   each  value   with  a   probability  to   be  sampled
-            proportional  to the corresponding  value of  f, extracted
-            with replacement, from X.  f must have same length than X.
+            <literal>s=samplef(n,X,f)</literal> (or
+            <literal>s=samplef(n,X,f,'*')</literal>)   returns  a
+            vector <literal>s</literal> whose values are a random sample of n values from
+            <literal>X</literal>,   each  value   with  a   probability  to   be  sampled
+            proportional  to the corresponding  value of  <literal>f</literal>, extracted
+            with replacement, from <literal>X</literal>.  <literal>f</literal> must have same length than <literal>X</literal>.
         </para>
         <para>
-            s=samplef(n,X,f,'r')           (or,          equivalently,
-            s=samplef(n,X,f,1))    returns    a    matrix   of    type
-            size(X,'r')xn.  It contains a random sample of n rows from
-            X, each row with  a probability to be sampled proportional
-            to   the  corresponding   value  of   f,   extracted  with
-            replacement, from the  rows of X. The length  of f must be
-            equal to the number of rows of X.
+            <literal>s=samplef(n,X,f,'r')</literal>           (or,          equivalently,
+            <literal>s=samplef(n,X,f,1)) </literal>   returns    a    matrix   of    type
+            <literal>size(X,'r') * n</literal>.  It contains a random sample of <literal>n</literal> rows from
+            <literal>X</literal>, each row with  a probability to be sampled proportional
+            to   the  corresponding   value  of   <literal>f</literal>,   extracted  with
+            replacement, from the  rows of <literal>X</literal>. The length  of <literal>f</literal> must be
+            equal to the number of rows of <literal>X</literal>.
         </para>
         <para>
-            s=samplef(n,X,f,'c')           (or,          equivalently,
-            s=samplef(n,X,f,2))    returns    a    matrix   of    type
-            nxsize(X,'c').  It  contains a random sample  of n columns
-            from  X, each  column  with a  probability  to be  sampled
-            proportional  to the corresponding  value of  f, extracted
-            with replacement, from the columns  of X.  The length of f
-            must be equal to the number of columns of X.
+            <literal>s=samplef(n,X,f,'c')</literal>           (or,          equivalently,
+            <literal>s=samplef(n,X,f,2))</literal>    returns    a    matrix   of    type
+            <literal>n * size(X,'c')</literal>.  It  contains a random sample  of <literal>n</literal> columns
+            from  <literal>X</literal>, each  column  with a  probability  to be  sampled
+            proportional  to the corresponding  value of  <literal>f</literal>, extracted
+            with replacement, from the columns  of <literal>X</literal>.  The length of <literal>f</literal>
+            must be equal to the number of columns of <literal>X</literal>.
         </para>
     </refsection>
     <refsection>
+        <title> Random number generator </title>
+        <para> <literal>samplef</literal> is based on <link linkend="grand">grand</link> for generating the random samples. Use <literal>grand("setsd", seed)</literal> to change the seed for <literal>samplef</literal>.</para>
+        <programlisting role="example"><![CDATA[
+            seed = getdate("s");
+            grand("setsd", seed); //sets the seed to current date
+
+            seed = 0;
+            grand("setsd", seed); //sets the seed to default value
+            ]]>
+        </programlisting>
+    </refsection>
+    <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-a=[3 7 9;22 4 2]
-f1=[10 1 1 1 1 1]
-f2=[1 ; 15]
-f3=[10 1 1]
-s=samplef(15,a,f1)
-s=samplef(15,a,f2,'r')
-s=samplef(15,a,f3,'c')
+X = [3 7 9; 22 4 2];
+f1 = [10 1 1 1 1 1];
+f2 = [1 ; 15];
+f3 = [10 1 1];
+s=samplef(20, X, f1)      //the first value of matrix X will be choosen with frequency 10/15
+s=samplef(20, X, f2, 'r') //the second row of matrix a will be choosen with frequency  15/16
+s=samplef(20, X, f3, 'c') //the first column of matrix a will be choosen with frequency 10/12
  ]]></programlisting>
     </refsection>
     <refsection role="see also">
@@ -113,6 +125,9 @@ s=samplef(15,a,f3,'c')
             <member>
                 <link linkend="samwr">samwr</link>
             </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
         </simplelist>
     </refsection>
 </refentry>
index b7e5b76..c4b57d9 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2000 - INRIA - Carlos Klimann
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
@@ -17,7 +17,7 @@
     </refnamediv>
     <refsynopsisdiv>
         <title>Calling Sequence</title>
-        <synopsis>s = samwr(sizam,numsamp,X)</synopsis>
+        <synopsis>s = samwr(sizam, numsamp, X)</synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Arguments</title>
@@ -25,8 +25,7 @@
             <varlistentry>
                 <term>sizam</term>
                 <listitem>
-                    <para>integer. Size of a sample. It must be less or equal than
-                        size of X.
+                    <para>integer. Size of a sample. It must be lower than or equal to the size of <literal>X</literal>.
                     </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>s</term>
                 <listitem>
-                    <para>matrix of type sizsam  x numsamp. It contains
-                        numsamp  random samples  (the  columns) each  of
-                        sizam  (size(X,'*'))  extractions,  without
-                        replacement, from the column vector X.
+                    <para>matrix of size <literal>sizsam * numsamp</literal>. It contains
+                        <literal>numsamp</literal>  random samples  (the  columns) each  of
+                        <literal>sizam</literal> extractions without replacement from <literal>X</literal>.
                     </para>
                 </listitem>
             </varlistentry>
         <para>Gives samples without replacement from a column vector.</para>
     </refsection>
     <refsection>
+        <title> Random number generator </title>
+        <para> <literal>samwr</literal> is based on <link linkend="grand">grand</link> for generating the random samples. Use <literal>grand("setsd", seed)</literal> to change the seed for <literal>samwr</literal>.</para>
+        <programlisting role="example"><![CDATA[
+            seed = getdate("s");
+            grand("setsd", seed); //sets the seed to current date
+
+            seed = 0;
+            grand("setsd", seed); //sets the seed to default value
+            ]]>
+        </programlisting>
+    </refsection>
+    <refsection>
         <title>Examples</title>
-        <programlisting role="example"><![CDATA[ 
-a=[0.33 1.24 2.1 1.03]
-s=samwr(4,12,a)
+        <programlisting role="example"><![CDATA[
+a = [0.33 1.24 2.1 1.03]
+s = samwr(4, 12, a)
  ]]></programlisting>
     </refsection>
     <refsection role="see also">
@@ -74,6 +84,9 @@ s=samwr(4,12,a)
             <member>
                 <link linkend="samplef">samplef</link>
             </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
         </simplelist>
     </refsection>
 </refentry>
diff --git a/scilab/modules/statistics/help/fr_FR/sampling/sample.xml b/scilab/modules/statistics/help/fr_FR/sampling/sample.xml
new file mode 100644 (file)
index 0000000..19e8fb4
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2000 - INRIA - Carlos Klimann
+ * Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="fr" xml:id="sample">
+    <refnamediv>
+        <refname>sample</refname>
+        <refpurpose>Tirage avec remise.</refpurpose>
+    </refnamediv>
+    <refsynopsisdiv>
+        <title>Séquence d'appel</title>
+        <synopsis>s = sample(n,X,orient)</synopsis>
+    </refsynopsisdiv>
+    <refsection>
+        <title>Paramètres</title>
+        <variablelist>
+            <varlistentry>
+                <term>n</term>
+                <listitem>
+                    <para>Entier positif (taille de l'échantillon)</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>X</term>
+                <listitem>
+                    <para>Matrice. Population, les échantillons sont tirés de cette matrice.</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>orient</term>
+                <listitem>
+                    <para>Paramètre optionnel. Les valeurs possibles sont <literal>{'*'}, 1, 2, 'r' </literal> ou <literal>'c'</literal>. Orientations possibles pour le tirage de valeurs de X. Voir la description ci-dessous.</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>s</term>
+                <listitem>
+                    <para>Vecteur ou matrice contenant le tirage de valeurs de <literal>X</literal>.</para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
+        <title>Description</title>
+        <para>
+            Cette fonction renvoie un vecteur ou une matrice. Elle contient un tirage
+            de <literal>n</literal> échantillons,  avec remise, d'éléments
+            de la matrice <literal>X</literal>.
+        </para>
+        <para>
+            <literal>s = sample(n, X)</literal>
+            (ou <literal>s = sample(n, X, '*')</literal>)
+            renvoie un vecteur <literal>s</literal>
+            dont les <literal>n</literal> valeurs sont tirées aléatoirement,
+            avec remise, de <literal>X</literal>.
+        </para>
+        <para>
+            <literal>s = sample(n, X, 'r')</literal>   (ou,   de manière équivalente,
+            <literal>s = sample(n, X, 1)</literal>)
+            renvoie une matrice de taille  <literal>size(X,'r') * n</literal>.
+            Elle contient un échantillon de <literal>n</literal> lignes,
+            extraites avec remise, des lignes de <literal>X</literal>.
+        </para>
+        <para>
+            <literal>s = sample(n, X, 'c')</literal>   (ou,   de manière équivalente,
+            <literal>s = sample(n, X, 2)</literal>)
+            renvoie une matrice de taille  <literal>n * size(X, 'c')</literal>.
+            Elle contient un échantillon de <literal>n</literal> colonnes,
+            extraites avec remise, des colonnes de <literal>X</literal>.
+       </para>
+    </refsection>
+    <refsection>
+        <title>Générateur de nombres aléatoires</title>
+        <para> <literal>sample</literal> se fonde sur la fonction <link linkend="grand">grand</link> pour générer les tirages aléatoires. Utiliser <literal>grand("setsd", seed)</literal> pour changer la graine aléatoire de <literal>sample</literal>.</para>
+        <programlisting role="example"><![CDATA[
+            seed = getdate("s");
+            grand("setsd", seed); //positionne la graine à la date du jour
+
+            seed = 0;
+            grand("setsd", seed); //positionne la graine à sa valeur par défaut
+            ]]>
+        </programlisting>
+    </refsection>
+    <refsection>
+        <title>Exemples</title>
+        <programlisting role="example"><![CDATA[
+X = ['a' 'dd' 'arreu'; 'ber' 'car' 'zon']
+s = sample(25, X)
+s = sample(25, X, 'r')
+s = sample(25, X, 'c')
+ ]]></programlisting>
+    </refsection>
+    <refsection role="see also">
+        <title>Voir aussi</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="samplef">samplef</link>
+            </member>
+            <member>
+                <link linkend="samwr">samwr</link>
+            </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
+        </simplelist>
+    </refsection>
+</refentry>
+
diff --git a/scilab/modules/statistics/help/fr_FR/sampling/samplef.xml b/scilab/modules/statistics/help/fr_FR/sampling/samplef.xml
new file mode 100644 (file)
index 0000000..d1a596b
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2000 - INRIA - Carlos Klimann
+ * Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="fr" xml:id="samplef">
+    <refnamediv>
+        <refname>samplef</refname>
+        <refpurpose>Tirage avec remise d'un échantillon d'une population suivant les valeurs de fréquences données.</refpurpose>
+    </refnamediv>
+    <refsynopsisdiv>
+        <title>Séquence d'appel</title>
+        <synopsis>s = samplef(n, X, f, orient)</synopsis>
+    </refsynopsisdiv>
+    <refsection>
+        <title>Paramètres</title>
+        <variablelist>
+            <varlistentry>
+                <term>n</term>
+                <listitem>
+                    <para>Entier positif (taille de l'échantillon à tirer).</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>X</term>
+                <listitem>
+                    <para>Matrice. Population, les échantillons sont tirés de cette matrice.</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>f</term>
+                <listitem>
+                    <para>Matrice de valeurs réelles positives. Indique la fréquence de chaque élément de <literal>X</literal>.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>orient</term>
+                <listitem>
+                    <para>Paramètre optionnel. Les valeurs possibles sont <literal>{'*'}, 1, 2, 'r' </literal> ou <literal>'c'</literal>. Orientations possibles pour le tirage de valeurs de X. Voir la description ci-dessous.</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>s</term>
+                <listitem>
+                    <para> vecteur ou matrice contenant le tirage des valeurs de <literal>X</literal> aux fréquences <literal>f</literal>.</para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
+        <title>Description</title>
+        <para>
+            Cette fonction renvoie <literal>s</literal>, un vecteur de longueur <literal>n</literal>.
+            Il contient un tirage de <literal>n</literal> échantillons, avec remise, d'éléments
+            de la matrice <literal>X</literal>,  chaque élément étant compté avec une fréquence donnée
+            par sa valeur correspondante dans le vecteur <literal>f</literal>.
+        </para>
+        <para>
+            <literal>s=samplef(n,X,f)</literal> (ou
+            <literal>s=samplef(n,X,f,'*')</literal>) renvoie un vecteur <literal>s</literal>
+            dont les valeurs sont un tirage de <literal>n</literal> valeurs de <literal>X</literal>,
+            chaque valeur étant tirée avec une probabilité proportionelle à sa valeur correspondante dans
+            <literal>f</literal> après normalisation, ce tirage étant fait avec remise.
+            <literal>f</literal> et <literal>X</literal> doivent contenir le même nombre de valeurs.
+        </para>
+        <para>
+            <literal>s=samplef(n,X,f,'r')</literal>           (ou, de manière équivalente,
+            <literal>s=samplef(n,X,f,1)) </literal>   renvoie une matrice de taille
+            <literal>size(X,'r') * n</literal>.  Elle contient un tirage de <literal>n</literal> lignes de
+            <literal>X</literal>, chaque ligne étant tirée avec une probabilité proportionelle
+            à sa valeur correspondante dans <literal>f</literal> après normalisation, ce tirage étant fait
+            avec remise. La taille de <literal>f</literal> doit être identique au nombre de lignes de <literal>X</literal>.
+        </para>
+        <para>
+            <literal>s=samplef(n,X,f,'c')</literal>           (ou, de manière équivalente,
+            <literal>s=samplef(n,X,f,2))</literal>    renvoie une matrice de taille
+            <literal>n * size(X,'c')</literal>.  Elle contient un tirage de <literal>n</literal> colonnes de
+            <literal>X</literal>, chaque colonne étant tirée avec une probabilité proportionelle
+            à sa valeur correspondante dans <literal>f</literal> après normalisation, ce tirage étant fait
+            avec remise. La taille de <literal>f</literal> doit être identique au nombre de colonnes de <literal>X</literal>.
+        </para>
+    </refsection>
+    <refsection>
+        <title>Générateur de nombres aléatoires</title>
+        <para> <literal>samplef</literal> se fonde sur la fonction <link linkend="grand">grand</link> pour générer les tirages aléatoires. Utiliser <literal>grand("setsd", seed)</literal> pour changer la graine aléatoire de <literal>samplef</literal>.</para>
+        <programlisting role="example"><![CDATA[
+            seed = getdate("s");
+            grand("setsd", seed); //positionne la graine à la date du jour
+
+            seed = 0;
+            grand("setsd", seed); //positionne la graine à sa valeur par défaut
+            ]]>
+        </programlisting>
+    </refsection>
+    <refsection>
+        <title>Exemples</title>
+        <programlisting role="example"><![CDATA[
+X = [3 7 9;22 4 2];
+f1 = [10 1 1 1 1 1];
+f2 = [1; 15];
+f3 = [10 1 1];
+s=samplef(20, X, f1)      //la première valeur de la matrice X a une fréquence de 10/15
+s=samplef(20, X, f2, 'r') //la seconde ligne de la matrice X sera choisie avec une fréquence 15/16
+s=samplef(20, X, f3, 'c') //la première colonne sera choisie avec une fréquence 10/12
+ ]]></programlisting>
+    </refsection>
+    <refsection role="see also">
+        <title>Voir aussi</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="sample">sample</link>
+            </member>
+            <member>
+                <link linkend="samwr">samwr</link>
+            </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
+        </simplelist>
+    </refsection>
+</refentry>
diff --git a/scilab/modules/statistics/help/fr_FR/sampling/samwr.xml b/scilab/modules/statistics/help/fr_FR/sampling/samwr.xml
new file mode 100644 (file)
index 0000000..3390cd2
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2000 - INRIA - Carlos Klimann
+ * Copyright (C) 2014 - Scilab Enterprises - Pierre-Aimé Agnel
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="fr" xml:id="samwr">
+    <refnamediv>
+        <refname>samwr</refname>
+        <refpurpose>Tirage sans remise</refpurpose>
+    </refnamediv>
+    <refsynopsisdiv>
+        <title>Séquence d'appel</title>
+        <synopsis>s = samwr(sizam,numsamp,X)</synopsis>
+    </refsynopsisdiv>
+    <refsection>
+        <title>Paramètres</title>
+        <variablelist>
+            <varlistentry>
+                <term>sizam</term>
+                <listitem>
+                    <para>Entier. Nombre d'éléments d'un tirage. Doit être de valeur inférieure ou égale à la taille de <literal>X</literal>.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>numsamp</term>
+                <listitem>
+                    <para>Entier. Nombre de tirages à effectuer.</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>X</term>
+                <listitem>
+                    <para>Matrice. Contient la population.</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>s</term>
+                <listitem>
+                    <para>matrice de taille <literal>sizsam * numsamp</literal>. Elle contient
+                        <literal>numsamp</literal>  tirages aléatoires  (les vecteurs colonne), chacun contenant
+                        <literal>sizam</literal> extractions sans remise d'éléments de <literal>X</literal>.
+                    </para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
+        <title>Description</title>
+        <para>Renvoie des tirages sans remises de valeurs extraites d'une matrice.</para>
+    </refsection>
+    <refsection>
+        <title>Générateur de nombres aléatoires</title>
+        <para> <literal>samwr</literal> se fonde sur la fonction <link linkend="grand">grand</link> pour générer les tirages aléatoires. Utiliser <literal>grand("setsd", seed)</literal> pour changer la graine aléatoire de <literal>samwr</literal>.</para>
+        <programlisting role="example"><![CDATA[
+            seed = getdate("s");
+            grand("setsd", seed); //positionne la graine à la date du jour
+
+            seed = 0;
+            grand("setsd", seed); //positionne la graine à sa valeur par défaut
+            ]]>
+        </programlisting>
+    </refsection>
+    <refsection>
+        <title>Examples</title>
+        <programlisting role="example"><![CDATA[
+a = [0.33 1.24 2.1 1.03]
+s = samwr(4, 12, a)
+ ]]></programlisting>
+    </refsection>
+    <refsection role="see also">
+        <title>See Also</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="sample">sample</link>
+            </member>
+            <member>
+                <link linkend="samplef">samplef</link>
+            </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
+        </simplelist>
+    </refsection>
+</refentry>
+
index 01b4a3f..ab9ac8f 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2000 - INRIA - Carlos Klimann
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
@@ -75,7 +75,7 @@
     </refsection>
     <refsection>
         <title>例</title>
-        <programlisting role="example"><![CDATA[ 
+        <programlisting role="example"><![CDATA[
 X=['a' 'dd' 'arreu'; 'ber' 'car' 'zon']
 s=sample(25,X)
 s=sample(25,X,'r')
index 0e7ab23..6eb5858 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2000 - INRIA - Carlos Klimann
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
@@ -97,7 +97,7 @@
     </refsection>
     <refsection>
         <title>例</title>
-        <programlisting role="example"><![CDATA[ 
+        <programlisting role="example"><![CDATA[
 a=[3 7 9;22 4 2]
 f1=[10 1 1 1 1 1]
 f2=[1 ; 15]
index 3a60418..a911b4a 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2000 - INRIA - Carlos Klimann
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
@@ -44,7 +44,7 @@
                 <term>s</term>
                 <listitem>
                     <para>
-                        sizsam  x numsampの行列. 
+                        sizsam  x numsampの行列.
                         各(列)が列ベクトルXから置換をせずに
                         siznam (size(X,'*'))回の抽出を行った
                         numsamp  組のランダム標本を有します.
@@ -61,7 +61,7 @@
     </refsection>
     <refsection>
         <title>例</title>
-        <programlisting role="example"><![CDATA[ 
+        <programlisting role="example"><![CDATA[
 a=[0.33 1.24 2.1 1.03]
 s=samwr(4,12,a)
  ]]></programlisting>
index e037d70..76b2206 100644 (file)
@@ -8,44 +8,46 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 //
 
-function s=sample(n,X,orient)
+function s = sample(n, X, orient)
     //
     //This function gives a  vector (or matrix) nx1. It contains
     //a random  sample of n extractions,  with replacement, from
     //the matrix X.
     //
-    //s=sample(n,X)  (or s=sample(n,X,'*'))  returns a  vector s
+    //s = sample(n, X)  (or s = sample(n, X, '*'))  returns a  vector s
     //whose  values are  a random  sample  of n  values from  X,
     //extracted with replacement, from X .
     //
-    //s=sample(n,X,'r')   (or,   equivalently,  s=sample(n,X,1))
-    //returns  a matrix  of type  size(X,'r')xn.  It  contains a
+    //s = sample(n, X, 'r')   (or,   equivalently,  s = sample(n, X, 1))
+    //returns  a matrix  of type  size(X, 'r')xn.  It  contains a
     //random sample of n  rows, extracted with replacement, from
     //the rows of X.
     //
-    //s=sample(n,X,'c')   (or,   equivalently,  s=sample(n,X,2))
-    //returns  a matrix  of type  nxsize(X,'c').  It  contains a
+    //s = sample(n, X, 'c')   (or,   equivalently,  s = sample(n, X, 2))
+    //returns  a matrix  of type  nxsize(X, 'c').  It  contains a
     //random  sample of  n columns,  extracted  with replacement
     //from the columns of X.
     //
-    [lhs,rhs]=argn(0)
-    if rhs<2 | rhs>3 then error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"sample",2,3)), end
-    if X==[] then s=[]; return;end
-    if rhs==2 then
-        orient="*"
+    [lhs, rhs] = argn(0)
+    if rhs < 2 | rhs > 3 then error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "sample", 2, 3)), end
+    if X == [] then s = []; return; end
+    if rhs == 2 then
+        orient = "*"
     end
-    if orient=="*" then
-        s=X(grand(n,1,"uin",1,size(X,"*"))),
+    if orient == "*" then
+        s = X(grand(n, 1, "uin", 1, size(X, "*"))),
+        s_size = size(s, '*');
+        s = matrix(s, 1, s_size)
         return
     end
-    if orient=="r"|orient==1 then
-        s=X(grand(1,n,"uin",1,size(X,"r")),:)
+    if orient == "r"|orient == 1 then
+        s = X(grand(1, n, "uin", 1, size(X, "r")), :)
         return
     end
-    if orient=="c"|orient==2 then
-        s=X(:,grand(n,1,"uin",1,size(X,"c"))),
+    if orient == "c"|orient == 2 then
+        s = X(:, grand(n, 1, "uin", 1, size(X, "c"))),
         return
     end
-    error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"),"orient",3,"*","r","c",1,2))
+    error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"), "sample", 3, "*", "r", "c", 1, 2))
 endfunction
 
index 90d3d55..934b426 100644 (file)
@@ -8,66 +8,95 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 //
 
-function s=samplef(n,X,f,orient)
+function s = samplef(n, X, f, orient)
     //
     //This function gives s, a  vector of length n.  It contains
     //a  sample of  n  extractions, with  replacement, from  the
     //vector  (or  matrix)  X,  each element  counted  with  the
     //frequency given by the corresponding value in vector f.
     //
-    //s=samplef(n,X,f)   (or  s=samplef(n,X,f,'*'))   returns  a
+    //s = samplef(n, X, f)   (or  s = samplef(n, X, f, '*'))   returns  a
     //vector s whose values are a random sample of n values from
     //X,   each  value   with  a   probability  to   be  sampled
     //proportional  to the corresponding  value of  f, extracted
     //with replacement, from X.  f must have same length than X.
     //
-    //s=samplef(n,X,f,'r')           (or,          equivalently,
-    //s=samplef(n,X,f,1))    returns    a    matrix   of    type
-    //size(X,'r')xn.  It contains a random sample of n rows from
+    //s = samplef(n, X, f, 'r')           (or,          equivalently,
+    //s = samplef(n, X, f, 1))    returns    a    matrix   of    type
+    //size(X, 'r')xn.  It contains a random sample of n rows from
     //X, each row with  a probability to be sampled proportional
     //to   the  corresponding   value  of   f,   extracted  with
     //replacement, from the  rows of X. The length  of f must be
     //equal to the number of rows of X.
     //
-    //s=samplef(n,X,f,'c')           (or,          equivalently,
-    //s=samplef(n,X,f,2))    returns    a    matrix   of    type
-    //nxsize(X,'c').  It  contains a random sample  of n columns
+    //s = samplef(n, X, f, 'c')           (or,          equivalently,
+    //s = samplef(n, X, f, 2))    returns    a    matrix   of    type
+    //nxsize(X, 'c').  It  contains a random sample  of n columns
     //from  X, each  column  with a  probability  to be  sampled
     //proportional  to the corresponding  value of  f, extracted
     //with replacement, from the columns  of X.  The length of f
     //must be equal to the number of columns of X.
     //
-    [lhs,rhs]=argn(0)
-    if rhs<3 | rhs>4 then error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"samplef",3,4)), end
-    if X==[]| (or(f==0)) then s=[]; return;end
-    sizx=size(X)
-    val=cumsum([0;f(:)])
-    y=grand(n,1,"uin",1,val($))
-    ind=dsearch(y,val,"c")
-    if rhs==3 then
-        orient="*"
+    [lhs, rhs] = argn(0)
+    if rhs < 3 | rhs > 4 then error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "samplef", 3, 4)), end
+    if X == [] then s = []; return; end
+
+    // Frequencies cannot be negative
+    if ~and(f >= 0)
+        error(msprintf(_("%s: Wrong value for input argument #%d: Non-negative values expected.\n"), fname, 3))
+    end
+
+    // Setting default value for 4th argument
+    if rhs == 3 then
+        orient = "*"
     end
-    if orient=="*" then
-        if size(f,"*")<>prod(sizx) then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d and #%d: Same size expected.\n"), "samplef",2,3)),
+
+    sizx = size(X)
+
+    if orient == "*" then
+        if size(f, "*") <> prod(sizx) then
+            error(msprintf(gettext("%s: Wrong size for input argument #%d and #%d: Same size expected.\n"), "samplef", 2, 3)),
         end
-        s=X(ind)
+        //Strip X of 0 frequency values
+        X(find(f==0)) = [];
+        f(find(f==0)) = [];
+        val = cumsum([0; f(:)])
+        y = grand(n, 1, "unf", 0, val($))
+        ind = dsearch(y, val, "c")
+        s = X(ind)
+        s_size = size(s, '*')
+        s = matrix(s, 1, s_size) //consistently returns s in a line vector when called without row or column orientation;
         return
     end
-    if orient=="r"|orient==1 then
-        if size(f,"*")<>sizx(1) then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: Same number of rows of the second input argument expected.\n"), "samplef",3)),
+
+    if orient == "r"|orient == 1 then
+        if size(f, "*") <> sizx(1) then
+            error(msprintf(gettext("%s: Wrong size for input argument #%d: Same number of rows of the second input argument expected.\n"), "samplef", 3)),
         end
-        s=X(ind,:)
+        //Strip X of 0 frequency values
+        X(find(f==0), :) = [];
+        f(find(f==0)) = [];
+        val = cumsum([0; f(:)])
+        y = grand(n, 1, "unf", 0, val($))
+        ind = dsearch(y, val, "c")
+        s = X(ind, :)
         return
     end
-    if orient=="c"|orient==2 then
-        if size(f,"*")<>sizx(2) then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: Same number of columns of the second input argument expected.\n"), "samplef",3)),
+
+    if orient == "c"|orient == 2 then
+        if size(f, "*") <> sizx(2) then
+            error(msprintf(gettext("%s: Wrong size for input argument #%d: Same number of columns of the second input argument expected.\n"), "samplef", 3)),
         end
-        s=X(:,ind)
+        //Strip X of 0 frequency values
+        X(:, find(f==0)) = [];
+        f(find(f==0)) = [];
+        val = cumsum([0; f(:)])
+        y = grand(n, 1, "unf", 0, val($))
+        ind = dsearch(y, val, "c")
+        s = X(:, ind)
         return
     end
-    error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"),"orient",4,"*","r","c",1,2))
+
+    error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"), "orient", 4, "*", "r", "c", 1, 2))
 endfunction
 
index b77e7ef..43984e9 100644 (file)
@@ -8,23 +8,23 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 //
 
-function s=samwr(sizam,numsamp,X)
+function s = samwr(sizam, numsamp, X)
     //
     //This  function gives  a  s matrix  sizsam  x numsamp.   It
     //contains  numsamp  random samples  (the  columns) each  of
-    //sizam  (<size(X,'*'))  extractions,  without  replacement,
+    //sizam  ( < size(X, '*'))  extractions,  without  replacement,
     //from the  vector X.
     //
-    if argn(2)<>3 then
-        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"samwr",3)),
+    if argn(2) <> 3 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"), "samwr", 3)),
     end
-    if X==[]|sizam==0|numsamp==0 then s=[]; return;end
-    sizx=size(X,"*")
-    if sizam>sizx then
-        error(msprintf(gettext("%s: Wrong value of input argument #%d: Less or equal than length of last input argument expected.\n"),"samwr",1)),
+    if X == []|sizam == 0|numsamp == 0 then s = []; return; end
+    sizx = size(X, "*")
+    if sizam > sizx then
+        error(msprintf(gettext("%s: Wrong value of input argument #%d: Lower than or equal to size of input argument #%d expected.\n"), "samwr", 1, 3)),
     end
 
-    perm=grand(numsamp,"prm",(1:sizx)')
-    s=matrix(X(perm),-1,numsamp)
-    s=s(1:sizam,:)
+    perm = grand(numsamp, "prm", (1:sizx)')
+    s = matrix(X(perm), -1, numsamp)
+    s = s(1:sizam, :)
 endfunction
diff --git a/scilab/modules/statistics/tests/unit_tests/sample.dia.ref b/scilab/modules/statistics/tests/unit_tests/sample.dia.ref
new file mode 100644 (file)
index 0000000..b48ea9f
--- /dev/null
@@ -0,0 +1,73 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- unit test for sample.sci-->
+//
+//==============================================================================
+// Checking error messages
+//==============================================================================
+fname = "sample";
+err_msg_glob = msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"), fname, 2, 3);
+err_msg_orient = msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"), fname, 3, "*", "r", "c", 1, 2);
+//========================================
+// Error for the number of input arguments
+n = 100;
+X = 1:10;
+orient = "*";
+func_str = "sample(n)";
+grand("setsd",0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_glob);
+//========================================
+// Error for the value of orient
+n = 100;
+X = 1:10;
+orient = "5";
+func_str = "sample(n, X, orient)";
+grand("setsd",0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_orient);
+//==============================================================================
+// Checking normal behaviour for complete size '*'
+//==============================================================================
+//========================================
+// Check default call
+n = 100;
+X = 1:10;
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples = sample(n, X);
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_star = sample(n, X, "*");
+assert_checkequal(samples, samples_star);
+//========================================
+// Check size consistency
+X = X';
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_transposed = sample(n, X);
+assert_checkequal(samples, samples_transposed);
+//==============================================================================
+// Checking normal behaviour for complete size 'r'
+//==============================================================================
+//========================================
+// Check default call
+n = 100;
+X = [1 2 3; 4 5 6];
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_r_n = sample(n, X, "r");
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_one_n = sample(n, X, 1);
+assert_checkequal(samples_r_n, samples_one_n);
+//==============================================================================
+// Checking normal behaviour for complete size 'c'
+//==============================================================================
+//========================================
+// Check default call
+n = 100;
+X = [1 2 3; 4 5 6];
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_c_n = sample(n, X, "c");
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_two_n = sample(n, X, 2);
+assert_checkequal(samples_c_n, samples_two_n);
diff --git a/scilab/modules/statistics/tests/unit_tests/sample.tst b/scilab/modules/statistics/tests/unit_tests/sample.tst
new file mode 100644 (file)
index 0000000..a943408
--- /dev/null
@@ -0,0 +1,100 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- unit test for sample.sci-->
+//
+
+//==============================================================================
+// Checking error messages
+//==============================================================================
+fname = "sample";
+err_msg_glob = msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"), fname, 2, 3);
+
+err_msg_orient = msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"), fname, 3, "*", "r", "c", 1, 2);
+
+//========================================
+// Error for the number of input arguments
+n = 100;
+X = 1:10;
+orient = "*";
+
+func_str = "sample(n)";
+
+grand("setsd",0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_glob);
+
+//========================================
+// Error for the value of orient
+n = 100;
+X = 1:10;
+orient = "5";
+
+func_str = "sample(n, X, orient)";
+
+grand("setsd",0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_orient);
+
+//==============================================================================
+// Checking normal behaviour for complete size '*'
+//==============================================================================
+
+//========================================
+// Check default call
+n = 100;
+X = 1:10;
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples = sample(n, X);
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_star = sample(n, X, "*");
+
+assert_checkequal(samples, samples_star);
+
+//========================================
+// Check size consistency
+X = X';
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_transposed = sample(n, X);
+
+assert_checkequal(samples, samples_transposed);
+
+//==============================================================================
+// Checking normal behaviour for complete size 'r'
+//==============================================================================
+
+//========================================
+// Check default call
+n = 100;
+X = [1 2 3; 4 5 6];
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_r_n = sample(n, X, "r");
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_one_n = sample(n, X, 1);
+
+assert_checkequal(samples_r_n, samples_one_n);
+
+//==============================================================================
+// Checking normal behaviour for complete size 'c'
+//==============================================================================
+
+//========================================
+// Check default call
+n = 100;
+X = [1 2 3; 4 5 6];
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_c_n = sample(n, X, "c");
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_two_n = sample(n, X, 2);
+
+assert_checkequal(samples_c_n, samples_two_n);
diff --git a/scilab/modules/statistics/tests/unit_tests/samplef.dia.ref b/scilab/modules/statistics/tests/unit_tests/samplef.dia.ref
new file mode 100644 (file)
index 0000000..5086cd3
--- /dev/null
@@ -0,0 +1,161 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- unit test for samplef.sci-->
+//
+//==============================================================================
+// Checking error messages
+//==============================================================================
+fname = "samplef";
+err_msg_negative = msprintf(_("%s: Wrong value for input argument #%d: Non-negative values expected.\n"), fname, 3);
+err_msg_size_glob = msprintf(_("%s: Wrong size for input argument #%d and #%d: Same size expected.\n"), fname, 2, 3);
+err_msg_size_row = msprintf(_("%s: Wrong size for input argument #%d: Same number of rows of the second input argument expected.\n"), fname, 3);
+err_msg_size_col = msprintf(_("%s: Wrong size for input argument #%d: Same number of columns of the second input argument expected.\n"), fname, 3);
+//========================================
+// Error if sum of frequency is negative
+n = 100;
+X = 1:10;
+f = [-10:-1];
+func_str = "samplef(n, X, f)";
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_negative);
+//========================================
+// Error if frequency is not the same size af the
+X = 1:10;
+f = [1:12];
+func_str = "samplef(n, X, f)";
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_size_glob);
+//========================================
+// Error if row mode on and size of f does not match the number of rows
+X = [1 2 3; 4 5 6];
+f = [5 10 15];
+func_str = "samplef(n, X, f, ""r"")";
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_size_row);
+//========================================
+// Error if column mode on and size of f does not match the number of columns
+X = [1 2 3; 4 5 6];
+f = [5 10];
+func_str = "samplef(n, X, f, ""c"")";
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_size_col);
+//==============================================================================
+// Checking Normal behaviours for complete size '*'
+//==============================================================================
+//========================================
+// Tests normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3];
+f = [0.5 0.3 0.2];
+samples = samplef(10, X, f);
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_star = samplef(10, X, f, "*");
+//Check both results are identical
+assert_checkequal(samples, samples_star);
+//========================================
+// Tests non normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = f * 10;
+samples = samplef(10, X, f);
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_star = samplef(10, X, f, "*");
+//Check both results are identical
+assert_checkequal(samples, samples_star);
+//========================================
+// Checks 0 frequency value is not taken
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = ones(1, 10);
+f(4) = 0;
+X = 1:10;
+samples = samplef(10000, X, f, "*");
+assert_checktrue(isempty(find(samples == 4)));
+grand("setsd", 0);
+f = zeros(1,10);
+f(4) = 1;
+samples = samplef(10000, X, f, "*");
+assert_checkalmostequal(samples, 4 .* ones(1,10000));
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = ones(1, 10);
+f(4) = 0;
+X = 1:10;
+X = matrix(X, 2, 5);
+//No crash for X matrix and f correct size
+samples = samplef(100, X, f, "*");
+assert_checktrue(isempty(find(samples == 4)));
+//========================================
+// Checks consistency of size when called without "orient" options
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = [0.1 0.2 0.3; 0.2 0.1 0.1];
+X = ["a", "b", "c"; "d", "e", "f"];
+samples = samplef(100, X, f);
+assert_checkequal(size(samples, 'r'), 1);
+assert_checkequal(size(samples, 'c'), 100);
+//==============================================================================
+// Checking Normal behaviours for row size 'r'
+//==============================================================================
+//========================================
+// Test normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [0.1 0.9];
+samples_r_n = samplef(10, X, f, "r");
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_one_n = samplef(10, X, f, 1);
+//Check both results are identical
+assert_checkequal(samples_r_n, samples_one_n);
+//========================================
+// Test non normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [1000 9000];
+samples_r = samplef(10, X, f, "r");
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_one = samplef(10, X, f, 1);
+//Check both results are identical
+assert_checkequal(samples_r, samples_one);
+//Normalized and non normalized should have the same behaviour
+assert_checkequal(samples_r_n, samples_r);
+//========================================
+// Checks 0 frequency value is not taken
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [1 0];
+samples = samplef(1000, X, f, 1);
+assert_checkalmostequal(samples, repmat([1 2 3], 1000, 1));
+//==============================================================================
+// Checking Normal behaviours for column size 'c'
+//==============================================================================
+//========================================
+// Test normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [0.1 0.7 0.2];
+samples_c_n = samplef(10, X, f, "c");
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_two_n = samplef(10, X, f, 2);
+//Check both results are identical
+assert_checkequal(samples_c_n, samples_two_n);
+//========================================
+// Test non normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [100 700 200];
+samples_c = samplef(10, X, f, "c");
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_two = samplef(10, X, f, 2);
+//Check both results are identical
+assert_checkequal(samples_c, samples_two);
+//Normalized and non normalized should have the same behaviour
+assert_checkequal(samples_c_n, samples_c);
+//========================================
+// Checks 0 frequency value is not taken
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [1 0 1];
+samples = samplef(10000, X, f, "c");
+assert_checktrue(isempty(find(samples == 2 | samples == 5)));
diff --git a/scilab/modules/statistics/tests/unit_tests/samplef.tst b/scilab/modules/statistics/tests/unit_tests/samplef.tst
new file mode 100644 (file)
index 0000000..84f867b
--- /dev/null
@@ -0,0 +1,217 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- unit test for samplef.sci-->
+//
+
+
+//==============================================================================
+// Checking error messages
+//==============================================================================
+fname = "samplef";
+
+err_msg_negative = msprintf(_("%s: Wrong value for input argument #%d: Non-negative values expected.\n"), fname, 3);
+
+err_msg_size_glob = msprintf(_("%s: Wrong size for input argument #%d and #%d: Same size expected.\n"), fname, 2, 3);
+
+err_msg_size_row = msprintf(_("%s: Wrong size for input argument #%d: Same number of rows of the second input argument expected.\n"), fname, 3);
+
+err_msg_size_col = msprintf(_("%s: Wrong size for input argument #%d: Same number of columns of the second input argument expected.\n"), fname, 3);
+
+//========================================
+// Error if sum of frequency is negative
+n = 100;
+X = 1:10;
+f = [-10:-1];
+func_str = "samplef(n, X, f)";
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_negative);
+
+//========================================
+// Error if frequency is not the same size af the
+X = 1:10;
+f = [1:12];
+func_str = "samplef(n, X, f)";
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_size_glob);
+
+//========================================
+// Error if row mode on and size of f does not match the number of rows
+X = [1 2 3; 4 5 6];
+f = [5 10 15];
+func_str = "samplef(n, X, f, ""r"")";
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_size_row);
+
+//========================================
+// Error if column mode on and size of f does not match the number of columns
+X = [1 2 3; 4 5 6];
+f = [5 10];
+func_str = "samplef(n, X, f, ""c"")";
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_size_col);
+
+
+//==============================================================================
+// Checking Normal behaviours for complete size '*'
+//==============================================================================
+
+//========================================
+// Tests normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3];
+f = [0.5 0.3 0.2];
+
+samples = samplef(10, X, f);
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_star = samplef(10, X, f, "*");
+
+//Check both results are identical
+assert_checkequal(samples, samples_star);
+
+//========================================
+// Tests non normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = f * 10;
+
+samples = samplef(10, X, f);
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_star = samplef(10, X, f, "*");
+
+//Check both results are identical
+assert_checkequal(samples, samples_star);
+
+//========================================
+// Checks 0 frequency value is not taken
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = ones(1, 10);
+f(4) = 0;
+X = 1:10;
+
+samples = samplef(10000, X, f, "*");
+assert_checktrue(isempty(find(samples == 4)));
+
+grand("setsd", 0);
+f = zeros(1,10);
+f(4) = 1;
+samples = samplef(10000, X, f, "*");
+assert_checkalmostequal(samples, 4 .* ones(1,10000));
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = ones(1, 10);
+f(4) = 0;
+X = 1:10;
+X = matrix(X, 2, 5);
+
+//No crash for X matrix and f correct size
+samples = samplef(100, X, f, "*");
+assert_checktrue(isempty(find(samples == 4)));
+
+//========================================
+// Checks consistency of size when called without "orient" options
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+f = [0.1 0.2 0.3; 0.2 0.1 0.1];
+X = ["a", "b", "c"; "d", "e", "f"];
+
+samples = samplef(100, X, f);
+assert_checkequal(size(samples, 'r'), 1);
+assert_checkequal(size(samples, 'c'), 100);
+
+//==============================================================================
+// Checking Normal behaviours for row size 'r'
+//==============================================================================
+
+//========================================
+// Test normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [0.1 0.9];
+
+samples_r_n = samplef(10, X, f, "r");
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_one_n = samplef(10, X, f, 1);
+
+//Check both results are identical
+assert_checkequal(samples_r_n, samples_one_n);
+
+//========================================
+// Test non normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [1000 9000];
+
+samples_r = samplef(10, X, f, "r");
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_one = samplef(10, X, f, 1);
+
+//Check both results are identical
+assert_checkequal(samples_r, samples_one);
+
+//Normalized and non normalized should have the same behaviour
+assert_checkequal(samples_r_n, samples_r);
+
+//========================================
+// Checks 0 frequency value is not taken
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [1 0];
+
+samples = samplef(1000, X, f, 1);
+assert_checkalmostequal(samples, repmat([1 2 3], 1000, 1));
+
+//==============================================================================
+// Checking Normal behaviours for column size 'c'
+//==============================================================================
+
+//========================================
+// Test normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [0.1 0.7 0.2];
+
+samples_c_n = samplef(10, X, f, "c");
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_two_n = samplef(10, X, f, 2);
+
+//Check both results are identical
+assert_checkequal(samples_c_n, samples_two_n);
+
+//========================================
+// Test non normalized frequencies
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [100 700 200];
+
+samples_c = samplef(10, X, f, "c");
+
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+samples_two = samplef(10, X, f, 2);
+
+//Check both results are identical
+assert_checkequal(samples_c, samples_two);
+
+//Normalized and non normalized should have the same behaviour
+assert_checkequal(samples_c_n, samples_c);
+
+//========================================
+// Checks 0 frequency value is not taken
+grand("setsd", 0); //Sets the randum number to seed 0 for reproductibility
+X = [1 2 3; 4 5 6];
+f = [1 0 1];
+
+samples = samplef(10000, X, f, "c");
+assert_checktrue(isempty(find(samples == 2 | samples == 5)));
diff --git a/scilab/modules/statistics/tests/unit_tests/samwr.dia.ref b/scilab/modules/statistics/tests/unit_tests/samwr.dia.ref
new file mode 100644 (file)
index 0000000..4f69c95
--- /dev/null
@@ -0,0 +1,44 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- unit test for sample.sci-->
+//
+//==============================================================================
+// checking error messages
+//==============================================================================
+fname = "samwr";
+err_msg_glob = msprintf(_("%s: Wrong number of input argument: %d expected.\n"), fname, 3);
+err_msg_sizam = msprintf(_("%s: Wrong value of input argument #%d: Lower than or equal to size of input argument #%d expected.\n"), fname, 1, 3);
+//========================================
+// error for the number of input arguments
+sizam = 3;
+numsamp = 10;
+X = 1:10;
+func_str = "samwr(sizam)";
+grand("setsd",0); //sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_glob);
+//========================================
+// error if sizam is greater than the size of X
+sizam = 11;
+numsamp = 10;
+X = 1:10;
+func_str = "samwr(sizam, numsamp, X)";
+grand("setsd",0); //sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_sizam);
+//==============================================================================
+// checking normal behaviour
+//==============================================================================
+//========================================
+// Normal call of samwr on a population
+sizam = 3;
+numsamp = 15;
+X = 1:10;
+grand("setsd", 0); //sets the randum number to seed 0 for reproductibility
+samples = samwr(sizam, numsamp, X);
+//Checks the size of the output is sizam * numsamp
+assert_checkequal(size(samples, "r"), 3);
+assert_checkequal(size(samples, "c"), 15);
diff --git a/scilab/modules/statistics/tests/unit_tests/samwr.tst b/scilab/modules/statistics/tests/unit_tests/samwr.tst
new file mode 100644 (file)
index 0000000..1266390
--- /dev/null
@@ -0,0 +1,56 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- unit test for sample.sci-->
+//
+
+//==============================================================================
+// checking error messages
+//==============================================================================
+fname = "samwr";
+err_msg_glob = msprintf(_("%s: Wrong number of input argument: %d expected.\n"), fname, 3);
+err_msg_sizam = msprintf(_("%s: Wrong value of input argument #%d: Lower than or equal to size of input argument #%d expected.\n"), fname, 1, 3);
+
+//========================================
+// error for the number of input arguments
+sizam = 3;
+numsamp = 10;
+X = 1:10;
+
+func_str = "samwr(sizam)";
+
+grand("setsd",0); //sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_glob);
+
+//========================================
+// error if sizam is greater than the size of X
+sizam = 11;
+numsamp = 10;
+X = 1:10;
+
+func_str = "samwr(sizam, numsamp, X)";
+
+grand("setsd",0); //sets the randum number to seed 0 for reproductibility
+assert_checkerror(func_str, err_msg_sizam);
+
+//==============================================================================
+// checking normal behaviour
+//==============================================================================
+
+//========================================
+// Normal call of samwr on a population
+sizam = 3;
+numsamp = 15;
+X = 1:10;
+
+grand("setsd", 0); //sets the randum number to seed 0 for reproductibility
+samples = samwr(sizam, numsamp, X);
+
+//Checks the size of the output is sizam * numsamp
+assert_checkequal(size(samples, "r"), 3);
+assert_checkequal(size(samples, "c"), 15);