@c English version: 2016-12-03
@menu
* Introducción a descriptive::
* Funciones y variables para el tratamiento de datos::
* Funciones y variables de parámetros descriptivos::
* Funciones y variables para gráficos estadísticos::
@end menu

@node Introducción a descriptive, Funciones y variables para el tratamiento de datos, descriptive, descriptive
@section Introducción a descriptive


El paquete @code{descriptive} contiene funciones para realizar 
c@'lculos y gráficos estadísticos descriptivos. 
Junto con el código fuente se distribuyen tres conjuntos de datos: 
@code{pidigits.data}, @code{wind.data} y @code{biomed.data}.

Cualquier manual de estadística se puede utilizar como referencia al paquete @code{descriptive}.

Para comentarios, fallos y sugerencias, por favor contactar con @var{'riotorto AT yahoo DOT com'}.

Aquí un sencillo ejemplo sobre cómo operan las funciones de @code{descriptive}, dependiendo de la naturaleza de sus argumentos, listas o matrices,

@c ===beg===
@c load (descriptive)$
@c /* muestra univariate */   mean ([a, b, c]);
@c matrix ([a, b], [c, d], [e, f]);
@c /* muestra multivariante */ mean (%);
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) /* muestra univariate */   mean ([a, b, c]);
                            c + b + a
(%o2)                       ---------
                                3
@end group
@group
(%i3) matrix ([a, b], [c, d], [e, f]);
                            [ a  b ]
                            [      ]
(%o3)                       [ c  d ]
                            [      ]
                            [ e  f ]
@end group
@group
(%i4) /* muestra multivariante */ mean (%);
                      e + c + a  f + d + b
(%o4)                [---------, ---------]
                          3          3
@end group
@end example

Nótese que en las muestras multivariantes la media se calcula para cada columna.

En caso de varias muestras de diferente tamaño, la función @code{map} de Maxima puede utilizarse para obtener los resultados deseados para cada muestra,

@c ===beg===
@c load (descriptive)$
@c map (mean, [[a, b, c], [d, e]]);
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) map (mean, [[a, b, c], [d, e]]);
                        c + b + a  e + d
(%o2)                  [---------, -----]
                            3        2
@end group
@end example

En este caso, dos muestras de tamaños 3 y 2 han sido almacenadas en una lista.

Muestras univariantes deben guardarse en listas como en

@c ===beg===
@c s1 : [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
@c ===end===
@example
@group
(%i1) s1 : [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
(%o1)           [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
@end group
@end example

y muestras multivariantes en matrices como las del siguiente ejemplo

@c ===beg===
@c s2 : matrix ([13.17, 9.29], [14.71, 16.88], [18.50, 16.88],
@c              [10.58, 6.63], [13.33, 13.25], [13.21,  8.12]);
@c ===end===
@example
(%i1) s2 : matrix ([13.17, 9.29], [14.71, 16.88], [18.50, 16.88],
             [10.58, 6.63], [13.33, 13.25], [13.21,  8.12]);
                        [ 13.17  9.29  ]
                        [              ]
                        [ 14.71  16.88 ]
                        [              ]
                        [ 18.5   16.88 ]
(%o1)                   [              ]
                        [ 10.58  6.63  ]
                        [              ]
                        [ 13.33  13.25 ]
                        [              ]
                        [ 13.21  8.12  ]
@end example

En este caso, el número de columnas es igual al de la dimensión de la variable aleatoria y el número de filas coincide con el tamaño muestral.

Los datos pueden suministrarse manualmente, pero las muestras grandes se suelen almacenar en ficheros de texto. Por ejemplo, el fichero @code{pidigits.data} contiene los 100 primeros dígitos del número @code{%pi}:
@example
      3
      1
      4
      1
      5
      9
      2
      6
      5
      3 ...
@end example

A fin de leer estos dígitos desde Maxima,

@c ===beg===
@c s1 : read_list (file_search ("pidigits.data"))$
@c length (s1);
@c ===end===
@example
(%i1) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i2) length (s1);
(%o2)                          100
@end group
@end example

Por otro lado, el archivo @code{wind.data} contiene los promedios diarios de la velocidad del viento en cinco estaciones meteorológicas en Irlanda (esta muestra es parte de un conjunto de datos correspondientes a 12 estaciones meteorológicas. El fichero original se puede descargar libremente del 'StatLib Data Repository' y se analiza en  Haslett, J., Raftery, A. E. (1989) @var{Space-time Modelling with Long-memory Dependence: Assessing Ireland's Wind Power Resource, with Discussion}. Applied Statistics 38, 1-50). Así se leen los datos:

@c ===beg===
@c s2 : read_matrix (file_search ("wind.data"))$
@c length (s2);
@c s2 [%]; /* last record */
@c ===end===
@example
(%i1) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i2) length (s2);
(%o2)                          100
@end group
@group
(%i3) s2 [%]; /* last record */
(%o3)            [3.58, 6.0, 4.58, 7.62, 11.25]
@end group
@end example

Algunas muestras contienen datos no numéricos. Como ejemplo, el archivo @code{biomed.data} (el cual es parte de otro mayor descargado también del 'StatLib Data Repository') contiene cuatro mediciones sanguíneas tomadas a dos grupos de pacientes, @code{A} y @code{B}, de diferentes edades,

@c ===beg===
@c s3 : read_matrix (file_search ("biomed.data"))$
@c length (s3);
@c s3 [1]; /* first record */
@c ===end===
@example
(%i1) s3 : read_matrix (file_search ("biomed.data"))$
@group
(%i2) length (s3);
(%o2)                          100
@end group
@group
(%i3) s3 [1]; /* first record */
(%o3)            [A, 30, 167.0, 89.0, 25.6, 364]
@end group
@end example

El primer individuo pertenece al grupo @code{A}, tiene 30 años de edad y sus medidas sanguíneas fueron 167.0, 89.0, 25.6 y 364.

Debe tenerse cuidado cuando se trabaje con datos categóricos. En el siguiente ejemplo, se asigna al símbolo @code{a} cierto valor en algún momento previo y luego se toma una muestra con el valor categórico @code{a},

@c ===beg===
@c a : 1$
@c matrix ([a, 3], [b, 5]);
@c ===end===
@example
(%i1) a : 1$
@group
(%i2) matrix ([a, 3], [b, 5]);
                            [ 1  3 ]
(%o2)                       [      ]
                            [ b  5 ]
@end group
@end example


@node Funciones y variables para el tratamiento de datos, Funciones y variables de parámetros descriptivos, Introducción a descriptive, descriptive
@section Funciones y variables para el tratamiento de datos



@deffn {Función} build_sample (@var{list})
@deffnx {Función} build_sample (@var{matrix})
Construye una muestra a partir de una tabla de frecuencias absolutas.
La tabla de entrada puede ser una una matriz o una lista de listas,
todas ellas de igual tamaño. El número de columnas o la longitud de
las listas debe ser mayor que la unidad. El último elemento de cada
fila o lista se interpreta como la frecuencia absoluta.
El resultado se devuelve siempre en formato de matriz.

Ejemplos:

Tabla de frecuencias univariante.

@c ===beg===
@c load (descriptive)$
@c sam1: build_sample([[6,1], [j,2], [2,1]]);
@c mean(sam1);
@c barsplot(sam1) $
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) sam1: build_sample([[6,1], [j,2], [2,1]]);
                       [ 6 ]
                       [   ]
                       [ j ]
(%o2)                  [   ]
                       [ j ]
                       [   ]
                       [ 2 ]
(%i3) mean(sam1);
                      2 j + 8
(%o3)                [-------]
                         4
(%i4) barsplot(sam1) $
@end example

Tabla de frecuencias multivariante.

@c ===beg===
@c load (descriptive)$
@c sam2: build_sample([[6,3,1], [5,6,2], [u,2,1],[6,8,2]]) ;
@c cov(sam2);
@c barsplot(sam2, grouping=stacked) $
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) sam2: build_sample([[6,3,1], [5,6,2], [u,2,1],[6,8,2]]) ;
                           [ 6  3 ]
                           [      ]
                           [ 5  6 ]
                           [      ]
                           [ 5  6 ]
(%o2)                      [      ]
                           [ u  2 ]
                           [      ]
                           [ 6  8 ]
                           [      ]
                           [ 6  8 ]
(%i3) cov(sam2);
       [   2                 2                            ]
       [  u  + 158   (u + 28)     2 u + 174   11 (u + 28) ]
       [  -------- - ---------    --------- - ----------- ]
(%o3)  [     6          36            6           12      ]
       [                                                  ]
       [ 2 u + 174   11 (u + 28)            21            ]
       [ --------- - -----------            --            ]
       [     6           12                 4             ]
(%i4) barsplot(sam2, grouping=stacked) $
@end example
@end deffn



@deffn {Función} continuous_freq (@var{list})
@deffnx {Función} continuous_freq (@var{list}, @var{m})
El argumento de @code{continuous_freq} debe ser una lista de números.
Divide el rango en intervalos y cuenta cuántos valores hay en ellos.
El segundo argumento es opcional y puede ser el número de clases 
deseado, 10 por defecto, o una lista que contenga los límites
de las clases y el número de éstas, o una lista que contenga
únicamente los límites. Si los valores muestrales
son todos iguales, esta función devuelve solamente una clase 
de amplitud 2.

Ejemplos:

El argumento opcional indica el número de clases deseadas. 
La primera lista de la respuesta contiene los límites
de los intervalos y la segunda los totales correspondientes: hay 16
dígitos en el intervalo @code{[0, 1.8]}, 24 en 
@code{(1.8, 3.6]} y así sucesivamente.

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c continuous_freq (s1, 5);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, 5);
(%o3) [[0, 1.8, 3.6, 5.4, 7.2, 9.0], [16, 24, 18, 17, 25]]
@end example

