1 Introducción a R-Studio

Es un entorno de desarrollo integrado para el lenguaje de programación R, dedicado a la computación estadística y gráficos.

R-STUDIO
R-STUDIO

1.0.1 Creación de Objetos

R es un lenguaje orientado a objetos. Los objetos pueden ser usados para guardar valores y pueden madificarse mediante funciones como por ejemplo sumar dos objetos o calcular la media.

X <- 4
Y <- 2

1.0.2 R como calculadora

Puedes usar el programa R como una calculadora, basta con conocer cuáles son los signos y comandos a utilizar para realizar las operaciones. Copia los comandos en tu script de R y ejecútalos para ver los resultados.

#suma
Z <- X +Y

Z
## [1] 6
#multiplicación
2*2
## [1] 4
#división
2/2
## [1] 1
#potencia
4^2
## [1] 16
#raíz cuadrada
sqrt(16)
## [1] 4

1.0.3 Abrir una Base de R-STUDIO y Resumir

1.0.3.1 Cargar paquetes

Lo primero que tenemos que hacer es cargar los paquetes que vamos a utilizar para el análisis. En este caso vamos a usar:

library(tidyverse)# Incluye paquetes de importación, visualización entre otros
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)# Manipulación de Datos
library(ggplot2)# Visualización de datos 
library(readxl)# Importación de datos
require(tibble)# Tablas

(Recordar que si no ha instalado estos paquetes debe correr primero el comando: install.packages(“nombre del paquete”))

1.0.4 Cargar base incorporada en R-Studio

R ya incorpora una serie de bases de datos que te pueden resultar de utilidad para empezar a explorar las posibilidades de análisis estadístico que te ofrece este programa.

Como ejemplo vamos a explorara la base de datos llamada “cars”.

# Cargar la base
data(cars)
# Visualizar los encabezados
head(cars)
# Resumir con algunas estadísticas las variables de la base 
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

1.0.5 Incluir gráficas

Puedes agregar fácilmente gráficos a tu análisis. Por ejemplo:

data(pressure)
head(pressure)
hist(pressure$temperature)

boxplot(pressure$temperature)

2 Análisis Exploratorio de Datos

