if (!require("pacman"))
  install.packages("pacman")
## Loading required package: pacman
library("pacman")

p_load("pheatmap", #crear los Heatmaps
       "RColorBrewer",
       "ggplot2",
       "dplyr",
       "vroom",
       "FactoMineR",
       "factoextra",
       "tibble")

Llamar la base de datos

Datos_PCR <- vroom("https://raw.githubusercontent.com/ManuelLaraMVZ/Heatmaps/refs/heads/main/miRNA_qPCR_Ct_Data_20g.csv")
## Rows: 22 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): Gene, Condition
## dbl (8): Control_1, Control_2, Control_3, Control_4, Tratamiento_1, Tratamie...
## 
## ℹ 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.
head(Datos_PCR)
## # A tibble: 6 × 10
##   Gene  Condition Control_1 Control_2 Control_3 Control_4 Tratamiento_1
##   <chr> <chr>         <dbl>     <dbl>     <dbl>     <dbl>         <dbl>
## 1 Gen_1 Target         26.4      26.8      28.6      27.1          30.1
## 2 Gen_2 Target         29.3      29.6      31.2      30.4          27.4
## 3 Gen_3 Target         27.5      25.0      27.7      26.5          28.9
## 4 Gen_4 Target         29.4      28.3      30.8      30.2          25.9
## 5 Gen_5 Target         27.9      27.9      27.8      27.7          30.6
## 6 Gen_6 Target         29.3      29.8      28.7      32.2          28.2
## # ℹ 3 more variables: Tratamiento_2 <dbl>, Tratamiento_3 <dbl>,
## #   Tratamiento_4 <dbl>

Sacar los genes de referencia, para poderlos utilizar como comparativos.

Ref_gen_prom <- Datos_PCR %>% 
  filter(Condition == "Reference") %>%
  select(-1, -2) %>% 
  summarise(across(everything(), mean, na.rm = T))
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(everything(), mean, na.rm = T)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
## 
##   # Previously
##   across(a:b, mean, na.rm = TRUE)
## 
##   # Now
##   across(a:b, \(x) mean(x, na.rm = TRUE))
head(Ref_gen_prom)
## # A tibble: 1 × 8
##   Control_1 Control_2 Control_3 Control_4 Tratamiento_1 Tratamiento_2
##       <dbl>     <dbl>     <dbl>     <dbl>         <dbl>         <dbl>
## 1      25.9      24.5      25.2      25.0          24.8          25.3
## # ℹ 2 more variables: Tratamiento_3 <dbl>, Tratamiento_4 <dbl>

Obtener el valor de Delta Ct

DCt <- Datos_PCR %>% 
  filter(Condition == "Target") %>% 
  select(-2) %>% 
  mutate(across(-1,  ~ -(. -Ref_gen_prom[[cur_column()]][[1]]),
                .names = "DCt_{.col}")) %>% 
  select(Gene, starts_with("DCt_"))

DCt
## # A tibble: 20 × 9
##    Gene   DCt_Control_1 DCt_Control_2 DCt_Control_3 DCt_Control_4
##    <chr>          <dbl>         <dbl>         <dbl>         <dbl>
##  1 Gen_1        -0.498         -2.29         -3.32          -2.12
##  2 Gen_2        -3.37          -5.07         -5.98          -5.41
##  3 Gen_3        -1.56          -0.550        -2.46          -1.57
##  4 Gen_4        -3.43          -3.83         -5.59          -5.20
##  5 Gen_5        -1.95          -3.39         -2.58          -2.73
##  6 Gen_6        -3.36          -5.31         -3.49          -7.21
##  7 Gen_7        -1.84          -2.43         -2.01          -2.02
##  8 Gen_8        -2.51          -6.10         -4.88          -5.26
##  9 Gen_9         0.0135        -2.82         -2.21          -2.10
## 10 Gen_10       -5.06          -4.81         -4.07          -6.07
## 11 Gen_11       -1.06          -2.90         -1.39          -2.69
## 12 Gen_12       -3.73          -6.66         -5.75          -5.59
## 13 Gen_13       -3.25          -4.05         -1.52          -1.02
## 14 Gen_14       -3.11          -5.47         -3.97          -3.38
## 15 Gen_15        0.560         -2.46         -2.28          -2.35
## 16 Gen_16       -4.18          -4.57         -4.27          -4.79
## 17 Gen_17       -0.0965        -2.44         -3.20          -2.50
## 18 Gen_18       -2.60          -6.26         -6.67          -3.60
## 19 Gen_19        0.543         -1.99         -0.295         -2.73
## 20 Gen_20       -4.39          -4.51         -4.64          -4.77
## # ℹ 4 more variables: DCt_Tratamiento_1 <dbl>, DCt_Tratamiento_2 <dbl>,
## #   DCt_Tratamiento_3 <dbl>, DCt_Tratamiento_4 <dbl>

