Tipos de objetos en R

Vectores: Los vectores son secuencias de elementos del mismo tipo. Pueden ser de tipo numérico, caracter, lógico, entre otros. Por ejemplo:

vector_numerico <- c(1, 2, 3, 4, 5)
vector_caracter <- c("Uno", "Dos", "Tres", "Cuatro")
vector_logico <- c(TRUE, FALSE, TRUE)

Matrices: Las matrices son arreglos bidimensionales de elementos del mismo tipo. Pueden contener números, caracteres o valores lógicos. Por ejemplo:

matriz_numerica <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
matriz_caracter <- matrix(c("a", "b", "c", "d"), nrow = 2, ncol = 2)
matriz_caracter
##      [,1] [,2]
## [1,] "a"  "c" 
## [2,] "b"  "d"

Listas: Las listas son objetos que pueden contener elementos de diferentes tipos y longitudes. Pueden incluir vectores, matrices, data frames, entre otros. Por ejemplo:

lista <- list(nombre = "Juan", edad = 30, vector = c(1, 2, 3), irracional = 2L)
lista
## $nombre
## [1] "Juan"
## 
## $edad
## [1] 30
## 
## $vector
## [1] 1 2 3
## 
## $irracional
## [1] 2

Data frames: Los data frames son estructuras de datos similares a tablas, donde las columnas pueden tener diferentes tipos de datos. Son muy utilizados para trabajar con conjuntos de datos. Por ejemplo:

data_frame <- data.frame(nombre = c("Ana", "Pedro", "María"),
                         edad = c(25, 30, 28),
                         ciudad = c("Madrid", "Barcelona", "Valencia"))
data_frame
##   nombre edad    ciudad
## 1    Ana   25    Madrid
## 2  Pedro   30 Barcelona
## 3  María   28  Valencia

Factores: Los factores son utilizados para representar variables categóricas con niveles predefinidos. Son útiles en análisis estadísticos y modelos predictivos. Por ejemplo:

factor <- factor(vector_caracter)

Tipos de operaciones matematicas en R

Ee pueden realizar diversas operaciones matemáticas y cálculos numéricos. A continuación, te proporciono algunos ejemplos de operaciones matemáticas comunes que se pueden realizar en R:

Suma: Se utiliza el operador “+” para sumar números. Por ejemplo:

resultado <- 5 + 3
resultado
## [1] 8

Resta: Se utiliza el operador “-” para restar números. Por ejemplo:

resultado <- 20 - resultado
resultado
## [1] 12

Multiplicación: Se utiliza el operador “*” para multiplicar números. Por ejemplo:

2 * 6
## [1] 12

División: Se utiliza el operador “/” para dividir números. Por ejemplo:

resultado <- 20 / 5

Potencia: Se utiliza el operador “^” para elevar un número a una potencia. Por ejemplo:

resultado <- 2^resultado
resultado
## [1] 16

Raíz cuadrada: Se utiliza la función sqrt() para calcular la raíz cuadrada de un número. Por ejemplo:

resultado <- sqrt(25)
resultado
## [1] 5

Valor absoluto: Se utiliza la función abs() para obtener el valor absoluto de un número. Por ejemplo:

resultado <- abs(-7)
resultado
## [1] 7

voy entendiendo?

  1. Cargar la base de datos desde un CSV
  2. cree un vector numerico que se llame Primero
  3. cree un vector character que se llame segundo
  4. cree un vector logico que se llame tercero
  5. cree una lista que contengan esos tres vectores
  6. cree una data.frame que contenga 5 variables.

Paquetes o librerias de R

Un paquete es una colección de funciones, datos y documentación que se agrupan para proporcionar un conjunto específico de funcionalidades y facilitar tareas específicas en el análisis de datos, la visualización o cualquier otro aspecto del trabajo con R. Los paquetes son creados y mantenidos por la comunidad de usuarios de R y pueden ser instalados y cargados en R para ampliar su funcionalidad base.

El paquete tidyverse es un conjunto de paquetes de R diseñado para facilitar la manipulación, visualización y análisis de datos de una manera consistente y eficiente. Al instalar y cargar el paquete tidyverse, se cargan automáticamente varios paquetes populares, como ggplot2 para gráficos, dplyr para manipulación de datos, tidyr para limpieza de datos, entre otros.

si quiero llamar un paquete pero para una funcion especifica utilizo :: de lo contrario para llamar un paquete seimpre debo utilizar library()

# Instalar el paquete tidyverse
#install.packages("tidyverse")

# Cargar el paquete tidyverse
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.1     ✔ purrr   1.0.1
## ✔ tibble  3.1.8     ✔ dplyr   1.1.0
## ✔ tidyr   1.3.0     ✔ stringr 1.5.0
## ✔ readr   2.1.4     ✔ forcats 1.0.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()

Importar y exportar bases de datos

para el ejercicio de carge de informacion utilizaremos las bases disponibles en DANE en el siguiente enlace https://microdatos.dane.gov.co/index.php/catalog/680/get-microdata

personas <- read.csv("C:/Users/ytoloza/OneDrive - unbosque.edu.co/R STUDIO OJOOOO/TALLER R/UELBOSQUE/2023-1/Curso 2023-1/DATA/personas.csv")
View(personas)

Cargar la base de datos desde un stata

