Programación básica

sesion de refuerzo parcial

Autor/a

Anghely Perez

Fecha de publicación

6 de marzo de 2023

title: “Programación básica” subtitle: “sesion de refuerzo parcial” author: - name: Anghely Perez date: “03/06/2023” lang: es toc: true toc-depth: 3 toc-location: left toc-title: “” fontsize: 13pt number-sections: false format: html: theme: light: flatly dark: darkly

self-contained: true


Presentación

El siguiente archivo tiene como objetivo principal prepararlos para el parcial que realizaremos después de semana santa. La recomendación es que replique e interiorise el código para un mayor entendimiento, cualquier duda e inquitud referente a lo anterior, estaré atento.

library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.3.3
library(dplyr)
Warning: package 'dplyr' was built under R version 4.3.3

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(pander)
Warning: package 'pander' was built under R version 4.3.3

primeros pasos

Recuerde llamar las librerias necesarias para el desarrollo óptimo de los códigos, en caso tal no cuente con ellos. Primero installe (install.pakages("nombre de la librería"))

Manos a la obra, creemos un df con los siguientes vectores: género, edad, altura, peso, horas de ejercicio semanales

genero <- c("Hombre", "Mujer", "Hombre", "Hombre", "Hombre", "Mujer", "Hombre", "Mujer", "Mujer", "Hombre")
edad <- c(20, 20, 35, 24, 21, 24, 23, 22, 22, 22)
altura <- c(175, 163, 172, 190, 173, 155, 170, 160, 162, 174)
peso <- c(88, 55, 69, 95, 87, 62, 75, 50, 72, 74)
hj <- c(2, 8, 6, 6, 5, 10, 7, 10, 9, 12)

df <- data.frame(genero, edad, altura, peso, hj) # notese que los vectores son del mismo tipo y las misma dimensión

pander(df)
genero edad altura peso hj
Hombre 20 175 88 2
Mujer 20 163 55 8
Hombre 35 172 69 6
Hombre 24 190 95 6
Hombre 21 173 87 5
Mujer 24 155 62 10
Hombre 23 170 75 7
Mujer 22 160 50 10
Mujer 22 162 72 9
Hombre 22 174 74 12

Hagamos algunas métricas

# descriptivo general  summary(df)
summary(df)
    genero               edad           altura           peso      
 Length:10          Min.   :20.00   Min.   :155.0   Min.   :50.00  
 Class :character   1st Qu.:21.25   1st Qu.:162.2   1st Qu.:63.75  
 Mode  :character   Median :22.00   Median :171.0   Median :73.00  
                    Mean   :23.30   Mean   :169.4   Mean   :72.70  
                    3rd Qu.:23.75   3rd Qu.:173.8   3rd Qu.:84.00  
                    Max.   :35.00   Max.   :190.0   Max.   :95.00  
       hj       
 Min.   : 2.00  
 1st Qu.: 6.00  
 Median : 7.50  
 Mean   : 7.50  
 3rd Qu.: 9.75  
 Max.   :12.00  

# puesto que la variable género es de tipo caracter, podemos totalizar cuantas Mujeres y Hombres cuenta nustro df

table(df$genero)

Hombre  Mujer 
     6      4 
# es interesante analizar el promedio de las edades según el género, para ello realicemos lo siguiente

media_gen <- aggregate(df$edad, by = list(gen = df$genero), FUN = mean)
pander(media_gen)
gen x
Hombre 24.17
Mujer 22
#ejercicio: replique el código con otra variable que considere importante, no olvide realizar los respectivos análisis

media_pes<- aggregate(df$peso, by=list(edad =df$edad), FUN=mean)
pander(media_pes)
edad x
20 71.5
21 87
22 65.33
23 75
24 78.5
35 69

realicemos unas mutaciones en nuestr df, calculemos el imc, para ello agreguemos una nueva variable altura pero expresada en metros.

Nota: mire nuevamente el df y evidencie que la variable fue creada con éxito

df <- df %>% 
  mutate(altura2 = altura/100)
df <- df %>% 
  mutate(imc = peso/(altura2^2))

ahora cálculemos el índice de masa corporal con la siguiente fórmula. 

# Otra forma, Calcula el IMC (Índice de Masa Corporal)
df$IMC2 <- df$peso / (df$altura^2)