Escalar los datos

miRNA_escalado <- DCt %>% 
  column_to_rownames(var = "Gene") %>% 
  scale(center = T,
        scale =  T) %>% 
  as.data.frame()

miRNA_escalado
##        DCt_Control_1 DCt_Control_2 DCt_Control_3 DCt_Control_4
## Gen_1      1.0273615    0.97484827    0.12356681    0.88604034
## Gen_2     -0.6633067   -0.71178341   -1.42820012   -1.00751528
## Gen_3      0.4047056    2.02664135    0.62271304    1.19880193
## Gen_4     -0.6996741    0.03993184   -1.20330127   -0.88867348
## Gen_5      0.1709725    0.30352416    0.55271855    0.53020016
## Gen_6     -0.6586858   -0.85578969    0.02116144   -2.04898477
## Gen_7      0.2387261    0.88592374    0.88355813    0.94306346
## Gen_8     -0.1562162   -1.33584014   -0.78765321   -0.92469228
## Gen_9      1.3281891    0.65157277    0.77009342    0.89611697
## Gen_10    -1.6591265   -0.55215317   -0.31499077   -1.39077216
## Gen_11     0.6942198    0.60205424    1.24683527    0.55568146
## Gen_12    -0.8756513   -1.67758263   -1.29395881   -1.11607700
## Gen_13    -0.5892852   -0.09290454    1.16826244    1.51751002
## Gen_14    -0.5075344   -0.95445486   -0.25857850    0.15980360
## Gen_15     1.6494768    0.86908048    0.72864265    0.75326487
## Gen_16    -1.1366262   -0.40782637   -0.42994585   -0.65295644
## Gen_17     1.2635102    0.87861819    0.19002870    0.66671244
## Gen_18    -0.2080565   -1.42992863   -1.82701632    0.03082536
## Gen_19     1.6398595    1.15700531    1.88206557    0.53061664
## Gen_20    -1.2628582   -0.37093692   -0.64600120   -0.63896584
##        DCt_Tratamiento_1 DCt_Tratamiento_2 DCt_Tratamiento_3 DCt_Tratamiento_4
## Gen_1        -0.81362577       -1.55535151      -1.283472848        -0.2403860
## Gen_2         0.81618925        0.69362505       1.152347005        -0.2686596
## Gen_3        -0.09855941       -0.61117243      -0.381782614        -0.5320576
## Gen_4         1.73541997        0.13527056       0.556662808         0.8639210
## Gen_5        -1.06726846       -0.68740035      -0.818426389        -0.7215950
## Gen_6         0.33403296        1.29626131       1.059592095         0.9572610
## Gen_7        -0.71079112       -1.38612435      -0.867055780        -1.7535139
## Gen_8         0.82881193        0.99304339       1.017338673         1.2575005
## Gen_9        -1.28729356       -1.71898941      -0.706198163         0.3275990
## Gen_10        1.22568310        1.34393777       0.705331833         0.7789604
## Gen_11       -0.60469632       -0.87969712      -1.669105648        -1.1653025
## Gen_12        0.91297985        1.05438330      -0.009842471         1.0299405
## Gen_13       -0.31205414       -0.84311362      -0.854369049        -0.7395078
## Gen_14        1.28270001        0.29881009       1.164175623         0.3726777
## Gen_15       -0.79952197       -0.40469254      -0.488693550        -0.3714511
## Gen_16       -0.04580695        1.06612733       0.672535063         0.6609948
## Gen_17       -0.76102830       -0.51127520       0.241152286        -1.5440049
## Gen_18        0.63638628        0.87575564       1.768647889         1.5273701
## Gen_19       -1.99084945       -0.08900012      -1.481662833        -1.3469197
## Gen_20        0.71929209        0.92960218       0.222826070         0.9071733

