Introducción a R: los fundamentos

Capacitación en R

¡Bienvenidos al “Curso de Introducción a R”!

  • ¡Aprenderemos a usar el lenguaje de programación R!

  • Usando datos administrativos familiares para las administraciones tributarias.

Algunos prerrequisitos

❌ La capacitación no requiere ningún conocimiento previo en programación estadística.

✅ Se requiere una computadora con R y RStudio instalados para completar los ejercicios.

✅ Se requiere conexión a Internet para descargar los materiales de capacitación.

¿Qué es R?

R es un lenguaje de programación con poderosas capacidades estadísticas y gráficas.

¿Por qué deberíamos usar R?

  1. R es muy flexible y poderoso—adaptable a casi cualquier tarea, (limpieza de datos, visualización de datos, econometría, análisis de datos espaciales, aprendizaje automático, web scraping, etc.)
  1. R es de código abierto y gratuito - ¡permitiendo que tanto usted como su institución ahorren dinero!
  1. R ha estado creciendo rápidamente en popularidad.
  1. R ofrece una gran interfaz - RStudio.

¿Y qué hay de Excel?

✅ Fácil de usar.

❌ Solo es bueno para conjuntos de datos pequeños.

❌ No llevamos registro de lo que hacemos.

❌ No es sencillo combinar datos.

❌ Y la lista continúa…

¿Y qué hay de STATA?

✅ Stata es ampliamente usado en economía.

✅ Fácil de aprender.

❌ Solo es bueno para conjuntos de datos pequeños.

❌ ¡Costoso!

❌ Falta de flexibilidad… ¿tú también odias keep, preserve, y restore?

Comenzando con RStudio

¡Deberías ver esto!

Si no es así, ¡asegúrate de haber abierto RStudio y no R!

Consola

Comencemos escribiendo tus scripts de R (código fuente) en el panel Source.

Puedes usar la barra de menú o Ctrl + Shift + N para crear nuevos scripts de R.

Los scripts nos ayudan a documentar y organizar los pasos que queremos realizar.

Para ejecutar un comando, escríbelo en el panel Source y presiona Ctrl+Enter (Windows) para ejecutarlo en la Consola.

El resultado aparecerá en el panel de la Consola (panel inferior izquierdo).

El panel Environment muestra todos los objetos que has creado durante tu sesión.

Usando R como una Calculadora

Operaciones Matemáticas Básicas

Una suma simple:

99 + 1
[1] 100

Cálculos más complejos:

99 + 1 * 2
[1] 101

Siguiendo las reglas matemáticas (orden de operaciones):

(99 + 1) * 2
[1] 200

Más Operaciones Matemáticas

Resta, multiplicación, división:

150 - 50
[1] 100
10 * 5
[1] 50
100 / 4
[1] 25

Potencias y raíces cuadradas:

2^3       # 2 a la potencia de 3
[1] 8
sqrt(16)  # Raíz cuadrada
[1] 4

Notación científica:

2 / 100000   # Número muy pequeño
[1] 2e-05
5e3          # 5000 en notación científica
[1] 5000

Almacenando Resultados: Objetos

En lugar de solo calcular, podemos guardar resultados para usarlos más tarde.

monto_iva = 50000

Ahora podemos usar monto_iva en otros cálculos:

monto_iva * 1.10  # Agregar 10% de penalización
[1] 55000

Podemos crear múltiples objetos:

iva_base = 50000
tasa_penalizacion = 0.10
iva_total = iva_base * (1 + tasa_penalizacion)
iva_total
[1] 55000

Reglas de Nomenclatura para Objetos

  • Usar letras minúsculas
  • Separar palabras con guión bajo (_) - esto se llama snake_case
  • Hacer nombres descriptivos pero no demasiado largos
  • No usar espacios ni caracteres especiales

Buenos nombres:

monto_iva
id_empresa
ingreso_total_2024

Malos nombres:

MontoIva         # Mayúsculas y minúsculas mezcladas
monto iva        # Tiene espacio (¡causará error!)
x1               # No descriptivo
nombre_muy_largo_que_es_dificil_de_escribir_y_leer

