3. Volcano Plots for All Genes
3.1 Volcano Plot for MAST with Batch Correction
EnhancedVolcano(markers_mast_batch,
lab = rownames(markers_mast_batch),
x = "avg_log2FC",
y = "p_val_adj",
title = "MAST with Batch Correction (All Genes)",
pCutoff = 0.05,
FCcutoff = 1.0)

3.2 Volcano Plot for Wilcoxon Test
EnhancedVolcano(markers_wilcox,
lab = rownames(markers_wilcox),
x = "avg_log2FC",
y = "p_val_adj",
title = "Wilcoxon Test (All Genes)",
pCutoff = 0.05,
FCcutoff = 1.0)
Avis : One or more p-values is 0. Converting to 10^-1 * current lowest non-zero p-value...

3.3 Volcano Plot for MAST without Batch Correction
EnhancedVolcano(markers_mast_no_batch,
lab = rownames(markers_mast_no_batch),
x = "avg_log2FC",
y = "p_val_adj",
title = "MAST without Batch Correction (All Genes)",
pCutoff = 0.05,
FCcutoff = 1.0)
Avis : One or more p-values is 0. Converting to 10^-1 * current lowest non-zero p-value...

4. Filter and Summarize Results
4.1 Apply Expression Filter First
# Apply the expression filter first
markers_mast_batch <- markers_mast_batch %>%
filter(!(mean_expr_group1 < 0.2 & mean_expr_group2 < 0.2))
markers_wilcox <- markers_wilcox %>%
filter(!(mean_expr_group1 < 0.2 & mean_expr_group2 < 0.2))
markers_mast_no_batch <- markers_mast_no_batch %>%
filter(!(mean_expr_group1 < 0.2 & mean_expr_group2 < 0.2))
4.2 Apply Additional Filters for Statistical Significance and Fold
Change
# Define filtering criteria
p_val_threshold <- 0.05
logfc_threshold <- 1
# Apply additional filters for markers_mast_batch
filtered_markers_mast_batch <- markers_mast_batch %>%
filter(p_val_adj < p_val_threshold & abs(avg_log2FC) > logfc_threshold)
# Apply additional filters for markers_wilcox
filtered_markers_wilcox <- markers_wilcox %>%
filter(p_val_adj < p_val_threshold & abs(avg_log2FC) > logfc_threshold)
# Apply additional filters for markers_mast_no_batch
filtered_markers_mast_no_batch <- markers_mast_no_batch %>%
filter(p_val_adj < p_val_threshold & abs(avg_log2FC) > logfc_threshold)
# Save filtered results
write.csv(filtered_markers_mast_batch, file = "0-imp_Robj/1-MAST_with_batch_as_Covariate_filtered.csv", row.names = TRUE)
write.csv(filtered_markers_wilcox, file = "0-imp_Robj/2-Wilcox_min.pct_logfcT-0_filtered.csv", row.names = TRUE)
write.csv(filtered_markers_mast_no_batch, file = "0-imp_Robj/3-MAST_without_batch_as_Covariate_filtered.csv", row.names = TRUE)
4.3 Summary Function
summarize_markers <- function(markers) {
num_pval0 <- sum(markers$p_val_adj == 0)
num_pval1 <- sum(markers$p_val_adj == 1)
num_significant <- sum(markers$p_val_adj < 0.05)
num_upregulated <- sum(markers$avg_log2FC > 1)
num_downregulated <- sum(markers$avg_log2FC < -1)
cat("Number of genes with p_val_adj = 0:", num_pval0, "\n")
cat("Number of genes with p_val_adj = 1:", num_pval1, "\n")
cat("Number of significant genes (p_val_adj < 0.05):", num_significant, "\n")
cat("Number of upregulated genes (avg_log2FC > 1):", num_upregulated, "\n")
cat("Number of downregulated genes (avg_log2FC < -1):", num_downregulated, "\n")
}
4.4 Summarize Markers1 (MAST with Batch Correction)
cat("Markers1 Summary (MAST with Batch Correction):\n")
Markers1 Summary (MAST with Batch Correction):
summarize_markers(filtered_markers_mast_batch)
Number of genes with p_val_adj = 0: 0
Number of genes with p_val_adj = 1: 0
Number of significant genes (p_val_adj < 0.05): 3466
Number of upregulated genes (avg_log2FC > 1): 3387
Number of downregulated genes (avg_log2FC < -1): 79
4.5 Summarize Markers2 (Wilcoxon Test)
cat("Markers2 Summary (Wilcoxon Test):\n")
Markers2 Summary (Wilcoxon Test):
summarize_markers(filtered_markers_wilcox)
Number of genes with p_val_adj = 0: 3875
Number of genes with p_val_adj = 1: 0
Number of significant genes (p_val_adj < 0.05): 4535
Number of upregulated genes (avg_log2FC > 1): 4409
Number of downregulated genes (avg_log2FC < -1): 126
4.6 Summarize Markers3 (MAST without Batch Correction)
cat("Markers3 Summary (MAST without Batch Correction):\n")
Markers3 Summary (MAST without Batch Correction):
summarize_markers(filtered_markers_mast_no_batch)
Number of genes with p_val_adj = 0: 4004
Number of genes with p_val_adj = 1: 0
Number of significant genes (p_val_adj < 0.05): 4535
Number of upregulated genes (avg_log2FC > 1): 4409
Number of downregulated genes (avg_log2FC < -1): 126
5. Visualization of Filtered Results
5.1 Volcano Plot for Filtered MAST with Batch Correction
EnhancedVolcano(filtered_markers_mast_batch,
lab = rownames(filtered_markers_mast_batch),
x = "avg_log2FC",
y = "p_val_adj",
title = "Filtered MAST with Batch Correction",
pCutoff = 0.05,
FCcutoff = 1.0)