El análisis exploratorio de datos (https://www.youtube.com/watch?v=UeMpYEktLfU&ab_channel=Comunicaci%C3%B3nNum%C3%A9rica VER VIDEO) (EDA por sus siglas en inglés) implica el uso de gráficos y visualizaciones para explorar y analizar un conjunto de datos. El objetivo es explorar, investigar y aprender, no confirmar hipótesis estadísticas.

2.1 ¿Cuándo debo utilizarlo?

El análisis exploratorio de datos es una potente herramienta para explorar un conjunto de datos. Incluso cuando su objetivo es efectuar análisis planificados, el EDA puede utilizarse para limpiar datos, para análisis de subgrupos o simplemente para comprender mejor los datos. Un paso inicial importante en cualquier análisis de datos es representar los datos gráficamente.

No gráfico: Calcula estadísticas descriptivas de las variables

Gráfico: Calcula estadísticas de forma gráfica

Univariado: Analiza una sola variable a la vez

Multivariado: Analiza dos o más variables

A su vez, cada uno de esas dividisiones puede subdividirse según los tipos de datos con los que trabajemos: cateógicos o numéricos.

3 Situación Problema.

Exploración de la Intersección entre la Psicología y la Ciencia de Datos: Comportamiento Humano en Entornos Digitales

En un centro de investigación psicológica enfocado en el comportamiento humano en entornos digitales como redes sociales y plataformas de juegos en línea. Recopilamos datos que incluyen variables demográficas, patrones de uso de redes sociales, datos de juegos en línea y mediciones psicológicas. Utilizamos herramientas de ciencia de datos y análisis estadístico para identificar patrones significativos que ayuden a comprender cómo diferentes factores influyen en el comportamiento en línea y el bienestar psicológico. Este enfoque integrado entre la psicología y la ciencia de datos nos permite desarrollar intervenciones efectivas para mejorar la calidad de vida en línea y promover la salud mental de los usuarios.

3.1 Construcción de una base de datos

A continuación se construirá la primera base de datos a partir de las variables. Para esto, como se observa en los siguientes comandos, se parte por la construcción de 11 variables de 20 casos cada una:

#Creación de las variables: todas tienen la misma cantidad de casos.
Paciente <- c("Mario", "Luis", "Pedro", "Maria", "Sandra", "Erika", "Laura","Luz","Olga")
Edad <- c(18, 20, 20, 17, 19, 22, 22, 22,31)
Sexo <- c("Masculino", "Femenino", "Masculino", "Femenino", "Masculino", "Femenino", "Masculino", "Femenino","Femenino")
Educacion <- c("Universidad", "Secundaria", "Universidad", "Posgrado", "Universidad", "Universidad", "Universidad", "Posgrado","Posgrado")
Ocupacion <- c("Estudiante", "Profesional", "Estudiante", "Profesional", "Estudiante", "Profesional", "Estudiante", "Profesional","Posgrado")
Red_Social_Principal <- c("Instagram", "Facebook", "Instagram", "Twitter", "TikTok", "Instagram", "Facebook", "Instagram","TikTok")
Tiempo_en_Redes_Sociales <- c(2.5, 3.0, 2.0, 2.5, 3.5, 2.2, 2.8, 3.0,2.0)
Horas_Semanales_de_Juego <- c(15, 20, 12, 10, 18, 15, 20, 15,41)
Autoestima <- c(8.2, 6.9, 7.8, 7.0, 8.5, 7.3, 8.0, 7.6,9)
Ansiedad_Social <- c(42, 50, 38, 45, 35, 48, 40, 42,45)
Satisfaccion_con_la_Vida <- c(7.5, 6.9, 8.0, 7.2, 7.8, 6.5, 7.0, 7.3,8)
Estres<- c(2,2,1,3,4,2,1,4,4)

A partir de las variables ya creadas se puede construir una base de datos.

df=data.frame(Paciente, Edad,Sexo,Edad,Educacion, Ocupacion, Red_Social_Principal,Horas_Semanales_de_Juego,Ansiedad_Social,Satisfaccion_con_la_Vida,Estres)
df
library(dplyr)
knitr::kable(df)
Paciente Edad Sexo Edad.1 Educacion Ocupacion Red_Social_Principal Horas_Semanales_de_Juego Ansiedad_Social Satisfaccion_con_la_Vida Estres
Mario 18 Masculino 18 Universidad Estudiante Instagram 15 42 7.5 2
Luis 20 Femenino 20 Secundaria Profesional Facebook 20 50 6.9 2
Pedro 20 Masculino 20 Universidad Estudiante Instagram 12 38 8.0 1
Maria 17 Femenino 17 Posgrado Profesional Twitter 10 45 7.2 3
Sandra 19 Masculino 19 Universidad Estudiante TikTok 18 35 7.8 4
Erika 22 Femenino 22 Universidad Profesional Instagram 15 48 6.5 2
Laura 22 Masculino 22 Universidad Estudiante Facebook 20 40 7.0 1
Luz 22 Femenino 22 Posgrado Profesional Instagram 15 42 7.3 4
Olga 31 Femenino 31 Posgrado Posgrado TikTok 41 45 8.0 4

4 Representación de datos

La representación de datos se refiere al proceso de presentar la información de manera visual o tabular para facilitar su comprensión, análisis y comunicación. Esta representación puede tomar diversas formas, incluyendo gráficos, tablas, diagramas, mapas y resúmenes estadísticos. El objetivo principal de la representación de datos es convertir datos crudos en información comprensible y significativa.

Aquí hay una descripción de algunas formas comunes de representación de datos:

Gráficos: Los gráficos son representaciones visuales de datos que utilizan diferentes tipos de elementos visuales, como líneas, barras, puntos y áreas, para mostrar la relación entre variables o la distribución de datos. Algunos tipos comunes de gráficos incluyen gráficos de barras, gráficos de líneas, gráficos circulares, histogramas y diagramas de dispersión.

Tablas: Las tablas son representaciones tabulares de datos que organizan la información en filas y columnas. Las tablas son útiles para mostrar datos detallados o para comparar valores entre diferentes categorías o grupos. Pueden incluir valores numéricos, texto descriptivo y otras características.

4.1 Representación en Gráficos.

Para visualizar los datos en formato dataframe puede usar el comando View() o también head() para visualizar las primeras filas en consola.

head(df)

4.1.1 Diagrama de barras

ggplot2 es un sistema para crear gráficos de forma declarativa, basado en la Gramática de los Gráficos. Se deben proporcionar los datos, indicar a ggplot2 cómo asignar las variables a la estética y qué tipo de gráficas utilizar. La función geom_bar() se utiliza para producir gráficos de área 1d: gráficos de barras para x categóricas, e histogramas para y continuas

library(ggplot2)
ggplot(data=df, aes(x=Paciente, y=Edad)) + geom_bar(stat="identity")+labs(title = "Distribución de Edad por Paciente")

El diagrama puede ser dibujado en forma horizontal usando la función coord_flip()

ggplot(data=df, aes(x=Paciente, y=Edad)) + geom_bar(stat="identity")+labs(title = "Distribución de Edad por Paciente")+ coord_flip()

Podemos cambiar el ancho, así como también el color de las barras y bordes. Nótese que se puede hacer una copia de la gráfica en una variable, en este ejemplo en p para que luego pueda ser usada para presentar el grafico o realizar más transformaciones

ggplot(data=df, aes(x=Paciente, y=Edad)) + geom_bar(stat="identity",width=0.5)+labs(title = "Distribución de Edad por Paciente")

ggplot(data=df, aes(x=Paciente, y=Edad)) + geom_bar(stat="identity",width=0.5,color="blue", fill="green3")+labs(title = "Distribución de Edad por Paciente")

ggplot(data=df, aes(x=Paciente, y=Edad)) + geom_bar(stat="identity",width=0.8, fill="steelblue")+labs(title = "Distribución de Edad por Paciente")

#creando tabla de resumen
Tabla_1 <- df %>%
  dplyr::group_by(Red_Social_Principal) %>%                                  
  dplyr::summarise(Total = n()) %>%                                
  dplyr::mutate(Porcentaje = round(Total/sum(Total)*100, 1)) %>%   
  dplyr::arrange(Red_Social_Principal)


"Grafico"
## [1] "Grafico"
G1<-ggplot(Tabla_1, aes(x =Red_Social_Principal, y=Total) ) + 
  geom_bar(width = 0.7,stat="identity",                 
           position = position_dodge(), fill="cyan4") +  
  ylim(c(0,5))+
  #xlim(c(0,300)) +                  
  #ggtitle("Un título") + 
  labs(x="Red Social", y= "Frecuencias \n (Porcentajes)")   +   
  geom_text(aes(label=paste0(Total," ", "", "(", Porcentaje, "%", ")")),  
            vjust=-0.9, 
            color="black", 
            hjust=0.5,
            # define text position and size
            position = position_dodge(0.9),  
            angle=0, 
            size=4.5) +   
  theme(axis.text.x = element_text(angle = 0, vjust = 1, hjust=1)) +      
  theme_bw(base_size = 16) +
  #coord_flip() +                                                         
  facet_wrap(~"Distribución de Tipo de Red Social")
G1

4.1.2 Gráfico de barras agrupado

Un gráfico de barras agrupado muestra un valor numérico para un conjunto de entidades divididas en grupos y subgrupos.

El conjunto de datos para el presente ejemplo proporciona 3 columnas: el valor numérico (value), y 2 variables categóricas. En el llamada aes(), x es (categ), y el subgrupo (categ) se da al argumento fill. En la función geom_bar(), debe especificarse position=“dodge” para que las barras estén una al lado de la otra.

  • El siguiente llamado es utilizado para el gráfico de barras agrupado
head(df)
ggplot(df, aes(fill = Sexo, y = Edad, x = Red_Social_Principal, label = Edad)) +
  geom_bar(position = "dodge", stat = "identity") +
  labs(title = "Distribución de la Red Social según la Edad y Sexo",
       x = "Red Social Principal",
       y = "Edad",
       fill = "Sexo")  

ggplot(df, aes(fill = Sexo, x = Red_Social_Principal)) +
  geom_bar(position = "stack") +
  geom_text(stat = 'count', aes(label = ..count..), position = position_stack(vjust = 0.5), size = 3, color = "black") +
  labs(title = "Distribución de la Red Social según el Sexo",
       x = "Red Social Principal",
       y = "Frecuencia") +
  scale_fill_manual(values = c("blue2", "pink2"), name = "Sexo", labels = c("Hombre", "Mujer")) +
  theme(legend.position = "right")  # Ubicación de la leyenda 
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

4.1.3 Histograma

Los histogramas son útiles para representar la distribución de variables continuas como Edad, Tiempo en Redes Sociales y Horas Semanales de Juego. Cada barra del histograma muestra la frecuencia de los datos..

ggplot(data = df, aes(x = Edad)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black", alpha = 0.8) +
  labs(title = "Histograma de Edades",
       x = "Edad",
       y = "Frecuencia")

4.1.4 Gráfico Circular

ggplot2 no ofrece ningún geom específica para construir diagramas circulares (piecharts). El truco es el siguiente: El marco de datos de entrada tiene 2 columnas: los nombres de los grupos (group here) y su valor (value here), se construye un gráfico de barras apilado con una sola barra utilizando la función geom_bar(), luego se hace circular con coord_polar()

library(magrittr)
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
## The following object is masked from 'package:tidyr':
## 
##     extract
library(dplyr)

#Tabla resumen
Tabla_2 <- df %>% 
  group_by(Sexo) %>% # Variable a ser transformada
  count() %>% 
  ungroup() %>% 
  mutate(Porcentaje = `n` / sum(`n`)) %>% 
  arrange(Porcentaje) %>%
  mutate(etiquetas = scales::percent(Porcentaje))

#Grafico #2
require(scales)
## Loading required package: scales
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
ggplot(Tabla_2, aes(x = "", y = Porcentaje, fill = Sexo)) +
  geom_col(color = "black") +
  geom_label(aes(label = etiquetas),
             position = position_stack(vjust = 0.5),
             show.legend = FALSE) +
  guides(fill = guide_legend(title = "Distribución de Pacientes según el Sexo")) + scale_color_gradient() +
  coord_polar(theta = "y") + ggtitle ("")

  #theme_void() 

4.2 Representación en Tablas

La libreria questionr de R contiene la función freq la cual genera y formatea tablas de frecuencia simples a partir de una variable o una tabla, con porcentajes y opciones de formato. El resultado es un objeto de la clase data.frame.

library(questionr)

Tabla_Sexo <- questionr::freq(Sexo, cum = TRUE, sort = "dec", total = TRUE)
knitr::kable(Tabla_Sexo)
n % val% %cum val%cum
Femenino 5 55.6 55.6 55.6 55.6
Masculino 4 44.4 44.4 100.0 100.0
Total 9 100.0 100.0 100.0 100.0

La tabla puede ordenarse opcionalmente en frecuencia descendente, y funciona bien con kable. Si deseamos ver la estructura de la tabla generada por freq() utilizamos la función str()

str(Tabla_Sexo) 
## Classes 'freqtab' and 'data.frame':  3 obs. of  5 variables:
##  $ n      : num  5 4 9
##  $ %      : num  55.6 44.4 100
##  $ val%   : num  55.6 44.4 100
##  $ %cum   : num  55.6 100 100
##  $ val%cum: num  55.6 100 100

4.2.1 Tabla de frecuencias agrupada

Para realizar una tabla de frecuencias agrupada utilizaremos en este ejemplo la Regla de Sturges, en la que el número de clases es obtenido por medio de: \(c=1+ln(N)/ln(2)\) donde \(N\) representa el número total de datos. Consideremos el Ejemplo 23 de los apuntes, en el que se representan las edades de un conjunto de estudiantes.

Ejemplo: Se tienen las siguientes edades de algunos estudiantes

edades <- c(22, 19, 16, 13, 18, 15, 20, 14, 15, 16,
          15, 16, 20, 13, 15, 18, 15, 13, 18, 15)
knitr::kable(head(edades))
x
22
19
16
13
18
15

Encontremos el número de clases usando la regla de Sturges

n_sturges = 1 + log(length(edades))/log(2)
n_sturgesc = ceiling(n_sturges)
n_sturgesf = floor(n_sturges)

n_clases = 0
if (n_sturgesc%%2 == 0) {
  n_clases = n_sturgesf
} else {
  n_clases = n_sturgesc
}
R = max(edades) - min(edades)
w = ceiling(R/n_clases)

Calculemos ahora nuestra tabla de frecuencias con número de clases n_clases. Primero creamos una lista de fronteras de clases bins y luego agrupamos los datos basados en estas

bins <- seq(min(edades), max(edades) + w, by = w)
bins
## [1] 13 15 17 19 21 23
Edades <- cut(edades, bins)
Freq_table <- transform(table(Edades), Rel_Freq=prop.table(Freq), Cum_Freq=cumsum(Freq))
knitr::kable(Freq_table)
Edades Freq Rel_Freq Cum_Freq
(13,15] 7 0.4117647 7
(15,17] 3 0.1764706 10
(17,19] 4 0.2352941 14
(19,21] 2 0.1176471 16
(21,23] 1 0.0588235 17
str(Freq_table)
## 'data.frame':    5 obs. of  4 variables:
##  $ Edades  : Factor w/ 5 levels "(13,15]","(15,17]",..: 1 2 3 4 5
##  $ Freq    : int  7 3 4 2 1
##  $ Rel_Freq: num  0.4118 0.1765 0.2353 0.1176 0.0588
##  $ Cum_Freq: int  7 10 14 16 17

Podemos también crear un histograma para la tabla de frecuencias agrupada

df2 <- data.frame(x = Freq_table$Edades, y = Freq_table$Freq)
knitr::kable(df2)
x y
(13,15] 7
(15,17] 3
(17,19] 4
(19,21] 2
(21,23] 1
ggplot(data=df2, aes(x=x, y=y)) +
  geom_bar(stat="identity", color="blue", fill="green") +
  xlab("Rango de Edades") +
  ylab("Frecuencia")

5 Análisis Estadístico

Una función multiuso muy útil en R es summary(X), donde X puede ser uno de cualquier número de objetos, incluyendo conjuntos de datos, variables y modelos lineales, por nombrar algunos. Cuando se utiliza, el comando proporciona datos de resumen relacionados con el objeto individual que se introdujo en él. Así, la función de resumen tiene diferentes resultados dependiendo del tipo de objeto que tome como argumento. Además de ser ampliamente aplicable, este método es valioso porque a menudo proporciona exactamente lo que se necesita en términos de estadísticas de resumen.

Usando la función summary() podemos obtener estadísticos de interes y valores de posición:

summary(df$Horas_Semanales_de_Juego)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.00   15.00   15.00   18.44   20.00   41.00

Del anterior resultado se puede observar que la hora mínima en el juego fue de 10, el 25% se ubicó en 15 horas indicando que dedicaron 15 o menor o igual a 15, al igual que el 50%, en promedio dedicaron 18,4 horas de juego, el 75% dedicó menos o igual que 20 horas y la hora que más dedicaron fue de 41.

Por otro lado, se puede notar la función summary() no nos entrega todos los estadísticos de interés, para solucionar esto podemos hacer uso de la librería, pastecs y la función stat.desc(), como se muestra a continuación.

library(pastecs)
## Warning: package 'pastecs' was built under R version 4.3.3
## 
## Attaching package: 'pastecs'
## The following object is masked from 'package:magrittr':
## 
##     extract
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## The following object is masked from 'package:tidyr':
## 
##     extract
stat.desc(df)

5.1 Caja y extensión

Los gráficos de caja (box plots), también conocidos como diagramas de cajas y bigotes, son una representación gráfica que permite resumir las características principales de los datos (posición, dispersión, asimetría, …) e identificar la presencia de valores atípicos. En esta sección revisaremos cómo hacer box plots en R base y en ggplot2.

Utilizando boxplot() R base

boxplot(df$Edad, horizontal=TRUE, col='steelblue')

Usando geom_boxplot() de la librería ggplot2

library(tidyverse)
library(hrbrthemes)
library(viridis)
## Loading required package: viridisLite
## 
## Attaching package: 'viridis'
## The following object is masked from 'package:scales':
## 
##     viridis_pal
df %>% 
  ggplot(aes(x = "", y = Edad)) +
  geom_boxplot(color = "black", fill = "yellow2", alpha = 0.5) +
  theme_ipsum() +
  theme(legend.position = "none", plot.title = element_text(size = 11)) +
  ggtitle("Distribución de las Edades") +
  coord_flip()

ggplot(df, aes(x = Sexo, y = Edad, fill = Sexo)) +
  geom_boxplot() +
  labs(title = "Diagrama de Edades según el Sexo",
       x = "Sexo", y = "Edades") +
  scale_fill_manual(values = c("lightblue", "pink")) +
  theme_minimal()

5.2 Coeficiente de Variación

El coeficiente de variación (CV) es una medida estadística que se utiliza para evaluar la variabilidad relativa de una muestra o población en relación con su media. Se calcula como la desviación estándar de los datos dividida por la media, y se expresa como un porcentaje multiplicado por 100 para facilitar su interpretación.

El CV es útil cuando se comparan distribuciones de datos con diferentes escalas o unidades, ya que normaliza la variabilidad en relación con la magnitud de los datos. Esto permite realizar comparaciones más significativas entre diferentes conjuntos de datos.

\[CV = \left( \frac{\text{Desviación Estándar}}{\text{Media}} \right) \times 100\]

Ahora vamos a hallar el coeficiente de variación de la variable Edad.

media <- mean(df$Edad)
desviacion <- sd(df$Edad)
coef_variacion <- (desviacion / media) * 100
cat("El coeficiente de variación es:", coef_variacion, "%\n")
## El coeficiente de variación es: 19.25285 %

5.3 Asimetría

El coeficiente de asimetría de Pearson es que es una medida estandarizada de la asimetría de una distribución de datos. Se calcula como el tercer momento estandarizado de la distribución, es decir, la diferencia promedio al cubo entre los datos y la media, dividida por la desviación estándar al cubo. Si el coeficiente de asimetría de Pearson es cero, la distribución es simétrica. Si es positivo, la cola de la distribución está en el lado derecho, y si es negativo, la cola está en el lado izquierdo. Esto proporciona información sobre la forma y dirección de la asimetría en la distribución de datos.

\[\text{Coeficiente de Asimetría de Pearson} = \frac{E[(X - \mu)^3]}{\sigma^3}\]

Como el coefiente de asmetría de Pearson es mayo que cero, indica que la edad presenta distribución asimetrica hacia la derecha.

5.4 Medidas de la curtosis

La curtosis es una medida estadística que describe la forma de la distribución de los datos en relación con una distribución normal estándar. La curtosis es una medida de la “picudez” de la distribución, es decir, cuán puntiaguda o aplanada es en comparación con una distribución normal.

\[\text{Curtosis} = \frac{1}{n} \sum_{i=1}^{n} \left(\frac{x_i - \bar{x}}{s}\right)^4 - 3\]

Platicúrtica: Una distribución platicúrtica es aquella que tiene un exceso de curtosis negativo en comparación con la distribución normal estándar (cuyo exceso de curtosis es 0). Esto significa que la distribución tiene colas más ligeras y es más aplanada en comparación con la distribución normal. En una distribución platicúrtica, los valores se concentran más cerca de la media y hay menos valores extremos en comparación con una distribución normal.

Mesocúrtica: Una distribución mesocúrtica es aquella que tiene un exceso de curtosis igual a 0, es decir, su forma es similar a la de una distribución normal estándar. Esto significa que la distribución tiene una cantidad “normal” de picos y colas, y su forma se asemeja a una campana simétrica.

Leptocúrtica: Una distribución leptocúrtica es aquella que tiene un exceso de curtosis positivo en comparación con la distribución normal estándar. Esto significa que la distribución tiene colas más pesadas y es más puntiaguda en comparación con la distribución normal. En una distribución leptocúrtica, los valores tienden a agruparse más cerca de la media y hay más valores extremos en comparación con una distribución normal.

curtosis <- kurtosis(df$Edad)
cat("La curtosis de la muestra es:", curtosis, "\n")
## La curtosis de la muestra es: 0.8255815

6 Situación Problema #2

Impacto de los Factores de Estilo de Vida y Demográficos en la Salud Mental y Productividad de Empleados Corporativos: Un Análisis Integral

Análisis Univariados y Bivariados

El propósito de este estudio es explorar cómo diferentes factores demográficos y de estilo de vida impactan la salud mental y física de los empleados en un entorno corporativo diverso. Este análisis forma parte de una iniciativa más amplia de bienestar en el lugar de trabajo dirigida por una gran corporación internacional, que busca implementar políticas más efectivas de salud y bienestar para su personal.

Los datos recogidos incluyen variables demográficas básicas como la edad y la estatura, detalles sobre el nivel educativo, y si los empleados están actualmente trabajando o no. Además, se ha recogido información sobre si los empleados asisten a citas psicológicas, si sufren de trastornos, así como su motivación, ansiedad, autoestima, ingresos mensuales, horas de sueño y frecuencia de ejercicio semanal.

library(readxl)       
library(dplyr)       
library(ggplot2)     
#library(naniar) 
datos <- read_excel("Psychological_Data.xlsx")
str(datos)
## tibble [470 × 12] (S3: tbl_df/tbl/data.frame)
##  $ Edad                        : num [1:470] 62 65 18 21 21 57 27 37 39 68 ...
##  $ Estatura (cm)               : num [1:470] 181 160 173 185 161 178 184 150 150 186 ...
##  $ Nivel Educativo             : chr [1:470] "Secundaria" "Secundaria" "Secundaria" "Primaria" ...
##  $ Asiste a citas psicológicas : logi [1:470] FALSE TRUE FALSE TRUE FALSE TRUE ...
##  $ Sufre de trastornos         : logi [1:470] TRUE FALSE FALSE FALSE TRUE TRUE ...
##  $ Trabaja                     : logi [1:470] FALSE TRUE TRUE NA FALSE TRUE ...
##  $ Motivación (1-10)           : num [1:470] 6 NA NA 6 1 1 2 8 7 10 ...
##  $ Ansiedad (1-10)             : num [1:470] 10 NA 1 5 10 3 8 8 10 9 ...
##  $ Autoestima (1-10)           : num [1:470] 10 NA 3 1 8 2 8 10 9 5 ...
##  $ Ingresos Mensuales          : num [1:470] 6994 2688 7400 9981 3707 ...
##  $ Horas de Sueño              : num [1:470] 7 NA 5.8 5.6 9.3 7 7.4 6.1 7.7 4.7 ...
##  $ Días de Ejercicio por Semana: num [1:470] 3 1 2 2 3 1 5 4 6 5 ...