Análisis de Absorción de CO2 en Plantas - Proyecto de Bioinformática

Jazmín Fuentes Becerril

2025-06-18

1 Introducción

Este documento presenta un análisis exploratorio del dataset CO2, un conjunto de datos clásico en R que contiene mediciones de la absorción de CO2 por plantas. El estudio examina el impacto de factores como la concentración de CO2 en el aire, el tipo de planta (Quebec o Mississippi) y un tratamiento de refrigeración en la tasa de absorción de CO2.

1.1 Objetivo del análisis

El objetivo principal de este análisis es responder a las siguientes preguntas de investigación:

  1. ¿Cómo se relaciona la concentración de CO2 (conc) con la absorción de CO2 (uptake) en las plantas?

  2. ¿Existe una diferencia en la absorción promedio de CO2 (uptake) entre los diferentes tipos de plantas (Type)?

  3. ¿Cómo afecta el tratamiento de refrigeración (Treatment) la absorción de CO2 (uptake), y este efecto es diferente entre los tipos de plantas (Type)?

2 Metodología

El análisis se realizará utilizando los datos de [CO2], que contiene variables como la concentración de CO2 (conc), la absorción de CO2 (uptake), el tipo de planta (Type) y el tratamiento de refrigeración (Treatment).

2.1 Configuración del Entorno y Carga de Datos

Esta sección detalla la preparación del entorno de trabajo, incluyendo la carga de las librerías necesarias y la exploración inicial del dataset CO2.

2.1.1 Carga de Paquetes Necesarios

Se cargan los paquetes ggplot2 para la creación de gráficos y dplyr para la manipulación y transformación de datos. Se incluye una comprobación para instalar estos paquetes si no están disponibles en el sistema.

# Programación defensiva: Verificar e instalar paquetes si no están presentes
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
library(ggplot2)

if (!requireNamespace("dplyr", quietly = TRUE)) {
  install.packages("dplyr")
}
library(dplyr)

# Para DataExplorer
if (!requireNamespace("DataExplorer", quietly = TRUE)) {
  install.packages("DataExplorer")
}
library(DataExplorer)

2.1.2 Carga y Exploración Inicial del Dataset CO2

El dataset CO2 es un conjunto de datos precargado en R, que no requiere de importación desde un archivo externo. A continuación, se muestra una vista previa, la estructura y un resumen estadístico de sus variables para entender su composición.

# Cargando el dataset (aunque ya esté en el ambiente, es buena práctica explicitarlo)
data("CO2")

cat("--- Vista Previa del Dataset ---\n")
## --- Vista Previa del Dataset ---
print(head(CO2))
##   Plant   Type  Treatment conc uptake
## 1   Qn1 Quebec nonchilled   95   16.0
## 2   Qn1 Quebec nonchilled  175   30.4
## 3   Qn1 Quebec nonchilled  250   34.8
## 4   Qn1 Quebec nonchilled  350   37.2
## 5   Qn1 Quebec nonchilled  500   35.3
## 6   Qn1 Quebec nonchilled  675   39.2
cat("\n--- Estructura del Dataset ---\n")
## 
## --- Estructura del Dataset ---
str(CO2)
## Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':   84 obs. of  5 variables:
##  $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
##  $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
##  $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
##  $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
##  - attr(*, "formula")=Class 'formula'  language uptake ~ conc | Plant
##   .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
##  - attr(*, "outer")=Class 'formula'  language ~Treatment * Type
##   .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
##  - attr(*, "labels")=List of 2
##   ..$ x: chr "Ambient carbon dioxide concentration"
##   ..$ y: chr "CO2 uptake rate"
##  - attr(*, "units")=List of 2
##   ..$ x: chr "(uL/L)"
##   ..$ y: chr "(umol/m^2 s)"
cat("\n--- Resumen Estadístico del Dataset ---\n")
## 
## --- Resumen Estadístico del Dataset ---
summary(CO2)
##      Plant             Type         Treatment       conc          uptake     
##  Qn1    : 7   Quebec     :42   nonchilled:42   Min.   :  95   Min.   : 7.70  
##  Qn2    : 7   Mississippi:42   chilled   :42   1st Qu.: 175   1st Qu.:17.90  
##  Qn3    : 7                                    Median : 350   Median :28.30  
##  Qc1    : 7                                    Mean   : 435   Mean   :27.21  
##  Qc3    : 7                                    3rd Qu.: 675   3rd Qu.:37.12  
##  Qc2    : 7                                    Max.   :1000   Max.   :45.50  
##  (Other):42

