R Markdown

Paquetes

En esta sección se encuentran registrados todos los paquetes disponibles en la base de datos, lo que permite identificar y seleccionar el que se desea utilizar.

library(lsm)      # Para descargar una base de datos
library(dplyr)
## 
## Attaching package: '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)
## 
## Attaching package: 'e1071'
## The following objects are masked from 'package:moments':
## 
##     kurtosis, moment, skewness
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:e1071':
## 
##     element

El resultado confirma que los paquetes fueron cargados correctamente. Los avisos sobre funciones enmascaradas no representan un error; indican que R priorizará la función del paquete cargado más recientemente.

Base de datos

Esta sección crea el objeto datosCompleto a partir de la base de datos survey del paquete lsm. De esta manera, la información queda almacenada en un objeto que puede ser revisado y analizado posteriormente.

datosCompleto <- lsm::survey

El objeto datosCompleto queda disponible para realizar las siguientes operaciones de revisión y análisis sobre la base de datos.

Revisar base de datos

Esta sección permite revisar de manera inicial la estructura de la base de datos y conocer el tipo de información que contiene cada variable.

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

El resultado permite comprobar que la base contiene 800 observaciones y 66 variables, además de identificar qué variables son numéricas y cuáles son de tipo carácter. Esto es útil para decidir qué procedimientos pueden aplicarse a cada variable.

Analizar

Esta sección vuelve a utilizar str() para analizar la estructura interna de la base de datos, mostrando el número de observaciones, variables y el tipo de cada variable.

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

El resultado permite conocer cómo está construida la base y verificar que las variables tienen un tipo de dato adecuado para su posterior análisis.

Names

Esta sección utiliza names() para obtener los nombres de todas las variables o columnas que componen la base de datos.

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"

El resultado permite identificar y consultar fácilmente las variables disponibles en la base. Esto es útil para seleccionar una variable específica cuando se quiera realizar un análisis.

Tamaños

Esta sección permite conocer las dimensiones de la base de datos mediante length(), dim(), ncol() y nrow().

length(datosCompleto)   #A) Revisando número de variables del objeto
## [1] 66
dim(datosCompleto)      #B Muestra las dimensiones del objeto.
## [1] 800  66
ncol(datosCompleto)     #C) Muestra el número de columnas del objeto.
## [1] 66
nrow(datosCompleto)     #D) Muestra el número de filas del objeto.
## [1] 800

Los resultados confirman que la base está compuesta por 800 observaciones y 66 variables. Estas funciones se utilizan para verificar rápidamente el tamaño y la estructura general del objeto.

Tipos de variables

Esta sección identifica los tipos de datos de las variables mediante str(). Esto permite distinguir variables numéricas de variables almacenadas como caracteres.

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

Esta información es importante porque el tipo de variable determina qué operaciones estadísticas o transformaciones pueden realizarse correctamente.

Nominal o caracter

Esta sección extrae del conjunto de datos las variables ID, Age y Gender para revisar cómo se almacenan y reconocer cuáles corresponden a datos de tipo carácter o numérico.

Codigo <- datosCompleto$ID     #B) Si es tipo caracter, es correcto)
Edad <- datosCompleto$Age      #C) Si es tipo caracter, es incorrecto (ver ejemplo 4) 
Sexo <- datosCompleto$Gender   #D) Si es tipo caracter, es incorrecto (ver ejemplo 5) 

El objetivo es preparar variables individuales para comprobar o transformar posteriormente su tipo de dato. Por ejemplo, Sexo se utiliza en la siguiente sección para convertirlo en factor.

Numerica

Esta sección crea objetos individuales a partir de Exam1, Exam2 y Age, variables que se encuentran almacenadas como numéricas en la base.

P1   <- datosCompleto$Exam1 #E) Numérica
P2   <- datosCompleto$Exam2 #F) Numérica
Edad <- datosCompleto$Age   #G) Numérica

Estas variables quedan disponibles para realizar operaciones numéricas y análisis estadísticos posteriores.

Categórico o factor

Esta sección transforma la variable Sexo en un factor y utiliza class(), str() y levels() para comprobar su tipo y conocer sus categorías.

