Rubén Moreno Ortega Adrián Orive Rodríguez Álvaro Carbonell Pastor
La prevalencia global de patologías neurodegenerativas como Alzheimer y Parkinson representa uno de los principales retos en biomedicina contemporánea. Diversos estudios epidemiológicos y moleculares han demostrado que ambos trastornos tienen una etiología multifactorial, en la que interactúan componentes genéticos, epigenéticos y ambientales.
Desde los primeros GWAS se han identificado variantes genéticas de riesgo para el alzheimer y para parkinson. Estas variantes no solo modulan la susceptibilidad, sino también la progresión, la edad de inicio y las manifestaciones clínicas de la enfermedad. Sin embargo, la penetrancia de estos alelos es incompleta, lo que sugiere la intervención de factores externos.
Entre los factores ambientales, la exposición crónica a metales pesados como plomo (Pb) y mercurio (Hg) ha cobrado relevancia. Estos elementos participan en mecanismos reconocidos de neurotoxicidad: estrés oxidativo, disfunción mitocondrial, agregación proteica y alteración de los sistemas de reparación celular.
En este informe, exploramos la relación entre la exposición a metales pesados, específicamente plomo y mercurio, y el riesgo genético asociado con enfermedades neurodegenerativas como el Alzheimer y el Parkinson. Utilizando datos de biomonitorización y estadísticas de mortalidad, analizamos cómo estos factores pueden influir en la incidencia de estas enfermedades en diferentes países.
La metodología seguida en este estudio incluye la recopilación y filtrado de datos relevantes, la integración de diferentes fuentes de información y el análisis estadístico para identificar posibles correlaciones entre la exposición a metales pesados y su incidencia en las enfermedades del Alzheimer y Parkinson.
# Descargar datos de Europa
europa <- ne_countries(continent = "Europe", scale = "medium", returnclass = "sf")
paises_estudio <- c("Germany", "Spain", "Belgium", "Czechia", "Norway", "Slovenia")
# Añadir columna para destacar países
europa <- europa %>%
mutate(Estudio = ifelse(name %in% paises_estudio, "Estudio", "Otros"))
ggplot(europa) +
geom_sf(aes(fill = Estudio), color = "gray30", linewidth = 0.2) +
scale_fill_manual(values = c("Estudio" = "#ED7D31", "Otros" = "lightgray")) +
coord_sf(
crs = st_crs(3035),
xlim = c(2500000, 6000000),
ylim = c(1500000, 5500000)
) +
# ------------------------------
labs(title = "Países del estudio sobre metales y genética en Europa",
fill = "Participación") +
theme_void()
temporal_plot <- ggplot(df, aes(x = year, y = value, color = country, group = country)) +
geom_line(linewidth = 1) +
geom_point(size = 3) +
facet_wrap(~ metal, scales = "free_y") +
labs(
title = "Tendencia Temporal de la Exposición a Metales Pesados (P50) por País",
y = "Nivel del Metal (P50) en µg/L",
x = "Año",
color = "País"
) +
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"))
temporal_plot
Como podemos observar en los gráficos que se observan en la parte
superior, hay casos distintos para los metales que estamos
analizando.
En el caso del Plomo (Pb), hay una clara disminución de la concentración de plomo en sangre (P50) en todos los paises con múltiples mediciones a lo largo de los años.Esto es un reflejo del éxito de las políticas de salud pública y las regulaciones ambientales. Para nuestro estudio este descenso es el principal factor de confusión que explica la relación negativa y contraintuitiva en los gráficos de dispersión. Vemos como la exposición al Plomo no se ha mantenido estable, sino que ha caido drásticamente debido a factores externos
Si hablamos del Mercurio, podemos comprobar que la exposición del Mercurio es mucho más estable a lo largo del tiempo, con una disminución más gradual y ligera en países como la República Checa y Alemania. La falta de una caída dramática sugiere que los factores regulatorios operan de manera diferente.
Esta pregunta resume un análisis exploratorio sobre la relación entre las concentraciones poblacionales de mercurio (Hg) y plomo (Pb) en sangre (percentil P50) y el número estimado de muertes por Alzheimer por país y año.
Nota importante: la variable numero_muertes no es un
conteo exacto sino una estimación (por eso tiene decimales). El valor
original suele disponer de un intervalo (límite inferior y superior);
aquí trabajamos con la media.
Vamos a ver esto mediante un gráfico de dispersión con línea de regresión, separado en dos gráficos (uno para Hg y otro para Pb). Cada gráfico mostrará el número de muertes en el eje Y y el nivel del metal en el eje X.
# 1. Separar los datos
df_pb <- filter(df, metal == "Pb")
df_hg <- filter(df, metal == "Hg")
# 2. Gráfico para Plomo (Pb)
plot_pb <- ggplot(df_pb, aes(x = value, y = numero_muertes,
label = country, year = year)) + # Añadimos info para el tooltip
geom_point(aes(color = country), size = 3) +
geom_smooth(method = "lm", color = "black", se = FALSE) +
labs(
title = "Correlación entre Plomo (Pb P50) y Muertes por Alzheimer",
y = "Número Estimado de Muertes",
x = "Nivel de Plomo (P50) en µg/L"
) +
theme_bw()
# 3. Gráfico para Mercurio (Hg)
plot_hg <- ggplot(df_hg, aes(x = value, y = numero_muertes,
label = country, year = year)) + # Añadimos info para el tooltip
geom_point(aes(color = country), size = 3) +
geom_smooth(method = "lm", color = "black", se = FALSE) +
labs(
title = "Correlación entre Mercurio (Hg P50) y Muertes por Alzheimer",
y = "Número Estimado de Muertes",
x = "Nivel de Mercurio (P50) en µg/L"
) +
theme_bw()
# 4. Imprimimos los gráficos con plotly
# ggplotly los convierte en interactivos
ggplotly(plot_pb)
ggplotly(plot_hg)
Si nos fijamos en la línea de regresión (línea negra), podemos ver una tendencia negativa. A medida que aumentan los niveles de plomo, las muertes por Alzheimer parecen disminuir.
Conclusión: Los datos parecen indicar una correlación negativa entre los niveles de plomo y las muertes por Alzheimer. Esto resulta contradictorio desde un punto de vista biológico, por lo que podemos deducir que hay otros factores (factores de confusión), los cuales no tenemos en cuenta en nuestro estudio, que están afectando de manera mucho más significativa al resultado.
En este caso, la línea de regresión negra muestra una ligera pendiente positiva. Sin embargo, los puntos se encuentran muy dispersos y no siguen un patrón claro.
Conclusión: Los datos parecen indicar que no hay una relación clara o estadísticamente significativa entre el número de muertes por Alzheimer y los niveles de mercurio reportados.
# 1. Separar los datos
df_pb <- filter(df, metal == "Pb")
df_hg <- filter(df, metal == "Hg")
# 2. Correr los modelos lineales
modelo_pb <- lm(numero_muertes ~ value, data = df_pb)
modelo_hg <- lm(numero_muertes ~ value, data = df_hg)
# 3. Presentar los resultados en una tabla limpia
tabla_pb <- tidy(modelo_pb)
tabla_hg <- tidy(modelo_hg)
# Usamos kable() para tablas bonitas en R Markdown
knitr::kable(tabla_pb, digits = 3, caption = "Modelo Lineal: Muertes por Alzheimer ~ Nivel de Plomo (Pb)")
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 74260.043 | 11314.167 | 6.563 | 0.000 |
| value | -2231.546 | 644.704 | -3.461 | 0.002 |
knitr::kable(tabla_hg, digits = 3, caption = "Modelo Lineal: Muertes por Alzheimer ~ Nivel de Mercurio (Hg)")
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 23311.106 | 10441.38 | 2.233 | 0.052 |
| value | 334.402 | 4882.80 | 0.068 | 0.947 |
El modelo muestra que el intercepto (74260.043) representa el número estimado de muertes por Alzheimer cuando el nivel de plomo es cero. El coeficiente del plomo (-2231.546) indica que, por cada unidad adicional de este metal, las muertes por Alzheimer disminuyen en promedio 2231.5 unidades. Dado que el p-valor (0.002) es menor a 0.05, la relación resulta estadísticamente significativa. Sin embargo, el signo negativo del coeficiente refleja una relación inversa, lo cual es contraintuitivo desde un punto de vista biológico.
El modelo indica que el intercepto (23311.106) representa el número estimado de muertes por Alzheimer cuando el nivel de mercurio es cero. El coeficiente del mercurio (334.402) sugiere un leve aumento en las muertes por Alzheimer con mayores niveles de este metal; sin embargo, el p-valor (0.947) muestra que la relación no es estadísticamente significativa. Por tanto, no se puede afirmar que el mercurio tenga un efecto real sobre las muertes por Alzheimer en esta muestra.
Ambos analisis concuerdan con lo visto en los graficos anteriores.
El segundo paso, es probar si existe algún tipo de correlación entre la evolución temporal de la exposición y el número de muertes por Alzheimer. Para ello, vamos a crear un gráfico de dispersión similar a los anteriores, pero en este caso, vamos a conectar los puntos de cada país con flechas que indiquen la dirección temporal (de años más antiguos a más recientes). Esto nos permitirá visualizar cómo ha cambiado la relación entre la exposición y las muertes a lo largo del tiempo. # Ajustamos el tamaño de la figura
# Filtrar datos: nos quedamos solo con plomo (Pb) y países con más de un año de información
df_pb_multi_year_alz <- df %>%
filter(metal == "Pb") %>%
group_by(country) %>%
filter(n() > 1) %>%
ungroup()
# Escalar las muertes para poder compararlas en la misma gráfica con los niveles de plomo
df_scaled_alz <- df_pb_multi_year_alz %>%
group_by(country) %>%
mutate(
scaled_muertes = scales::rescale(numero_muertes, to = range(value, na.rm = TRUE)),
actual_muertes = numero_muertes
) %>%
ungroup()
# Crear el gráfico con ggplot
p_combined_trends_alz <- ggplot(df_scaled_alz, aes(x = year, group = country)) +
# Línea y puntos para plomo (Pb)
geom_line(aes(y = value, color = country, linetype = "Plomo (Pb)"), size = 1) +
geom_point(aes(y = value, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Plomo (P50):", round(value, 2), "µg/L")),
size = 3) +
# Línea y puntos para muertes por Alzheimer
geom_line(aes(y = scaled_muertes, color = country, linetype = "Muertes Alzheimer (Escalado)"), size = 1, alpha = 0.7) +
geom_point(aes(y = scaled_muertes, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Muertes Alzheimer:", round(actual_muertes, 0), "<br>Muertes (Escalado):", round(scaled_muertes, 2))),
size = 3, alpha = 0.7) +
# Panel separado para cada país
facet_wrap(~ country, scales = "free_y", ncol = 2) +
scale_linetype_manual(name = "Métrica", values = c("Plomo (Pb)" = "solid", "Muertes Alzheimer (Escalado)" = "dashed")) +
labs(
title = "Evolución Temporal de Plomo (P50) y Muertes por Alzheimer",
subtitle = "Los datos de muertes por Alzheimer se han escalado para visualización conjunta. Observe las tendencias opuestas.",
y = "Nivel (µg/L) / Muertes (Escalado)",
x = "Año",
color = "País"
) +
# Tema visual
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"),
strip.text = element_text(face = "bold"))
# Convertir el gráfico en interactivo con plotly
ggplotly(p_combined_trends_alz, tooltip = "text")
En el gráfico anterior podemos acabar de concluir lo que se puede intuir en el anterior y demostrando que lo que se menciona en gráficos superiores esta en lo correcto. Debido a que el Plomo disminuye mientras que las muertes aumentan simultáneamente a lo largo del tiempo, y como se mencionaba anteriormente se establece una Correlación Negativa (a mayor cantidad de plomo, menor número de muertes), lo cuál es lo opuesto a lo esperado cuando estamos hablando de una neurotoxina que puede resultar perjudicial en otros muchos aspectos. El patrón que hemos observado es crucial porque demuestra que la correlación entre estas dos variables y la mortalidad no es una simple relación causal biológica, sino un mero artefacto estadístico impulsado por el factor de confusión demográfico que enmascara cualquier posible efecto de los metales # Ajustamos el tamaño de la figura
# Filtrar datos: nos quedamos solo con Mercurio (Hg) y países con más de un año de información
df_hg_multi_year_alz <- df %>%
filter(metal == "Hg") %>%
group_by(country) %>%
filter(n() > 1) %>%
ungroup()
# Escalar las muertes para poder compararlas en la misma gráfica con los niveles de mercurio
df_scaled_hg_alz <- df_hg_multi_year_alz %>%
group_by(country) %>%
mutate(
scaled_muertes = scales::rescale(numero_muertes, to = range(value, na.rm = TRUE)),
actual_muertes = numero_muertes
) %>%
ungroup()
# Crear el gráfico con ggplot
p_combined_trends_hg_alz <- ggplot(df_scaled_hg_alz, aes(x = year, group = country)) +
geom_line(aes(y = value, color = country, linetype = "Mercurio (Hg)"), size = 1) +
geom_point(aes(y = value, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Mercurio (P50):", round(value, 2), "µg/L")),
size = 3) +
geom_line(aes(y = scaled_muertes, color = country, linetype = "Muertes Alzheimer (Escalado)"), size = 1, alpha = 0.7) +
geom_point(aes(y = scaled_muertes, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Muertes Alzheimer:", round(actual_muertes, 0), "<br>Muertes (Escalado):", round(scaled_muertes, 2))),
size = 3, alpha = 0.7) +
facet_wrap(~ country, scales = "free_y", ncol = 2) +
scale_linetype_manual(name = "Métrica", values = c("Mercurio (Hg)" = "solid", "Muertes Alzheimer (Escalado)" = "dashed")) +
labs(
title = "Evolución Temporal de Mercurio (P50) y Muertes por Alzheimer",
subtitle = "Los datos de muertes por Alzheimer se han escalado para visualización conjunta. El Mercurio muestra mayor estabilidad que el Plomo.",
y = "Nivel (µg/L) / Muertes (Escalado)",
x = "Año",
color = "País"
) +
# Tema visual
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"),
strip.text = element_text(face = "bold"))
# Convertir el gráfico en interactivo con plotly
ggplotly(p_combined_trends_hg_alz, tooltip = "text")
El gráfico de evolución temporal conjunta del Mercurio y la mortalidad por Alzheimer confirma la falta de significancia estadística que ya se había observado en los modelos iniciales.
Dado que la exposición al Mercurio es estable y las muertes por Alzheimer aumentan, no se produce el fenómeno de las “tendencias opuestas” que generó el sesgo en el caso del plomo. En consecuencia, el análisis temporal corrobora la conclusión inicial: no existe una correlación clara ni estadísticamente significativa entre los niveles de Mercurio y los cambios en la mortalidad por Alzheimer en esta muestra agregada. El Hg no actúa como un impulsor de la correlación espuria, sino que simplemente demuestra la ausencia de una relación detectable a este nivel de análisis.
Una de las áreas clave dentro de la investigación de enfermedades como el Alzheimer y el Parkinson es la interacciçon entre el ambiente y la genética. Ya sabemos que Plomo y Mercurio son neurotóxicos reconocidos, saber si los genes que se conoce que interactuan con estos metales coinciden con los genes implicados en estas enfermedades por los estudios GWAS (genes cuya variación aumenta el riesgo).
Primeramente, vamos a identificar los genes que interactúan con el Plomo y con el Mercurio y a su vez los vamos a extraer y unificar estos genes que interactuan con los metales, según si estan asociados con genes en estudios GWAS
# Función para limpiar la lista de genes:
limpiar_genes <- function(df) {
df %>%
separate_rows(mappedGenes, sep = ',') %>%
mutate(mappedGenes = str_trim(mappedGenes)) %>%
filter(!str_detect(mappedGenes, regex("NR|NA|-|^$|nan", ignore_case = TRUE))) %>%
pull(mappedGenes) %>%
unique()
}
# Leer los archivos con datos de metales pesados y genes asociados a Alzheimer
df_metales <- read_csv("input/metales_pesados.csv")
df_alzheimer <- read_csv("input/genesAlzheimerFiltrado.csv")
# Palabras clave para identificar plomo y mercurio
keywords_metales <- c('lead', 'Pb', 'mercury', 'mercuric', 'Hg', 'plomo', 'mercurio')
# Seleccionar genes relacionados con Pb/Hg en el dataset de metales
set_metales_pbhg <- df_metales %>%
filter(str_detect(ChemicalName, regex(paste(keywords_metales, collapse = '|'), ignore_case = TRUE))) %>%
pull(GeneSymbol) %>%
unique() %>%
na.omit() %>%
as.character()
# Limpiar y obtener genes asociados a Alzheimer desde el dataset
set_alzheimer_gwas <- limpiar_genes(df_alzheimer)
# Calcular tamaños para cada sección
interseccion_size <- length(intersect(set_metales_pbhg, set_alzheimer_gwas))
solo_pbhg_size <- length(set_metales_pbhg) - interseccion_size
solo_alzheimer_size <- length(set_alzheimer_gwas) - interseccion_size
# Crear un dataframe para graficar con ggplot2
df_plot_data <- tibble(
Categoria = factor(c("Genes solo con Pb/Hg\n(Neurotoxicidad)",
"Genes solo con Alzheimer\n(GWAS)",
"Intersección: Pb/Hg y Alzheimer"),
levels = c("Genes solo con Pb/Hg\n(Neurotoxicidad)",
"Genes solo con Alzheimer\n(GWAS)",
"Intersección: Pb/Hg y Alzheimer")), # Para ordenar las barras
Cantidad = c(solo_pbhg_size, solo_alzheimer_size, interseccion_size)
)
# Generar grafico de barras
p <- ggplot(df_plot_data, aes(x = Categoria, y = Cantidad, fill = Categoria)) +
geom_bar(stat = "identity", width = 0.7) + # Ajusta el ancho de las barras
geom_text(aes(label = Cantidad), vjust = -0.5, size = 5, fontface = "bold") + # Etiquetas de valor
scale_fill_manual(values = c("#0072B2", "#D55E00", "#CC79A7")) + # Colores consistentes y uno para intersección
labs(
title = "Genes Relacionados con Metales Pesados (Pb/Hg) y Alzheimer (GWAS)",
subtitle = "Distribución de Genes por Tipo de Asociación",
x = "", # No necesitamos etiqueta en el eje X para la categoría
y = "Número de Genes"
) +
theme_bw() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
plot.subtitle = element_text(hjust = 0.5, size = 12),
axis.text.x = element_text(angle = 15, hjust = 1, size = 11, face = "bold"),
axis.text.y = element_text(size = 10),
axis.title.y = element_text(size = 12, face = "bold"),
legend.position = "none"
) +
ylim(0, max(df_plot_data$Cantidad) * 1.1)
# Mostrar el gráfico
print(p)
El gráfico superior muestra la distribución de los genes implicados en la neurotoxicidad por metales pesados (Plomo y Mercurio) y su correlación con los genes de riesgo genético de la enfermedad de Alzheimer (EA) identificados mediante estudios GWAS. Los resultados revelan una fuerte y significativa superposición:
·Genes solo con Pb/Hg: 7246 genes interactúan exclusivamente con estos metales pesados, destacando un amplio espectro de dianas moleculares sensibles a la neurotoxicidad ambiental.
· Genes solo con Alzheimer (GWAS): 2186 genes están implicados en el riesgo genético de la EA sin que se les haya documentado una interacción conocida con Pb/Hg en la base de datos utilizada.
· Genes de Intersección : Se identificaron 1069 genes que demuestran una doble vulnerabilidad: no solo están asociados a la susceptibilidad genética de la EA (GWAS), sino que también se conoce que interactúan directamente con el Plomo o el Mercurio.
La intersección de 1069 genes revelada en el gráfico es un hallazgo clave, ya que indica una doble vulnerabilidad en el desarrollo del Alzheimer. Esta coincidencia sugiere que los genes de riesgo identificados por GWAS también son dianas moleculares de neurotóxicos como el Plomo y el Mercurio. Por lo tanto, la exposición ambiental tiene el potencial de modular o potenciar la susceptibilidad genética, dando la posibilidad de que el estrés tóxico active o intensifique las mismas vías biológicas defectuosas asociadas al riesgo genético, contribuyendo así a la patogénesis de la enfermedad.
Este análisis busca identificar la superposición molecular exacta: aquellos genes que no solo tienen una asociación genética conocida con la enfermedad, sino que también son dianas moleculares documentadas de Pb o Hg. Esta coincidencia define una doble vulnerabilidad, lo que sugiere que la exposición ambiental podría intensificar las mismas vías biológicas defectuosas asociadas al riesgo genético.
A continuación, la siguiente tabla resume la magnitud de esta doble vulnerabilidad al cuantificar los genes de riesgo únicos que cumplen ambas condiciones para cada patología.
# Cargar el script que prepara los datos combinados
source("filtradoDatos/alzheimerMetalesGenes.R")
# Renombrar el resultado del script a 'df_alzheimer' para trabajar con él
df_alzheimer <- df_combinado
# Filtrar solo los genes considerados de riesgo (OR > 1)
df_nocivos_alz <- df_alzheimer %>%
filter(orValue > 1) %>%
# Contar la cantidad de genes de riesgo únicos afectados por cada químico
group_by(ChemicalName) %>%
summarise(
Genes_Afectados = n_distinct(mappedGenes),
.groups = 'drop'
) %>%
# Ordenar de mayor a menor número de genes afectados
arrange(desc(Genes_Afectados))
# Crear gráfico de barras con ggplot
plot_nocivos_alz <- ggplot(df_nocivos_alz,
aes(x = reorder(ChemicalName, Genes_Afectados),
y = Genes_Afectados,
fill = Genes_Afectados)) +
geom_bar(stat = "identity", width = 0.7) +
geom_text(aes(label = Genes_Afectados), vjust = -0.5, size = 4) +
labs(
title = "Ranking de genes nocivos: Compuestos Tóxicos que Afectan a Genes de Riesgo (Alzheimer)",
subtitle = "Número de Genes de Riesgo (OR > 1) con Interacción Demostrada por Compuesto Químico",
x = "Compuesto Químico (Hg/Pb)",
y = "Número de Genes de Riesgo Afectados"
) +
scale_fill_gradient(low = "#CCEEFF", high = "#CC3333") + # Rojo para alto impacto
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, face = "bold"),
plot.title = element_text(face = "bold")
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
guides(fill = "none") # Quitar leyenda de color
# 4. Mostrar el gráfico
print(plot_nocivos_alz)
A partir de este gráfico podemos realizar un análisis del ranking de genes nocivos. El análisis de impacto sistémico revela una clara jerarquía de toxicidad en la amplificación del riesgo genético del Alzheimer. De los 460 genes con Odds Ratio válido identificados en el conjunto de datos, se observa que los derivados orgánicos del mercurio son los principales agentes de riesgo.
· 1.-Villano Principal (Mercurio Orgánico): El compuesto con mayor impacto es el Methylmercuric Chloride, que interactúa con 179 genes de riesgo únicos, lo que confirma su amplio espectro de acción sobre la susceptibilidad genética de la enfermedad.
· 2.-Segundo Impacto Orgánico: Le sigue de cerca el Phenylmercuric Acetate, con 155 genes de riesgo afectados. El impacto combinado de estos dos derivados orgánicos del mercurio subraya que la forma química del contaminante es un factor determinante en la amplificación del riesgo.
· 3.-Riesgo Amplio del Plomo: Aunque es superado por los derivados orgánicos del mercurio, el Lead (Plomo) en su forma inorgánica sigue siendo un agente sistémico de alto riesgo, afectando a 105 genes de riesgo únicos.
En conclusión, el Ranking de genes nocivos establece una jerarquía donde los derivados de Mercurio Orgánico representan la mayor amenaza en términos de amplitud de genes de riesgo afectados, informando nuestra hipótesis de que estos compuestos son los principales impulsores de la sinergia tóxica.
# Leer los datos de interacciones entre metales y genes relacionados con Alzheimer
df <- read.csv("results/Analisis_Genes_Metales_Alzheimer_SoloOdds.csv", stringsAsFactors = FALSE)
# Procesamiento de datos
df_clean <- df %>%
mutate(Metal_Effect = case_when(
grepl("increases\\^expression", InteractionActions) & !grepl("decreases\\^expression", InteractionActions) ~ "Metal Aumenta Expresión",
grepl("decreases\\^expression", InteractionActions) & !grepl("increases\\^expression", InteractionActions) ~ "Metal Disminuye Expresión",
TRUE ~ "Otro"
)) %>%
filter(Metal_Effect != "Otro") %>%
mutate(
LogOR = log2(orValue),
LogP = -log10(pValue),
Scenario = case_when(
orValue > 1 & Metal_Effect == "Metal Aumenta Expresión" ~ "AGRAVA RIESGO\n(Metal sube gen de riesgo)",
orValue < 1 & Metal_Effect == "Metal Aumenta Expresión" ~ "BENEFICIOSO\n(Metal sube gen protector)",
orValue > 1 & Metal_Effect == "Metal Disminuye Expresión" ~ "MITIGA RIESGO\n(Metal baja gen de riesgo)",
orValue < 1 & Metal_Effect == "Metal Disminuye Expresión" ~ "ROMPE PROTECCIÓN\n(Metal baja gen protector)"
),
hover_text = paste0(
"<b>Gen:</b> ", mappedGenes, "<br>",
"<b>Metal:</b> ", ChemicalName, "<br>",
"<b>Interacción:</b> ", Interaction, "<br>",
"<b>Odds Ratio (OR):</b> ", round(orValue, 3), "<br>",
"<b>P-value:</b> ", format(pValue, scientific = TRUE, digits = 3), "<br>",
"<b>Escenario:</b> ", Scenario
)
)
# 3. Crear el gráfico estático con ggplot
p <- ggplot(df_clean, aes(x = LogOR, y = LogP, color = Scenario, text = hover_text)) +
geom_point(alpha = 0.6, size = 2) +
geom_vline(xintercept = 0, linetype = "dashed", color = "gray40") +
facet_wrap(~Metal_Effect, nrow = 2, scales = "fixed") +
scale_color_manual(values = c(
"AGRAVA RIESGO\n(Metal sube gen de riesgo)" = "#D7191C",
"BENEFICIOSO\n(Metal sube gen protector)" = "#2C7BB6",
"MITIGA RIESGO\n(Metal baja gen de riesgo)" = "#ABD9E9",
"ROMPE PROTECCIÓN\n(Metal baja gen protector)" = "#FDAE61"
)) +
labs(
title = "Impacto de Metales en Genes de Alzheimer",
x = "Log2(Odds Ratio)",
y = "-Log10(P-value)",
color = "Interpretación"
) +
theme_minimal() +
theme(
legend.position = "bottom",
strip.text = element_text(size = 10, face = "bold")
)
# 4. Convertir el gráfico en interactivo con plotly
# 'tooltip = "text"' asegura que se muestre nuestro texto personalizado al pasar el ratón
ggplotly(p, tooltip = "text")
1. Sinergia Negativa: Exacerbación del Perfil de Riesgo (Gen de Riesgo + Aumento de Expresión) Aquí nos enfrentamos a una convergencia patogénica: el sujeto ya posee una carga genética desfavorable (OR > 1), y el metal actúa amplificando la señal de estos genes.
2. Disrupción de la Resiliencia: Bloqueo de la Neuroprotección (Gen Protector + Disminución de Expresión) Este mecanismo es fundamental para explicar la aparición de la enfermedad en individuos con una genética a priori favorable. El metal actúa anulando la ventaja biológica natural, silenciando la expresión de genes que deberían conferir resistencia (limpieza de amiloides, control inflamatorio). Básicamente, se trata de una pérdida de función exógena: el cerebro queda vulnerable no por falta de herramientas genéticas, sino porque el ambiente impide que estas se utilicen.
3. Antagonismo Compensatorio: Supresión de Vías Patogénicas (Gen de Riesgo + Disminución de Expresión) Observamos un fenómeno paradójico donde la exposición ambiental parece contrarrestar molecularmente el riesgo genético al reducir la presencia de un gen patogénico.
4. Respuesta Adaptativa: Potenciación de Defensas (Gen Protector + Aumento de Expresión) En estos casos, la presencia del metal desencadena una sobreexpresión de genes protectores.
Viendo todas estas situaciones y observando que en la grafica no se aprecia un patron significativo que nos indique que la exposición a estos metales vaya a aumentar el riesgo de desarrollar alzheimer, podemos concluir que no hay evidencia suficiente para afirmar que la exposición a Plomo o Mercurio modifique de manera significativa el riesgo genético de desarrollar Alzheimer.
Esta pregunta resume un análisis exploratorio sobre la relación entre las concentraciones poblacionales de mercurio (Hg) y plomo (Pb) en sangre (percentil P50) y el número estimado de muertes por Parkinson por país y año.
Nota importante: la variable numero_muertes no es un
conteo exacto sino una estimación (por eso tiene decimales). El valor
original suele disponer de un intervalo (límite inferior y superior);
aquí trabajamos con la media.
Vamos a ver esto mediante un gráfico de dispersión con línea de regresión, separado en dos gráficos (uno para Hg y otro para Pb). Cada gráfico mostrará el número de muertes en el eje Y y el nivel del metal en el eje X.
# Separar los datos en dos grupos: uno para Plomo (Pb) y otro para Mercurio (Hg)
df_pb2 <- filter(df2, metal == "Pb")
df_hg2 <- filter(df2, metal == "Hg")
# 2. Crear el gráfico para Plomo (Pb)
plot_pb2 <- ggplot(df_pb2, aes(x = value, y = numero_muertes,
label = country, year = year)) + # Info para tooltip
geom_point(aes(color = country), size = 3) +
geom_smooth(method = "lm", color = "black", se = FALSE) +
labs(
title = "Correlación entre Plomo (Pb P50) y Muertes por Parkinson",
y = "Número Estimado de Muertes",
x = "Nivel de Plomo (P50) en µg/L"
) +
theme_bw()
# Crear el gráfico para Mercurio (Hg)
plot_hg2 <- ggplot(df_hg2, aes(x = value, y = numero_muertes,
label = country, year = year)) + # Info para tooltip
geom_point(aes(color = country), size = 3) +
geom_smooth(method = "lm", color = "black", se = FALSE) +
labs(
title = "Correlación entre Mercurio (Hg P50) y Muertes por Parkinson",
y = "Número Estimado de Muertes",
x = "Nivel de Mercurio (P50) en µg/L"
) +
theme_bw()
# Convertir los gráficos en interactivos con plotly
ggplotly(plot_pb2)
ggplotly(plot_hg2)
Si nos fijamos en la línea de regresión (línea negra), podemos ver una tendencia negativa. A medida que aumentan los niveles de plomo, las muertes por Parkinson parecen disminuir.
Conclusión: Los datos parecen indicar una correlación negativa entre los niveles de plomo y las muertes por Parkinson. Esto resulta contradictorio desde un punto de vista biológico, por lo que podemos deducir que hay otros factores (factores de confusión), los cuales no tenemos en cuenta en nuestro estudio, que están afectando de manera mucho más significativa al resultado.
En este caso, la línea de regresión negra muestra una ligera pendiente positiva. Sin embargo, los puntos se encuentran muy dispersos y no siguen un patrón claro.
Conclusión: Los datos parecen indicar que no hay una relación clara o estadísticamente significativa entre el número de muertes por Parkinson y los niveles de mercurio reportados.
# Separar los datos en dos grupos: uno con Plomo (Pb) y otro con Mercurio (Hg)
df_pb_parkinson <- filter(df2, metal == "Pb")
df_hg_parkinson <- filter(df2, metal == "Hg")
# Ajustar modelos lineales simples:
modelo_pb2 <- lm(numero_muertes ~ value, data = df_pb_parkinson)
modelo_hg2 <- lm(numero_muertes ~ value, data = df_hg_parkinson)
# Convertir los resultados de los modelos en tablas ordenadas
tabla_pb2 <- tidy(modelo_pb2)
tabla_hg2 <- tidy(modelo_hg2)
# Mostrar las tablas con formato bonito usando kable()
knitr::kable(tabla_pb2, digits = 3, caption = "Modelo Lineal: Muertes por Parkinson ~ Nivel de Plomo (Pb)")
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 13868.262 | 2100.900 | 6.601 | 0.000 |
| value | -412.033 | 119.714 | -3.442 | 0.003 |
knitr::kable(tabla_hg2, digits = 3, caption = "Modelo Lineal: Muertes por Parkinson ~ Nivel de Mercurio (Hg)")
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 4620.02 | 2027.452 | 2.279 | 0.049 |
| value | 48.81 | 948.116 | 0.051 | 0.960 |
El modelo muestra que el intercepto (13868.262) representa el número estimado de muertes por Parkinson cuando el nivel de plomo es cero. El coeficiente del plomo (-412.033) indica que, por cada unidad adicional de este metal, las muertes por Parkinson disminuyen en promedio 412.033 unidades. Dado que el p-valor (0.003) es menor a 0.05, la relación resulta estadísticamente significativa. Sin embargo, el signo negativo del coeficiente refleja una relación inversa, lo cual es contraintuitivo desde un punto de vista biológico.
El modelo indica que el intercepto (4620.02) representa el número estimado de muertes por Parkinson cuando el nivel de mercurio es cero. El coeficiente del mercurio (48.81) sugiere un leve aumento en las muertes por Parkinson con mayores niveles de este metal; sin embargo, el p-valor (0.960) muestra que la relación no es estadísticamente significativa. Por tanto, no se puede afirmar que el mercurio tenga un efecto real sobre las muertes por Parkinson en esta muestra.
Ambos analisis concuerdan con lo visto en los graficos anteriores.
Este gráfico rastrea los cambios en la exposición a Plomo y las Muertes por Parkinson a lo largo del tiempo, buscando la correlación espuria.
# Usamos df2 para Parkinson
df_pb_multi_year_park <- df2 %>%
filter(metal == "Pb") %>%
group_by(country) %>%
filter(n() > 1) %>%
ungroup()
df_scaled_park <- df_pb_multi_year_park %>%
group_by(country) %>%
mutate(
# Rescalamos las muertes al rango de los valores de Pb para la visualización conjunta
scaled_muertes = scales::rescale(numero_muertes, to = range(value, na.rm = TRUE)),
actual_muertes = numero_muertes
) %>%
ungroup()
p_combined_trends_park <- ggplot(df_scaled_park, aes(x = year, group = country)) +
geom_line(aes(y = value, color = country, linetype = "Plomo (Pb)"), size = 1) +
geom_point(aes(y = value, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Plomo (P50):", round(value, 2), "µg/L")),
size = 3) +
geom_line(aes(y = scaled_muertes, color = country, linetype = "Muertes Parkinson (Escalado)"), size = 1, alpha = 0.7) +
geom_point(aes(y = scaled_muertes, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Muertes Parkinson:", round(actual_muertes, 0), "<br>Muertes (Escalado):", round(scaled_muertes, 2))),
size = 3, alpha = 0.7) +
facet_wrap(~ country, scales = "free_y", ncol = 2) +
scale_linetype_manual(name = "Métrica", values = c("Plomo (Pb)" = "solid", "Muertes Parkinson (Escalado)" = "dashed")) +
labs(
title = "Evolución Temporal de Plomo (P50) y Muertes por Parkinson",
subtitle = "Los datos de muertes por Parkinson se han escalado para visualización conjunta. El patrón de 'tendencias opuestas' se repite.",
y = "Nivel (µg/L) / Muertes (Escalado)",
x = "Año",
color = "País"
) +
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"),
strip.text = element_text(face = "bold"))
ggplotly(p_combined_trends_park, tooltip = "text")
Se evidencia una clara correlación negativa (tendencias opuestas): la concentración de Plomo en sangre disminuye drásticamente a lo largo del tiempo debido a las regulaciones de salud pública, mientras que las muertes por Parkinson (impulsadas por factores demográficos como el envejecimiento y la mejora diagnóstica) aumentan. Este patrón idéntico en ambas enfermedades neurodegenerativas demuestra que la correlación negativa no es una relación causal biológica, sino un artefacto estadístico impulsado por el factor de confusión demográfico (el tiempo/edad).
# Usamos df2 para Parkinson
df_hg_multi_year_park <- df2 %>%
filter(metal == "Hg") %>%
group_by(country) %>%
filter(n() > 1) %>%
ungroup()
df_scaled_hg_park <- df_hg_multi_year_park %>%
group_by(country) %>%
mutate(
# Rescalamos las muertes al rango de los valores de Hg
scaled_muertes = scales::rescale(numero_muertes, to = range(value, na.rm = TRUE)),
actual_muertes = numero_muertes
) %>%
ungroup()
p_combined_trends_hg_park <- ggplot(df_scaled_hg_park, aes(x = year, group = country)) +
geom_line(aes(y = value, color = country, linetype = "Mercurio (Hg)"), size = 1) +
geom_point(aes(y = value, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Mercurio (P50):", round(value, 2), "µg/L")),
size = 3) +
geom_line(aes(y = scaled_muertes, color = country, linetype = "Muertes Parkinson (Escalado)"), size = 1, alpha = 0.7) +
geom_point(aes(y = scaled_muertes, color = country,
text = paste("País:", country, "<br>Año:", year, "<br>Muertes Parkinson:", round(actual_muertes, 0), "<br>Muertes (Escalado):", round(scaled_muertes, 2))),
size = 3, alpha = 0.7) +
facet_wrap(~ country, scales = "free_y", ncol = 2) +
scale_linetype_manual(name = "Métrica", values = c("Mercurio (Hg)" = "solid", "Muertes Parkinson (Escalado)" = "dashed")) +
labs(
title = "Evolución Temporal de Mercurio (P50) y Muertes por Parkinson",
subtitle = "Los datos de muertes por Parkinson se han escalado para visualización conjunta. El Mercurio muestra mayor estabilidad que el Plomo.",
y = "Nivel (µg/L) / Muertes (Escalado)",
x = "Año",
color = "País"
) +
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"),
strip.text = element_text(face = "bold"))
ggplotly(p_combined_trends_hg_park, tooltip = "text")
El Mercurio, al ser más estable en el tiempo y no estar sujeto a una caída tan drástica como el Plomo, no produce el mismo sesgo estadístico. La falta de una relación clara en el gráfico de Mercurio corrobora la conclusión: la correlación entre metales y mortalidad a nivel poblacional está dominada por factores socioeconómicos y demográficos que enmascaran cualquier efecto biológico real.
Tras analizar la superposición gen-ambiente en el contexto de la enfermedad de Alzheimer, extenderemos ahora este análisis a la Enfermedad de Parkinson (EP). El Parkinson, al igual que el Alzheimer, es una patología neurodegenerativa compleja donde la interacción entre la genética y los factores ambientales es crítica.Dado que el Plomo y el Mercurio son neurotóxicos reconocidos que interactúan con una amplia gama de proteínas, es crucial determinar si los genes que se conoce que interactúan con estos metales coinciden con los genes específicos implicados en la susceptibilidad al Parkinson identificados por los estudios GWAS
En primer lugar, vamos a identificar los genes que interactúan con el Plomo y con el Mercurio, y a su vez, vamos a extraer y unificar estos genes que interactúan con los metales, según si están asociados con los genes en estudios GWAS para la Enfermedad de Parkinson.
# Funcion de limpieza de genes
# Separa genes que aparecen juntos en una celda y devuelve una lista única de genes en formato limpio.
limpiar_genes <- function(df) {
df %>%
separate_rows(mappedGenes, sep = ',') %>%
mutate(mappedGenes = str_trim(mappedGenes)) %>%
filter(!str_detect(mappedGenes, regex("NR|NA|-|^$|nan", ignore_case = TRUE))) %>%
pull(mappedGenes) %>%
unique() %>%
as.character()
}
# carga y procesamiento de datos
df_metales <- read_csv("input/metales_pesados.csv")
df_parkinson <- read_csv("input/genesParkinsonFiltrado.csv")
# Seleccionar genes que interactúan con Plomo (Pb) y Mercurio (Hg)
keywords_metales <- c('lead', 'Pb', 'mercury', 'mercuric', 'Hg', 'plomo', 'mercurio')
set_metales_pbhg <- df_metales %>%
filter(str_detect(ChemicalName, regex(paste(keywords_metales, collapse = '|'), ignore_case = TRUE))) %>%
pull(GeneSymbol) %>%
unique() %>%
na.omit() %>%
as.character()
# Obtener genes asociados a Parkinson usando la función de limpieza
set_parkinson_gwas <- limpiar_genes(df_parkinson)
# Calcular cuántos genes son exclusivos de Pb/Hg, exclusivos de Parkinson y cuántos están en ambos
interseccion_size <- length(intersect(set_metales_pbhg, set_parkinson_gwas))
solo_pbhg_size <- length(set_metales_pbhg) - interseccion_size
solo_parkinson_size <- length(set_parkinson_gwas) - interseccion_size
# La creación de esta variable es suprimida por results='hide'
df_plot_data <- tibble(
Categoria = factor(c("Genes solo con Pb/Hg\n(Neurotoxicidad)",
"Genes solo con Parkinson\n(GWAS)",
"Intersección: Pb/Hg y Parkinson"),
levels = c("Genes solo con Pb/Hg\n(Neurotoxicidad)",
"Genes solo con Parkinson\n(GWAS)",
"Intersección: Pb/Hg y Parkinson")),
Cantidad = c(solo_pbhg_size, solo_parkinson_size, interseccion_size)
)
# Crear el grafico de barras
p <- ggplot(df_plot_data, aes(x = Categoria, y = Cantidad, fill = Categoria)) +
geom_bar(stat = "identity", width = 0.7) +
geom_text(aes(label = Cantidad), vjust = -0.5, size = 5, fontface = "bold") +
scale_fill_manual(values = c("#0072B2", "#E69F00", "#CC79A7")) +
labs(
title = "Genes Relacionados con Metales Pesados (Pb/Hg) y Parkinson (GWAS)",
subtitle = "Distribución de Genes por Tipo de Asociación",
x = "",
y = "Número de Genes"
) +
theme_bw() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
plot.subtitle = element_text(hjust = 0.5, size = 12),
axis.text.x = element_text(angle = 45, hjust = 1, size = 11, face = "bold"),
axis.text.y = element_text(size = 10),
axis.title.y = element_text(size = 12, face = "bold"),
legend.position = "none"
) +
ylim(0, max(df_plot_data$Cantidad) * 1.1)
# Mostrar el grafico.
print(p)
El gráfico superior muestra la distribución de los genes implicados en la neurotoxicidad por metales pesados (Plomo y Mercurio) y su correlación con los genes de riesgo genético de la enfermedad de Parkinson (EP) identificados mediante estudios GWAS. Los resultados revelan una superposición significativa que se desglosa en:
· Genes solo con Pb/Hg: 8,141 genes interactúan exclusivamente con estos metales pesados, destacando un amplio espectro de dianas moleculares sensibles a la neurotoxicidad ambiental.
· Genes solo con Parkinson (GWAS): 292 genes están implicados en el riesgo genético de la EP sin que se les haya documentado una interacción conocida con Pb/Hg en la base de datos utilizada.
· Genes de Intersección: Se identificaron 174 genes que demuestran una doble vulnerabilidad: no solo están asociados a la susceptibilidad genética de la EP (GWAS), sino que también se conoce que interactúan directamente con el Plomo o el Mercurio.
La intersección de 174 genes entre las dianas de Plomo/Mercurio (Pb/Hg) y los genes de riesgo de Parkinson (GWAS) es un hallazgo esencial. Esta doble vulnerabilidad sugiere que la exposición a estos metales pesados tiene el potencial de modular o potenciar la susceptibilidad genética a la enfermedad. El estrés tóxico inducido por los metales podría activar o intensificar las mismas vías biológicas defectuosas asociadas al riesgo genético, dando la posibilidad de contribuir a la patogénesis y progresión del Parkinson.
Ahora vamos a extender el análisis de toxicidad gen-ambiente al contexto de la Enfermedad de Parkinson (EP). Al igual que en el Alzheimer, es crucial determinar si los genes que interactúan con el Plomo y el Mercurio coinciden con los genes específicos implicados en la susceptibilidad al Parkinson identificados por estudios GWAS.
#se ejecuta el script que prepara las interacciones de Parkinson y metales
source("filtradoDatos/parkinsonMetalesGenes.R")
## Proceso finalizado.
## Genes únicos con Odds Ratio válido: 82
## Interacciones encontradas: 390
## Archivo guardado como: results/Analisis_Genes_Metales_Parkinson_SoloOdds.csv
# Renombrar el resultado del script a 'df_parkinson' para trabajar con él
df_parkinson <- df_combinado
# Filtrar solo los genes considerados de riesgo (OR > 1)
df_nocivos_parkinson <- df_parkinson %>%
filter(orValue > 1) %>%
# Contar la cantidad de genes de riesgo únicos afectados por cada químico
group_by(ChemicalName) %>%
summarise(
Genes_Afectados = n_distinct(mappedGenes),
.groups = 'drop'
) %>%
# Ordenar de mayor a menor número de genes afectados
arrange(desc(Genes_Afectados))
# Crear gráfico de barras con ggplot
plot_nocivos_parkinson <- ggplot(df_nocivos_parkinson,
aes(x = reorder(ChemicalName, Genes_Afectados),
y = Genes_Afectados,
fill = Genes_Afectados)) +
geom_bar(stat = "identity", width = 0.7) +
geom_text(aes(label = Genes_Afectados), vjust = -0.5, size = 4) +
labs(
title = "Ranking de genes nocivos: Compuestos Tóxicos que Afectan a Genes de Riesgo (Parkinson)",
subtitle = "Número de Genes de Riesgo (OR > 1) con Interacción Demostrada por Compuesto Químico",
x = "Compuesto Químico (Hg/Pb)",
y = "Número de Genes de Riesgo Afectados"
) +
scale_fill_gradient(low = "#CCEEFF", high = "#CC3333") +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, face = "bold"),
plot.title = element_text(face = "bold")
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
guides(fill = "none")
# Mostrar el gráfico
print(plot_nocivos_parkinson)
El análisis del impacto sistémico para el Parkinson revela una jerarquía de toxicidad similar a la del Alzheimer, aunque con diferencias notables en la cantidad de genes afectados. De los 144 genes de riesgo válidos identificados, se concluye que:
· 1.- Villano Principal : El compuesto con mayor impacto es el Methylmercuric Chloride, que interactúa con 39 genes de riesgo únicos, destacando su amplio espectro de acción sobre la susceptibilidad genética del Parkinson.
· 2.-Riesgo Amplio: El Phenylmercuric Acetate también ejerce una amenaza significativa, con [36] genes.
En conclusión, el patrón de riesgo genético para el Parkinson también está dominado por los derivados orgánicos del mercurio, lo que sugiere un mecanismo de neurotoxicidad compartido con el Alzheimer en la fase de amplificación del riesgo.
# Leer los datos de interacciones entre metales y genes relacionados con Parkinson
df <- read.csv("results/Analisis_Genes_Metales_Parkinson_SoloOdds.csv", stringsAsFactors = FALSE)
# Procesamiento de datos
df_clean <- df %>%
mutate(Metal_Effect = case_when(
grepl("increases\\^expression", InteractionActions) & !grepl("decreases\\^expression", InteractionActions) ~ "Metal Aumenta Expresión",
grepl("decreases\\^expression", InteractionActions) & !grepl("increases\\^expression", InteractionActions) ~ "Metal Disminuye Expresión",
TRUE ~ "Otro"
)) %>%
filter(Metal_Effect != "Otro") %>%
mutate(
LogOR = log2(orValue),
LogP = -log10(pValue),
Scenario = case_when(
orValue > 1 & Metal_Effect == "Metal Aumenta Expresión" ~ "AGRAVA RIESGO\n(Metal sube gen de riesgo)",
orValue < 1 & Metal_Effect == "Metal Aumenta Expresión" ~ "BENEFICIOSO\n(Metal sube gen protector)",
orValue > 1 & Metal_Effect == "Metal Disminuye Expresión" ~ "MITIGA RIESGO\n(Metal baja gen de riesgo)",
orValue < 1 & Metal_Effect == "Metal Disminuye Expresión" ~ "ROMPE PROTECCIÓN\n(Metal baja gen protector)"
),
hover_text = paste0(
"<b>Gen:</b> ", mappedGenes, "<br>",
"<b>Metal:</b> ", ChemicalName, "<br>",
"<b>Interacción:</b> ", Interaction, "<br>",
"<b>Odds Ratio (OR):</b> ", round(orValue, 3), "<br>",
"<b>P-value:</b> ", format(pValue, scientific = TRUE, digits = 3), "<br>",
"<b>Escenario:</b> ", Scenario
)
)
# Crear el gráfico estático con ggplot
p <- ggplot(df_clean, aes(x = LogOR, y = LogP, color = Scenario, text = hover_text)) +
geom_point(alpha = 0.6, size = 2) +
geom_vline(xintercept = 0, linetype = "dashed", color = "gray40") +
facet_wrap(~Metal_Effect, nrow = 2, scales = "fixed") +
scale_color_manual(values = c(
"AGRAVA RIESGO\n(Metal sube gen de riesgo)" = "#D7191C",
"BENEFICIOSO\n(Metal sube gen protector)" = "#2C7BB6",
"MITIGA RIESGO\n(Metal baja gen de riesgo)" = "#ABD9E9",
"ROMPE PROTECCIÓN\n(Metal baja gen protector)" = "#FDAE61"
)) +
labs(
title = "Impacto de Metales en Genes de Parkinson",
x = "Log2(Odds Ratio)",
y = "-Log10(P-value)",
color = "Interpretación"
) +
theme_minimal() +
theme(
legend.position = "bottom",
strip.text = element_text(size = 10, face = "bold")
)
# Convertir el gráfico en interactivo con plotly
# 'tooltip = "text"' asegura que se muestre nuestro texto personalizado al pasar el ratón
ggplotly(p, tooltip = "text")
Vamos a tener los mismos casos que teniamos en el alzheimer:
Sinergia Negativa: Exacerbación del Perfil de Riesgo (Gen de Riesgo + Aumento de Expresión).
Disrupción de la Resiliencia: Bloqueo de la Neuroprotección (Gen Protector + Disminución de Expresión).
Antagonismo Compensatorio: Supresión de Vías Patogénicas (Gen de Riesgo + Disminución de Expresión).
Respuesta Adaptativa: Potenciación de Defensas (Gen Protector + Aumento de Expresión).
En este caso vamos a apreciar diferencias con el alzheimer por los datos que tenemos, vamos a tener 2 situaciones principalmente, los que agravan el riesgo y los que mitigan el riesgo, estos resultados vienen condicionados por la falta de genes con un odds ratio menor que uno, osea apenas hay genes protectores en el parkinson comparado con el alzheimer, por lo que no podemos observar tantos casos de mitigación o protección como en el alzheimer.
Este estudio tiene varias limitaciones: los datos vienen de distintos lugares y años, y no cubren todos los países de la misma manera. Además, son cifras generales de población, no información de personas individuales ni análisis detallados de laboratorio. Por eso no es un trabajo completo y los resultados deben tomarse con cuidado.
Aun así, vemos algunas cosas claras: los niveles de plomo (Pb) en la población han bajado con el tiempo, mientras que los de mercurio (Hg) se mantienen más estables. Sin embargo, las muertes por Alzheimer y Parkinson no han disminuido de la misma forma. Incluso aparecen relaciones raras, como que más plomo parece estar ligado a menos muertes, pero eso seguramente se debe a errores en los datos, diferencias de fechas o factores externos, y no a que el plomo proteja.
Cuando miramos más de cerca los genes, encontramos que muchos de los que se relacionan con el plomo y el mercurio también están ligados al Alzheimer y al Parkinson(aproximadamente 1.069 para Alzheimer y 174 para Parkinson en nuestros datos). En especial, los compuestos orgánicos del mercurio afectan a varios genes de riesgo. Pero, como los datos son generales y mezclan diferentes tipos de información, no podemos decir que haya una relación directa de causa y efecto.
Recomendamos hacer estudios más completos, siguiendo a personas a lo largo del tiempo, con análisis individuales y genéticos. También es importante comprobar en el laboratorio los compuestos dañinos que hemos identificado y seguir reduciendo la exposición de la población al plomo y al mercurio.
En resumen: aunque este estudio está limitado por los datos disponibles, aporta pistas útiles para la investigación y la prevención. Pero no demuestra que haya relaciones causales.