personas <- haven::read_dta("C:/Users/ytoloza/OneDrive - unbosque.edu.co/R STUDIO OJOOOO/TALLER R/UELBOSQUE/2023-1/Curso 2023-1/DATA/personas.dta")
## Invalid timestamp string (length=17): 27 jul. 2020 18:4
summary(personas)
##       SEXO            EDAD          PARENTESCO         PADRE      
##  Min.   :1.000   Min.   :  0.00   Min.   : 1.000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.: 17.00   1st Qu.: 1.000   1st Qu.:2.000  
##  Median :2.000   Median : 31.00   Median : 3.000   Median :2.000  
##  Mean   :1.528   Mean   : 33.53   Mean   : 2.839   Mean   :2.029  
##  3rd Qu.:2.000   3rd Qu.: 50.00   3rd Qu.: 3.000   3rd Qu.:3.000  
##  Max.   :2.000   Max.   :106.00   Max.   :10.000   Max.   :9.000  
##                                                                   
##      MADRE       CONSENTIMIENTO     RESULTADO        DIRECTORIO   
##  Min.   :1.000   Min.   :1        Min.   :1        Min.   :    1  
##  1st Qu.:1.000   1st Qu.:1        1st Qu.:1        1st Qu.:13282  
##  Median :2.000   Median :1        Median :1        Median :26672  
##  Mean   :1.765   Mean   :1        Mean   :1        Mean   :27630  
##  3rd Qu.:2.000   3rd Qu.:1        3rd Qu.:1        3rd Qu.:41248  
##  Max.   :9.000   Max.   :1        Max.   :1        Max.   :59977  
##                  NA's   :119590   NA's   :119590                  
##  SECUENCIA_ENCUESTA  SECUENCIA_P     ORDEN        PER_SELECCIONADA
##  Min.   : 1.000     Min.   :1    Min.   : 1.000   Min.   :1       
##  1st Qu.: 1.000     1st Qu.:1    1st Qu.: 1.000   1st Qu.:1       
##  Median : 2.000     Median :1    Median : 2.000   Median :1       
##  Mean   : 2.625     Mean   :1    Mean   : 2.625   Mean   :1       
##  3rd Qu.: 3.000     3rd Qu.:1    3rd Qu.: 3.000   3rd Qu.:1       
##  Max.   :17.000     Max.   :1    Max.   :17.000   Max.   :1       
##                                                   NA's   :119590

Cargar la base de datos desde un SPSS

personas <- haven::read_sav("C:/Users/ytoloza/OneDrive - unbosque.edu.co/R STUDIO OJOOOO/TALLER R/UELBOSQUE/2023-1/Curso 2023-1/DATA/personas.sav")
str(personas)
## tibble [169,346 × 12] (S3: tbl_df/tbl/data.frame)
##  $ SEXO              : num [1:169346] 1 2 2 1 2 2 1 1 2 1 ...
##   ..- attr(*, "label")= chr "SEXO"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ EDAD              : num [1:169346] 59 56 28 25 62 33 11 54 52 19 ...
##   ..- attr(*, "label")= chr "EDAD"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ PARENTESCO        : num [1:169346] 1 2 3 3 1 3 5 1 2 3 ...
##   ..- attr(*, "label")= chr "PARENTESCO"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ PADRE             : num [1:169346] 2 2 1 1 2 2 2 3 2 1 ...
##   ..- attr(*, "label")= chr "PADRE"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ MADRE             : num [1:169346] 2 2 1 1 2 1 1 2 1 1 ...
##   ..- attr(*, "label")= chr "MADRE"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ CONSENTIMIENTO    : num [1:169346] NA 1 NA NA 1 NA NA 1 NA NA ...
##   ..- attr(*, "label")= chr "CONSENTIMIENTO"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ RESULTADO         : num [1:169346] NA 1 NA NA 1 NA NA 1 NA NA ...
##   ..- attr(*, "label")= chr "RESULTADO"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ DIRECTORIO        : num [1:169346] 1 1 1 1 2 2 2 3 3 3 ...
##   ..- attr(*, "label")= chr "DIRECTORIO"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ SECUENCIA_ENCUESTA: num [1:169346] 1 2 3 4 1 2 3 1 2 3 ...
##   ..- attr(*, "label")= chr "SECUENCIA_ENCUESTA"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ SECUENCIA_P       : num [1:169346] 1 1 1 1 1 1 1 1 1 1 ...
##   ..- attr(*, "label")= chr "SECUENCIA_P"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ ORDEN             : num [1:169346] 1 2 3 4 1 2 3 1 2 3 ...
##   ..- attr(*, "label")= chr "ORDEN"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  $ PER_SELECCIONADA  : num [1:169346] NA 1 NA NA 1 NA NA 1 NA NA ...
##   ..- attr(*, "label")= chr "PER_SELECCIONADA"
##   ..- attr(*, "format.spss")= chr "F8.0"
##  - attr(*, "label")= chr "NSDstat generated file"

Importar un video

vembedr::embed_url("https://www.youtube.com/watch?v=smvHfHWzcbw")

Guardar una base de datos en formato txt

write.table(personas, 
  "C:/Users/ytoloza/OneDrive - unbosque.edu.co/R STUDIO OJOOOO/TALLER R/UELBOSQUE/2023-1/Curso 2023-1/DATA/Personas12.txt",
   sep="[", col.names=TRUE, 
  row.names=FALSE, quote=FALSE, 
  na="")

Guardar una base de datos en formato txt

write.table(personas, file = "DATA/Personas12.csv", sep = ";", row.names = FALSE)

Guardar varias bases de datos en formato xlxs

primero creamos nuestras bases de datos y las almacenamos en un objeto de lista.

bases_de_datos <- list(base1 = data.frame(a = 1:5, b = 6:10),
                       base2 = data.frame(x = 11:15, y = 16:20),
                       base3 = data.frame(foo = 21:25, bar = 26:30))

creamos un archivo en blanco de xlxs y cargamos la libreria

library(openxlsx)
archivo_excel <- createWorkbook()

creamos bucle for para recorrer cada elemento de la lista bases_de_datos. Para cada base de datos, se agrega una nueva hoja al archivo de Excel utilizando la función addWorksheet(), y luego se escriben los datos de la base de datos en la hoja correspondiente utilizando la función writeData().

for (nombre_base in names(bases_de_datos)) {
  addWorksheet(archivo_excel, sheetName = nombre_base)
  writeData(archivo_excel, sheet = nombre_base, x = bases_de_datos[[nombre_base]])
}

Finalmente, se guarda el archivo de Excel en el proyecto utilizando la función saveWorkbook(). El archivo se guarda con el nombre “Personas12.xlsx” en la carpeta “DATA”. Si el archivo ya existe, se sobrescribe debido al argumento overwrite = TRUE.

saveWorkbook(archivo_excel, file = "DATA/Personas12.xlsx", 
             overwrite = TRUE)

Ejercicio

descarga una o varias bases del portal SIVIGILA https://portalsivigila.ins.gov.co/Paginas/Buscador.aspx carga la base en R y luego guardala desde R a tu equipo.


Utilizaremos la base Titanic, esta base es un conjunto de titanic clásico ampliamente utilizado en el ámbito de la ciencia de titanic y el aprendizaje automático. Contiene información sobre los pasajeros a bordo del famoso barco Titanic, incluyendo variables como la clase del pasajero, edad, género, número de hermanos/cónyuges a bordo, número de padres/hijos a bordo, tarifa del boleto, entre otros.

