Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
EPG3308: Computación Estadística
Clase 01: Introducción a R
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
¡Bienvenidos al Magíster en Estadística!
¡Y al Curso de Computación Estadística!
EPG3308 Computación Estadística
¿Computación Estadística?
Aprender a utilizar un Programa para realizar Análisis Estadísticos.
Metodología de Aprendizaje
Computación
Estadística
En Estadística,
¿Para qué?
Tomar Decisiones
¡Necesitamos un programa para hacer todo esto!
En este curso veremos:
R es un Lenguaje de Programación diseñado específicamente para análisis estadístico.
Glosario de Programación
Programación: Acción y efecto de programar.
Programar: Proceso de crear instrucciones para un computador de modo que este ejecute las instrucciones establecidas.
Lenguaje de Programación: dialecto específico utilizado para programar.
Sintaxis: son las reglas del lenguaje de programación sobre cómo estructurar las palabras de este lenguaje para que sea funcional.
Dinámica de Programación
Dinámica Realista de Programación
Ejemplo de un código en R
¿Qué hará este código?
¿Por qué usar R?
¿Cómo se aprende a programar en u otro lenguaje?
Corregir los errores enseña más que cien cursos
Hoy aprender a programar es más fácil que nunca
¿Por qué usar R y no Python, o Julia, u otro lenguaje?
Nota
Python o Julia siguen siendo excelentes opciones para estadística clásica.
Instalar
Escoger el repositorio chileno para descargar R.
Interfaz Gráfica mejorada para R
# !Esto es un comentario!
##### ¡Esto tambien es un comentario!
# Copiar desde el boton en la esqina superior derecha de este cuadro.
EPG3308: Computación Estadística
Clase 02: Uso de R Básico
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
¿Cómo se aprende a programar en u otro lenguaje?
Como ejecutar código en R
R La Calculadora
R como Calculadora
Suma con + y Resta con -
R como Calculadora
Multiplicación y División
Potencias y Raíces
R como Calculadora
()
para agrupar sus operaciones y salir de duda.R como Calculadora
()
para agrupar sus operaciones y salir de duda.R como Calculadora
()
para agrupar sus operaciones y salir de duda.¡Actividad de Cinco Minutos!
\[F = 32 + C \times \frac{9}{5}\] 2. Si usted obtuvo un promedio de notas de laboratorios de \(3.5\), un promedio de tareas de \(4.2\), y un examen de \(4.5\), ¿aprueba el curso?
¡Actividad de Cinco Minutos!
Si se obtiene un puntaje \(p < E\cdot p_{max}\), \[\text{Nota} = 1 + 3\cdot\frac{1}{Ex}\cdot\frac{p}{p_{max}}.\]
Mientras que si se obtiene un puntaje \(p \geq E \cdot p_{max}\), \[\text{Nota} = 4 + 3\cdot\frac{p - Ex \cdot p_{max}}{p_{max}\cdot ( 1- Ex)}.\]
¿Qué nota obtuvo usted si obtuvo 25 puntos en una prueba de 30 puntos como máximo bajo una exigencia del 80%?
¡Actividad de Cinco Minutos!
Fuente: J. Pumarino
Texto en R
Escribir e Imprimir Texto en Consola
Sintaxis para texto
Impresión de texto en consola
cat()
: concatena texto e imprime en la consola.
cat
de concatena.Error in parse(text = input): <text>:1:8: unexpected symbol
1: cat(No se
^
\n
hace un salto de línea.cat()
es una función.
Función print(x)
: si x
es texto, (sólo) lo imprime. Si x
es otro objeto, imprime los atributos definidos a ser impresos.
cat
para manipular texto.Función paste(x, y,...)
: pega los textos x
y y
separándolos por un espacio.
cat
, pero cat
sólo imprime y devuelve texto impreso.¡Actividad de Cinco Minutos!
cat
, concatene en una única frase el siguiente poema de Pablo Neruda:Punto
No hay espacio más ancho que el dolor,
no hay universo como aquel que sangra.
cat
y con todo el poema en un único texto, use \n
para que al imprimir el poema en la consola se haga un salto de línea tras la coma del poema. Observe qué ocurre si usa print
para imprimir el mismo texto.¡Actividad de Cinco Minutos!
cat
y con todo el poema en un único texto, use \n
para que al imprimir el poema en la consola se haga un salto de línea tras cada salto incluido por el poeta.Océano
Cuerpo más puro que una ola,
sal que lava la línea,
y el ave lúcida
volando sin raíces.
Creando Objetos en R
Nombre <- Elemento Almacenado como "Nombre"
[1] -25900
FondosTotales
recibió cambios (ficticios) y tiene nuevo valor.Se puede usar =
en vez de <-
pero puede llevar a confusiones.
Definir objetos mejora la legibilidad del código.
Acerca nombres para objetos:
No pueden tener espacios dentro del nombre. Ej: mi objeto <- 5
No pueden llevar ciertos carácteres especiales. Ej: valor$ <- 5
, valor& <- 5
No pueden iniciar con un número. ej: 1objeto <- 5
Se recomienda no usar palabras reservadas para otras funciones u otros objetos. Ej: print <- 5
¡Nombres de los objetos son sensible a mayúsculas y otras puntuaciones!
Valor <- 1000
TEXTO <- "Esto es un texto!"
datos_2 <- mtcars # Tabla de Datos guardada en R.
lstas <- list()
secuencias <- c(10, 400, 200, 500)
print(valor)
Error: objeto 'valor' no encontrado
Error: objeto 'texto' no encontrado
Error: objeto 'datos2' no encontrado
Error: objeto 'listas' no encontrado
Error: objeto 'secuencia' no encontrado
Buenas prácticas para asignación de nombres
Funciones en R
Funciones: bloque de código que posee un nombre asignado y realiza una tarea específica.
Sintaxis para crear funciones
Sintaxis para crear funciones
NombreFuncion <- function(Argumento1, Argumento2, ...){
## No dar ningun argumento tambien es opcion.
## Aqui dentro se escriben todo el procedimiento
## que se desea ejecutar cuando NombreFuncion es llamada.
## Si se desea que la funcion retorne un
## objeto tras su ejecucion:
return(Objeto)
## Tambien es opcion que no entregue nada.
}
Considere la función Funcion(Argumento, X_Y, Z)
.
Suponga, para este caso, que para que la función funcione, los tres argumentos deben recibir valores numéricos.
Cualquiera de las siguientes opciones son sintaxis válidas en R:
Ejemplos:
Ejemplos:
[1] "0 grados Celsius son 32 grados Farenheit."
[1] "30 grados Celsius son 86 grados Farenheit."
[1] "100 grados Celsius son 212 grados Farenheit."
[1] "220 grados Celsius son 428 grados Farenheit."
Ejemplos:
¡Actividad Bonificada!
Construya una función que reciba de argumentos las notas de la Tarea 1 y 2 y entregue como salida el mensaje Promedio de Laboratorios = NOTA OBTENIDA.
Construya una funcion que reciba de argumentos las notas de los laboratorios 1, 2, 3, y 4, las tareas 1 y 2, y el examen, y que calcule la nota final del curso. La nota final debe entregarla junto a un mensaje acorde.
Muestre evidencia de que realizó el resto de actividades de esta clase.
. . .
Continúa….
¡Actividad Bonificada!
Escriba una función que tome como argumentos una nota y un porcentaje de exigencia, y que devuelva la nota ajustada a un nuevo porcentaje de exigencia, asumiendo que la nota original corresponde a un 50% de exigencia.
Escriba una función que reciba tantos argumentos como evaluaciones haya en el curso, además de un porcentaje de exigencia. La función deberá recalcular la nota final del curso ajustándola al porcentaje de exigencia indicado, asumiendo que las evaluaciones originales corresponden a un 50% de exigencia.
Estructura de Datos en R
Vectores de Datos
c()
(combine) para crear y guardar un vector:Nombre <- c(Elemento1, Elemen2, Elem3, ...)
Funciones útiles de R para crear vectores:
a:b
: crea secuencia de números enteros desde a
hasta b
.seq(from, to, by, ...)
: crea secuencia numérica desde from
hasta to
dando saltos de según by
.Funciones útiles de R para crear vectores:
rep(x, times, length.out, each)
: repite el o los valores x
dependiendo de si se entrega times
, length.out
, o each
.
times
: repite x
un número times
de veces.rep(x, times, length.out, each)
:
each
: repite cada elemento de x
un número each
de veces.length.out
: repite x
hasta que vector sea de largo length.out
.Ayuda de R
help(funcion)
- ?funcion
Estructura de Documentación de Ayuda
EPG3308: Computación Estadística
Clase 03: Estructura de Datos
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
Hoy veremos:
1. Vectores de Datos
c()
(combine) para crear y guardar un vector:Nombre <- c(Elemento1, Elemen2, Elem3, ...)
seq
y rep
.Veremos:
Acceso a elementos de vector con vector[posicion]
:
Acceder a un único elemento:
[1] 4
[1] 4.5
vector[posicion]
:vector[-posicion]
[1] 4.5 4.7 5.2 6.0 7.0
[1] 4.0 4.5 4.7 5.2 6.0
Modificar o añadir elementos de un vector
vector[indices] <- vector2
Funciones útiles:
length(vector)
: entrega el numero de elementos contando NAs.sort(vector)
: ordena los elementos del vector.rank(vector)
: entrega el ranking de los elementos según su valor.rev(vector)
: invierte el orden de los elementos del vector.unique(vector)
: entrega un vector en que se eliminan los valores repetidos de vector
.table(vector)
: tabla de frecuencia de los elementos de vector
.Tip
Tip: Cuando necesiten hacer algo específico pregúntense:
¿existe una función que ya lo haga?
Matemática con Vectores:
Sumas, restas, productos, divisiones, potencias y otras operaciones sí funcionan entre vectores.
Operación entre Vector y Escalar
Esta cualidad de R es llamada Cálculos Vectorizados.
Más eficientes que recorrer cada elemento, aplicar la operación deseada, y continuar con el siguiente elemento.
mivector <- c(4.8, 5.3, 3.8, 6.1, 3.9, 4.4, 2.6, 1.8, 0.4, 0.5)
## Funcion que eleva al cuadrado cada elemento de un vector
vectoralcuadrado <- function(){
resultado <- c()
for(i in 1:10){
resultado[i] <- mivector[i]^2
}
return(resultado)
}
## Comparacion en nanosegundos de tiempos de computo entre
## calculo vectorizado y escalar
microbenchmark::microbenchmark(mivector^2, vectoralcuadrado(), times = 1000)
Reciclaje de elementos:
Advertencia
Preferir no reciclar. Operar con vectores de igual tamaño.
Matemática con Vectores
sum(vector)
: Calcula la suma de todos los elementos.prod(vector)
: Calcula el producto de todos los elementos.mean(vector)
: Calcula el promedio entre los elementos.median(vector)
: Encuentra la mediana de los elementos.var(vector)
: Calcula la varianza del vector.sd(vector)
: Calcula la desviación estándar.summary(vector)
: calcula múltiples estadísticas descriptivas.min(vector)
: Encuentra el valor mínimo.max(vector)
: Encuentra el valor máximo.quartile(vector, prob)
: entrega el cuartil que acumula prob
del vector dado.¡Actividad de Diez Minutos!
El archivo DataC03.RData
se carga con el comando load("DataC03.RData")
y contiene tres vectores con información de una muestra de estudiantes y sus puntajes en una prueba de competencias matemáticas. Los vectores tienen los nombres edad
, comuna
y puntuacion
.
Corrija el registro de la posición 97 en edad. Cree un nuevo cetor llamado edad2
. ¿Habrá otro valor mal codificado?
Siguiendo las recomendaciones de asignaciones de nombres a objetos, cree tres vectores con las edades de los estudiantes y tres vectores con las puntuaciones, agrupados por comuna.
¡Actividad de Diez Minutos!
Calcule estadísticas descriptivas (promedio, mediana, desviación estándar, mínimo y máximo) de las edades de los estudiantes agrupadas por comuna.
Calcule estadísticas descriptivas (promedio, mediana, desviación estándar, mínimo y máximo) de las puntuaciones obtenidas por los estudiantes agrupadas por comuna.
2. Matrices
\[ \begin{pmatrix} 3 & 17 & 8 & 12 \\ 15 & 4 & 22 & 7 \\ 9 & 6 & 13 & 19 \\ \end{pmatrix} \]
Note
Un vector es una matriz de una única columna.
2. Matrices
matrix(vector, nrow, ncol, byrow)
: crea una función en base a vector
con nrow
filas, ncol
columnas, y rellenada por filas o columnas según byrow
.
\[ \begin{pmatrix} 3 & 17 \\ 15 & 4 \\ \end{pmatrix} \]
2. Matrices
Ejemplo 1:
Ejemplo 2:
row.names
y col.names
¡Actividad de Cinco Minutos!
Utilice los datos del archivo Data03.RData
para hacer lo siguiente:
Crear una matriz de dos columnas usando la función matrix
que contenga los datos de los vectores edad
y puntuacion
. Coloque nombres adecuados a las columnas de la matriz.
Crear una matriz de tres columnas usando la función cbind
que contenga los datos de los vectores edad
, comuna
, y puntuacion
. Coloque nombres adecuados a las columnas de la matriz. ¿Qué se observa en la matriz resultante?
Matemática elemental con matrices
Funciones por columnas o filas con matrices
colSums(matriz)
: Sumar datos por cada columna.rowSums(matriz)
: Sumar datos por fila columna.colMeans(matriz)
: Promediar datos por cada columna.rowMeans(matriz)
: Promediar datos por cada fila.apply
: Aplicar una función cualquier por fila o columnas.apply(matriz, fila_o_columna, funcion)
Funciones por columnas o filas con matrices
apply(matriz, fila_o_columna, funcion_a_aplicar)
Acceder a elementos de matrices
matriz[filas, columnas]
Funciones útiles para matrices
dim(matriz)
: entrega el número de filas y columnas de una matriz.nrow(matriz)
y ncol(matriz)
: lo mismo que la función anterior.diag(matriz)
: entrega un vector con los elementos ubicados en la diagonal de la matriz.¡Actividad Bonificada!
El archivo Clase03_notas.RData
contiene una matriz con las notas de los estudiantes de cierto curso.
Listas
Colección de elementos de distinta naturaleza (numérico, texto, tablas, etc.)
Crear lista con list()
Acceder a los elementos con Lista[[ elemento ]]
Si elementos tienen nombres, pueden ser llamados con Lista$Nombre
.
3. Listas
3. Listas
[1] 1 1 1 1
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
7 10 18
8 10 26
9 10 34
10 11 17
11 11 28
12 12 14
13 12 20
14 12 24
15 12 28
16 13 26
17 13 34
18 13 34
19 13 46
20 14 26
21 14 36
22 14 60
23 14 80
24 15 20
25 15 26
26 15 54
27 16 32
28 16 40
29 17 32
30 17 40
31 17 50
32 18 42
33 18 56
34 18 76
35 18 84
36 19 36
37 19 46
38 19 68
39 20 32
40 20 48
41 20 52
42 20 56
43 20 64
44 22 66
45 23 54
46 24 70
47 24 92
48 24 93
49 24 120
50 25 85
3. Listas
lapply(Lista, Funcion)
para aplicar una función a los elementos de una lista.4. Data Frames
4. Data Frames
str
(structure):'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
tabla$variable
5. Lectura de Datos
Archivos .RData
se leen con load("archivo.RData")
.
Otros archivos: asistente de carga de datos.
5. Lectura de Datos
From Text (readr)
para archivos .txt y .csv.5. Lectura de Datos
Tip
Copiar código de carga y pegarlo en el script.
5. Lectura de Datos
EPG3308: Computación Estadística
Clase 04: Operaciones Lógicas y Control de Flujo
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
Operaciones Lógicas
Comuna Edad puntuacion
1 La Florida 13 49.2
2 La Florida 14 100.0
3 Macul 13 20.0
4 La Florida 14 57.6
5 La Florida 15 93.6
6 La Florida 14 79.2
La Florida
?Operación Lógica
base$Comuna == "La Florida"
==
evalúa qué elementos de base$Comuna
son iguales a La Florida
.Observaciones
TRUE
y FALSE
se pueden abreviar como T
y F
.
R interpreta TRUE
y FALSE
como un valor 1 y 0.
[1] 0
[1] 3
[1] 0.6
TRUE
y FALSE
Operadores Lógicos más comunes de R
Operador | Descripción |
---|---|
== |
Igual a. Devuelve TRUE si ambos operandos son iguales. |
!= |
Diferente de. Devuelve TRUE si los operandos son distintos. |
> |
Mayor que. Devuelve TRUE si el operando de la izquierda es mayor. |
< |
Menor que. Devuelve TRUE si el operando de la izquierda es menor. |
>= |
Devuelve TRUE si el operando de la izquierda es mayor o igual. |
<= |
Devuelve TRUE si el operando de la izquierda es menor o igual. |
& |
AND lógico. Devuelve TRUE si ambos operandos son TRUE en cada posición. |
| |
OR lógico. Devuelve TRUE si al menos uno de los operandos es TRUE en cada posición. |
! |
Negación lógica. Devuelve TRUE si el operando es FALSE , y viceversa. |
Ejemplos
==
y !=
¡Advertencia!
A pesar de que teóricamente dos números sean iguales, ¡¡computacionalmente pueden no serlo!!
\[(\sqrt{2})^2 = 2\]
Error de Redondeo
Casos comunes de Errores de Redondeo
¿Por qué pasa esto?
Solución
Comparar números según una tolerancia.
\[\text{Si } |a - b| < \text{Tolerancia} \quad \Rightarrow \quad a \approx b \]
>
, <
, >=
, <=
.¿Cómo evaluar que se cumplan múltiples condiciones?
Operador &
Condicion1 & Condicion2
¿Cómo evaluar que se cumplan al menos una condición?
Operador |
Condicion1 | Condicion2
Negación Lógica con !
Comuna == "San Joaquin" & Edad >= 14
Comuna Edad puntuacion
11 San Joaquin 14 25
15 San Joaquin 14 38
31 San Joaquin 14 50
52 San Joaquin 14 88
!(Comuna == "San Joaquin" & Edad >= 14)
!
invierte todos los TRUE
y FALSE
:¿Qué buscan realizar estas operaciones?
14 < Edad & Edad < 16
!(14 < Edad & Edad < 16)
!(Comuna == "San Joaquin" & Comuna == "Macul")
Funciones útiles
which(vector_logico)
: entrega las posiciones en que se encuentran los TRUE
.which.min(numeros)
y which.max(numeros)
: da posición del menor y mayor valor, respectivamente.Funciones útiles
vec1 %in% vec2
: evalúa si los elementos de vec1
se encuentran en vec2
.[1] FALSE FALSE TRUE TRUE
all(cond1, cond2, ...)
: entrega TRUE
si todas las condiciones se cumplen y FALSE
si no.
any(cond1, cond2, ...)
: entrega TRUE
si al menos una de las condiciones se cumplen y FALSE
si no.
all.equal(x,y)
: evalúa si dos objetos son idénticos o no (incluye grado de tolerancia).
Actidad de Práctica
Cargue en R la tabla del archivo pokemon.csv
.
Filtre la tabla según las filas que cumplan type1 == "water"
usando tabla[tabla$type1 == "water,]
.
Filtre la tabla según las filas que cumplan type1 == "fire"
.
Filtre la tabla según las filas que cumplan type1 == "fire"
y type2 == "flying"
.
Filtre la tabla según las filas que cumplan type1 == "fire"
o type1 == "water"
.
Control de Flujo
Control de Flujo: if-else
if(condicion a evaluar){
# Código evaluado si se cumple condición
}else{
# Código evaluado si NO se cumple condición
}
Control de Flujo: if-else
Ejemplo: calculadora de notas según exigencia.
\[ \text{Nota} = \begin{cases} 1 + 3\frac{p}{Ex\cdot p_{max}}, & \text{si } p < Ex\cdot p_{max}, \\ 4 + 3\frac{p - Ex \cdot p_{max}}{p_{max}(1 - Ex)}, & \text{si } p \geq Ex\cdot p_{max}. \end{cases} \]
Observaciones
if
puede venir cualquier operación lógica de interés.if(comuna == "A" & edad > 50 & ptje == 10 & ...)
else if()
:Bucles for
Permiten recorrer cada elemento de un vector y realizar una acción con cada uno de ellos.
Sintaxis:
Ejemplos
Importante
Usar for
cuando no haya una función vectorizada en R que haga lo mismo, o cuando necesite hacer muchos cálculos dentro de cada iteración.
Cálculos vectorizados son siempre más rápidos
for
vs sumar con función sum
:Aplicación combinando if-else
y for
Calcular nota de alumnos donde la exigencia cambia según comuna:
San Joaquín: 50% exigencia
Macul: 60% exigencia
La Florida: 65% exigencia
Solución:
Notas <- c()
for(i in 1:nrow(base)){
if(base$Comuna[i] == "San Joaquin"){
Notas[i] <- NotaEPG3308(p = base$puntuacion[i],
pMax = 100,
Ex = 0.50)
}else if(base$Comuna[i] == "Macul"){
Notas[i] <- NotaEPG3308(p = base$puntuacion[i],
pMax = 100,
Ex = 0.60)
}else{
Notas[i] <- NotaEPG3308(p = base$puntuacion[i],
pMax = 100,
Ex = 0.65)
}
}
Bucle while
Ejemplos:
¡Actividad Bonificada!
Resuelva cada caso utilizando procedimientos vectorizados y utilizando control de flujo (if-else
y/o for
)
Construya una función que reciba un vector de notas e imprima un mensaje indicando si alguien obtuvo una nota 7.0 o no.
Usando el archivo Clase03_notas.R
y las notas calculadas previamente, escriba un código que recorra el vector de notas e imprima un mensaje para cada una, según estos casos:
EPG3308: Computación Estadística
Clase 05: Herramientas Gráficas
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
Gráficos en R Base
Análisis de Estadísticas descriptivas:
Concentraciones de Tratamientos Biológicos bajo 4 Experimentos
Experimento | Media | Desv. estándar | Mínimo | Máximo |
---|---|---|---|---|
Exp 1 | 0.20 | 0.40 | 0.00 | 1.00 |
Exp 2 | 0.40 | 0.05 | 0.10 | 0.70 |
Exp 3 | 0.60 | 0.08 | 0.20 | 1.00 |
Exp 4 | 0.80 | 0.25 | 0.30 | 1.00 |
¿Qué podemos decir de estos resultados?
¿Por qué usar graficos para visualizar información?
Cómo NO graficarán los alumnos de este curso:
🤨🤨🤨
Cómo sí graficarán los alumnos de este curso:
🧐🧐😇😇
Consideraciones
Dedicar tiempo a la confección de gráficos.
Presentar gráficos en base a una historia que se desea contar.
No todo gráfico es interesante de ver.
No sobrecargar los gráficos.
Reflexionar: ¿de cuántas maneras puedo presentar los mismos resultados?
R puede no ser la mejor herramienta para hacer un gráfico.
Veremos:
¿Cómo estudiamos la distribución de una variable?
Distribución de una variable numérica
Con qué forma y dónde se distribuyen los valores observados de una variable.
Histogramas
Histogramas con hist(x)
Advertencia
Imagen sensible (disculpas correspondientes)
hist(datos[,1],
main = "main asigna un titulo al grafico",
xlab = "xlab modifica etiqueta del Eje X",
ylab = "ylab modifica etiqueta del Eje Y",
xlim = c(-4,4), # Modificar rango de eje X
ylim = c(0,120), # Modificar rango de eje y.
freq = TRUE, # ¿Frecuencia absoluta (TRUE) o relativa/densidad (FALSE)?
col = "lightblue2", # Color de relleno
border = "lightblue4", # Color de borde
las = 1, # Etiquetas eje Y rotadas
breaks = 15 # Numero de barras
)
add = TRUE
.Histograma suavizado: density(x)
par(cex = 1.4) # Aumenta todo el tamaño del grafico
hist(datos[,1], main = "Densidad de Kernel con density(x)", xlab = "", ylab = "", xlim = c(-4,4), freq = F, col = "lightblue2", border = "lightblue4", las = 1, breaks = 15 )
lines(density(datos[,1]), col = "blue2",
lwd = 2, # Linea de ancho 2
lty = 2 # Linea punteada
)
Histograma suavizado: density(x)
Gráfico de Caja: boxplot(x)
Gráfico de Caja: boxplot(x)
Gráfico de Caja: boxplot(x)
y ~ x
Histograma, gráfico de densidad, y boxplot permiten analizar o comparar distribuciones.
Usaremos gráficos de dispersión para comparar relación entre dos variables:
Gráfico de Dispersión: plot(x, y)
Gráfico de Dispersión: plot(x, y)
type = "l"
Apartado técnico de gráficos en R.
Crear un gráfico es abrir un dispositivo gráfico.
Funciones de alto nivel como plot()
abren el dispositivo.
lines
: graficar líneas adicionales.points
: graficar puntos adicionales.text
: imprimir texto en gráfico.legend
: añadir leyenda.grid
, axis
, segments
, title
, polygon
, etc.Reconstruyamos el siguiente gráfico:
Apartado técnico de gráficos en R.
par()
contiene la configuración global de los dispositivos gráficos. xlog ylog adj ann ask bg bty cex
"FALSE" "FALSE" "0.5" "TRUE" "FALSE" "white" "o" "1"
par(pch = 19)
: puntos rellenos en gráficos de puntos.par(cex.main = 2)
: agrandar títulos de gráficos.par(mfrow = c(filas, columnas))
: dividir la ventana en una matriz para imprimir multiples gráficos.?par
par()
par(las = 1, bty = "n", pch = 19, mfrow = c(1,3), cex.lab = 1.2, cex.axis = 1.2)
dev.off()
Graficar funciones matemáticas: curve()
curve(f(x, k, v), from = a, to = b)
Gráficos feos que no quiero mostrar:
Gráfico de barra con barplot(x)
Gráfico de torta con pie(x)
frutas <- c("Manzana", "Plátano", "Naranja", "Fresa", "Uva")
cantidades <- c(25, 15, 20, 10, 30)
pie(cantidades, labels = frutas,
main = "Preferencia por tipo de fruta",
col = rainbow(length(frutas)))
barplot(cantidades,
names.arg = frutas,
main = "Preferencia por tipo de fruta",
ylab = "Cantidad de personas",
col = "skyblue",
border = "white")
Gráficos con ggplot2
Paquete para creación de gráficos
Enfoque declarativo para construir gráficos
Ejemplos ggplot2
Ejemplos ggplot2
Ejemplos ggplot2
Ejemplos ggplot2
ggplot2
es una librería (o paquete) de R
Librería: conjunto de funciones para objetivo particular.
dplyr
: funciones para manipular datos.moments
: trae funciones para calcular estadísticas descriptivasInstalar librería:
Sintaxis basada en la composición de capas.
Se indica qué se quiere visualizar (y no cómo)
Ejemplo:
library(ggplot2)
ggplot(data = mtcars) + # 1. Especificar datos
aes(x = wt, y = mpg, color = factor(cyl)) + # 2. "Mapear" variables
geom_point(size = 3) + # 3. Graficar puntos
labs(title = "Consumo vs Peso del Vehículo", # 4. Etiquetas
x = "Peso (wt)", y = "Consumo (mpg)") +
theme_minimal() # 5. Aplicacion de un tema
Elementos de ggplot:
aes(x,y)
: “aesthetics mappings” o atributos estéticos. Especificar cómo variables se conectan con elementos visuales (estéticas) del gráfico.geom_X()
: especificar la geometría del gráfico, es decir, la forma gráfica para visualizar los datos.Ejemplos
Ejemplos
Ejemplos
Ejemplos
Ejemplos
Ejemplos
Ejemplos
Ejemplos
Ejemplos
Ejemplos
Escalas en ggplot2: scale_
scale_ElementoEstetico_Tipo()
EPG3308: Computación Estadística
Clase 06: Álgebra Lineal en R
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
Álgebra Lineal en R
\[ \begin{pmatrix} 3 & 17 \\ 15 & 4 \\ \end{pmatrix} \]
Álgebra Lineal en R
\[ \begin{pmatrix} 1 \\ 0 \\ 2 \\ \end{pmatrix} \]
Suma de Matrices
\[ \begin{pmatrix} 1 & 3 \\ -1 & 2 \\ \end{pmatrix} + \begin{pmatrix} 4 & 3 \\ 3 & 5 \\ \end{pmatrix} = \begin{pmatrix} 5 & 6 \\ 2 & 7 \\ \end{pmatrix} \]
Suma de Vectores
\[ \begin{pmatrix} 1 \\ 3 \\ -1 \\ \end{pmatrix} + \begin{pmatrix} 4 \\ 3 \\ 3 \\ \end{pmatrix} = \begin{pmatrix} 5 \\ 6 \\ 2 \\ \end{pmatrix} \]
Transposición de matrices con t(A)
\[A = \begin{pmatrix} 1 & 3 & 4 \\ -1 & 2 & -2 \\ \end{pmatrix} \quad \Longrightarrow \quad \ A^t = \begin{pmatrix} 1 & -1 \\ 3 & 2 \\ 4 & -2 \end{pmatrix} \]
Producto Matricial con %*%
\[ \begin{pmatrix} 1 & 3 \\ -1 & 2 \\ \end{pmatrix} \cdot \begin{pmatrix} 4 & 3 \\ 3 & 5 \\ \end{pmatrix} = \begin{pmatrix} 1\cdot 4 + 3\cdot 3 & 1 \cdot 3 + 3 \cdot 5 \\ -1\cdot 4 + 2 \cdot 3 & -1 \cdot 3 + 2 \cdot 5 \\ \end{pmatrix} \\ \]
\[ = \begin{pmatrix} 13 & 18 \\ 2 & 7 \\ \end{pmatrix} \]
Solución de Sistemas Lineales
\[Ax = b\]
Ejemplo:
\[ \begin{pmatrix} 2 & 3 \\ 1 & 2 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} 0 \\ 1 \\ \end{pmatrix} \]
\[A = \begin{pmatrix} 2 & 3 \\ 1 & 2 \end{pmatrix} , \quad x = \begin{pmatrix} x_1 \\ x_2 \\ \end{pmatrix}, \quad b = \begin{pmatrix} 0 \\ 1 \\ \end{pmatrix} \]
Solución de Sistemas Lineales
solve(A,b)
para encontrar solución x
.solve(A)
para obtener \(A^{-1}\).Invertibilidad de Matrices
\[ A = \begin{pmatrix} 2 & 2 \\ 1 & 2 \end{pmatrix}, \quad \operatorname{det}(A) = 2 \quad (\text{Invertible}) \]
Invertibilidad de Matrices
\[\operatorname{det}(A) = \text{1e-16} = 1\cdot 10^{-16} = 0\]
¡Actividad Bonificada!
Verifique si las siguientes matrices \(A\) son invertibles y , en caso de serlos, resuelva el sistema lineal correspondientes al vector \(b\) indicado.
\[ A = \begin{pmatrix} 2 & 5 \\ -2 & 3 \end{pmatrix}, \qquad b = \begin{pmatrix} 0 \\ 1 \end{pmatrix} \]
\[ A = \begin{pmatrix} 1 & 0 & 2 & -1 \\ 0 & 1 & 4 & 2 \\ 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 1 \end{pmatrix}, \qquad b = \begin{pmatrix} 4 \\ 5 \\ 6 \\ 7 \end{pmatrix} \]
\[ A = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 0 & 1 & 1 \end{pmatrix}, \qquad b = \begin{pmatrix} 1 \\ 2 \\ 1 \end{pmatrix} \]
Aplicación
Los datos airquality
poseen mediciones diarias de la calidad del aire en Nueva York durante 1973, incluyendo concentración de ozono, temperatura, radiación solar y velocidad del viento.
Se busca explicar la variable Ozone
en función de las otras tres variables disponibles: Solar.R
, Wind
y Temp
.
Estimar un modelo de regresión lineal:
\[\text{O}_i = \beta_0 + \beta_1 \cdot \text{Solar}_i + \beta_2 \cdot \text{Wind}_i + \beta_3 \cdot \text{Temp}_i + \varepsilon_i,\]
Escrito matricialmente:
\[\textbf{O} = X\boldsymbol{\beta} + \boldsymbol{\varepsilon},\] donde
Para estimar los parámetros \(\beta_i\), se resuelven las ecuaciones normales obtenidas por el método de Mínimos Cuadrados Ordinarios.
\[(X^tX) \boldsymbol{\beta} = X^t \boldsymbol{O} \quad \Longrightarrow \quad \boldsymbol{\beta} = \left(X^t X\right)^{-1} X^t \boldsymbol{O} \]
donde
\[ X = \begin{pmatrix} 1 & \text{Solar}_1 & \text{Wind}_1 & \text{Temp}_1 \\ 1 & \text{Solar}_2 & \text{Wind}_2 & \text{Temp}_2 \\ \vdots & \vdots & \vdots & \vdots \\ 1 & \text{Solar}_n & \text{Wind}_n & \text{Temp}_n \\ \end{pmatrix}, \quad \boldsymbol{O} = \begin{pmatrix} O_1 \\ O_2 \\ \vdots \\ O_n \end{pmatrix} \]
EPG3308: Computación Estadística
Clase 07: Cálculo para Estadística
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
\[f(x) = x^2 \qquad \to \qquad f'(x) = 2x \]
Ejemplo
\[\text{Velocidad: } f'(t) = 5\] \[\text{(Velocidad constante)}\]
Notación para escribir una Derivada
\[f'(x) = \frac{d}{dx}f(x)\]
\(\frac{d}{dx}\) hace explícito que estamos calculando la derivada respecto a la variable \(x\).
Usamos \(f'(x)\) cuando la variable por la cual estamos derivando es evidente.
Obtener Derivada de una Función
\[\text{Potencia}: f(x) = x^3 \quad \to \quad f'(x) = 3x^2 \]
\[\text{Exponencial}: f(x) = e^{2x} \quad \to \quad f'(x) = 2e^{2x} \]
\[\text{etc.}\]
I) Derivada de una Constante
\[f(x) = a \qquad \to \qquad \frac{d}{dx}f(x) = 0\]
II) Derivada de una constante multiplicada a una función
\[f(x) = a\cdot g(x)\]
\[\frac{d}{dx}f(x) = \frac{d}{dx}\Big( a \cdot g(x)\Big) = a \cdot \left(\frac{d}{dx} g(x)\right)\]
III) Derivada de una Potencia
\[f(x) = b\cdot x^a \qquad \to \qquad \frac{d}{dx}f(x) = b\cdot a\cdot x^{a - 1}\]
IV) Linealidad de la Derivada
\[f(x) = h(x) + g(x) \]
\[\frac{d}{dx}f(x) = \frac{d}{dx}\left(h(x) + g(x)\right) = \frac{d}{dx}h(x) + \frac{d}{dx}g(x)\]
V) Regla de la Cadena
\[f(x) = g(h(x)) \quad \to \quad \frac{d}{dx}f(x) = \frac{d}{dx} g(h(x)) \cdot \frac{d}{dx} h(x)\]
VI) Derivada del Producto
\[\frac{d}{dx} \left(f(x)\cdot g(x) \right) = \left(\frac{d}{dx} f(x)\right) g(x) + f(x) \left( \frac{d}{dx} g(x)\right) \]
VII) Derivadas importantes
\[\frac{d}{dx} e^x = e^x \qquad \frac{d}{dx} \log(x) = \frac{1}{x}\]
Problemas de Optimización
Sea \(f: \mathbb{R}^n \to \mathbb{R}\).
Se busca encontrar el valor \(x^* \in \mathbb{R}^n\) tal que \(f(x^*)\) sea un máximo o un mínimo.
Procedimiento para el caso univariado
Para una función continua y dos veces diferenciable \(f: \mathbb{R} \to \mathbb{R}\)
Obtener analíticamente \(f'(x)\) y \(f''(x)\).
Encontrar el valor \(x^*\) tal que \(f'(x^*) = 0\).
Evaluar \(f''(x^*)\).
Soluciones computacionales aproximadas
Función optimize
para encontrar el máximo o mínimo de una función en un intervalo.
Ejemplo: encontrar \(x^*\) que minimice la suma cuadrática
\[f(x) = \sum_{i = 1}^n (y_i - x)^2\]
Procedimiento para el caso multivariado
Sea \(f: \mathbb{R}^n \to \mathbb{R}\) una función continua y dos veces diferenciable.
\[f(\boldsymbol{x}) = f(x_1,x_2,\dots, x_n)\]
\[\nabla f(x) = \begin{pmatrix} \frac{\partial}{\partial x_1} f(x) \\ \vdots \\ \frac{\partial}{\partial x_n} f(x) \\ \end{pmatrix}\]
Procedimiento para el caso multivariado
Sea \(f: \mathbb{R}^n \to \mathbb{R}\) una función continua y dos veces diferenciable.
\[f(x) = f(x_1,x_2,\dots, x_n)\]
\[H_f(x) = \begin{pmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \\ \end{pmatrix}\]
Procedimiento para el caso multivariado
Para una función continua y dos veces diferenciable
\(f: \mathbb{R}^n \to \mathbb{R}\):
Obtener analíticamente:
Encontrar \(x^*\) tal que \(\nabla f(x^*) = 0\)
Evaluar la matriz Hessiana en \(x^*\):
Soluciones computacionales aproximadas
Función optim
para hallar mínimo (por defecto) o máximo de función multivariada.
Ejemplo: encontrar \(\beta = (\beta_0, \beta_1)\) que minimice
\[f(\beta) = \sum_{i = 1}^n (y_i - (\beta_0 + \beta_1x_i))^2\]
optim(par, fn, gr, method, hessian, control)
par
: valores iniciales.fn
: función a maximizar o minimizar.gr
: función que contiene al vector gradiente de la función.method
: método de optimización a usar.hessian
: valor lógico indicando si devolver matriz Hessiana aproximada \(H_f(x)\).control
: lista de argumentos adicionales para controlar el proceso. control = list(fnscale = -1)
permite que optim
maximice en vez de minimizar.Importante: el primer argumento de las funciones fn
y gr
deben ser un vector que represente a \(x\) en \(f(x)\).
Problema de Mínimos Cuadrados
\[f(\beta) = \sum_{i = 1}^n (y_i - (\beta_0 + \beta_1x_i))^2\]
\[\nabla f(\beta) = \begin{pmatrix} -2 \sum_{i = 1}^n (y_i - (\beta_0 + \beta_1 x_i )) \\ -2 \sum_{i = 1}^n x_i(y_i - (\beta_0 + \beta_1 x_i )) \end{pmatrix} \]
R$par
: valor \(x^*\) donde se maximiza \(f(x)\)R$convergence
: si se logró convergencia del método. 0
es convergencia exitosa.Otro ejemplo: \(f(x) = (x_1 - 2)^2 + (x_2 + 3)^2\)
gr
para que R internamente aproxime el vector gradiente.Integración
\[\int_a^b f(x)dx\]
Integración
\(\int_a^b f(x)dx\) es un número que representa el área bajo la curva en el intervalo \((a,b)\).
Aplicado en estadística para calcular probabilidades de variables aleatorias continuas.
Si \(f(x)\) es una función de densidad (normal, gamma, etc),
\[\operatorname{Pr}(a < X < b) = \int_{a}^b f(x)dx\]
\[\operatorname{Pr}(a < X < b) = \int_{a}^b f(x)dx\]
Calcular Integrales
\[F(x) = \int f(x)dx \quad \to \quad F(b) - F(a) = \int_a^b f(x)dx\]
Calcular Integrales
\[\int_a^b f(x)dx \approx \sum_{i = 1}^n \omega_i f(x_i)\]
Calcular Integrales
Métodos de Cuadratura: integrate(f, lower, upper)
f
: función a calcular la integral.lower
y upper
: límites inferior y superior para calcular la integral.\[\texttt{integrate} = \int_{\texttt{lower}}^{\texttt{upper}} f(x)dx\] * Es posible especificar lower = -Inf
y upper = Inf
.
Ejemplos
\[f(x) = \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}x^2} \quad \to \quad \int_{-\infty}^{\infty}f(x)dx\]
\[f(x|\lambda) = \lambda e^{-\lambda x} \quad \to \quad \int_{0}^{\infty}f(x)dx\]
Ejemplos
\[f(x) = \frac{k^v}{\Gamma(k)}x^{k-1}e^{-v x} \quad \to \quad \mathbb{E}(X) = \int_0^{\infty} x f(x)dx\]
Ejemplos
\[\operatorname{Var}(X) = \mathbb{E}((X - k/v)^2) = \int_{0}^{\infty} (x - k/v)^2 f(x)dx\]
Actividad Bonificada
Calcule la probabilidad de que una variable aleatoria que sigue una distribución normal de media 9 y varianza 1 sea menor a 10, \(\operatorname{Pr}(X < 10)\).
\[\operatorname{Pr}(X < 10) = \int_{-\infty}^{10} \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}(x-9)^2} dx\]
Calcular Integrales: Método de Montecarlo.
Sea \(X \sim\) Uniforme(0,1). Entonces, \[\int_{0}^1 f(x)dx = \mathbb{E}(f(X))\]
Los promedios muestrales, \(\bar{x}\), aproximan la esperanza \(\mathbb{E}(X)\).
\[\text{Si } n\to \infty \quad \Longrightarrow \quad \bar{x} \to \mathbb{E}(X)\] * El promedio de \(f(x_1), \dots, f(x_n)\) aproximan \(\mathbb{E}(f(X))\).
Calcular Integrales: Método de Montecarlo.
\[\int_0^1 f(x)dx \approx \frac{1}{n}\sum_{i = 1}^n f(x_i),\]
Calcular Integrales: Método de Montecarlo.
\[\int_{0}^{1}\frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}x^2}dx\]
Simular \(x_1,\dots, x_n \sim\) Uniforme(0,1)
Evaluar \(f(x_1), \dots, f(x_n)\).
Aproximar la integral con \(\frac{1}{n}\sum_{i = 1}^n f(x_i)\).
Para una integral en \((a,b)\), se puede usar cualquier distribución de probabilidad que tenga soporte en \((a,b)\).
Suponga \(X \sim g(x)\) donde \(g(x) > 0\) para todo \(x\).
\[I = \int_{a}^b f(x)dx = \int_{a}^b \frac{f(x)}{g(x)}g(x)dx\]
\[\hat{I} = \frac{1}{n}\sum_{i = 1}^n \frac{f(x_i)}{g(x_i)}\].
\[\int_{0}^{1}\frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}x^2}dx\]
EPG3308: Computación Estadística
Clase 08: tidyverse y otras librerías
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
Colección de paquetes de R diseñados para Ciencia de Datos
dplyr: nueva sintaxis y herramientas para manipulación de datos.
tibble: Mejoras los data.frame
para dar más legibilidad.
readr: Importación de Datos de forma rápida y eficiente.
ggplot2: Creación gráficos complejos a partir de una nueva gramática.
forcats: Facilita la manipulación de factores, como reordenar, agrupar y recodificar niveles.
tidyr: Incluye funciones para organizar y estructurar datos.
stringr: Manipulación de cadenas de texto con funciones consistentes como str_detect()
, str_replace()
.
purrr: Programación funcional sobre listas y vectores usando funciones como map()
, walk()
, reduce()
.
Pipes: %>%
mean(x)
- x %>% mean()
select()
para seleccionar o deseleccionar variables.
Class Sex
1 1st Male
2 2nd Male
3 3rd Male
arrange()
para ordenar las filas de una tabla .
Class Sex Age Survived Freq
1 1st Male Child No 0
2 2nd Male Child No 0
3 Crew Male Child No 0
filter()
para una tabla de datos según algún criterio.
Class Sex Age Survived Freq
1 1st Male Child No 0
2 1st Female Child No 0
3 1st Male Adult No 118
mutate()
para crear nuevas variables o modificar variables existentes en una tabla.
summarise()
o summarize()
para calcular resumenes estadísticos.
mtcars %>%
summarise(
media_mpg = mean(mpg),
mediana_mpg = median(mpg),
desv_mpg = sd(mpg),
n = n()
)
media_mpg mediana_mpg desv_mpg n
1 20.09062 19.2 6.026948 32
group_by
para realizar cálculos agrupados.
Cruces de Tablas
Cruces de Tablas
Cuatro tipos de cruces de tablas:
Cruces de Tablas
Cruces de Tablas
Cruces de Tablas
Cruces de Tablas
Cruces de Tablas
Cruces de Tablas
Cruces de Tablas
Actividad
Considere la base de datos starwars
del paquete dplyr
.
Seleccione las columnas name, species, height, mass, gender.
Filtre por los personajes humanos que miden más de 180 cm.
Ordene los personajes por peso (mass) de mayor a menor.
Añada una nueva columna a la tabla que corresponda al IMC (masa/(altura en cm)^2).
Actividad
Agrupando por especie, calcule el número de personajes, la altura promedio, y el peso promedio. mass
Considere ahora la tabla flights
y airlines
que contienen información sobre todos los vuelos que salieron desde Nueva York en 2013. Obtenga una nueva tabla cuya primera columna corresponda al nombre completo de la aerolínea, la segunda indique el número total de vuelos realizados por dicha aerolínea, la tercera muestre el tiempo promedio en el aire de estos vuelos (air_time
), y la cuarta indique la distancia promedio entre aeropuertos (distance
).
Librerías útiles fuera de tidyverse:
data.table
: versión rápida y eficiente de data.frame, ideal para filtrar, agrupar y transformar grandes conjuntos de datos.
parallel
: permite ejecutar tareas en varios núcleos del procesador para acelerar operaciones intensivas.
lubridate
: simplifica el manejo de fechas y horas, permitiendo extraer componentes y realizar cálculos fácilmente.
data.table
data.frame
.DT[i, j, by]
i
: filas a seleccionar (filtro)j
: columnas a seleccionar o calcular.by
: agrupamiento.data.table
parallel
Ejecutar código en varios núcleos del procesador.
Acelerar tareas intensivas como simulaciones, cálculos repetitivos o procesamiento de grandes volúmenes de datos.
Funciona creando procesos hijos (workers) que ejecutan tareas en paralelo.
Importante: cada proceso es una sesión de R abierta. Controlar la RAM.
parallel
Funciones principales
detectCores()
: identifica cuántos núcleos tiene tu equipo.makeCluster()
: crea un clúster de procesos.parLapply()
: aplica funciones en paralelo sobre un clúster.parallel
lubridate
Librería para trabajar con fechas y horas en R de manera simple y legible.
Permite:
ymd()
, mdy()
, dmy()
, etc.year()
, month()
, day()
, hour()
, etc.Hace el código más claro que trabajar con as.Date()
o POSIXct
manualmente.
lubridate
library(lubridate)
# Crear una fecha desde texto
fecha <- ymd("2023-10-01")
# Extraer componentes
year(fecha) # 2023
month(fecha) # 10
wday(fecha, label = TRUE) # "Sun"
# Sumar días
fecha + days(5) # "2023-10-06"
# Fechas desde texto con distintos formatos
dmy("12-04-2023") # 2023-04-12
mdy("04-12-2023") # 2023-04-12
Próxima clase:
EPG3308: Computación Estadística
Clase 09: Shiny
Profesor: Hernán Robledo Araya (harobledo@uc.cl)
Ayudante: Josefa Silva Muñoz (josefa.silva@alumni.uc.cl)
Primer Semestre - 2025
¿Por qué usar Shiny?
Aplicaciones de Shiny
Visualización de datos en tiempo real
Formularios interactivos
Simulaciones estadísticas
Herramientas de enseñanza
Ejemplos en la Galería de Posit:
https://shiny.posit.co/gallery/
Estructura de una Shiny App
Estructura de una Shiny App
Ejemplo: Grafica Histograma
Estructura de una Shiny App
library(shiny)
ui <- TipoDePagina(
## Se controla que elementos verá el usuario y con cuales
## podrá interactuar.
)
server <- function(input ,output){
# Es el cerebro de la aplicacion.
# Aqui se hacen todos los cálculos de acuerdo a los inputs recibidos.
}
# Inicializacion de la App
shinyApp(ui = ui, server = server)
UI: Interfaz de Usuario
ui <- fluidPage()
: página que se adopta al tamaño de la pantalla.ui <- navbarPage()
: página con pestañas para múltiples secciones.ui <- dashboard()
: interfaz tipo dashboard.UI: Interfaz de Usuario
library(shiny)
ui <- fluidPage( # Tipo de Pagina: Pagina Fluida
sidebarLayout( # Estructura Interna: Barra Lateral y Panel Principal
sidebarPanel( # Barra Lateral
# Todo lo que vaya en la barra lateral
),
mainPanel( # Panel Principal
# Todo lo que vaya en el panel principal
)
)
)
server <- function(input, output) {} # Server vacio
shinyApp(ui,server)
UI: Interfaz de Usuario
Menús de Interacción del Usuario
numericInput()
: cuadro para ingresar un número.textInput()
: cuadro para ingresar texto.selectInput()
: menú para selección múltiple.sliderInput()
: barra para seleccionar un número de un rango.dateInput()
: cuadro para ingresar una fecha.fileInput()
: menú para adjuntar un archivo.Menús de Interacción del Usuario
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
numericInput(inputId = "inp1", label = "Ingrese Valor", value = 5, min = 1, max = 10),
textInput(inputId = "inp2", label = "Ingrese Texto"),
selectInput(inputId = "inp3", label = "Seleccione opción.",choices = c("A", "B", "C"), multiple = FALSE),
sliderInput(inputId = "inp4", label = "Seleccione un número",min = 1, max = 10, value = 5)
),
mainPanel(
)
)
)
server <- function(input, output) {} # Server vacio
shinyApp(ui,server)
server
server
trae cálculos que se ejecutan al iniciar la app.
Los datos generados en UI llegan al server a través de la lista input
.
xxxxxInput
tiene un inputId
que define objeto.server
output
elementos a imprimir en UI.
input
, output
también se comporta como una listaUI
cómo imprimir output.server
Los valores generados por xxxxxInput
son denominados Valores Reactivos.
Llamadas de input$Objeto
en server deben estar dentro de Entorno Reactivo.
Código completo:
library(shiny)
ui <- fluidPage(
### Inputs:
numericInput(inputId = "Numero", label = "Ingrese un número", value = 1)
### Outputs:
textOutput(outputId = "ImprNum")
)
server <- function(input, output){
output$ImprNum <- reactive({
paste0("El numero seleccionado es ", input$Numero)
})
}
shinyApp(ui, server)
Entornos Reactivos
reactive()
: encapsula código que depende de input
y devuelve un resultado reactivo.
Entornos Reactivos
observe()
: observador que permite generar efectos visibles en UI.
reactive()
.Entornos Reactivos
observeEvent()
: observador que se ejecuta cuando ocurre un evento específico.
Entornos Reactivos
eventReactive()
: similar a reactive()
pero sólo se actualiza cuando ocurre un evento específico.
Visualización de Outputs
UI
.renderXxxx
para enviar de server a UI
.
renderTable()
y renderPlot()
Visualización de Outputs
UI
debe configurarse cómo imprimir Grafico
y Tabla
.Código completo (incorpora botón para imprimir resultados):
library(shiny)
ui <- fluidPage(
# Input
actionButton(inputId = "PresionaBoton",
label = "¿Mostrar Tabla y Gráfico?"),
# Output
tableOutput(outputId = "Tabla"), # Nombre de objeto en output
plotOutput(outputId = "Grafico") # Nombre de objeto en output
)
server <- function(input, output) {
observeEvent(input$PresionaBoton, { # Si se presiona boton se imprimen resultados
output$Tabla <- renderTable({
head(iris)
})
output$Grafico <- renderPlot({
hist(iris$Sepal.Length)
})
})
}
shinyApp(ui, server)
Visto hasta ahora:
Estructura de Shiny App: UI
+ server
.
Distintos tipos de UI
.
Menús de Interacción - xxxxInput()
Uso de input
y generación de output
en server
.
output
en UI
:renderTable
y renderPlot
en server
.tableOutput
y plotOutput
en UI
.Actividad 1
Sin ejecutar la app, identifiquemos cómo esta interactua con usuario, qué inputs genera, cómo los procesa, qué outputs genera, y cuales imprime.
library(shiny)
ui <- bootstrapPage(
selectInput(inputId = "n_barras",
label = "Número de barras en el histograma (aproximado):",
choices = c(10, 20, 35, 50),
selected = 20),
checkboxInput(inputId = "mostrar_obs",
label = strong("Mostrar observaciones individuales"),
value = FALSE),
checkboxInput(inputId = "mostrar_densidad",
label = strong("Mostrar estimación de densidad"),
value = FALSE),
plotOutput(outputId = "grafico_principal", height = "300px"),
conditionalPanel(condition = "input.mostrar_densidad == true",
sliderInput(inputId = "ajuste_bw",
label = "Ajuste de ancho de banda:",
min = 0.2, max = 2, value = 1, step = 0.2)
)
)
server <- function(input, output) {
output$grafico_principal <- renderPlot({
hist(faithful$eruptions,
probability = TRUE,
breaks = as.numeric(input$n_bins),
xlab = "Duración (minutos)",
main = "Duración de erupciones del géiser")
if (input$mostrar_obs) {
rug(faithful$eruptions)
}
if (input$mostrar_densidad) {
dens <- density(faithful$eruptions,
adjust = input$ajuste_bw)
lines(dens, col = "blue")
}
})
}
shinyApp(ui, server)
Actividad 2
Considere los datos iris
sin la columna species
. Diseñe una aplicación que haga lo siguiente:
Usando selectInput
permita al usuario seleccionar una variable.
Usando selectInput
permita al usuario seleccionar una segunda variable.
Con las dos variables seleccionadas anteriormente, imprimir un gráfico de dispersión. Ayuda: acceda a las variables usando tabla[[input$variable1]]
.
Usando actionButton
, permitir al usuario decidir si desea imprimir las primeras doce filas de una tabla generada con las dos variables seleccionadas anteriormente.