Sexo <- as.factor(Sexo)  #H) Convirtiendo a factor
class(Sexo)              #I) Sale: "factor"
## [1] "factor"
str(Sexo)                #J) Sale: Factor w/ 2 levels "Female","Masculino": 1 2 2 2 1 1 1 1 1 2 ...
##  Factor w/ 2 levels "Female","Male": 1 2 2 2 1 1 1 1 1 2 ...
levels(Sexo)             #K) Sale: "Female"  "Masculino"
## [1] "Female" "Male"

El resultado confirma que Sexo fue convertida correctamente a una variable categórica con dos niveles. Este formato es útil para trabajar con variables cualitativas en análisis estadísticos y gráficos.

Tablas de frecuencia

Tablas unitarias

Muestra <- datosCompleto[1:100,]

#A) Definiendo y convirtiendo en factor
Sexo <- as.factor(Muestra$Gender)  

#B) Calcular tabla de frecuencias
Tabla1 <- table(Sexo)
Tabla1  
## Sexo
## Female   Male 
##     49     51

En la muestra de 100 estudiantes, 49 son mujeres y 51 son hombres. Esto muestra una distribución de sexo bastante equilibrada, aunque hay una ligera mayoría de hombres.

# Porcentaje de mujeres

(49/100)*100
## [1] 49

El resultado indica que el 49% de la muestra corresponde a mujeres. Este porcentaje permite expresar la frecuencia de mujeres en relación con el total de 100 estudiantes.

Fuma <- as.factor(Muestra$Smoke) 

#B) Tabla de frecuencias 
Tabla3 <- table(Sexo, Fuma)
Tabla3
##         Fuma
## Sexo     No Yes
##   Female 21  28
##   Male   24  27

La tabla muestra la relación entre sexo y consumo de cigarrillo. De las mujeres, 21 no fuman y 28 sí fuman; entre los hombres, 24 no fuman y 27 sí fuman. En ambos grupos hay una diferencia pequeña entre quienes fuman y quienes no fuman.

Muestra <- datosCompleto[1:100,]

Sexo <- as.factor(Muestra$Gender)
Fuma <- as.factor(Muestra$Smoke)

Diagramas de barra

El gráfico representa visualmente la frecuencia de mujeres y hombres. Las barras muestran valores muy similares, con 51 hombres y 49 mujeres, por lo que la distribución de la muestra es bastante equilibrada.

ggplot(Muestra, aes(x = Sexo)) +                            #1
  #geom_bar() +                                             #2
  geom_bar(width=0.5, colour="black", fill="indianred") +       #2 
  
  labs(x="Sexo",y= "Frecuencia")  +              #3               
  ylim(c(0,60)) +                               #4
  #xlim(c(0,300)) +                              #4
  ggtitle("Diagrama de barras")  +               #5
  
  # theme_bw() +                                 #6
  theme_bw(base_size = 12) +                     #6
  #coord_flip() +                                #7
  
  geom_text(aes(label=..count..), stat='count',  #8
            position=position_dodge(0.9), 
            vjust=-0.5, 
            size=5.0
            ) + 
  facet_wrap(~"Variable Sexo")                   #9
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

El gráfico compara la frecuencia de fumadores y no fumadores según el sexo. Se observa que entre las mujeres hay 28 fumadoras y 21 no fumadoras, mientras que entre los hombres hay 27 fumadores y 24 no fumadores. Las diferencias son pequeñas y permiten comparar visualmente ambas categorías.

ggplot(Muestra, aes(Fuma,  fill=Sexo)) +      
  geom_bar(position="dodge",colour="black") +
  
  labs(x= "Fuma",  y="Frecuencias", fill="Sexo") +
  ylim(c(0,30)) +
  #xlim(c(0,300)) +   
  
  ggtitle("Diagrama de barras") + 
  
  #theme_bw() +                     
  theme_bw(base_size = 12) +          
  #coord_flip() + 
  
  #guides(fill=FALSE)+                                #8                                    
  scale_fill_manual(values = c("rosybrown3","lightpink")) +   #9
  
  geom_text(aes(label=..count..), stat='count',       #10
            position=position_dodge(0.9),
            vjust=-0.5, 
            size=5.0
            )+
  
  facet_wrap(~"Sexo por fumadores y no fumadores")  #11

