Instalación de paquetes

if(!require(pacman))
  install.packages("pacman") # para que no se estƩ instalando todo el tiempo
## 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

Melt_curves <- read.csv("https://raw.githubusercontent.com/ManuelLaraMVZ/resultados_PCR_practica/refs/heads/main/Disoci_ejemplo1.csv")

Melt_curves
##    Temperature         A1        B1         C1         D1         E1
## 1         65.0 1.95991430 1.9817206 2.10924940 2.11421730 0.08690918
## 2         65.5 1.94166150 1.9890553 2.06226230 2.07868460 0.08339536
## 3         66.0 1.89047470 1.9349171 2.03156570 2.07136200 0.09324405
## 4         66.5 1.85573940 1.8907771 1.97575890 2.01712870 0.06762622
## 5         67.0 1.82315300 1.8862886 1.94344440 1.97850380 0.07379662
## 6         67.5 1.76858700 1.8291596 1.89828250 1.93234180 0.07663029
## 7         68.0 1.73530770 1.7794550 1.86295590 1.87147970 0.06855214
## 8         68.5 1.69660070 1.7627124 1.79349590 1.84359900 0.06892930
## 9         69.0 1.65359310 1.7137460 1.79432180 1.80108200 0.06648921
## 10        69.5 1.59794010 1.6409743 1.74891100 1.75890290 0.07442823
## 11        70.0 1.56881860 1.6270256 1.68404650 1.71568160 0.06959379
## 12        70.5 1.52067800 1.5984006 1.64760860 1.69375200 0.06981125
## 13        71.0 1.50554340 1.5452015 1.60377530 1.67523520 0.06965090
## 14        71.5 1.45887430 1.5019381 1.57469770 1.62495900 0.06671238
## 15        72.0 1.42736950 1.4835738 1.52864840 1.56571910 0.07694548
## 16        72.5 1.38052690 1.4535912 1.48963700 1.51790270 0.07068383
## 17        73.0 1.35778510 1.4035882 1.45435580 1.48500080 0.07326801
## 18        73.5 1.31225650 1.3710668 1.41508630 1.43586750 0.07013387
## 19        74.0 1.28151900 1.3353099 1.37324300 1.39817740 0.07751608
## 20        74.5 1.25276060 1.2962568 1.33869020 1.37123980 0.05670674
## 21        75.0 1.19170270 1.2692763 1.29040620 1.33831430 0.07426139
## 22        75.5 1.17707530 1.2318747 1.28598010 1.29690920 0.06299234
## 23        76.0 1.14088600 1.1953775 1.23172620 1.26915030 0.06806605
## 24        76.5 1.10102080 1.1604762 1.18276390 1.22140250 0.06024575
## 25        77.0 1.08004340 1.1369629 1.16464420 1.18488180 0.06781165
## 26        77.5 1.04755620 1.1049975 1.13221480 1.16585640 0.06792766
## 27        78.0 1.02446200 1.0705391 1.09089330 1.13427620 0.06784123
## 28        78.5 0.97937495 1.0336571 1.04647020 1.09842440 0.06248471
## 29        79.0 0.92962420 0.9963106 1.02979040 1.04471660 0.06572264
## 30        79.5 0.88719790 0.9536811 0.96606290 1.00081040 0.06436008
## 31        80.0 0.80395730 0.8963721 0.89044875 0.94807490 0.07229371
## 32        80.5 0.73346520 0.7943460 0.79964320 0.88524190 0.06550592
## 33        81.0 0.58485484 0.6653679 0.66462280 0.79034305 0.06494854
## 34        81.5 0.34847772 0.4386750 0.43019630 0.63313437 0.05818453
## 35        82.0 0.10281600 0.1733983 0.09944984 0.26385185 0.05741638
## 36        82.5 0.06809159 0.1556299 0.06577800 0.12568206 0.06166074
## 37        83.0 0.06620151 0.1480810 0.07425380 0.11033887 0.06796121
## 38        83.5 0.05839354 0.1512575 0.05767015 0.11114920 0.06175677
## 39        84.0 0.06339251 0.1448747 0.06044384 0.10261554 0.06917807
## 40        84.5 0.06858709 0.1414173 0.06308614 0.10054772 0.06024042
## 41        85.0 0.05845202 0.1363287 0.06821634 0.12267121 0.05699976
## 42        85.5 0.06003726 0.1450752 0.06245253 0.10618307 0.06169379
## 43        86.0 0.05907615 0.1377606 0.06725356 0.10404797 0.06278355
## 44        86.5 0.05099247 0.1362107 0.06197858 0.10583051 0.05319569
## 45        87.0 0.05926469 0.1474531 0.06185695 0.10852818 0.07390389
## 46        87.5 0.05091721 0.1506169 0.06453706 0.12259605 0.06097216
## 47        88.0 0.05483197 0.1523574 0.05536877 0.11274529 0.05814572
## 48        88.5 0.04854523 0.1373991 0.05248444 0.11009809 0.06790365
## 49        89.0 0.06085235 0.1458199 0.05889775 0.11495476 0.06388615
## 50        89.5 0.06081519 0.1423826 0.04807428 0.11074489 0.06347746
## 51        90.0 0.04980278 0.1238866 0.05484743 0.11520148 0.05686092
## 52        90.5 0.05777313 0.1376873 0.05039824 0.10385056 0.06707248
## 53        91.0 0.05987923 0.1240075 0.05678585 0.09460852 0.05220089
## 54        91.5 0.07305728 0.1350825 0.06265996 0.10816262 0.05759020
## 55        92.0 0.05198640 0.1591869 0.05669413 0.10521951 0.05834087

