Los programas que se requieren para todo el ejercicio se muestran en el siquiente chunk:

if(!require(pacman)) install.packages("pacman", dependencies=TRUE)
## Loading required package: pacman
## Warning: package 'pacman' was built under R version 4.2.3

llamamos a la librería de pacman

library("pacman")

llamamos a los paquetes con p_load

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

De las bases de datos que se encuentran en el repositorio general, seleccionar el que se necesita y luego llamamos al archivo Raw

Amplificacion <- vroom(file = "https://raw.githubusercontent.com/ManuelLaraMVZ/resultados_PCR_practica/refs/heads/main/Amplificacion_ejemplo.csv")
## Rows: 35 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (6): Cycle, 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.
Amplificacion
## # A tibble: 35 × 6
##    Cycle         A1        B1       C1        D1        E1
##    <dbl>      <dbl>     <dbl>    <dbl>     <dbl>     <dbl>
##  1     1  0.000143   0.0112   -0.0174   0.00306   0.00144 
##  2     2  0.00193    0.00429  -0.0116  -0.00116   0.00704 
##  3     3 -0.000874   0.00798  -0.00595  0.00443   0.00264 
##  4     4 -0.0000775  0.000436 -0.00210  0.00356   0.00336 
##  5     5 -0.000844  -0.000278 -0.00152 -0.00433   0.00815 
##  6     6  0.00140    0.00158   0.00445  0.00259   0.00399 
##  7     7  0.00266   -0.00482   0.00315  0.000907  0.00887 
##  8     8  0.00290   -0.00543   0.00493  0.00293   0.000434
##  9     9  0.00123    0.00057   0.00715  0.000636 -0.00599 
## 10    10  0.00100   -0.00216   0.00369  0.00314  -0.00409 
## # … with 25 more rows

Para facilitar la identificación de los datos, cambiaremos el nombre de las columnas y eliminaremos las originales

Amplificacion2 <- Amplificacion %>% 
  mutate(Ciclos = Cycle, MLL = A1, JRL = B1, PPOF = C1, FRAC = D1, AALE = E1) %>% 
  select(-Cycle: -E1)

Amplificacion2
## # A tibble: 35 × 6
##    Ciclos        MLL       JRL     PPOF      FRAC      AALE
##     <dbl>      <dbl>     <dbl>    <dbl>     <dbl>     <dbl>
##  1      1  0.000143   0.0112   -0.0174   0.00306   0.00144 
##  2      2  0.00193    0.00429  -0.0116  -0.00116   0.00704 
##  3      3 -0.000874   0.00798  -0.00595  0.00443   0.00264 
##  4      4 -0.0000775  0.000436 -0.00210  0.00356   0.00336 
##  5      5 -0.000844  -0.000278 -0.00152 -0.00433   0.00815 
##  6      6  0.00140    0.00158   0.00445  0.00259   0.00399 
##  7      7  0.00266   -0.00482   0.00315  0.000907  0.00887 
##  8      8  0.00290   -0.00543   0.00493  0.00293   0.000434
##  9      9  0.00123    0.00057   0.00715  0.000636 -0.00599 
## 10     10  0.00100   -0.00216   0.00369  0.00314  -0.00409 
## # … with 25 more rows

Para la gráfica de multiples columnas, necesitamos cambiar el formato de presentación, el cual sigue el siguiente concepto: 1. Seleccionar los ciclos que se usarán. 2. Agrupar todos los nombres de las columnas en una sola, agrupados por el ciclo que se evalúa 3. Una columna extra, contendrán los valores de fluorescencia de los datos agrupados por nombre de columna y el ciclo

Amplificacion3 <- Amplificacion2 %>% 
  pivot_longer(cols = -Ciclos, #Determina los valores que se van a tomar para agrupar, excepto la primer columna
               names_to = "Muestra", #Los valores de las distintas columnas los agrupa en una nueva que se llamará Muestra
               values_to = "Fluorescencia")# los datos correspondientes a las columnas los asigna a una columna llamada fluorescencia

Amplificacion3
## # A tibble: 175 × 3
##    Ciclos Muestra Fluorescencia
##     <dbl> <chr>           <dbl>
##  1      1 MLL          0.000143
##  2      1 JRL          0.0112  
##  3      1 PPOF        -0.0174  
##  4      1 FRAC         0.00306 
##  5      1 AALE         0.00144 
##  6      2 MLL          0.00193 
##  7      2 JRL          0.00429 
##  8      2 PPOF        -0.0116  
##  9      2 FRAC        -0.00116 
## 10      2 AALE         0.00704 
## # … with 165 more rows