Comentarios: Explicando Tu Código

Usa # para agregar comentarios - R ignorará todo después de #

# Esto es un comentario - R ignora esta línea

# Calcular IVA con penalización
iva_base = 50000        # Monto de IVA en moneda local
penalizacion = iva_base * 0.05  # 5% de penalización por presentación tardía
total = iva_base + penalizacion
total
[1] 52500

Tip

Buena práctica: Comenta tu código para explicar POR QUÉ estás haciendo algo, no solo QUÉ estás haciendo.

Entendiendo las Funciones

¿Qué es una Función?

Una función es una pieza de código reutilizable que realiza una tarea específica.

Piensa en las funciones como herramientas en una caja de herramientas:

  • mean() - calcula el promedio
  • sum() - suma todos los valores
  • sqrt() - calcula la raíz cuadrada
  • round() - redondea números

Sintaxis de funciones:

nombre_funcion(argumento1, argumento2, ...)

Usando Funciones: Ejemplos

# Raíz cuadrada
sqrt(144)
[1] 12
# Redondear un número
round(3.14159, digits = 2)
[1] 3.14
# Valor absoluto
abs(-15)
[1] 15
# Trabajando con múltiples valores a la vez
montos_iva = c(50000, 75000, 90000, 45000, 82000)

# Calcular el promedio
mean(montos_iva)
[1] 68400
# Calcular el total
sum(montos_iva)
[1] 342000

Argumentos de Funciones

Las funciones pueden tener argumentos (entradas) que controlan su comportamiento.

# round() tiene dos argumentos
round(3.14159)                    # Por defecto: 0 decimales
[1] 3
round(3.14159, digits = 2)        # 2 decimales
[1] 3.14
round(3.14159, digits = 4)        # 4 decimales
[1] 3.1416

Tip

Usa ? para obtener ayuda con cualquier función:

?round
?mean
?sum

Funciones Comunes para Análisis Tributario

Funciones estadísticas:

pagos = c(50000, 75000, 90000, 45000, 82000)

mean(pagos)    # Promedio
[1] 68400
median(pagos)  # Mediana
[1] 75000
max(pagos)     # Máximo
[1] 90000
min(pagos)     # Mínimo
[1] 45000
sd(pagos)      # Desviación estándar
[1] 19882.15

Creando Tus Propias Funciones

¡Puedes crear tus propias funciones!

# Función para calcular IVA total con penalización
calcular_iva_con_penalizacion = function(monto_base, tasa_penalizacion) {
  penalizacion = monto_base * tasa_penalizacion
  total = monto_base + penalizacion
  return(total)
}

# Usar nuestra función
calcular_iva_con_penalizacion(50000, 0.05)
[1] 52500
calcular_iva_con_penalizacion(75000, 0.10)
[1] 82500

Tipos de Datos en R

Los Tres Tipos de Datos Principales

R trabaja con diferentes tipos de datos:

1. Numérico - números (con o sin decimales)

monto_iva = 50000
tasa_impuesto = 0.15

2. Carácter - texto (siempre entre comillas)

nombre_empresa = "Acme Corporation"
id_fiscal = "TAX-12345"

3. Lógico - verdadero o falso

presentado_a_tiempo = TRUE
tiene_multa = FALSE

Verificando Tipos de Datos

Usa class() para verificar el tipo de un objeto:

class(50000)
[1] "numeric"
class("TAX-12345")
[1] "character"
class(TRUE)
[1] "logical"

¿Por qué importan los tipos?

# Esto funciona (ambos son numéricos)
100 + 50

# Esto NO funciona (no se puede sumar texto)
"100" + "50"  # ¡Error!

Conversión de Tipos

A veces necesitas convertir entre tipos:

# Convertir texto a número
monto_texto = "50000"
class(monto_texto)
[1] "character"
monto_numero = as.numeric(monto_texto)
class(monto_numero)
[1] "numeric"
monto_numero + 1000  # ¡Ahora funciona!
[1] 51000
# Convertir número a texto
as.character(12345)
[1] "12345"
# Convertir a lógico
as.logical(1)   # TRUE
[1] TRUE
as.logical(0)   # FALSE
[1] FALSE

