METADATA

Escribir la descripción del archivo y las variables (metadatos) del archivo en el que estamos trabajando en el archivo R Markdown.

nombre del archivo

título de la investigación

descripción de la investigación

fecha de toma de los datos

personas que tomaron los datos

diseño de toma de datos o fuente de los datos

métodos de toma de los datos

Variables: nombre en el archivo, descripción, tipo de variable/dato, unidades, resolución, categorías

CALCULO DE INCIDENCIA

Cargar datos al ambiente R

Antes de cargar los datos y para evitar errores a la hora de escribir el nombre del archivo, es recomendable cambiar el nombre del archivo a uno más sencillo, sin espacios ni caracteres especiales.

# cargar los datos
cancerpr2022 <- read.csv("cancer-PR2022.csv")

Examinar estructura y tipo de datos

# examinar estructura y tipo de datos
str(cancerpr2022)
## 'data.frame':    79 obs. of  5 variables:
##  $ County            : chr  "Puerto Rico" "Adjuntas" "Aguada" "Aguadilla" ...
##  $ Cases             : chr  "16,512" "76" "176" "270" ...
##  $ Population.at.Risk: chr  "3,221,789" "17,905" "37,666" "53,931" ...
##  $ X                 : logi  NA NA NA NA NA NA ...
##  $ X.1               : logi  NA NA NA NA NA NA ...

Arreglar datos numéricos

# pasar datos chr a num en Cases y Population.at.Risk
cancerpr2022$Cases <- as.numeric(gsub(",", "", cancerpr2022$Cases))
cancerpr2022$Population.at.Risk <- as.numeric(gsub(",", "", cancerpr2022$Population.at.Risk))
str(cancerpr2022)
## 'data.frame':    79 obs. of  5 variables:
##  $ County            : chr  "Puerto Rico" "Adjuntas" "Aguada" "Aguadilla" ...
##  $ Cases             : num  16512 76 176 270 114 ...
##  $ Population.at.Risk: num  3221789 17905 37666 53931 23538 ...
##  $ X                 : logi  NA NA NA NA NA NA ...
##  $ X.1               : logi  NA NA NA NA NA NA ...

Eliminar columnas innecesarias

# eliminar columnas 4 y 5
cancerpr2022 <- cancerpr2022[ , -c(4,5)]
str(cancerpr2022)
## 'data.frame':    79 obs. of  3 variables:
##  $ County            : chr  "Puerto Rico" "Adjuntas" "Aguada" "Aguadilla" ...
##  $ Cases             : num  16512 76 176 270 114 ...
##  $ Population.at.Risk: num  3221789 17905 37666 53931 23538 ...

Calcular incidencia

Usar la fórmula:

\[\text{Incidencia} = \left( \frac{\text{Casos nuevos}}{\text{Población en riesgo}} \right) \times 100,000 \]

# calcular incidencia
cancerpr2022$Incidence <- ((cancerpr2022$Cases / cancerpr2022$Population.at.Risk)) * 100000
str(cancerpr2022)
## 'data.frame':    79 obs. of  4 variables:
##  $ County            : chr  "Puerto Rico" "Adjuntas" "Aguada" "Aguadilla" ...
##  $ Cases             : num  16512 76 176 270 114 ...
##  $ Population.at.Risk: num  3221789 17905 37666 53931 23538 ...
##  $ Incidence         : num  513 424 467 501 484 ...

Eliminar la fila de Puerto Rico (total)

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# eliminar la fila de Puerto Rico (total)
cancerpr2022 <- filter(cancerpr2022, County != "Puerto Rico")
str(cancerpr2022)
## 'data.frame':    78 obs. of  4 variables:
##  $ County            : chr  "Adjuntas" "Aguada" "Aguadilla" "Aguas Buenas" ...
##  $ Cases             : num  76 176 270 114 128 138 411 105 113 98 ...
##  $ Population.at.Risk: num  17905 37666 53931 23538 24555 ...
##  $ Incidence         : num  424 467 501 484 521 ...

Examinar resultados

Estadísticas descriptivas

# estadisticas descriptivas
summary(cancerpr2022$Incidence)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   338.6   460.7   491.2   496.3   543.8   686.8

Gráficas descriptivas

Gráfica de barras de la incidencia por pueblo de menor a mayor