2.1.3 Exploración Rápida con DataExplorer

Para una visión general rápida y estandarizada del dataset, se utiliza el paquete DataExplorer. Este paquete permite generar automáticamente visualizaciones y resúmenes de missing values, distribuciones de variables y correlaciones.

# Visualización de valores perdidos
plot_missing(CO2)

# Histograma de variables numéricas
plot_histogram(CO2)

# Gráficos de barras de variables categóricas
plot_bar(CO2)

2.1.4 Exploración Rápida con DataExplorer

También podemos generar un reporte HTML exhaustivo con create_report() que abarca un análisis profundo de la estructura, distribuciones, relaciones bivariadas y más. Este reporte se guardará en la carpeta results/.

También podemos generar un reporte HTML exhaustivo con create_report() que abarca un análisis profundo de la estructura, distribuciones, relaciones bivariadas y más. Este reporte se guardará en la carpeta results/.

# Generar el reporte completo en la subcarpeta deseada
create_report(CO2, 
              output_file = "DataExplorer_Reporte.html", # Tu nombre de archivo deseado
              output_dir = "~/Proyectos_R/Proyecto_Analisis_Datos_JFB/reports/results", # Ruta anidada
              report_title = "Reporte Exploratorio del Dataset CO2") # Tu título para el reporte
##   |                                             |                                     |   0%  |                                             |.                                    |   2%                                   |                                             |..                                   |   5% [global_options]                  |                                             |...                                  |   7%                                   |                                             |....                                 |  10% [introduce]                       |                                             |....                                 |  12%                                   |                                             |.....                                |  14% [plot_intro]
##   |                                             |......                               |  17%                                   |                                             |.......                              |  19% [data_structure]                  |                                             |........                             |  21%                                   |                                             |.........                            |  24% [missing_profile]
##   |                                             |..........                           |  26%                                   |                                             |...........                          |  29% [univariate_distribution_header]  |                                             |...........                          |  31%                                   |                                             |............                         |  33% [plot_histogram]
##   |                                             |.............                        |  36%                                   |                                             |..............                       |  38% [plot_density]                    |                                             |...............                      |  40%                                   |                                             |................                     |  43% [plot_frequency_bar]
##   |                                             |.................                    |  45%                                   |                                             |..................                   |  48% [plot_response_bar]               |                                             |..................                   |  50%                                   |                                             |...................                  |  52% [plot_with_bar]                   |                                             |....................                 |  55%                                   |                                             |.....................                |  57% [plot_normal_qq]
##   |                                             |......................               |  60%                                   |                                             |.......................              |  62% [plot_response_qq]                |                                             |........................             |  64%                                   |                                             |.........................            |  67% [plot_by_qq]                      |                                             |..........................           |  69%                                   |                                             |..........................           |  71% [correlation_analysis]
##   |                                             |...........................          |  74%                                   |                                             |............................         |  76% [principal_component_analysis]
##   |                                             |.............................        |  79%                                   |                                             |..............................       |  81% [bivariate_distribution_header]   |                                             |...............................      |  83%                                   |                                             |................................     |  86% [plot_response_boxplot]           |                                             |.................................    |  88%                                   |                                             |.................................    |  90% [plot_by_boxplot]                 |                                             |..................................   |  93%                                   |                                             |...................................  |  95% [plot_response_scatterplot]       |                                             |.................................... |  98%                                   |                                             |.....................................| 100% [plot_by_scatterplot]           
## "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/pandoc" +RTS -K512m -RTS "C:\Users\LENOVO~1\DOCUME~1\PROYEC~1\PROYEC~1\reports\results\REPORT~1.MD" --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc588c7744295e.html --lua-filter "C:\Users\LENOVO~1\AppData\Local\R\WIN-LI~1\4.5\RMARKD~1\RMARKD~1\lua\PAGEBR~1.LUA" --lua-filter "C:\Users\LENOVO~1\AppData\Local\R\WIN-LI~1\4.5\RMARKD~1\RMARKD~1\lua\LATEX-~1.LUA" --lua-filter "C:\Users\LENOVO~1\AppData\Local\R\WIN-LI~1\4.5\RMARKD~1\RMARKD~1\lua\TABLE-~1.LUA" --embed-resources --standalone --variable bs3=TRUE --section-divs --table-of-contents --toc-depth 6 --template "C:\Users\LENOVO~1\AppData\Local\R\WIN-LI~1\4.5\RMARKD~1\rmd\h\DEFAUL~1.HTM" --no-highlight --variable highlightjs=1 --variable theme=yeti --mathjax --variable "mathjax-url=https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" --include-in-header "C:\Users\LENOVO~1\AppData\Local\Temp\Rtmp4Aw0HS\rmarkdown-str588c4bad409b.html"