Vectores: Secuencias de Datos

¿Qué es un Vector?

Un vector es una secuencia de valores del mismo tipo.

Crear vectores con c() (combinar):

# Vector de montos de IVA
montos_iva = c(50000, 75000, 90000, 45000, 82000)
montos_iva
[1] 50000 75000 90000 45000 82000
# Vector de IDs de empresas
ids_empresas = c("FIRM_001", "FIRM_002", "FIRM_003")
ids_empresas
[1] "FIRM_001" "FIRM_002" "FIRM_003"
# Vector de estados de cumplimiento
cumplimiento = c(TRUE, TRUE, FALSE, TRUE, FALSE)
cumplimiento
[1]  TRUE  TRUE FALSE  TRUE FALSE

Operaciones con Vectores

Aritmética de vectores - las operaciones se aplican a cada elemento:

montos_iva = c(50000, 75000, 90000, 45000, 82000)

# Agregar 10% de penalización a todos
montos_iva * 1.10
[1] 55000 82500 99000 49500 90200
# Agregar una cantidad fija a todos
montos_iva + 5000
[1] 55000 80000 95000 50000 87000
# Dividir todos por 1000
montos_iva / 1000
[1] 50 75 90 45 82

Estadísticas de Vectores

Aplicar funciones a vectores completos:

montos_iva = c(50000, 75000, 90000, 45000, 82000)

mean(montos_iva)     # Promedio
[1] 68400
sum(montos_iva)      # Total recaudado
[1] 342000
max(montos_iva)      # Mayor pago
[1] 90000
min(montos_iva)      # Menor pago
[1] 45000
length(montos_iva)   # Número de empresas
[1] 5

Funciones Útiles para Crear Vectores

Secuencias:

# Números del 1 al 10
1:10
 [1]  1  2  3  4  5  6  7  8  9 10
# Años
años = 2020:2024
años
[1] 2020 2021 2022 2023 2024

Repetición:

# Repetir un valor
rep(0.15, times = 5)  # Tasa impositiva estándar
[1] 0.15 0.15 0.15 0.15 0.15
# Repetir un patrón
rep(c("Q1", "Q2", "Q3", "Q4"), times = 2)
[1] "Q1" "Q2" "Q3" "Q4" "Q1" "Q2" "Q3" "Q4"

Secuencias Más Complejas

# Secuencia con función seq()
seq(from = 0, to = 100, by = 10)
 [1]   0  10  20  30  40  50  60  70  80  90 100
# Longitud específica
seq(from = 0, to = 1, length.out = 5)
[1] 0.00 0.25 0.50 0.75 1.00
# Crear IDs de empresas
paste0("FIRM_", 1:5)
[1] "FIRM_1" "FIRM_2" "FIRM_3" "FIRM_4" "FIRM_5"
# Con separador
paste("Year", 2020:2024, sep = "_")
[1] "Year_2020" "Year_2021" "Year_2022" "Year_2023" "Year_2024"

Indexación: Accediendo a Elementos del Vector

Usa [] para acceder a elementos específicos:

montos_iva = c(50000, 75000, 90000, 45000, 82000)

# Primer elemento
montos_iva[1]
[1] 50000
# Tercer elemento
montos_iva[3]
[1] 90000
# Último elemento
montos_iva[length(montos_iva)]
[1] 82000

Indexación Múltiple

montos_iva = c(50000, 75000, 90000, 45000, 82000)

# Múltiples elementos
montos_iva[c(1, 3, 5)]
[1] 50000 90000 82000
# Rango de elementos
montos_iva[2:4]
[1] 75000 90000 45000
# Todos excepto algunos
montos_iva[-1]           # Excluir primero
[1] 75000 90000 45000 82000
montos_iva[c(-1, -5)]    # Excluir primero y quinto
[1] 75000 90000 45000

Indexación Lógica

Encontrar elementos que cumplen una condición:

iva = c(50000, 75000, 90000, 45000, 82000)

# ¿Qué empresas pagaron más de 60,000?
iva > 60000
[1] FALSE  TRUE  TRUE FALSE  TRUE

