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.
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.
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.
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.
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.
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.
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.
# 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")
| 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")
| 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")
| 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.
# 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")
| 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")
| 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")
| 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.
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.
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.
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.
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.
# 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.
# 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.