@c English version: 2012-08-06
@menu
* Introducción a stats::
* Funciones y variables para inference_result::
* Funciones y variables para stats::
* Funciones y variables para distribuciones especiales::
@end menu

@node Introducción a stats, Funciones y variables para inference_result, Top, Top
@section Introducción a stats


El paquete @code{stats} contiene procedimientos clásicos sobre inferencia
estadística y contraste de hipótesis.

Todas estas funciones devuelven un objeto Maxima de tipo @code{inference_result},
el cual contiene los resultados necesarios para hacer inferencias sobre la 
población y toma de decisiones.

La variable global @code{stats_numer} controla si los resultados deben darse
en formato decimal o simbólico y racional; su valor por defecto es @code{true},
por lo que el formato de salida es decimal.

El paquete @code{descriptive} contiene algunas utilidades para manipular 
estructuras de datos (listas y matrices); por ejemplo para extraer submuestras.
También contiene algunos ejemplos sobre cómo utilizar el paquete
@code{numericalio} para leer datos de ficheros en texto plano. Véanse
@code{descriptive} y @code{numericalio} para más detalles.

El paquete @code{stats} carga en memoria los paquetes @code{descriptive},
@code{distrib} y @code{inference_result}.

Para comentarios, errores o sugerencias, contáctese con el autor en

@var{'mario ARROBA edu PUNTO xunta PUNTO es'}.


@node Funciones y variables para inference_result, Funciones y variables para stats, Introducción a stats, Top
@section Funciones y variables para inference_result


@deffn {Función} inference_result (@var{title}, @var{values}, @var{numbers})

Construye un objeto @code{inference_result} del tipo devuelto por las funciones
estadísticas. El argumento @var{title} es una cadena con
el nombre del procedimiento; @var{values} es una lista con elementos de la
forma @code{symbol = value} y @var{numbers} es una lista con enteros positivos
desde uno hasta @code{length(@var{values})}, que indican qué valores serán
mostrados por defecto.

Ejemplo:

