Instalación de paquetería

if(!require(pacman)) install.packages("pacman", dependencies=TRUE)
## Loading required package: pacman

Llamar a pacman

library("pacman")

llamar a la paquetería

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

Llamado de base de datos

Datos_melting <- vroom(file = "https://raw.githubusercontent.com/ManuelLaraMVZ/resultados_PCR_practica/refs/heads/main/Disoci_ejemplo1.csv")
## Rows: 55 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (6): Temperature, A1, B1, C1, D1, E1
## 
## ℹ 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.
Datos_melting
## # A tibble: 55 × 6
##    Temperature    A1    B1    C1    D1     E1
##          <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
##  1        65    1.96  1.98  2.11  2.11 0.0869
##  2        65.5  1.94  1.99  2.06  2.08 0.0834
##  3        66    1.89  1.93  2.03  2.07 0.0932
##  4        66.5  1.86  1.89  1.98  2.02 0.0676
##  5        67    1.82  1.89  1.94  1.98 0.0738
##  6        67.5  1.77  1.83  1.90  1.93 0.0766
##  7        68    1.74  1.78  1.86  1.87 0.0686
##  8        68.5  1.70  1.76  1.79  1.84 0.0689
##  9        69    1.65  1.71  1.79  1.80 0.0665
## 10        69.5  1.60  1.64  1.75  1.76 0.0744
## # ℹ 45 more rows

Cambiar los nombres de las columnas

Datos_melting2 <- Datos_melting %>% 
  mutate(Temperatura = Temperature, JFRW = A1, JRL = B1, PPOF = C1, MLL = D1, AALE = E1) %>% 
  select(-1:-6)

Datos_melting2
## # A tibble: 55 × 6
##    Temperatura  JFRW   JRL  PPOF   MLL   AALE
##          <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
##  1        65    1.96  1.98  2.11  2.11 0.0869
##  2        65.5  1.94  1.99  2.06  2.08 0.0834
##  3        66    1.89  1.93  2.03  2.07 0.0932
##  4        66.5  1.86  1.89  1.98  2.02 0.0676
##  5        67    1.82  1.89  1.94  1.98 0.0738
##  6        67.5  1.77  1.83  1.90  1.93 0.0766
##  7        68    1.74  1.78  1.86  1.87 0.0686
##  8        68.5  1.70  1.76  1.79  1.84 0.0689
##  9        69    1.65  1.71  1.79  1.80 0.0665
## 10        69.5  1.60  1.64  1.75  1.76 0.0744
## # ℹ 45 more rows

Para la gráfica tenemos que reacomodar los datos de multiples columnas en solo 3 columnas

  1. Seleccionaré que columnas serán para el manejo de los datos.
  2. Agruparé todos los nombres de las columnas en una sola.
  3. Agrupare todos los valores de todas las columnas excepto la primera en una columna.
Datos_melting3 <- Datos_melting2 %>% 
  pivot_longer(cols = -Temperatura,
               names_to = "Muestras",
               values_to = "Fluorescencia")
Datos_melting3
## # A tibble: 275 × 3
##    Temperatura Muestras Fluorescencia
##          <dbl> <chr>            <dbl>
##  1        65   JFRW            1.96  
##  2        65   JRL             1.98  
##  3        65   PPOF            2.11  
##  4        65   MLL             2.11  
##  5        65   AALE            0.0869
##  6        65.5 JFRW            1.94  
##  7        65.5 JRL             1.99  
##  8        65.5 PPOF            2.06  
##  9        65.5 MLL             2.08  
## 10        65.5 AALE            0.0834
## # ℹ 265 more rows

Gráfica de datos

Grafica_melting <- ggplot(Datos_melting3,
                          mapping = aes(x = Temperatura,
                                        y = Fluorescencia,
                                        color = Muestras))+
  geom_line (size = 1.5)+
  theme_classic() +
  labs(title = "Curvas de disociación RT-qPCR",
       subtitle = "Práctica 1, \nEquipo: MLL",
       caption = "Todas las muestras",
       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(Datos_melting3$Temperatura), max(Datos_melting3$Temperatura), by = 5))+
  scale_y_continuous(labels = scales::number_format(accuracy = 0.05),
                     breaks = seq(min(Datos_melting3$Fluorescencia), max(Datos_melting3$Fluorescencia), by = 0.25))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## 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 every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Grafica_melting

Gráfica indicidual

Grafica_melting_equipo <- ggplot(Datos_melting2,
                                 aes(x = Temperatura,
                                     y = MLL))+
  geom_line(size = 1.5, color = "#6287f1")+
   theme_classic() +
  labs(title = "Curvas de disociación RT-qPCR",
       subtitle = "Práctica 1, \nEquipo: MLL",
       caption = "Todas las muestras",
       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(Datos_melting3$Temperatura), max(Datos_melting3$Temperatura), by = 5))+
  scale_y_continuous(labels = scales::number_format(accuracy = 0.05),
                     breaks = seq(min(Datos_melting3$Fluorescencia), max(Datos_melting3$Fluorescencia), by = 0.25))