Realicemos la siguiente categorización.

Para determinar si un IMC es alto, medio o bajo, se suelen utilizar rangos predefinidos basados en la clasificación del IMC establecida por la Organización Mundial de la Salud (OMS) u otras organizaciones de salud. La clasificación comúnmente aceptada es la siguiente:

  • Bajo peso: IMC < 18.5

  • Peso normal: 18.5 <= IMC < 25

  • Sobrepeso: 25 <= IMC < 30

  • Obesidad: IMC >= 30

    df <- df %>% 
      mutate(imc_label = case_when(
        imc < 18.5 ~ "bajo",
        imc >= 18.5 & imc < 25 ~ "normal",
        imc >= 25 & imc < 30 ~ "sobre peso",
        imc > 30 ~ "obesidad"
      ))

Es hora de realizar un filtro, son esenciales cuanto queremos observar algo en específico. Para ello si se le pide solo trabajar con la población que tiene sobre peso, realizamos lo siguiente

Nota: df_filtrado es un nuevo df, para ello abrala y verifique que el filtro se ha aplicado correctamente

df_filtrado <- df %>% 
  filter(imc_label == "sobre peso")

 

df %>% group_by(imc_label) %>% summarize(mean(hj))
# A tibble: 2 × 2
  imc_label  `mean(hj)`
  <chr>           <dbl>
1 normal            9  
2 sobre peso        6.5
tab1 <- df %>% group_by(imc_label) %>% summarize(mean(hj))

pander(tab1)
imc_label mean(hj)
normal 9
sobre peso 6.5

Gráficos

realicemos un gráfico de barra para el promedio de edades por género

barplot(media_gen$x, main = "Promedio de edad por género",col.main="deeppink",fg="orange", ylab = "media", col="deeppink", border="darkmagenta")

#ejercicio: realizar para la altura y peso

barplot(media_pes$x, main="Promedio de altura por peso", col.main="forestgreen",fg="orange", ylab="media", col="palegreen3", border="forestgreen")

# Calcular el promedio de la edad por género
df_promedio_edad <- df %>%
  group_by(genero) %>%
  summarise(promedio_edad = mean(edad))

# Crear el gráfico de barras
barplot(height = df_promedio_edad$promedio_edad,
        names.arg = df_promedio_edad$genero,
        main = "Promedio de edad por género",
        col.main="magenta",
        fg="orange",
        ylab = "Edad promedio",
        col = "lightpink", border="magenta",
        ylim = c(0, max(df_promedio_edad$promedio_edad) * 1.1))

# Agregar etiquetas con el valor del promedio en cada barra
text(x = 1:length(df_promedio_edad$genero),
     y = df_promedio_edad$promedio_edad,
     labels = round(df_promedio_edad$promedio_edad, 2),
     pos = 3, cex = 0.8, col = "purple")

GRAFICOS DE DISPERSIÓN

# Gráfico de dispersión con la función plot()
plot(df$peso, df$hj, 
     main = "Gráfico de dispersión",
     col.main="purple",
     xlab = "Peso",
     ylab = "Horas de ejercicio")

OTRA FORMA DE DISPERSION

ggplot(df) + geom_point(aes(x = hj, y = edad)) +
  labs(title = "hj y edad", subtitle = "Dispersión") +
  xlab("hj") + ylab("edad")

BOXPLOT

library(ggplot2)


var_relev <- c("edad", "altura", "peso", "hj")

par(mfrow=c(2,2)) # Dividir el área de la gráfica en 1 fila y 2 columnas
for (variable in var_relev) {
  boxplot(df[[variable]], main=variable, col="pink", border="orange", horizontal=TRUE)
}

OTRA FORMA DE BOXPLOT

ggplot(df, aes(x = imc_label, y = hj, fill = hj)) + geom_boxplot() +
  stat_summary(fun = mean, geom = "point") +
  labs(title = "Estadísticos descriptivos de hj", subtitle =  "Por tipo de imc") +
  xlab("imc") + ylab("hj") +
  scale_fill_discrete(name = "hj", labels = c("bajo",
                                                       "alto"))
Warning: The following aesthetics were dropped during statistical transformation: fill.
ℹ This can happen when ggplot fails to infer the correct grouping structure in
  the data.
ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
  variable into a factor?