library(ggplot2)
# ordenar los datos por incidencia
cancerpr2022 <- cancerpr2022[order(cancerpr2022$Incidence), ]
# convertir la columna County en factor con niveles ordenados
cancerpr2022$County <- factor(cancerpr2022$County, levels = cancerpr2022$County)
# gráfica de barras
ggplot(cancerpr2022, aes(x = County, y = Incidence)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  labs(x = "Pueblo", y = "Incidencia (por 100,000)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 5))

Histograma de la incidencia

library(ggplot2)
ggplot(cancerpr2022, aes(x = Incidence)) +
  geom_histogram(binwidth = 25, fill = "orange", color = "black") +
  labs(x = "Incidencia (por 100,000)", y = "Frecuencia") +
  theme_minimal()

Figura 2. Histograma de la incidencia de cáncer por pueblo en Puerto Rico (2022).

Gráfica de caja (boxplot) de la incidencia

# boxplot horizontal con la media marcada en rojo
ggplot(cancerpr2022, aes(y = Incidence, x = 1)) +
  geom_boxplot(fill = "#74a9cf") +
  stat_summary(fun = mean, geom = "point", color = "red", size = 3) +
  coord_flip() +
  theme_minimal() +
  labs(x = NULL, y = "Incidence")

Figura 3. Gráfica de caja (boxplot) de la incidencia de cáncer por pueblo en Puerto Rico (2022). El punto rojo indica la media.

Relación entre incidencia y otras variables

1. Relación entre incidencia y población en riesgo

ggplot(cancerpr2022, aes(x = Population.at.Risk, y = Incidence)) +
  geom_point(color = "blue") +
  labs(x = "Población en Riesgo", y = "Incidencia (por 100,000)") +
  theme_minimal()

Usar el logaritmo de la población en riesgo para mejorar la visualización

ggplot(cancerpr2022, aes(x = log(Population.at.Risk), y = Incidence)) +
  geom_point(color = "blue") +
  labs(x = "Log(Población en Riesgo)", y = "Incidencia (por 100,000)") +
  theme_minimal()

Análisis de correlación usando log(Población en Riesgo)

# Pearson correlation
cor(cancerpr2022$Incidence, log(cancerpr2022$Population.at.Risk))
## [1] 0.1876238
# p value
cor.test(cancerpr2022$Incidence, log(cancerpr2022$Population.at.Risk))
## 
##  Pearson's product-moment correlation
## 
## data:  cancerpr2022$Incidence and log(cancerpr2022$Population.at.Risk)
## t = 1.6652, df = 76, p-value = 0.09998
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.03642786  0.39371612
## sample estimates:
##       cor 
## 0.1876238

2. Relación entre incidencia y médicos por 1000 habitantes en cada pueblo

Archivo obtenido del documento:

Departamento de Salud. (2021). Informe Estadístico de Médicos (2016-2018) y Profesionales de la Salud (2016-2019) en Puerto Rico: Decimocuarto Registro. San Juan, Puerto Rico: Secretaría de Planificación y Desarrollo. (Secretaría Auxiliar de Planificación y Desarrollo, División de Evaluación y Monitoreo, Programa de Análisis Estadísticos). Páginas 37-38 del documento, 52-53 del PDF.

Se extrajeron los datos mediante ChatGPT 5 a un archivo CSV llamado medicos-municipio.csv

Leer los datos:

medicos <- read.csv("medicos-municipio.csv")
str(medicos)
## 'data.frame':    78 obs. of  7 variables:
##  $ Municipio                  : chr  "Adjuntas" "Aguada" "Aguadilla" "Aguas Buenas" ...
##  $ Total_Medicos              : int  17 65 184 18 79 28 273 16 27 24 ...
##  $ Pct_Total_PR               : num  0.18 0.69 1.94 0.19 0.83 0.29 2.88 0.17 0.28 0.25 ...
##  $ Generalistas_n             : int  9 33 78 11 22 22 117 13 12 12 ...
##  $ Generalistas_pct_municipio : num  52.9 50.8 42.4 61.1 27.9 ...
##  $ Especialistas_n            : int  8 32 106 7 57 6 156 3 15 12 ...
##  $ Especialistas_pct_municipio: num  47.1 49.2 57.6 38.9 72.2 ...

Dejar solo las columnas: “Municipio”, “Total_Medicos”, “Generalistas_n” y “Especialistas_n”

medicos <- medicos[ , c("Municipio", "Total_Medicos", "Generalistas_n", "Especialistas_n")]
str(medicos)
## 'data.frame':    78 obs. of  4 variables:
##  $ Municipio      : chr  "Adjuntas" "Aguada" "Aguadilla" "Aguas Buenas" ...
##  $ Total_Medicos  : int  17 65 184 18 79 28 273 16 27 24 ...
##  $ Generalistas_n : int  9 33 78 11 22 22 117 13 12 12 ...
##  $ Especialistas_n: int  8 32 106 7 57 6 156 3 15 12 ...

Renombrar la columna “County” a “Municipio” para hacer el ‘merge’ de los dos data frames.

colnames(cancerpr2022)[1] <- "Municipio"
str(cancerpr2022)
## 'data.frame':    78 obs. of  4 variables:
##  $ Municipio         : Factor w/ 78 levels "Barranquitas",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Cases             : num  98 6 71 107 73 156 154 157 96 76 ...
##  $ Population.at.Risk: num  28944 1769 19822 28277 18619 ...
##  $ Incidence         : num  339 339 358 378 392 ...
# hacer merge de los dos data frames
cancer_medicos <- merge(cancerpr2022, medicos, by = "Municipio")
str(cancer_medicos)
## 'data.frame':    78 obs. of  7 variables:
##  $ Municipio         : Factor w/ 78 levels "Barranquitas",..: 10 25 45 35 52 62 32 78 47 1 ...
##  $ Cases             : num  76 176 270 114 128 138 411 105 113 98 ...
##  $ Population.at.Risk: num  17905 37666 53931 23538 24555 ...
##  $ Incidence         : num  424 467 501 484 521 ...
##  $ Total_Medicos     : int  17 65 184 18 79 28 273 16 27 24 ...
##  $ Generalistas_n    : int  9 33 78 11 22 22 117 13 12 12 ...
##  $ Especialistas_n   : int  8 32 106 7 57 6 156 3 15 12 ...

CÁLCULOS, GRÁFICAS Y ANÁLISIS

Calcular médicos por 1000 habitantes en cada pueblo
Estadísticas descriptivas de médicos por 1000 habitantes
Gráfica de barras de médicos por 1000 habitantes por pueblo
Histograma de médicos por 1000 habitantes
Relación entre incidencia y médicos por 1000 habitantes
Análisis de correlación entre incidencia y médicos por 1000 habitantes

Calcular médicos por 1000 habitantes en cada pueblo

cancer_medicos$medicosxmil <- (cancer_medicos$Total_Medicos / cancer_medicos$Population.at.Risk) * 1000
str(cancer_medicos)
## 'data.frame':    78 obs. of  8 variables:
##  $ Municipio         : Factor w/ 78 levels "Barranquitas",..: 10 25 45 35 52 62 32 78 47 1 ...
##  $ Cases             : num  76 176 270 114 128 138 411 105 113 98 ...
##  $ Population.at.Risk: num  17905 37666 53931 23538 24555 ...
##  $ Incidence         : num  424 467 501 484 521 ...
##  $ Total_Medicos     : int  17 65 184 18 79 28 273 16 27 24 ...
##  $ Generalistas_n    : int  9 33 78 11 22 22 117 13 12 12 ...
##  $ Especialistas_n   : int  8 32 106 7 57 6 156 3 15 12 ...
##  $ medicosxmil       : num  0.949 1.726 3.412 0.765 3.217 ...

Estadísticas descriptivas de médicos por 1000 habitantes

summary(cancer_medicos$medicosxmil)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5905  0.8925  1.2072  1.7755  1.5303  8.8029

Gráfica de barras de médicos por 1000 habitantes por pueblo

library(ggplot2)
# ordenar los datos por médicos por 1000 habitantes
cancer_medicos <- cancer_medicos[order(cancer_medicos$medicosxmil), ]
# convertir la columna Municipio en factor con niveles ordenados
cancer_medicos$Municipio <- factor(cancer_medicos$Municipio, levels = cancer_medicos$Municipio)
# gráfica de barras
ggplot(cancer_medicos, aes(x = Municipio, y = medicosxmil)) +
  geom_bar(stat = "identity", fill = "lightgreen") +
  labs(x = "Pueblo", y = "Médicos por 1000 habitantes") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 5))