Modificar base de datos

Melt_curves2 <- Melt_curves %>%
  mutate(Temperatura = Temperature,
         DDR = A1,
         JRWF = B1,
         PPOF = C1,
         MLL = D1,
         H2O = E1) %>% 
  select(-Temperature:-E1)

Melt_curves2
##    Temperatura        DDR      JRWF       PPOF        MLL        H2O
## 1         65.0 1.95991430 1.9817206 2.10924940 2.11421730 0.08690918
## 2         65.5 1.94166150 1.9890553 2.06226230 2.07868460 0.08339536
## 3         66.0 1.89047470 1.9349171 2.03156570 2.07136200 0.09324405
## 4         66.5 1.85573940 1.8907771 1.97575890 2.01712870 0.06762622
## 5         67.0 1.82315300 1.8862886 1.94344440 1.97850380 0.07379662
## 6         67.5 1.76858700 1.8291596 1.89828250 1.93234180 0.07663029
## 7         68.0 1.73530770 1.7794550 1.86295590 1.87147970 0.06855214
## 8         68.5 1.69660070 1.7627124 1.79349590 1.84359900 0.06892930
## 9         69.0 1.65359310 1.7137460 1.79432180 1.80108200 0.06648921
## 10        69.5 1.59794010 1.6409743 1.74891100 1.75890290 0.07442823
## 11        70.0 1.56881860 1.6270256 1.68404650 1.71568160 0.06959379
## 12        70.5 1.52067800 1.5984006 1.64760860 1.69375200 0.06981125
## 13        71.0 1.50554340 1.5452015 1.60377530 1.67523520 0.06965090
## 14        71.5 1.45887430 1.5019381 1.57469770 1.62495900 0.06671238
## 15        72.0 1.42736950 1.4835738 1.52864840 1.56571910 0.07694548
## 16        72.5 1.38052690 1.4535912 1.48963700 1.51790270 0.07068383
## 17        73.0 1.35778510 1.4035882 1.45435580 1.48500080 0.07326801
## 18        73.5 1.31225650 1.3710668 1.41508630 1.43586750 0.07013387
## 19        74.0 1.28151900 1.3353099 1.37324300 1.39817740 0.07751608
## 20        74.5 1.25276060 1.2962568 1.33869020 1.37123980 0.05670674
## 21        75.0 1.19170270 1.2692763 1.29040620 1.33831430 0.07426139
## 22        75.5 1.17707530 1.2318747 1.28598010 1.29690920 0.06299234
## 23        76.0 1.14088600 1.1953775 1.23172620 1.26915030 0.06806605
## 24        76.5 1.10102080 1.1604762 1.18276390 1.22140250 0.06024575
## 25        77.0 1.08004340 1.1369629 1.16464420 1.18488180 0.06781165
## 26        77.5 1.04755620 1.1049975 1.13221480 1.16585640 0.06792766
## 27        78.0 1.02446200 1.0705391 1.09089330 1.13427620 0.06784123
## 28        78.5 0.97937495 1.0336571 1.04647020 1.09842440 0.06248471
## 29        79.0 0.92962420 0.9963106 1.02979040 1.04471660 0.06572264
## 30        79.5 0.88719790 0.9536811 0.96606290 1.00081040 0.06436008
## 31        80.0 0.80395730 0.8963721 0.89044875 0.94807490 0.07229371
## 32        80.5 0.73346520 0.7943460 0.79964320 0.88524190 0.06550592
## 33        81.0 0.58485484 0.6653679 0.66462280 0.79034305 0.06494854
## 34        81.5 0.34847772 0.4386750 0.43019630 0.63313437 0.05818453
## 35        82.0 0.10281600 0.1733983 0.09944984 0.26385185 0.05741638
## 36        82.5 0.06809159 0.1556299 0.06577800 0.12568206 0.06166074
## 37        83.0 0.06620151 0.1480810 0.07425380 0.11033887 0.06796121
## 38        83.5 0.05839354 0.1512575 0.05767015 0.11114920 0.06175677
## 39        84.0 0.06339251 0.1448747 0.06044384 0.10261554 0.06917807
## 40        84.5 0.06858709 0.1414173 0.06308614 0.10054772 0.06024042
## 41        85.0 0.05845202 0.1363287 0.06821634 0.12267121 0.05699976
## 42        85.5 0.06003726 0.1450752 0.06245253 0.10618307 0.06169379
## 43        86.0 0.05907615 0.1377606 0.06725356 0.10404797 0.06278355
## 44        86.5 0.05099247 0.1362107 0.06197858 0.10583051 0.05319569
## 45        87.0 0.05926469 0.1474531 0.06185695 0.10852818 0.07390389
## 46        87.5 0.05091721 0.1506169 0.06453706 0.12259605 0.06097216
## 47        88.0 0.05483197 0.1523574 0.05536877 0.11274529 0.05814572
## 48        88.5 0.04854523 0.1373991 0.05248444 0.11009809 0.06790365
## 49        89.0 0.06085235 0.1458199 0.05889775 0.11495476 0.06388615
## 50        89.5 0.06081519 0.1423826 0.04807428 0.11074489 0.06347746
## 51        90.0 0.04980278 0.1238866 0.05484743 0.11520148 0.05686092
## 52        90.5 0.05777313 0.1376873 0.05039824 0.10385056 0.06707248
## 53        91.0 0.05987923 0.1240075 0.05678585 0.09460852 0.05220089
## 54        91.5 0.07305728 0.1350825 0.06265996 0.10816262 0.05759020
## 55        92.0 0.05198640 0.1591869 0.05669413 0.10521951 0.05834087