El argumento opcional indica que queremos 7 clases con 
límites -2 y 12:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c continuous_freq (s1, [-2,12,7]);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, [-2,12,7]);
(%o3) [[- 2, 0, 2, 4, 6, 8, 10, 12], [8, 20, 22, 17, 20, 13, 0]]
@end example

El argumento opcional indica que queremos el número por defecto
de clases y límites -2 y 12:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c continuous_freq (s1, [-2,12]);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, [-2,12]);
                3  4  11  18     32  39  46  53
(%o3)  [[- 2, - -, -, --, --, 5, --, --, --, --, 12], 
                5  5  5   5      5   5   5   5
               [0, 8, 20, 12, 18, 9, 8, 25, 0, 0]]
@end example

@end deffn



@deffn {Función} discrete_freq (@var{list})
Calcula las frecuencias absolutas en muestras discretas, tanto numéricas como categóricas. Su único argumento debe ser una lista.

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c discrete_freq (s1);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) discrete_freq (s1);
(%o3) [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
                             [8, 8, 12, 12, 10, 8, 9, 8, 12, 13]]
@end group
@end example


La primera lista son los valores de la muestra y la segunda sus frecuencias absolutas. Las instrucciones @code{? col} y 
@code{? transpose} pueden ayudar a comprender la última entrada.
@end deffn



@deffn {Función} standardize (@var{list})
@deffnx {Función} standardize (@var{matrix})

Resta a cada elemento de la lista la media muestral y luego divide el resultado por
la desviación típica. Si la entrada es una matriz, @code{standardize} 
resta a cada fila la media multivariante y luego divide cada componente por la
desviación típica correspondiente.

@end deffn




@deffn {Función} subsample (@var{data_matrix}, @var{predicate_function})
@deffnx {Función} subsample (@var{data_matrix}, @var{predicate_function}, @var{col_num}, @var{col_num}, ...)
Esta es una variante de la función @code{submatrix} de Maxima.
El primer argumento es una matriz de datos, el segundo es una 
función de predicado y el resto de argumentos opcionales son
los números de las columnas a tomar en consideración.

Estos son los registros multivariantes en los que la velocidad del viento
en la primera estación meteorológica fue menor de 18 nudos. Véase 
cómo en la expresión lambda la @var{i}-ésima componente 
se la referencia como @code{v[i]}.
@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c subsample (s2, lambda([v], v[1] > 18));
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i3) subsample (s2, lambda([v], v[1] > 18));
              [ 19.38  15.37  15.12  23.09  25.25 ]
              [                                   ]
              [ 18.29  18.66  19.08  26.08  27.63 ]
(%o3)         [                                   ]
              [ 20.25  21.46  19.95  27.71  23.38 ]
              [                                   ]
              [ 18.79  18.96  14.46  26.38  21.84 ]
@end group
@end example

En el siguiente ejemplo, se solicitan únicamente la primera, segunda y
quinta componentes de aquellos registros con velocidades del viento mayores
o iguales que 16 nudos en la estación número 1 y menores que 25 nudos
en la estación número 4. La muestra sólo contiene los datos referidos
a las estaciones 1, 2 y 5. En este caso, la función de predicado se
define por medio de una función de Maxima ordinaria.
@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c g(x):= x[1] >= 16 and x[4] < 25$
@c subsample (s2, g, 1, 2, 5);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) g(x):= x[1] >= 16 and x[4] < 25$
@group
(%i4) subsample (s2, g, 1, 2, 5);
                     [ 19.38  15.37  25.25 ]
                     [                     ]
                     [ 17.33  14.67  19.58 ]
(%o4)                [                     ]
                     [ 16.92  13.21  21.21 ]
                     [                     ]
                     [ 17.25  18.46  23.87 ]
@end group
@end example

He aquí un ejemplo con las variables categóricas de @code{biomed.data}.
Se piden los registros correspondientes a aquellos pacientes del grupo @code{B} mayores de 38 anños,
@c ===beg===
@c load (descriptive)$
@c s3 : read_matrix (file_search ("biomed.data"))$
@c h(u):= u[1] = B and u[2] > 38 $
@c subsample (s3, h);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) h(u):= u[1] = B and u[2] > 38 $
(%i4) subsample (s3, h);
                [ B  39  28.0  102.3  17.1  146 ]
                [                               ]
                [ B  39  21.0  92.4   10.3  197 ]
                [                               ]
                [ B  39  23.0  111.5  10.0  133 ]
                [                               ]
                [ B  39  26.0  92.6   12.3  196 ]
(%o4)           [                               ]
                [ B  39  25.0  98.7   10.0  174 ]
                [                               ]
                [ B  39  21.0  93.2   5.9   181 ]
                [                               ]
                [ B  39  18.0  95.0   11.3  66  ]
                [                               ]
                [ B  39  39.0  88.5   7.6   168 ]
@end example

Es probable que el análisis estadístico
requiera únicamente de las medidas sanguíneas.
@c ===beg===
@c load (descriptive)$
@c s3 : read_matrix (file_search ("biomed.data"))$
@c subsample (s3, lambda([v], v[1] = B and v[2] > 38),
@c            3, 4, 5, 6);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) subsample (s3, lambda([v], v[1] = B and v[2] > 38),
           3, 4, 5, 6);
                   [ 28.0  102.3  17.1  146 ]
                   [                        ]
                   [ 21.0  92.4   10.3  197 ]
                   [                        ]
                   [ 23.0  111.5  10.0  133 ]
                   [                        ]
                   [ 26.0  92.6   12.3  196 ]
(%o3)              [                        ]
                   [ 25.0  98.7   10.0  174 ]
                   [                        ]
                   [ 21.0  93.2   5.9   181 ]
                   [                        ]
                   [ 18.0  95.0   11.3  66  ]
                   [                        ]
                   [ 39.0  88.5   7.6   168 ]
@end example

Esta es la media multivariante de @code{s3}.
@c ===beg===
@c load (descriptive)$
@c s3 : read_matrix (file_search ("biomed.data"))$
@c mean (s3);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
@group
(%i3) mean (s3);
       65 B + 35 A  317          6 NA + 8145.0
(%o3) [-----------, ---, 87.178, -------------, 18.123, 
           100      10                100
                                                    3 NA + 19587
                                                    ------------]
                                                        100
@end group
@end example

Aquí la primera componente carece de significado, ya que tanto @code{A} como @code{B} son categóricas, la segunda componente es la edad media de los individuos en forma racional, al tiempo que los valores cuarto y quinto muestran cierto comportamiento extraño; lo cual se debe a que el símbolo @code{NA} se utiliza para indicar datos @i{no disponibles}, por lo que ambas medias no tienen sentido. Una posible solución puede ser extraer de la matriz aquellas filas con símbolos @code{NA}, lo que acarrearía cierta pérdida de información.
@c ===beg===
@c load (descriptive)$
@c s3 : read_matrix (file_search ("biomed.data"))$
@c g(v):= v[4] # NA and v[6] # NA $
@c mean (subsample (s3, g, 3, 4, 5, 6));
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) g(v):= v[4] # NA and v[6] # NA $
@group
(%i4) mean (subsample (s3, g, 3, 4, 5, 6));
(%o4) [79.4923076923077, 86.2032967032967, 16.93186813186813, 
                                                            2514
                                                            ----]
                                                             13
@end group
@end example
@end deffn





@deffn {Función} transform_sample (@var{matriz}, @var{varlist}, @var{exprlist})

Transforma la @var{matriz} de datos, en la que a cada columna se le asigna
un nombre de acuerdo con la lista @var{varlist}, según las expresiones de @var{exprlist}.

Ejemplos:

El segundo argumento asigna nombres a las tres columnas, con ellos la lista de expresiones
define la transformación de la muestra.

