Sesión 1 Introducción a Estadística con R

1.1 Estadística: los fundamentos

La estadística es una rama de las matemáticas que se enfoca en el análisis, interpretación y presentación de datos. Los estadísticos se centran en la teoría estadística y en el desarrollo de métodos para analizar datos. Los estadísticos también pueden diseñar estudios experimentales para recopilar datos de una manera rigurosa y controlada.

En términos generales, la estadística se divide en dos áreas principales: estadística descriptiva y estadística inferencial. La estadística descriptiva se centra en la organización y presentación de datos, mientras que la estadística inferencial se ocupa de la inferencia y la predicción a partir de datos.

1.1.1 Unidad de análisis

En estadística, una unidad de análisis se refiere a la entidad o elemento individual que se estudia en una investigación o estudio estadístico.

Esta entidad puede ser una persona, un animal, un objeto, una organización, un evento, una muestra, etc. Dependiendo del objetivo del estudio y de la pregunta que se pretenda responder, la unidad de análisis puede variar.

Es importante tener en cuenta que la elección de la unidad de análisis puede tener un impacto significativo en los resultados de un estudio estadístico. Por lo tanto, es fundamental definir claramente la unidad de análisis y asegurarse de que sea coherente con los objetivos y la hipótesis de la investigación.

1.1.2 Tipos de variables y escalas de medición

Tipos de variable

En estadística, una variable es cualquier característica, propiedad o atributo que puede tomar diferentes valores y que se puede medir o observar en los elementos de una población o muestra.

Distinguimos los tipos de variables porque diferentes métodos estadísticos pueden ser aplicados a cada tipo.

Tipos Variables numéricas Variables categóricas
Características - Se expresan en términos numéricos y se pueden medir con precisión.
- Los valores representan diferentes magnitudes (cantidad) de la variable.
- No se expresan en términos numéricos y no se pueden medir con precisión.
- Se miden utilizando un conjunto de categorías o etiquetas.
Ejemplos - Ingreso anual
- Número de sobrinos
- Edad
- Número de años de estudio.
- Estado civil
- Departamento de residencia
- Tipo de música favorita.
Alias También denominadas cuantitativas. También denominadas cualitativas.

Escalas de medición

Identifica cómo es medida la variable.

Para las variables numéricas: Se utiliza la escala de intervalo: Existe una distancia específica entre cada par de valores y es comparable. Ej: Existe la misma distancia entre 1500 y 1000 soles que entre 1000 soles y 500 soles.

Para las variables categóricas: Se utiliza:

  • Escala nominal: Si las categorías no están ordenadas (no hay un alto o bajo, o comparación de intensidad). Las distintas categorías son llamadas “niveles”.

  • Escala ordinal: Es un caso particular. No son nominales porque tienen un orden natural y no son numéricas porque usan etiquetas (niveles). Ej: Nivel de satisfacción con el Poder Ejecutivo.

1.2 R: los fundamentos

1.2.1 ¿Por qué R?

R es un lenguaje de programación y un entorno de software libre orientado principalmente al análisis estadístico y la representación gráfica de datos. Desde su creación en 1993 por Ross Ihaka y Robert Gentleman en la Universidad de Auckland, R ha evolucionado para convertirse en una de las herramientas más populares y poderosas en el campo de la estadística y la ciencia de datos.

Aprender estadística con R tiene varias ventajas:

Ventaja Detalle
Flexibilidad y Personalización R ofrece un amplio rango de análisis y permite la personalización y automatización según las necesidades del usuario.
Amplio Repositorio de Paquetes La comunidad de R ha desarrollado miles de paquetes, permitiendo fácil acceso a técnicas estadísticas avanzadas.
Reproducibilidad Con R, se pueden crear análisis que otros investigadores pueden verificar y replicar fácilmente.
Representación Gráfica R destaca en la producción de gráficos de alta calidad, esenciales para la visualización de datos.
Comunidad Activa La activa comunidad de R proporciona numerosos recursos, tutoriales y foros para el aprendizaje y resolución de dudas.

1.2.2 POO