3 Análisis y Resultados

Esta sección aborda cada una de las preguntas de investigación planteadas, presentando el análisis estadístico realizado y las visualizaciones correspondientes que ayudan a interpretar los hallazgos.

3.1 Pregunta 1: Relación entre Concentración de CO2 y Absorción de CO2

Pregunta: ¿Cómo se relaciona la concentración de CO2 (conc) con la absorción de CO2 (uptake) en las plantas?

Para responder a esta pregunta, se calcula el coeficiente de correlación de Pearson para cuantificar la fuerza y dirección de la relación lineal entre conc y uptake. Adicionalmente, se genera un diagrama de dispersión para visualizar esta relación, diferenciando los puntos por el tipo de planta y el tratamiento recibido.

# Análisis estadístico: Calcular la correlación entre conc y uptake
# La correlación de Pearson mide la fuerza y dirección de una relación lineal.
correlacion_conc_uptake <- cor(CO2$conc, CO2$uptake)
cat("La correlación de Pearson entre Concentración de CO2 y Absorción de CO2 es:", round(correlacion_conc_uptake, 2), "\n")
## La correlación de Pearson entre Concentración de CO2 y Absorción de CO2 es: 0.49
# Programación defensiva: Verificar si hay valores NA antes de calcular la correlación
if (any(is.na(CO2$conc)) || any(is.na(CO2$uptake))) {
  warning("¡Atención! Se encontraron valores NA en 'conc' o 'uptake'. La correlación se calculó excluyendo NA.")
}

