En este documento se construye un conjunto de datos simulados del sector salud, se describen estadísticamente sus variables numéricas y se visualiza la distribución de la condición de salud.
El objetivo es ilustrar un flujo general que tienen la construcción de documentos markdown de R en el que incluye:
Se implementa la carga de librerías previamente instaladas; la creación de funciones personalizadas; el generar los datos simulados; se presenta un análisis descriptivo elemental; se visualiza un comparativo de frecuencias la condición de salud de paciente y finalmente se concluye con la interpretación del caso.
library(tidyverse)
library(ggplot2)
library(tidyverse)
library(ggplot2)
# Tablas compatibles con Word
library(flextable)
library(officer)
f_cargar_datos <- function(n = 200) {
set.seed(2026)
datos <- tibble(
edad = sample(18:79, n, replace = TRUE),
presion_sistolica = round(rnorm(n, mean = 120, sd = 15), 2),
glucosa = round(rnorm(n, mean = 100, sd = 25), 2),
colesterol = round(rnorm(n, mean = 200, sd = 30), 2),
imc = round(rnorm(n, mean = 27, sd = 4), 2),
sexo = sample(c("Masculino", "Femenino"), n, replace = TRUE),
diagnostico = sample(
c("Sano", "Hipertensión", "Diabetes"),
n,
replace = TRUE
)
)
return(datos)
}
f_describir_datos_numericos <- function(df) {
num_df <- df %>% dplyr::select(where(is.numeric))
resumen_largo <- purrr::map_dfr(names(num_df), function(v) {
x <- num_df[[v]]
tibble::tibble(
variable = v,
media = mean(x, na.rm = TRUE),
sd = sd(x, na.rm = TRUE),
minimo = min(x, na.rm = TRUE),
maximo = max(x, na.rm = TRUE)
)
}) %>%
dplyr::mutate(dplyr::across(where(is.numeric), ~round(.x, 2)))
ft <- flextable::flextable(resumen_largo) |> flextable::autofit()
list(data = resumen_largo, table = ft)
}
f_visualizar_datos <- function(df) {
ggplot(df, aes(x = diagnostico)) +
geom_bar(fill = "steelblue") +
labs(
title = "Distribución de Diagnóstico",
x = "Diagnóstico",
y = "Frecuencia"
) +
theme_minimal()
}
datos <- f_cargar_datos(200)
ft_head <- flextable(head(datos, 10))
autofit(ft_head)
edad | presion_sistolica | glucosa | colesterol | imc | sexo | diagnostico |
|---|---|---|---|---|---|---|
46 | 103.33 | 123.95 | 239.65 | 27.66 | Femenino | Hipertensión |
74 | 134.94 | 79.02 | 198.64 | 29.17 | Masculino | Diabetes |
50 | 128.43 | 81.01 | 193.56 | 27.04 | Femenino | Hipertensión |
55 | 96.54 | 78.34 | 204.04 | 28.17 | Masculino | Diabetes |
62 | 142.22 | 141.48 | 180.65 | 29.53 | Femenino | Sano |
64 | 102.46 | 113.92 | 201.71 | 18.51 | Masculino | Sano |
44 | 104.22 | 115.03 | 227.94 | 25.91 | Femenino | Sano |
61 | 97.92 | 50.76 | 206.11 | 28.52 | Masculino | Sano |
53 | 102.10 | 90.50 | 248.77 | 27.83 | Masculino | Sano |
65 | 114.78 | 128.94 | 182.20 | 27.52 | Femenino | Diabetes |
resultado <- f_describir_datos_numericos(datos)
resultado
## $data
## # A tibble: 5 × 5
## variable media sd minimo maximo
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 edad 49.8 17.0 18 79
## 2 presion_sistolica 122. 13.8 82.0 160.
## 3 glucosa 101. 28.2 37.2 179.
## 4 colesterol 199. 27.6 122. 284.
## 5 imc 27.1 4 14.8 40.7
##
## $table
## a flextable object.
## col_keys: `variable`, `media`, `sd`, `minimo`, `maximo`
## header has 1 row(s)
## body has 5 row(s)
## original dataset sample:
## 'data.frame': 5 obs. of 5 variables:
## $ variable: chr "edad" "presion_sistolica" "glucosa" "colesterol" ...
## $ media : num 49.8 121.5 101.1 199.4 27.1
## $ sd : num 17 13.8 28.2 27.6 4
## $ minimo : num 18 82 37.2 121.9 14.8
## $ maximo : num 79 159.6 178.6 284.4 40.7
f_visualizar_datos(datos)
El documento presenta un ejemplo en R Markdown para simular datos, describir estadísticamente y visualizar información dentro de un flujo de análisis reproducible para la ciencia de los datos y el aprendizaje automático.