R es un lenguaje de programación que adopta el paradigma de la “programación orientada a objetos”. Esto significa que, en R, todo se considera un “objeto”, ya sea un conjunto de datos, una función o un modelo. Cada objeto tiene atributos y comportamientos asociados que determinan cómo se puede interactuar con él. Esta estructura permite a los usuarios de R organizar y manipular datos de manera coherente y sistemática. Al entender que todo en R es un objeto, se puede abordar el análisis estadístico con una visión más estructurada, lo que facilita la comprensión y aplicación de técnicas y métodos avanzados en el futuro.

Imagina que cada objeto en R es como un coche. Los “atributos” de ese coche pueden incluir su color, marca, modelo, y año de fabricación. Estos atributos describen las características específicas del coche. Ahora, piensa en los “comportamientos asociados” como las acciones que puedes realizar con ese coche: encenderlo, acelerar, frenar o encender las luces. Del mismo modo, en R, un objeto, como un conjunto de datos, podría tener atributos que describan su tamaño, tipo y estructura. Y los comportamientos asociados de ese conjunto de datos podrían incluir operaciones como filtrar, ordenar o aplicar una función estadística.

Por ejemplo, si tienes un objeto en R que es un dataframe (un tipo de estructura de datos tabular), sus “atributos” podrían incluir el número de filas y columnas, los nombres de las columnas y el tipo de datos en cada columna. Los “comportamientos asociados” de ese dataframe podrían ser operaciones como añadir o eliminar una columna, filtrar por ciertos valores o calcular estadísticas sobre una columna específica. Al comprender los atributos y comportamientos de los objetos en R, puedes manipularlos y analizarlos de manera efectiva y eficiente, al igual que un conductor experto sabe cómo manejar y cuidar su coche.

1.2.3 Los objetos

Vamos a examinar la clase de algunos de los elementos más básicos en R: los números, los caracteres y los elementos lógicos.

class(1.5)
## [1] "numeric"
# Para escribir valores character siempre entre comillas
class("rojo") 
## [1] "character"
# Para escribir valores booleanos siempre usar mayúscula.
class(TRUE) 
## [1] "logical"

En R, los datos pueden ser coercionados, es decir, forzados, para transformarlos de un tipo a otro.

as.numeric("5")
## [1] 5
as.integer(5.1)
## [1] 5
as.character(5)
## [1] "5"

Podemos asignarles etiquetas (nombres) a esos elementos.

x <- 5.5
class(x)
## [1] "numeric"
y <- "perro"
class(y)
## [1] "character"
z <- TRUE
class(z)
## [1] "logical"

Considerar que también se puede usar el signo “=”. Sin embargo, tiene algunas diferencias en cuanto a su uso en el programa.

Por ejemplo, uno puede escribir esta sentencia X <-5+5 y 5+5->X.

Sin embargo, el sistema no acepta lo siguiente: 5+5 = X

1.2.4 Los vectores

  • Un vector es una colección de uno o más datos del mismo tipo.

  • Tipo. Un vector tiene el mismo tipo que los datos que contiene. Si tenemos un vector que contiene datos de tipo numérico, el vector será también de tipo numérico. Los vectores son atómicos, pues sólo pueden contener datos de un sólo tipo, no es posible mezclar datos de tipos diferentes dentro de ellos.

  • Largo. Es el número de elementos que contiene un vector. El largo es la única dimensión que tiene esta estructura de datos.

  • NO TIENE DIMENSIÓN (dim)

Ejemplo: Vamos a crear tres vectores: uno numérico, uno de caracter y uno lógico. Podemos utilizar la función length() para medir el largo de estos (cuántos elementos contiene).

vector_numerico <- c(1, 2, 3, 4, 5)
length(vector_numerico)
## [1] 5
vector_caracter <- c("arbol", "casa", "persona")
length(vector_caracter)
## [1] 3
vector_logico<- c(TRUE, TRUE, FALSE, FALSE, TRUE)
length(vector_logico)
## [1] 5

También podemos utilizar la función class() para corroborar que cada vector tiene la misma clase de los elementos que contiene.

class(vector_numerico)
## [1] "numeric"
class(vector_caracter)
## [1] "character"
class(vector_logico)
## [1] "logical"

Tener en cuenta que los vectores también pueden tener valores perdidos (NA).

vector_con_NA <- c(1,2,3,NA,5)  
length(vector_con_NA)
## [1] 5
class(vector_con_NA)
## [1] "numeric"