Histograma de médicos por 1000 habitantes

library(ggplot2)
ggplot(cancer_medicos, aes(x = medicosxmil)) +
  geom_histogram(binwidth = 0.5, fill = "orange", color = "black") +
  labs(x = "Médicos por 1000 hab.", y = "Frecuencia") +
  theme_minimal()

Gráfica de caja (boxplot) de médicos por 1000 habitantes

# boxplot horizontal con la media marcada en rojo
ggplot(cancer_medicos, aes(y = medicosxmil, x = 1)) +
  geom_boxplot(fill = "#74a9cf") +
  stat_summary(fun = mean, geom = "point", color = "red", size = 3) +
  coord_flip() +
  theme_minimal() +
  labs(x = NULL, y = "Médicos por 1000 hab.")

Relación entre incidencia y médicos por 1000 habitantes

ggplot(cancer_medicos, aes(x = medicosxmil, y = Incidence)) +
  geom_point(color = "blue") +
  labs(x = "Médicos por 1000 hab.", y = "Incidencia (por 100,000)") +
  theme_minimal()

Relación entre incidencia y log(médicos por 1000 habitantes)

ggplot(cancer_medicos, aes(x = log(medicosxmil), y = Incidence)) +
  geom_point(color = "blue") +
  labs(x = "Log(Médicos por 1000 hab.)", y = "Incidencia (por 100,000)") +
  theme_minimal()

Análisis de correlación entre incidencia y médicos por 1000 habitantes

# Pearson correlation
cor(cancer_medicos$Incidence, log(cancer_medicos$medicosxmil))
## [1] 0.3047868
# p value
cor.test(cancer_medicos$Incidence, log(cancer_medicos$medicosxmil))
## 
##  Pearson's product-moment correlation
## 
## data:  cancer_medicos$Incidence and log(cancer_medicos$medicosxmil)
## t = 2.7898, df = 76, p-value = 0.006663
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.08824096 0.49382423
## sample estimates:
##       cor 
## 0.3047868