Programacion en lenguaje estadistico
Guevara Ponce Victor Manuel
Integrantes:
Quispe Villena Daniel 22140073
Guillen Palomino Lady 21140074
Módulos y Librerías:
Para poder hacer uso de ciertas librerías, primero debemos descargar los paquetes usando la función install.package() y para poder manejarlos, llamaremos a la librería con la función library().
A continuación mencionaremos algunas librerías principales en R.
readxl: Permite leer archivos importados en formato excel con extensión xlsx. y xls.
dplyr y tidyr : Proporciona funciones para manipulación, transformación y organización de datos (dataframe).
ggplot2: Permite organizar gráficos estadísticos como histogramas, diagrama de barras, gráficos de dispersión, gráfico de cajas, entre otros.
tidyverse: Un conjunto de paquetes que incluye dplyr, ggplot2, tidyr y otros, diseñados para facilitar el flujo de trabajo del análisis de datos.
#Instalaremos el paquete “tidyverse” y “readxl”
install.packages("tidyverse", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'tidyverse' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
install.packages("readxl", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'readxl' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
#Ahora llamaremos a estas librerías para poder usarlas más adelante
library("tidyverse")
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'ggplot2' was built under R version 4.3.2
## Warning: package 'tidyr' was built under R version 4.3.2
## Warning: package 'readr' was built under R version 4.3.2
## Warning: package 'purrr' was built under R version 4.3.2
## Warning: package 'dplyr' was built under R version 4.3.2
## Warning: package 'stringr' was built under R version 4.3.2
## Warning: package 'forcats' was built under R version 4.3.2
## Warning: package 'lubridate' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ 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("readxl")
## Warning: package 'readxl' was built under R version 4.3.2
library("dplyr")
library("ggplot2")
Funciones:
Al llamar a ciertas librerías, tenemos acceso a algunas funciones (códigos) que se usan para desempeñar tareas específicas, como obtener ciertas medidas estadísticas de un conjunto de datos, crear matrices, tablas, gráficos, entre otros.
Algunas de las funciones son:
mean(): Calcula la media de un conjunto de datos.
sd(): Calcula la desviación estándar de un conjunto de datos.
sum(): Calcula la suma de un conjunto de datos. min(), max(): Encuentran el valor mínimo y máximo en un conjunto de datos.
view(): Para ver una data importada o una data propia de R
length(): Calcula la longitud de un vector o una lista.
table(): Crea una tabla de frecuencias o una tabla de contingencia.
plot(): Crea gráficos básicos.
hist(): Crea un histograma.
A lo largo del documento estaremos mencionando más funciones.
Dataframe:
Son estructuras de dos dimensiones (fila:sujeto y columna:variable) que permiten almacenar y manipular conjuntos de datos heterogéneos, esto quiere decir que pueden ser de carácter entero, numérico, factor, cadena de texto, lógico, o NULL a la vez
Podemos crear dataframe con la función data.frame()
Ejemplo:
#Podemos crear una data de manera directa
data.frame(c("Lady","Daniel", "Estefano"), c(19, 19, 20), c("Voley", "Salsa", "Calistenia"))
## c..Lady....Daniel....Estefano.. c.19..19..20.
## 1 Lady 19
## 2 Daniel 19
## 3 Estefano 20
## c..Voley....Salsa....Calistenia..
## 1 Voley
## 2 Salsa
## 3 Calistenia
#También podemos crear vectores, o listas y luego unirlas con la función
nombre <- c("Lady","Daniel", "Estefano")
edad <-c(19, 19, 20)
hobby <-c("Voley", "Salsa", "Calistenia")
datos1 <-data.frame(nombre, edad, hobby)
datos1
## nombre edad hobby
## 1 Lady 19 Voley
## 2 Daniel 19 Salsa
## 3 Estefano 20 Calistenia
Manipulación e introducción al análisis de datos:
Una vez que tenemos el data frame, podemos usar algunas funciones que mencionaremos para manipular los datos
head(datos1)
## nombre edad hobby
## 1 Lady 19 Voley
## 2 Daniel 19 Salsa
## 3 Estefano 20 Calistenia
str(datos1)
## 'data.frame': 3 obs. of 3 variables:
## $ nombre: chr "Lady" "Daniel" "Estefano"
## $ edad : num 19 19 20
## $ hobby : chr "Voley" "Salsa" "Calistenia"
subset(datos1, datos1$edad<20)
## nombre edad hobby
## 1 Lady 19 Voley
## 2 Daniel 19 Salsa
subset(datos1, datos1$hobby=="salsa")
## [1] nombre edad hobby
## <0 rows> (or 0-length row.names)
nombredeladata&nuevacolumna: Para agregar una nueva columna a un DataFrame
mutate(): Para agregar columna de datos
datos1$ingreso <-c(1200, 1500, 2000)
datos1
## nombre edad hobby ingreso
## 1 Lady 19 Voley 1200
## 2 Daniel 19 Salsa 1500
## 3 Estefano 20 Calistenia 2000
datos1<- mutate(datos1, ahorro=ingreso-1000)
datos1
## nombre edad hobby ingreso ahorro
## 1 Lady 19 Voley 1200 200
## 2 Daniel 19 Salsa 1500 500
## 3 Estefano 20 Calistenia 2000 1000
mean(nombredataf$ columna): Se usa para calcular la media de una columna específica
mean(datos1$ ahorro)
## [1] 566.6667
#lo mismo para calcular la suma: sum()
summary(): Resúmen estadístico de la data
summary(datos1)
## nombre edad hobby ingreso
## Length:3 Min. :19.00 Length:3 Min. :1200
## Class :character 1st Qu.:19.00 Class :character 1st Qu.:1350
## Mode :character Median :19.00 Mode :character Median :1500
## Mean :19.33 Mean :1567
## 3rd Qu.:19.50 3rd Qu.:1750
## Max. :20.00 Max. :2000
## ahorro
## Min. : 200.0
## 1st Qu.: 350.0
## Median : 500.0
## Mean : 566.7
## 3rd Qu.: 750.0
## Max. :1000.0
summarise(): Se usa para obtener resúmenes específicos
summarise(datos1, mean(ingreso), median(ahorro))
## mean(ingreso) median(ahorro)
## 1 1566.667 500
filter(): Se usa para filtrar filas que cumplen ciertos requisitos
ganadores<-filter(datos1, ahorro>=500)
ganadores
## nombre edad hobby ingreso ahorro
## 1 Daniel 19 Salsa 1500 500
## 2 Estefano 20 Calistenia 2000 1000
Lo primero se deber hacer es cargar los datos en RStudio. Estos pueden ser importados desde archivos en diferentes formatos como CSV, Excel, bases de datos, etc. Puedes utilizar funciones como read.csv(), read_spss(), read_excel(), read.table(), dependiendo del formato de tus datos.
Una vez que los datos están cargados, debemos explorarlos para conocer su estructura y sus características. Se pueden usar funciones como head(), summary(), str(), View() para visualizar las primeras filas, el resumen estadístico, la estructura de los datos y ver los datos en una tabla, respectivamente.
Luego de conocer la data, debemos limpiar y preparar el contenido, para esto se tiene que identificar y tratar los datos faltantes, duplicados o inconsistentes. Se pueden usar las funciones is.na(), duplicated(), complete.cases() para identificar datos faltantes, duplicados o filas incompletas. Luego, puedes eliminar o imputar los valores faltantes, eliminar duplicados y realizar transformaciones de datos si es necesario.
Manipulación y transformación de los datos: Aquí es donde puedes realizar operaciones de manipulación de datos, como filtrar filas, seleccionar columnas, crear nuevas variables, unir o dividir conjuntos de datos, utilizando funciones del paquete dplyr como filter(), select(), mutate(), join(), entre otros.
Análisis de los datos: En esta etapa, puedes realizar diferentes análisis en tus datos según tus objetivos. Puedes calcular estadísticas descriptivas, realizar pruebas de hipótesis, ajustar modelos estadísticos, utilizar técnicas de aprendizaje automático, entre otras cosas. R cuenta con una amplia gama de paquetes y funciones para realizar análisis avanzados.
Visualización de los resultados: Una vez que hayas realizado el análisis, es importante visualizar los resultados para comunicar tus hallazgos de manera efectiva. Utiliza funciones y paquetes como ggplot2, plotly o ggvis para crear gráficos y visualizaciones interactivas que resalten los aspectos clave de tus datos y análisis.
Presentación y comunicación de los resultados: Finalmente, deberás presentar tus resultados de manera clara y concisa. Puedes utilizar herramientas como R Markdown para crear informes o presentaciones dinámicas que combinen texto, código y visualizaciones.
Para poder importar diferentes tipos de datos, instalaremos el paquete “haven” y llamaremos a la librería readxl
install.packages("haven", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
##
## There is a binary version available but the source version is later:
## binary source needs_compilation
## haven 2.5.3 2.5.4 TRUE
##
## Binaries will be installed
## package 'haven' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
library("haven")
## Warning: package 'haven' was built under R version 4.3.2
library("readxl")
1.1. En la barra de RStudio, encontraremos la opción “file” seleccionamos la opción “Import Dataset” y elegimos el tipo de formato en el que está nuestro archivo
install.packages("imager", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'imager' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
library(imager)
## Warning: package 'imager' was built under R version 4.3.2
## Loading required package: magrittr
##
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
##
## set_names
## The following object is masked from 'package:tidyr':
##
## extract
##
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
##
## add
## The following object is masked from 'package:stringr':
##
## boundary
## The following object is masked from 'package:dplyr':
##
## where
## The following object is masked from 'package:tidyr':
##
## fill
## The following objects are masked from 'package:stats':
##
## convolve, spectrum
## The following object is masked from 'package:graphics':
##
## frame
## The following object is masked from 'package:base':
##
## save.image
imagen <- load.image("C:\\Users\\Danie\\OneDrive\\Escritorio\\WhatsApp Image 2023-12-01 at 4.49.00 PM.png")
plot(imagen, axes = FALSE)
Nos aparecerá una ventana, en la cual debemos que buscar nuestro archivo dandole click en la opción “browse”, y una vez cargados los datos, nos aparecerá una opción para ver el código, la dirección y el nombre con el que se guardará el archivo, este último se puede modificar antes de copiar el código y cargarlo en el R
install.packages("imager", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Warning: package 'imager' is in use and will not be installed
library(imager)
imagen <- load.image("C:\\Users\\Danie\\OneDrive\\Escritorio\\WhatsApp Image 2023-12-01 at 4.49.28 PM.png")
plot(imagen, axes = FALSE)
1.2 Si ya conocemos la dirección de nuestra data, podemos usar las siguientes funciones para importarlo:
Importar datos de excel en formato .xlsx
data_excel<-read_excel(“dirección/de/la/data..xlsx”)
Importar archivos de tipo SPSS
data_spss<- read_sav(“dirección/de/la/data..sav”)
Importar archivos de tipo STATA
data_STATA<- read_dta(“dirección/de/la/data.dta”)
Importar data con archivo csv, este se caracteriza por tener columnas separadas por comas o punto y comas
data_csv-> read.csv(dirección/ruta_archivo.csv, sep = “;”) data_csv-> read.csv(dirección/ruta_archivo.csv, sep = “,”)
Para usar una data de internet usamos la función:
read.tipodearchivo(“direcciónurl”)
#Descargaremos un archivo .sav del sitio https://users.stat.ufl.edu/~aa/smss/data/SPSS/ y descargaremos read_spss(“CEP_sep-oct_2017.sav”)
Identificación y manejo de datos missing:
La pérdida de datos conlleva a la pérdida de información y esta tiene efectos perjudiciales como limitar la capacidad para convertir o visualizar datos, aumentan la probabilidad de error tipo II (incapacidad de rechazar una hipótesis nula falsa), además los datos faltantes reducen la representatividad de las muestras, y distorsionan la validez de los ensayos científicos y conllevan a conclusiones no válidas
Identificación de datos missing ó datos ausentes:
Usaremos la función is.na() para identificar los valores ausentes en un vector.
# Identificar valores faltantes en un vector
pago <- c(10, 10, NA, 20, NA,15, 12)
nombre<-c("Juan", "Lady", "Daniel", "Joce","Fernando", "Veines", "Natsu")
acuerdo<-c("si","si",NA,"si",NA, "si", "si")
is.na(pago) #FALSO si en la fila hay datos ausentes (NA)
## [1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE
datos2<-data.frame(pago, nombre, acuerdo)
is.na(datos2) #Nos dará como resultado una matriz en la que se nos colocará FALSO si hay datos missing
## pago nombre acuerdo
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] TRUE FALSE TRUE
## [4,] FALSE FALSE FALSE
## [5,] TRUE FALSE TRUE
## [6,] FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE
También podemos usarla función complete.cases() para identificar las filas que contienen valores faltantes en un dataframe
complete.cases(datos2) #Nos dará como resultado una fila en la que se nos colocará FALSO si hay datos missing en cada columna
## [1] TRUE TRUE FALSE TRUE FALSE TRUE TRUE
Manejo de datos faltantes:
Para eliminar las filas que contienen valores faltantes podemos usar la función na.omit().
#Para saber cómo se vería la data sin los datos missing
na.omit(datos2)
## pago nombre acuerdo
## 1 10 Juan si
## 2 10 Lady si
## 4 20 Joce si
## 6 15 Veines si
## 7 12 Natsu si
#Si deseamos guardar estos datos en la misma data que tenemos
datos2<-na.omit(datos2)
Puedes utilizar diferentes métodos para imputar valores faltantes en tus datos, como la media, la mediana o un valor constante con na.rm (na indica. “no asignado”, rm significa “remove”)
# Imputar la media en un vector con valores faltantes
mean(pago, na.rm = TRUE)
## [1] 13.4
Valoración de datos perdidos:
La tolerancia de datos perdidos suele ser un 5% para grandes volúmenes de datos. Si el porcentaje es mucho mayor tal vez se deba omitir esa propiedad. O en su defecto considerar realizar imputación de datos.
#Para esto usaremos la dataset airquality que está instalado en R
View(airquality)
#Calcularemos el porcentaje de datos missing en cada columna
colSums(is.na(airquality)) #Nos dará como resultado, la suma de datos faltantes en cada columna
## Ozone Solar.R Wind Temp Month Day
## 37 7 0 0 0 0
# determinación del porcentaje de valores perdidos respecto del total de datos
# para cada columna
porcentajeMiss <- function(x) {sum(is.na(x)) / length(x)*100}
# por columna
apply(airquality, 2, porcentajeMiss)
## Ozone Solar.R Wind Temp Month Day
## 24.183007 4.575163 0.000000 0.000000 0.000000 0.000000
El resultado de los datos missing indica que Oxone tiene más de un 5% de datos ausentes, por lo tanto debería eliminar las filas con datos ausentes ó simplemente no se debería tomar en cuenta para mediciones que se hagan a la data.
datos3<-na.omit(airquality)
apply(airquality, 2, porcentajeMiss)
## Ozone Solar.R Wind Temp Month Day
## 24.183007 4.575163 0.000000 0.000000 0.000000 0.000000
Identificación y manejo de datos outliers e inconsistentes:
Los outliers son anomalías.
Identificación de datos outliers
Diagramas de caja y bigotes:
Con la función boxplot() podemos visualizar los datos outliers o las anomalías (que son los puntos que están más allá de los bigotes) y según la cantidad y ubicación respecto a los extremos, podemos identificar si estas son significativas.
Transformación de datos: En algunos casos, en lugar de eliminar los outliers, puedes optar por transformar tus datos. Por ejemplo, puedes aplicar una transformación logarítmica o una transformación de raíz cuadrada.
boxplot(airquality$Ozone)
#Podemos ver que sí hay datos atípicos
Podemos usar el comando $out para saber cuáles son los valores atípicos
caja<-boxplot(airquality$Ozone)
caja$out
## [1] 135 168
Podemos eliminar los datos outliers para tener una data sin valores atípicos
datos4<-airquality[!(airquality$Ozone %in% caja$out),]
#Comprobamos que desaparecieron los valores atípicos con un gráfico de cajas
boxplot(datos4$Ozone)
Nos da para reducir la influencia de los outliers en tus análisis. Identificación de datos inconsistentes:
Análisis exploratorio de datos:
Puedes utilizar técnicas de análisis exploratorio de datos para identificar inconsistencias en tus datos. Esto puede incluir la detección de valores extremos, valores duplicados o valores que no cumplen con ciertas reglas o restricciones. Limpieza de datos: Una vez identificadas las inconsistencias, puedes llevar a cabo la limpieza de datos utilizando funciones: - na.omit() para eliminar filas con datos faltantes
replace() para reemplazar valores incorrectos
complete.cases() para identificar filas completas sin datos faltantes.
Limpieza de datos y preparación de datos:
Luego de cargar datos, debemos identificar y manejar valores ausentes Después tenemos que eliminar las filas o columnas con valores ausentes utilizando las funciones na.omit() o complete.cases(), o puedes reemplazar los valores ausentes con funciones como na.mean() o na.median() del paquete “impute”.
Tratar con valores atípicos:
Utiliza técnicas de detección de valores atípicos como el rango intercuartílico (IQR) o el método de la desviación estándar para identificar y manejar los valores atípicos en tus datos. Puedes eliminar las filas con valores atípicos o reemplazarlos por valores más representativos.
Podemos aplicar transformaciones a tus variables, como logaritmos, raíces cuadradas o funciones de escala, para normalizar la distribución de los datos o reducir la asimetría.
Crear variables derivadas, esto puede ayudarte a calcular métricas adicionales o agrupar tus datos de manera más significativa.
Reestructurar y combinar datos:
Utiliza funciones como reshape(), melt(), cast() o merge() para reestructurar y combinar tus datos según las necesidades de tu análisis. Esto puede incluir la agregación de datos, la fusión de conjuntos de datos o la transposición de formatos amplios a largos y viceversa.
Una vez que hayamos limpiado y preparado tus datos, puedes guardarlos en un nuevo archivo para futuros análisis o para compartirlos con otros.
datosPacientes=read.csv("C:\\Users\\Danie\\Downloads\\datospacientes (1).csv")
View(datosPacientes)
Para reproducir los gráficos, instalá y cargá los siguientes paquetes:
library(ggplot2)
library(tidyverse)
library(scales) # Para incluir porcentajes en un eje
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
library(treemapify) # para el gráfico de rectángulos
## Warning: package 'treemapify' was built under R version 4.3.2
Gráficos univariados: Son aquellos gráficos que se utilizan para mostrar la distribución de una única variable.
Usualmente, este tipo de variables se visualiza con gráficos de barras o de sectores. Si bien su uso es menos frecuente, también pueden utilizarse gráficos de rectángulos o treemap.
Grafico de Barras:
ggplot(data = datosPacientes, aes(x = edad)) +
geom_bar()
En el eje x podemos ver las distintas categorías de la variable “edad” y en el eje y un conteo de cuántas veces aparece cada categoría en la base de datos, es decir, cuántos participantes pertenecen a cada categoría. Ese conteo se hace automáticamente, solo necesitamos indicar la variable categórica que nos interesa.
Tambien podemos graficar el porcentaje
datosPacientes %>%
count(edad) %>%
mutate(prop = n/sum(n)) %>%
ggplot(aes(x = edad, y = prop)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = scales::percent)
Gráfico de sectores:
En el gráfico de sectores, el círculo completo representa el total de las observaciones y cada segmento, la proporción o porcentaje de observaciones que pertenecen a una categoría particular.
datosPacientes %>%
count(edad) %>%
mutate(porcentaje = round(n/sum(n)*100), 1) %>%
ggplot(mapping = aes(factor(1), y = porcentaje, fill = edad)) +
geom_bar(stat = "identity") +
coord_polar(theta = "y") +
theme_void()+
geom_text(aes(label = paste(porcentaje,"%", sep = "")),
position = position_stack(vjust = 0.5))
Gráficos de rectángulos (treemap):
El gráfico de rectángulos (treemap) es equivalente al de sectores, cada rectángulo representa la proporción de participantes que pertenece a una categoría determinada.
Si bien es poco usado, tiene dos ventajas sobre el gráfico anterior: visualmente, es más sencillo discriminar el tamaño de rectángulos que de triángulos y permite incluir un mayor número de categorías.
datosPacientes %>%
count(edad) %>%
ggplot(mapping = aes(fill = edad, area = n, label = edad)) +
geom_treemap() +
geom_treemap_text(place = "centre") +
theme(legend.position = "none")
Para explorar la distribución de los datos en variables cuantitativas, se recurre principalmente a herramientas visuales como los histogramas y los gráficos de densidad.
A continuación, procederemos a representar visualmente la distribución de la edad que tuvieron los fallecidos.
Histograma:
ggplot(data = datosPacientes, mapping = aes(x = edad)) +
geom_histogram(color = "red", binwidth = 20)
El gráfico muestra los valores numéricos agrupados en intervalos o “bins” de igual ancho. Cada intervalo se grafica como una barra, y su altura corresponde a la cantidad de observaciones que caen dentro de ese intervalo.
Podemos ver que la edad mas comun entre los fallecidos más frecuentes se encuentran entre 50 y 70 años (la barra más alta).
ggplot(data = datosPacientes, mapping = aes(x = presion)) +
geom_histogram(color = "blue", binwidth = 50)
Curvas de densidad:
Un gráfico de densidad busca mostrar la distribución de probabilidades que subyace a los datos. Se toma el rango total de valores, no los intervalos.
ggplot(data = datosPacientes, mapping = aes(x = edad)) +
geom_density(fill = "purple")
Las curvas de densidad se normalizan de manera que el área bajo la curva sea igual a uno, representando así el 100% de las observaciones. Esta normalización puede generar cierta confusión en la escala del eje y, ya que depende de las unidades del eje x. En el contexto de este gráfico, el eje y toma valores entre 0 y 0.01.
Aunque esta escala no facilita la visualización directa de la cantidad o el porcentaje de participantes dentro de un rango específico, tiene la ventaja de ofrecer una representación más precisa de la forma de la distribución, sin estar influenciada por el número de intervalos o bins utilizados.
Boxplots:
De manera similar a los histogramas o los gráficos de densidad, los boxplots proporcionan una representación visual de la distribución de una variable cuantitativa. Su utilidad radica en la capacidad para visualizar la simetría de la distribución y la dispersión de los datos en torno a una medida central.
Aunque no son tan comúnmente empleados como los histogramas o gráficos de densidad al describir exclusivamente una variable cuantitativa, los boxplots resultan extremadamente útiles cuando se desea comparar la distribución entre diferentes grupos.
ggplot(data = datosPacientes, mapping = aes(x = edad)) +
geom_boxplot() +
ylim(-1, 1) +
xlim(20, 100)
Son aquellos gráficos que se utilizan para mostrar la asociación entre dos variables.
Asociación entre dos variables categóricas
¿Se asocia el sexo al resultado final del estudio?
Gráfico de barras agrupadas
ggplot(data = datosPacientes, aes(x = edad, fill = ecivil)) +
geom_bar(position = "dodge")
Es equivalente al gráfico de barras univariado, pero con barras y colores adicionales en función de una segunda variable categórica.
Gráfico de barras segmentadas
ggplot(data = datosPacientes, aes(x = edad, fill = ecivil)) +
geom_bar(position = "fill")
En los gráficos de barras segmentadas una barra suma el 100% de las observaciones de una de las categorías.
A diferencia del gráfico de barras agrupadas, permite comparar como se distribuyen los valores de la variable resultado en cada categoría de la variable suma.
Asociación entre una variable categórica y una cuantitativa
¿Se asocia el resultado con la edad?
Histogramas y gráficos de densidad agrupados
ggplot(data = datosPacientes, aes(x = edad, fill = ecivil)) +
geom_histogram(binwidth = 20, color = "green")
Esto puede resultar más claro en un gráfico de densidad, ya que no depende de la cantidad de observaciones.
ggplot(data = datosPacientes, aes(x = edad, fill = ecivil)) +
geom_density(alpha = 0.5, color = "darkblue")
Boxplots
Al igual que con los gráficos anteriores, se puede observar que la distribución es similar en los tres grupos. Este gráfico es más útil para visualizar si las medias o medianas difieren entre los grupos.
ggplot(data = datosPacientes, aes(x = ecivil, y = edad)) +
geom_boxplot()
Gráficos de violín
Este gráfico es una combinación de un boxplot y bigotes y un gráfico de densidad superpuesto.
ggplot(data = datosPacientes, aes(x = ecivil, y = edad)) +
geom_violin() +
geom_boxplot(width = .5)
Gráficos de medias con barra de error
Este gráfico presenta la media de una variable numérica asociada a cada valor de una variable categórica, acompañada de una medida de dispersión que puede ser el error estándar o la desviación estándar.
datosPacientes %>%
group_by(ecivil) %>%
summarise(Edad_declarada_media = mean(edad),
es = sd(edad)/sqrt(n())) %>%
ggplot(mapping = aes(x = ecivil, y = Edad_declarada_media)) +
geom_point() +
geom_errorbar(aes(ymin = Edad_declarada_media - es,
ymax = Edad_declarada_media + es),
width = .1)
Asociación entre dos variables cuantitativas
Gráfico de dispersión
Este gráfico representa a cada observación como un punto. Este punto se ubica en base a los valores que la observación toma en dos variables cuantitativas, una ubicada en el eje x y otra en el eje y.
ggplot(data = datosPacientes,
mapping = aes(x = edad, y = presion)) +
geom_point()
Cuando hay una relación entre las variables, anticipamos observar lo siguiente: - a medida que los valores de una variable aumentan, también lo hacen los de la otra (relación positiva); - cuando los valores de una variable disminuyen, los de la otra tienden a aumentar (relación negativa)y sera constante cuando es recto
En esta situación, esta asociación no es inmediatamente evidente visualmente. Podemos incluir una línea de tendencia para facilitar la interpretación.
ggplot(data = datosPacientes,
mapping = aes(x = edad, y = presion)) +
geom_point() +
geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
La recta de tendencia sugiere que existe una asociación constante entre las variables.
Exploramos las técnicas de visualización de datos bivariados y multivariados utilizando el lenguaje de programación R. La visualización efectiva es esencial para comprender las relaciones entre variables y descubrir patrones complejos en conjuntos de datos multidimensionales.
install.packages("ggplot2", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Warning: package 'ggplot2' is in use and will not be installed
install.packages("corrplot", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'corrplot' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
library(ggplot2)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.2
## corrplot 0.92 loaded
Gráficos de Dispersión
Utilizaremos gráficos de dispersión para explorar las relaciones entre pares de variables clave en tu conjunto de datos.
pairs(datosPacientes[, c("edad", "presion", "sensib")], main = "Matriz de Gráficos de Dispersión")
Diagramas de Puntos y Gráficos Específicos
Personaliza gráficos específicos utilizando ggplot2 para investigar detalladamente relaciones particulares.
ggplot(datosPacientes, aes(x = edad, y = presion)) +
geom_point() +
labs(title = "Diagrama de Puntos entre edad y presion")
Exploración Multivariada
Matriz de Correlación
Calcula y visualiza la matriz de correlación para evaluar la relación lineal entre todas las variables.
columnas_numericas <- datosPacientes[, 1:5]
matriz_correlacion <- cor(columnas_numericas)
corrplot(matriz_correlacion, method = "circle", tl.cex = 0.7, tl.col = "black", tl.srt = 45, addCoef.col = "black",
title = "Matriz de Correlación")
Grafico de dispersion en 3D
install.packages("scatterplot3d", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'scatterplot3d' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
library(scatterplot3d)
scatterplot3d(datosPacientes$edad,datosPacientes$presion,datosPacientes$sensib, main="Gráfico de Dispersión en 3D",
xlab="Eje X", ylab="Eje Y", zlab="Eje Z",
color="blue", pch=19)
La visualización de datos va más allá de los gráficos tradicionales y abarca la exploración de datos complejos, como imágenes, exploraremos herramientas y paquetes específicos para visualizar datos de imágenes y discutiremos cómo personalizar y optimizar estas visualizaciones para obtener información valiosa.
Visualización de Imágenes
Visualización Básica
Iniciamos con una visualización básica de tus imágenes.
install.packages("imager", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Warning: package 'imager' is in use and will not be installed
library(imager)
imagen1 <- load.image("C:\\Users\\Danie\\Downloads\\soltero.png")
imagen2 <- load.image("C:\\Users\\Danie\\Downloads\\adulto.png")
par(mfrow = c(1, 2))
plot(imagen1, main = "C:\\Users\\Danie\\Downloads\\soltero.png")
plot(imagen2, main = "C:\\Users\\Danie\\Downloads\\adulto.png")
par(mfrow = c(1, 1))
Visualización con ggplot2
Utiliza ggplot2 para una visualización más flexible.
df_imagen1 <- as.data.frame(imagen1)
df_imagen2 <- as.data.frame(imagen2)
ggplot(df_imagen1, aes(x = x, y = y, fill = value)) +
geom_tile() +
scale_fill_gradientn(colours = terrain.colors(256)) +
labs(title = "Visualización con ggplot2 - Imagen 1")
ggplot(df_imagen2, aes(x = x, y = y, fill = value)) +
geom_tile() +
scale_fill_gradientn(colours = terrain.colors(256)) +
labs(title = "Visualización con ggplot2 - Imagen 2")
Procesamiento de Imágenes
Filtrado y Mejora
Aplicamos técnicas de procesamiento de imágenes para mejorar la visualización y hacemos una visualizacion en una escala de grises.
install.packages("png", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'png' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'png'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Danie\AppData\Local\R\win-library\4.3\00LOCK\png\libs\x64\png.dll a
## C:\Users\Danie\AppData\Local\R\win-library\4.3\png\libs\x64\png.dll: Permission
## denied
## Warning: restored 'png'
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
library(png)
imagen <- readPNG("C:\\Users\\Danie\\Downloads\\soltero.png")
imagen_gris <- colMeans(imagen[,,1:3])
par(mfrow = c(1, 2))
plot(as.raster(imagen), main = "Imagen Original")
plot(as.raster(imagen_gris), main = "Imagen en Escala de Grises", col = gray.colors(001))
par(mfrow = c(1, 1))
Histograma de Intensidades
Visualizar el histograma de intensidades proporciona información sobre la distribución de valores de píxeles.
install.packages("png", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Warning: package 'png' is in use and will not be installed
library(png)
imagen <- readPNG("C:\\Users\\Danie\\Downloads\\soltero.png")
imagen_gris1 <- colMeans(imagen[,,1:3])
hist(as.vector(imagen_gris1), col = "grey", main = "Histograma de Intensidades")
La manipulación de datos no estructurados, en particular datos de texto, es una tarea crucial en análisis de datos.
Nos centraremos en librerías clave como stringr, tm, y tidyverse para realizar operaciones eficientes en datos de texto.
Librerías Utilizadas
install.packages("stringr", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Warning: package 'stringr' is in use and will not be installed
install.packages("tm", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## Warning: dependencies 'Rcampdf', 'Rgraphviz', 'Rpoppler',
## 'tm.lexicon.GeneralInquirer' are not available
## package 'tm' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'tm'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Danie\AppData\Local\R\win-library\4.3\00LOCK\tm\libs\x64\tm.dll a
## C:\Users\Danie\AppData\Local\R\win-library\4.3\tm\libs\x64\tm.dll: Permission
## denied
## Warning: restored 'tm'
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
install.packages("tidyverse", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Warning: package 'tidyverse' is in use and will not be installed
library(stringr)
library(tm)
## Warning: package 'tm' was built under R version 4.3.2
## Loading required package: NLP
##
## Attaching package: 'NLP'
## The following object is masked from 'package:ggplot2':
##
## annotate
library(tidyverse)
Lectura y Exploración de Datos de Texto
Comencemos leyendo un conjunto de datos de texto y explorándolo:
texto <- readLines("C:\\Users\\Danie\\Downloads\\datosPacientes1.txt")
## Warning in readLines("C:\\Users\\Danie\\Downloads\\datosPacientes1.txt"):
## incomplete final line found on 'C:\Users\Danie\Downloads\datosPacientes1.txt'
# Exploración inicial
head(texto)
## [1] "ID sujeto edad presion sensib grupo ecivil"
## [2] " 1 1 22 112 6.3C C"
## [3] " 2 2 22 109 6.8P S"
## [4] " 3 3 23 110 7C C"
## [5] " 4 4 24 121 7.1C S"
## [6] " 5 5 25 123 5.6P C"
Limpieza de Texto con stringr
La librería stringr es útil para realizar operaciones de limpieza y manipulación de cadenas de texto:
texto_limpio <- str_replace_all(texto, "[^a-zA-Z]", " ")
texto_limpio <- tolower(texto_limpio)
texto_limpio
## [1] "id sujeto edad presion sensib grupo ecivil"
## [2] " c c"
## [3] " p s"
## [4] " c c"
## [5] " c s"
## [6] " p c"
## [7] " c c"
## [8] " c c"
## [9] " c s"
## [10] " c s"
## [11] " p s"
## [12] " c s"
## [13] " c c"
## [14] " p s"
## [15] " c c"
## [16] " c c"
## [17] " p s"
## [18] " c c"
## [19] " c c"
## [20] " c c"
## [21] " c c"
## [22] " c c"
## [23] " c c"
## [24] " p s"
## [25] " c c"
## [26] " p s"
## [27] " c c"
## [28] " p s"
## [29] " c c"
## [30] " p s"
## [31] " c c"
## [32] " p s"
## [33] " c c"
## [34] " c c"
## [35] " c c"
## [36] " p s"
## [37] " c s"
## [38] " p s"
## [39] " p s"
## [40] " c c"
## [41] " p s"
## [42] " c c"
Procesamiento de Texto con tm
La librería tm es especialmente diseñada para el procesamiento de texto:
install.packages("SnowballC", dependencies=TRUE, repos='http://cran.rstudio.com/')
## Installing package into 'C:/Users/Danie/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'SnowballC' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'SnowballC'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Danie\AppData\Local\R\win-library\4.3\00LOCK\SnowballC\libs\x64\SnowballC.dll
## a
## C:\Users\Danie\AppData\Local\R\win-library\4.3\SnowballC\libs\x64\SnowballC.dll:
## Permission denied
## Warning: restored 'SnowballC'
##
## The downloaded binary packages are in
## C:\Users\Danie\AppData\Local\Temp\RtmpG4fyma\downloaded_packages
library(SnowballC)
corpus <- Corpus(VectorSource(texto_limpio))
corpus <- tm_map(corpus, removeWords, stopwords("english"))
## Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("english")):
## transformation drops documents
corpus <- tm_map(corpus, stemDocument)
## Warning in tm_map.SimpleCorpus(corpus, stemDocument): transformation drops
## documents
Análisis de Frecuencia de Palabras con tidyverse
Para realizar un análisis de frecuencia de palabras, podemos aprovechar la potencia de tidyverse:
# Crear un data frame de términos y frecuencias
frecuencia_palabras <- Corpus(VectorSource(texto_limpio)) %>%
tm_map(removePunctuation) %>%
tm_map(removeNumbers) %>%
tm_map(tolower) %>%
tm_map(removeWords, stopwords("english")) %>%
tm_map(stemDocument) %>%
TermDocumentMatrix() %>%
as.matrix() %>%
data.frame() %>%
gather(key = "Palabra", value = "Frecuencia") %>%
arrange(desc(Frecuencia))
## Warning in tm_map.SimpleCorpus(., removePunctuation): transformation drops
## documents
## Warning in tm_map.SimpleCorpus(., removeNumbers): transformation drops
## documents
## Warning in tm_map.SimpleCorpus(., tolower): transformation drops documents
## Warning in tm_map.SimpleCorpus(., removeWords, stopwords("english")):
## transformation drops documents
## Warning in tm_map.SimpleCorpus(., stemDocument): transformation drops documents
# Visualizar las 10 palabras más frecuentes
head(frecuencia_palabras, 10)
## Palabra Frecuencia
## 1 X1 1
## 2 X1 1
## 3 X1 1
## 4 X1 1
## 5 X1 1
## 6 X1 1
## 7 X2 0
## 8 X2 0
## 9 X2 0
## 10 X2 0
A lo largo del documento, hemos explorado diversas funciones en R que desempeñan un papel crucial en el análisis de datos. Estas funciones nos permiten realizar tareas fundamentales, como analizar, completar, filtrar y eliminar datos, con el objetivo de obtener estadísticas más limpias y precisas. A continuación, profundizaré en algunas de estas funciones clave y su relevancia en el proceso de mejora de estadísticas.
La visualización de datos bivariados y multivariados es esencial para comprender la estructura y las relaciones dentro de conjuntos de datos complejos. La combinación de gráficos de dispersión, diagramas de puntos, matrices de correlación y gráficos en 3D proporciona una perspectiva completa de la estructura y las interacciones en los datos.
La visualización avanzada de datos en R para imágenes ofrece una variedad de técnicas, desde análisis básicos de intensidad hasta procesamiento de imágenes y segmentación. La combinación de librerías como imager y ggplot2 permite explorar y comprender datos de imágenes de manera efectiva.
Al aplicar estas técnicas a tus propios conjuntos de datos, asegúrate de adaptar los códigos según la estructura y características específicas de tus imágenes. La visualización de datos de imágenes en R proporciona una perspectiva única y valiosa, permitiendo insights más allá de las técnicas de visualización tradicionales.
La manipulación de datos no estructurados, especialmente datos de texto, es esencial para extraer información significativa. Las librerías stringr, tm, y tidyverse proporcionan herramientas poderosas para limpiar, procesar y analizar datos de texto en R.
-https://rpubs.com/paraneda/missingdata
-https://fernandoblancopsy.com/2019/11/07/curso-de-estadesteca-mal-3-outliers/
R Core Team (2022). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria.
Feinerer, I., Hornik, K., & Meyer, D. (2008). Text mining infrastructure in R. Journal of Statistical Software, 25(5), 1-54.
https://rstudio-pubs-static.s3.amazonaws.com/571217_ae5270f8aaa541ac9a69b0f337613277.html