Importar bases de datos

library(lsm)      # Para descargar una base de datos
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(moments)  # Para hallar las medidas de forma
library(e1071)
## 
## Adjuntando el paquete: 'e1071'
## The following objects are masked from 'package:moments':
## 
##     kurtosis, moment, skewness
library(ggplot2)
## 
## Adjuntando el paquete: 'ggplot2'
## The following object is masked from 'package:e1071':
## 
##     element
library(knitr)

En este chunk se cargan las librerías necesarias para el desarrollo del proyecto. Cada paquete proporciona funciones específicas para manipular datos, realizar cálculos estadísticos, crear gráficos y presentar tablas de manera organizada.

Cargar bases de datos

datosCompleto <- lsm::survey

Se carga la base de datos survey del paquete lsm, la cual contiene la información que será utilizada durante todo el análisis estadístico.

Explorar la estructura de la base de datos

str(datosCompleto)   #A) Estructura de los datos
## tibble [800 × 66] (S3: tbl_df/tbl/data.frame)
##  $ Observation : num [1:800] 1 2 3 4 5 6 7 8 9 10 ...
##  $ ID          : chr [1:800] "SB11201910010435" "SB11201910004475" "SB11201910011427" "SB11201910041975" ...
##  $ Gender      : chr [1:800] "Female" "Male" "Male" "Male" ...
##  $ Like        : chr [1:800] "TV" "Network" "Network" "TV" ...
##  $ Age         : num [1:800] 21.4 21.1 20.9 18.4 16.6 ...
##  $ Smoke       : chr [1:800] "No" "Yes" "Yes" "Yes" ...
##  $ Height      : num [1:800] 1.58 1.6 1.5 1.53 1.78 1.65 1.73 1.53 1.64 1.52 ...
##  $ Weight      : num [1:800] 75 80 64 49 82 80 90 55 50 78 ...
##  $ BMI         : num [1:800] 30 31.2 28.4 20.9 25.9 ...
##  $ School      : chr [1:800] "Private" "Public" "Private" "Public" ...
##  $ SES         : chr [1:800] "Medium" "High" "High" "Low" ...
##  $ Enrollment  : chr [1:800] "Credit" "Scholarship" "Scholarship" "Credit" ...
##  $ Score       : num [1:800] 81 78 77 70 68 65 54 50 36 35 ...
##  $ MotherHeight: chr [1:800] "Short_M" "Normal_M" "Normal_M" "Tall_M" ...
##  $ MotherAge   : num [1:800] 41 45 45 45 46 46 47 48 48 48 ...
##  $ MotherCHD   : num [1:800] 0 0 0 0 1 0 0 0 0 1 ...
##  $ FatherHeight: chr [1:800] "Normal_F" "Short_F" "Tall_F" "Short_F" ...
##  $ FatherAge   : num [1:800] 40 43 44 45 45 46 46 48 48 49 ...
##  $ FatherCHD   : num [1:800] 1 1 1 2 1 1 1 1 1 1 ...
##  $ Status      : chr [1:800] "Distinguished" "Distinguished" "Distinguished" "Regular" ...
##  $ SemAcum     : num [1:800] 4.25 2.8 4.15 3.2 3.45 2.75 2.7 4.35 4.3 2.8 ...
##  $ Exam1       : num [1:800] 1.5 2.3 3.4 2.5 3.1 3.8 5 4 2.5 2.4 ...
##  $ Exam2       : num [1:800] 5 4.9 3.6 4.2 3.5 4.4 3 2.3 3.3 2.6 ...
##  $ Exam3       : num [1:800] 5 3.7 2 5 5 4.2 3.5 4.6 3.8 4.3 ...
##  $ Exam4       : num [1:800] 4.5 3.3 1.9 2.5 3 5 3.6 4.3 1.9 5 ...
##  $ ExamAcum    : num [1:800] 16 14.2 10.9 14.2 14.6 17.4 15.1 15.2 11.5 14.3 ...
##  $ Definitive  : num [1:800] 4 3.55 2.73 3.55 3.65 ...
##  $ Expense     : num [1:800] 48.9 72.1 85.2 56.6 64.6 63 40.8 65.4 37.3 63 ...
##  $ Income      : num [1:800] 1.61 2.07 2.84 1.55 2.32 2.1 1.69 2.18 1.71 2.1 ...
##  $ Gas         : num [1:800] 27.4 24.2 22.3 23.1 27.3 ...
##  $ Course      : chr [1:800] "Face-to-Face" "Virtual" "Face-to-Face" "Virtual" ...
##  $ Law         : chr [1:800] "Agree" "Agree" "Agree" "Agree" ...
##  $ Economic    : chr [1:800] "Regular" "Good" "Regular" "Bad" ...
##  $ Race        : chr [1:800] "Ethnic" "Ethnic" "Ethnic" "Ethnic" ...
##  $ Region      : chr [1:800] "North" "Center" "North" "Center" ...
##  $ EMO1        : num [1:800] 1 4 3 4 2 3 2 3 4 2 ...
##  $ EMO2        : num [1:800] 2 4 1 2 1 1 4 1 2 2 ...
##  $ EMO3        : num [1:800] 2 1 3 3 2 4 2 4 3 3 ...
##  $ EMO4        : num [1:800] 1 2 3 1 4 2 3 2 1 1 ...
##  $ EMO5        : num [1:800] 4 1 2 2 2 2 1 1 2 2 ...
##  $ GOAL1       : chr [1:800] "Strongly agree" "Undecided" "Agree" "Agree" ...
##  $ GOAL2       : chr [1:800] "Agree" "Disagree" "Disagree" "Undecided" ...
##  $ GOAL3       : chr [1:800] "Strongly agree" "Disagree" "Agree" "Strongly agree" ...
##  $ Pre_STAT1   : num [1:800] 2 1 5 4 1 4 4 2 2 2 ...
##  $ Pre_STAT2   : num [1:800] 4 1 1 3 4 1 2 3 3 5 ...
##  $ Pre_STAT3   : num [1:800] 2 1 3 1 1 5 4 3 3 2 ...
##  $ Pre_STAT4   : num [1:800] 5 1 1 2 2 3 2 3 2 4 ...
##  $ Post_STAT1  : num [1:800] 4 5 5 3 5 2 3 3 2 5 ...
##  $ Post_STAT2  : num [1:800] 5 1 2 2 3 3 2 3 2 3 ...
##  $ Post_STAT3  : num [1:800] 2 3 3 4 3 5 5 4 5 4 ...
##  $ Post_STAT4  : num [1:800] 2 3 3 5 4 4 3 5 5 1 ...
##  $ Pre_IDARE1  : chr [1:800] "Quite a bit" "Quite a bit" "Quite a bit" "Little" ...
##  $ Pre_IDARE2  : chr [1:800] "Little" "Little" "Little" "Nothing" ...
##  $ Pre_IDARE3  : chr [1:800] "Quite a bit" "A lot" "Quite a bit" "Quite a bit" ...
##  $ Pre_IDARE4  : chr [1:800] "Quite a bit" "Nothing" "Quite a bit" "Quite a bit" ...
##  $ Pre_IDARE5  : chr [1:800] "Little" "Quite a bit" "Little" "Nothing" ...
##  $ Post_IDARE1 : chr [1:800] "A lot" "A little" "Nothing" "Quite a bit" ...
##  $ Post_IDARE2 : chr [1:800] "A lot" "Nothing" "Quite a bit" "A little" ...
##  $ Post_IDARE3 : chr [1:800] "A little" "Quite a bit" "Nothing" "A lot" ...
##  $ Post_IDARE4 : chr [1:800] "Quite a bit" "A lot" "Nothing" "Quite a bit" ...
##  $ Post_IDARE5 : chr [1:800] "A lot" "Quite a bit" "Nothing" "A lot" ...
##  $ PSICO1      : chr [1:800] "Frequently" "Frequently" "Sometimes" "Almost always" ...
##  $ PSICO2      : chr [1:800] "Almost always" "Sometimes" "Sometimes" "Frequently" ...
##  $ PSICO3      : chr [1:800] "Frequently" "Sometimes" "Sometimes" "Frequently" ...
##  $ PSICO4      : chr [1:800] "Almost always" "Frequently" "Frequently" "Almost never" ...
##  $ PSICO5      : chr [1:800] "Almost always" "Frequently" "Sometimes" "Sometimes" ...

