Saltar al contenido principal
LibreTexts Español

5.4: Obtención de un Resumen General de una Variable

  • Page ID
    151567
  • \( \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}}\)

    Hasta este punto del capítulo he explicado varias estadísticas de resumen diferentes que se utilizan comúnmente a la hora de analizar datos, junto con funciones específicas que puedes usar en R para calcular cada una. Sin embargo, es un poco molesto tener que calcular por separado medias, medianas, desviaciones estándar, sesgos etc. ¿No sería bueno que R tuviera algunas funciones útiles que hicieran todos estos tediosos cálculos a la vez? Algo como summary () o describe (), ¿quizás? Por qué sí, sí lo haría. Tanto es así que ambas funciones existen. La función summary () está en el paquete base, por lo que viene con cada instalación de R. La función describe () es parte del paquete psych, que cargamos anteriormente en el capítulo.

    “Resumiendo” una variable

    La función summary () es algo fácil de usar, pero algo complicado de entender en su totalidad, ya que es una función genérica (ver Sección 4.11. La idea básica detrás de la función summary () es que imprime alguna información útil sobre cualquier objeto (es decir, variable, en lo que a nosotros respecta) que especifique como argumento objeto. Como consecuencia, el comportamiento de la función summary () difiere bastante dramáticamente dependiendo de la clase del objeto que le des. Empecemos dándole un objeto numérico:

    summary( object = afl.margins )  
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##    0.00   12.75   30.50   35.30   50.50  116.00 

    Para las variables numéricas, obtenemos un montón de estadísticas descriptivas útiles. Nos da los valores mínimo y máximo (es decir, el rango), el primer y tercer cuartiles (percentiles 25 y 75; es decir, el IQR), la media y la mediana. Es decir, nos da una colección bastante buena de estadísticas descriptivas relacionadas con la tendencia central y la difusión de los datos.

    Bien, ¿y si le damos de comer un vector lógico en su lugar? Digamos que quiero saber algo sobre cuántos “reventones” hubo en la temporada 2010 de la AFL. Operacionalizo el concepto de reventón (ver Capítulo 2) como un juego en el que el margen ganador supera los 50 puntos. Vamos a crear una variable lógica reventones en la que el i-ésimo elemento es VERDADERO si ese juego fue un reventón según mi definición,

    blowouts <-  afl.margins > 50
    blowouts
    ##   [1]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    ##  [12]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
    ##  [23] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE
    ##  [34]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [45] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
    ##  [56]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    ##  [67]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    ##  [78] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [89] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    ## [100] FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
    ## [111] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
    ## [122]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
    ## [133] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE
    ## [144]  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
    ## [155]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
    ## [166] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

    Entonces así es como se ve la variable reventones. Ahora vamos a pedirle a R un resumen ()

    summary( object = blowouts )
    ##    Mode   FALSE    TRUE 
    ## logical     132      44

    En este contexto, la función summary () nos da un recuento del número de valores VERDADEROS, el número de valores FALSE y el número de valores faltantes (es decir, los NA s). Comportamiento bastante razonable.

    A continuación, intentemos darle un factor. Si recuerdas, he definido el vector afl.finalistas como factor, así que usemos eso:

    summary( object = afl.finalists )
    
    ##         Adelaide         Brisbane          Carlton      Collingwood 
    ##               26               25               26               28 
    ##         Essendon          Fitzroy        Fremantle          Geelong 
    ##               32                0                6               39 
    ##         Hawthorn        Melbourne  North Melbourne    Port Adelaide 
    ##               27               28               28               17 
    ##         Richmond         St Kilda           Sydney       West Coast 
    ##                6               24               26               38 
    ## Western Bulldogs 
    ##               24

    Para los factores, obtenemos una tabla de frecuencias, tal como la obtuvimos cuando usamos la función table (). Curiosamente, sin embargo, si convertimos esto en un vector de caracteres usando la función.character () (ver Sección 7.10, no obtenemos los mismos resultados:

    f2 <- as.character( afl.finalists )
    summary( object = f2 )
    ##    Length     Class      Mode 
    ##       400 character character

    Esta es una de esas situaciones a las que me refería en la Sección 4.7, en la que es útil declarar su variable de escala nominal como un factor en lugar de un vector de caracteres. Debido a que he definido afl.finalistas como un factor, R sabe que debería tratarlo como una variable de escala nominal, y así te da un resumen mucho más detallado (y útil) de lo que tendría si lo hubiera dejado como un vector de caracteres.

    “Resumir” un marco de datos

    Bien ¿qué pasa con los marcos de datos? Cuando pasa un marco de datos a la función summary (), produce un resumen ligeramente condensado de cada variable dentro del marco de datos. Para darte una idea de cómo esto puede ser útil, probemos esto para un nuevo conjunto de datos, uno que nunca antes habías visto. Los datos se almacenan en el archivo ClinicalTrial.rdata, y los usaremos mucho en el Capítulo 14 (puede encontrar una descripción completa de los datos al inicio de ese capítulo). Vamos a cargarlo, y a ver qué tenemos:

    load( "./data/clinicaltrial.Rdata" )
    who(TRUE)
    ##    -- Name --    -- Class --   -- Size --
    ##    clin.trial    data.frame    18 x 3    
    ##     $drug        factor        18        
    ##     $therapy     factor        18        
    ##     $mood.gain   numeric       18

    Hay un solo marco de datos llamado clin.trial que contiene tres variables, fármaco, terapia y estado de ánimo. Presumiblemente entonces, estos datos provienen de un ensayo clínico de algún tipo, en el que a las personas se les administraron diferentes medicamentos; y los investigadores miraron para ver qué le hacían los medicamentos a su estado de ánimo. Veamos si la función summary () arroja un poco más de luz sobre esta situación:

    summary( clin.trial )
    ##        drug         therapy    mood.gain     
    ##  placebo :6   no.therapy:9   Min.   :0.1000  
    ##  anxifree:6   CBT       :9   1st Qu.:0.4250  
    ##  joyzepam:6                  Median :0.8500  
    ##                              Mean   :0.8833  
    ##                              3rd Qu.:1.3000  
    ##                              Max.   :1.8000

    Evidentemente había tres fármacos: un placebo, algo llamado “ansioso” y algo llamado “joyzepam”; y había 6 personas a las que se les administraba cada medicamento. Hubo 9 personas atendidas con terapia cognitivo-conductual (TCC) y 9 personas que no recibieron tratamiento psicológico. Y podemos ver al mirar el resumen de la variable de mood.gain que la mayoría de la gente sí mostró una ganancia de estado de ánimo (media =.88), aunque sin saber cuál es la escala aquí es difícil decir mucho más que eso. Aún así, eso no está tan mal. En general, siento que aprendí algo de eso.

    “Describir” un marco de datos

    La función describe () (en el paquete psych) es un poco diferente, y en realidad solo pretende ser útil cuando tus datos son escala de intervalo o ratio. A diferencia de la función summary (), calcula las mismas estadísticas descriptivas para cualquier tipo de variable que le des. Por defecto, estos son:

    • var. Esto es solo un índice: 1 para la primera variable, 2 para la segunda variable, y así sucesivamente.
    • n. Este es el tamaño de la muestra: más precisamente, es el número de valores que no faltan.
    • media. Esta es la media muestral (Sección 5.1.1).
    • sd. Esta es la desviación estándar (corregida por sesgo) (Sección 5.2.5).
    • mediana. La mediana (Sección 5.1.3).
    • recortado. Esto se recorta media. Por defecto es la media recortada del 10% (Sección 5.1.6).
    • loco. La mediana de la desviación absoluta (Sección 5.2.6).
    • min. El valor mínimo.
    • máx. El valor máximo.
    • gama. El rango abarcado por los datos (Sección 5.2.1).
    • sesgo. La asimetría (Sección 5.3).
    • curtosis. La curtosis (Sección 5.3).
    • se. El error estándar de la media (Capítulo 10).

    Observe que estas estadísticas descriptivas generalmente solo tienen sentido para datos que son escala de intervalo o proporción (generalmente codificados como vectores numéricos). Para las variables nominales u ordinales (generalmente codificadas como factores), la mayoría de estas estadísticas descriptivas no son tan útiles. Lo que hace la función describe () es convertir factores y variables lógicas en vectores numéricos para hacer los cálculos. Estas variables están marcadas con * y la mayoría de las veces, la estadística descriptiva de esas variables no tendrá mucho sentido. Si intenta alimentarlo con un marco de datos que incluye un vector de caracteres como variable, se produce un error.

    Con esas advertencias en mente, usemos la función describe () para echar un vistazo al marco de datos clin.trial. Esto es lo que obtenemos:

    describe( x = clin.trial )
    
    ##           vars  n mean   sd median trimmed  mad min max range skew
    ## drug*        1 18 2.00 0.84   2.00    2.00 1.48 1.0 3.0   2.0 0.00
    ## therapy*     2 18 1.50 0.51   1.50    1.50 0.74 1.0 2.0   1.0 0.00
    ## mood.gain    3 18 0.88 0.53   0.85    0.88 0.67 0.1 1.8   1.7 0.13
    ##           kurtosis   se
    ## drug*        -1.66 0.20
    ## therapy*     -2.11 0.12
    ## mood.gain    -1.44 0.13

    Como puede ver, la salida de las variables con asteriscos no tiene sentido, y debe ignorarse. Sin embargo, para la variable mood.gain, hay mucha información útil.


    This page titled 5.4: Obtención de un Resumen General de una Variable 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.