Usar vectores lógicos para filtrar:

# Obtener solo montos superiores a 60,000
iva_alto = iva[iva > 60000]
iva_alto
[1] 75000 90000 82000

Múltiples condiciones:

# IVA entre 50,000 y 80,000
iva_moderado = iva[iva >= 50000 & iva <= 80000]
iva_moderado
[1] 50000 75000

Valores Faltantes (NA)

Entendiendo los Datos Faltantes

En datos reales de administración tributaria, los valores faltantes son comunes:

  • Empresas que aún no han presentado
  • Registros incompletos
  • Errores de entrada de datos

En R, los valores faltantes se representan como NA (No Disponible)

# Algunas empresas aún no han presentado declaraciones de IVA
iva_declarado = c(50000, 75000, NA, 90000, 45000, NA, 82000)
iva_declarado
[1] 50000 75000    NA 90000 45000    NA 82000

El Problema con NA

¡Las operaciones matemáticas con NA devuelven NA!

# Intentar calcular el promedio
mean(iva_declarado)
[1] NA

Warning

¡Cualquier cálculo que involucre NA devolverá NA a menos que lo manejes explícitamente!

Manejando NA: El Argumento na.rm

La mayoría de las funciones estadísticas tienen un argumento na.rm (NA remove):

# Calcular promedio, eliminando valores NA
mean(iva_declarado, na.rm = TRUE)
[1] 68400
# Otras funciones funcionan de la misma manera
sum(iva_declarado, na.rm = TRUE)
[1] 342000
max(iva_declarado, na.rm = TRUE)
[1] 90000

Tip

¡Siempre verifica tus datos en busca de valores faltantes y decide cómo manejarlos!

Detectando Valores Faltantes

# Verificar qué valores faltan
is.na(iva_declarado)
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
# Contar cuántos faltan
sum(is.na(iva_declarado))
[1] 2
# ¿Qué posiciones tienen valores faltantes?
which(is.na(iva_declarado))
[1] 3 6

Trabajando con Casos Completos

# Obtener solo valores no faltantes
iva_completo = iva_declarado[!is.na(iva_declarado)]
iva_completo
[1] 50000 75000 90000 45000 82000

Ejemplo práctico: Tasa de cumplimiento

ids_empresas = paste0("FIRM_", 1:7)

total_empresas = length(iva_declarado)
empresas_presentadas = sum(!is.na(iva_declarado))
tasa_cumplimiento = (empresas_presentadas / total_empresas) * 100

cat("Tasa de Cumplimiento:", round(tasa_cumplimiento, 1), "%\n")
Tasa de Cumplimiento: 71.4 %
# ¿Qué empresas no presentaron?
no_cumplieron = ids_empresas[is.na(iva_declarado)]
no_cumplieron
[1] "FIRM_3" "FIRM_6"

Ejercicio 1: Fundamentos de R

10:00

Parte 1: Objetos y Cálculos

  1. Crea un objeto monto_base con valor 125000
  2. Crea un objeto tasa_impuesto con valor 0.15 (15%)
  3. Calcula el monto del impuesto y guárdalo en impuesto_adeudado
  4. Agrega una penalización del 5% a impuesto_adeudado y guárdalo en pago_total

Parte 2: Usando Funciones

  1. Redondea pago_total al entero más cercano
  2. Calcula la raíz cuadrada de monto_base
  3. Usa la función abs() para obtener el valor absoluto de -5000

Ejercicio 1: Soluciones

# Parte 1: Objetos y Cálculos
monto_base = 125000
tasa_impuesto = 0.15
impuesto_adeudado = monto_base * tasa_impuesto
pago_total = impuesto_adeudado * 1.05

# Parte 2: Usando Funciones
round(pago_total)
sqrt(monto_base)
abs(-5000)

Ejercicio 2: Fundamentos de R

10:00

Parte 1: Creando Vectores

  1. Crea ids_empresas: “FIRM_001” hasta “FIRM_006” (usa paste0() y 1:6)
  2. Crea montos_iva: 50000, 75000, NA, 90000, 45000, NA
  3. Crea años: 2020 a 2025 usando :
  4. Crea tasa_estandar: repite 0.15 seis veces usando rep()