1.2.5 Los factores

Un factor es un tipo específico de vector en R. Puede ser descrito como un dato numérico representado por una etiqueta.

Supongamos que tenemos un conjunto de datos que representan el género de personas encuestadas por teléfono, pero estos se encuentran capturados con los números 1 y 2.

genero <- c(1,1,1,2,2,1,2)

El número 1 corresponde a Mujer y el 2 a Hombre. A diferencia del carácter, el factor tiene NIVELES (levels).

Podemos crear un vector de tipo factor con la función factor().

genero_en_factor=factor(genero, 
       levels= 1:2,
       labels=c("Mujer", "Hombre"))
genero_en_factor
## [1] Mujer  Mujer  Mujer  Hombre Hombre Mujer  Hombre
## Levels: Mujer Hombre

En la práctica, muchas veces vamos a ver las variables de tipo factor en nuestro análisis. Por ello, debes ser muy cuidadoso en la preparación previa que debes realizar a la base de datos antes de aplicar las funciones.

Asimismo, un factor puede estar ordenado o no ordenado. Esto nos sirve, por ejemplo, para crear variables de tipo ordinal. Podemos indicarlo ello, con el argumento ordered=.

Veamos:

confianza=c(1, 1, 3, 2)
confianza_en_factor=factor(confianza, 
       levels= 1:3,
       labels=c("Bajo", "Medio", "Alto"), 
       ordered = TRUE)
confianza_en_factor
## [1] Bajo  Bajo  Alto  Medio
## Levels: Bajo < Medio < Alto

Vemos que nos indica los niveles, pero en este caso están ordenados de menor a mayor.

1.2.6 Data frames

Los data frames son estructuras de datos de dos dimensiones (rectangulares) que pueden contener datos de diferentes tipos, por lo tanto, son heterogéneas. Compuesto por vectores.

Estructura más usada para ciencia de datos.

Mientras que en una matriz todas las celdas deben contener datos del mismo tipo, los renglones de un data frame admiten datos de distintos tipos, pero sus columnas conservan la restricción de contener datos de un sólo tipo.

En términos generales, los renglones en un data frame representan casos, individuos u observaciones, mientras que las columnas representan atributos, rasgos o variables.

mi_df <- data.frame(
  "variable1" = 1:3, 
  "variable2" = c(1.2, 3.4, 4.5),
  "variable3" = as.character(c("a", "b", "c")),
  "variable4" = as.factor(c("1", "2", "3"))
  ) #Para crear un DT los vectores de insumo deben ser del mismo largo
mi_df
##   variable1 variable2 variable3 variable4
## 1         1       1.2         a         1
## 2         2       3.4         b         2
## 3         3       4.5         c         3
str(mi_df)
## 'data.frame':    3 obs. of  4 variables:
##  $ variable1: int  1 2 3
##  $ variable2: num  1.2 3.4 4.5
##  $ variable3: chr  "a" "b" "c"
##  $ variable4: Factor w/ 3 levels "1","2","3": 1 2 3

Propiedades

Un data.frame tiene:

  • Dimensión: un número de filas y un número de columnas.
dim(mi_df) #FILAS Y COLUMNAS
## [1] 3 4
  • Largo: número de casos
length(mi_df)
## [1] 4
  • Nombre de columnas: Podemos consultar el nombre de las columnas (variables) con la función names().
names(mi_df) 
## [1] "variable1" "variable2" "variable3" "variable4"

1.2.7 Índices

  • Usar índices para obtener subconjuntos es el procedimiento más universal en R, pues funciona para todas las estructuras de datos.

  • Un índice en R representa una posición.

  • Cuando usamos índices le pedimos a R que extraiga de una estructura los datos que se encuentran en una o varias posiciones específicas dentro de ella.

Ejemplos:

  • Seleccionar la columna 2:
mi_df [,2]
## [1] 1.2 3.4 4.5

Para seleccionar una columna, también podemos usar el símbolo de $. Es bastante usado en varias funciones.

mi_df$variable2
## [1] 1.2 3.4 4.5
  • Seleccionar el caso (fila) 2:
mi_df [2,]
##   variable1 variable2 variable3 variable4
## 2         2       3.4         b         2
  • Seleccionar el elemento que se encuentra en la fila 2 y la columna 2:
mi_df [2,2]
## [1] 3.4

1.2.8 Nuestras herramientas: Paquetes y funciones

PAQUETES

En R, un paquete es un conjunto de herramientas y funciones predefinidas que permiten a los usuarios realizar tareas específicas, como análisis de datos o visualización de gráficos. Los paquetes pueden ser instalados desde los repositorios de CRAN u otros lugares (como repositorios).

Para instalar un paquete necesitas escribir install.packages("nombre_del_paquete"). Luego de instalarlo, para comenzar a utilizarlo debes abrirlo con el siguiente comando library(nombre_del_paquete).

FUNCIONES

  • Las funciones son bloques de código que realizan una tarea específica. Pueden ser definidas por el usuario o pueden ser proporcionadas por un paquete (esto es lo más común).

  • Las funciones toman argumentos, que son valores que se pasan a la función para que los utilice en su tarea.

  • Los argumentos de una función son variables o valores que se pasan a la función para que sean utilizados en la tarea que se está realizando. Algunos argumentos son obligatorios, lo que significa que deben ser proporcionados para que la función pueda realizar su tarea, mientras que otros son opcionales y tienen un valor predeterminado si no se especifican.

  • Para ver qué argumentos tiene una función puedes entrar a la documentación de la misma.

  • Por ejemplo, el paquete “dplyr” es un conjunto de herramientas que se utiliza para manipular y transformar datos en R. Una de las funciones de “dplyr” es “filter”, que se utiliza para filtrar filas en un conjunto de datos. Un argumento obligatorio para la función “filter” es el conjunto de datos que se va a filtrar, mientras que un argumento opcional es la condición que se utilizará para filtrar los datos.

1.3 Importación y exploración de datos

En la práctica tenemos el reto de manipular bases de datos que se encuentran en distintos tipos de archivo. Algunas veces se encuentran en formato .xlsx (Excel regular), pero otras veces las encontramos en formato .csv (separado con comas o puntos y comas), .sav (archivos desde el SPSS), entre otros.

Para ello, tenemos dos opciones. La más sencilla es utilizar el paquete rio y utilizamos la función import(). Este paquete es una navaja suiza porque te permite abrir distintos formatos con la misma función.

library(rio)
## The following rio suggested packages are not installed: 'arrow', 'feather', 'fst', 'hexView', 'pzfx', 'readODS', 'rmatio'
## Use 'install_formats()' to install them
elecciones_2011<-import("RESULTADOS_EG_PRESIDENCIAL_2011.xls")
head(elecciones_2011,3)
##   UBIGEO DEPARTAMENTO   PROVINCIA    DISTRITO
## 1 010101     AMAZONAS CHACHAPOYAS CHACHAPOYAS
## 2 010101     AMAZONAS CHACHAPOYAS CHACHAPOYAS
## 3 010101     AMAZONAS CHACHAPOYAS CHACHAPOYAS
##       ORGANIZACIÓN_POLITICA VOTOS_VALIDOS_OP VOTOS_VALIDOS
## 1           FUERZA NACIONAL                6         11148
## 2 PARTIDO POLITICO ADELANTE               24         11148
## 3        DESPERTAR NACIONAL               35         11148
##   VOTOS_BLANCO VOTOS_NULOS NUMERO_ELECTORES VOTOS_EMITIDOS
## 1         1034         340            15748          12522
## 2         1034         340            15748          12522
## 3         1034         340            15748          12522

O también podemos utilizar el paquete readxl() que pertenece al universo de Tidyverse. Lo bueno de esta función es que cuando visualizas la data se realiza de forma más ordenada.

library(readxl)
elecciones_2011<-read_excel("RESULTADOS_EG_PRESIDENCIAL_2011.xls")
head(elecciones_2011,3)
## # A tibble: 3 × 11
##   UBIGEO DEPARTAMENTO PROVINCIA   DISTRITO   ORGANIZACIÓN_POLITICA
##   <chr>  <chr>        <chr>       <chr>      <chr>                
## 1 010101 AMAZONAS     CHACHAPOYAS CHACHAPOY… FUERZA NACIONAL      
## 2 010101 AMAZONAS     CHACHAPOYAS CHACHAPOY… PARTIDO POLITICO ADE…
## 3 010101 AMAZONAS     CHACHAPOYAS CHACHAPOY… DESPERTAR NACIONAL   
## # ℹ 6 more variables: VOTOS_VALIDOS_OP <dbl>,
## #   VOTOS_VALIDOS <dbl>, VOTOS_BLANCO <dbl>, VOTOS_NULOS <dbl>,
## #   NUMERO_ELECTORES <dbl>, VOTOS_EMITIDOS <dbl>