Acontinuacion mostramos las librerias necesarias para el ejercicio, asi como la base de datos que se utilizara.

library(titanic)
library(tidyverse)
library(hrbrthemes)
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
##       Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
##       if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
library(viridis)
## Loading required package: viridisLite
titanic <- titanic_train

En el dataset de Titanic las variables disponibles son:

PassengerId: identificador único del pasajero. Survived: si el pasajero sobrevivió al naufragio, codificada como 0 (no) y 1 (si). Esta es la variable respuesta que interesa predecir. Pclass: clase a la que pertenecía el pasajero: 1, 2 o 3. Name: nombre del pasajero. Sex: sexo del pasajero. Age: edad del pasajero. SibSp: número de hermanos, hermanas, hermanastros o hermanastras en el barco. Parch: número de padres e hijos en el barco. Ticket: identificador del billete. Fare: precio pagado por el billete. Cabin: identificador del camarote asignado al pasajero. Embarked: puerto en el que embarcó el pasajero.

Esta base de titanic brinda la oportunidad de realizar una variedad de ejercicios estadísticos para explorar diferentes aspectos relacionados con la supervivencia de los pasajeros y su relación con las diferentes variables disponibles. Algunos ejemplos de los ejercicios estadísticos que se pueden realizar son:

  1. Análisis descriptivo: Calcular estadísticas resumidas, como medias, medianas, desviaciones estándar, para variables numéricas como edad o tarifa del boleto. También se pueden obtener tablas de frecuencia para variables categóricas, como la clase del pasajero o el género.

  2. Análisis de supervivencia: Investigar la tasa de supervivencia general y compararla entre diferentes grupos de pasajeros según variables como género, clase o edad. Se pueden realizar análisis de curvas de supervivencia, estimar la función de supervivencia y realizar pruebas de comparación de supervivencia, como el test de log-rank.

  3. Modelos predictivos: Utilizar técnicas de aprendizaje automático, como regresión logística o árboles de decisión, para construir modelos predictivos de supervivencia basados en diferentes variables. Estos modelos pueden ayudar a identificar los factores que influyen en la probabilidad de supervivencia de un pasajero.

  4. Análisis de correlación: Investigar las relaciones entre las variables disponibles utilizando medidas de correlación, como el coeficiente de correlación de Pearson o el coeficiente de correlación de Spearman. Por ejemplo, se puede analizar si existe una correlación entre la edad y la tarifa del boleto.

  5. Análisis de tablas de contingencia: Realizar análisis de tablas de contingencia y pruebas de independencia para evaluar la asociación entre variables categóricas. Por ejemplo, se puede analizar si existe una asociación entre la supervivencia y la clase del pasajero.

Iniciemos con el primer punto.

Analisis descriptivos

Debemos conocer los nombres y caracteristicas de la data

names(titanic)
##  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
##  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
## [11] "Cabin"       "Embarked"
head(titanic)
##   PassengerId Survived Pclass
## 1           1        0      3
## 2           2        1      1
## 3           3        1      3
## 4           4        1      1
## 5           5        0      3
## 6           6        0      3
##                                                  Name    Sex Age SibSp Parch
## 1                             Braund, Mr. Owen Harris   male  22     1     0
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1     0
## 3                              Heikkinen, Miss. Laina female  26     0     0
## 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1     0
## 5                            Allen, Mr. William Henry   male  35     0     0
## 6                                    Moran, Mr. James   male  NA     0     0
##             Ticket    Fare Cabin Embarked
## 1        A/5 21171  7.2500              S
## 2         PC 17599 71.2833   C85        C
## 3 STON/O2. 3101282  7.9250              S
## 4           113803 53.1000  C123        S
## 5           373450  8.0500              S
## 6           330877  8.4583              Q

Histograma de una variable numérica: Este código crea un histograma de la variable age en el conjunto de titanic titanic. Se utiliza la función geom_histogram para crear el histograma, especificando el ancho de los intervalos de clase con el argumento binwidth.

ggplot(titanic, aes(x = Age)) +
  geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
  labs(x = "Edad", y = "Frecuencia", title = "Distribución de Edad")
## Warning: Removed 177 rows containing non-finite values (`stat_bin()`).

Diagrama de densidad de una variable numérica: se utiliza la función geom_density para crear un diagrama de densidad de la variable Fare. El argumento fill se utiliza para especificar el color del área bajo la curva de densidad.

ggplot(titanic, aes(x = Fare)) +
  geom_density(fill = "steelblue", color = "white") +
  labs(x = "Tarifa", y = "Densidad", title = "Distribución de Tarifa")

 ggplot(titanic, aes(x=Age, fill=Sex)) +
    geom_histogram( color="#e9ecef", alpha=0.6, position = 'identity') +
    scale_fill_manual(values=c("#69b3a2", "#404080")) +
    theme_ipsum() +
    labs(fill="")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

analicemos el codigo que utilizamos para generar el grafico anterior.

ggplot(titanic, aes(x=Age, fill=Sex)) Aquí se especifica el conjunto de datos titanic y se asigna la variable “Age” a la posición x del gráfico. Además, se utiliza la variable “Sex” para llenar (fill) las barras con diferentes colores según el sexo

geom_histogram(color="#e9ecef", alpha=0.6, position = 'identity') Esta línea agrega un objeto de geometría geom_histogram, que representa el histograma. Se establece el color de las barras en “#e9ecef” y se ajusta la transparencia (alpha) a 0.6 para que las barras sean semi-transparentes. La opción position = ‘identity’ se utiliza para que las barras se muestren en su posición original sin agruparlas.

scale_fill_manual(values=c("#69b3a2", "#404080")) Aquí se define el esquema de colores para el llenado (fill) de las barras. Se utilizan dos colores especificados en formato hexadecimal: “#69b3a2” para el género femenino y “#404080” para el género masculino.

theme_ipsum() Esta línea aplica un tema predefinido de apariencia (theme_ipsum()) al gráfico, que proporciona un estilo visual agradable y coherente.

