Saltar al contenido principal
LibreTexts Español

5.5: Estadística Descriptiva Separadamente para cada Grupo

  • Page ID
    151509
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Es muy común que te encuentres necesitando mirar estadísticas descriptivas, desglosadas por alguna variable de agrupación. Esto es bastante fácil de hacer en R, y hay tres funciones en particular que vale la pena conocer: by (), describeBy () y aggregate (). Empecemos con la función describeBy (), que forma parte del paquete psych. La función describeBy () es muy similar a la función describe (), excepto que tiene un argumento adicional llamado group que especifica una variable de agrupación. Por ejemplo, digamos, quiero ver los estadísticos descriptivos de los datos de clin.trial, desglosados por separado por tipo de terapia. El comando que usaría aquí es:

    describeBy( x=clin.trial, group=clin.trial$therapy )
    ## 
    ##  Descriptive statistics by group 
    ## group: no.therapy
    ##           vars n mean   sd median trimmed  mad min max range skew kurtosis
    ## drug*        1 9 2.00 0.87    2.0    2.00 1.48 1.0 3.0   2.0 0.00    -1.81
    ## therapy*     2 9 1.00 0.00    1.0    1.00 0.00 1.0 1.0   0.0  NaN      NaN
    ## mood.gain    3 9 0.72 0.59    0.5    0.72 0.44 0.1 1.7   1.6 0.51    -1.59
    ##             se
    ## drug*     0.29
    ## therapy*  0.00
    ## mood.gain 0.20
    ## -------------------------------------------------------- 
    ## group: CBT
    ##           vars n mean   sd median trimmed  mad min max range  skew
    ## drug*        1 9 2.00 0.87    2.0    2.00 1.48 1.0 3.0   2.0  0.00
    ## therapy*     2 9 2.00 0.00    2.0    2.00 0.00 2.0 2.0   0.0   NaN
    ## mood.gain    3 9 1.04 0.45    1.1    1.04 0.44 0.3 1.8   1.5 -0.03
    ##           kurtosis   se
    ## drug*        -1.81 0.29
    ## therapy*       NaN 0.00
    ## mood.gain    -1.12 0.15

    Como puede ver, la salida es esencialmente idéntica a la salida que produce la función describe (), excepto que la salida ahora le da medias, desviaciones estándar etc por separado para el grupo CBT y el grupo no.therapy. Observe que, como antes, la salida muestra asteriscos para variables factoriales, con el fin de llamar su atención sobre el hecho de que las estadísticas descriptivas que ha calculado no serán muy significativas para esas variables. Sin embargo, este comando nos ha dado algunas estadísticas descriptivas realmente útiles variables de mood.gain, desglosadas en función de la terapia.

    Una solución algo más general la ofrece la función by (). Hay tres argumentos que debe especificar al usar esta función: el argumento data especifica el conjunto de datos, el argumento INDICES especifica la variable de agrupación y el argumento FUN especifica el nombre de una función que desea aplicar por separado a cada uno grupo. Para dar una idea de lo poderoso que es esto, puedes reproducir la función describeBy () usando un comando como este:

    by( data=clin.trial, INDICES=clin.trial$therapy, FUN=describe )
    ## clin.trial$therapy: no.therapy
    ##           vars n mean   sd median trimmed  mad min max range skew kurtosis
    ## drug*        1 9 2.00 0.87    2.0    2.00 1.48 1.0 3.0   2.0 0.00    -1.81
    ## therapy*     2 9 1.00 0.00    1.0    1.00 0.00 1.0 1.0   0.0  NaN      NaN
    ## mood.gain    3 9 0.72 0.59    0.5    0.72 0.44 0.1 1.7   1.6 0.51    -1.59
    ##             se
    ## drug*     0.29
    ## therapy*  0.00
    ## mood.gain 0.20
    ## -------------------------------------------------------- 
    ## clin.trial$therapy: CBT
    ##           vars n mean   sd median trimmed  mad min max range  skew
    ## drug*        1 9 2.00 0.87    2.0    2.00 1.48 1.0 3.0   2.0  0.00
    ## therapy*     2 9 2.00 0.00    2.0    2.00 0.00 2.0 2.0   0.0   NaN
    ## mood.gain    3 9 1.04 0.45    1.1    1.04 0.44 0.3 1.8   1.5 -0.03
    ##           kurtosis   se
    ## drug*        -1.81 0.29
    ## therapy*       NaN 0.00
    ## mood.gain    -1.12 0.15

    Esto producirá exactamente la misma salida que el comando mostrado anteriormente. Sin embargo, no hay nada especial en la función describe (). Podrías usar la función by () con la misma facilidad junto con la función summary (). Por ejemplo:

    by( data=clin.trial, INDICES=clin.trial$therapy, FUN=summary ) 
    ## clin.trial$therapy: no.therapy
    ##        drug         therapy    mood.gain     
    ##  placebo :3   no.therapy:9   Min.   :0.1000  
    ##  anxifree:3   CBT       :0   1st Qu.:0.3000  
    ##  joyzepam:3                  Median :0.5000  
    ##                              Mean   :0.7222  
    ##                              3rd Qu.:1.3000  
    ##                              Max.   :1.7000  
    ## -------------------------------------------------------- 
    ## clin.trial$therapy: CBT
    ##        drug         therapy    mood.gain    
    ##  placebo :3   no.therapy:0   Min.   :0.300  
    ##  anxifree:3   CBT       :9   1st Qu.:0.800  
    ##  joyzepam:3                  Median :1.100  
    ##                              Mean   :1.044  
    ##                              3rd Qu.:1.300  
    ##                              Max.   :1.800

    Nuevamente, esta salida es bastante fácil de interpretar. Es el resultado de la función summary (), aplicada por separado al grupo TCC y al grupo no.terapia. Para los dos factores (fármaco y terapia) imprime una tabla de frecuencias, mientras que para la variable numérica (mood.gain) imprime el rango, rango intercuartil, media y mediana.

    ¿Y si tienes múltiples variables de agrupación? Supongamos, por ejemplo, que le gustaría ver el aumento promedio del estado de ánimo por separado para todas las combinaciones posibles de medicamento y terapia. De hecho, es posible hacer esto usando las funciones by () y describeBy (), pero generalmente me resulta más conveniente usar la función aggregate () en esta situación. De nuevo hay tres argumentos que hay que especificar. El argumento fórmula se utiliza para indicar qué variable desea analizar y qué variables se utilizan para especificar los grupos. Por ejemplo, si quieres ver el estado de ánimo.ganar por separado por cada posible combinación de fármaco y terapia, la fórmula que deseas es el estado de ánimo.ganancia ~ terapia con medicamentos +. El argumento data se utiliza para especificar el marco de datos que contiene todos los datos, y el argumento FUN se usa para indicar qué función desea calcular para cada grupo (por ejemplo, la media). Entonces, para obtener medios de grupo, use este comando:

    aggregate( formula = mood.gain ~ drug + therapy,  # mood.gain by drug/therapy combination
                data = clin.trial,                     # data is in the clin.trial data frame
                FUN = mean                             # print out group means
     )
    
    ##       drug    therapy mood.gain
    ## 1  placebo no.therapy  0.300000
    ## 2 anxifree no.therapy  0.400000
    ## 3 joyzepam no.therapy  1.466667
    ## 4  placebo        CBT  0.600000
    ## 5 anxifree        CBT  1.033333
    ## 6 joyzepam        CBT  1.500000

    o, alternativamente, si quieres calcular las desviaciones estándar para cada grupo, usarías el siguiente comando (nombres de argumentos omitidos esta vez):

    aggregate( mood.gain ~ drug + therapy, clin.trial, sd )
    
    ##       drug    therapy mood.gain
    ## 1  placebo no.therapy 0.2000000
    ## 2 anxifree no.therapy 0.2000000
    ## 3 joyzepam no.therapy 0.2081666
    ## 4  placebo        CBT 0.3000000
    ## 5 anxifree        CBT 0.2081666
    ## 6 joyzepam        CBT 0.2645751

    This page titled 5.5: Estadística Descriptiva Separadamente para cada Grupo is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.