# Alejandra Ciria
# Clase: Aprendizaje, Motivación y Cognición I
# Ciencias Cognitivas y del Comportamiento
# Facultad de Psicología, UNAM
# Set working directory: Session - Set working directory - Choose directory
# Clase 1 en R
# Estadistica descriptiva:
# Su propósito es describir o caracterizar los datos
# Medidas de tendencia central, medidas de dispersión
# Para eso usaremos los siguientes datos de los alumnos de la clase:
# Edad (primero mujeres, luego hombres)
# Género
# Edad y género de los participantes, se asigna a la variable edad y a género
# Se crean las dos variables con sus vectores datos
# Para asignarle vectores a una variable se concatenan mediante: <- c()
edad <- c(20,20,22,19,20,21,22,22,27,21,21,20,24,23,20,20,25,22,20,21,23,22,20,20,20,24,22,27)
genero_num <- c(2,1,1,2,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1)
# Imrpimir en consola los datos asignados a edad
# Cuando se imprime un arreglo en la consola el valor que aparece
# entre corchetes es la posición del pirmer elemento que se imprime en ese renglón
print(edad)
## [1] 20 20 22 19 20 21 22 22 27 21 21 20 24 23 20 20 25 22 20 21 23 22 20 20 20
## [26] 24 22 27
# También lo puedes imprimir sólo escribiendo el nombre de la variable
edad
## [1] 20 20 22 19 20 21 22 22 27 21 21 20 24 23 20 20 25 22 20 21 23 22 20 20 20
## [26] 24 22 27
# Género es un factor con dos niveles
genero <- as.factor(genero_num)
levels(genero) <- c("mujer", "hombre")
# Imrpimir en consola los datos asignados a genero
print(genero)
## [1] hombre mujer mujer hombre mujer mujer mujer mujer mujer hombre
## [11] hombre mujer hombre mujer mujer mujer mujer mujer mujer hombre
## [21] mujer hombre mujer mujer mujer mujer mujer mujer
## Levels: mujer hombre
#Ver resumen de datos
str(edad)
## num [1:28] 20 20 22 19 20 21 22 22 27 21 ...
str(genero)
## Factor w/ 2 levels "mujer","hombre": 2 1 1 2 1 1 1 1 1 2 ...
# Agregar los datos a un data.frame
df <- data.frame(edad, genero)
df
## edad genero
## 1 20 hombre
## 2 20 mujer
## 3 22 mujer
## 4 19 hombre
## 5 20 mujer
## 6 21 mujer
## 7 22 mujer
## 8 22 mujer
## 9 27 mujer
## 10 21 hombre
## 11 21 hombre
## 12 20 mujer
## 13 24 hombre
## 14 23 mujer
## 15 20 mujer
## 16 20 mujer
## 17 25 mujer
## 18 22 mujer
## 19 20 mujer
## 20 21 hombre
## 21 23 mujer
## 22 22 hombre
## 23 20 mujer
## 24 20 mujer
## 25 20 mujer
## 26 24 mujer
## 27 22 mujer
## 28 27 mujer
# Resumen estadísticos descriptivos del data.frame
summary(df)
## edad genero
## Min. :19.00 mujer :21
## 1st Qu.:20.00 hombre: 7
## Median :21.00
## Mean :21.71
## 3rd Qu.:22.25
## Max. :27.00
# Tip: para ver la estadística descritiva por grupo
# utiliza la función: by()
by(df, df$genero, summary)
## df$genero: mujer
## edad genero
## Min. :20.0 mujer :21
## 1st Qu.:20.0 hombre: 0
## Median :22.0
## Mean :21.9
## 3rd Qu.:23.0
## Max. :27.0
## ------------------------------------------------------------
## df$genero: hombre
## edad genero
## Min. :19.00 mujer :0
## 1st Qu.:20.50 hombre:7
## Median :21.00
## Mean :21.14
## 3rd Qu.:21.50
## Max. :24.00
# Distribuciones de frecuencia
#Explorar los datos mediante un histograma
# El histograma se utiliza para representar distribuciones de frecuencia
# Los intervalos de clase se dibujan en el eje x de modo que
# cada clase comience y termine en el límite real del intervalo.
# La altura de la barra corresponde a la frecuencia del intervalo de clase.
hist(edad)

