También podemos preguntar por texto
Para comparar texto usamos el operador de igualdad exacta == (doble signo igual):
carreras == "Sociología"
Vector: carreras <- c("Sociología", "Historia", "Sociología", "Antropología").
== evalúa igualdad; = se reserva para argumentos.
Comparar texto con `==` y seleccionar elementos de un vector categórico.
Esquema del curso
Tus primeros minutos con R
Has terminado los 8 ejercicios de este módulo.
Tu primera instrucción
Dos grupos respondieron una encuesta: uno aportó 18 respuestas y otro 12. R evalúa instrucciones y muestra el resultado en la consola.
Tu tarea
Coloca el cursor en la línea con
18 + 12, presiona Ctrl + Enter y observa el resultado30en la Consola R.Cómo trabajar
script.R.La instrucción ya está escrita. No necesitas calcular ni modificar nada todavía.
Coloca el cursor en la línea
18 + 12.Usa Ctrl + Enter sobre
18 + 12y busca el resultado que aparece después de ejecutar.Consola R
Cambia la respuesta
El segundo grupo actualizó su conteo a 15 respuestas. Al modificar una instrucción y reejecutarla, R recalcula el resultado.
Tu tarea
Cambia el segundo valor a
15en la suma y ejecuta para obtener el total actualizado.Solo cambió la cantidad del segundo grupo.
El primer valor sigue siendo
18; el segundo debe pasar de12a15.Deja la línea como
18 + 15y ejecútala.Consola R
Guardar para después
Para conservar un valor y reutilizarlo, lo guardamos en un objeto con
<-:respuestas <- 33La asignación guarda el valor sin imprimirlo. Para consultar su contenido, escribe el nombre del objeto:
respuestas.Tu tarea
respuestas.respuestaspara comprobar su contenido en la consola.Piensa en dos acciones distintas: primero guardar, después consultar.
Para guardar un valor con un nombre usamos la forma
nombre <- valor.Ejecuta
respuestas <- 33y después ejecuta solamenterespuestas.Consola R
Crea un objeto tú
La encuesta recibió 18 respuestas de Sociología y 15 de Antropología. El primer objeto ya está creado:
respuestas_sociologia <- 18Tu tarea
Crea el objeto
respuestas_antropologiapara guardar las 15 respuestas. Luego consulta ambos objetos para comprobar sus valores.Necesitas guardar
15usando el nombrerespuestas_antropologia.Recuerda la estructura del ejercicio anterior:
nombre <- valor.Escribe
respuestas_antropologia <- 15. Después ejecutarespuestas_sociologiayrespuestas_antropologiapara consultarlos.Consola R
Reutiliza lo guardado
Los objetos guardados pueden reutilizarse en nuevas operaciones y almacenarse en otro objeto para continuar el análisis.
Tu tarea
Crea
total_respuestassumandorespuestas_sociologiayrespuestas_antropologia. Luego consúltalo.Los dos valores que necesitas ya tienen nombre. No necesitas volver a escribir
18ni15.Puedes usar nombres de objetos a ambos lados de
+, igual que antes usaste números.Usa
total_respuestas <- respuestas_sociologia + respuestas_antropologiay después consultatotal_respuestas.Consola R
Número o texto
Los objetos guardan distintos tipos de información:
20)."Historia").Tu tarea
Asigna
21aedady"Sociología"acarrera. Luego consulta ambos objetos.Pregunta para cada valor: ¿representa una cantidad o una palabra/nombre?
Las cantidades se escriben sin comillas; el texto se escribe entre comillas.
Escribe
edad <- 21ycarrera <- "Sociología". Después consultaedadycarrera.Consola R
Lee el error antes de corregir
Los errores en R son mensajes informativos, no fallas permanentes. Aquí intentamos sumar un número con un texto:
18 + "15"R no puede operar matemáticamente con texto entre comillas.
Tu tarea
Corrige
respuestas_antropologiaquitando las comillas para guardarlo como número. Luego ejecuta la suma para calculartotal_respuestas.Compara
18con"15". ¿Cuál de los dos está escrito como texto?Las comillas hacen que
"15"sea texto. Para usarlo como cantidad en esta suma, el valor debe quedar sin comillas.Cambia la segunda línea a
respuestas_antropologia <- 15y vuelve a ejecutar la suma con los dos objetos.Consola R
Encuesta piloto
Una encuesta piloto llamada “Encuesta de vida universitaria” recibió 14 respuestas de Sociología y 11 de Antropología.
Tu tarea
Construye un script autónomo que:
estudio.respuestas_sociologia(14) yrespuestas_antropologia(11).total_respuestasy consúltalo.Divide el problema en partes: un nombre de estudio, dos conteos y un total. Decide primero cuáles son texto y cuáles son cantidades.
Crea primero
estudio,respuestas_sociologiayrespuestas_antropologiacon<-. Después usa los dos conteos para construir el total.La estructura final puede seguir este patrón:
Consola R
De uno a varios
Para guardar varios valores juntos en un solo objeto usamos un vector mediante
c():tiempos_viaje <- c(25, 40, 35, 50, 30)c()combina los valores conservando su orden (1°: 25, 2°: 40, 3°: 35, etc.).Tu tarea
Ejecuta la asignación de
tiempos_viajey consúltalo para observar los cinco valores ordenados dentro del vector.No queremos calcular todavía. Queremos conservar los cinco tiempos juntos.
c()permite reunir varios valores dentro del objeto que está a la izquierda de<-.Usa:
y después consulta
tiempos_viaje.Consola R
Tu primer vector
Cinco personas informaron estos tiempos de viaje en minutos: 20, 35, 45, 25 y 30, en ese orden.
Tu tarea
Reúne los cinco tiempos en un solo vector usando
c(), guárdalo entiempos_viajey consúltalo.Piensa en la estructura que permitió guardar cinco valores juntos en E1.
El objeto debe llamarse
tiempos_viajey a la derecha de<-necesitasc(...).Después consulta
tiempos_viaje.Consola R
Usa todos los valores juntos
Las funciones en R reciben datos entre paréntesis y devuelven un resultado:
sum(respuestas_diarias)sum()recibe un vector completo y suma todos sus elementos.Datos de la semana:
respuestas_diarias <- c(18, 22, 15, 25, 20).Tu tarea
Aplica la función
sum()sobrerespuestas_diariaspara calcular el total acumulado y guárdalo entotal_respuestas.Los cinco valores ya están guardados en
respuestas_diarias. No necesitas escribirlos otra vez.La función que acabas de ver se usa como
sum(objeto).Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Qué hay en esta posición?
Para recuperar un valor según su posición usamos corchetes
[]. En R las posiciones comienzan en 1:tiempos_viaje[3]recupera el tercer valor (35), no el número 3.Vector observado:
tiempos_viaje <- c(25, 40, 35, 50, 30).Tu tarea
Usa corchetes de posición para extraer el tercer valor de
tiempos_viaje.Primero identifica dónde está el dato: ¿qué valor ocupa la tercera posición?
Para seleccionar una posición, escribe el nombre del objeto seguido de corchetes.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Más de una posición
Para recuperar varias posiciones pasamos un vector dentro de los corchetes:
tiempos_viaje[c(2, 5)]Extrae los valores de las posiciones 2 y 5 (
40y30).Tu tarea
Usa corchetes y
c()para seleccionar simultáneamente los tiempos de las posiciones 2 y 5 entiempos_viaje.Piensa primero en dónde están los dos valores, no en cuáles son.
Necesitas reunir las posiciones 2 y 5 y colocar ese conjunto dentro de los corchetes.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Vuelve a usar lo aprendido
Cinco estudiantes informaron que estudiaron 2, 4, 3, 5 y 1 horas, en ese orden.
Tu tarea
horas_estudio.total.cuarta.Divide el problema en tres decisiones: primero guardar juntos, después usar todos, después recuperar una posición.
Para el primer paso necesitas la construcción de vectores; para el total, la función vista en E3; para la cuarta observación, los corchetes.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Encuentra la información que piden
Durante cinco semanas se registraron estas participaciones: 3, 1, 4, 2 y 5, en ese orden.
Tu tarea
participacion.sum()y guárdalo entotal.seleccion.¿Qué función permite combinar varios valores en un solo vector? Revisa el uso de
c().¿Qué función suma todos los elementos de un vector? Revisa
sum().Para seleccionar varias posiciones, pasa un vector con los números de posición dentro de corchetes:
participacion[c(2, 5)].Consola R
De posiciones a preguntas
Hasta ahora buscabas valores por su posición. Con R también podemos formular preguntas de comparación sobre los datos:
35 > 30→TRUE25 > 30→FALSE>se lee “es mayor que”.TRUEindica que la afirmación se cumple;FALSE, que no se cumple. Ambos son valores lógicos producidos por R al evaluar la pregunta.Tu tarea
Ejecuta las dos comparaciones en el editor y comprueba cómo responde R con
TRUEyFALSEen la consola.Lee
35 > 30como una pregunta: “¿35 es mayor que 30?”.R responderá
TRUEsi la afirmación se cumple yFALSEsi no se cumple.Ejecuta:
y compara las dos respuestas.
Consola R
Pregunta a todos los valores
Al comparar un vector con un valor, R evalúa la condición elemento por elemento en el mismo orden:
tiempos_viaje > 30Vector:
c(25, 40, 35, 50, 30).Tu tarea
Pregunta cuáles tiempos en
tiempos_viajesuperan los 30 minutos usando el operador>.No necesitas escribir cinco preguntas. Piensa si puedes hacer la misma comparación al objeto completo.
Coloca
> 30después del nombre del vector.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Guarda las respuestas
El resultado de una comparación es un vector lógico que podemos guardar en un objeto para reutilizarlo:
supera_30 <- tiempos_viaje > 30Guarda la respuesta lógica (
TRUE/FALSE) de cada posición.Tu tarea
Evalúa qué tiempos son mayores a 30, guarda el vector lógico resultante en
supera_30y consúltalo.Piensa qué expresión produjo las cinco respuestas en E2.
A la derecha de
<-debe ir la comparación completa aplicada al vector.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
TRUE conserva
Cuando pasamos un vector de
TRUEyFALSEdentro de los corchetes[], R conserva las posiciones donde hayTRUEy descarta las posiciones donde hayFALSE:tiempos_viaje[supera_30]Tu tarea
Usa el vector lógico
supera_30dentro de los corchetes para seleccionar los tiempos mayores a 30 entiempos_viaje.Observa qué posiciones de
supera_30contienenTRUE.El vector lógico puede colocarse dentro de los corchetes del vector de datos.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Selecciona tú
Podemos escribir la condición directamente dentro de los corchetes en un solo paso:
vector[vector > valor]Vector observado:
horas_estudio <- c(2, 5, 3, 6, 4).Tu tarea
Filtra en un solo paso las observaciones de
horas_estudioque sean mayores a 4 usando corchetes.Puedes escribir la condición directamente dentro de los corchetes:
horas_estudio[...].¿Qué condición identifica las horas mayores que 4? Usa
horas_estudio > 4dentro de los corchetes.La expresión completa es
horas_estudio[horas_estudio > 4].Consola R
También podemos preguntar por texto
Para comparar texto usamos el operador de igualdad exacta
==(doble signo igual):carreras == "Sociología"Vector:
carreras <- c("Sociología", "Historia", "Sociología", "Antropología").==evalúa igualdad;=se reserva para argumentos.Tu tarea
carrerasson iguales a"Sociología"y guarda la respuesta enes_sociologia.es_sociologiadentro de corchetes para seleccionar únicamente esas carreras decarreras.La pregunta es: “¿cada respuesta es igual a Sociología?”.
Para preguntar si dos valores son iguales usamos
==; el texto debe ir entre comillas.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Checkpoint A: encuentra lo que buscas
Se registraron las sesiones de estudio de cinco estudiantes: 6, 12, 8, 15 y 10 sesiones.
Tu tarea
sesiones.mas_de_ochopreguntando qué sesiones superan 8.mas_de_ochopara seleccionar las sesiones correspondientes y guárdalas enseleccionadas.Primero reúne los cinco valores en un solo vector usando la función
c()y guárdalo ensesiones.¿Qué operador usaste para preguntar si un valor era mayor que otro? Compara
sesiones > 8y guarda la respuesta enmas_de_ocho.Usa el vector de respuestas lógicas dentro de los corchetes para seleccionar:
seleccionadas <- sesiones[mas_de_ocho].Consola R
Varias características de las mismas personas
Una fila reúne la información de una persona. Una columna reúne los valores de una misma característica (por ejemplo, la edad).
En análisis de datos, solemos llamar caso a cada fila y variable a cada columna.
En R, una tabla que organiza casos y variables se llama data frame:
Tu tarea
Observa la tabla en el panel izquierdo y guarda en
edad_persona_2la edad de la persona que estudia 5 horas (Persona 2).Sigue a una sola persona a través de las distintas características.
Los valores que estaban en la misma posición pertenecen al mismo caso y quedan en la misma fila.
La persona con 5 horas de estudio está en la segunda fila; en esa misma fila la edad es 22.
Consola R
Lee una fila y una columna
Al leer una base de datos:
Aquí tienes la encuesta de cuatro personas:
Tu tarea
Mirando la tabla en el panel izquierdo:
edades_encuestacomo un vector.horas_encuestacomo un vector.Pregunta si la consigna mantiene fija a la persona o a la característica.
Una fila mantiene fijo el caso; una columna mantiene fija la variable.
Para Persona 3 lee toda la tercera fila. Para edades lee completa la columna
edad.Consola R
Mira los primeros casos
Una base de datos real puede contener miles de filas. Para obtener un vistazo inicial sin imprimirla completa usamos
head():head(encuesta_social_demo)Por defecto,
head()muestra las primeras 6 filas de la base.Tu tarea
head(encuesta_social_demo)para ver las primeras filas en la consola.filas_visibles.Necesitas mirar el comienzo de la base, no modificarla.
head()recibe dentro de los paréntesis el objeto que quieres inspeccionar.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Una variable dentro de la base
Para pedirle a R una columna completa de la base usamos el operador
$:base$variable.Por ejemplo:
encuesta_social_demo$edadrecupera todas las edades como un vector.
Esta es una muestra de las primeras filas de
encuesta_social_demo:Tu tarea
Siguiendo el ejemplo anterior:
horas_estudiodeencuesta_social_demo.carreradeencuesta_social_demo.¿En qué base está guardada la variable que necesitas?
$conecta el nombre de la base con el nombre de la variable.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Qué contiene la base?
str()da una radiografía rápida de una base: cantidad de filas, columnas, nombres y tipo de almacenamiento técnico (num,chr, etc.):str(encuesta_social_demo)No necesitas memorizar los códigos técnicos. Lo fundamental es que
str()te ayuda a conocer qué variables existen en la base antes de analizarlas.Tu tarea
str(encuesta_social_demo)para ver sus variables en la consola.trabaja), extráela con$y guárdala ensituacion_laboral.Busca los nombres de las columnas dentro de la salida.
No necesitas interpretar las abreviaciones técnicas para responder.
Ejecuta:
y busca
edad,carrerayhoras_estudio.Consola R
Otra encuesta
Dispones de una base sobre movilidad llamada
encuesta_barrio:Tu tarea
Usando lo aprendido en el módulo:
minutos_viajedeencuesta_barrioy guárdala entiempos.transportedeencuesta_barrioy guárdala enmedios.Decide primero si cada pregunta se refiere a un caso o a una variable.
Para recuperar una variable necesitas el nombre de la base y el nombre de la columna.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Vuelve a hacer una pregunta
En el Módulo 3 hicimos preguntas a vectores. En el Módulo 4 aprendimos que una columna de una base se extrae como un vector con
$. Ahora juntamos ambas ideas para formular preguntas sobre una base.Base disponible
encuesta_social_demo:Tu tarea
Formula una pregunta lógica con el operador
$y>para saber qué edades enencuesta_social_demoson mayores a 21.Primero piensa qué variable contiene la información que quieres preguntar.
En M4 recuperabas una variable con
$; después puedes hacerle la pregunta con>.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
De TRUE/FALSE a personas completas
Al evaluar una condición en una tabla, cada respuesta
TRUEpuede conservar la fila completa con todas sus variables:mayores_21 <- encuesta_social_demo$edad > 21encuesta_social_demo[mayores_21, ]La coma
,después de la condición indica a R que conserve todas las columnas de esas personas.Tu tarea
mayores_21la condición que identifica a quienes tienen más de 21 años.encuesta_social_demo[mayores_21, ]para observar las personas completas conservadas.Mira las posiciones donde
mayores_21contieneTRUE.Cada posición del vector lógico corresponde a la fila del mismo caso.
Los casos 2, 5, 6 y 8 tienen
TRUE; por eso permanecen sus filas completas.Consola R
Una forma más legible de filtrar
La función
filter()del paquetedplyrsimplifica el filtrado de casos:filter(base, condicion)Dentro de
filter()escribimos directamente el nombre de la variable sin repetirbase$.Tu tarea
Usa
filter()sobreencuesta_social_demopara conservar únicamente a las personas que dedican más de 3 horas de estudio.La operación busca conservar casos que cumplen una condición.
La forma general es
filter(base, condicion).Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Filtra otro grupo
Para filtrar por una categoría de texto usamos
==con el valor exacto entre comillas:filter(base, variable == "Categoría")Tu tarea
Aplica
filter()para conservar únicamente a las personas cuya carrera sea"Sociología".¿Qué variable contiene la carrera de cada caso?
La condición debe preguntar si
carreraes igual a"Sociología".Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Los datos pasan a la siguiente acción
El operador pipe
|>pasa los datos de una etapa a la siguiente:base |> filter(condicion)Permite leer las transformaciones de izquierda a derecha sin modificar la base original guardada en memoria.
Tu tarea
Encadena
encuesta_social_democon el pipe|>haciafilter()para conservar a quienes trabajan (trabaja == "Sí").Parte desde la base que quieres enviar a una acción.
|>puede leerse como “pasa este resultado a la siguiente acción”.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Qué variables necesito
Mientras
filter()elige casos (filas),select()elige variables (columnas) por su nombre:filter(edad > 20)→ conserva filasselect(edad, carrera)→ conserva columnasTu tarea
Usa
select()sobreencuesta_social_demopara conservar únicamente las variablesedadycarrera.La tarea no pide quitar personas; pide conservar ciertas variables.
select()recibe primero la base y después los nombres de las variables.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Filtra y después selecciona
El pipe permite encadenar múltiples decisiones en un flujo de lectura continuo:
Tu tarea
Construye un pipeline con
|>que primero filtre a las personas que trabajan (trabaja == "Sí") y luego seleccione las variablesedadycarrera.Primero decide qué casos necesitas; después qué variables.
El resultado de
filter()puede pasar aselect()mediante|>.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Checkpoint B: prepara los datos
Checkpoint B — Bases y preparación
Para una investigación social necesitamos trabajar con las personas que estudian en
encuesta_jovenes. De ellas necesitamos su edad y comuna:|:—|—:|:—|:—|:—|| | 1 | 18 | Sí | Norte | Bus | | 2 | 20 | No | Centro | Metro | | 3 | 19 | Sí | Sur | Bicicleta | | 4 | 22 | Sí | Centro | Bus | | 5 | 21 | No | Norte | Metro | | 6 | 23 | Sí | Sur | Metro | | 7 | 19 | No | Norte | Bus | | 8 | 24 | Sí | Centro | Bicicleta |
Tu tarea
Construye un flujo con
|>que filtre a quienes estudian, seleccione las variablesedadycomuna, y guarde el resultado endatos_preparados.Primero decide qué casos necesitas conservar (quienes estudian) y qué variables necesitas (edad y comuna).
Usa
filter(estudia == "Sí")para los casos y luego encadena con|>haciaselect(edad, comuna).Guarda el flujo completo en
datos_preparados <- encuesta_jovenes |> filter(...) |> select(...).Consola R
Aquí no sabemos el valor
En encuestas sociales es común que algunas personas no respondan. En R, la ausencia de información se representa con
NA(sin comillas):0: es un valor observado (reportó cero horas).NA: el dato no está disponible (desconocido).Vector disponible:
horas_cuidado <- c(6, 0, NA, 8, 4).Tu tarea
Ejecuta
horas_cuidadoy observa en la consola la diferencia entre el valor observado0y el dato ausenteNA.Pregunta primero: ¿conocemos el valor o no?
Para la persona 2 conocemos exactamente la respuesta: cero.
Persona 2 → valor conocido 0. Persona 3 → valor ausente
NA.Consola R
¿Dónde falta información?
Para detectar datos ausentes usamos
is.na(). DevuelveTRUEdonde falta información yFALSEdonde hay un valor disponible:is.na(c(6, 0, NA))→FALSE, FALSE, TRUEVector:
horas_cuidado <- c(6, 0, NA, 8, 4).Tu tarea
Aplica
is.na()sobrehoras_cuidadopara identificar qué posiciones contienen datos ausentes.Necesitas una pregunta que sea
TRUEjusto donde falta información.La función diseñada para preguntar por ausencia es
is.na().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Cuántos datos faltan?
En operaciones aritméticas, R trata a
TRUEcomo 1 y aFALSEcomo 0. Por eso podemos contar cuántos datos faltan sumando los valores lógicos:sum(is.na(vector))Vector:
horas_cuidado <- c(6, 0, NA, 8, 4).Tu tarea
Cuenta cuántos valores ausentes hay en
horas_cuidadocombinandosum()eis.na().Primero necesitas saber qué posiciones están ausentes.
is.na()produce TRUE/FALSE ysum()puede contar los TRUE.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Por qué el cálculo no responde
Si un vector contiene
NA,sum()omean()devuelvenNAporque el total exacto se desconoce. Para operar con los valores efectivamente disponibles agregamosna.rm = TRUE:mean(vector, na.rm = TRUE)Vector:
horas_cuidado <- c(6, 0, NA, 8, 4).Tu tarea
Calcula el promedio de las horas de cuidado disponibles aplicando
mean()con el argumentona.rm = TRUE.¿Conocemos los cinco valores necesarios para calcular un total completo?
Algunas funciones pueden calcular usando únicamente los valores disponibles, pero primero debemos reconocer cuántos faltan.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Prepara y revisa los casos pertinentes
Disponemos de
encuesta_social_democon horas de cuidado:Tu tarea
datos_trabajanfiltrando a quienes trabajan (trabaja == "Sí") y seleccionandoidyhoras_cuidado.horas_cuidadode ese subgrupo usandosum(is.na()).Primero decide qué casos necesitas y qué variables conservar.
Después de crear
datos_trabajan, revisa su variablehoras_cuidadocon la herramienta de missing que ya conoces.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Otra base con datos ausentes
En
encuesta_barrioregistramos los minutos de traslado de seis residentes:Tu tarea
minutos_viajeusandosum(is.na()).sum()conna.rm = TRUE.Antes de calcular, revisa si
minutos_viajecontiene valores ausentes.Primero detecta y cuenta las ausencias. Después piensa cómo pedir a
sum()que use los valores disponibles.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Cantidad o categoría?
Para elegir el análisis correcto debemos distinguir dos tipos de información:
Tu tarea
Clasifica cada variable asignando
"categoria"o"cantidad"atipo_carrera,tipo_horasytipo_zona_codigo.Pregunta qué significa cada valor para una persona.
¿El valor indica cuánto tiene el caso o a qué grupo pertenece?
carrerayzona_codigoindican grupos;horas_estudioindica una cantidad.Consola R
¿Cuántas personas respondieron cada cosa?
Para resumir una variable categórica contamos cuántos casos hay en cada grupo mediante una tabla de frecuencias:
table(base$variable)|:—|—:|:—|—:|:—|| | 1 | 20 | Sociología | 3 | No | | 2 | 22 | Historia | 5 | Sí | | 3 | 19 | Antropología | 2 | No | | 4 | 21 | Sociología | 4 | No | | 5 | 24 | Trabajo Social | 6 | Sí | | 6 | 23 | Antropología | 3 | Sí | | 7 | 20 | Historia | 5 | No | | 8 | 25 | Sociología | 2 | Sí |
Tu tarea
Construye la tabla de frecuencias de la variable
carreraenencuesta_social_demoy guárdala entabla_carrera.Necesitas contar cuántos casos aparecen en cada categoría.
table()recibe una variable y produce un conteo por categoría.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Del conteo a la proporción
Para saber qué fracción del total representa cada categoría convertimos la tabla en proporciones con
prop.table():prop.table(tabla)Cada valor va de 0 a 1 y todas las celdas suman 1.0.
Tu tarea
Aplica
prop.table()atabla_carrerapara calcular la proporción de estudiantes en cada disciplina.Ahora quieres saber qué parte del total representa cada conteo.
prop.table()transforma una tabla de frecuencias en proporciones.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Cuenta no es lo mismo que porcentaje
Para facilitar la comunicación social, multiplicamos las proporciones por 100 y obtenemos porcentajes directos:
prop.table(tabla) * 100Tu tarea
tabla_carrerael conteo de frecuencias decarrera.Primero obtén los conteos. Después expresa esos conteos respecto del total.
Recupera las dos herramientas de los ejercicios anteriores.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Ver la distribución
Un gráfico de barras muestra visualmente la distribución de una variable categórica:
barplot(tabla)Cada barra representa una categoría y su altura refleja la frecuencia observada.
Tu tarea
Genera el gráfico de barras de
tabla_carrerausando la funciónbarplot().El gráfico representa la tabla de frecuencias que ya construiste.
barplot()puede recibir directamente una tabla de conteos.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Describe otra variable categórica
En
encuesta_campusconsultamos la satisfacción de ocho estudiantes:Tu tarea
satisfacciony guárdala entabla_satisfaccion.prop.table()y genera su gráfico conbarplot().Primero necesitas saber cuántos casos hay en cada categoría. Después, qué parte del total representan.
Recupera las dos herramientas que usaste para obtener frecuencias y después proporciones.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Mira la distribución
Para explorar una variable cuantitativa observamos cómo se reparten sus valores mediante un histograma:
hist(base$variable)El eje horizontal muestra intervalos continuos y la altura de cada barra refleja cuántos casos caen en ese rango.
|:—|—:|:—|—:|:—|| | 1 | 20 | Sociología | 3 | No | | 2 | 22 | Historia | 5 | Sí | | 3 | 19 | Antropología | 2 | No | | 4 | 21 | Sociología | 4 | No | | 5 | 24 | Trabajo Social | 6 | Sí | | 6 | 23 | Antropología | 3 | Sí | | 7 | 20 | Historia | 5 | No | | 8 | 25 | Sociología | 2 | Sí |
Tu tarea
Genera un histograma de la variable
horas_estudioenencuesta_social_demousandohist().Pregunta primero qué representan los números de
horas_estudio: ¿son códigos de grupos o cantidades de horas?Son cantidades. El histograma permite observar cómo se reparten esos valores antes de resumirlos.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Dónde está el centro?
La media resume el centro repartiendo la suma total de valores por igual entre todos los casos:
mean(base$variable)Se expresa en la misma unidad de medida (horas de estudio).
|:—|—:|:—|—:|:—|| | 1 | 20 | Sociología | 3 | No | | 2 | 22 | Historia | 5 | Sí | | 3 | 19 | Antropología | 2 | No | | 4 | 21 | Sociología | 4 | No | | 5 | 24 | Trabajo Social | 6 | Sí | | 6 | 23 | Antropología | 3 | Sí | | 7 | 20 | Historia | 5 | No | | 8 | 25 | Sociología | 2 | Sí |
Tu tarea
Calcula la media de
horas_estudioenencuesta_social_demousando la funciónmean().Necesitas un número que resuma el centro utilizando todos los valores.
La función para calcular la media es
mean().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Otro centro posible
La mediana es el valor que ocupa la posición central una vez ordenados los datos de menor a mayor:
median(vector)Deja exactamente el 50% de las observaciones por debajo y el 50% por encima.
Tiempos registrados:
minutos_lectura <- c(15, 20, 25, 30, 45, 60, 120).Tu tarea
Calcula la mediana de
minutos_lecturausando la funciónmedian().Ordena mentalmente los valores de menor a mayor y busca qué queda en el centro.
La función que calcula la mediana es
median().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Cuál centro describe mejor?
Compara dos grupos donde solo cambia un valor extremo:
viaje_regular: 20, 22, 24, 25, 26, 28, 30viaje_con_accidente: 20, 22, 24, 25, 26, 28, 120La media es sensible a valores extremos, mientras que la mediana es resistente (robusta).
Tu tarea
Calcula la media y la mediana de
viaje_con_accidentey observa cómo la media se distorsiona mientras la mediana permanece estable.Compara qué ocurre con cada centro cuando solo cambia el último valor.
Recupera las dos funciones de centro que aprendiste en E2 y E3.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Qué tan distintos son los valores?
Dos grupos pueden tener la misma media pero comportarse muy diferente. La desviación estándar mide qué tan dispersos están los datos respecto a su media:
sd(vector)|:—|—:|:—|—:|:—|| | 1 | 20 | Sociología | 3 | No | | 2 | 22 | Historia | 5 | Sí | | 3 | 19 | Antropología | 2 | No | | 4 | 21 | Sociología | 4 | No | | 5 | 24 | Trabajo Social | 6 | Sí | | 6 | 23 | Antropología | 3 | Sí | | 7 | 20 | Historia | 5 | No | | 8 | 25 | Sociología | 2 | Sí |
Tu tarea
Observa la dispersión en los grupos de prueba y calcula la desviación estándar de
horas_estudioenencuesta_social_demousandosd().El centro ya es igual en ambos grupos. Falta describir cuánto se separan sus valores.
La función que resume esta dispersión es
sd().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Primero prepara, después describe
En investigación preparamos los datos antes de describirlos. Queremos analizar a las personas que no trabajan (
trabaja == "No"):|:—|—:|:—|—:|:—|| | 1 | 20 | Sociología | 3 | No | | 2 | 22 | Historia | 5 | Sí | | 3 | 19 | Antropología | 2 | No | | 4 | 21 | Sociología | 4 | No | | 5 | 24 | Trabajo Social | 6 | Sí | | 6 | 23 | Antropología | 3 | Sí | | 7 | 20 | Historia | 5 | No | | 8 | 25 | Sociología | 2 | Sí |
Tu tarea
datos_no_trabajanel subgrupo filtrado de quienes no trabajan.horas_estudioen ese subgrupo.Primero prepara el grupo correcto y conserva la variable que quieres describir. Después revisa si faltan datos.
Recupera
filter()yselect(). Después usais.na()para diagnosticar antes de calcular con disponibles.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Checkpoint C: describe una variable nueva
Checkpoint C — Describir una variable cuantitativa
Describe la variable
minutos_viajedeencuesta_movilidad. Nota que el caso 10 demoró 90 minutos por una contingencia:Tu tarea
Describe completamente
minutos_viajeenencuesta_movilidad: calcula su media, su mediana y su desviación estándar.Necesitas describir el centro y la dispersión de una variable cuantitativa. Trabajaste dos centros distintos.
Recupera las funciones utilizadas para media, mediana y desviación estándar.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Dos valores de la misma persona
Para analizar si dos cantidades se relacionan, debemos observar ambos valores en la misma persona.
Fila 3 de
encuesta_social: 3 horas de estudio y puntaje 58 en métodos.Tu tarea
Guarda en
par_persona_3el vectorc(x, y)con las horas de estudio (3) y el puntaje (58) de la persona 3.Mira una sola fila.
Esa fila contiene las dos cantidades de una misma persona.
Para el caso 3:
(3, 58).Consola R
Cada persona se vuelve un punto
En un gráfico de dispersión (scatterplot) cada persona se representa como un punto en el plano:
plot(base$variable_x, base$variable_y)Base
encuesta_social(12 casos):Tu tarea
Genera el gráfico de dispersión con
plot()ubicandohoras_estudioen el eje horizontal ypuntaje_metodosen el eje vertical.Cada caso aporta dos valores que forman un punto.
La primera variable va al eje horizontal y la segunda al vertical.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Hacia dónde va la relación?
La dirección de una relación describe cómo varía una cantidad cuando la otra aumenta:
Nota fundamental: Asociación empírica no demuestra causalidad.
Tu tarea
Observa los gráficos de referencia y clasifica la dirección asignando
"positiva"o"negativa"adireccion_aydireccion_b.Lee el gráfico de izquierda a derecha.
Pregunta qué tiende a pasar con y cuando x aumenta.
A sube; B baja; C no muestra una dirección lineal clara.
Consola R
No basta con la dirección
Dos relaciones pueden ir en la misma dirección pero exhibir diferente dispersión alrededor de una trayectoria.
Tu tarea
Observa los gráficos A y B. Asigna
"A"o"B"agrafico_mas_concentradosegún cuál muestra los puntos más alineados.Ambos suben. Busca otra diferencia.
Mira qué tan cerca están los puntos de una tendencia aproximadamente lineal.
A está más concentrado; B está más disperso.
Consola R
Resume el patrón con un número
El coeficiente de correlación de Pearson (r) resume la fuerza y dirección de una relación lineal en un número entre -1 y +1:
cor(base$x, base$y)Cercano a +1 indica fuerte relación positiva; cercano a 0, ausencia de relación lineal.
Base
encuesta_socialdisponible.Tu tarea
Calcula el coeficiente de correlación de Pearson entre
horas_estudioypuntaje_metodosenencuesta_socialusandocor().Ya observaste el patrón. Ahora necesitas resumir numéricamente su asociación lineal.
La función trabajada para ese resumen es
cor().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Prepara los pares antes de correlacionar
Antes de correlacionar debemos aislar el grupo pertinente. Queremos estudiar horas de trabajo e ingreso únicamente entre quienes efectivamente trabajan (
trabaja == "Sí"):Tu tarea
trabaja == "Sí") y guarda el subgrupo endatos_trabajan.horas_trabajoeingreso_milesen ese subgrupo.Para formar un punto necesitas disponibles ambas cantidades del mismo caso.
Primero prepara el subgrupo y revisa los missing. Después trabaja con los pares completos.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Otra pregunta, otra base
En
encuesta_lecturaregistramos los minutos dedicados a leer y el puntaje de comprensión de 10 participantes:Tu tarea
plot()entre minutos de lectura y puntaje de comprensión.cor().Primero convierte cada par en un punto. Después resume numéricamente el patrón lineal.
Recupera las dos herramientas centrales del módulo: una gráfica y una numérica.
Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
No todas las relaciones son lineales
No todas las relaciones siguen una línea recta. Si una relación es monótona curva, el orden o jerarquía de los casos se conserva perfectamente.
El coeficiente de Spearman evalúa rangos y orden en lugar de distancias métricas:
cor(x, y, method = "spearman")Vectores:
x_curva <- 1:8,y_curva <- c(2, 5, 11, 20, 36, 65, 118, 215).Tu tarea
Observa el cálculo de Pearson en el editor (r ≈ 0.88) y calcula la correlación de Spearman para comprobar que el orden se preserva al 100% (rs = 1.0).
Consola R
Una relación basada en rangos
Cuando una relación conserva el orden de los casos aunque sea curva, Spearman devuelve valores cercanos a 1 porque evalúa rangos:
cor(x, y, method = "spearman")Vectores disponibles
x_curvaey_curva.Tu tarea
Calcula el coeficiente de Spearman entre
x_curvaey_curvaindicando el argumentomethod = "spearman".Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Elige antes de ejecutar
Criterio de elección según la trayectoria visual:
Tu tarea
Observa los tres gráficos del panel y asigna
"pearson","spearman"o"ninguno"ametodo_a,metodo_bymetodo_c.Consola R
De la muestra a la inferencia
Para evaluar si la correlación observada en una muestra aporta evidencia creíble sobre una relación en la población usamos
cor.test():cor.test(x, y)Entrega: estimación muestral (
estimate), valor p (p-value) e intervalo de confianza (conf.int).Base
encuesta_socialdisponible.Tu tarea
Aplica la prueba de correlación inferencial con
cor.test()entrehoras_estudioypuntaje_metodosenencuesta_social.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Qué dice la hipótesis nula?
En inferencia estadística:
Tu tarea
Evalúa cada afirmación asignando
TRUEoFALSEaafirmacion_probabilidad_h0eafirmacion_incompatibilidad.Consola R
Magnitud y evidencia son cosas distintas
No confundas magnitud (r) con evidencia (p):
Dos muestras pueden tener la misma correlación (r = 0.50), pero con mayor tamaño muestral (N) el p-value es más pequeño y la estimación es más precisa.
Tu tarea
Compara el Estudio A (n = 10) y el Estudio B (n = 500). Asigna
"Estudio A"o"Estudio B"aestudio_menor_py aestudio_mayor_precision.Consola R
Mira, elige y evalúa
En
encuesta_socialqueremos analizar si la edad se asocia con las horas de estudio:Tu tarea
plot()entre edad y horas de estudio.cor.test()entre ambas variables.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Checkpoint D: decide y justifica
Checkpoint D — Decidir y evaluar una correlación
En
encuesta_emprendimientoobservamos que las ventas crecen de forma fuertemente acelerada según los años del negocio:Tu tarea
Evalúa la relación monótona entre
antiguedad_anosyventas_mensualesaplicando la prueba de correlación de Spearman (method = "spearman") concor.test().Observa el gráfico de dispersión: la relación asciende en curva pronunciada, no en línea recta.
Cuando una relación es monótona curva o con crecimiento exponencial, el método adecuado es Spearman.
Ejecuta
cor.test(encuesta_emprendimiento$antiguedad_anos, encuesta_emprendimiento$ventas_mensuales, method = "spearman").Consola R
Elige las variables relevantes
Para analizar relaciones entre múltiples cantidades numéricas, primero seleccionamos únicamente las columnas cuantitativas relevantes:
Tu tarea
Selecciona las variables
edad,horas_estudioyhoras_ociodesdeencuesta_socialusandoselect()y guarda el data frame enanalisis.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Varias relaciones a la vez
Al aplicar
cor()a una tabla con varias columnas numéricas, R calcula una matriz de correlaciones donde cada celda muestra la correlación entre una fila y una columna:cor(tabla, method = "pearson")Tu tarea
Calcula la matriz de correlaciones de la base
analisisque preparaste en el ejercicio anterior.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
No leas dos veces la misma relación
Propiedades de una matriz de correlaciones:
Tu tarea
En una matriz de 3 variables numéricas, ¿cuántos pares de correlación únicos e informativos existen (sin diagonal ni repeticiones)? Guarda ese número en
pares_unicos.Consola R
No todos los pares usan los mismos casos
Cuando hay datos ausentes en algunas variables de la matriz:
complete.obs: elimina cualquier fila que tenga unNAen alguna variable.pairwise.complete.obs: calcula cada par de correlación usando todos los casos disponibles para ese par específico.Base
seguimientocon mediciones incompletas:Tu tarea
Calcula la matriz de correlaciones de
seguimientousando el argumentouse = "pairwise.complete.obs".Consola R
Cuando una variable tiene dos categorías
Una variable binaria (0 = No, 1 = Sí) puede correlacionarse con una cantidad métrica (correlación punto-biserial). El signo indica qué grupo tiene promedios más altos según la categoría codificada con 1:
Tu tarea
Calcula la correlación entre la variable binaria
trabaja_01y elingreso_milesenencuesta_socialusandocor().Consola R
Lee una matriz para responder una pregunta
Queremos analizar de forma conjunta tres variables en
encuesta_social:trabaja_01,ingreso_milesyhoras_ocio.Base
encuesta_socialdisponible.Tu tarea
analisis_finalla selección detrabaja_01,ingreso_milesyhoras_ocio.cor().trabaja_01yhoras_ociousandocor.test().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Dos variables categóricas
Para estudiar la relación entre dos variables cualitativas, construimos una tabla de contingencia (cruzada):
table(base$variable_fila, base$variable_columna)Distribución en
encuesta_participacion(60 casos):Tu tarea
Cruza
participacion_organizacionytransporte_campusenencuesta_participacioncontable(), guárdala entablay muéstrala en consola.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Comparar porcentajes
Como los grupos tienen tamaños diferentes (40 que participan vs 20 que no), debemos comparar porcentajes condicionales por fila:
prop.table(tabla, margin = 1) * 100Cada fila suma exactamente 100%.
Tu tarea
Calcula las proporciones por fila de
tablausandoprop.table()con el argumentomargin = 1.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Qué esperaríamos sin asociación?
Dos variables son independientes si la distribución de una no cambia según la categoría de la otra:
En el total de la muestra, 15 de 60 personas usan Metro (el 25%). Si no hubiera relación, esperaríamos ese mismo 25% en ambos grupos.
Tu tarea
Si el transporte fuera completamente independiente de la participación, ¿qué porcentaje de usuarios de Metro esperaríamos en cada grupo? Revisa el porcentaje global en el texto y guárdalo en
porcentaje_esperado_metro.Consola R
Medir observado vs esperado
La prueba de Chi-cuadrado (χ2) de independencia compara las frecuencias observadas contra las que esperaríamos si no hubiera asociación:
prueba <- chisq.test(tabla)H0: las variables son independientes en la población.
Tu tarea
Ejecuta la prueba de Chi-cuadrado sobre
tabla, guárdala enpruebay muéstrala en la consola.Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Mira lo que esperaba la prueba
El objeto retornado por
chisq.test()contiene tanto las frecuencias reales (prueba$observed) como las frecuencias esperadas teóricas (prueba$expected).Tu tarea
Consulta primero las frecuencias observadas (
prueba$observed) y luego las frecuencias esperadas (prueba$expected).Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
¿Significativo significa grande?
Un p-value pequeño indica evidencia contra la independencia, pero no mide la fuerza de la asociación:
Tu tarea
Compara ambas tablas significativas. Asigna
"Tabla 1"o"Tabla 2"atabla_asociacion_mas_fuertesegún cuál muestra una asociación sustantivamente más intensa.Consola R
Otra asociación categórica
En
encuesta_comunidadconsultamos a 80 personas sobre suzona_residencia(Norte, Centro, Sur) y su nivel deactividad_comunitaria(Alta, Media, Baja):Tu tarea
zona_residenciayactividad_comunitariay guárdala entabla_comunidad.prop.table().chisq.test()sobre la tabla, guárdala enprueba_comunidady consulta sus frecuencias esperadas.Consola R
¿Qué tipo de problema es?
Antes de analizar debemos identificar el tipo de variables y la técnica adecuada:
Preguntas de estudio: - Problema 1: ¿Dedicar más horas de estudio se asocia con mayor autoeficacia académica? - Problema 2: ¿El medio de transporte se asocia con la participación estudiantil?
Tu tarea
Clasifica cada problema asignando
"cuantitativo"o"categorico"aproblema_1yproblema_2.Consola R
Prepara antes de analizar
En
encuesta_vida_universitariaanalizaremos a los estudiantes de jornada diurna:Tu tarea
jornada == "Diurna"), seleccionahoras_estudioyautoeficacia_academica, y guarda el resultado endatos_estudio_diurno.sum(is.na()).Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Tu tarea
plot()entre horas de estudio y autoeficacia.cor.test().Puedes guiarte con la siguiente sintaxis o estructura de código:
Consola R
Tu tarea
tabla_participacion.prop.table().chisq.test(), guárdala enprueba_participaciony consulta sus frecuencias esperadas.Consola R
Checkpoint E: nueva base, nueva pregunta
Checkpoint E — Integración final: Nueva base, nueva pregunta
En
encuesta_vinculos_barrialesinvestigamos si entre las personas ocupadas, participar en organizaciones vecinales se asocia con la confianza comunitaria:Tu tarea
datos_checkpointfiltrando a quienes están ocupados (ocupado == "Sí") y seleccionandoparticipa_vecinal_01yconfianza_comunitaria.cor.test().Primero filtra a los ocupados (
ocupado == "Sí") y selecciona las variables de interés endatos_checkpoint.Como una variable es 0/1 y la otra es numérica continua, evalúa la relación con
cor.test().Ejecuta
cor.test(datos_checkpoint$participa_vecinal_01, datos_checkpoint$confianza_comunitaria).Consola R