# Visualización: Diagrama de dispersión con línea de tendencia
plot_pregunta1 <- ggplot(CO2, aes(x = conc, y = uptake)) +
  geom_point(aes(color = Type, shape = Treatment), alpha = 0.7) + # Puntos coloreados por 'Type' y forma por 'Treatment'
  geom_smooth(method = "lm", se = FALSE, color = "blue", linetype = "dashed") + # Línea de tendencia lineal
  labs(
    title = "Relación entre Concentración de CO2 y Absorción de CO2",
    x = "Concentración de CO2 (ppm)",
    y = "Absorción de CO2 (umol/m^2s)", # Corregido a texto simple
    caption = paste("Correlación de Pearson:", round(correlacion_conc_uptake, 2)),
    color = "Tipo de Planta",
    shape = "Tratamiento"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

print(plot_pregunta1)

Interpretación: Existe una correlación positiva y moderada entre la concentración de CO2 y la absorción de CO2 por las plantas, con un coeficiente de correlación de Pearson de 0.49. Esto indica que a medida que aumenta la concentración de CO2, tiende a aumentar la absorción, aunque la relación no es perfectamente lineal y otros factores claramente influyen. La visualización muestra que las plantas de tipo Quebec generalmente presentan una mayor absorción que las de Mississippi, y que el tratamiento también parece modular esta relación.

3.2 Pregunta 2: Diferencia en Absorción por Tipo de Planta

Pregunta: ¿Existe una diferencia en la absorción promedio de CO2 (uptake) entre los diferentes tipos de plantas (Type)?

Para evaluar si hay diferencias significativas en la absorción de CO2 entre los tipos de plantas (Quebec y Mississippi), se calculan los promedios y desviaciones estándar de uptake para cada tipo. Posteriormente, se utiliza un diagrama de cajas (boxplot) para visualizar las distribuciones de absorción y comparar sus medianas y rangos, incluyendo también la media para una referencia adicional.

# Análisis estadístico: Calcular el promedio de 'uptake' por 'Type'
promedio_uptake_por_tipo <- CO2 %>%
  group_by(Type) %>%
  summarise(
    media_uptake = mean(uptake, na.rm = TRUE),
    desviacion_estandar_uptake = sd(uptake, na.rm = TRUE),
    conteo = n()
  )
cat("\n--- Absorción Promedio de CO2 por Tipo de Planta ---\n")
## 
## --- Absorción Promedio de CO2 por Tipo de Planta ---
print(promedio_uptake_por_tipo)
## # A tibble: 2 × 4
##   Type        media_uptake desviacion_estandar_uptake conteo
##   <fct>              <dbl>                      <dbl>  <int>
## 1 Quebec              33.5                       9.67     42
## 2 Mississippi         20.9                       7.82     42
# Programación defensiva: Verificar si 'Type' es un factor
if (!is.factor(CO2$Type)) {
  CO2$Type <- as.factor(CO2$Type)
  message("La variable 'Type' fue convertida a factor para un mejor análisis categórico.")
}

# Visualización: Diagrama de cajas (Boxplot) para comparar la distribución de uptake por Type
plot_pregunta2 <- ggplot(CO2, aes(x = Type, y = uptake, fill = Type)) +
  geom_boxplot() + # Diagrama de cajas para mostrar distribución y mediana
  labs(
    title = "Absorción de CO2 por Tipo de Planta",
    x = "Tipo de Planta",
    y = "Absorción de CO2 (umol/m^2s)", # Corregido a texto simple
    fill = "Tipo de Planta"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

print(plot_pregunta2)

Interpretación: Existe una clara y significativa diferencia en la absorción de CO2 entre los tipos de plantas. Las plantas de tipo Quebec (33.54) µmol/m²·s en promedio muestran una absorción de CO2 notablemente mayor y más consistente que las plantas de tipo Mississippi (20.88) µmol/m²·s en promedio. El boxplot resalta que la distribución de absorción para Quebec se encuentra en un rango considerablemente superior, con poca superposición entre las dos distribuciones.

3.3 Pregunta 3: Efecto del Tratamiento y Tipo de Planta en la Absorción de CO2

Pregunta: ¿Cómo afecta el tratamiento de refrigeración (Treatment) la absorción de CO2 (uptake), y este efecto es diferente entre los tipos de plantas (Type)?

Para explorar la interacción entre el tratamiento de refrigeración y el tipo de planta en la absorción de CO2, se calculan los promedios de uptake para cada combinación de tipo y tratamiento. Se presentan dos visualizaciones complementarias: un gráfico de barras que muestra los promedios y un conjunto de boxplots con facetas para ilustrar las distribuciones detalladas bajo cada condición.

# Análisis estadístico: Calcular promedios de 'uptake' por 'Treatment' y 'Type'
promedio_uptake_por_tratamiento_y_tipo <- CO2 %>%
  group_by(Type, Treatment) %>%
  summarise(
    media_uptake = mean(uptake, na.rm = TRUE),
    .groups = 'drop'
  )
cat("\n--- Absorción Promedio de CO2 por Tratamiento y Tipo de Planta ---\n")
## 
## --- Absorción Promedio de CO2 por Tratamiento y Tipo de Planta ---
print(promedio_uptake_por_tratamiento_y_tipo)
## # A tibble: 4 × 3
##   Type        Treatment  media_uptake
##   <fct>       <fct>             <dbl>
## 1 Quebec      nonchilled         35.3
## 2 Quebec      chilled            31.8
## 3 Mississippi nonchilled         26.0
## 4 Mississippi chilled            15.8
# Programación defensiva: Verificar si 'Treatment' es un factor
if (!is.factor(CO2$Treatment)) {
  CO2$Treatment <- as.factor(CO2$Treatment)
  message("La variable 'Treatment' fue convertida a factor para un mejor análisis categórico.")
}

# Visualización Opción 1: Diagrama de barras de promedios
plot_pregunta3_barras <- ggplot(promedio_uptake_por_tratamiento_y_tipo,
                               aes(x = paste(Type, Treatment, sep = "\n"), y = media_uptake, fill = Type)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Absorción Promedio de CO2 por Tipo de Planta y Tratamiento",
    x = "Tipo de Planta y Tratamiento",
    y = "Absorción Promedio de CO2 (umol/m^2s)", # Corregido a texto simple
    fill = "Tipo de Planta"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

print(plot_pregunta3_barras)

# Visualización Opción 2: Diagrama de cajas/violín con facetas
plot_pregunta3_boxplot <- ggplot(CO2, aes(x = Treatment, y = uptake, fill = Treatment)) +
  geom_boxplot() +
  facet_wrap(~ Type) + # Separa el gráfico por cada 'Type' de planta
  labs(
    title = "Distribución de Absorción de CO2 por Tratamiento y Tipo de Planta",
    x = "Tratamiento",
    y = "Absorción de CO2 (umol/m^2s)", # Corregido a texto simple
    fill = "Tratamiento"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

print(plot_pregunta3_boxplot)

Interpretación: Los gráficos demuestran que el tratamiento de refrigeración (chilled) tiene un efecto negativo en la absorción de CO2 para ambos tipos de plantas, resultando en una menor absorción en comparación con el tratamiento nonchilled. Sin embargo, se observa una interacción importante, donde el efecto perjudicial de la refrigeración es considerablemente más severo en las plantas Mississippi. Mientras que en las plantas Quebec la diferencia entre tratamientos es notable pero no drástica, en las Mississippi el tratamiento refrigerado reduce drásticamente la absorción a los niveles más bajos del estudio. Esto indica una interacción clara: la vulnerabilidad a la refrigeración difiere significativamente entre los tipos de plantas. Las plantas Quebec, incluso bajo refrigeración, mantienen niveles de absorción que superan a las plantas Mississippi no refrigeradas.

4 Conclusiones

Este análisis del dataset CO2 ha revelado información crucial sobre los factores que influyen en la absorción de CO2 por las plantas:

  1. Correlación entre concentración de CO2 y absorción: Existe una correlación positiva y moderada entre la concentración de CO2 y la absorción, lo que sugiere que una mayor disponibilidad de CO2 permite a las plantas aumentar su tasa de absorción. Sin embargo, esta relación está modulada por otros factores que podrían estar influyendo en la tasa de absorción, como el tipo de planta o las condiciones ambientales.

  2. Influencia del tipo de planta: El tipo de planta es el factor más influyente en la absorción de CO2. Las plantas de tipo Quebec demuestran consistentemente una capacidad de absorción significativamente mayor que las plantas de tipo Mississippi en todas las condiciones estudiadas, lo que resalta las diferencias inherentes entre los dos tipos de plantas.

  3. Impacto del tratamiento de refrigeración: El tratamiento de refrigeración (chilled) tiene un impacto negativo en la absorción de CO2 para ambos tipos de plantas. Sin embargo, se observa una interacción importante: el efecto perjudicial de la refrigeración es considerablemente más severo en las plantas Mississippi, indicando una menor tolerancia a bajas temperaturas en comparación con las plantas Quebec.

En resumen, la eficiencia en la absorción de CO2 en este estudio está fuertemente determinada por la genética de la planta (tipo) y es susceptible a condiciones ambientales adversas como la refrigeración, especialmente en genotipos más sensibles como los de Mississippi.

5 Agradecimientos

La realización de este proyecto y el análisis de datos presentado fue posible gracias a las habilidades y conocimientos adquiridos durante las sesiones de “VieRnes de Bioinformática”. Este espacio ha sido fundamental para desarrollar una comprensión práctica y sólida en el manejo de R y su aplicación en la bioinformática, permitiendo la ejecución de este ejercicio de manera integral y eficiente.