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