La función str() permite conocer la estructura de la base de datos, identificando el número de observaciones, las variables disponibles y el tipo de dato de cada una. Esto facilita verificar que los datos sean adecuados para el análisis.

Visualizar los nombres de las variables

names(datosCompleto)    #A) Muestra los nombres de las columnas (variables).
##  [1] "Observation"  "ID"           "Gender"       "Like"         "Age"         
##  [6] "Smoke"        "Height"       "Weight"       "BMI"          "School"      
## [11] "SES"          "Enrollment"   "Score"        "MotherHeight" "MotherAge"   
## [16] "MotherCHD"    "FatherHeight" "FatherAge"    "FatherCHD"    "Status"      
## [21] "SemAcum"      "Exam1"        "Exam2"        "Exam3"        "Exam4"       
## [26] "ExamAcum"     "Definitive"   "Expense"      "Income"       "Gas"         
## [31] "Course"       "Law"          "Economic"     "Race"         "Region"      
## [36] "EMO1"         "EMO2"         "EMO3"         "EMO4"         "EMO5"        
## [41] "GOAL1"        "GOAL2"        "GOAL3"        "Pre_STAT1"    "Pre_STAT2"   
## [46] "Pre_STAT3"    "Pre_STAT4"    "Post_STAT1"   "Post_STAT2"   "Post_STAT3"  
## [51] "Post_STAT4"   "Pre_IDARE1"   "Pre_IDARE2"   "Pre_IDARE3"   "Pre_IDARE4"  
## [56] "Pre_IDARE5"   "Post_IDARE1"  "Post_IDARE2"  "Post_IDARE3"  "Post_IDARE4" 
## [61] "Post_IDARE5"  "PSICO1"       "PSICO2"       "PSICO3"       "PSICO4"      
## [66] "PSICO5"

