if(!require(pacman))
  install.packages("pacman")
## Loading required package: pacman
p_load("vroom",
       "dplyr",
       "ggplot2",
       "tidyr",
       "ggrepel",
       "plotly")
Melting_curves <- vroom(file = "https://raw.githubusercontent.com/ManuelLaraMVZ/Metabolomica_2026_1/refs/heads/main/Disociaci%C3%B3n_G2.csv")
## Rows: 61 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (4): Temperature, A1, A2, A3
## 
## ℹ 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 × 4
##    Temperature    A1    A2    A3
##          <dbl> <dbl> <dbl> <dbl>
##  1        65   2606. 2789. 2602.
##  2        65.5 2602. 2779. 2598.
##  3        66   2597. 2769. 2595.
##  4        66.5 2593. 2758. 2591.
##  5        67   2589. 2748. 2587.
##  6        67.5 2584. 2738. 2583.
##  7        68   2580. 2727. 2580.
##  8        68.5 2576. 2716. 2576.
##  9        69   2572. 2705. 2572.
## 10        69.5 2568. 2692. 2568.
## # ℹ 51 more rows
Melting_curves2 <- Melting_curves %>%
  rename(
    Temperatura = Temperature
  ) %>%
  select(Temperatura, A1, A2, A3)

Melting_curves2
## # A tibble: 61 × 4
##    Temperatura    A1    A2    A3
##          <dbl> <dbl> <dbl> <dbl>
##  1        65   2606. 2789. 2602.
##  2        65.5 2602. 2779. 2598.
##  3        66   2597. 2769. 2595.
##  4        66.5 2593. 2758. 2591.
##  5        67   2589. 2748. 2587.
##  6        67.5 2584. 2738. 2583.
##  7        68   2580. 2727. 2580.
##  8        68.5 2576. 2716. 2576.
##  9        69   2572. 2705. 2572.
## 10        69.5 2568. 2692. 2568.
## # ℹ 51 more rows
Melting_curves3 <- Melting_curves2 %>% 
  pivot_longer(cols = -Temperatura,
               names_to = "Muestras",
               values_to = "Fluorescencias")
Melting_curves3
## # A tibble: 183 × 3
##    Temperatura Muestras Fluorescencias
##          <dbl> <chr>             <dbl>
##  1        65   A1                2606.
##  2        65   A2                2789.
##  3        65   A3                2602.
##  4        65.5 A1                2602.
##  5        65.5 A2                2779.
##  6        65.5 A3                2598.
##  7        66   A1                2597.
##  8        66   A2                2769.
##  9        66   A3                2595.
## 10        66.5 A1                2593.
## # ℹ 173 more rows
Grafica_melting <- ggplot(Melting_curves3,
  aes(x = Temperatura,
      y = Fluorescencias,
      color = Muestras)) +
  geom_line(linewidth = 1.5) +
  geom_point(size = 2) +
  theme_classic() +
  labs(title = "Curvas de disociación",
       subtitle = "Equipo: LSD | Todas las muestras",
       caption = "Diseño: SZV",
       x = "Temperatura (°C)",
       y = "Fluorescencia (u.a.)") +
  theme(
    axis.line = element_line(linewidth = 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")
  )

Grafica_melting

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

Derivadas
## # A tibble: 60 × 4
##    Temperatura  d_A1  d_A2  d_A3
##          <dbl> <dbl> <dbl> <dbl>
##  1        65.5 -8.63 -20.6 -7.46
##  2        66   -8.63 -20.6 -7.46
##  3        66.5 -8.63 -20.6 -7.46
##  4        67   -8.63 -20.6 -7.46
##  5        67.5 -8.63 -20.6 -7.46
##  6        68   -8.63 -20.6 -7.46
##  7        68.5 -7.91 -22.3 -7.70
##  8        69   -7.99 -23.5 -7.91
##  9        69.5 -8.45 -25.4 -8.22
## 10        70   -9.11 -27.4 -8.56
## # ℹ 50 more rows
Derivadas2 <- Derivadas %>%
  pivot_longer(
    cols = -Temperatura,
    names_to = "Muestras",
    values_to = "Derivadas"
  )

Derivadas2
## # A tibble: 180 × 3
##    Temperatura Muestras Derivadas
##          <dbl> <chr>        <dbl>
##  1        65.5 d_A1         -8.63
##  2        65.5 d_A2        -20.6 
##  3        65.5 d_A3         -7.46
##  4        66   d_A1         -8.63
##  5        66   d_A2        -20.6 
##  6        66   d_A3         -7.46
##  7        66.5 d_A1         -8.63
##  8        66.5 d_A2        -20.6 
##  9        66.5 d_A3         -7.46
## 10        67   d_A1         -8.63
## # ℹ 170 more rows
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 = "Equipo: LSD | Todas las muestras",
       caption = "Diseño: SZV",
       x = "Temperatura (°C)",
       y = expression(-Delta*F/Delta*T)) +
  theme(
    axis.line = element_line(linewidth = 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

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 = "-dF/dT")
         ))

Grafica_derivada_3D
Grafica_derivada_equipo <- ggplot(Derivadas,
  aes(x = Temperatura)) +
  geom_line(aes(y = d_A1, color = "A1"), linewidth = 1.5) +
  scale_color_manual(values = c("A1" = "#F56827")) +
  theme_classic() +
  labs(title = "Derivada de Disociación",
       subtitle = "Equipo: LSD | Muestra A1",
       caption = "Diseño: SZV",
       x = "Temperatura",
       y = expression(-Delta*F/Delta*T)) +
  theme(
    axis.line = element_line(linewidth = 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(Derivadas$Temperatura),
                 max(Derivadas$Temperatura),
                 by = 2.5)
  )

Grafica_derivada_equipo

Pico <- max(Derivadas$d_A1, na.rm = TRUE)
Pico
## [1] 2.361814
Tm <- Derivadas %>%
  filter(d_A1 == Pico) %>%
  select(Temperatura, d_A1)

Tm
## # A tibble: 1 × 2
##   Temperatura  d_A1
##         <dbl> <dbl>
## 1          95  2.36
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_A1,
                       label = paste("Tm = ", round(Temperatura), " °C")),
                   nudge_x = 4,
                   nudge_y = -0.03,
                   max.overlaps = 100,
                   color = "black",
                   fill = "#9eaffa")

Grafica_derivada_equipo2