El paquete {medicaldata} cuenta con 20 conjuntos de datos de salud, que son útiles para aplicaciones de modelación estadística con R, para profesionales de dicha disciplina, incluidas enfermeras, farmacéuticos, aprendices y estudiantes.
Estos conjuntos de datos van desde versiones reconstruidas, como por ejemplo, el conjunto de datos de escorbuto de James Lind (1757), el ensayo clínico original de estreptomicina para la tuberculosis (1948) y de indometacina para prevenir la pancreatitis en el 2012.
Muchos de los conjuntos de datos provienen del portal de recursos Teaching Statistics in the Health Sciences (TSHS) de la Asociación Estadounidense de Estadística, mantenido por Carol Bigelow en la Universidad de Massachusetts. Asimismo Frank Harrell donó conjuntos de datos en la versión de desarrollo; estos conjuntos de datos actualmente se encuentran en github: https://higgi13425.github.io/medicaldata/.
Configurar el área de trabajo en Rstudio, instalar y activar la paqueteria Medicaldata (desde github).
Explorar el conjunto de datos: propensión a padecer diabetes.
Si se desea la versión en desarrollo (que puede tener nuevos conjuntos de datos y viñetas), se instala con:
## Downloading GitHub repo higgi13425/medicaldata@HEAD
## Running `R CMD build`...
## * checking for file ‘/private/var/folders/jd/ks1q1smd2hx0l016prvqs40w0000gn/T/Rtmppynv88/remotes30bb57a84ab6/higgi13425-medicaldata-a73901f/DESCRIPTION’ ... OK
## * preparing ‘medicaldata’:
## * checking DESCRIPTION meta-information ... OK
## * checking for LF line-endings in source and make files and shell scripts
## * checking for empty or unneeded directories
## * building ‘medicaldata_0.2.0.9001.tar.gz’
Una vez instalado el paquete, se carga la libreria de la forma siguiente:
La lista de conjuntos de datos disponibles en el paquete es:
abm: Observational Dataset of Acute Bacterial Meningitis
blood_storage: Retrospective Cohort Study of the Effects of Blood Storage on Prostate Cancer
cath: Observational Dataset of Cardiac Catheterization
cdystonia: RCT of Botulinum Toxin B for Cervical Dystonia
covid_testing: Deidentified Results of COVID-19 testing at the Children’s Hospital of Pennsylvania (CHOP) in 2020
cytomegalovirus: Retrospective Cohort Study of the Effects of Donor KIR genotype on the reactivation of cytomegalovirus (CMV) after myeloablative allogeneic hematopoietic stem cell transplant.
diabetes: Diabetes Prediction Dataset from the Pima Indian Tribe and the NIDDK
esoph_ca: Esophageal Cancer dataset
indo_rct: RCT of Indomethacin for Prevention of Post-ERCP Pancreatitis
indometh (Indometh): Cohort Study of the Pharmacokinetics of Intravenous Indomethacin
laryngoscope: Randomized, Comparison Trial of Video vs. Standard Laryngoscope
licorice_gargle: Randomized, Controlled Trial of Licorice Gargle before Intubation for Elective Thoracic Surgery
opt: Obstetrics and Periodontal Therapy Dataset
polyps: RCT of Sulindac for Polyp Prevention in Familial Adenomatous Polyposis
scurvy: Randomized Trial of Six Therapies for Scurvy
smartpill: Prospective Cohort Study of Intestinal Transit using a SmartPill to Compare Trauma Patients to Healthy Volunteers
strep_tb: RCT of Streptomycin Therapy for Tuberculosis
supraclavicular: Study of Supraclavicular Anesthesia
theoph: Cohort Study of the Pharmacokinetics of Oral Theophylline
thiomon: Deidentified Laboratory Data on IBD Patients using Thiourines for at least 4 weeks and their Eventual Remission/Active Status after at least 12 Weeks of Therapy.
Para el ejemplo siguiente se utilizará la base de datos “diabetes”, la cual se compone de una recopilación de datos de la tribu de los indios Pima ubicada cerca de Phoenix, Arizona (EE. UU.), en donde la prevalencia de diabetes tipo 2 es alta.
El National Institute of Diabetes and Digestive and Kidney Diseases (NIDDK), reunió una serie de variables predictivas de diabetes y se midieron los resultados de un diagnóstico de diabetes tipo 2 después de 5 años posteriores a las mediciones iniciales. Este conjunto de datos incluye solo mujeres de al menos 21 años de edad y de herencia indígena pima, con al menos 5 años de seguimiento en un estudio longitudinal de diabetes.
# Cargamos base de datos "diabetes"
data(diabetes)
# Asignamos la base de datos al nombre: datos
datos <- diabetes
# Adjuntar los datos
attach(datos)Este conjunto de datos contiene 768 participantes en riesgo de diabetes que participaron en el estudio longitudinal del NIDDK, con medidas de referencia y resultados de diabetes a 5 años. Hay varias variables clínicas que pueden ser factores de riesgo de diabetes, incluido el embarazo, la glucosa, la insulina, el índice de masa corporal, la medición de la grasa corporal en el tríceps y el pedigrí (antecedentes familiares de diabetes como una puntuación numérica). La variable de resultado es diabetes_5y, y esperamos identificar predictores de diabetes futura.
## pregnancy_num glucose_mg-dl dbp_mm-hg triceps_mm insulin_microiu-ml bmi
## 1 6 148 72 35 NA 33.6
## 2 1 85 66 29 NA 26.6
## 3 8 183 64 NA NA 23.3
## 4 1 89 66 23 94 28.1
## 5 0 137 40 35 168 43.1
## 6 5 116 74 NA NA 25.6
## pedigree age diabetes_5y
## 1 0.627 50 pos
## 2 0.351 31 neg
## 3 0.672 32 pos
## 4 0.167 21 neg
## 5 2.288 33 pos
## 6 0.201 30 neg
Variables
## [1] "pregnancy_num" "glucose_mg-dl" "dbp_mm-hg"
## [4] "triceps_mm" "insulin_microiu-ml" "bmi"
## [7] "pedigree" "age" "diabetes_5y"
pregnancy_num : Número de embarazos, con rango de 0 a 17 embarazos y ningún dato faltante; tipo: doble
glucose_mg-dl : Nivel de glucosa en el plasma al realizar en una prueba de tolerancia oral a la glucosa, con rango de 44 a 199 mg/dl, con 5 datos faltantes; tipo: doble
dbp_mm-hg : Presión arterial diastólica en mm Hg. tipo: doble
triceps_mm : Espesor del pliegue cutáneo del tríceps, una medida de grasa subcutánea, con rango de 7 a 99 mm, con 227 datos faltantes; tipo: doble
insulin_microiu-ml : Insulina sérica después de 2 horas de la administración de una prueba de tolerancia oral a la glucosa, con rango de 14 a 846 microU/mL y con 374 datos faltantes; tipo: doble
bmi : Índice de masa corporal, con un rango de 18.2 a 67.1 kg de peso por metro de altura al cuadrado, con 11 datos faltantes; tipo: doble
pedigree : La función de pedigrí de diabetes indica la probabilidad de padecer diabetes en base a los antecedentes familiares, ponderada por la cercanía de su relación genética con el participante, tiene un rango de de 0.78 a 2.42 y ningún dato faltante; tipo: doble
age : Edad con rango de 21 a 81 años, con ningún dato faltante; tipo: doble
diabetes_5y : Variable de resultado, diagnóstico de diabetes en los siguientes 5 años, variable dicotómica: positivo (pos) o negativo (neg), con ningún dato faltante; tipo: factor
Las bases de datos no son del todo perfectas, existen multiples errores, por ejemplo, al insertar los datos de manera computacional pueden ocurrir sobrevistos y equivocaciones que terminan en bases de datos con valores incorrectos o inapropiados; además existe el riesgo de dadas de baja de pacientes en ensayos clínicos ocasionando datos perdidos e imposibles de conseguir de nuevo. Por lo cual, en algunos casos se recomienda trabajar solo con los datos que no excluyan información. Los pacientes que no cuenten con su infomación completa, serán omitidos como se muestra a continuación.
## [1] 652
La función pairs.panels() del paquete {psych} también se puede usar para crear un diagrama de dispersión de matrices, con diagramas de dispersión bivariados debajo de la diagonal, histogramas en la diagonal y la correlación de Pearson sobre la diagonal.
library(psych)
pairs.panels(diabetes,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE # show correlation ellipses
)Interpretación: La correlación más alta entre las variables es de 0.65 (casi moredada) y se encuentra entre el espesor del tricep y índice de masa corporal, lo cual tiene sentido ya que entre más masa corporal se tendrá un tricep con mayor volumen. La segunda correlación más alta es de 0.58 y es entre la concentración de glucosa en el plasma y la insulina sérica
Para obtener un panorama genral sobre la base de datos, se recomienda utilizar la función summary(), la cual genera un resumen de cada variable, es decir, calcula valores importantes tales como, mínimos, máximos, cuantiles e indica los valores faltantes dentro cada una de las variables de interés.
## pregnancy_num glucose_mg-dl dbp_mm-hg triceps_mm
## Min. : 0.000 Min. : 44.0 Min. : 24.00 Min. : 7.00
## 1st Qu.: 1.000 1st Qu.: 99.0 1st Qu.: 64.00 1st Qu.:22.00
## Median : 3.000 Median :117.0 Median : 72.00 Median :29.00
## Mean : 3.845 Mean :121.7 Mean : 72.41 Mean :29.15
## 3rd Qu.: 6.000 3rd Qu.:141.0 3rd Qu.: 80.00 3rd Qu.:36.00
## Max. :17.000 Max. :199.0 Max. :122.00 Max. :99.00
## NA's :5 NA's :35 NA's :227
## insulin_microiu-ml bmi pedigree age
## Min. : 14.00 Min. :18.20 Min. :0.0780 Min. :21.00
## 1st Qu.: 76.25 1st Qu.:27.50 1st Qu.:0.2437 1st Qu.:24.00
## Median :125.00 Median :32.30 Median :0.3725 Median :29.00
## Mean :155.55 Mean :32.46 Mean :0.4719 Mean :33.24
## 3rd Qu.:190.00 3rd Qu.:36.60 3rd Qu.:0.6262 3rd Qu.:41.00
## Max. :846.00 Max. :67.10 Max. :2.4200 Max. :81.00
## NA's :374 NA's :11
## diabetes_5y
## neg:500
## pos:268
##
##
##
##
##
Una de las formas básicas para generar un histograma, es utiliza la función hist(), dentro de la cual se necesita declarar los valores a graficar, en este caso será la cantidad de glucosa en (mg/dl), y asignar el titulo del gráfico y los ejes.
# Histograma de las mediciones de glucosa
hist(datos$glucose, main = "Histograma de Glucosa", xlab = "Glucosa (mg/dL)", col="skyblue")Ahora, para visualizar un gráfico de dispersión, una función básica es plot(), la cual requiere primeramente dos argumentos: valores para x y valores para y, a partir de allí, se añade el diseño como el titulo general, titulo de ejes, colores, etc.
# Diagrama de dispersión de glucosa vs insulina
plot(datos$glucose, datos$insulin, main = "Diagrama de dispersión de glucosa vs insulina", xlab = "Glucosa (mg/dL)", ylab = "Insulina (mu U/ml)", col=blues9)Una manera más avanzada y nueva de generar gráficos es mediante la paquetería {ggplot2}, la cual incluye ciertas funciones que dan la posibilidad de ser más especificos en las instrucciones y darle un mejor diseño a las gráficas.
Para instalar el paquete desde el CRAN, basta con escribir install.packages(“ggplot2”), después se carga la librería como se muestra a continuación:
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
Para generar cualquier tipo de gráfico se utilizará primeramente la función ggplot() dentro de la cual se declara la base de la cual se obtendrán los datos, y después dentro de la misma función se utiliza aes() en la cual se especifican los valores para los ejes e incluso especificar si se quieren agrupar los datos.
Agregando la función geom_density() se indica que se trata de un gráfico de dispersión y con el argumento alpha se indica la transparencia de los colores que estarán debajo de la curva.
Asi mismo, con la función ggtitle() se agrega el titulo general para el gráfico.
En este caso se desea generar un gráfico de densidad de la edad, según el diagnóstico de diabetes después de 5 años (pos o neg).
# Gráfico de densidad para la edad
ggplot(datos, aes(x = age, fill = diabetes_5y)) +
geom_density(alpha = 0.5) +
ggtitle("Distribución de edad agrupada en estado de diabetes después de 5 años")Para el caso siguiente se desea generar un gráfico de barras de las mediciones del índice de masa corporal, por lo cual se utilizará la función geom_bar() y además también se declaran los titulos de cada uno de los ejes mediante las funciones xlab() y ylab().
# Gráfico de barras para la variable "bmi"
ggplot(datos, aes(x = bmi)) +
geom_bar() +
ggtitle("Distribución de índice de masa corporal") +
xlab("Índice de masa corporal") +
ylab("Número de pacientes")Después para generar un disgrama de disperción un poco más sofisticado a comparación del anteriormente realizado, se puede utilizar la función geom_point() y además usar geom_smooth() la cual usa distintos métodos para estimar la media condicionada (curva de regresión) de una variable por otra, incluyendo el método de mínimos cuadrados.
ggplot(data = datos) +
geom_point(aes(x = datos$`glucose_mg-dl`, y = bmi),
col = 'darkblue',
size = 3,
alpha = 1/5) +
geom_smooth(aes(x = datos$`glucose_mg-dl`, y = bmi), method = 'lm') + # Opción por defecto
xlab("Glucosa") +
ylab("Índice de masa corporal")Más información se encuentra en Higgins (2023)