Correr la paqueteria Instalación de paquetes #Pacman: llama a otros paquetes y si no estan los instala

if(!require(pacman))
  install.packages("pacman")
## Loading required package: pacman

Llamar a pacman

library("pacman")

Llamar paqueterĆ­a necesaria

p_load("vroom",
       "dplyr",
       "ggplot2",
       "tidyr",
       "ggrepel",
       "plotly")

Llamar a base de datos

Melting_curves <- vroom(file = "https://raw.githubusercontent.com/ManuelLaraMVZ/Metabolomica_2026_1/refs/heads/main/Disociaci%C3%B3n_G1.csv")
## Rows: 61 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (7): Temperature, A1, A2, A3, A4, A5, A6
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Melting_curves
## # A tibble: 61 Ɨ 7
##    Temperature    A1    A2    A3    A4    A5    A6
##          <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1        65   2218. 2595. 2715. 2378. 2813. 2877.
##  2        65.5 2219. 2592. 2710. 2380. 2810. 2871.
##  3        66   2219. 2588. 2705. 2383. 2806. 2865.
##  4        66.5 2219. 2585. 2699. 2385. 2803. 2859.
##  5        67   2219. 2582. 2694. 2388. 2800. 2853.
##  6        67.5 2219. 2578. 2689. 2390. 2796. 2847.
##  7        68   2219. 2575. 2684. 2393. 2793. 2841.
##  8        68.5 2219. 2571. 2678. 2394. 2790. 2834.
##  9        69   2219. 2567. 2673. 2393. 2786. 2826.
## 10        69.5 2219. 2562. 2667. 2390. 2782. 2818.
## # ℹ 51 more rows

Modificar la base de datos

Melting_curves2 <- Melting_curves %>% 
  mutate(Temperatura = Temperature,
         KAM = A1,
         Muestra2 = A2,
         Muestra3 = A3,
         Muestra4 = A4,
         Muestra5 = A5,
         Muestra6 = A6) %>% 
  select(-Temperature:-A6)

Melting_curves2
## # A tibble: 61 Ɨ 7
##    Temperatura   KAM Muestra2 Muestra3 Muestra4 Muestra5 Muestra6
##          <dbl> <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
##  1        65   2218.    2595.    2715.    2378.    2813.    2877.
##  2        65.5 2219.    2592.    2710.    2380.    2810.    2871.
##  3        66   2219.    2588.    2705.    2383.    2806.    2865.
##  4        66.5 2219.    2585.    2699.    2385.    2803.    2859.
##  5        67   2219.    2582.    2694.    2388.    2800.    2853.
##  6        67.5 2219.    2578.    2689.    2390.    2796.    2847.
##  7        68   2219.    2575.    2684.    2393.    2793.    2841.
##  8        68.5 2219.    2571.    2678.    2394.    2790.    2834.
##  9        69   2219.    2567.    2673.    2393.    2786.    2826.
## 10        69.5 2219.    2562.    2667.    2390.    2782.    2818.
## # ℹ 51 more rows

Agrupación de datos

Melting_curves3 <- Melting_curves2 %>% 
  pivot_longer(cols = -Temperatura,
               names_to = "Muestras",
               values_to = "Fluorescencias")

Melting_curves3
## # A tibble: 366 Ɨ 3
##    Temperatura Muestras Fluorescencias
##          <dbl> <chr>             <dbl>
##  1        65   KAM               2218.
##  2        65   Muestra2          2595.
##  3        65   Muestra3          2715.
##  4        65   Muestra4          2378.
##  5        65   Muestra5          2813.
##  6        65   Muestra6          2877.
##  7        65.5 KAM               2219.
##  8        65.5 Muestra2          2592.
##  9        65.5 Muestra3          2710.
## 10        65.5 Muestra4          2380.
## # ℹ 356 more rows

GrƔfica

Grafica_melting <- ggplot(Melting_curves3,
                          aes(x = Temperatura,
                              y = Fluorescencias,
                              color = Muestras)) +
  geom_line(linewidth = 1.5) +
  theme_classic() +
  labs(title = "Curvas de disociación",
       subtitle = "Todas las muestras",
       caption = "Equipo: KAM",
       x = "Temperatura (ĀŗC)",
       y = "Fluorescencia (u.a.)") +
  theme(axis.line = element_line(size = 1.2, color = "black"),
        axis.title = element_text(face = "bold"),
        axis.text = element_text(face = "bold"),
        legend.title = element_text(face = "bold"),
        legend.text = element_text(face = "bold")) +
  scale_x_continuous(breaks = seq(min(Melting_curves3$Temperatura),
                                  max(Melting_curves3$Temperatura),
                                  by = 2.5))
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Grafica_melting

Derivadas de las curvas de disociación *símbolo llamado virgulilla (~)

Derivadas <- Melting_curves2 %>% 
  mutate(across(KAM:Muestra6, 
                ~ -c(NA, diff(.x)/diff(Melting_curves2$Temperatura)), 
                .names = "d_{.col}")) %>% 
  select(-KAM:-Muestra6) %>% 
  slice(-1)