# Decidir los intervalos de tres en tres
hist(edad, breaks = 3, main = "Histograma de edades",
xlab = "Edades", ylab = "Frecuencia", col = "purple")

# Chismear la función hist
# ?hist
# Gráfica de tallo y hoja
# Es una variante del histograma
# Se presentan los valores de la variable (el tallo) eje vertical
# Las frecuencias son las hojas, eje horizontal
stem(edad, scale= 0.3)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 9
## 2 | 000000000011112222223344
## 2 | 577
stem(edad, scale= 1)
##
## The decimal point is at the |
##
## 19 | 0
## 20 | 0000000000
## 21 | 0000
## 22 | 000000
## 23 | 00
## 24 | 00
## 25 | 0
## 26 |
## 27 | 00
# Diagrama de dispersión
# Instalar paquete ggplot2
# install.packages("ggplot2")
# Usar librería
library(ggplot2)
# El comando aes(), que se refiere a la “estética” del gráfico,
# se especifica del conjunto de datos que se va a representar
ggplot(df, aes(x = edad, fill = genero)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Se usa la librería ggplot2 (Basic scatter plot) con geom_point
ggplot(df, aes(x=genero, y=edad)) + geom_point()

# Si se quiere cambiar el tamaño de los puntos y la forma
ggplot(df, aes(x=genero, y=edad)) +
geom_point(size=2, shape=23)

# Cambiar la forma de los puntos según los niveles
ggplot(df, aes(x=edad, y=edad, shape=genero)) +
geom_point()

# Cambiar la forma de los puntos y los colores según los niveles
ggplot(df, aes(x=edad, y=edad, shape=genero, color=genero)) +
geom_point()

# Usar geom_jitter es útil cuando tienes valores discretos y pocos datos
# Le añade un poco de ruido aleatorio a los datos para que no se encimen
# Ver la dispersión de la edad en ambos ejes y la variable genero por color y forma
ggplot(df, aes(x=edad, y=edad, shape=genero, color=genero)) +
geom_jitter()

# Ver la disperisón por edad pero en el eje x ponemos la variable género
# Para ver los cada uno de los puntos de los datos, Jittering, geom_jitter()
ggplot(df, aes(x=genero, y=edad, colour= genero)) +
geom_jitter(shape=16, position=position_jitter(0.2))

# Medidas de tendencia central
# Media
# Es el promedio de los datos
# La suma de todos los datos divididos por el número de datos
sum(edad)/length(edad)
## [1] 21.71429
# En R, la función para calcular la media es: mean()
mean(edad)
## [1] 21.71429
# Mediana: es el puntaje central si la cantidad de puntajes es impar
# Si la cantidad es par, la mediana se toma como el promedio de los
# dos puntajes centrales
# Primero los organizamos del menor al mayor
# La función para ordenar es: sort()
sort(edad)
## [1] 19 20 20 20 20 20 20 20 20 20 20 21 21 21 21 22 22 22 22 22 22 23 23 24 24
## [26] 25 27 27
(21 + 21) / 2
## [1] 21
# En R, la función para calcular la mediana es: median()
median(edad)
## [1] 21
# Si queremos, podemos guardar el resultado en una variable
mediana_edad <- median(edad)
media_edad <- mean(edad)
media_edad
## [1] 21.71429
mediana_edad
## [1] 21
# Moda
# El dato que se repite con mayor frecuencia
# R no tiene una función específica para calcular la moda
# Es necesario crear una función para la moda de EDAD
obtener_moda_e <- function(edad) {
unicos <- unique(edad)
unicos[which.max(tabulate(match(edad, unicos)))]
}
# Calcular la moda usando la función llamada: obtener_moda_e
resultado <- obtener_moda_e(edad)
print(resultado)
## [1] 20
# ¿Pero qué está haciendo esa función?
# Datos sin repetirse
unicos <- unique(edad)
print(unicos)
## [1] 20 22 19 21 27 24 23 25
# De todos los datos "edad" cuáles se repiten considerando la posición en el vector de "unicos"
prueba <- match(edad,unicos)
print(prueba)
## [1] 1 1 2 3 1 4 2 2 5 4 4 1 6 7 1 1 8 2 1 4 7 2 1 1 1 6 2 5
# Para cada dato en su respectiva posición en "unicos" cuenta cuantas veces se repiten en "edad"
prueba <- tabulate(match(edad,unicos))
print(prueba)
## [1] 10 6 1 4 2 2 2 1
# Nos permite ver cuál es el dato que más se repite de "edad" considerando su posición en "unicos"
prueba <- which.max(tabulate(match(edad,unicos)))
print(prueba)
## [1] 1
# Nos da el dato que más se repite, el dato que se encuentra en la posición de "unicos"
prueba <- unicos[which.max(tabulate(match(edad,unicos)))]
print(prueba)
## [1] 20
#¿Se puede calcular la moda de la variable género?
# Sí
# Ahora vamos a crear una función para la moda de la variable "genero"
obtener_moda_g <- function(genero) {
unicos_g <- unique(genero)
unicos_g[which.max(tabulate(match(genero, unicos_g)))]
}
# Calcular la moda usando la función llamada: obtener_moda_g
resultado_g <- obtener_moda_g(genero)
print(resultado_g)
## [1] mujer
## Levels: mujer hombre
# Medidas de dispersión
# Mínimos, máximos y rango
min(edad)
## [1] 19
max(edad)
## [1] 27
# En R se puede obtener con la funcion: range
min_max <- range(edad)
min_max
## [1] 19 27
# La variable min_max contiene el mínimo y el máximo, es un vector con 2 elementos
# Si queremos llamar al primer elemento, el mínimo
min_max[1]
## [1] 19
# Si queremos al segundo elemento, el máximo
min_max[2]
## [1] 27
# El rango: se usa para tener una rápida idea del grado
# de dispersión o separación de un conjunto de datos
rango <- min_max[2] - min_max[1]
rango
## [1] 8
# Cuartiles y Rango intercuartílico
# Entre el Q1 y el Q3 se encuentran la mitad de las observaciones
# 50% de los datos ocurren ahí
sort(edad)
## [1] 19 20 20 20 20 20 20 20 20 20 20 21 21 21 21 22 22 22 22 22 22 23 23 24 24
## [26] 25 27 27
#Primer cuartil Q1: el valor de puntuación más alto del 25% inferior
q_25 <- quantile(edad, 0.25)
q_25
## 25%
## 20
#Tercer cuartil Q3: el valor de puntuación más alto del 75% inferior
q_75 <- quantile(edad,0.75)
q_75
## 75%
## 22.25
# Rango intercuartílico
# El rango intercuartílico es una medida de variabilidad adecuada cuando la medida
# de posición central empleada ha sido la mediana. Se define como la diferencia entre
# el tercer cuartil (Q3) y el primer cuartil (Q1), es decir: RQ = Q3 - Q1.
# A la mitad del rango intercuartil se le conoce como desviación cuartil (DQ)
rango_inter <- q_75 - q_25
rango_inter
## 75%
## 2.25
# R tiene una función directa para calcular el rango intercuartilílico
IQR(edad)
## [1] 2.25
# Gráfica de caja y bigotes
# min, Q1, mediana (Q2), Q3, max
# Mediana: está representada con la raya obscura dentro de la caja
# Si está el centro del rectángulo, la distribución es simétrica
# Rango intercuartílico (Q3– Q1)= 23.75 - 22 = 1.75
# Los bigotes, se extienden hasta los valores máximo y mínimo de la serie
# O hasta 1.5 veces el rango intercuartílico (sirve para ver valores atípicos)
boxplot(edad)

# Agregarle nombres a los ejes y establecer los límites del eje y
boxplot(edad, xlab= "grupos", ylab= "edad", ylim = c(15,30))

# Cuando los datos incluye una variable categórica y una o más variables discretas o continuas
# te puede interesar saber cómo los valores varían según la variable categórica
#Boxplot- hacer una grafica de caja y bigotes por grupo y color
# Asignando los datos del ggplot sobre la estética a una variable
pl <- ggplot(df, aes(x=genero, y=edad, colour= genero))
pl + geom_boxplot()
