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
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
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 ...
# 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 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 ...
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 ...
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 ...
# 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
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))
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).
# 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.
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()
# 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
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 ...
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
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 ...
summary(cancer_medicos$medicosxmil)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.5905 0.8925 1.2072 1.7755 1.5303 8.8029
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))
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()
# 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.")
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()
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()
# 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