Graficamos los datos de la nueva base de datos

Grafica_amplificacion <- ggplot(Amplificacion3,, #Se van a tomar los valores de esta base de datos)
                                mapping = aes(x = Ciclos,
                                              y = Fluorescencia,
                                              color = Muestra))+
  geom_line(size = 1)+
    labs(title = "Curvas de Amplificación qPCR",
       x = "Ciclos",
       y = "Fluorescencia",
       color = "Muestra") +
  theme_classic(base_size = 14)  # Estilo limpio y legible
## 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.
Grafica_amplificacion   

Mejoramos gráfica y colocamos umbral de ciclos, primer hay que quitar los primeros ciclos que no amplificaron de 1 a 17

Grafica_amplificacion2 <- ggplot(Amplificacion3 %>% filter(Ciclos >= 17),, #Se van a tomar los valores de esta base de datos)
                                mapping = aes(x = Ciclos,
                                              y = Fluorescencia,
                                              color = Muestra))+
  geom_line(size = 1)+
    labs(title = "Curvas de Amplificación qPCR",
       x = "Ciclos",
       y = "Fluorescencia",
       color = "Muestra") +
  theme_classic(base_size = 14)  # Estilo limpio y legible

Grafica_amplificacion  

Determinamos el Umbral de ciclos

Umbral_ciclos <- 0.08

Mejoramos la visibilidad de la gráfica

Grafica_amplificacion3 <- Grafica_amplificacion2 +
  geom_hline(yintercept = Umbral_ciclos, linetype = "dashed", color = "black", size = 1) +  # Línea de corte
  labs(title = "Curvas de Amplificación qPCR",
       x = "Ciclos",
       y = "Fluorescencia (u.a.)") +
  scale_x_continuous(breaks = seq(min(Amplificacion3$Ciclos), max(Amplificacion3$Ciclos), by = 2)) +  # Eje X cada 2 ciclos
  scale_y_continuous(
    labels = scales::number_format(accuracy = 0.05), 
    breaks = seq(floor(min(Amplificacion3$Fluorescencia)), ceiling(max(Amplificacion3$Fluorescencia)), by = 0.05) # Eje Y de 0.05 en 0.05
  ) +  
  theme_classic(base_size = 14) + 
  theme(
    axis.line = element_line(color = "black", size = 1.5),  # Líneas de los ejes en negrita
    axis.text = element_text(size = 12),  # Tamaño de texto para los ejes
    axis.title = element_text(size = 14),  # Tamaño de los títulos de los ejes
    axis.ticks = element_line(color = "black", size = 1.5)  # Ticks de los ejes
  )  
## 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.
# Imprimir la gráfica
print(Grafica_amplificacion3)

Graficamos el resultado del equipo

Graf_equipo_ampli <- ggplot(Amplificacion2 %>% filter(Ciclos >= 17),
                            mapping = aes(x = Ciclos, y = AALE)) +
  geom_line(size = 1, color = "blue") +
  geom_hline(yintercept = Umbral_ciclos , linetype = "dashed", color = "black", size = 1) +  # Línea de corte
  labs(title = "Curvas de Amplificación qPCR",
       x = "Ciclos",
       y = "Fluorescencia (u.a.)",
       color = "Muestra") +
  scale_x_continuous(breaks = seq(min(Amplificacion2$Ciclos), max(Amplificacion2$Ciclos), by = 2)) +  # Eje X cada 2 ciclos desde 10 hasta el máximo
  scale_y_continuous(labels = scales::number_format(accuracy = 0.05),
                     breaks = seq(min(Amplificacion2$AALE), max(Amplificacion2$AALE), by = 0.05)) +  # Redondeo de 1 dígito en Y
  theme_classic(base_size = 14) + 
  theme(
    axis.line = element_line(color = "black", size = 1.5),  # Líneas de los ejes en negrita
    axis.text = element_text(size = 12),  # Tamaño de texto para los ejes
    axis.title = element_text(size = 14),  # Tamaño de los títulos de los ejes
    axis.ticks = element_line(color = "black", size = 1.5))  # Ticks de los ejes

# Imprimir la gráfica
Graf_equipo_ampli