Con names() se listan todas las variables de la base de datos, lo que permite identificar cuáles serán utilizadas en el desarrollo del proyecto.

Seleccionar variables de interés

Edad <- datosCompleto$Age  
Sexo <- datosCompleto$Gender

En este chunk se extraen las variables Age y Gender para facilitar su uso en análisis posteriores, aunque posteriormente también se trabaja con la base de datos completa.

Seleccionar la muestra de estudio

Muestra <- datosCompleto[1:150,]

Se seleccionan las primeras 150 observaciones de la base de datos para conformar la muestra con la que se realizarán los análisis descriptivos.

Verificar el tamaño de la muestra

dim(Muestra)
## [1] 150  66
cat("Tamaño de la muestra seleccionada:", nrow(Muestra), "observaciones\n")
## Tamaño de la muestra seleccionada: 150 observaciones

Se verifica que la muestra seleccionada tenga 150 observaciones, asegurando que el conjunto de datos utilizado corresponda al tamaño definido para el estudio.

Tablas de distribución de frecuencias

# Variable categórica 1: Gender
tabla_gender <- table(Muestra$Gender)
tabla_gender_rel <- prop.table(tabla_gender)

kable (data.frame(Categoria = names(tabla_gender),
                  Frecuencia = as.vector(tabla_gender),
                  Frec_Relativa = round(as.vector(tabla_gender_rel), 3)),
      caption = "Tabla 1. Distribución de frecuencias - Gender")
Tabla 1. Distribución de frecuencias - Gender
Categoria Frecuencia Frec_Relativa
Female 71 0.473
Male 79 0.527
# Variable categórica 2: Region
tabla_region <- table(Muestra$Region)
tabla_region_rel <- prop.table(tabla_region)

kable(data.frame(Categoria = names(tabla_region),
                  Frecuencia = as.vector(tabla_region),
                  Frec_Relativa = round(as.vector(tabla_region_rel), 3)),
      caption = "Tabla 2. Distribución de frecuencias - Region")
Tabla 2. Distribución de frecuencias - Region
Categoria Frecuencia Frec_Relativa
Center 51 0.34
North 45 0.30
South 54 0.36
# Variable categórica 3: Smoke
tabla_smoke <- table(Muestra$Smoke)
tabla_smoke_rel <- prop.table(tabla_smoke)

kable(data.frame(Categoria = names(tabla_smoke),
                  Frecuencia = as.vector(tabla_smoke),
                  Frec_Relativa = round(as.vector(tabla_smoke_rel), 3)),
      caption = "Tabla 3. Distribución de frecuencias - Smoke")
Tabla 3. Distribución de frecuencias - Smoke
Categoria Frecuencia Frec_Relativa
No 81 0.54
Yes 69 0.46

Se construyen tablas de frecuencias absolutas y relativas para las variables Gender, Region y Smoke, permitiendo conocer cómo se distribuyen los individuos dentro de cada categoría.

Tablas de contingencia

# Tabla de contingencia: Gender x Smoke
tabla_gender_smoke <- table(Muestra$Gender, Muestra$Smoke)

kable(tabla_gender_smoke,
      caption = "Tabla 4. Tabla de contingencia entre Gender y Smoke")