Derivadas
## # A tibble: 60 Ɨ 7
##    Temperatura  d_KAM d_Muestra2 d_Muestra3 d_Muestra4 d_Muestra5 d_Muestra6
##          <dbl>  <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
##  1        65.5 -0.207       6.72       10.5     -5.04        6.52       11.9
##  2        66   -0.207       6.72       10.5     -5.04        6.52       11.9
##  3        66.5 -0.207       6.72       10.5     -5.04        6.52       11.9
##  4        67   -0.207       6.72       10.5     -5.04        6.52       11.9
##  5        67.5 -0.207       6.72       10.5     -5.04        6.52       11.9
##  6        68   -0.207       6.72       10.5     -5.04        6.52       11.9
##  7        68.5 -0.250       7.86       10.6     -2.19        7.17       14.5
##  8        69   -0.103       8.61       10.9      0.998       7.15       15.8
##  9        69.5  0.404       9.26       11.7      6.50        8.22       16.2
## 10        70    0.767      10.00       11.8     11.6         9.05       16.3
## # ℹ 50 more rows

Reordenar los datos

Derivadas2 <- Derivadas %>% 
  pivot_longer(cols = -Temperatura,
               names_to = "Muestras",
               values_to = "Derivadas")

Derivadas2
## # A tibble: 360 Ɨ 3
##    Temperatura Muestras   Derivadas
##          <dbl> <chr>          <dbl>
##  1        65.5 d_KAM         -0.207
##  2        65.5 d_Muestra2     6.72 
##  3        65.5 d_Muestra3    10.5  
##  4        65.5 d_Muestra4    -5.04 
##  5        65.5 d_Muestra5     6.52 
##  6        65.5 d_Muestra6    11.9  
##  7        66   d_KAM         -0.207
##  8        66   d_Muestra2     6.72 
##  9        66   d_Muestra3    10.5  
## 10        66   d_Muestra4    -5.04 
## # ℹ 350 more rows

GrƔficas Derivadas

Grafica_derivada <- ggplot(Derivadas2,
                           aes(x = Temperatura,
                               y = Derivadas,
                               color = Muestras)) +
  geom_line(linewidth = 1.5) +
  theme_classic() +
  labs(title = "Curvas de la derivada de disociación",
       subtitle = "Todas las muestras",
       caption = "Equipo: KAM",
       x = "Temperatura (ĀŗC)",
       y = expression(-Delta~F / Delta~T)) +
  theme(axis.line = element_line(size = 1.2, color = "black"),
        axis.title = element_text(face = "bold"),
        axis.text = element_text(face = "bold"),
        legend.title = element_text(face = "bold"),
        legend.text = element_text(face = "bold")) +
  scale_x_continuous(breaks = seq(min(Derivadas2$Temperatura),
                                  max(Derivadas2$Temperatura),
                                  by = 2.5))

Grafica_derivada

Construir una grƔfica 3D

# GrƔfica 3D de las derivadas
Grafica_derivada_3D <- plot_ly(Derivadas2,
                               x = ~Temperatura,
                               y = ~Muestras,
                               z = ~Derivadas,
                               color = ~factor(Muestras),
                               type = "scatter3d",
                               mode = "lines",
                               line = list(width = 6)) %>% 
  layout(title = "Curvas de derivada en 3D",
         scene = list(
           xaxis = list(title = "Temperatura (ĀŗC)"),
           yaxis = list(title = "Muestras"),
           zaxis = list(title = "-ΔF/ΔT")
         ))

Grafica_derivada_3D

GrƔfica del equipo

# GrƔfica derivada para KAM y Muestra3
Grafica_derivada_equipo <- ggplot(Derivadas,
                                  aes(x = Temperatura)) +
  geom_line(aes(y = d_KAM, color = "d_KAM"), linewidth = 1.5) +
  geom_line(aes(y = d_Muestra3, color = "d_Muestra3"), linewidth = 1.5) +
  scale_color_manual(values = c("d_KAM" = "#1e2f7c", "d_Muestra3" = "#900C3F")) +
  theme_classic() +
  labs(title = "Derivada de Disociación",
       subtitle = "Comparación: KAM vs Muestra3",
       caption = "Equipo: KAM",
       x = "Temperatura (ĀŗC)",
       y = expression(-Delta~F / Delta~T)) +
  theme(axis.line = element_line(size = 1.2, color = "black"),
        axis.title = element_text(face = "bold"),
        axis.text = element_text(face = "bold"),
        legend.title = element_text(face = "bold"),
        legend.text = element_text(face = "bold")) +
  scale_x_continuous(breaks = seq(min(Derivadas2$Temperatura),
                                  max(Derivadas2$Temperatura),
                                  by = 2.5))

Grafica_derivada_equipo

Etiquetas

Pico <- max(Derivadas$d_Muestra3, na.rm = TRUE)
Pico
## [1] 94.93191

Temperatura

Tm <- Derivadas %>% 
  filter(d_Muestra3 == Pico) %>% 
  select(Temperatura, d_Muestra3)

Tm
## # A tibble: 1 Ɨ 2
##   Temperatura d_Muestra3
##         <dbl>      <dbl>
## 1        82.5       94.9

GrƔfica con etiqueta

Grafica_derivada_equipo2 <- Grafica_derivada_equipo + 
  geom_vline(xintercept = Tm$Temperatura, 
             color = "#FF5733", 
             linetype = "dashed",
             linewidth = 1) +
  geom_label_repel(data = Tm,
                   aes(x = Temperatura,
                       y = d_Muestra3,
                       label = paste("Tm =", round(Temperatura, 1), "ĀŗC")),
                   nudge_x = 4,
                   nudge_y = -0.03,
                   max.overlaps = 100,
                   color = "black",
                   fill = "#9eaffa")

Grafica_derivada_equipo2