Este es un ejemplo que muestra los resultados asociados a un rectángulo. El
título de este objeto es la cadena @code{"Rectangle"}, el cual
almacena cinco resultados, a saber, @code{'base}, @code{'height}, 
@code{'diagonal}, @code{'area} y @code{'perimeter}, pero sólo muestra
el primero, segundo, quinto y cuarto. El resultado @code{'diagonal} también
se almacena en este objeto, pero no se muestra por defecto; para tener acceso
a este valor, hágase uso de la función @code{take_inference}.

@c ===beg===
@c load (inference_result)$
@c b: 3$ h: 2$
@c inference_result("Rectangle",
@c                  ['base=b,
@c                   'height=h,
@c                   'diagonal=sqrt(b^2+h^2),
@c                   'area=b*h,
@c                   'perimeter=2*(b+h)],
@c                  [1,2,5,4] );
@c take_inference('diagonal,%);
@c ===end===
@example
(%i1) load(inference_result)$
(%i2) b: 3$ h: 2$
(%i3) inference_result("Rectangle",
                        ['base=b,
                         'height=h,
                         'diagonal=sqrt(b^2+h^2),
                         'area=b*h,
                         'perimeter=2*(b+h)],
                        [1,2,5,4] );
                        |   Rectangle
                        |
                        |    base = 3
                        |
(%o3)                   |   height = 2
                        |
                        | perimeter = 10
                        |
                        |    area = 6
(%i4) take_inference('diagonal,%);
(%o4)                        sqrt(13)
@end example

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






@deffn {Función} inferencep (@var{obj})

Devuelve @code{true} o @code{false}, dependiendo de que @var{obj} sea un
objeto de tipo @code{inference_result} o no.

@end deffn






@deffn {Función} items_inference (@var{obj})

Devuelve una lista con los nombres de los elementos almacenados en
@var{obj}, el cual debe ser un objeto de tipo @code{inference_result}.

Ejemplo:

El objeto @code{inference_result} almacena dos valores, cuyos nombres son @code{'pi} y @code{'e},
pero sólo se muestra el segundo. La función @code{items_inference} devuelve los nombres de 
todos los elementos almacenados, independientemente de que sean mostrados o no.

@c ===beg===
@c load (inference_result)$
@c inference_result("Hi", ['pi=%pi,'e=%e],[2]);
@c items_inference(%);
@c ===end===
@example
(%i1) load(inference_result)$
(%i2) inference_result("Hi", ['pi=%pi,'e=%e],[2]);
                            |   Hi
(%o2)                       |
                            | e = %e
(%i3) items_inference(%);
(%o3)                        [pi, e]
@end example
@end deffn







@deffn {Función} take_inference (@var{n}, @var{obj})
@deffnx {Función} take_inference (@var{name}, @var{obj})
@deffnx {Función} take_inference (@var{list}, @var{obj})

Si @var{n} es un entero positivo, devuelve el @var{n}-ésimo
valor almacenado en @var{obj}; si el símbolo @var{name}
es el nombre de uno de los elementos almacenados, también
devuelve su valor. Si el primer elemento es una lista de números y/o 
símbolos, la función @code{take_inference}
devuelve una lista con los resultados correspondientes.

Ejemplo:

Dado un objeto @code{inference_result}, la función @code{take_inference}
es invocada para extraer cierta información almacenada en él.

@c ===beg===
@c load (inference_result)$
@c b: 3$ h: 2$
@c sol:inference_result("Rectangle",
@c                      ['base=b,
@c                       'height=h,
@c                       'diagonal=sqrt(b^2+h^2),
@c                       'area=b*h,
@c                       'perimeter=2*(b+h)],
@c                      [1,2,5,4] );
@c take_inference('base,sol);
@c take_inference(5,sol);
@c take_inference([1,'diagonal],sol);
@c take_inference(items_inference(sol),sol);
@c ===end===
@example
(%i1) load(inference_result)$
(%i2) b: 3$ h: 2$
(%i3) sol: inference_result("Rectangle",
                            ['base=b,
                             'height=h,
                             'diagonal=sqrt(b^2+h^2),
                             'area=b*h,
                             'perimeter=2*(b+h)],
                            [1,2,5,4] );
                        |   Rectangle
                        |
                        |    base = 3
                        |
(%o3)                   |   height = 2
                        |
                        | perimeter = 10
                        |
                        |    area = 6
(%i4) take_inference('base,sol);
(%o4)                           3
(%i5) take_inference(5,sol);
(%o5)                          10
(%i6) take_inference([1,'diagonal],sol);
(%o6)                     [3, sqrt(13)]
(%i7) take_inference(items_inference(sol),sol);
(%o7)                [3, 2, sqrt(13), 6, 10]
@end example

Véanse también @code{inference_result} y @code{take_inference}.
@end deffn







@node Funciones y variables para stats, Funciones y variables para distribuciones especiales, Funciones y variables para inference_result, Top
@section Funciones y variables para stats


@defvr {Variable opcional} stats_numer
Valor por defecto: @code{true}

Cuando @code{stats_numer} vale @code{true}, las funciones de inferencia
estadística devuelven sus resultados en formato decimal de
coma flotante. Cuando vale @code{false}, los resultados se devuelven en
formato simbólico y racional.
@end defvr


@deffn {Función} test_mean (@var{x})
@deffnx {Función} test_mean (@var{x}, @var{options} ...)

Es el test @var{t} de la media. El argumento @var{x} es una lista o matriz
columna con los datos de una muestra unidimensional. También realiza el
test asintótico basado en el @i{Teorema Central del límite}
si se le asigna a la opción @code{'asymptotic} el valor @code{true}.

Opciones:

@itemize @bullet

@item
@code{'mean}, valor por defecto @code{0}, es el valor de la media a contrastar.

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@item
@code{'dev}, valor por defecto @code{'unknown}, este es el valor de la desviación
típica cuando se conoce; valores válidos son: @code{'unknown} o una
expresión con valor positivo.

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de confianza para el intervalo de confianza;
debe ser una expresión que tome un valor en el intervalo (0,1).

@item
@code{'asymptotic}, valor por defecto @code{false}, indica si debe realizar el test
exacto basado en la @var{t} de Student, o el asintótico basado en el
@i{Teorema Central del límite}; valores válidos son @code{true} y @code{false}.

@end itemize

El resultado devuelto por la función  @code{test_mean} es un objeto
@code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'mean_estimate}: la media muestral.

@item
@code{'conf_level}: nivel de confianza seleccionado por el usuario.

@item
@code{'conf_interval}: intervalo de confianza para la media poblacional.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con su(s) parámetro(s).

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Realiza el contraste exacto @var{t} con varianza desconocida. La
hipótesis nula es @math{H_0: mean=50}, frente a la alternativa
unilátera @math{H_1: mean<50}; de acuerdo con los resultados,
no hay evidencia para rechazar @math{H_0}, pues el @math{p}-valor
es muy grande.

@c ===beg===
@c load (stats)$
@c data: [78,64,35,45,45,75,43,74,42,42]$
@c test_mean(data,'conflevel=0.9,'alternative='less,'mean=50);
@c ===end===
@example
(%i1) load("stats")$
(%i2) data: [78,64,35,45,45,75,43,74,42,42]$
(%i3) test_mean(data,'conflevel=0.9,'alternative='less,'mean=50);
          |                 MEAN TEST
          |
          |            mean_estimate = 54.3
          |
          |              conf_level = 0.9
          |
          | conf_interval = [minf, 61.51314273502712]
          |
(%o3)     |  method = Exact t-test. Unknown variance.
          |
          | hypotheses = H0: mean = 50 , H1: mean < 50
          |
          |       statistic = .8244705235071678
          |
          |       distribution = [student_t, 9]
          |
          |        p_value = .7845100411786889
@end example

En esta ocasión Maxima realiza un test asintótico. La hipótesis
nula es @math{H_0: equal(mean, 50)} frente a la alternativa bilátera @math{H_1: not equal(mean, 50)};
de acuerdo con los resultados, @math{H_0} debe rechazarse en favor de
la alternativa @math{H_1}, pues el @math{p}-valor es muy pequeño. 
Nótese que, tal como indica la componente @code{Method}, este
procedimiento sólo puede aplicarse en muestras grandes.

@c ===beg===
@c load (stats)$
@c test_mean([36,118,52,87,35,256,56,178,57,57,89,34,25,98,35,
@c         98,41,45,198,54,79,63,35,45,44,75,42,75,45,45,
@c         45,51,123,54,151],
@c         'asymptotic=true,'mean=50);
@c ===end===
@example
(%i1) load("stats")$
(%i2) test_mean([36,118,52,87,35,256,56,178,57,57,89,34,25,98,35,
              98,41,45,198,54,79,63,35,45,44,75,42,75,45,45,
              45,51,123,54,151],
              'asymptotic=true,'mean=50);
          |                       MEAN TEST
          |
          |           mean_estimate = 74.88571428571429
          |
          |                   conf_level = 0.95
          |
          | conf_interval = [57.72848600856194, 92.04294256286663]
          |
(%o2)     |    method = Large sample z-test. Unknown variance.
          |
          |       hypotheses = H0: mean = 50 , H1: mean # 50
          |
          |             statistic = 2.842831192874313
          |
          |             distribution = [normal, 0, 1]
          |
          |             p_value = .004471474652002261
@end example

@end deffn







@deffn {Función} test_means_difference (@var{x1}, @var{x2})
@deffnx {Función} test_means_difference (@var{x1}, @var{x2}, @var{options} ...)

Este es el test @var{t} para la diferencia de medias con muestras.
Los argumentos @var{x1} y @var{x2} son listas o matrices columna
que contienen dos muestras independientes. En caso de varianzas
diferentes y desconocidas (véanse las opciones @code{'dev1},
@code{'dev2} y @code{'varequal} más abajo) los grados de libertad
se calculan mediante la aproximación de Welch.
También realiza el test asintótico basado en el
@i{Teorema Central del límite} si se le asigna a 
la opción @code{'asymptotic} el valor @code{true}.

Opciones:

@itemize @bullet

@item

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@item
@code{'dev1}, valor por defecto @code{'unknown}, es el valor de la desviación 
típica de la muestra @var{x1} cuando se conoce; valores válidos 
son: @code{'unknown} o una expresión positiva.

@item
@code{'dev2}, valor por defecto @code{'unknown}, es el valor de la desviación 
típica de la muestra @var{x2} cuando se conoce; valores válidos 
son: @code{'unknown} o una expresión positiva.

@item
@code{'varequal}, valor por defecto @code{false}, indica si las varianzas deben considerarse iguales o no; esta opción sólo toma efecto cuando @code{'dev1} y/o @code{'dev2} tienen el valor @code{'unknown}.

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de confianza para el
intervalo de confianza; debe ser una expresión que tome un valor en el intervalo (0,1).

@item
@code{'asymptotic}, valor por defecto @code{false}, indica si debe realizar el test
exacto basado en la @var{t} de Student, o el asintótico basado en el
@i{Teorema Central del límite}; valores válidos son @code{true} y @code{false}.

@end itemize

El resultado devuelto por la función  @code{test_means_difference} es un objeto
@code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'diff_estimate}: el estimador de la diferencia de medias.

@item
@code{'conf_level}: nivel de confianza seleccionado por el usuario.

@item
@code{'conf_interval}: intervalo de confianza para la diferencia de medias.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con su(s) parámetro(s).

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

La igualdad de medias se contrasta con dos pequeñas muestras
@var{x} y @var{y}, contra la alternativa @math{H_1: m_1>m_2},
siendo @math{m_1} y @math{m_2} las medias poblacionales; las
varianzas son desconocidas y se supone que diferentes.

@c equivalent code for R:
@c x <- c(20.4,62.5,61.3,44.2,11.1,23.7)
@c y <- c(1.2,6.9,38.7,20.4,17.2)
@c t.test(x,y,alternative="greater")

@c ===beg===
@c load (stats)$
@c x: [20.4,62.5,61.3,44.2,11.1,23.7]$
@c y: [1.2,6.9,38.7,20.4,17.2]$
@c test_means_difference(x,y,'alternative='greater);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: [1.2,6.9,38.7,20.4,17.2]$
(%i4) test_means_difference(x,y,'alternative='greater);
            |              DIFFERENCE OF MEANS TEST
            |
            |         diff_estimate = 20.31999999999999
            |
            |                 conf_level = 0.95
            |
            |    conf_interval = [- .04597417812882298, inf]
            |
(%o4)       |        method = Exact t-test. Welch approx.
            |
            | hypotheses = H0: mean1 = mean2 , H1: mean1 > mean2
            |
            |           statistic = 1.838004300728477
            |
            |    distribution = [student_t, 8.62758740184604]
            |
            |            p_value = .05032746527991905
@end example

El mismo test que antes, pero ahora se suponen las varianzas
iguales.

@c equivalent code for R:
@c x <- c(20.4,62.5,61.3,44.2,11.1,23.7)
@c y <- c(1.2,6.9,38.7,20.4,17.2)
@c t.test(x,y,var.equal=T,alternative="greater")

@c ===beg===
@c load (stats)$
@c x: [20.4,62.5,61.3,44.2,11.1,23.7]$
@c y: [1.2,6.9,38.7,20.4,17.2]$
@c test_means_difference(x,y,
@c                       'alternative='greater,
@c                       'varequal=true);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: matrix([1.2],[6.9],[38.7],[20.4],[17.2])$
(%i4) test_means_difference(x,y,
                            'alternative='greater,
                            'varequal=true);
            |              DIFFERENCE OF MEANS TEST
            |
            |         diff_estimate = 20.31999999999999
            |
            |                 conf_level = 0.95
            |
            |     conf_interval = [- .7722627696897568, inf]
            |
(%o4)       |   method = Exact t-test. Unknown equal variances
            |
            | hypotheses = H0: mean1 = mean2 , H1: mean1 > mean2
            |
            |           statistic = 1.765996124515009
            |
            |           distribution = [student_t, 9]
            |
            |            p_value = .05560320992529344
@end example

@end deffn







@deffn {Función} test_variance (@var{x})
@deffnx {Función} test_variance (@var{x}, @var{options} ...)

Este es el test @var{chi^2} de la varianza. El argumento @var{x}
es una lista o matriz columna con los datos de una muestra unidimensional
extraída de una población normal.

Opciones:

@itemize @bullet

@item
@code{'mean}, valor por defecto @code{'unknown}, es la media de la población, si se conoce.

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@item
@code{'variance}, valor por defecto @code{1}, este es el valor (positivo) de la varianza a contrastar.

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de confianza para el intervalo de confianza;
debe ser una expresión que tome un valor en el intervalo (0,1).

@end itemize

El resultado devuelto por la función  @code{test_variance} es un objeto
@code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'var_estimate}: la varianza muestral.

@item
@code{'conf_level}: nivel de confianza seleccionado por el usuario.

@item
@code{'conf_interval}: intervalo de confianza para la varianza poblacional.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con su parámetro.

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Se contrasta si la varianza de una población de media desconocida
es igual o mayor que 200.

@c ===beg===
@c load (stats)$
@c x: [203,229,215,220,223,233,208,228,20]$
@c test_variance(x,'alternative='greater,'variance=200);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [203,229,215,220,223,233,208,228,209]$
(%i3) test_variance(x,'alternative='greater,'variance=200);
             |                  VARIANCE TEST
             |
             |              var_estimate = 110.75
             |
             |                conf_level = 0.95
             |
             |     conf_interval = [57.13433376937479, inf]
             |
(%o3)        | method = Variance Chi-square test. Unknown mean.
             |
             |    hypotheses = H0: var = 200 , H1: var > 200
             |
             |                 statistic = 4.43
             |
             |             distribution = [chi2, 8]
             |
             |           p_value = .8163948512777689
@end example

@end deffn







@deffn {Función} test_variance_ratio (@var{x1}, @var{x2})
@deffnx {Función} test_variance_ratio (@var{x1}, @var{x2}, @var{options} ...)

Este es el test @var{F} del cociente de las varianzas para dos
poblaciones normales. Los argumentos @var{x1} y @var{x2} son listas
o matrices columna que contienen los datos de dos muestras 
independientes.

Opciones:

@itemize @bullet

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@item
@code{'mean1}, valor por defecto @code{'unknown}, es la media de la población de la
que procede @var{x1} cuando se conoce.

@item
@code{'mean2}, valor por defecto @code{'unknown}, es la media de la población de la
que procede @var{x2} cuando se conoce.

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de confianza para el intervalo
de confianza del cociente; debe ser una expresión que tome un valor en el intervalo (0,1).

@end itemize

El resultado devuelto por la función  @code{test_variance_ratio} es un objeto
@code{inference_result} con los siguientes resultados

@enumerate

@item
@code{'ratio_estimate}: el cociente de varianzas muestral.

@item
@code{'conf_level}: nivel de confianza seleccionado por el usuario.

@item
@code{'conf_interval}: intervalo de confianza para el cociente de varianzas.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con sus parámetros.

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate


Ejemplos:

Se contrasta la igualdad de varianzas de dos poblaciones normales frente
a la alternativa de que la primera es mayor que la segunda.

@c equivalent code for R:
@c x <- c(20.4,62.5,61.3,44.2,11.1,23.7)
@c y <- c(1.2,6.9,38.7,20.4,17.2)
@c var.test(x,y,alternative="greater")

@c ===beg===
@c load (stats)$
@c x: [20.4,62.5,61.3,44.2,11.1,23.7]$
@c y: [1.2,6.9,38.7,20.4,17.2]$
@c test_variance_ratio(x,y,'alternative='greater);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: [1.2,6.9,38.7,20.4,17.2]$
(%i4) test_variance_ratio(x,y,'alternative='greater);
              |              VARIANCE RATIO TEST
              |
              |       ratio_estimate = 2.316933391522034
              |
              |               conf_level = 0.95
              |
              |    conf_interval = [.3703504689507268, inf]
              |
(%o4)         | method = Variance ratio F-test. Unknown means.
              |
              | hypotheses = H0: var1 = var2 , H1: var1 > var2
              |
              |         statistic = 2.316933391522034
              |
              |            distribution = [f, 5, 4]
              |
              |          p_value = .2179269692254457
@end example

@end deffn





@deffn {Función} test_proportion (@var{x}, @var{n})
@deffnx {Función} test_proportion (@var{x}, @var{n}, @var{options} ...)

Inferencias sobre una proporción. El argumento @var{x} es el
número de éxitos observados en @var{n} pruebas de Bernoulli
con probabilidad desconocida.

Opciones:

@itemize @bullet

@item
@code{'proportion}, valor por defecto @code{1/2}, es el valor de la
probabilidad a contrastar.

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de confianza para el intervalo
de confianza; debe ser una expresión que tome un valor en el intervalo (0,1).

@item
@code{'asymptotic}, valor por defecto @code{false}, indica si debe realizar el test
exacto basado en la binomial, o el asintótico basado en el
@i{Teorema Central del límite}; valores válidos son @code{true} y @code{false}.

@item
@code{'correct}, valor por defecto @code{true}, indica si se aplica o no la
corrección de Yates.

@end itemize

El resultado devuelto por la función @code{test_proportion} es un objeto
@code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'sample_proportion}: proporción muestral.

@item
@code{'conf_level}: nivel de confianza seleccionado.

@item
@code{'conf_interval}: intervalo de confianza de Wilson para la proporción.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado
para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con sus parámetros.

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Realiza un contraste exacto. La hipótesis nula es @math{H_0: p=1/2} 
y la alternativa unilátera es @math{H_1: p<1/2}.

@c ===beg===
@c load (stats)$
@c test_proportion(45, 103, alternative = less);
@c ===end===
@example
(%i1) load("stats")$
(%i2) test_proportion(45, 103, alternative = less);
         |            PROPORTION TEST              
         |                                         
         | sample_proportion = .4368932038834951   
         |                                         
         |           conf_level = 0.95             
         |                                         
         | conf_interval = [0, 0.522714149150231]  
         |                                         
(%o2)    |     method = Exact binomial test.       
         |                                         
         | hypotheses = H0: p = 0.5 , H1: p < 0.5  
         |                                         
         |             statistic = 45              
         |                                         
         |  distribution = [binomial, 103, 0.5]    
         |                                         
         |      p_value = .1184509388901454 
@end example

Un contraste asintótico bilátero. El nivel de confianza es 99/100.

@c ===beg===
@c load (stats)$
@c fpprintprec:7$
@c test_proportion(45, 103, 
@c               conflevel = 99/100, asymptotic=true);
@c ===end===
@example
(%i1) load("stats")$
(%i2) fpprintprec:7$
(%i3) test_proportion(45, 103, 
                  conflevel = 99/100, asymptotic=true);
      |                 PROPORTION TEST                  
      |                                                  
      |           sample_proportion = .43689             
      |                                                  
      |                conf_level = 0.99                 
      |                                                  
      |        conf_interval = [.31422, .56749]          
      |                                                  
(%o3) | method = Asympthotic test with Yates correction. 
      |                                                  
      |     hypotheses = H0: p = 0.5 , H1: p # 0.5       
      |                                                  
      |               statistic = .43689                 
      |                                                  
      |      distribution = [normal, 0.5, .048872]       
      |                                                  
      |                p_value = .19662
@end example

@end deffn







@deffn {Función} test_proportions_difference (@var{x1}, @var{n1}, @var{x2}, @var{n2})
@deffnx {Función} test_proportions_difference (@var{x1}, @var{n1}, @var{x2}, @var{n2}, @var{options} ...)

Inferencias sobre la diferencia de dos proporciones. El argumento @var{x1} 
es el número de éxitos en @var{n1} experimentos de Bernoulli en la
primera población y @var{x2} y @var{n2} son los valores correspondientes
para la segunda población. Las muestras son independientes y el contraste
es asintótico.

Opciones:

@itemize @bullet

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son:: @code{'twosided} (@code{p1 # p2}), @code{'greater} (@code{p1 > p2})
and @code{'less} (@code{p1 < p2}).

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de confianza para el intervalo
de confianza; debe ser una expresión que tome un valor en el intervalo (0,1).

@item
@code{'correct}, valor por defecto @code{true}, indica si se aplica o no la
corrección de Yates.

@end itemize

El resultado devuelto por la función @code{test_proportions_difference} es un objeto
@code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'proportions}: lista con las dos proporciones muestrales.

@item
@code{'conf_level}: nivel de confianza seleccionado.

@item
@code{'conf_interval}: intervalo de confianza para la diferencia de proporciones @code{p1 - p2}.

@item
@code{'method}: procedimiento de inferencia y mensaje de aviso en caso de que
alguno de los tamaños muestrales sea menor de 10.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado
para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con sus parámetros.

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Una máquina produce 10 piezas defectuosas en un lote de 250.
Después de ciertas tareas de mantenimiento, produce 4 piezas
defectuosas de un lote de 150. A fin de saber si la tarea de 
mantenimiento produjo alguna mejora, se contrasta la hipótesis
nula @code{H0:p1=p2} contra la alternativa @code{H0:p1>p2},
donde @code{p1} y @code{p2} son las probabilidades de que un
artículo producido por la máquina sea defectuoso,
antes y después de la reparación. De acuerdo con el p valor, no hay
evidencia suficiente para aceptar la alternativa.

@c ===beg===
@c load (stats)$
@c fpprintprec:7$
@c test_proportions_difference(10, 250, 4, 150,
@c                             alternative = greater);
@c ===end===
@example
(%i1) load("stats")$
(%i2) fpprintprec:7$
(%i3) test_proportions_difference(10, 250, 4, 150,
                                alternative = greater);
      |       DIFFERENCE OF PROPORTIONS TEST         
      |                                              
      |       proportions = [0.04, .02666667]        
      |                                              
      |              conf_level = 0.95               
      |                                              
      |      conf_interval = [- .02172761, 1]        
      |                                              
(%o3) | method = Asymptotic test. Yates correction.  
      |                                              
      |   hypotheses = H0: p1 = p2 , H1: p1 > p2     
      |                                              
      |            statistic = .01333333             
      |                                              
      |    distribution = [normal, 0, .01898069]     
      |                                              
      |             p_value = .2411936 
@end example

Desviación típica exacta de la
distribución normal asintótica con datos
desconocidos.

@c ===beg===
@c load(stats)$
@c stats_numer: false$
@c sol: test_proportions_difference(x1,n1,x2,n2)$
@c last(take_inference('distribution,sol));
@c ===end===
@example
(%i1) load("stats")$
(%i2) stats_numer: false$
(%i3) sol: test_proportions_difference(x1,n1,x2,n2)$
(%i4) last(take_inference('distribution,sol));
               1    1                  x2 + x1
              (-- + --) (x2 + x1) (1 - -------)
               n2   n1                 n2 + n1
(%o4)    sqrt(---------------------------------)
                           n2 + n1
@end example

@end deffn







@deffn {Función} test_sign (@var{x})
@deffnx {Función} test_sign (@var{x}, @var{options} ...)

Este es el test no paramétrico de los signos para contrastes
sobre la mediana de una población continua. El argumento @var{x}
es una lista o matriz columna que contiene los datos de una muestra
unidimensional.

Opciones:

@itemize @bullet

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@item
@code{'median}, valor por defecto @code{0}, es el valor de la mediana a contrastar.

@end itemize

El resultado devuelto por la función @code{test_sign} es un objeto
@code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'med_estimate}: la mediana muestral.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con sus parámetros.

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Contrasta si la mediana de la población de la que se ha extraido
la muestra es 6, frente a la alternativa @math{H_1: median > 6}.

@c ===beg===
@c load (stats)$
@c x: [2,0.1,7,1.8,4,2.3,5.6,7.4,5.1,6.1,6]$
@c test_sign(x,'median=6,'alternative='greater);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [2,0.1,7,1.8,4,2.3,5.6,7.4,5.1,6.1,6]$
(%i3) test_sign(x,'median=6,'alternative='greater);
               |                  SIGN TEST
               |
               |              med_estimate = 5.1
               |
               |      method = Non parametric sign test.
               |
(%o3)          | hypotheses = H0: median = 6 , H1: median > 6
               |
               |                statistic = 7
               |
               |      distribution = [binomial, 10, 0.5]
               |
               |         p_value = .05468749999999989
@end example

@end deffn









@deffn {Función} test_signed_rank (@var{x})
@deffnx {Función} test_signed_rank (@var{x}, @var{options} ...)

Este el test de los rangos signados de Wilcoxon para hacer inferencias sobre
la mediana de una población continua. El argumento @var{x} es una lista
o matriz columna que contiene los datos de una muestra unidimensional.
Realiza la aproximación normal si el tamaño muestral es mayor que 20,
o si en la muestra aparece algún cero o hay empates.

Véanse también @code{pdf_rank_test} y @code{cdf_rank_test}.


Opciones:

@itemize @bullet

@item
@code{'median}, valor por defecto @code{0}, es el valor de la mediana a ser contrastado.

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@end itemize

El resultado devuelto por la función  @code{test_signed_rank} es
un objeto @code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'med_estimate}: la mediana muestral.

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con su(s) parámetro(s).

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Contrasta la hipótesis nula @math{H_0: median = 15} frente 
a la alternativa @math{H_1: median > 15}. Este test es exacto, 
puesto que no hay empates.


@c equivalent code for R:
@c x <- c(17.1,15.9,13.7,13.4,15.5,17.6)
@c wilcox.test(x,mu=15,alternative="greater")

@c ===beg===
@c load (stats)$
@c x: [17.1,15.9,13.7,13.4,15.5,17.6]$
@c test_signed_rank(x,median=15,alternative=greater);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [17.1,15.9,13.7,13.4,15.5,17.6]$
(%i3) test_signed_rank(x,median=15,alternative=greater);
                 |             SIGNED RANK TEST
                 |
                 |           med_estimate = 15.7
                 |
                 |           method = Exact test
                 |
(%o3)            | hypotheses = H0: med = 15 , H1: med > 15
                 |
                 |              statistic = 14
                 |
                 |     distribution = [signed_rank, 6]
                 |
                 |            p_value = 0.28125
@end example

Contrasta la hipótesis nula @math{H_0: equal(median, 2.5)} frente 
a la alternativa @math{H_1: not equal(median, 2.5)}. Este es un test asintótico,
debido a la presencia de empates.

@c equivalent code for R:
@c y<-c(1.9,2.3,2.6,1.9,1.6,3.3,4.2,4,2.4,2.9,1.5,3,2.9,4.2,3.1)
@c wilcox.test(y,mu=2.5)

@c ===beg===
@c load (stats)$
@c y:[1.9,2.3,2.6,1.9,1.6,3.3,4.2,4,2.4,2.9,1.5,3,2.9,4.2,3.1]$
@c test_signed_rank(y,median=2.5);
@c ===end===
@example
(%i1) load("stats")$
(%i2) y:[1.9,2.3,2.6,1.9,1.6,3.3,4.2,4,2.4,2.9,1.5,3,2.9,4.2,3.1]$
(%i3) test_signed_rank(y,median=2.5);
             |                 SIGNED RANK TEST
             |
             |                med_estimate = 2.9
             |
             |          method = Asymptotic test. Ties
             |
(%o3)        |    hypotheses = H0: med = 2.5 , H1: med # 2.5
             |
             |                 statistic = 76.5
             |
             | distribution = [normal, 60.5, 17.58195097251724]
             |
             |           p_value = .3628097734643669
@end example

@end deffn







@deffn {Función} test_rank_sum (@var{x1}, @var{x2})
@deffnx {Función} test_rank_sum (@var{x1}, @var{x2}, @var{option})

Este es el test de Wilcoxon-Mann-Whitney para comparar las medianas
de dos poblaciones continuas. Los dos primeros argumentos @var{x1}
y @var{x2} son listas o matrices columna con los datos de dos
muestras independientes. Realiza la aproximación normal si
alguna de las muestras tiene tamaño mayor que 10, o si hay
empates.


Opción:

@itemize @bullet

@item
@code{'alternative}, valor por defecto @code{'twosided}, es la hipótesis alternativa;
valores válidos son: @code{'twosided}, @code{'greater} y @code{'less}.

@end itemize

El resultado devuelto por la función  @code{test_rank_sum}
es un objeto @code{inference_result} con los siguientes apartados:

@enumerate

@item
@code{'method}: procedimiento de inferencia.

@item
@code{'hypotheses}: hipótesis nula y alternativa a ser contrastada.

@item
@code{'statistic}: valor del estadístico de contraste utilizado para probar la hipótesis.

@item
@code{'distribution}: distribución del estadístico de contraste, junto con sus parámetros.

@item
@code{'p_value}: @math{p}-valor del test.

@end enumerate

Ejemplos:

Contrasta si dos poblaciones tiene medianas similares. Al ser los tamaños
muestrales pequeños, se realiza el test exacto.

@c equivalent code for R:
@c x <- c(12,15,17,38,42,10,23,35,28)
@c y <- c(21,18,25,14,52,65,40,43)
@c wilcox.test(x,y)

@c ===beg===
@c load (stats)$
@c x:[12,15,17,38,42,10,23,35,28]$
@c y:[21,18,25,14,52,65,40,43]$
@c test_rank_sum(x,y);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x:[12,15,17,38,42,10,23,35,28]$
(%i3) y:[21,18,25,14,52,65,40,43]$
(%i4) test_rank_sum(x,y);
              |                 RANK SUM TEST
              |
              |              method = Exact test
              |
              | hypotheses = H0: med1 = med2 , H1: med1 # med2
(%o4)         |
              |                 statistic = 22
              |
              |        distribution = [rank_sum, 9, 8]
              |
              |          p_value = .1995886466474702
@end example

Ahora, con muestras mayores y empates, el procedimiento
realiza la aproximación normal. La hipótesis
alternativa es @math{H_1: median1 < median2}.

@c equivalent code for R:
@c x <- c(39,42,35,13,10,23,15,20,17,27)
@c y <- c(20,52,66,19,41,32,44,25,14,39,43,35,19,56,27,15)
@c wilcox.test(x,y,alternative="less")

@c ===beg===
@c load (stats)$
@c x: [39,42,35,13,10,23,15,20,17,27]$
@c y: [20,52,66,19,41,32,44,25,14,39,43,35,19,56,27,15]$
@c test_rank_sum(x,y,'alternative='less);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x: [39,42,35,13,10,23,15,20,17,27]$
(%i3) y: [20,52,66,19,41,32,44,25,14,39,43,35,19,56,27,15]$
(%i4) test_rank_sum(x,y,'alternative='less);
             |                  RANK SUM TEST
             |
             |          method = Asymptotic test. Ties
             |
             |  hypotheses = H0: med1 = med2 , H1: med1 < med2
(%o4)        |
             |                 statistic = 48.5
             |
             | distribution = [normal, 79.5, 18.95419580097078]
             |
             |           p_value = .05096985666598441
@end example

@end deffn







@deffn {Función} test_normality (@var{x})

Test de Shapiro-Wilk para el contraste de normalidad. El argumento
@var{x} es una lista de números, con tamaño muestral mayor que 2
y menor o igual que 5000; bajo cualesquiera otras condiciones, la
función @code{test_normality} emite un mensaje de error.

Referencia:

  [1] Algorithm AS R94, Applied Statistics (1995), vol.44, no.4, 547-551

El resultado devuelto por la función @code{test_normality} es
un objeto @code{inference_result} con los siguientes apartados:


@enumerate

@item
@code{'statistic}: valor del estadístico @var{W}.

@item
@code{'p_value}: @math{p}-valor bajo la hipótesis de normalidad.

@end enumerate

Ejemplos:

Contrasta la normalidad de una población a partir de una muestra
de tamaño 9.

@c equivalent code for R:
@c x <- c(12,15,17,38,42,10,23,35,28)
@c shapiro.test(x)

@c ===beg===
@c load (stats)$
@c x:[12,15,17,38,42,10,23,35,28]$
@c test_normality(x);
@c ===end===
@example
(%i1) load("stats")$
(%i2) x:[12,15,17,38,42,10,23,35,28]$
(%i3) test_normality(x);
                       |      SHAPIRO - WILK TEST
                       |
(%o3)                  | statistic = .9251055695162436
                       |
                       |  p_value = .4361763918860381
@end example

@end deffn









@deffn {Función} linear_regression (@var{x})
@deffnx {Función} linear_regression (@var{x} @var{option})

Regresión lineal múltiple, 
@math{y_i = b0 + b1*x_1i + b2*x_2i + ... + bk*x_ki + u_i},
donde @math{u_i} son variables aleatorias independientes 
@math{N(0,sigma)}. El argumento @var{x} debe ser una matriz 
con más de una columna. La última columna se considera
que son las respuestas (@math{y_i}).

Opción:

@itemize @bullet

@item
@code{'conflevel}, valor por defecto @code{95/100}, nivel de
confianza para los intervalos de confianza; debe ser una expresión 
que tome un valor en el intervalo (0,1).
@end itemize

El resultado devuelto por la función @code{linear_regression} es
un objeto @code{inference_result} de Maxima con los siguientes campos:

@enumerate

@item
@code{'b_estimation}: estimadores de los coeficientes de regresión.

@item
@code{'b_covariances}: matriz de covarianzas de los estimadores
de los coeficientes de regresión.

@item
@code{b_conf_int}: intervalos de confianza para los coeficientes de regresión.

@item
@code{b_statistics}: estadísticos para los contrastes
de los coeficientes.

@item
@code{b_p_values}: p-valores para los contrastes de los coeficientes.

@item
@code{b_distribution}: distribución de probabilidad para
los contrastes de los coeficientes.

@item
@code{v_estimation}: estimador insesgado de la varianza.

@item
@code{v_conf_int}: intervalo de confianza de la varianza.

@item
@code{v_distribution}: distribución de probabilidad para
el contraste de la varianza.

@item
@code{residuals}: residuos.

@item
@code{adc}: coeficiente de determinación ajustado.

@item
@code{aic}: Criterio de información de Akaike.

@item
@code{bic}: Criterio de información de Bayes.

@end enumerate

Solamente los apartados 1, 4, 5, 6, 7, 8, 9 y 11, en este orden, 
se muestran por defecto. El resto permanecen ocultos hasta que
el usuario haga uso de las funciones @code{items_inference}
y @code{take_inference}.

Ejemplo:

Ajustando un modelo lineal a una muestra tridimensional. La 
última columna se considera que son las respuestas (@math{y_i}).

@c ===beg===
@c load ("stats")$
@c X:matrix(
@c    [58,111,64],[84,131,78],[78,158,83],
@c    [81,147,88],[82,121,89],[102,165,99],
@c    [85,174,101],[102,169,102])$
@c fpprintprec: 4$
@c res: linear_regression(X);
@c items_inference(res);
@c take_inference('b_covariances, res);
@c take_inference('bic, res);
@c load("draw")$
@c draw2d(
@c    points_joined = true,
@c    grid = true,
@c    points(take_inference('residuals, res)) )$
@c ===end===
@example
(%i2) load("stats")$
(%i3) X:matrix(
    [58,111,64],[84,131,78],[78,158,83],
    [81,147,88],[82,121,89],[102,165,99],
    [85,174,101],[102,169,102])$
(%i4) fpprintprec: 4$
(%i5) res: linear_regression(X);
             |       LINEAR REGRESSION MODEL         
             |                                       
             | b_estimation = [9.054, .5203, .2397]  
             |                                       
             | b_statistics = [.6051, 2.246, 1.74]   
             |                                       
             | b_p_values = [.5715, .07466, .1423]   
             |                                       
(%o5)        |   b_distribution = [student_t, 5]     
             |                                       
             |         v_estimation = 35.27          
             |                                       
             |     v_conf_int = [13.74, 212.2]       
             |                                       
             |      v_distribution = [chi2, 5]       
             |                                       
             |             adc = .7922               
(%i6) items_inference(res);
(%o6) [b_estimation, b_covariances, b_conf_int, b_statistics, 
b_p_values, b_distribution, v_estimation, v_conf_int, 
v_distribution, residuals, adc, aic, bic]
(%i7) take_inference('b_covariances, res);
                  [  223.9    - 1.12   - .8532  ]
                  [                             ]
(%o7)             [ - 1.12    .05367   - .02305 ]
                  [                             ]
                  [ - .8532  - .02305   .01898  ]
(%i8) take_inference('bic, res);
(%o8)                          30.98
(%i9) load("draw")$
(%i10) draw2d(
    points_joined = true,
    grid = true,
    points(take_inference('residuals, res)) )$
@end example
@end deffn






@node Funciones y variables para distribuciones especiales, , Funciones y variables para stats, Top
@section Funciones y variables para distribuciones especiales


@deffn {Función} pdf_signed_rank (@var{x}, @var{n})
Función de densidad de probabilidad de la distribución exacta
del estadístico de contraste del test de los
rangos signados. El argumento @var{x} es un número real y
@var{n} un entero positivo.

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

@deffn {Función} cdf_signed_rank (@var{x}, @var{n})
Función de probabilidad acumulada de la distribución exacta
del estadístico de contraste del test de los
rangos signados. El argumento @var{x} es un número real y
@var{n} un entero positivo.

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

@deffn {Función} pdf_rank_sum (@var{x}, @var{n}, @var{m})
Función de densidad de probabilidad de la distribución exacta
del estadístico de contraste de Wilcoxon-Mann-Whitney.
El argumento @var{x} es un número real y
@var{n} y @var{m} son ambos enteros positivos.

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

@deffn {Función} cdf_rank_sum (@var{x}, @var{n}, @var{m})
Función de probabilidad acumulada de la distribución exacta
del estadístico de contraste de Wilcoxon-Mann-Whitney.
El argumento @var{x} es un número real y
@var{n} y @var{m} son ambos enteros positivos.

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