Tabla 4. Tabla de contingencia entre Gender y Smoke
No Yes
Female 38 33
Male 43 36
# Tabla de contingencia adicional: Gender x Region
tabla_gender_region <- table(Muestra$Gender, Muestra$Region)


kable(tabla_gender_region,
      caption = "Tabla 5. Tabla de contingencia entre Gender y Region")
Tabla 5. Tabla de contingencia entre Gender y Region
Center North South
Female 24 22 25
Male 27 23 29
# Tabla de contingencia: Smoke x Region
tabla_smoke_region <- table(Muestra$Smoke, Muestra$Region)

kable(tabla_smoke_region,
      caption = "Tabla 6. Tabla de contingencia entre Smoke y Region")
Tabla 6. Tabla de contingencia entre Smoke y Region
Center North South
No 27 24 30
Yes 24 21 24
# Proporciones por fila (para comparar la distribución de Smoke dentro de cada Region)
prop.table(tabla_smoke_region, margin = 1)
##      
##          Center     North     South
##   No  0.3333333 0.2962963 0.3703704
##   Yes 0.3478261 0.3043478 0.3478261
# Proporciones por fila (para comparar distribuciones)
prop.table(tabla_gender_smoke, margin = 1)
##         
##                 No       Yes
##   Female 0.5352113 0.4647887
##   Male   0.5443038 0.4556962

En este chunk se elaboran tablas de contingencia para analizar la distribución conjunta entre las variables Gender, Region y Smoke. Además, se calculan proporciones por fila para facilitar la comparación entre categorías.

Gráfico de barras: Distribución de género

ggplot(Muestra, aes(x = Gender)) +
  geom_bar(fill = "#B03060") +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.3) +
  labs(title = "Distribución de Genero",
       x = "Genero",
       y = "Frecuencia absoluta") +
  theme_minimal()

El gráfico representa la frecuencia de cada categoría de la variable Gender, permitiendo visualizar de forma rápida la distribución de hombres y mujeres en la muestra.

Gráfico de barras: Distribución de fumadores

ggplot(Muestra, aes(x = Smoke)) +
  geom_bar(fill = "#BA55D3") +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.3) +
  labs(title = "Distribución de Fumadores",
       x = "Fuma",
       y = "Frecuencia absoluta") +
  theme_minimal()

Este gráfico muestra la cantidad de personas fumadoras y no fumadoras presentes en la muestra, facilitando la comparación entre ambas categorías.

Gráfico de barras: Distribución por región

ggplot(Muestra, aes(x = Region)) +
  geom_bar(fill = "lightsteelblue") +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.3) +
  labs(title = "Distribución de Region",
       x = "Region",
       y = "Frecuencia absoluta") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Se presenta la distribución de los participantes según la variable Region, permitiendo identificar visualmente la frecuencia de cada región en la muestra.

Gráfico comparativo: Género según condición de fumador

ggplot(Muestra, aes(x = Gender, fill = Smoke)) +
  geom_bar(position = "dodge") +
   scale_fill_manual(values = c("Yes" = "#FFB6C1", "No" = "#8B5F65")) +
  labs(title = "Comparación de Gender según Smoke",
       x = "Gender",
       y = "Frecuencia absoluta",
       fill = "Smoke") +
  theme_minimal()

El gráfico compara la distribución del hábito de fumar entre hombres y mujeres, permitiendo observar posibles diferencias entre ambos grupos.

Gráfico comparativo: Género según región

# Diagrama de barras: Gender x Region
ggplot(Muestra, aes(x = Region, fill = Gender)) +
  geom_bar(position = "dodge") +
   scale_fill_manual(values = c("Male" = "#8B5742", "Female" = "#FFA07A")) +
  labs(title = "Distribución de Gender según Region",
       x = "Region",
       y = "Frecuencia absoluta",
       fill = "Gender") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Este gráfico permite comparar la distribución de hombres y mujeres dentro de cada región, facilitando la identificación de posibles diferencias entre ellas.

Gráfico comparativo: Fumadores según región

# Diagrama de barras: Smoke x Region
ggplot(Muestra, aes(x = Region, fill = Smoke)) +
  geom_bar(position = "dodge") +
  scale_fill_manual(values = c("Yes" = "#FFE4E1", "No" = "#CDB7B5")) +
   labs(title = "Distribución de Smoke según Region",
       x = "Region",
       y = "Frecuencia absoluta",
       fill = "Smoke") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

El gráfico compara la distribución de fumadores y no fumadores en cada región, permitiendo observar si existen diferencias en el hábito de fumar según la ubicación geográfica.