Grafica_melting_equipo

##############################################################

Derivadas de la curva

Derivadas <- Datos_melting2 %>% 
  mutate(across(JFRW:AALE, ~ -c(NA, diff(.x) / diff(Datos_melting2$Temperatura)), .names = "d_{.col}")) %>% 
  select(-2: -6) %>% 
  slice(-1)

Derivadas
## # A tibble: 54 × 6
##    Temperatura d_JFRW    d_JRL   d_PPOF  d_MLL    d_AALE
##          <dbl>  <dbl>    <dbl>    <dbl>  <dbl>     <dbl>
##  1        65.5 0.0365 -0.0147   0.0940  0.0711  0.00703 
##  2        66   0.102   0.108    0.0614  0.0146 -0.0197  
##  3        66.5 0.0695  0.0883   0.112   0.108   0.0512  
##  4        67   0.0652  0.00898  0.0646  0.0772 -0.0123  
##  5        67.5 0.109   0.114    0.0903  0.0923 -0.00567 
##  6        68   0.0666  0.0994   0.0707  0.122   0.0162  
##  7        68.5 0.0774  0.0335   0.139   0.0558 -0.000754
##  8        69   0.0860  0.0979  -0.00165 0.0850  0.00488 
##  9        69.5 0.111   0.146    0.0908  0.0844 -0.0159  
## 10        70   0.0582  0.0279   0.130   0.0864  0.00967 
## # ℹ 44 more rows

Ordenar los datos para una grafica con multiples columnas

Derivadas2 <- Derivadas %>% 
  pivot_longer(cols = -Temperatura,
               names_to = "Muestras",
               values_to = "Derivadas")
Derivadas2
## # A tibble: 270 × 3
##    Temperatura Muestras Derivadas
##          <dbl> <chr>        <dbl>
##  1        65.5 d_JFRW     0.0365 
##  2        65.5 d_JRL     -0.0147 
##  3        65.5 d_PPOF     0.0940 
##  4        65.5 d_MLL      0.0711 
##  5        65.5 d_AALE     0.00703
##  6        66   d_JFRW     0.102  
##  7        66   d_JRL      0.108  
##  8        66   d_PPOF     0.0614 
##  9        66   d_MLL      0.0146 
## 10        66   d_AALE    -0.0197 
## # ℹ 260 more rows
Grafica_melting <- ggplot(Derivadas2,
                          aes(x = Temperatura,
                              y = Derivadas,
                              color = Muestras)) +
  geom_line() +
  theme_classic() +
  labs(title = "Curvas de disociación RT-qPCR",
       subtitle = "Práctica 1, \nEquipo: MLL",
       caption = "Todas las muestras",
       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 = 5)) +
  scale_y_continuous(labels = scales::number_format(accuracy = 0.05),
                     breaks = seq(min(Derivadas2$Derivadas), max(Derivadas2$Derivadas), by = 0.25))

Grafica_melting

Hacer una gráfica tridimencional

library(plotly)

Curva_3D <- plot_ly(Derivadas2,
                    x = ~Temperatura,
                    y = ~Derivadas,
                    z = ~Muestras,
                    color = ~factor(Muestras),
                    type = "scatter3d",
                    mode = "lines",
                    line = list(width = 6)) 


Curva_3D

Gráfica individual

Grafica_derivada_equipo <- ggplot(Derivadas,
                                  aes(x = Temperatura,
                                      y = d_MLL))+
  geom_line(size = 1.5, color = "#6287f1" )+
  theme_classic() +
  labs(title = "Curvas de la derivada de disociación RT-qPCR",
       subtitle = "Tejido: Corazón",
       caption = "Caption: Manuel Lara",
       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(Derivadas$Temperatura), max(Derivadas$Temperatura), by = 5))+
  scale_y_continuous(labels = scales::number_format(accuracy = 0.05),
                     breaks = seq(min(Derivadas$d_MLL), max(Derivadas$d_MLL), by = 0.05))

Grafica_derivada_equipo

Determinar Tm en gráfica

Peak_Tm <- max(Derivadas$d_MLL)

Peak_Tm
## [1] 0.738565
Tm <- Derivadas %>% 
  filter(d_MLL == Peak_Tm) %>% 
  select(1, d_MLL)

Tm
## # A tibble: 1 × 2
##   Temperatura d_MLL
##         <dbl> <dbl>
## 1          82 0.739

Etiqueta

Etiqueta <- Grafica_derivada_equipo +
  geom_vline (xintercept = Tm$Temperatura, color = "#900C3F", size = 1, linetype = "dashed")+
  geom_label_repel(data = Tm,
                   aes(x = Temperatura,
                       y = d_MLL,
                       label = paste("Tm = ", round(Temperatura, 2), "° C")),
                   nudge_x = 3, 
                   max.overlaps = 100,
                   fill = "#9eb7fc",
                   color = "black")
Etiqueta