labs(fill="") Por último, se utiliza esta línea para cambiar la etiqueta del título de la leyenda del llenado (fill) en el gráfico. Al establecer fill=““, se elimina la etiqueta de la leyenda.

 ggplot(titanic, aes(x=Age, fill=Sex)) +
  geom_histogram(alpha=0.6, binwidth = 5) +
  scale_fill_manual(values = c("pink", "green")) +
  scale_color_manual(values = c("pink", "green")) +
  theme_ipsum() +
  xlab("Titulo en el eje x") +
  ylab("Titulo en el eje y") +
  facet_wrap(~Survived)

Analicemos el codigo que utilizamos para general el grafico anterior:

ggplot(titanic, aes(x=Age, fill=Sex)) Esta línea crea un objeto ggplot y especifica el conjunto de datos “titanic” como fuente de datos. El argumento aes se utiliza para asignar la variable “Age” al eje x del gráfico y la variable “Sex” (sexo) se utiliza para determinar el relleno (color) de las barras.

geom_histogram(alpha=0.6, binwidth = 5) Esta línea agrega la capa geométrica “histograma” al gráfico. Define el parámetro alpha para establecer la transparencia de las barras y el parámetro binwidth para especificar el ancho de los intervalos del histograma.

scale_fill_viridis(discrete=TRUE) Esta línea define la escala de color para el relleno de las barras utilizando el esquema de colores “viridis”. El argumento discrete=TRUE indica que la variable “Sex” es de naturaleza categórica.

scale_color_viridis(discrete=TRUE) Esta línea define la escala de color para los elementos de color en el gráfico, como las leyendas. También utiliza el esquema de colores “viridis” y especifica que la variable es categórica.

theme_ipsum() Esta línea aplica un tema de estilo al gráfico para darle una apariencia estética. El tema “ipsum” proporciona un diseño limpio y moderno.

xlab("titulo del eje x") Esta línea establece una etiqueta en blanco para el eje x.

ylab("titulo del eje y) Esta línea establece una etiqueta para el eje y

facet_wrap(~Survived) Esta línea crea múltiples paneles o facetas en el gráfico, basados en la variable “Survived” (superviviente). Cada panel mostrará el histograma de la edad para cada categoría de supervivencia.


Realicemos otro tipo de grafico

a <- data.frame("Promedios" = tapply(titanic$Fare, titanic$Embarked, mean, na.rm=T), 
                "Embarque" = names(tapply(titanic$Fare, titanic$Embarked, mean, na.rm=T)))
head(a)
##   Promedios Embarque
##    80.00000         
## C  59.95414        C
## Q  13.27603        Q
## S  27.07981        S

primero creamos el data frame llamado a la cual es el resultado de la función tapply() para calcular la media de la variable Fare (tarifa) los datos se agrupan por la variable Embarked (puerto de embarque).

a continuacion, graficamos el data frame que creamos:

ggplot(a, aes(x=Embarque, y=Promedios)) +
    geom_segment(aes(xend=Embarque, yend=0)) +
    geom_point( size=4, color="orange") +
    coord_flip() +
    theme_bw() +
    xlab("")

analicemos el codigo que utilizamos para crear el gráfico

ggplot(a, aes(x=Enbarco, y=Promedios)): Crea un objeto ggplot utilizando el dataframe a y asigna las variables Enbarco como el eje x y Promedios como el eje y.

geom_segment(aes(xend=Enbarco, yend=0)): Agrega segmentos verticales desde el eje x hasta el eje y en 0. Estos segmentos se extienden desde cada valor en el eje x hasta el punto en el eje y que corresponde a 0.

geom_point(size=4, color="orange"): Agrega puntos en el gráfico con un tamaño de 4 y color naranja. Estos puntos representan los valores en los ejes x e y del dataframe.

coord_flip(): Invierte los ejes x e y, de manera que el eje x se muestra en posición vertical y el eje y en posición horizontal. Esto es útil cuando se quiere representar variables categóricas en el eje y.

theme_bw(): Aplica un tema de fondo blanco al gráfico.

xlab(""): Elimina la etiqueta del eje x.

ggplot(titanic, aes(x=Age, y=Sex, fill = Sex)) + 
    geom_violin(alpha = 0.6) +
    xlab("class") +
    theme(legend.position="none") +
    xlab("")+
  facet_wrap(~Survived)

ggplot(titanic, aes(x=Age, y=Fare, shape=Sex)) +
      geom_point(size=3, color="#69b3a2") +
    theme_ipsum()


Realicemos una grafica dinamica, para esto trabajaremos con una nueva base de datos (recuerda que debes conocer las variables de la data, para lo que colocaremos en la consola el siguiente codigo ?gapminder)

#cargamos la base 
library(gapminder)
library(gganimate)
head(gapminder)
## # A tibble: 6 × 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       1952    28.8  8425333      779.
## 2 Afghanistan Asia       1957    30.3  9240934      821.
## 3 Afghanistan Asia       1962    32.0 10267083      853.
## 4 Afghanistan Asia       1967    34.0 11537966      836.
## 5 Afghanistan Asia       1972    36.1 13079460      740.
## 6 Afghanistan Asia       1977    38.4 14880372      786.

Realizamos un grafico de puntos.

ggplot(
  gapminder, 
  aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)
  ) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Esperanza de Vida")

analicemos el grafico.

ggplot(gapminder, aes(x = gdpPercap, y = lifeExp, size = pop, colour = country)): Esta línea establece el objeto de gráfico base utilizando el conjunto de datos gapminder. Se especifica que el eje x estará representado por la variable gdpPercap (producto interno bruto per cápita), el eje y estará representado por la variable lifeExp (esperanza de vida), el tamaño de los puntos estará determinado por la variable pop (población) y el color de los puntos se distinguirá por la variable country (país).

geom_point(show.legend = FALSE, alpha = 0.7): Esta línea agrega puntos al gráfico utilizando la geometría geom_point. El argumento show.legend = FALSE oculta la leyenda de colores y el argumento alpha = 0.7 establece la transparencia de los puntos en 0.7.

scale_color_viridis_d(): Esta línea define la escala de colores utilizando la función scale_color_viridis_d(), que proporciona una paleta de colores continua basada en la librería Viridis.

scale_size(range = c(2, 12)): Esta línea establece el rango de tamaño de los puntos utilizando la función scale_size. Los puntos se ajustarán dentro del rango de tamaño de 2 a 12.