Definir los colores del Heatmap

paleta_colores <- colorRampPalette(c("#4d76ec", "white", "red"))(100)

Contruir el Heatmap

Heatmap <-pheatmap(miRNA_escalado,
         color = paleta_colores,
         cluster_rows = TRUE,
         cluster_cols = TRUE,
         show_rownames = F, #TRUE para mostrar los nombres de los genes, FALSE para quitarlos
         show_colnames = TRUE,
         fontsize = 8,
         fontsize_col = 8,
         border_color = "black",
         main = "Heatmap de expresión de miRNAs",
         fontface_row = "bold")
Heatmap

Análisis de PCA

Calcular el PCA

PCA_resultados <-  prcomp(t(miRNA_escalado),
                          center = TRUE,
                          scale. = T)
summary(PCA_resultados) 
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     3.9273 1.0981 1.06384 0.93134 0.86565 0.63804 0.46315
## Proportion of Variance 0.7712 0.0603 0.05659 0.04337 0.03747 0.02035 0.01073
## Cumulative Proportion  0.7712 0.8315 0.88808 0.93145 0.96892 0.98927 1.00000
##                             PC8
## Standard deviation     2.09e-16
## Proportion of Variance 0.00e+00
## Cumulative Proportion  1.00e+00

Screenplot: Varianza explicada por componente

fviz_eig(PCA_resultados,
         addlabels = T,
         barfill = "#bb469f",
         barcolor = "#650e50")

Gráfica de PCA (biplot)

PCA_df <- as.data.frame(PCA_resultados$x)
PCA_df$Sample <- rownames(PCA_df)

Graficarlo

PCA_plot <- ggplot(PCA_df,
                   aes(x = PC1,
                       y = PC2)) +  # Quité la coma extra aquí
  geom_point(size = 4, aes(color = Sample)) +
  #geom_text(aes(label = Sample), vjust = -0.1, size = 3) +
  geom_hline(yintercept = 0, linetype = "solid", color = "black", linewidth = 1.5) +
  geom_vline(xintercept = 0, linetype = "solid", color = "black", linewidth = 1.5) +
  scale_x_continuous(breaks = seq(floor(min(PCA_df$PC1)), ceiling(max(PCA_df$PC1)), by = 0.5)) + # Escalado en X
  scale_y_continuous(breaks = seq(floor(min(PCA_df$PC2)), ceiling(max(PCA_df$PC2)), by = 0.5)) # Escalado en Y
  labs(title = "PCA de expresión de miRNAs",
       x = "PC1",
       y = "PC2") +
  theme_minimal()
## NULL
PCA_plot

Analizar el comportamiento de los genes

PCA_resultados_genes <-  prcomp(miRNA_escalado,
                                center = T,
                                scale. = T)
summary(PCA_resultados_genes)
## Importance of components:
##                           PC1     PC2     PC3     PC4     PC5    PC6    PC7
## Standard deviation     2.4551 0.73337 0.68254 0.57125 0.50573 0.4317 0.3359
## Proportion of Variance 0.7534 0.06723 0.05823 0.04079 0.03197 0.0233 0.0141
## Cumulative Proportion  0.7534 0.82066 0.87890 0.91969 0.95166 0.9750 0.9891
##                            PC8
## Standard deviation     0.29582
## Proportion of Variance 0.01094
## Cumulative Proportion  1.00000
fviz_eig(PCA_resultados_genes, addlabels = T,
         barfill = "#bb469f",
         barcolor = "#650e50")

PCA_df_genes <- as.data.frame(PCA_resultados_genes$x)
PCA_df_genes$Gene <-  row.names(PCA_df_genes)

Gráfica

PCA_plot_genes <- ggplot(PCA_df_genes,
                         aes(x = PC1,
                             y = PC2,
                             label = Gene)) +
  geom_point(size = 4, aes(color = Gene), show.legend = T) +
 geom_text(vjust = -0.05, size = 3) +
  geom_hline(yintercept = 0, linetype = "solid", color = "black", linewidth = 1.5) +
  geom_vline(xintercept = 0, linetype = "solid", color = "black", linewidth = 1.5) +
  labs(title = "PCA de expresión de miRNAs",
       x = "PC1",
       y = "PC2") +
  theme_minimal() +
  guides(color = "none")  # Oculta la leyenda de colores

PCA_plot_genes