Parte 2: Operaciones con Vectores

  1. Calcula el IVA promedio (¡maneja los NAs!)
  2. Calcula el IVA total recaudado
  3. Multiplica todos los montos_iva por 1.05 para agregar 5% de penalización

Ejercicio 2: Fundamentos de R

Parte 3: Indexación

  1. Obtén el monto de IVA de la tercera empresa
  2. Obtén los montos de IVA de las empresas 2, 4 y 5
  3. Encuentra todos los montos de IVA mayores a 60000

Parte 4: Datos Faltantes

  1. ¿Cuántas empresas no han declarado IVA?
  2. Crea un vector lógico que muestre qué empresas tienen datos faltantes
  3. ¿Qué IDs de empresa corresponden a datos de IVA faltantes?

Soluciones: Ejercicio 2

# Parte 1: Creando Vectores
ids_empresas = paste0("FIRM_", sprintf("%03d", 1:6))
montos_iva = c(50000, 75000, NA, 90000, 45000, NA)
años = 2020:2025
tasa_estandar = rep(0.15, times = 6)

# Parte 2: Operaciones con Vectores
mean(montos_iva, na.rm = TRUE)
sum(montos_iva, na.rm = TRUE)
montos_iva * 1.05

# Parte 3: Indexación
montos_iva[3]
montos_iva[c(2, 4, 5)]
montos_iva[montos_iva > 60000 & !is.na(montos_iva)]

# Parte 4: Datos Faltantes
sum(is.na(montos_iva))
is.na(montos_iva)
ids_empresas[is.na(montos_iva)]

Extendiendo R con Paquetes

¿Qué son los Paquetes?

Los paquetes de R son colecciones de funciones creadas por la comunidad.

Piensa en R base como un teléfono inteligente, ¡y los paquetes como aplicaciones que instalas!

Dos pasos para usar un paquete:

  1. Instalarlo (una vez): install.packages("nombrePaquete")
  2. Cargarlo (cada sesión): library(nombrePaquete)

Instalando y Cargando Paquetes

# Instalar un paquete (solo se necesita una vez)
install.packages("ggplot2")

# Cargar el paquete (necesario cada vez que inicias R)
library(ggplot2)

# ¡Ahora puedes usar funciones de ggplot2!

Note

Piénsalo así:

  • Instalar = Comprar un libro y ponerlo en tu estante
  • Cargar = Sacar el libro del estante para leerlo

Paquetes Populares para Análisis Tributario

Algunos paquetes que usarás en este curso:

dplyr - Manipulación y transformación de datos

ggplot2 - Creación de visualizaciones profesionales

readr / readxl - Lectura de archivos CSV y Excel

data.table - Operaciones rápidas en conjuntos de datos grandes

lubridate - Trabajo con fechas

Tip

¡Aprenderemos estos paquetes en los próximos módulos!

Resumen

Lo que Hemos Aprendido Hoy

  • Interfaz de RStudio - dónde escribir y ejecutar código
  • R como calculadora - operaciones aritméticas básicas
  • Objetos - almacenar valores para usar después
  • Funciones - herramientas reutilizables que realizan tareas
  • Tipos de datos - numérico, carácter, lógico
  • Vectores - secuencias de datos
  • Operaciones con vectores - aritmética y filtrado
  • Valores faltantes - manejar datos incompletos con NA
  • Paquetes - extender las capacidades de R

Conceptos Clave para Recordar

Siempre guarda tu trabajo en scripts - ¡no solo en la consola!

Las funciones son tus amigas - usa help() cuando no estés seguro

Los vectores están en todas partes - son la base de los datos en R

Maneja los NAs explícitamente - usa na.rm = TRUE en los cálculos

Comenta tu código - ¡tu yo futuro te lo agradecerá!

¡Gracias!

Preguntas?

Note

Próximos pasos:

  • Practica con los ejercicios proporcionados
  • Explora las funciones de ayuda (?nombre_funcion)
  • ¡Prepárate para el próximo módulo sobre importación de datos!