scale_x_log10(): Esta línea transforma el eje x a una escala logarítmica utilizando la función scale_x_log10(). Esto significa que los valores en el eje x se representarán en una escala logarítmica en base 10.

labs(x = "GDP per capita", y = "Life expectancy"): Esta línea establece las etiquetas de los ejes x e y utilizando la función labs. El texto “GDP per capita” se mostrará en el eje x y “Life expectancy” se mostrará en el eje y.

ggplot(
  gapminder, 
  aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Esperanza de Vida")+
transition_time(year) +
  labs(title = "Year: {frame_time}")

Analicemos el codigo.

se agregaron dos lineas extras, las cuales fueron:

transition_time(year): Agrega una transición basada en la variable year, lo que permite animar los cambios a lo largo del tiempo.

labs(title = "Year: {frame_time}"): Etiqueta el título del gráfico con el año actual representado en el cuadro de animación.

ggplot(
  gapminder, 
  aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Esperanza de Vida")+
transition_time(year) +
  labs(title = "Year: {frame_time}")+
facet_wrap(~continent)+
  shadow_wake(wake_length = 0.1, alpha = FALSE)

Analicemos el codigo.

se agregaron dos lineas extras, las cuales fueron: facet_wrap(~continent): Divide el gráfico en múltiples paneles según la variable continent, lo que significa que se mostrarán gráficos separados para cada continente.

shadow_wake(wake_length = 0.1, alpha = FALSE): Agrega un efecto de sombra a los puntos en el gráfico con una longitud de desvanecimiento de 0.1.

gapminder %>% filter(continent=="Americas") %>%
  ggplot(aes(x = gdpPercap, y = lifeExp, size = pop, colour = country)) +
  geom_point(show.legend = FALSE, alpha = 0.8) +
  geom_text(aes(label = country), nudge_x = 0, nudge_y = 2,
            size = 4, color = "black") +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Esperanza de Vida") +
  transition_time(year) +
  labs(title = "Year: {frame_time}") +
  #shadow_wake(wake_length = 0.1, alpha = FALSE) +
  theme(legend.position = "none")

Para finalizar, realizaremos un mapa de colombia.

library(tidyverse)
library(rgdal)
## Loading required package: sp
## Please note that rgdal will be retired during 2023,
## plan transition to sf/stars/terra functions using GDAL and PROJ
## at your earliest convenience.
## See https://r-spatial.org/r/2022/04/12/evolution.html and https://github.com/r-spatial/evolution
## rgdal: version: 1.6-5, (SVN revision 1199)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 3.5.2, released 2022/09/02
## Path to GDAL shared files: C:/Users/ytoloza/AppData/Local/Programs/R/R-4.2.2/library/rgdal/gdal
## GDAL binary built with GEOS: TRUE 
## Loaded PROJ runtime: Rel. 8.2.1, January 1st, 2022, [PJ_VERSION: 821]
## Path to PROJ shared files: C:/Users/ytoloza/AppData/Local/Programs/R/R-4.2.2/library/rgdal/proj
## PROJ CDN enabled: FALSE
## Linking to sp version:1.6-0
## To mute warnings of possible GDAL/OSR exportToProj4() degradation,
## use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.
library(sf)
## Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
Colmbia<- st_read("DATA/depto/depto.shp")#para seleccionar la base de datos que queremos mapear
## Reading layer `depto' from data source 
##   `C:\Users\ytoloza\OneDrive - unbosque.edu.co\R STUDIO OJOOOO\TALLER R\UELBOSQUE\2023-1\Curso 2023-1\DATA\depto\depto.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 33 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 165298.4 ymin: 20565.69 xmax: 1804280 ymax: 1984871
## Projected CRS: Bogota 1975 / Colombia Bogota zone
library(readxl)
datos <- read_excel("DATA/Incidencia vr 16.11.21.xlt",
                    sheet = "IncDepart") #base donde se encuentran las tasa calculadas

names(datos) <- make.names(names(datos))#eliminar espacios

datos$DPTO <- as.numeric(datos$Cod_departamento)#se unifica el nombre de la llave de union entre las dos bases
Colmbia$DPTO <- as.numeric(Colmbia$DPTO)

a <- merge(x=Colmbia, y=datos , by ="DPTO")# se unen las BASES dos llaves

##### se crean los mapas DE INCIDENCIA 
a %>%
  ggplot(aes(fill = Incidencia.2015)) + # Crea un objeto ggplot a partir del objeto mex_map
  geom_sf()+
  geom_sf(colour = "grey75", size = 0.07) + # cambia el color y el grosor de las líneas
  scale_fill_gradient("Incidencia",# cambia el color de relleno y el título de la leyenda
                      high = "red",
                      low = "white") +
  labs(title = "a")+ #Colombia: Incidencia 2015
       #subtitle = "Actualizado al 16 de Noviembre, 2021",
       #caption = "Datos: propia del autor")+
  theme_bw() # retirar el fondo gris

analicemos el codigo

Se cargan las bibliotecas necesarias, incluyendo tidyverse, rgdal y sf, que son utilizadas para manipular y visualizar datos espaciales.

Se lee el archivo depto.shp, que contiene la información geoespacial de los departamentos de Colombia, utilizando la función st_read de la biblioteca sf.

Se lee el archivo de Excel Incidencia vr 16.11.21.xlt que contiene los datos de incidencia, utilizando la función read_excel de la biblioteca readxl.

Se realiza una manipulación de los nombres de las columnas en el conjunto de datos datos, utilizando la función make.names, con el fin de eliminar espacios y asegurar que los nombres sean válidos.

Se crea una columna adicional llamada DPTO en ambos conjuntos de datos para unificar la llave de unión entre las dos bases, convirtiendo los valores a tipo numérico.

Se realiza una fusión de los dos conjuntos de datos utilizando la función merge, tomando como llave de unión la columna DPTO, la nueva base de llama a

A partir del objeto resultante de la fusión (a), se genera un objeto ggplot mediante la función %>% de la biblioteca tidyverse.

Se configuran las capas del mapa utilizando geom_sf() para representar los polígonos de los departamentos y geom_sf(colour = "grey75", size = 0.07) para establecer el color y el grosor de las líneas de los límites. Se utiliza scale_fill_gradient para definir el color de relleno de los polígonos en función de la variable de incidencia, con un gradiente que va desde el red (alto valor de incidencia) hasta el white (bajo valor de incidencia).

Se añade un título al mapa utilizando labs(title = "a"),

Se aplica un tema visual utilizando theme_bw() para establecer un fondo blanco y eliminar el fondo gris predeterminado.


INICIAREMOS UNAS REPRESENTACIONES DE REGRESION DE SUPERVIVENCIA

Analizaremos la base de datos kidtran. Los datos sobre la hora de la muerte de 863 pacientes con trasplante de riñón. A todos los pacientes se les realizó su trasplante en el Centro de trasplantes de la Universidad Estatal de Ohio durante el período 1982-1992. El tiempo máximo de seguimiento para este estudio fue de 9.47 años. Los pacientes fueron censurados si se mudaron de Colón (perdidos durante el seguimiento) o si estaban vivos el 30 de junio de 1992. En la muestra, había 432 hombres blancos, 92 hombres negros, 280 mujeres blancas y 59 mujeres negras. Las edades de los pacientes en el trasplante variaron de 9,5 meses a 74,5 años con una edad promedio de 42,8 años. Setenta y tres (16.9%) de los hombres blancos, 14 (15.2%) de los hombres negros, 39 (13.9%) de las mujeres blancas y 14 (23.7%) de las mujeres negras murieron antes del final del estudio.

Las variables contiene las siguientes variables:

obs. Numero de observación. time. Tiempo hasta la muerte o en estudio. delta. Indicador de muerte(1=Vivo,0=Muerte) gender. 1=Hombre, 2=Mujer race. Raza (1=Blanco,2=Negro) age. Edad en Años.

library(survival)
library(KMsurv)
library(survMisc)
## 
## Attaching package: 'survMisc'
## The following object is masked from 'package:ggplot2':
## 
##     autoplot
library(survminer)
## Loading required package: ggpubr
## 
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
## 
##     myeloma
library(ggfortify)
library(flexsurv)
library(actuar)
## 
## Attaching package: 'actuar'
## The following objects are masked from 'package:flexsurv':
## 
##     dllogis, pllogis, qllogis, rllogis
## The following objects are masked from 'package:stats':
## 
##     sd, var
## The following object is masked from 'package:grDevices':
## 
##     cm
library(dplyr)
library(KMsurv)
data("kidtran")

Se calculará medidas descriptivas sobre el número de observaciones censuradas de acuerdo a las variables. Estas estadísticas se utilizaran utilizando las funciones table y prob.table en conjunto a with para utilizar las columnas de la base de datos como variables.

with(kidtran, table(delta))  #Censura
## delta
##   0   1 
## 723 140
with(kidtran, prop.table(table(delta)))
## delta
##         0         1 
## 0.8377752 0.1622248

El numero de observaciones por muerte por trasplante de riñón es bajo a comparación con el número de observaciones perdidas o vivos.

Las covariables que representan grupos las convertiremos a tipo factor para un mejor uso y visualización.

kidtran$gender <- factor(kidtran$gender, labels = c("Hombre", "Mujer"))
kidtran$race <- factor(kidtran$race, labels = c("Blanco", "Negro"))
with(kidtran, table(gender, delta))  #genero
##         delta
## gender     0   1
##   Hombre 437  87
##   Mujer  286  53
with(kidtran, table(race, delta))  #Raza
##         delta
## race       0   1
##   Blanco 600 112
##   Negro  123  28
with(kidtran, hist(age))

kidtran$edadg <- cut(kidtran$age, c(0, 25, 50, 75))
with(kidtran, table(edadg, delta))
##          delta
## edadg       0   1
##   (0,25]  100   7
##   (25,50] 406  69
##   (50,75] 217  64
survfit(Surv(time, delta) ~ gender, kidtran, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Género", 
    conf.int = T, legend.title = "Género", legend.labs = c("Hombres", "Mujeres"))

survfit(Surv(time, delta) ~ race, kidtran, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Raza", 
    conf.int = T, legend.title = "Raza", legend.labs = c("Blanco", "Negro"))

survfit(Surv(time, delta) ~ edadg, kidtran, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Edad", 
    conf.int = T, legend.title = "Edad", legend.labs = c("0-25", "25-50", "50+"))

A primera vista los grupos de edad presentan una clara diferencia entre sus curvas de supervivencia, en donde las personas con mayor edad presentan un mayor riesgo, la curva por Raza presenta al final una ligera diferencia.

Ahora se analizarán las curvas de supervivencia por covariables utilizando subgrupos de otra covariable utilizando el argumento facet.by de ggsurvplot.

survfit(Surv(time, delta) ~ gender + edadg, kidtran, conf.type = "log-log") %>% 
    ggsurvplot(title = "Supervivencia entre Género por Edad", conf.int = T, 
        facet.by = "edadg", legend.title = "Género", panel.labs = list(edadg = c("0-25", 
            "25-50", "75+")), short.panel.labs = T)

survfit(Surv(time, delta) ~ race + edadg, kidtran, conf.type = "log-log") %>% 
    ggsurvplot(title = "Supervivencia entre Raza por Edad", conf.int = T, facet.by = "edadg", 
        legend.title = "Raza", panel.labs = list(edadg = c("0-25", "25-50", 
            "75+")), short.panel.labs = T)

survfit(Surv(time, delta) ~ race + gender, kidtran, conf.type = "log-log") %>% 
    ggsurvplot(title = "Supervivencia entre Género por Raza", conf.int = T, 
        facet.by = "gender", legend.title = "Raza", short.panel.labs = T)

survfit(Surv(time, delta) ~ race + gender + edadg, kidtran, conf.type = "log-log") %>% 
    ggsurvplot(title = "Supervivencia entre Género por Raza", conf.int = F, 
        facet.by = "edadg")

Las gráficas sugieren que el género y la raza no son factores de riesgo para la muerte, sin embargo, la edad gráficamente parecer un factor de riesgo, esta hipótesis se pondrá a prueba a continuación.


regresion logistica

realizaremos una regresion logistica con la base titanic_train iniciaremos cagando las librerias y la base de datos

library(titanic)
library(tidyverse)
library(hrbrthemes)
titanic <- titanic_train

Colocaremos las etiquetas a cada una de las variables de nuestro interes

titanic$Pclass <- factor(titanic$Pclass,
                         levels= c("1","2","3"), 
                         labels = c("Primera", 
                                    "Segundo", 
                                    "Tercero"))
titanic$Pclass <- relevel(titanic$Pclass, 
                          ref="Primera")

titanic$Sex<- factor(titanic$Sex,
                     levels= c("female","male"), 
                     labels = c("Femenino", 
                                "Masculino"))
titanic$Sex <- relevel(titanic$Sex, 
                          ref="Femenino")

titanic$Embarked<- factor(titanic$Embarked,
                     levels= c("C","Q", "S"), 
                     labels = c("C","Q", "S"))
titanic$EmbarkedCod <- ifelse(is.na(titanic$Embarked), "Perdido", 
                              as.character(titanic$Embarked))

realizaremos una regresion lineal

modelo_lineal <- lm(Survived~Fare, data = titanic)

ggplot(titanic, aes(x = Fare, y = Survived))+
  geom_point(aes(color = as.factor(Survived)))+
  geom_smooth(method = "lm", color= "gray" , se= FALSE )+
  theme_bw()+
  labs(title= "Regresion lineal", 
       x = "Precio", 
       y = "¿Sobrevivio?")+
  theme(legend.position = "none")
## `geom_smooth()` using formula = 'y ~ x'

analicesmos el codigo: Se ajusta un modelo lineal utilizando la función lm(). El modelo lineal se especifica con la fórmula Survived~Fare, lo que significa que estamos tratando de predecir la variable Survived (sobrevivido) en función de la variable Fare (precio del boleto). El modelo se ajusta utilizando los datos del data frame titanic.

ggplot() para crear un gráfico de dispersión. Se especifica titanic como el data frame y Fare como el eje X y Survived como el eje Y dentro de aes().

geom_point() se utiliza para agregar los puntos al gráfico de dispersión. Se utiliza as.factor(Survived) para codificar el color de los puntos en función de la variable Survived, lo que permite distinguir entre las personas que sobrevivieron y las que no.

geom_smooth() se utiliza para agregar una línea de regresión lineal al gráfico. El método utilizado es lm, lo que significa que se ajusta una línea de regresión utilizando el modelo lineal que se definió anteriormente. color = "gray" se utiliza para establecer el color de la línea de regresión y se = FALSE se utiliza para desactivar el sombreado del intervalo de confianza de la Y estimada.

theme_bw() para aplicar un tema en blanco y negro al gráfico.

labs() se utiliza para establecer los títulos de los ejes y el título del gráfico.

theme(legend.position = "none") se utiliza para eliminar la leyenda del gráfico, ya que no es necesaria en este caso.

realizaremos una regresion logistico

modelo_logistico <- glm(Survived~Fare, data = titanic, 
                        family = binomial(link = "logit"))

ggplot(titanic, aes(x = Fare, y = Survived))+
  geom_point(aes(color = as.factor(Survived)))+
  geom_smooth(method = "glm",
              method.args = list(family = "binomial"),
              se= TRUE )+
  theme_bw()+
  labs(title= "Regresion logistica", 
       x = "Precio", 
       y = "¿Sobrevivio?")+
  theme(legend.position = "none")
## `geom_smooth()` using formula = 'y ~ x'

Analicemos el codigo:

Primero, se realiza un modelo logístico utilizando la función glm(). El objetivo es predecir la variable Survived (sobrevivido) utilizando la variable Fare (precio) en la base de datos titanic. Se especifica family = binomial(link = "logit") para indicar que se trata de una regresión logística binaria con enlace logit.

ggplot() y se especifica la base de datos titanic y las variables Fare y Survived dentro de aes() para mapearlas a los ejes X e Y del gráfico.

geom_point() para representar los puntos en el gráfico, donde se utiliza color = as.factor(Survived) para asignar colores diferentes a los puntos según si sobrevivieron o no.

Se agrega geom_smooth() para trazar una línea suavizada en el gráfico utilizando un modelo de regresión logística. Se especifica method = "glm" para utilizar la función glm() como método de ajuste del modelo. Se establece method.args = list(family = "binomial") para indicar que se trata de un modelo logístico binomial. Además, se = TRUE permite mostrar el intervalo de confianza alrededor de la línea suavizada.

theme_bw() para establecer un tema de fondo blanco en el gráfico.

Se agregan etiquetas de título, ejes X e Y utilizando labs(). El título del gráfico es Regresión logística, el eje X se etiqueta como Precio y el eje Y como ¿Sobrevivio“.

theme(legend.position = "none") se utiliza para ocultar la leyenda en el gráfico.

modelo_logistico <- glm(Survived~Fare+SibSp+Pclass, 
                        data = titanic, 
                        family = binomial(link = "logit"))
summary(modelo_logistico)
## 
## Call:
## glm(formula = Survived ~ Fare + SibSp + Pclass, family = binomial(link = "logit"), 
##     data = titanic)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.0503  -0.7519  -0.7455   1.0971   1.8430  
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -0.045080   0.230908  -0.195  0.84521    
## Fare           0.008014   0.002704   2.963  0.00304 ** 
## SibSp         -0.091197   0.077251  -1.181  0.23779    
## PclassSegundo -0.192721   0.245306  -0.786  0.43208    
## PclassTercero -1.149844   0.237431  -4.843 1.28e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1186.7  on 890  degrees of freedom
## Residual deviance: 1071.3  on 886  degrees of freedom
## AIC: 1081.3
## 
## Number of Fisher Scoring iterations: 4
grafico <- data.frame(car::Confint(modelo_logistico, 
                                   level=0.95, type="LR", 
                                   exponentiate=TRUE),
                      "nombres" = c("Intercep","Costo", 
                                    "Hermanos", "Clase.1", "Clase.3"))
## 
## Exponentiated Coefficients and Confidence Bounds

analicemos el codigo en la primera parte realizamos un modelo logistico con los valores que vimos en el comando anterior agregandole mas covariables.

car::Confint(modelo_logistico, level=0.95, type="LR", exponentiate=TRUE) Calcula los intervalos de confianza para los coeficientes del modelo logístico. Se utiliza la función Confint() del paquete car. Se establece el nivel de confianza en 0.95 y se especifica el tipo de intervalo de confianza "LR" (likelihood ratio). También se indica que los valores deben ser exponenciados para obtener las odds ratios.

grafico <- data.frame(car::Confint(modelo_logistico, level=0.95, type="LR", exponentiate=TRUE), "nombres" = c("Interce", "Costo", "Hermanos", "Clase")) Se crea un data frame llamado “grafico” que contiene los intervalos de confianza calculados y los nombres de las variables correspondientes (“Interce”, “Costo”, “Hermanos”, “Clase”). Estos nombres son asignados utilizando el vector c()

grafico<- grafico[-1,]
ggplot(grafico, aes(x = Estimate , y = nombres))+
  geom_point(size = 3)+
  geom_errorbarh(aes(xmin = X2.5.., 
                     xmax = X97.5..))+
  geom_vline(xintercept = 1, linetype  = 5)+
  scale_x_continuous(limits = c(0,4))+
  labs(x = "OR", y = "Variables")+
  theme_minimal()

analicemos el codigo

grafico <- grafico[-1,] elimina la primera fila del objeto grafico, lo que implica eliminar el conjunto de datos. Esto se hace para excluir una fila específica del gráfico.

ggplot(grafico, aes(x = Estimate , y = nombres)) crea un objeto ggplot utilizando el conjunto de datos grafico y estableciendo las variables Estimate en el eje X y nombres en el eje Y.

geom_point(size = 3) agrega puntos al gráfico utilizando la geometría point. El argumento size = 3 establece el tamaño de los puntos.

geom_errorbarh(aes(xmin = X2.5.., xmax = X97.5..)) agrega barras de error horizontales al gráfico utilizando la geometría errorbarh. Los argumentos xmin = X2.5.. y xmax = X97.5.. indican los valores mínimos y máximos de los intervalos de confianza para las barras de error.

geom_vline(xintercept = 1, linetype = 5) agrega una línea vertical al gráfico utilizando la geometría vline. El argumento xintercept = 1 establece la posición de la línea en el valor 1 del eje X, y linetype = 5 establece el tipo de línea.

scale_x_continuous(limits = c(0,4)) establece los límites del eje X en 0 y 4

labs(x = "OR", y = "Variables") agrega etiquetas a los ejes del gráfico. El argumento x = "OR" establece la etiqueta del eje X como “OR” (Odds Ratio) y y = "Variables" establece la etiqueta del eje Y como “Variables”.

theme_minimal() aplica un tema minimalista al gráfico, ajustando los elementos visuales y el estilo general.

yEstimada <- ifelse(modelo_logistico$fitted.values>0.3, 1, 0)
matriz.Confuzion <- table(modelo_logistico$model$Survived,
                          yEstimada, dnn = c("y Real", "y Estimado"))

#% de buena clasificacion 
(matriz.Confuzion[1,1]+matriz.Confuzion[2,2])/
  (matriz.Confuzion[1,1]+matriz.Confuzion[2,2]+
     matriz.Confuzion[1,2]+ matriz.Confuzion[2,1])
## [1] 0.671156
plot(matriz.Confuzion)

analicemos el codigo

yEstimada <- ifelse(modelo_logistico$fitted.values>0.3, 1, 0) crea un vector llamado yEstimada que asigna 1 a aquellos valores predichos por el modelo logístico (modelo_logistico) que sean mayores a 0.3 y 0 en caso contrario. Esta línea aplica un umbral para clasificar las predicciones como 1 o 0.

matriz.Confuzion <- table(modelo_logistico$model$Survived, yEstimada, dnn = c("y Real", "y Estimado")) crea una matriz de confusión llamada matriz.Confuzion. La matriz compara los valores reales de la variable Survived del data frame utilizado en el modelo logístico (modelo_logistico$model$Survived) con los valores estimados (yEstimada). La opción dnn se utiliza para asignar nombres a las dimensiones de la matriz de confusión.

plot(matriz.Confuzion) crea un gráfico de la matriz de confusión utilizando la función plot(). Este gráfico muestra visualmente los resultados de la clasificación, resaltando los aciertos y los errores de clasificación.

(matriz.Confuzion[1,1]+matriz.Confuzion[2,2])/(matriz.Confuzion[1,1]+matriz.Confuzion[2,2]+matriz.Confuzion[1,2]+ matriz.Confuzion[2,1]) calcula el porcentaje de clasificación correcta dividiendo la suma de los valores correctos (es decir, la diagonal principal de la matriz de confusión) entre la suma total de todos los valores de la matriz de confusión. Este cálculo proporciona una medida de la precisión general del modelo de clasificación.


TALLER

Para realizar las preguntas de la 1 a la 5 utilizaremos las bases disponibles en el siguiente enlace: https://microdatos.dane.gov.co/index.php/catalog/680/get-microdata

1. Descargue las bases d_capitulos y personas, cárguelas en R y únalas. Busque información sobre la función merge de R.

2. Descargue el directorio de variables (utilícelo para información de las bases).

3. Establezca 5 variables de interés: a. Realice tablas, figuras o regresión de estas 5 variables de interés. (Piense una pregunta a contestar con esos análisis que va a realizar, por ejemplo: ¿Qué porcentaje de personas se sintió desanimado, deprimido o con pocas esperanzas (variable: D_09).

4. Realice una caja y bigotes de la edad estratificado por sexo, régimen de afiliación y consumo de alcohol (consulte: https://r-charts.com/es/distribucion/box-plot-grupo-ggplot2/)

5. Elija alguna una de las preguntas D_11_A a D_11_N, intente realizar la siguiente gráfica en waffle (consulte: https://r-charts.com/es/parte-todo/grafico-waffle-ggplot2/).

Para realizar las preguntas de la 6 a la 10 utilizaremos las bases disponibles en el siguiente enlace: https://microdatos.dane.gov.co//catalog/733/get_microdata

6. Realice un histograma de la edad estratificado por sexo, adicionalmente calcule los deciles de la edad por sexo.

7. ¿Cuál es el promedio y mediana del ingreso mensual (variable = V392) por estrato socioeconómico? Grafique estas variables mediante un box plot.

8. ¿Cuál es el promedio con su IC de personas por hogar?

9. ¿Cuál es el porcentaje con su IC de hogares pobres en Colombia?

10. ¿Los hombres son la mayor proporción de personas pobres e indigentes? (¿cuál(es) prueba de hipótesis podría realizarse? Busque información e intente realizarla)

11. ¿Cuáles son los departamentos que tienen mayor proporción de personas pobres e indigentes?

12. Calcule un índice de hacinamiento en el hogar.