LS0tCnRpdGxlOiAiRGlmZmVyZW50aWFsIEV4cHJlc3Npb24gQW5hbHlzaXMgLSBGaWx0ZXJpbmcgYW5kIFZpc3VhbGl6YXRpb24iCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCi0tLQoKIyMgMS4gTG9hZCBMaWJyYXJpZXMKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShFbmhhbmNlZFZvbGNhbm8pCmxpYnJhcnkocGhlYXRtYXApCmxpYnJhcnkodGliYmxlKQpgYGAKCiMjIDIuIExvYWQgRGF0YQojIyMgMi4xIExvYWQgQ1NWIEZpbGVzIHdpdGggTWVhbiBFeHByZXNzaW9uCmBgYHtyfQojIExvYWQgdGhlIENTViBmaWxlcyB3aXRoIG1lYW4gZXhwcmVzc2lvbiBkYXRhCm1hcmtlcnNfbWFzdF9iYXRjaCA8LSByZWFkLmNzdigiMC1pbXBfUm9iai9URVNUX01BU1Rfd2l0aF9iYXRjaF9yZXN1bHRzMV93aXRoX21lYW5FeHByZXNzaW9uLmNzdiIsIHJvdy5uYW1lcyA9IDEpCm1hcmtlcnNfd2lsY294IDwtIHJlYWQuY3N2KCIwLWltcF9Sb2JqL1RFU1RfV2lsY294X3dpdGhvdXRfYmF0Y2hfcmVzdWx0czJfd2l0aF9tZWFuRXhwcmVzc2lvbi5jc3YiLCByb3cubmFtZXMgPSAxKQptYXJrZXJzX21hc3Rfbm9fYmF0Y2ggPC0gcmVhZC5jc3YoIjAtaW1wX1JvYmovVEVTVF9NQVNUX3dpdGhvdXRfYmF0Y2hfcmVzdWx0czNfd2l0aF9tZWFuRXhwcmVzc2lvbi5jc3YiLCByb3cubmFtZXMgPSAxKQpgYGAKCiMjIDMuIFZvbGNhbm8gUGxvdHMgZm9yIEFsbCBHZW5lcwojIyMgMy4xIFZvbGNhbm8gUGxvdCBmb3IgTUFTVCB3aXRoIEJhdGNoIENvcnJlY3Rpb24KYGBge3IsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD0xMn0KRW5oYW5jZWRWb2xjYW5vKG1hcmtlcnNfbWFzdF9iYXRjaCwKICAgICAgICAgICAgICAgIGxhYiA9IHJvd25hbWVzKG1hcmtlcnNfbWFzdF9iYXRjaCksCiAgICAgICAgICAgICAgICB4ID0gImF2Z19sb2cyRkMiLAogICAgICAgICAgICAgICAgeSA9ICJwX3ZhbF9hZGoiLAogICAgICAgICAgICAgICAgdGl0bGUgPSAiTUFTVCB3aXRoIEJhdGNoIENvcnJlY3Rpb24gKEFsbCBHZW5lcykiLAogICAgICAgICAgICAgICAgcEN1dG9mZiA9IDAuMDUsCiAgICAgICAgICAgICAgICBGQ2N1dG9mZiA9IDEuMCkKYGBgCgojIyMgMy4yIFZvbGNhbm8gUGxvdCBmb3IgV2lsY294b24gVGVzdApgYGB7ciwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEyfQpFbmhhbmNlZFZvbGNhbm8obWFya2Vyc193aWxjb3gsCiAgICAgICAgICAgICAgICBsYWIgPSByb3duYW1lcyhtYXJrZXJzX3dpbGNveCksCiAgICAgICAgICAgICAgICB4ID0gImF2Z19sb2cyRkMiLAogICAgICAgICAgICAgICAgeSA9ICJwX3ZhbF9hZGoiLAogICAgICAgICAgICAgICAgdGl0bGUgPSAiV2lsY294b24gVGVzdCAoQWxsIEdlbmVzKSIsCiAgICAgICAgICAgICAgICBwQ3V0b2ZmID0gMC4wNSwKICAgICAgICAgICAgICAgIEZDY3V0b2ZmID0gMS4wKQpgYGAKCiMjIyAzLjMgVm9sY2FubyBQbG90IGZvciBNQVNUIHdpdGhvdXQgQmF0Y2ggQ29ycmVjdGlvbgpgYGB7ciwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEyfQpFbmhhbmNlZFZvbGNhbm8obWFya2Vyc19tYXN0X25vX2JhdGNoLAogICAgICAgICAgICAgICAgbGFiID0gcm93bmFtZXMobWFya2Vyc19tYXN0X25vX2JhdGNoKSwKICAgICAgICAgICAgICAgIHggPSAiYXZnX2xvZzJGQyIsCiAgICAgICAgICAgICAgICB5ID0gInBfdmFsX2FkaiIsCiAgICAgICAgICAgICAgICB0aXRsZSA9ICJNQVNUIHdpdGhvdXQgQmF0Y2ggQ29ycmVjdGlvbiAoQWxsIEdlbmVzKSIsCiAgICAgICAgICAgICAgICBwQ3V0b2ZmID0gMC4wNSwKICAgICAgICAgICAgICAgIEZDY3V0b2ZmID0gMS4wKQpgYGAKCiMjIDQuIEZpbHRlciBhbmQgU3VtbWFyaXplIFJlc3VsdHMKIyMjIDQuMSBBcHBseSBFeHByZXNzaW9uIEZpbHRlciBGaXJzdApgYGB7cn0KIyBBcHBseSB0aGUgZXhwcmVzc2lvbiBmaWx0ZXIgZmlyc3QKbWFya2Vyc19tYXN0X2JhdGNoIDwtIG1hcmtlcnNfbWFzdF9iYXRjaCAlPiUKICBmaWx0ZXIoIShtZWFuX2V4cHJfZ3JvdXAxIDwgMC4yICYgbWVhbl9leHByX2dyb3VwMiA8IDAuMikpCgptYXJrZXJzX3dpbGNveCA8LSBtYXJrZXJzX3dpbGNveCAlPiUKICBmaWx0ZXIoIShtZWFuX2V4cHJfZ3JvdXAxIDwgMC4yICYgbWVhbl9leHByX2dyb3VwMiA8IDAuMikpCgptYXJrZXJzX21hc3Rfbm9fYmF0Y2ggPC0gbWFya2Vyc19tYXN0X25vX2JhdGNoICU+JQogIGZpbHRlcighKG1lYW5fZXhwcl9ncm91cDEgPCAwLjIgJiBtZWFuX2V4cHJfZ3JvdXAyIDwgMC4yKSkKYGBgCgojIyMgNC4yIEFwcGx5IEFkZGl0aW9uYWwgRmlsdGVycyBmb3IgU3RhdGlzdGljYWwgU2lnbmlmaWNhbmNlIGFuZCBGb2xkIENoYW5nZQpgYGB7cn0KIyBEZWZpbmUgZmlsdGVyaW5nIGNyaXRlcmlhCnBfdmFsX3RocmVzaG9sZCA8LSAwLjA1CmxvZ2ZjX3RocmVzaG9sZCA8LSAxCgojIEFwcGx5IGFkZGl0aW9uYWwgZmlsdGVycyBmb3IgbWFya2Vyc19tYXN0X2JhdGNoCmZpbHRlcmVkX21hcmtlcnNfbWFzdF9iYXRjaCA8LSBtYXJrZXJzX21hc3RfYmF0Y2ggJT4lCiAgZmlsdGVyKHBfdmFsX2FkaiA8IHBfdmFsX3RocmVzaG9sZCAmIGFicyhhdmdfbG9nMkZDKSA+IGxvZ2ZjX3RocmVzaG9sZCkKCiMgQXBwbHkgYWRkaXRpb25hbCBmaWx0ZXJzIGZvciBtYXJrZXJzX3dpbGNveApmaWx0ZXJlZF9tYXJrZXJzX3dpbGNveCA8LSBtYXJrZXJzX3dpbGNveCAlPiUKICBmaWx0ZXIocF92YWxfYWRqIDwgcF92YWxfdGhyZXNob2xkICYgYWJzKGF2Z19sb2cyRkMpID4gbG9nZmNfdGhyZXNob2xkKQoKIyBBcHBseSBhZGRpdGlvbmFsIGZpbHRlcnMgZm9yIG1hcmtlcnNfbWFzdF9ub19iYXRjaApmaWx0ZXJlZF9tYXJrZXJzX21hc3Rfbm9fYmF0Y2ggPC0gbWFya2Vyc19tYXN0X25vX2JhdGNoICU+JQogIGZpbHRlcihwX3ZhbF9hZGogPCBwX3ZhbF90aHJlc2hvbGQgJiBhYnMoYXZnX2xvZzJGQykgPiBsb2dmY190aHJlc2hvbGQpCgojIFNhdmUgZmlsdGVyZWQgcmVzdWx0cwp3cml0ZS5jc3YoZmlsdGVyZWRfbWFya2Vyc19tYXN0X2JhdGNoLCBmaWxlID0gIjAtaW1wX1JvYmovMS1NQVNUX3dpdGhfYmF0Y2hfYXNfQ292YXJpYXRlX2ZpbHRlcmVkLmNzdiIsIHJvdy5uYW1lcyA9IFRSVUUpCndyaXRlLmNzdihmaWx0ZXJlZF9tYXJrZXJzX3dpbGNveCwgZmlsZSA9ICIwLWltcF9Sb2JqLzItV2lsY294X21pbi5wY3RfbG9nZmNULURlZmF1bHRfZmlsdGVyZWQuY3N2Iiwgcm93Lm5hbWVzID0gVFJVRSkKd3JpdGUuY3N2KGZpbHRlcmVkX21hcmtlcnNfbWFzdF9ub19iYXRjaCwgZmlsZSA9ICIwLWltcF9Sb2JqLzMtTUFTVF93aXRob3V0X2JhdGNoX2FzX0NvdmFyaWF0ZV9maWx0ZXJlZC5jc3YiLCByb3cubmFtZXMgPSBUUlVFKQpgYGAKCiMjIyA0LjMgU3VtbWFyeSBGdW5jdGlvbgpgYGB7cn0Kc3VtbWFyaXplX21hcmtlcnMgPC0gZnVuY3Rpb24obWFya2VycykgewogIG51bV9wdmFsMCA8LSBzdW0obWFya2VycyRwX3ZhbF9hZGogPT0gMCkKICBudW1fcHZhbDEgPC0gc3VtKG1hcmtlcnMkcF92YWxfYWRqID09IDEpCiAgbnVtX3NpZ25pZmljYW50IDwtIHN1bShtYXJrZXJzJHBfdmFsX2FkaiA8IDAuMDUpCiAgbnVtX3VwcmVndWxhdGVkIDwtIHN1bShtYXJrZXJzJGF2Z19sb2cyRkMgPiAxKQogIG51bV9kb3ducmVndWxhdGVkIDwtIHN1bShtYXJrZXJzJGF2Z19sb2cyRkMgPCAtMSkKICAKICBjYXQoIk51bWJlciBvZiBnZW5lcyB3aXRoIHBfdmFsX2FkaiA9IDA6IiwgbnVtX3B2YWwwLCAiXG4iKQogIGNhdCgiTnVtYmVyIG9mIGdlbmVzIHdpdGggcF92YWxfYWRqID0gMToiLCBudW1fcHZhbDEsICJcbiIpCiAgY2F0KCJOdW1iZXIgb2Ygc2lnbmlmaWNhbnQgZ2VuZXMgKHBfdmFsX2FkaiA8IDAuMDUpOiIsIG51bV9zaWduaWZpY2FudCwgIlxuIikKICBjYXQoIk51bWJlciBvZiB1cHJlZ3VsYXRlZCBnZW5lcyAoYXZnX2xvZzJGQyA+IDEpOiIsIG51bV91cHJlZ3VsYXRlZCwgIlxuIikKICBjYXQoIk51bWJlciBvZiBkb3ducmVndWxhdGVkIGdlbmVzIChhdmdfbG9nMkZDIDwgLTEpOiIsIG51bV9kb3ducmVndWxhdGVkLCAiXG4iKQp9CmBgYAoKIyMjIDQuNCBTdW1tYXJpemUgTWFya2VyczEgKE1BU1Qgd2l0aCBCYXRjaCBDb3JyZWN0aW9uKQpgYGB7cn0KY2F0KCJNYXJrZXJzMSBTdW1tYXJ5IChNQVNUIHdpdGggQmF0Y2ggQ29ycmVjdGlvbik6XG4iKQpzdW1tYXJpemVfbWFya2VycyhmaWx0ZXJlZF9tYXJrZXJzX21hc3RfYmF0Y2gpCmBgYAoKIyMjIDQuNSBTdW1tYXJpemUgTWFya2VyczIgKFdpbGNveG9uIFRlc3QpCmBgYHtyfQpjYXQoIk1hcmtlcnMyIFN1bW1hcnkgKFdpbGNveG9uIFRlc3QpOlxuIikKc3VtbWFyaXplX21hcmtlcnMoZmlsdGVyZWRfbWFya2Vyc193aWxjb3gpCmBgYAoKIyMjIDQuNiBTdW1tYXJpemUgTWFya2VyczMgKE1BU1Qgd2l0aG91dCBCYXRjaCBDb3JyZWN0aW9uKQpgYGB7cn0KY2F0KCJNYXJrZXJzMyBTdW1tYXJ5IChNQVNUIHdpdGhvdXQgQmF0Y2ggQ29ycmVjdGlvbik6XG4iKQpzdW1tYXJpemVfbWFya2VycyhmaWx0ZXJlZF9tYXJrZXJzX21hc3Rfbm9fYmF0Y2gpCmBgYAoKIyMgNS4gVmlzdWFsaXphdGlvbiBvZiBGaWx0ZXJlZCBSZXN1bHRzCiMjIyA1LjEgVm9sY2FubyBQbG90IGZvciBGaWx0ZXJlZCBNQVNUIHdpdGggQmF0Y2ggQ29ycmVjdGlvbgpgYGB7ciwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEyfQpFbmhhbmNlZFZvbGNhbm8oZmlsdGVyZWRfbWFya2Vyc19tYXN0X2JhdGNoLAogICAgICAgICAgICAgICAgbGFiID0gcm93bmFtZXMoZmlsdGVyZWRfbWFya2Vyc19tYXN0X2JhdGNoKSwKICAgICAgICAgICAgICAgIHggPSAiYXZnX2xvZzJGQyIsCiAgICAgICAgICAgICAgICB5ID0gInBfdmFsX2FkaiIsCiAgICAgICAgICAgICAgICB0aXRsZSA9ICJGaWx0ZXJlZCBNQVNUIHdpdGggQmF0Y2ggQ29ycmVjdGlvbiIsCiAgICAgICAgICAgICAgICBwQ3V0b2ZmID0gMC4wNSwKICAgICAgICAgICAgICAgIEZDY3V0b2ZmID0gMS4wKQpgYGAKCgo=