@example
(%i1) load (descriptive)$
(%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $
@group
(%i3) transform_sample(data, [a,b,c], [c, a*b, log(a)]);
                               [ 7  6   log(3) ]
                               [               ]
                               [ 2  21  log(3) ]
(%o3)                          [               ]
                               [ 4  16  log(8) ]
                               [               ]
                               [ 4  10  log(5) ]
@end group
@end example

Añade una columna constante y elimina la tercera variable.

@example
(%i1) load (descriptive)$
(%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $
(%i3) transform_sample(data, [a,b,c], [makelist(1,k,length(data)),a,b]);
@group
                                  [ 1  3  2 ]
                                  [         ]
                                  [ 1  3  7 ]
(%o3)                             [         ]
                                  [ 1  8  2 ]
                                  [         ]
                                  [ 1  5  2 ]
@end group
@end example
@end deffn





@node Funciones y variables de parámetros descriptivos, Funciones y variables para gráficos estadísticos, Funciones y variables para el tratamiento de datos, descriptive
@section Funciones y variables de parámetros descriptivos


@deffn {Función} mean (@var{list})
@deffnx {Función} mean (@var{matrix})
Es la media muestral, definida como
@ifnottex
@example
                       n
                     ====
             _   1   \
             x = -    >    x
                 n   /      i
                     ====
                     i = 1
@end example
@end ifnottex
@tex
$${\bar{x}={1\over{n}}{\sum_{i=1}^{n}{x_{i}}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c mean (s1);
@c %, numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c mean (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) mean (s1);
                               471
(%o3)                          ---
                               100
@end group
@group
(%i4) %, numer;
(%o4)                         4.71
@end group
(%i5) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i6) mean (s2);
(%o6)     [9.9485, 10.1607, 10.8685, 15.7166, 14.8441]
@end group
@end example

@end deffn



@deffn {Función} var (@var{list})
@deffnx {Función} var (@var{matrix})
Es la varianza muestral, definida como
@ifnottex
@example
                     n
                   ====
           2   1   \          _ 2
          s  = -    >    (x - x)
               n   /       i
                   ====
                   i = 1
@end example
@end ifnottex
@tex
$${{1}\over{n}}{\sum_{i=1}^{n}{(x_{i}-\bar{x})^2}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c var (s1), numer;
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) var (s1), numer;
(%o3)                   8.425899999999999
@end group
@end example

Véase también @code{var1}.
@end deffn



@deffn {Función} var1 (@var{list})
@deffnx {Función} var1 (@var{matrix})
Es la cuasivarianza muestral, definida como
@ifnottex
@example
                     n
                   ====
               1   \          _ 2
              ---   >    (x - x)
              n-1  /       i
                   ====
                   i = 1
@end example
@end ifnottex
@tex
$${{1\over{n-1}}{\sum_{i=1}^{n}{(x_{i}-\bar{x})^2}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c var1 (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c var1 (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) var1 (s1), numer;
(%o3)                    8.5110101010101
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) var1 (s2);
(%o5) [17.39586540404041, 15.13912778787879, 15.63204924242424, 
                            32.50152569696971, 24.66977392929294]
@end group
@end example

Véase también @code{var}.
@end deffn



@deffn {Función} std (@var{list})
@deffnx {Función} std (@var{matrix})
Es la desviación típica muestral, raíz cuadrada de @code{var}.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c std (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c std (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) std (s1), numer;
(%o3)                   2.902740084816414
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) std (s2);
(%o5) [4.149928523480858, 3.871399812729241, 3.933920277534866, 
                            5.672434260526957, 4.941970881136392]
@end group
@end example

Véanse también @code{var} y @code{std1}.
@end deffn



@deffn {Función} std1 (@var{list})
@deffnx {Función} std1 (@var{matrix})
Es la cuasidesviación típica muestral, raíz cuadrada de @code{var1}.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c std1 (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c std1 (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) std1 (s1), numer;
(%o3)                   2.917363553109228
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) std1 (s2);
(%o5) [4.17083509672109, 3.89090320978032, 3.953738641137555, 
                            5.701010936401517, 4.966867617451963]
@end group
@end example

Véanse también @code{var1} y @code{std}.
@end deffn



@deffn {Función} noncentral_moment (@var{list}, @var{k})
@deffnx {Función} noncentral_moment (@var{matrix}, @var{k})
Es el momento no central de orden @math{k}, definido como
@ifnottex
@example
                       n
                     ====
                 1   \      k
                 -    >    x
                 n   /      i
                     ====
                     i = 1
@end example
@end ifnottex
@tex
$${{1\over{n}}{\sum_{i=1}^{n}{x_{i}^k}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c noncentral_moment (s1, 1), numer; /* the mean */
@c s2 : read_matrix (file_search ("wind.data"))$
@c noncentral_moment (s2, 5);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) noncentral_moment (s1, 1), numer; /* the mean */
(%o3)                         4.71
@end group
@group
(%i5) s2 : read_matrix (file_search ("wind.data"))$
(%o5) [319793.8724761506, 320532.1923892463, 391249.5621381556, 
                            2502278.205988911, 1691881.797742255]
@end group
(%i6) noncentral_moment (s2, 5);
@end example

Véase también @code{central_moment}.
@end deffn



@deffn {Función} central_moment (@var{list}, @var{k})
@deffnx {Función} central_moment (@var{matrix}, @var{k})
Es el momento central de orden @math{k}, definido como
@ifnottex
@example
                    n
                  ====
              1   \          _ k
              -    >    (x - x)
              n   /       i
                  ====
                  i = 1
@end example
@end ifnottex
@tex
$${{1\over{n}}{\sum_{i=1}^{n}{(x_{i}-\bar{x})^k}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c central_moment (s1, 2), numer; /* the variance */
@c s2 : read_matrix (file_search ("wind.data"))$
@c central_moment (s2, 3);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) central_moment (s1, 2), numer; /* the variance */
(%o3)                   8.425899999999999
@end group
@group
(%i5) s2 : read_matrix (file_search ("wind.data"))$
(%o5) [11.29584771375004, 16.97988248298583, 5.626661952750102, 
                             37.5986572057918, 25.85981904394192]
@end group
(%i6) central_moment (s2, 3);
@end example

Véanse también @code{central_moment} y @code{mean}.
@end deffn


@deffn {Función} cv (@var{list})
@deffnx {Función} cv (@var{matrix})
Es el coeficiente de variación, o cociente entre la desviación típica muestral (@code{std}) y la media (@code{mean}),

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c cv (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c cv (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) cv (s1), numer;
(%o3)                   .6193977819764815
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) cv (s2);
(%o5) [.4192426091090204, .3829365309260502, 0.363779605385983, 
                            .3627381836021478, .3346021393989506]
@end group
@end example

Véanse también @code{std} y @code{mean}.
@end deffn



@deffn {Función} smin (@var{list})
@deffnx {Función} smin (@var{matrix})
Es el valor mínimo de la muestra @var{list}.
Cuando el argumento es una matriz, @code{smin} devuelve
una lista con los valores mínimos de las
columnas, las cuales están asociadas a variables
estadísticas.

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c smin (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c smin (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) smin (s1);
(%o3)                           0
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) smin (s2);
(%o5)             [0.58, 0.5, 2.67, 5.25, 5.17]
@end group
@end example

Véase también @code{smax}.
@end deffn



@deffn {Función} smax (@var{list})
@deffnx {Función} smax (@var{matrix})
Es el valor máximo de la muestra @var{list}.
Cuando el argumento es una matriz, @code{smax} devuelve
una lista con los valores máximos de las
columnas, las cuales están asociadas a variables
estadísticas.

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c smax (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c smax (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) smax (s1);
(%o3)                           9
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) smax (s2);
(%o5)          [20.25, 21.46, 20.04, 29.63, 27.63]
@end group
@end example

Véase también @code{smin}.
@end deffn



@deffn {Función} range (@var{list})
@deffnx {Función} range (@var{matrix})
Es la diferencia entre los valores extremos.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c range (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c range (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) range (s1);
(%o3)                           9
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) range (s2);
(%o5)          [19.67, 20.96, 17.37, 24.38, 22.46]
@end group
@end example

@end deffn



@deffn {Función} quantile (@var{list}, @var{p})
@deffnx {Función} quantile (@var{matrix}, @var{p})
Es el @var{p}-cuantil, siendo @var{p} un número del intervalo @math{[0, 1]}, de la muestra @var{list}.
Aunque existen varias definiciones para el cuantil muestral (Hyndman, R. J., Fan, Y. (1996) @var{Sample quantiles in statistical packages}. American Statistician, 50, 361-365), la programada en el paquete  @code{descriptive} es la basada en la interpolación lineal.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c /* 1st and 3rd quartiles */ 
@c          [quantile (s1, 1/4), quantile (s1, 3/4)], numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c quantile (s2, 1/4);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) /* 1st and 3rd quartiles */
         [quantile (s1, 1/4), quantile (s1, 3/4)], numer;
(%o3)                      [2.0, 7.25]
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) quantile (s2, 1/4);
(%o5)    [7.2575, 7.477500000000001, 7.82, 11.28, 11.48]
@end group
@end example

@end deffn



@deffn {Función} median (@var{list})
@deffnx {Función} median (@var{matrix})
Una vez ordenada una muestra, si el tamaño muestral es impar la mediana es el valor central, en caso contrario será la media de los dos valores centrales.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c median (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c median (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) median (s1);
                                9
(%o3)                           -
                                2
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) median (s2);
(%o5)         [10.06, 9.855, 10.73, 15.48, 14.105]
@end group
@end example

La mediana es el cuantil 1/2.

Véase también @code{quantile}.
@end deffn



@deffn {Función} qrange (@var{list})
@deffnx {Función} qrange (@var{matrix})
El rango intercuartílico es la diferencia entre el tercer y primer cuartil,
@code{quantile(@var{list},3/4) - quantile(@var{list},1/4)},

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c qrange (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c qrange (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) qrange (s1);
                               21
(%o3)                          --
                               4
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) qrange (s2);
(%o5) [5.385, 5.572499999999998, 6.0225, 8.729999999999999, 
                                               6.650000000000002]
@end group
@end example

Véase también @code{quantile}.
@end deffn



@deffn {Función} mean_deviation (@var{list})
@deffnx {Función} mean_deviation (@var{matrix})
Es la desviación media, definida como
@ifnottex
@example
                     n
                   ====
               1   \          _
               -    >    |x - x|
               n   /       i
                   ====
                   i = 1
@end example
@end ifnottex
@tex
$${{1\over{n}}{\sum_{i=1}^{n}{|x_{i}-\bar{x}|}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c mean_deviation (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c mean_deviation (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) mean_deviation (s1);
                               51
(%o3)                          --
                               20
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) mean_deviation (s2);
(%o5) [3.287959999999999, 3.075342, 3.23907, 4.715664000000001, 
                                               4.028546000000002]
@end group
@end example

Véase también @code{mean}.
@end deffn



@deffn {Función} median_deviation (@var{list})
@deffnx {Función} median_deviation (@var{matrix})
Es la desviación mediana, definida como
@ifnottex
@example
                 n
               ====
           1   \
           -    >    |x - med|
           n   /       i
               ====
               i = 1
@end example
@end ifnottex
@tex
$${{1\over{n}}{\sum_{i=1}^{n}{|x_{i}-med|}}}$$
@end tex

siendo @code{med} la mediana de @var{list}.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c median_deviation (s1);
@c s2 : read_matrix (file_search ("wind.data"))$
@c median_deviation (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) median_deviation (s1);
                                5
(%o3)                           -
                                2
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) median_deviation (s2);
(%o5)           [2.75, 2.755, 3.08, 4.315, 3.31]
@end group
@end example

Véase también @code{mean}.
@end deffn



@deffn {Función} harmonic_mean (@var{list})
@deffnx {Función} harmonic_mean (@var{matrix})
Es la media armónica, definida como
@ifnottex
@example
                  n
               --------
                n
               ====
               \     1
                >    --
               /     x
               ====   i
               i = 1
@end example
@end ifnottex
@tex
$${{n}\over{\sum_{i=1}^{n}{{{1}\over{x_{i}}}}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
@c harmonic_mean (y), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c harmonic_mean (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
@group
(%i3) harmonic_mean (y), numer;
(%o3)                   3.901858027632205
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) harmonic_mean (s2);
(%o5) [6.948015590052786, 7.391967752360356, 9.055658197151745, 
                            13.44199028193692, 13.01439145898509]
@end group
@end example

Véanse también @code{mean} y @code{geometric_mean}.
@end deffn



@deffn {Función} geometric_mean (@var{list})
@deffnx {Función} geometric_mean (@var{matrix})
Es la media geométrica, definida como
@ifnottex
@example
                 /  n      \ 1/n
                 | /===\   |
                 |  ! !    |
                 |  ! !  x |
                 |  ! !   i|
                 | i = 1   |
                 \         /
@end example
@end ifnottex
@tex
$$\left(\prod_{i=1}^{n}{x_{i}}\right)^{{{1}\over{n}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
@c geometric_mean (y), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c geometric_mean (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
@group
(%i3) geometric_mean (y), numer;
(%o3)                   4.454845412337012
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) geometric_mean (s2);
(%o5) [8.82476274347979, 9.22652604739361, 10.0442675714889, 
                            14.61274126349021, 13.96184163444275]
@end group
@end example

Véanse también @code{mean} y @code{harmonic_mean}.
@end deffn



@deffn {Función} kurtosis (@var{list})
@deffnx {Función} kurtosis (@var{matrix})
Es el coeficiente de curtosis, definido como
@ifnottex
@example
                    n
                  ====
            1     \          _ 4
           ----    >    (x - x)  - 3
              4   /       i
           n s    ====
                  i = 1
@end example
@end ifnottex
@tex
$${{1\over{n s^4}}{\sum_{i=1}^{n}{(x_{i}-\bar{x})^4}}-3}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c kurtosis (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c kurtosis (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) kurtosis (s1), numer;
(%o3)                  - 1.273247946514421
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) kurtosis (s2);
(%o5) [- .2715445622195385, 0.119998784429451, 
   - .4275233490482866, - .6405361979019522, - .4952382132352935]
@end group
@end example

Véanse también @code{mean}, @code{var} y @code{skewness}.
@end deffn



@deffn {Función} skewness (@var{list})
@deffnx {Función} skewness (@var{matrix})
Es el coeficiente de asimetría, definido como
@ifnottex
@example
                    n
                  ====
            1     \          _ 3
           ----    >    (x - x)
              3   /       i
           n s    ====
                  i = 1
@end example
@end ifnottex
@tex
$${{1\over{n s^3}}{\sum_{i=1}^{n}{(x_{i}-\bar{x})^3}}}$$
@end tex


Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c skewness (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c skewness (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) skewness (s1), numer;
(%o3)                  .009196180476450306
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) skewness (s2);
(%o5) [.1580509020000979, .2926379232061854, .09242174416107717, 
                            .2059984348148687, .2142520248890832]
@end group
@end example

Véanse también @code{mean}, @code{var} y @code{kurtosis}.
@end deffn



@deffn {Función} pearson_skewness (@var{list})
@deffnx {Función} pearson_skewness (@var{matrix})
Es el coeficiente de asimetría de Pearson, definido como
@ifnottex
@example
                _
             3 (x - med)
             -----------
                  s
@end example
@end ifnottex
@tex
$${{3\,\left(\bar{x}-med\right)}\over{s}}$$
@end tex

siendo @var{med} la mediana de @var{list}.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c pearson_skewness (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c pearson_skewness (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) pearson_skewness (s1), numer;
(%o3)                   .2159484029093895
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) pearson_skewness (s2);
(%o5) [- .08019976629211892, .2357036272952649, 
         .1050904062491204, .1245042340592368, .4464181795804519]
@end group
@end example

Véanse también @code{mean}, @code{var} y @code{median}.
@end deffn



@deffn {Función} quartile_skewness (@var{list})
@deffnx {Función} quartile_skewness (@var{matrix})
Es el coeficiente de asimetría cuartílico, definido como
@ifnottex
@example
               c    - 2 c    + c
                3/4      1/2    1/4
               --------------------
                   c    - c
                    3/4    1/4
@end example
@end ifnottex
@tex
$${{c_{{{3}\over{4}}}-2\,c_{{{1}\over{2}}}+c_{{{1}\over{4}}}}\over{c
 _{{{3}\over{4}}}-c_{{{1}\over{4}}}}}$$
@end tex

siendo @math{c_p} el @var{p}-cuantil de la muestra @var{list}.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c quartile_skewness (s1), numer;
@c s2 : read_matrix (file_search ("wind.data"))$
@c quartile_skewness (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
@group
(%i3) quartile_skewness (s1), numer;
(%o3)                  .04761904761904762
@end group
(%i4) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i5) quartile_skewness (s2);
(%o5) [- 0.0408542246982353, .1467025572005382, 
       0.0336239103362392, .03780068728522298, 0.210526315789474]
@end group
@end example

Véase también @code{quantile}.
@end deffn



@deffn {Función} km (@var{list}, @var{option} ...)
@deffnx {Función} km (@var{matrix}, @var{option} ...)

Estimador Kaplan-Meier de la función de supervivencia o fiabilidad @math{S(x)=1-F(x)}.

Los datos se pueden introducir como una lista de pares de números o como una
matriz de dos columnas. La primera componente es el tiempo observado y la 
segunda componente es el índice de censura (1 = no censurado, 0 = censurado por
la derecha).

El argumento opcional es el nombre de la variable en la expresión devuelta, la cual
es @var{x} por defecto.

Ejemplos:

Muestra como una lista de pares.

@c ===beg===
@c load (descriptive)$
@c S: km([[2,1], [3,1], [5,0], [8,1]]);
@c load (draw)$
@c draw2d(
@c   line_width = 3, grid = true,
@c   explicit(S, x, -0.1, 10))$
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) S: km([[2,1], [3,1], [5,0], [8,1]]);
                       charfun((3 <= x) and (x < 8))
(%o2) charfun(x < 0) + -----------------------------
                                     2
                3 charfun((2 <= x) and (x < 3))
              + ------------------------------- 
                               4
              + charfun((0 <= x) and (x < 2))
@end group
(%i3) load (draw)$
@group
(%i4) draw2d(
        line_width = 3, grid = true,
        explicit(S, x, -0.1, 10))$
@end group
@end example

Estimación de probabilidades de supervivencia.

@c ===beg===
@c load (descriptive)$
@c S(t):= ''(km([[2,1], [3,1], [5,0], [8,1]], t)) $
@c S(6);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) S(t):= ''(km([[2,1], [3,1], [5,0], [8,1]], t)) $
@group
(%i3) S(6);
                            1
(%o3)                       -
                            2
@end group
@end example

@end deffn



@deffn {Función} cdf_empirical (@var{list}, @var{option} ...)
@deffnx {Función} cdf_empirical (@var{matrix}, @var{option} ...)

Función de distribución empírica @math{F(x)}.

Los datos se pueden introducir como una lista de números o como una matriz
columna.

El argumento opcional es el nombre de la variable en la expresión devuelta, la cual
es @var{x} por defecto.

Ejemplo:

Función de distribución empírica.

@c ===beg===
@c load (descriptive)$
@c F(x):= ''(cdf_empirical([1,3,3,5,7,7,7,8,9]));
@c F(6);
@c load(draw)$
@c draw2d(
@c    line_width = 3,
@c    grid       = true,
@c    explicit(F(z), z, -2, 12)) $
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) F(x):= ''(cdf_empirical([1,3,3,5,7,7,7,8,9]));
(%o2) F(x) := (charfun(x >= 9) + charfun(x >= 8)
               + 3 charfun(x >= 7) + charfun(x >= 5)
               + 2 charfun(x >= 3) + charfun(x >= 1))/9
@end group
@group
(%i3) F(6);
                           4
(%o3)                      -
                           9
@end group
(%i4) load(draw)$
(%i5) draw2d(
        line_width = 3,
        grid       = true,
        explicit(F(z), z, -2, 12)) $
@end example

@end deffn



@deffn {Función} cov (@var{matrix})
Es la matriz de covarianzas de una muestra multivariante, definida como
@ifnottex
@example
              n
             ====
          1  \           _        _
      S = -   >    (X  - X) (X  - X)'
          n  /       j        j
             ====
             j = 1
@end example
@end ifnottex
@tex
$${S={1\over{n}}{\sum_{j=1}^{n}{\left(X_{j}-\bar{X}\right)\,\left(X_{j}-\bar{X}\right)'}}}$$
@end tex

siendo @math{X_j} la @math{j}-ésima fila de la matriz muestral.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c fpprintprec : 7$  /* change precision for pretty output */
@c cov (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) fpprintprec : 7$  /* change precision for pretty output */
      [ 17.22191  13.61811  14.37217  19.39624  15.42162 ]
      [                                                  ]
      [ 13.61811  14.98774  13.30448  15.15834  14.9711  ]
      [                                                  ]
(%o4) [ 14.37217  13.30448  15.47573  17.32544  16.18171 ]
      [                                                  ]
      [ 19.39624  15.15834  17.32544  32.17651  20.44685 ]
      [                                                  ]
      [ 15.42162  14.9711   16.18171  20.44685  24.42308 ]
(%i5) cov (s2);
@end example

Véase también @code{cov1}.
@end deffn



@deffn {Función} cov1 (@var{matrix})
Es la matriz de cuasivarianzas de una muestra multivariante, definida como
@ifnottex
@example
              n
             ====
         1   \           _        _
   S  = ---   >    (X  - X) (X  - X)'
    1   n-1  /       j        j
             ====
             j = 1
@end example
@end ifnottex
@tex
$${{1\over{n-1}}{\sum_{j=1}^{n}{\left(X_{j}-\bar{X}\right)\,\left(X_{j}-\bar{X}\right)'}}}$$
@end tex

siendo @math{X_j} la @math{j}-ésima fila de la matriz muestral.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c fpprintprec : 7$ /* change precision for pretty output */
@c cov1 (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) fpprintprec : 7$ /* change precision for pretty output */
      [ 17.39587  13.75567  14.51734  19.59216  15.5774  ]
      [                                                  ]
      [ 13.75567  15.13913  13.43887  15.31145  15.12232 ]
      [                                                  ]
(%o4) [ 14.51734  13.43887  15.63205  17.50044  16.34516 ]
      [                                                  ]
      [ 19.59216  15.31145  17.50044  32.50153  20.65338 ]
      [                                                  ]
      [ 15.5774   15.12232  16.34516  20.65338  24.66977 ]
(%i5) cov1 (s2);
@end example

Véase también @code{cov}.
@end deffn



@deffn {Función} global_variances (@var{matrix})
@deffnx {Función} global_variances (@var{matrix}, @var{options} ...)
La función @code{global_variances} devuelve una lista de medidas globales de variabilidad:

@itemize @bullet
@item
@var{varianza total}: @code{trace(S_1)},
@item
@var{varianza media}: @code{trace(S_1)/p},
@item
@var{varianza generalizada}: @code{determinant(S_1)},
@item
@var{desviación típica generalizada}: @code{sqrt(determinant(S_1))},
@item
@var{varianza efectiva} @code{determinant(S_1)^(1/p)}, (definida en: Peña, D. (2002) @var{Análisis de datos multivariantes}; McGraw-Hill, Madrid.)
@item
@var{desviación típica efectiva}: @code{determinant(S_1)^(1/(2*p))}.
@end itemize
donde @var{p} es la dimensión de la variable aleatoria multivariante y @math{S_1} la matriz de covarianzas devuelta por la función @code{cov1}.

Opción:

@itemize @bullet
@item
@code{'data}, por defecto @code{'true}, indica si la matriz de entrada contiene los datos muestrales,
en cuyo caso la matriz de covarianzas @code{cov1} debe ser calculada; en caso contrario, se le debe
pasar ésta a la función como matriz simétrica en lugar de los datos.
@end itemize

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c global_variances (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i3) global_variances (s2);
(%o3) [105.338342060606, 21.06766841212119, 12874.34690469686, 
         113.4651792608502, 6.636590811800794, 2.576158149609762]
@end group
@end example

Cálculo de @code{global_variances} a partir de la matriz de covarianzas.

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c s : cov1 (s2)$
@c global_variances (s, data=false);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) s : cov1 (s2)$
@group
(%i4) global_variances (s, data=false);
(%o4) [105.338342060606, 21.06766841212119, 12874.34690469686, 
         113.4651792608502, 6.636590811800794, 2.576158149609762]
@end group
@end example

Véanse también @code{cov} y @code{cov1}.
@end deffn



@deffn {Función} cor (@var{matrix})
@deffnx {Función} cor (@var{matrix}, @var{options} ...)
Es la matriz de correlaciones de la muestra multivariante.

Opción:

@itemize @bullet
@item
@code{'data}, por defecto @code{'true}, indica si la matriz de entrada contiene los datos muestrales,
en cuyo caso la matriz de covarianzas @code{cov1} debe ser calculada; en caso contrario, se le debe
pasar ésta a la función como matriz simétrica en lugar de los datos.
@end itemize

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c fpprintprec:7$
@c s2 : read_matrix (file_search ("wind.data"))$
@c cor (s2);
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) fpprintprec:7$
(%i3) s2 : read_matrix (file_search ("wind.data"))$
(%i4) cor (s2);
      [   1.0     .8476339  .8803515  .8239624  .7519506 ]
      [                                                  ]
      [ .8476339    1.0     .8735834  .6902622  0.782502 ]
      [                                                  ]
(%o4) [ .8803515  .8735834    1.0     .7764065  .8323358 ]
      [                                                  ]
      [ .8239624  .6902622  .7764065    1.0     .7293848 ]
      [                                                  ]
      [ .7519506  0.782502  .8323358  .7293848    1.0    ]
@end example

Cálculo de la matriz de correlaciones a partir de la matriz de covarianzas.

@c ===beg===
@c load (descriptive)$
@c fpprintprec : 7 $
@c s2 : read_matrix (file_search ("wind.data"))$
@c s : cov1 (s2)$
@c cor (s, data=false); /* this is faster */
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) fpprintprec : 7 $
(%i3) s2 : read_matrix (file_search ("wind.data"))$
(%i4) s : cov1 (s2)$
@group
(%i5) cor (s, data=false); /* this is faster */
      [   1.0     .8476339  .8803515  .8239624  .7519506 ]
      [                                                  ]
      [ .8476339    1.0     .8735834  .6902622  0.782502 ]
      [                                                  ]
(%o5) [ .8803515  .8735834    1.0     .7764065  .8323358 ]
      [                                                  ]
      [ .8239624  .6902622  .7764065    1.0     .7293848 ]
      [                                                  ]
      [ .7519506  0.782502  .8323358  .7293848    1.0    ]
@end group
@end example

Véanse también @code{cov} y @code{cov1}.
@end deffn



@deffn {Función} list_correlations (@var{matrix})
@deffnx {Función} list_correlations (@var{matrix}, @var{options} ...)
La función @code{list_correlations} devuelve una lista con medidas de correlación:

@itemize @bullet

@item
@var{matriz de precisión}: es la inversa de la matriz de covarianzas @math{S_1},
@ifnottex
@example
       -1     ij
      S   = (s  )             
       1         i,j = 1,2,...,p
@end example
@end ifnottex
@tex
$${S_{1}^{-1}}={\left(s^{ij}\right)_{i,j=1,2,\ldots, p}}$$
@end tex

@item
@var{multiple correlation vector}:  @math{(R_1^2, R_2^2, ..., R_p^2)}, with 
@ifnottex
@example
       2          1
      R  = 1 - -------
       i        ii
               s   s
                    ii
@end example
@end ifnottex
@tex
$${R_{i}^{2}}={1-{{1}\over{s^{ii}s_{ii}}}}$$
@end tex
es un indicador de la bondad de ajuste del modelo de regresión lineal multivariante de @math{X_i} cuando el resto de variables se utilizan como regresores.

@item
@var{matriz de correlaciones parciales}: en la que el elemento @math{(i, j)} es
@ifnottex
@example
                         ij
                        s
      r        = - ------------
       ij.rest     / ii  jj\ 1/2
                   |s   s  |
                   \       /
@end example
@end ifnottex
@tex
$${r_{ij.rest}}={-{{s^{ij}}\over \sqrt{s^{ii}s^{jj}}}}$$
@end tex
@end itemize

Opción:

@itemize @bullet
@item
@code{'data}, por defecto @code{'true}, indica si la matriz de entrada contiene los datos muestrales,
en cuyo caso la matriz de covarianzas @code{cov1} debe ser calculada; en caso contrario, se le debe
pasar ésta a la función como matriz simétrica en lugar de los datos.
@end itemize

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c z : list_correlations (s2)$
@c fpprintprec : 5$ /* for pretty output */
@c z[1];  /* precision matrix */
@c z[2];  /* multiple correlation vector */
@c z[3];  /* partial correlation matrix */
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) z : list_correlations (s2)$
@group
(%i4) fpprintprec : 5$ /* for pretty output */
      [  .38486   - .13856   - .15626   - .10239    .031179  ]
      [                                                      ]
      [ - .13856   .34107    - .15233    .038447   - .052842 ]
      [                                                      ]
(%o5) [ - .15626  - .15233    .47296    - .024816  - .10054  ]
      [                                                      ]
      [ - .10239   .038447   - .024816   .10937    - .034033 ]
      [                                                      ]
      [ .031179   - .052842  - .10054   - .034033   .14834   ]
(%o6)       [.85063, .80634, .86474, .71867, .72675]
       [  - 1.0     .38244   .36627   .49908   - .13049 ]
       [                                                ]
       [  .38244    - 1.0    .37927  - .19907   .23492  ]
       [                                                ]
(%o7)  [  .36627    .37927   - 1.0    .10911    .37956  ]
       [                                                ]
       [  .49908   - .19907  .10911   - 1.0     .26719  ]
       [                                                ]
       [ - .13049   .23492   .37956   .26719    - 1.0   ]
@end group
@end example

Véanse también @code{cov} y @code{cov1}.
@end deffn



@deffn {Función} principal_components (@var{matrix})
@deffnx {Función} principal_components (@var{matrix}, @var{options} ...)
Calcula las componentes principales de una muestra multivariante. Las componentes
principales se utilizan en el análisis estadístico multivariante
para reducir la dimensionalidad de la muestra.

Opción:

@itemize @bullet
@item
@code{'data}, por defecto @code{'true}, indica si la matriz de entrada contiene los datos muestrales,
en cuyo caso la matriz de covarianzas @code{cov1} debe ser calculada; en caso contrario, se le debe
pasar ésta a la función como matriz simétrica en lugar de los datos.
@end itemize

La salida de la función @code{principal_components} es una lista con los siguientes resultados:

@itemize @bullet
@item
varianzas de las componentes principales,
@item
porcentajes de variación total explicada por cada componente principal,
@item
matriz de rotación.
@end itemize

Ejemplos:

En este ejemplo, la primera componente explica el 83.13 por ciento de la varianza total.

@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) fpprintprec:4 $
(%i4) res: principal_components(s2);
0 errors, 0 warnings
(%o4) [[87.57, 8.753, 5.515, 1.889, 1.613], 
[83.13, 8.31, 5.235, 1.793, 1.531], 
@group
[ .4149  .03379   - .4757  - 0.581   - .5126 ]
[                                            ]
[ 0.369  - .3657  - .4298   .7237    - .1469 ]
[                                            ]
[ .3959  - .2178  - .2181  - .2749    .8201  ]]
[                                            ]
[ .5548   .7744    .1857    .2319    .06498  ]
[                                            ]
[ .4765  - .4669   0.712   - .09605  - .1969 ]
@end group
(%i5) /* porcentajes acumulados  */
    block([ap: copy(res[2])],
      for k:2 thru length(ap) do ap[k]: ap[k]+ap[k-1],
      ap);
(%o5)                 [83.13, 91.44, 96.68, 98.47, 100.0]
(%i6) /* dimension de la muestra */
      p: length(first(res));
(%o6)                                  5
(%i7) /* dibuja porcentajes para seleccionar el numero de 
         componentes principales para el analisis ulterior */
     draw2d(
        fill_density = 0.2,
        apply(bars, makelist([k, res[2][k], 1/2], k, p)),
        points_joined = true,
        point_type    = filled_circle,
        point_size    = 3,
        points(makelist([k, res[2][k]], k, p)),
        xlabel = "Variances",
        ylabel = "Percentages",
        xtics  = setify(makelist([concat("PC",k),k], k, p))) $
@end example

En caso de que la matriz de covarianzas sea conocida, se le puede pasar
a la función, pero debe utilizarse la opción @code{data=false}.

@example
(%i1) load (descriptive)$
(%i2) S: matrix([1,-2,0],[-2,5,0],[0,0,2]);
                                [  1   - 2  0 ]
                                [             ]
(%o2)                           [ - 2   5   0 ]
                                [             ]
                                [  0    0   2 ]
(%i3) fpprintprec:4 $
(%i4) /* el argumento es una matriz de covarianzas */
      res: principal_components(S, data=false);
0 errors, 0 warnings
                                                  [ - .3827  0.0  .9239 ]
                                                  [                     ]
(%o4) [[5.828, 2.0, .1716], [72.86, 25.0, 2.145], [  .9239   0.0  .3827 ]]
                                                  [                     ]
                                                  [   0.0    1.0   0.0  ]
(%i5) /* transformacion para obtener las componentes principales a
         partir de los registros originales */
      matrix([a1,b2,c3],[a2,b2,c2]).last(res);
             [ .9239 b2 - .3827 a1  1.0 c3  .3827 b2 + .9239 a1 ]
(%o5)        [                                                  ]
             [ .9239 b2 - .3827 a2  1.0 c2  .3827 b2 + .9239 a2 ]
@end example

@end deffn





@node Funciones y variables para gráficos estadísticos,  , Funciones y variables de parámetros descriptivos, descriptive
@section Funciones y variables para gráficos estadísticos


@deffn {Función} barsplot (@var{data1}, @var{data2}, @dots{}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} barsplot_description (@dots{})

Dibuja diagramas de barras para variables estadísticas
discretas, tanto para una como para más muestras.

@var{data} puede ser una lista de resultados provenientes de una muestra
o una matriz de @var{m} filas y @var{n} columnas, representando @var{n} 
muestras de tamaño @var{m} cada una.

Las opciones disponibles son:

@itemize @bullet

@var{box_width} (valor por defecto, @code{3/4}): ancho relativo de los rectángulos. Este 
valor debe pertenecer al rango @code{[0,1]}.

@item
@var{grouping} (valor por defecto, @code{clustered}): indica cómo se agrupan las 
diferentes muestras. Son valores válidos: @code{clustered} y @code{stacked}.

@item
@var{groups_gap} (valor por defecto, @code{1}): un número positivo que representa
la separación entre dos grupos consecutivos de barras.

@item
@var{bars_colors} (valor por defecto, @code{[]}): una lista de colores para múltiples 
muestras. Cuando el número de muestras sea mayor que el de colores especificados, 
los colores adicionales necesarios se seleccionan aleatoriamente. Véase @code{color} para más
información.

@item
@var{frequency} (valor por defecto, @code{absolute}): indica la escala de las ordenadas.
Valores admitidos son:  @code{absolute}, @code{relative} y and @code{percent}.

@item
@var{ordering} (valor por defecto, @code{orderlessp}): los valores admitidos para esta 
opción son: @code{orderlessp} y @code{ordergreatp}, indicando cómo se deben ordenar
los resultados muestrales sobre el eje-@var{x}.

@item
@var{sample_keys} (valor por defecto, @code{[]}): es una lista de cadenas de 
texto a usar como leyendas. Cuando la lista tenga una longitud diferente de cero o 
del número de muestras, se devolverá un mensaje de error.

@item
@var{start_at} (valor por defecto, @code{0}): indica a qué altura comienza 
a dibujarse el gráfico de barra sobre el eje de abscisas.

@item
Todas las opciones globales de @code{draw}, excepto @code{xtics}, que se asigna
internamente por @code{barsplot}. Si es necesario que el usuario le dé su propio
valor a esta opción, o quiere construir una escena más compleja,
debe hacer uso de @code{barsplot_description}. Véase el ejemplo más abajo.

@item
Las siguientes opciones locales de @code{draw}: @code{key}, @code{color}, 
@code{fill_color}, @code{fill_density} y @code{line_width}. Véase también
@code{bars}.

@end itemize

La función @code{barsplot_description} crea un objeto gráfico
útil para formar escenas complejas, junto con otros objetos gráficos.
Se dispone también de la función @code{wxbarsplot} para crear
histogramas incorporados en los interfaces wxMaxima y iMaxima.

Ejemplos:

Muestra univariante en formato matricial. Frecuencias absolutas.

@c ===beg===
@c load (descriptive)$
@c m : read_matrix (file_search ("biomed.data"))$
@c barsplot(
@c   col(m,2),
@c   title        = "Ages",
@c   xlabel       = "years",
@c   box_width    = 1/2,
@c   fill_density = 3/4)$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) m : read_matrix (file_search ("biomed.data"))$
@group
(%i3) barsplot(
        col(m,2),
        title        = "Ages",
        xlabel       = "years",
        box_width    = 1/2,
        fill_density = 3/4)$
@end group
@end example

Dos muestras de diferente tamaño, con frecuencias
relativas y colores definidos por el usuario.

@c ===beg===
@c load (descriptive)$
@c l1:makelist(random(10),k,1,50)$
@c l2:makelist(random(10),k,1,100)$
@c barsplot(
@c    l1,l2,
@c    box_width = 1,
@c    fill_density = 1,
@c    bars_colors = [black, grey],
@c    frequency = relative,
@c    sample_keys = ["A", "B"])$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) l1:makelist(random(10),k,1,50)$
(%i3) l2:makelist(random(10),k,1,100)$
@group
(%i4) barsplot(
        l1,l2,
        box_width    = 1,
        fill_density = 1,
        bars_colors  = [black, grey],
        frequency = relative,
        sample_keys = ["A", "B"])$
@end group
@end example

Cuatro muestras no numéricas de igual tamaño.

@c ===beg===
@c load (descriptive)$
@c barsplot(
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   title      = "Asking for something to four groups",
@c   ylabel     = "# of individuals",
@c   groups_gap = 3,
@c   fill_density = 0.5,
@c   ordering = ordergreatp)$
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) barsplot(
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        title  = "Asking for something to four groups",
        ylabel = "# of individuals",
        groups_gap   = 3,
        fill_density = 0.5,
        ordering     = ordergreatp)$
@end group
@end example

Barras apiladas verticalmente.

@c ===beg===
@c load (descriptive)$
@c barsplot(
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   makelist([Yes, No, Maybe][random(3)+1],k,1,50),
@c   title      = "Asking for something to four groups",
@c   ylabel     = "# of individuals",
@c   grouping   = stacked,
@c   fill_density = 0.5,
@c   ordering = ordergreatp)$
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) barsplot(
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        title  = "Asking for something to four groups",
        ylabel = "# of individuals",
        grouping     = stacked,
        fill_density = 0.5,
        ordering     = ordergreatp)$
@end group
@end example

@code{barsplot} en un contexto multiplot.

@example
(%i1) load (descriptive)$
(%i2) l1:makelist(random(10),k,1,50)$
(%i3) l2:makelist(random(10),k,1,100)$
(%i4) bp1 : 
        barsplot_description(
         l1,
         box_width = 1,
         fill_density = 0.5,
         bars_colors = [blue],
         frequency = relative)$
(%i5) bp2 : 
        barsplot_description(
         l2,
         box_width = 1,
         fill_density = 0.5,
         bars_colors = [red],
         frequency = relative)$
(%i6) draw(gr2d(bp1), gr2d(bp2))$
@end example

Para las opciones relacionadas con los diagramas de barras, véase @code{bars}
del paquete @code{draw}.

Véanse también las funciones @code{histogram} y @code{piechart}.
@end deffn



@deffn {Función} boxplot (@var{data})
@deffnx {Función} boxplot (@var{data}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} boxplot_description (@dots{})

Dibuja diagramas de cajas (box-and-whishker). El argumento @var{data} puede
ser una lista, lo cual no es de gran interés, puesto que estos gráficos 
se utilizan principalmente para comparar distintas muestras, o una matriz,
de manera que sea posible comparar dos o más componentes de una muestra
multivariante. También se permite que @var{data} sea una lista de muestras
con posibles tamaños diferentes; de hecho, esta es la única función
del paquete @code{descriptive} que admite esta estructura de datos.

La caja se dibuja desde el primer cuartil hasta el tercero, con un segmento
horizontal situado a la altura del segundo cuartil o mediana. Por defecto,
los bigotes inferior y superior se sitúan a la altura de los valores mínimo
y máximo, respectivamente. La opción @var{range} se puede utilizar para indicar
que los valores mayores que
@code{quantile(x,3/4)+range*(quantile(x,3/4)-quantile(x,1/4))},
o menores que
@code{quantile(x,1/4)-range*(quantile(x,3/4)-quantile(x,1/4))},
deben considerarse atípicos, en cuyo caso se dibujan como puntos aislados, al
tiempo que los bigotes se colocan en los extremos del resto de la muestra.

Opciones disponibles:

@itemize @bullet

@item
@var{box_width} (valor por defecto, @code{3/4}): ancho relativo de las cajas.
This  value must be in the range @code{[0,1]}.

@item
@var{box_orientation} (valor por defecto, @code{vertical}): valores posibles: @code{vertical}
y @code{horizontal}.

@item
@var{range} (valor por defecto, @code{inf}): coeficiente positivo del rango intercuartílico para
declarar los límites de los datos atípicos.

@item
@var{outliers_size} (valor por defecto, @code{1}): tamaño de los círculos para los datos atípicos.

@item
Todas las opciones globales de @code{draw}, excepto @code{points_joined}, 
@code{point_size}, @code{point_type}, @code{xtics}, @code{ytics}, @code{xrange}
y @code{yrange}, que se asignan internamente por @code{boxplot}. Si es necesario 
que el usuario le dé sus propios valores a estas opciones, o quiere construir 
una escena más compleja, debe hacer uso de @code{boxplot_description}.

@item
Las siguientes opciones locales de @code{draw}: @code{key}, @code{color}, 
y @code{line_width}.

@end itemize

La función @code{boxplot_description} crea un objeto gráfico
útil para formar escenas complejas, junto con otros objetos gráficos.
Se dispone también de la función @code{wxboxplot} para crear
histogramas incorporados en los interfaces wxMaxima y iMaxima.

Ejemplos:

Diagrama de cajas de una muestra multivariante.

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix(file_search("wind.data"))$
@c boxplot(s2,
@c   box_width  = 0.2,
@c   title      = "Windspeed in knots",
@c   xlabel     = "Stations",
@c   color      = red,
@c   line_width = 2)$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix(file_search("wind.data"))$
@group
(%i3) boxplot(s2,
        box_width  = 0.2,
        title      = "Windspeed in knots",
        xlabel     = "Stations",
        color      = red,
        line_width = 2)$
@end group
@end example

Diagrama de cajas de tres muestras de tamaños diferentes.

@c ===beg===
@c load (descriptive)$
@c A :
@c  [[6, 4, 6, 2, 4, 8, 6, 4, 6, 4, 3, 2],
@c   [8, 10, 7, 9, 12, 8, 10],
@c   [16, 13, 17, 12, 11, 18, 13, 18, 14, 12]]$
@c boxplot (A, box_orientation = horizontal)$
@c ===end===
@example
(%i1) load (descriptive)$
@group
(%i2) A :
       [[6, 4, 6, 2, 4, 8, 6, 4, 6, 4, 3, 2],
        [8, 10, 7, 9, 12, 8, 10],
        [16, 13, 17, 12, 11, 18, 13, 18, 14, 12]]$
@end group
(%i3) boxplot (A, box_orientation = horizontal)$
@end example

La opción @var{range} puede utilizarse para tratar con datos atípicos.

@c ===beg===
@c  load (descriptive)$
@c  B: [[7, 15, 5, 8, 6, 5, 7, 3, 1],
@c      [10, 8, 12, 8, 11, 9, 20],
@c      [23, 17, 19, 7, 22, 19]] $
@c  boxplot (B, range=1)$
@c  boxplot (B, range=1.5, box_orientation = horizontal)$
@c  draw2d(
@c     boxplot_description(
@c        B,
@c        range            = 1.5,
@c        line_width       = 3,
@c        outliers_size    = 2,
@c        color            = red,
@c        background_color = light_gray),
@c     xtics = {["Low",1],["Medium",2],["High",3]}) $
@c ===end===

@example
(%i1) load (descriptive)$
(%i2) B: [[7, 15, 5, 8, 6, 5, 7, 3, 1],
          [10, 8, 12, 8, 11, 9, 20],
          [23, 17, 19, 7, 22, 19]] $
@group
(%i3) boxplot (B, range=1)$
(%i4) boxplot (B, range=1.5, box_orientation = horizontal)$
@end group
@group
(%i5) draw2d(
        boxplot_description(
          B,
          range            = 1.5,
          line_width       = 3,
          outliers_size    = 2,
          color            = red,
          background_color = light_gray),
        xtics = @{["Low",1],["Medium",2],["High",3]@}) $
@end group
@end example

@end deffn



@deffn {Función} histogram (@var{list})
@deffnx {Función} histogram (@var{list}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} histogram (@var{one_column_matrix})
@deffnx {Función} histogram (@var{one_column_matrix}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} histogram (@var{one_row_matrix})
@deffnx {Función} histogram (@var{one_row_matrix}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} histogram_description (@dots{})

Dibuja un histograma a partir de una muestra continua. Los datos
muestrales deben darse en forma de lista de números o como una
matriz unidimensional.

Opciones dispponibles:

@itemize @bullet

@item
@var{nclasses} (valor por defecto, @code{10}): número de clases del histograma, o
una lista indicando los límites de las clases y su número,
o solamente los límites.

@item
@var{frequency} (valor por defecto, @code{absolute}): indica la escala de las ordenadas.
Valores admitidos son:  @code{absolute}, @code{relative}, @code{percent} y @code{density}.
Con @code{density}, el histograma adquiere un área total igual a uno.

@item
@var{htics} (valor por defecto, @code{auto}): formato para las marcas sobre el
eje de las abscisas. Valores admitidos son: @code{auto}, @code{endpoints}, 
@code{intervals} o una lista de etiquetas. 

@item
Todas las opciones globales de @code{draw}, excepto @code{xrange}, @code{yrange}
y @code{xtics}, que son asignadas internamente por @code{histogram}.
Si es necesario que el usuario le dé sus propios valores a estas opciones,
debe hacer uso de @code{histogram_description}. Véase el ejemplo más abajo.

@item
Las siguientes opciones locales de @code{draw}: @code{key}, @code{color}, 
@code{fill_color}, @code{fill_density} y @code{line_width}. Véase también
@code{bars}.

@end itemize

La función @code{histogram_description} crea un objeto gráfico
útil para formar escenas complejas, junto con otros objetos gráficos.
Se dispone también de la función @code{wxhistogram} para crear
histogramas incorporados en los interfaces wxMaxima y iMaxima.

Ejemplos:

Un histograma con seis clases:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c histogram (
@c      s1,
@c      nclasses     = 8,
@c      title        = "pi digits",
@c      xlabel       = "digits",
@c      ylabel       = "Absolute frequency",
@c      fill_color   = grey,
@c      fill_density = 0.6)$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (
           s1,
           nclasses     = 8,
           title        = "pi digits",
           xlabel       = "digits",
           ylabel       = "Absolute frequency",
           fill_color   = grey,
           fill_density = 0.6)$
@end example

Ajustando los límites del histograma a -2 y 12,
con 3 clases. También se establece un formato predefinido a
las marcas del eje de abscisas:

@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (
           s1,
           nclasses     = [-2,12,3],
           htics        = ["A", "B", "C"],
           terminal     = png,
           fill_color   = "#23afa0",
           fill_density = 0.6)$
@end example

Se hace uso de @code{histogram_description} para ajustar
la opción @code{xrange} y añadir una curva
explícita a la escena:

@example
(%i1) load (descriptive)$
(%i2) ( load("distrib"),
        m: 14, s: 2,
        s2: random_normal(m, s, 1000) ) $
(%i3) draw2d(
        grid   = true,
        xrange = [5, 25],
        histogram_description(
          s2,
          nclasses     = 9,
          frequency    = density,
          fill_density = 0.5),
        explicit(pdf_normal(x,m,s), x, m - 3*s, m + 3* s))$
@end example

@end deffn




@deffn {Función} piechart (@var{list})
@deffnx {Función} piechart (@var{list}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} piechart (@var{one_column_matrix})
@deffnx {Función} piechart (@var{one_column_matrix}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} piechart (@var{one_row_matrix})
@deffnx {Función} piechart (@var{one_row_matrix}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} piechart_description (@dots{})

Similar a @code{barsplot}, pero dibuja sectores en lugar de rectángulos.

Opciones disponibles:


@itemize @bullet

@item
@var{sector_colors} (valor por defecto, @code{[]}): una lista de colores para los
sectores. Cuando el número de sectores sea mayor que el de colores especificados, 
los colores adicionales necesarios se seleccionan aleatoriamente. Véase @code{color} para más
información.

@item
@var{pie_center} (valor por defecto, @code{[0,0]}): centro del diagrama

@item
@var{pie_radius} (valor por defecto, @code{1}): radio del diagrama.

@item
Todas las opciones globales de @code{draw}, excepto @code{key}, que se asigna
internamente por @code{piechart}. Si es necesario que el usuario le dé su propio
valor a esta opción, o quiere construir una escena más compleja,
debe hacer uso de @code{piechart_description}.

@item
Las siguientes opciones locales de @code{draw}: @code{key}, @code{color}, 
@code{fill_density} y @code{line_width}. Véase también
@code{bars}.

@end itemize

La función @code{piechart_description} crea un objeto gráfico
útil para formar escenas complejas, junto con otros objetos gráficos.
Se dispone también de la función @code{wxpiechart} para crear
histogramas incorporados en los interfaces wxMaxima y iMaxima.

Ejemplo:

@c ===beg===
@c load (descriptive)$
@c s1 : read_list (file_search ("pidigits.data"))$
@c piechart(
@c   s1,
@c   xrange = [-1.1, 1.3],
@c   yrange = [-1.1, 1.1],
@c   title  = "Digit frequencies in pi")$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) piechart(
        s1,
        xrange  = [-1.1, 1.3],
        yrange  = [-1.1, 1.1],
        title   = "Digit frequencies in pi")$
@end example

Véase también la función @code{barsplot}.
@end deffn



@deffn {Función} scatterplot (@var{list})
@deffnx {Función} scatterplot (@var{list}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} scatterplot (@var{matrix})
@deffnx {Función} scatterplot (@var{matrix}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} scatterplot_description (@dots{})

Dibuja diagramas de dispersión, tanto de muestras univariantes (@var{list})
como multivariantes (@var{matrix}). 

Las opciones disponibles son las mismas que admite @code{histogram}.

La función @code{scatterplot_description} crea un objeto gráfico
útil para formar escenas complejas, junto con otros objetos gráficos.
Se dispone también de la función @code{wxscatterplot} para crear
histogramas incorporados en los interfaces wxMaxima y iMaxima.

Ejemplos:

Diagrama de dispersión univariante a partir de una muestra normal
simulada. 

@c ===beg===
@c load (descriptive)$
@c load (distrib)$
@c scatterplot(
@c   random_normal(0,1,200),
@c   xaxis      = true,
@c   point_size = 2,
@c   dimensions = [600,150])$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) load (distrib)$
@group
(%i3) scatterplot(
        random_normal(0,1,200),
        xaxis      = true,
        point_size = 2,
        dimensions = [600,150])$
@end group
@end example

Diagrama de dispersión bidimensional.

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c scatterplot(
@c  submatrix(s2, 1,2,3),
@c  title      = "Data from stations #4 and #5",
@c  point_type = diamant,
@c  point_size = 2,
@c  color      = blue)$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i3) scatterplot(
       submatrix(s2, 1,2,3),
       title      = "Data from stations #4 and #5",
       point_type = diamant,
       point_size = 2,
       color      = blue)$
@end group
@end example

Diagrama de dispersión tridimensional.

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c scatterplot(submatrix (s2, 1,2), nclasses=4)$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(submatrix (s2, 1,2), nclasses=4)$
@end example

Diagrama de dispersión de cinco dimensiones, con histogramas de
cinco classes.

@c ===beg===
@c load (descriptive)$
@c s2 : read_matrix (file_search ("wind.data"))$
@c scatterplot(
@c   s2,
@c   nclasses     = 5,
@c   frequency    = relative,
@c   fill_color   = blue,
@c   fill_density = 0.3,
@c   xtics        = 5)$
@c ===end===
@example
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
@group
(%i3) scatterplot(
        s2,
        nclasses     = 5,
        frequency    = relative,
        fill_color   = blue,
        fill_density = 0.3,
        xtics        = 5)$
@end group
@end example

Para dibujar puntos aislados o unidos por segmentos, tanto en dos
como en tres dimensiones, véase @code{points}.
Véase también @code{histogram}.
@end deffn



@deffn {Función} starplot (@var{data1}, @var{data2}, @dots{}, @var{option_1}, @var{option_2}, @dots{})
@deffnx {Función} starplot_description (@dots{})

Dibuja diagramas de estrellas para variables estadísticas
discretas, tanto para una como para más muestras.

@var{data} puede ser una lista de resultados provenientes de una muestra
o una matriz de @var{m} filas y @var{n} columnas, representando @var{n} 
muestras de tamaño @var{m} cada una.

Las opciones disponibles son:

@itemize @bullet

@item
@var{stars_colors} (valor por defecto, @code{[]}): una lista de colores para muestras
múltiples. Cuando haya más muestras que colores especificados, los colores que faltan
se eligen aleatoriamente. Véase @code{color} para más información.

@item
@var{frequency} (valor por defecto, @code{absolute}): indica la escala de los radios.
Valores admitidos son:  @code{absolute} y @code{relative}.

@item
@var{ordering} (valor por defecto, @code{orderlessp}): los valores admitidos para esta 
opción son: @code{orderlessp} y @code{ordergreatp}, indicando cómo se deben ordenar
los resultados muestrales sobre el eje-@var{x}.


@item
@var{sample_keys} (valor por defecto, @code{[]}): es una lista de cadenas de 
texto a usar como leyendas. Cuando la lista tenga una longitud diferente de cero o 
del número de muestras, se devolverá un mensaje de error.

@item
@var{star_center} (valor por defecto, @code{[0,0]}): centro del diagrama.

@item
@var{star_radius} (valor por defecto, @code{1}): radio del diagrama.

@item
Todas las opciones globales de @code{draw}, excepto @code{points_joined}, @code{point_type}, 
and @code{key}, que se asignan internamente por @code{starplot}. Si es necesario que el 
usuario les dé sus propios valores a estas opciones, o quiere construir una escena más compleja,
debe hacer uso de @code{starplot_description}.

@item
La siguiente opción local de @code{draw}: @code{line_width}.

@end itemize

La función @code{starplot_description} crea un objeto gráfico
útil para formar escenas complejas, junto con otros objetos gráficos.
Se dispone también de la función @code{wxstarplot} para crear
histogramas incorporados en los interfaces wxMaxima y iMaxima.

Ejemplo:

Gráfico basado en frecuencias absolutas. La localización y
el radios lo define el usuario.

@example
(%i1) load (descriptive)$
(%i2) l1: makelist(random(10),k,1,50)$
(%i3) l2: makelist(random(10),k,1,200)$
@group
(%i4) starplot(
        l1, l2,
        stars_colors = [blue,red],
        sample_keys = ["1st sample", "2nd sample"],
        star_center = [1,2],
        star_radius = 4,
        proportional_axes = xy,
        line_width = 2 ) $ 
@end group
@end example

@end deffn



@deffn {Función} stemplot (@var{m})
@deffnx {Función} stemplot (@var{m}, @var{option})

Dibuja diagrama de tallos y hojas.

La única opción disponible es:

@itemize @bullet

@item
@var{leaf_unit} (valor por defecto, @code{1}): indica la unidad de las hojas; debe ser
una potencia de 10.

@end itemize

Ejemplo:

@example
(%i1) load (descriptive)$
(%i2) load(distrib)$
@group
(%i3) stemplot(
        random_normal(15, 6, 100),
        leaf_unit = 0.1);
-5|4
 0|37
 1|7
 3|6
 4|4
 5|4
 6|57
 7|0149
 8|3
 9|1334588
10|07888
11|01144467789
12|12566889
13|24778
14|047
15|223458
16|4
17|11557
18|000247
19|4467799
20|00
21|1
22|2335
23|01457
24|12356
25|455
27|79
key: 6|3 =  6.3
(%o3)                  done
@end group
@end example

@end deffn


