--- title: 'Práctica 2. Estadística Descriptiva con R' subtitle: 'Medidas descriptivas y creación de nuevas variables' output: html_document: highlight: pygments theme: cerulean toc: yes toc_float: yes word_document: toc: yes --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, eval=TRUE, message=FALSE) ``` --- \ \ \ ## Objetivos 1. Continuar utilizando las funciones del conjunto de librerías [__tidyverse__](https://www.tidyverse.org/) para la manipulación y análisis de datos, en particular: * `summarise()`: para resumir variables mediante diversos estadísticos descriptivos. * `summarise_at()`: para obtener resúmenes estadísticos aplicados a determinadas variables. * `mutate()`: para la creación de nuevas variables. 2. Familiarizarse con las funciones para el cálculo de estadísticos descriptivos básicos: * Media Aritmética: `mean()` * Desviación típica: `sd()` * Mediana: `median()` * Máximo y mínimo: `max()` y `min()` 3. Conocer la librería `moments()` para el cálculo de medidas de forma como la asimetría y el apuntamiento. \ \ \ \ ## 0. Preliminares: carga de las librerías que utilizaremos en esta práctica, y lectura del archivo de datos. ```{r} library(readxl) library(tidyverse) library(flextable) library(moments) ``` ```{r} tortugas <- read_excel("datosP1-1920.xlsx") ``` \ \ ## 1. Cálculo de múltiples medidas descriptivas mediante `summarise`. __Calcula el número de observaciones, la media, desviación típica, Asimetria, Curtosis, mínimo, máximo y Mediana de la variable LCC (NOTA: asimetría y curtosis están en library(moments)).__ ```{r} tortugas %>% summarise(n(), mean(LCC), sd(LCC), skewness(LCC), kurtosis(LCC), min(LCC),max(LCC), median(LCC)) ``` \ __Importante:__ nótese que hemos puesto `LCC` como argumento en todas las funciones menos en `n()`. Ello es debido a que la función `n()` en realidad no cuenta el número de valores de `LCC` sino el número de filas del data.frame sobre el que se está ejecutanto el `summarise` (en este caso, tortugas), que tiene 20 filas. Si escribiéramos `n(LCC)` R nos devolvería un error: ```{r error=TRUE} tortugas %>% summarise(n(LCC)) ``` \ \ \ ## 2. Mejora de la presentación __Presenta los resultados anteriores asignando un nombre a cada columna y conviértelos en una tabla (usando `flextable()`). Ajusta el ancho de columna con `autofit()` y el número de dígitos decimales con `colformat_num(digits=2)`. Por último asigna nombre a la tabla con `set_caption()`.__ ```{r} tortugas %>% summarise(media=mean(LCC), sd=sd(LCC), asimetria=skewness(LCC), apuntamiento=kurtosis(LCC), minimo=min(LCC), mediana=median(LCC), maximo=max(LCC)) %>% flextable() %>% colformat_num(digits=2) %>% fontsize(size=12,part="all") %>% autofit() %>% set_caption("Descripción de la variable LCC") ``` \ \ \ ## 3. Creación de una nueva variable utilizando `mutate()`. __Se puede obtener un valor aproximado de la superficie (en $m^2$) del caparazón mediante la siguiente expresión:__ $$ Sup = \pi \cdot \left(\frac{LCC+ACC}{400}\right)^2$$ __Calcula la superficie aproximada de los caparazones de las tortugas de la muestra.__ \ La función `mutate()` permite crear una nueva variable. Su sintaxis es de la forma: ```{r eval=FALSE} tortugas %>% mutate(superf=pi*((LCC+ACC)/400)^2) ``` De esta forma R calcula los valores de `superf` para cada tortuga de la muestra y nos los enseña por pantalla. Si simplemente quisiéramos calcular la superficie media de todos los caparazones, podríamos ejecutar: ```{r} tortugas %>% mutate(superf=pi*((LCC+ACC)/400)^2) %>% summarise(mean(superf)) ``` \ Es importante señalar que la nueva variable `superf` __no se ha guardado en ningún sitio__. Si queremos guardar esta nueva variable dentro del data.frame `tortugas` para reutilizarla más adelante en nuestro análisis de los datos, deberemos reasignar el resultado del `mutate()` de nuevo a `tortugas` del modo siguiente: ```{r} tortugas <- tortugas %>% mutate(superf=pi*((LCC+ACC)/400)^2) ``` Esta sintaxis puede leerse de la forma: > _"En `tortugas` metemos el resultado (`<-`) de coger el data.frame `tortugas` transformándolo (` %>% mutate`) mediante la creación de una nueva variable `superf` calculada como `pi*((LCC+ACC)/400)^2`"_ Podemos comprobar que ahora el data.frame `tortugas` tiene una variable más ejecutando: ```{r} View(tortugas) ``` lo que nos mostrará todas las variables en Rstudio: ![](imagenes/tortugas_Superf.png) \ \ \ ## 4. Uso de listas de funciones en `summarise()` __Describe la variable anterior mediante las mismas medidas descriptivas de la pregunta 1 de esta práctica. Simplifica dicha descripción creando una lista de funciones.__ \ Podemos crear fácilmente una lista de las funciones que queremos aplicar mediante: ```{r} listaFunciones=list(n=n, media=mean, sd=sd, asimetria=skewness, curtosis=kurtosis, min=min, mediana=median, max=max) ``` Y ahora, para aplicar esta lista de funciones a la variable `superf` ejecutamos: ```{r error=TRUE} tortugas %>% summarise_at(vars(superf), listaFunciones) ``` Como vemos, R nos ha devuelto el error unused argument (superf) . ¿A qué se debe este mensaje? Recordemos que en la pregunta 1 vimos que la función `n()` no puede recibir ningún argumento. El mensaje de error que estamos viendo se debe precisamente a que cuando se ha pasado la variable `superf` a la lista de funciones, hay una función de esa lista (la función `n()`) que recibe un argumento (`superf`) que no usa. Podemos sustituir la función `n()` por la función `length()` que sí que nos da la longitud (número de valores) de la variable a la que se aplique: ```{r} listaFunciones=list(n=length, media=mean, sd=sd, asimetria=skewness, curtosis=kurtosis, min=min, mediana=median, max=max) tortugas %>% summarise_at(vars(superf), listaFunciones) %>% flextable() %>% autofit() ``` \ \ __Nota 1:__ Dentro de `vars()` se pueden especificar varias variables, y R aplicaría la lista de funciones a cada una de ellas, si bien la presentación del resultado no es demasiado elegante: ```{r} tortugas %>% summarise_at(vars(LCC,ACC), listaFunciones) %>% flextable() ``` \ \ __Nota 2:__ En R los valores perdidos se denotan mediante `NA`. La función `length()` cuenta el número de valores que tiene una variable, incluyendo los perdidos. En la próxima práctica veremos como construir una función que cuente el número de valores válidos y perdidos que tiene una variable. \ \ \ \