Este gráfico presenta la misma relación entre sexo y consumo de cigarrillo, pero agrupando las barras por sexo. Se observa que las frecuencias de fumadores son ligeramente mayores que las de no fumadores en ambos grupos, aunque las diferencias no son grandes.

ggplot(Muestra, aes(Sexo,  fill=Fuma)) +      
  geom_bar(position="dodge",colour="black") +
  
  labs(x= "Sexo",  y="Frecuencia", fill="Fuma") +
  ylim(c(0,30)) +
  #xlim(c(0,300)) +   
  
  ggtitle("Diagrama de barras") + 
  
  #theme_bw() +                     
  theme_bw(base_size = 12) +          
  #coord_flip() + 
  
  #guides(fill=FALSE)+                                #8                                    
  scale_fill_manual(values = c("plum4","mediumpurple3")) +   #9
  
  geom_text(aes(label=..count..), stat='count',       #10
            position=position_dodge(0.9),
            vjust=-0.5, 
            size=5.0
            )+
  
  facet_wrap(~"Fumadores por sexo")  #11

Medidas estadisticas

En este ejemplo se va a calcular…

Muestra2 <- datosCompleto[1:100,] 
x <- as.numeric(Muestra2$Exam3)  # A) Convirtiendo la variable a numérica
x
##   [1] 5.0 3.7 2.0 5.0 5.0 4.2 3.5 4.6 3.8 4.3 3.0 3.8 3.4 3.3 3.5 4.5 3.6 4.0
##  [19] 3.4 4.0 4.2 3.5 3.7 4.0 4.0 3.2 2.9 2.9 3.0 3.3 2.8 2.4 3.8 3.3 3.2 2.2
##  [37] 2.6 3.2 3.3 1.2 4.2 2.4 5.0 2.8 3.0 3.8 3.2 1.5 2.6 3.8 3.2 3.3 1.4 3.8
##  [55] 1.4 3.6 3.6 2.4 2.8 3.1 2.4 1.8 1.6 3.3 4.4 1.0 4.5 2.0 4.2 4.2 3.1 2.3
##  [73] 2.6 2.7 2.4 2.2 2.8 2.4 1.9 2.4 1.7 2.9 2.4 2.2 2.8 3.2 3.1 2.7 2.5 3.5
##  [91] 3.3 2.1 3.3 2.1 3.7 5.0 3.7 2.0 5.0 5.0
str(Muestra)
## tibble [100 × 66] (S3: tbl_df/tbl/data.frame)
##  $ Observation : num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
##  $ ID          : chr [1:100] "SB11201910010435" "SB11201910004475" "SB11201910011427" "SB11201910041975" ...
##  $ Gender      : chr [1:100] "Female" "Male" "Male" "Male" ...
##  $ Like        : chr [1:100] "TV" "Network" "Network" "TV" ...
##  $ Age         : num [1:100] 21.4 21.1 20.9 18.4 16.6 ...
##  $ Smoke       : chr [1:100] "No" "Yes" "Yes" "Yes" ...
##  $ Height      : num [1:100] 1.58 1.6 1.5 1.53 1.78 1.65 1.73 1.53 1.64 1.52 ...
##  $ Weight      : num [1:100] 75 80 64 49 82 80 90 55 50 78 ...
##  $ BMI         : num [1:100] 30 31.2 28.4 20.9 25.9 ...
##  $ School      : chr [1:100] "Private" "Public" "Private" "Public" ...
##  $ SES         : chr [1:100] "Medium" "High" "High" "Low" ...
##  $ Enrollment  : chr [1:100] "Credit" "Scholarship" "Scholarship" "Credit" ...
##  $ Score       : num [1:100] 81 78 77 70 68 65 54 50 36 35 ...
##  $ MotherHeight: chr [1:100] "Short_M" "Normal_M" "Normal_M" "Tall_M" ...
##  $ MotherAge   : num [1:100] 41 45 45 45 46 46 47 48 48 48 ...
##  $ MotherCHD   : num [1:100] 0 0 0 0 1 0 0 0 0 1 ...
##  $ FatherHeight: chr [1:100] "Normal_F" "Short_F" "Tall_F" "Short_F" ...
##  $ FatherAge   : num [1:100] 40 43 44 45 45 46 46 48 48 49 ...
##  $ FatherCHD   : num [1:100] 1 1 1 2 1 1 1 1 1 1 ...
##  $ Status      : chr [1:100] "Distinguished" "Distinguished" "Distinguished" "Regular" ...
##  $ SemAcum     : num [1:100] 4.25 2.8 4.15 3.2 3.45 2.75 2.7 4.35 4.3 2.8 ...
##  $ Exam1       : num [1:100] 1.5 2.3 3.4 2.5 3.1 3.8 5 4 2.5 2.4 ...
##  $ Exam2       : num [1:100] 5 4.9 3.6 4.2 3.5 4.4 3 2.3 3.3 2.6 ...
##  $ Exam3       : num [1:100] 5 3.7 2 5 5 4.2 3.5 4.6 3.8 4.3 ...
##  $ Exam4       : num [1:100] 4.5 3.3 1.9 2.5 3 5 3.6 4.3 1.9 5 ...
##  $ ExamAcum    : num [1:100] 16 14.2 10.9 14.2 14.6 17.4 15.1 15.2 11.5 14.3 ...
##  $ Definitive  : num [1:100] 4 3.55 2.73 3.55 3.65 ...
##  $ Expense     : num [1:100] 48.9 72.1 85.2 56.6 64.6 63 40.8 65.4 37.3 63 ...
##  $ Income      : num [1:100] 1.61 2.07 2.84 1.55 2.32 2.1 1.69 2.18 1.71 2.1 ...
##  $ Gas         : num [1:100] 27.4 24.2 22.3 23.1 27.3 ...
##  $ Course      : chr [1:100] "Face-to-Face" "Virtual" "Face-to-Face" "Virtual" ...
##  $ Law         : chr [1:100] "Agree" "Agree" "Agree" "Agree" ...
##  $ Economic    : chr [1:100] "Regular" "Good" "Regular" "Bad" ...
##  $ Race        : chr [1:100] "Ethnic" "Ethnic" "Ethnic" "Ethnic" ...
##  $ Region      : chr [1:100] "North" "Center" "North" "Center" ...
##  $ EMO1        : num [1:100] 1 4 3 4 2 3 2 3 4 2 ...
##  $ EMO2        : num [1:100] 2 4 1 2 1 1 4 1 2 2 ...
##  $ EMO3        : num [1:100] 2 1 3 3 2 4 2 4 3 3 ...
##  $ EMO4        : num [1:100] 1 2 3 1 4 2 3 2 1 1 ...
##  $ EMO5        : num [1:100] 4 1 2 2 2 2 1 1 2 2 ...
##  $ GOAL1       : chr [1:100] "Strongly agree" "Undecided" "Agree" "Agree" ...
##  $ GOAL2       : chr [1:100] "Agree" "Disagree" "Disagree" "Undecided" ...
##  $ GOAL3       : chr [1:100] "Strongly agree" "Disagree" "Agree" "Strongly agree" ...
##  $ Pre_STAT1   : num [1:100] 2 1 5 4 1 4 4 2 2 2 ...
##  $ Pre_STAT2   : num [1:100] 4 1 1 3 4 1 2 3 3 5 ...
##  $ Pre_STAT3   : num [1:100] 2 1 3 1 1 5 4 3 3 2 ...
##  $ Pre_STAT4   : num [1:100] 5 1 1 2 2 3 2 3 2 4 ...
##  $ Post_STAT1  : num [1:100] 4 5 5 3 5 2 3 3 2 5 ...
##  $ Post_STAT2  : num [1:100] 5 1 2 2 3 3 2 3 2 3 ...
##  $ Post_STAT3  : num [1:100] 2 3 3 4 3 5 5 4 5 4 ...
##  $ Post_STAT4  : num [1:100] 2 3 3 5 4 4 3 5 5 1 ...
##  $ Pre_IDARE1  : chr [1:100] "Quite a bit" "Quite a bit" "Quite a bit" "Little" ...
##  $ Pre_IDARE2  : chr [1:100] "Little" "Little" "Little" "Nothing" ...
##  $ Pre_IDARE3  : chr [1:100] "Quite a bit" "A lot" "Quite a bit" "Quite a bit" ...
##  $ Pre_IDARE4  : chr [1:100] "Quite a bit" "Nothing" "Quite a bit" "Quite a bit" ...
##  $ Pre_IDARE5  : chr [1:100] "Little" "Quite a bit" "Little" "Nothing" ...
##  $ Post_IDARE1 : chr [1:100] "A lot" "A little" "Nothing" "Quite a bit" ...
##  $ Post_IDARE2 : chr [1:100] "A lot" "Nothing" "Quite a bit" "A little" ...
##  $ Post_IDARE3 : chr [1:100] "A little" "Quite a bit" "Nothing" "A lot" ...
##  $ Post_IDARE4 : chr [1:100] "Quite a bit" "A lot" "Nothing" "Quite a bit" ...
##  $ Post_IDARE5 : chr [1:100] "A lot" "Quite a bit" "Nothing" "A lot" ...
##  $ PSICO1      : chr [1:100] "Frequently" "Frequently" "Sometimes" "Almost always" ...
##  $ PSICO2      : chr [1:100] "Almost always" "Sometimes" "Sometimes" "Frequently" ...
##  $ PSICO3      : chr [1:100] "Frequently" "Sometimes" "Sometimes" "Frequently" ...
##  $ PSICO4      : chr [1:100] "Almost always" "Frequently" "Frequently" "Almost never" ...
##  $ PSICO5      : chr [1:100] "Almost always" "Frequently" "Sometimes" "Sometimes" ...
x <- Muestra$Exam3
min(x)          #B) Mínimo
## [1] 1
max(x)          #C) Máximo
## [1] 5
range(x)        #D) Obtenemos (min, max)
## [1] 1 5
length(x)       #E) Tamaño
## [1] 100
sum(x)          #F) Suma los valores de los datos
## [1] 317.6
mean(x)         #G) Media aritmética
## [1] 3.176
median(x)       #H) Mediana
## [1] 3.2
var(x)          #I) Varianza muestral
## [1] 0.8885091
sqrt(var(x))    #J) Desviación estándar muestral (una forma)
## [1] 0.9426076
sd(x)           #K) Desviación estándar muestral (otra forma)
## [1] 0.9426076
skewness(x)     #L) Sesgo
## [1] 0.01846742
quantile(x, probs=0.80)    #M) 80-ésimo percentil o percentil 85
## 80% 
##   4
quantile(x, probs=0.25)    #N) Primer cuartil o 25-ésimo percentil
## 25% 
## 2.4
quantile(x, probs=0.50)    #O) Segundo cuartil o 50-ésimo percentil o mediana
## 50% 
## 3.2
quantile(x, probs=0.75)    #P) Tercer cuartil o 75-ésimo percentil
## 75% 
## 3.8

El 50% de las notas del Ema3 fueron menores o iguales a 3.2 En los sesgos se observa principalmente si es positivo, menor que 0, es decir, si es negativo o es igual a 0

quantile(x, probs=0.85)    #M) 80-ésimo percentil o percentil 85
## 85% 
## 4.2

El 85% de los estudiantes sacaron un nota menor o igual que 4.2

Los resultados muestran que el rendimiento de los estudiantes se concentra alrededor de un nivel intermedio, ya que la media y la mediana son muy cercanas. Además, la baja desviación estándar indica que las calificaciones no presentan una dispersión muy amplia, por lo que la mayoría de los estudiantes obtuvo resultados relativamente similares. El sesgo cercano a cero sugiere una distribución bastante equilibrada, sin una inclinación marcada hacia calificaciones altas o bajas. En conjunto, los datos reflejan un desempeño relativamente homogéneo en el examen.