Si deseas utilizar esta segunda forma, puedes aplicar la función read_csv() para archivos separados con comas.

Puedes ver las primeras diez filas con:

head(elecciones_2011, 10)
## # A tibble: 10 × 11
##    UBIGEO DEPARTAMENTO PROVINCIA   DISTRITO  ORGANIZACIÓN_POLITICA
##    <chr>  <chr>        <chr>       <chr>     <chr>                
##  1 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… FUERZA NACIONAL      
##  2 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… PARTIDO POLITICO ADE…
##  3 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… DESPERTAR NACIONAL   
##  4 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… GANA PERU            
##  5 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… FONAVISTAS DEL PERU  
##  6 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… JUSTICIA, TECNOLOGIA…
##  7 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… FUERZA 2011          
##  8 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… PARTIDO DESCENTRALIS…
##  9 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… ALIANZA POR EL GRAN …
## 10 010101 AMAZONAS     CHACHAPOYAS CHACHAPO… ALIANZA SOLIDARIDAD …
## # ℹ 6 more variables: VOTOS_VALIDOS_OP <dbl>,
## #   VOTOS_VALIDOS <dbl>, VOTOS_BLANCO <dbl>, VOTOS_NULOS <dbl>,
## #   NUMERO_ELECTORES <dbl>, VOTOS_EMITIDOS <dbl>

También puedes hacerle click en Environment o colocar:

#View(elecciones)

1.3.1 Verificar el tipo de variable

Veamos las variables, podemos utilizar la función names(nombre_de_data)

names(elecciones_2011)
##  [1] "UBIGEO"                "DEPARTAMENTO"         
##  [3] "PROVINCIA"             "DISTRITO"             
##  [5] "ORGANIZACIÓN_POLITICA" "VOTOS_VALIDOS_OP"     
##  [7] "VOTOS_VALIDOS"         "VOTOS_BLANCO"         
##  [9] "VOTOS_NULOS"           "NUMERO_ELECTORES"     
## [11] "VOTOS_EMITIDOS"

Veamos si el formato es adecuado.

str(elecciones_2011)
## tibble [23,958 × 11] (S3: tbl_df/tbl/data.frame)
##  $ UBIGEO               : chr [1:23958] "010101" "010101" "010101" "010101" ...
##  $ DEPARTAMENTO         : chr [1:23958] "AMAZONAS" "AMAZONAS" "AMAZONAS" "AMAZONAS" ...
##  $ PROVINCIA            : chr [1:23958] "CHACHAPOYAS" "CHACHAPOYAS" "CHACHAPOYAS" "CHACHAPOYAS" ...
##  $ DISTRITO             : chr [1:23958] "CHACHAPOYAS" "CHACHAPOYAS" "CHACHAPOYAS" "CHACHAPOYAS" ...
##  $ ORGANIZACIÓN_POLITICA: chr [1:23958] "FUERZA NACIONAL" "PARTIDO POLITICO ADELANTE" "DESPERTAR NACIONAL" "GANA PERU" ...
##  $ VOTOS_VALIDOS_OP     : num [1:23958] 6 24 35 2971 7 ...
##  $ VOTOS_VALIDOS        : num [1:23958] 11148 11148 11148 11148 11148 ...
##  $ VOTOS_BLANCO         : num [1:23958] 1034 1034 1034 1034 1034 ...
##  $ VOTOS_NULOS          : num [1:23958] 340 340 340 340 340 340 340 340 340 340 ...
##  $ NUMERO_ELECTORES     : num [1:23958] 15748 15748 15748 15748 15748 ...
##  $ VOTOS_EMITIDOS       : num [1:23958] 12522 12522 12522 12522 12522 ...

Ok, los caracteres están como chr y las variables numéricas como num.