Agrupar datos

Melt_curves3 <- Melt_curves2 %>%
  pivot_longer(cols = -Temperatura,
               names_to = "Muestras",
               values_to = "Fluorescencias")
Melt_curves3 
## # A tibble: 275 Ɨ 3
##    Temperatura Muestras Fluorescencias
##          <dbl> <chr>             <dbl>
##  1        65   DDR              1.96  
##  2        65   JRWF             1.98  
##  3        65   PPOF             2.11  
##  4        65   MLL              2.11  
##  5        65   H2O              0.0869
##  6        65.5 DDR              1.94  
##  7        65.5 JRWF             1.99  
##  8        65.5 PPOF             2.06  
##  9        65.5 MLL              2.08  
## 10        65.5 H2O              0.0834
## # ℹ 265 more rows

Graficar

Grafica_melt <- ggplot(Melt_curves3,
                          aes(x = Temperatura,
                              y = Fluorescencias,
                              color = Muestras)) +
  geom_line(linewidth = 1.5) +
  theme_classic(base_family = "Times New Roman") + 
  labs(title = "Curvas de disociación",
       subtitle = "Todas las muestras",
       caption = "Diseñó: Natalia Oropeza",
       x = "Temeperatura (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_color_brewer(palette = "Set2")
## 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_melt

Calcular las derivadas negativas de las curvas de disociación

Derivadas <- Melt_curves2 %>%
  mutate(across(DDR:H2O,
                ~-c(NA,diff(.x)/diff(Melt_curves2$Temperatura)), .names = "d_{col}")) %>%
  select(-DDR:-H2O) %>%
  slice(-1) # para eliminar primer fila (NA)

Derivadas
##    Temperatura        d_DDR      d_JRWF       d_PPOF        d_MLL        d_H2O
## 1         65.5  0.036505600 -0.01466940  0.093974200  0.071065400  0.007027630
## 2         66.0  0.102373600  0.10827640  0.061393200  0.014645200 -0.019697380
## 3         66.5  0.069470600  0.08828000  0.111613600  0.108466600  0.051235668
## 4         67.0  0.065172800  0.00897700  0.064629000  0.077249800 -0.012340808
## 5         67.5  0.109132000  0.11425800  0.090323800  0.092324000 -0.005667348
## 6         68.0  0.066558600  0.09940920  0.070653200  0.121724200  0.016156308
## 7         68.5  0.077414000  0.03348520  0.138920000  0.055761400 -0.000754320
## 8         69.0  0.086015200  0.09793280 -0.001651800  0.085034000  0.004880180
## 9         69.5  0.111306000  0.14554340  0.090821600  0.084358200 -0.015878040
## 10        70.0  0.058243000  0.02789740  0.129729000  0.086442600  0.009668880
## 11        70.5  0.096281200  0.05725000  0.072875800  0.043859200 -0.000434920
## 12        71.0  0.030269200  0.10639820  0.087666600  0.037033600  0.000320700
## 13        71.5  0.093338200  0.08652680  0.058155200  0.100552400  0.005877040
## 14        72.0  0.063009600  0.03672860  0.092098600  0.118479800 -0.020466192
## 15        72.5  0.093685200  0.05996520  0.078022800  0.095632800  0.012523292
## 16        73.0  0.045483600  0.10000600  0.070562400  0.065803800 -0.005168360
## 17        73.5  0.091057200  0.06504280  0.078539000  0.098266600  0.006268280
## 18        74.0  0.061475000  0.07151380  0.083686600  0.075380200 -0.014764420
## 19        74.5  0.057516800  0.07810620  0.069105600  0.053875200  0.041618684
## 20        75.0  0.122115800  0.05396100  0.096568000  0.065851000 -0.035109304
## 21        75.5  0.029254800  0.07480320  0.008852200  0.082810200  0.022538100
## 22        76.0  0.072378600  0.07299440  0.108507800  0.055517800 -0.010147412
## 23        76.5  0.079730400  0.06980260  0.097924600  0.095495600  0.015640602
## 24        77.0  0.041954800  0.04702660  0.036239400  0.073041400 -0.015131802
## 25        77.5  0.064974400  0.06393080  0.064858800  0.038050800 -0.000232028
## 26        78.0  0.046188400  0.06891680  0.082643000  0.063160400  0.000172860
## 27        78.5  0.090174100  0.07376400  0.088846200  0.071703600  0.010713040
## 28        79.0  0.099501500  0.07469300  0.033359600  0.107415600 -0.006475860
## 29        79.5  0.084852600  0.08525900  0.127455000  0.087812400  0.002725120
## 30        80.0  0.166481200  0.11461792  0.151228300  0.105471000 -0.015867260
## 31        80.5  0.140984200  0.20405222  0.181611100  0.125666000  0.013575580
## 32        81.0  0.297220720  0.25795626  0.270040800  0.189797700  0.001114760
## 33        81.5  0.472754240  0.45338576  0.468853000  0.314417360  0.013528026
## 34        82.0  0.491323440  0.53055352  0.661492920  0.738565040  0.001536288
## 35        82.5  0.069448828  0.03553678  0.067343690  0.276339580 -0.008488722
## 36        83.0  0.003780152  0.01509770 -0.016951610  0.030686380 -0.012600932
## 37        83.5  0.015615930 -0.00635296  0.033167308 -0.001620660  0.012408880
## 38        84.0 -0.009997920  0.01276560 -0.005547388  0.017067320 -0.014842600
## 39        84.5 -0.010389170  0.00691472 -0.005284610  0.004135648  0.017875300
## 40        85.0  0.020270144  0.01017732 -0.010260390 -0.044246988  0.006481324
## 41        85.5 -0.003170484 -0.01749302  0.011527630  0.032976272 -0.009388064
## 42        86.0  0.001922220  0.01462926 -0.009602070  0.004270208 -0.002179520
## 43        86.5  0.016167366  0.00309968  0.010549960 -0.003565080  0.019175720
## 44        87.0 -0.016544438 -0.02248466  0.000243250 -0.005395340 -0.041416400
## 45        87.5  0.016694948 -0.00632764 -0.005360202 -0.028135740  0.025863464
## 46        88.0 -0.007829516 -0.00348112  0.018336564  0.019701520  0.005652868
## 47        88.5  0.012573488  0.02991656  0.005768668  0.005294392 -0.019515852
## 48        89.0 -0.024614238 -0.01684142 -0.012826624 -0.009713332  0.008035000
## 49        89.5  0.000074310  0.00687444  0.021646938  0.008419748  0.000817380
## 50        90.0  0.022024812  0.03699217 -0.013546302 -0.008913188  0.013233080
## 51        90.5 -0.015940692 -0.02760145  0.008898392  0.022701840 -0.020423120
## 52        91.0 -0.004212190  0.02735946 -0.012775224  0.018484088  0.029743180
## 53        91.5 -0.026356110 -0.02214996 -0.011748228 -0.027108208 -0.010778630
## 54        92.0  0.042141768 -0.04820880  0.011931672  0.005886228 -0.001501322

Reordenar los datos

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_DDR      0.0365 
##  2        65.5 d_JRWF    -0.0147 
##  3        65.5 d_PPOF     0.0940 
##  4        65.5 d_MLL      0.0711 
##  5        65.5 d_H2O      0.00703
##  6        66   d_DDR      0.102  
##  7        66   d_JRWF     0.108  
##  8        66   d_PPOF     0.0614 
##  9        66   d_MLL      0.0146 
## 10        66   d_H2O     -0.0197 
## # ℹ 260 more rows

Graficar Derivadas

library(ggplot2)

Grafica_derivada <- ggplot(Derivadas2,
                           aes(x = Temperatura,
                               y = Derivadas,
                               color = Muestras)) +
  geom_line(linewidth = 1.5) +
  theme_classic(base_family = "Times New Roman") +   
  labs(title = "Curvas de la derivada negativa de disociación",
       subtitle = "Todas las muestras",
       caption = "Diseñó: Natalia Oropeza",
       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")) +
  # Escala del eje x de 2.5 en 2.5
  scale_x_continuous(breaks = seq(min(Derivadas2$Temperatura),
                                  max(Derivadas2$Temperatura),
                                  by = 2.5)) +
  
  scale_color_brewer(palette = "Set2")

Grafica_derivada

Construir una grƔfica 3D

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 = list(
      text = "Curvas de la derivada negativa de disociación<br>
              <sup>Todas las muestras</sup><br>
              <sup>Diseñó: Natalia Oropeza</sup>",
      font = list(family = "Times New Roman", size = 20)
    ),
    scene = list(
      xaxis = list(
        title = "Temperatura (°C)",
        tick0 = min(Derivadas2$Temperatura),
        dtick = 2.5,   # eje X de 2.5 en 2.5
        titlefont = list(family = "Times New Roman", size = 16),
        tickfont = list(family = "Times New Roman", size = 14)
      ),
      yaxis = list(
        title = "Muestras",
        titlefont = list(family = "Times New Roman", size = 16),
        tickfont = list(family = "Times New Roman", size = 14)
      ),
      zaxis = list(
        title = "- ΔT / ΔF",   # aquí el cambio solicitado
        titlefont = list(family = "Times New Roman", size = 16),
        tickfont = list(family = "Times New Roman", size = 14)
      )
    )
  )

Grafica_derivada_3D

Grafica del equipo

Grafica_derivada_equipo <- ggplot(Derivadas,
                                  aes(x = Temperatura)) +
  geom_line(data = Derivadas,
            aes(x = Temperatura, y = d_MLL, color = "MLL"),
            linewidth = 1.2) +
  geom_line(data = Derivadas,
            aes(x = Temperatura, y = d_H2O, color = "H2O"),
            linewidth = 1.2) +
  scale_color_manual(values = c("MLL" = "#8E8FAD",
                                "H2O" = "#89AD91")) +
  labs(title = "Curvas de la derivada negativa de disociación",
       subtitle = "Todas las muestras",
       caption = "Diseñó: Natalia Oropeza",
       x = "Temperatura (°C)",
       y = expression(-Delta*T / Delta*F)) +
  theme_classic(base_family = "Times New Roman") +
  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 = 2.5))

Grafica_derivada_equipo

Etiquetas (saber valor exacto de Tm)

Pico <- max(Derivadas$d_MLL)

Pico
## [1] 0.738565

Temperatura

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

Tm
##   Temperatura    d_MLL
## 1          82 0.738565

GrƔfica con etiqueta

Grafica_derivada_equipo2 <- Grafica_derivada_equipo + 
  geom_vline(xintercept = Tm$Temperatura, 
             color = "#C23EBF", 
             linetype = "dashed", 
             linewidth = 1) +
  geom_label_repel(data = Tm,
                   aes(x = Tm$Temperatura, 
                       y = d_MLL,
                 label = paste("Tm =", Tm$Temperatura)),
             family = "Times New Roman",
             fontface = "bold",
             color = "black",
             fill = "#EADAF1",   # color de fondo del rectƔngulo
             label.r = unit(0.25, "lines"))  # esquinas redondeadas

Grafica_derivada_equipo2
## Warning: Use of `Tm$Temperatura` is discouraged.
## ℹ Use `Temperatura` instead.
## Use of `Tm$Temperatura` is discouraged.
## ℹ Use `Temperatura` instead.