Functions
source_from_github(repositoy = "DEG_functions",version = "0.2.54")
ℹ SHA-1 hash of file is ee1432006d2446b41e3bbd7e217de81ee047abc7
Welcome to enrichR
Checking connection ...
Enrichr ... Connection is Live!
FlyEnrichr ... Connection is available!
WormEnrichr ... Connection is available!
YeastEnrichr ... Connection is available!
FishEnrichr ... Connection is available!
signature
# find hpv signature genes
hmsc_deg = read.table(file = "./Data_out/HPV_analysis/hpv_deg_df.csv",row.names = 1)
opscc_deg = readRDS(file = "./Data_out/opscc_deg_5Kvargenes.rds")
scc_deg = readRDS(file = "./Data_out/scc_deg_5Kvargenes.rds")
DT::datatable(hmsc_deg, caption = "hmsc_deg")
DT::datatable(opscc_deg, caption = "opscc_deg")
DT::datatable(scc_deg, caption = "scc_deg")
avg_diff_cutoff = 0.1
fdr_cutoff = 0.1
hmsc_top = hmsc_deg %>% filter(avg_diff > avg_diff_cutoff &
fdr < fdr_cutoff) %>% rownames()
opscc_top = opscc_deg %>% filter(avg_diff > avg_diff_cutoff &
fdr < fdr_cutoff) %>% rownames()
scc_top = scc_deg %>% filter(avg_diff > avg_diff_cutoff &
fdr < fdr_cutoff) %>% rownames()
print ("intersect genes:")
[1] "intersect genes:"
intersect(intersect(hmsc_top,opscc_top),scc_top)
[1] "MT2A" "TUBA1C" "TUBA1B" "UBE2T" "LGALS1" "NUCB2" "KRT5" "MYC" "KRT18" "BTG2"
all_deg = list(hmsc_top = hmsc_top, opscc_top = opscc_top, scc_top = scc_top)
Venn
library(ggVennDiagram)
ggVennDiagram(all_deg)

HMSC GSEA

OPSCC GSEA
ranked_vec = opscc_deg[,"avg_diff"]%>% setNames(rownames(opscc_deg)) %>% na.omit() # make named vector
hyp_obj <-hypeR_fgsea(signature = ranked_vec,genesets = geneIds(genesets_h),up_only = F)
plt = hyp_dots(hyp_obj,merge = F,fdr = 0.2)
plt[[1]] + aes(size=nes)+
guides(
size = guide_legend(title="NES",reverse=T))

plt[[2]] + aes(size=nes) +scale_size(trans = 'reverse')+
guides(
size = guide_legend(title="NES",reverse=F))
Scale for 'size' is already present. Adding another scale for 'size', which will replace the existing scale.

SCC GSEA
ranked_vec = scc_deg[,"avg_diff"]%>% setNames(rownames(scc_deg)) %>% na.omit() # make named vector
hyp_obj <-hypeR_fgsea(signature = ranked_vec,genesets = geneIds(genesets_h),up_only = F)
plt = hyp_dots(hyp_obj,merge = F,fdr = 0.2)
plt[[1]] + aes(size=nes)+
guides(
size = guide_legend(title="NES",reverse=T))

plt[[2]] + aes(size=nes) +scale_size(trans = 'reverse')+
guides(
size = guide_legend(title="NES",reverse=F))
Scale for 'size' is already present. Adding another scale for 'size', which will replace the existing scale.

OPSCC boxplot
top_genes = hmsc_deg %>% arrange(desc(.$avg_diff)) %>% head(5) %>% rownames()
top_genes_expr = FetchData(object = opscc,vars = c("hpv",top_genes))
df = reshape2::melt(top_genes_expr,value.name = "Expression") %>% dplyr::rename(gene = variable)
library(rstatix)
stat.test <- df %>%
group_by(gene) %>%
wilcox_test(Expression ~ hpv) %>%
mutate(y.position = 5)
stat.test
stat.test <- stat.test %>%
add_xy_position(x = "gene", dodge = 0.8)
ggboxplot(
df,
x = "gene",
y = "Expression",
color = "hpv",
palette = "jco",
add = c("mean","boxplot"),trim = T
)+ stat_pvalue_manual(stat.test, label = "p = {p}",remove.bracket = T)
SCC boxplot
top_genes = hmsc_deg %>% arrange(desc(.$avg_diff)) %>% head(5) %>% rownames()
top_genes_expr = FetchData(object = scc_myb_patients,vars = c("hpv_positive",top_genes))
df = reshape2::melt(top_genes_expr,value.name = "Expression") %>% dplyr::rename(gene = variable)
library(rstatix)
stat.test <- df %>%
group_by(gene) %>%
wilcox_test(Expression ~ hpv_positive) %>%
mutate(y.position = 5)
stat.test
stat.test <- stat.test %>%
add_xy_position(x = "gene", dodge = 0.8)
ggboxplot(
df,
x = "gene",
y = "Expression",
color = "hpv_positive",
palette = "jco",
add = c("mean","boxplot"),trim = T
)+ stat_pvalue_manual(stat.test, label = "p = {p}",remove.bracket = T)
LS0tCnRpdGxlOiAnYHIgcnN0dWRpb2FwaTo6Z2V0U291cmNlRWRpdG9yQ29udGV4dCgpJHBhdGggJT4lIGJhc2VuYW1lKCkgJT4lIGdzdWIocGF0dGVybiA9ICJcXC5SbWQiLHJlcGxhY2VtZW50ID0gIiIpYCcgCmF1dGhvcjogIkF2aXNoYWkgV2l6ZWwiCmRhdGU6ICdgciBTeXMudGltZSgpYCcKb3V0cHV0OiAKICBodG1sX25vdGVib29rOiAKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgdG9jOiB5ZXMKICAgIHRvY19jb2xsYXBzZTogeWVzCiAgICB0b2NfZmxvYXQ6IAogICAgICBjb2xsYXBzZWQ6IEZBTFNFCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHRvY19kZXB0aDogMQotLS0KCgoKIyBGdW5jdGlvbnMKCmBgYHtyIHdhcm5pbmc9RkFMU0V9CnNvdXJjZV9mcm9tX2dpdGh1YihyZXBvc2l0b3kgPSAiREVHX2Z1bmN0aW9ucyIsdmVyc2lvbiA9ICIwLjIuNTQiKQpnZW5lc2V0c19oICA9IGdldEdtdCgiLi9JbnB1dF9kYXRhL2guYWxsLnY3LjAuc3ltYm9scy5wbHVzY2MuZ210IikKYGBgCgojIHNpZ25hdHVyZQpgYGB7cn0KIyBmaW5kIGhwdiBzaWduYXR1cmUgZ2VuZXMKaG1zY19kZWcgPSByZWFkLnRhYmxlKGZpbGUgPSAiLi9EYXRhX291dC9IUFZfYW5hbHlzaXMvaHB2X2RlZ19kZi5jc3YiLHJvdy5uYW1lcyA9IDEpCm9wc2NjX2RlZyA9IHJlYWRSRFMoZmlsZSA9ICIuL0RhdGFfb3V0L29wc2NjX2RlZ181S3ZhcmdlbmVzLnJkcyIpCnNjY19kZWcgPSByZWFkUkRTKGZpbGUgPSAiLi9EYXRhX291dC9zY2NfZGVnXzVLdmFyZ2VuZXMucmRzIikKCgpEVDo6ZGF0YXRhYmxlKGhtc2NfZGVnLCBjYXB0aW9uID0gImhtc2NfZGVnIikKRFQ6OmRhdGF0YWJsZShvcHNjY19kZWcsIGNhcHRpb24gPSAib3BzY2NfZGVnIikKRFQ6OmRhdGF0YWJsZShzY2NfZGVnLCBjYXB0aW9uID0gInNjY19kZWciKQoKYXZnX2RpZmZfY3V0b2ZmID0gMC4xCmZkcl9jdXRvZmYgPSAwLjEKCmhtc2NfdG9wID0gaG1zY19kZWcgJT4lIGZpbHRlcihhdmdfZGlmZiA+IGF2Z19kaWZmX2N1dG9mZiAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkciA8IGZkcl9jdXRvZmYpICU+JSByb3duYW1lcygpCm9wc2NjX3RvcCA9IG9wc2NjX2RlZyAlPiUgZmlsdGVyKGF2Z19kaWZmID4gYXZnX2RpZmZfY3V0b2ZmICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHIgPCBmZHJfY3V0b2ZmKSAlPiUgcm93bmFtZXMoKQpzY2NfdG9wID0gc2NjX2RlZyAlPiUgZmlsdGVyKGF2Z19kaWZmID4gYXZnX2RpZmZfY3V0b2ZmICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkciA8IGZkcl9jdXRvZmYpICU+JSByb3duYW1lcygpCgpwcmludCAoImludGVyc2VjdCBnZW5lczoiKQppbnRlcnNlY3QoaW50ZXJzZWN0KGhtc2NfdG9wLG9wc2NjX3RvcCksc2NjX3RvcCkKYWxsX2RlZyA9IGxpc3QoaG1zY190b3AgPSBobXNjX3RvcCwgb3BzY2NfdG9wID0gb3BzY2NfdG9wLCBzY2NfdG9wID0gc2NjX3RvcCkKCmBgYAojIFZlbm4KYGBge3J9CmxpYnJhcnkoZ2dWZW5uRGlhZ3JhbSkKZ2dWZW5uRGlhZ3JhbShhbGxfZGVnKQpgYGAKIyBITVNDIEdTRUEKCmBgYHtyfQpyYW5rZWRfdmVjID0gaG1zY19kZWdbLCJhdmdfZGlmZiJdJT4lIHNldE5hbWVzKHJvd25hbWVzKGhtc2NfZGVnKSkgJT4lIG5hLm9taXQoKSAjIG1ha2UgbmFtZWQgdmVjdG9yCmh5cF9vYmogPC1oeXBlUl9mZ3NlYShzaWduYXR1cmUgPSByYW5rZWRfdmVjLGdlbmVzZXRzID0gZ2VuZUlkcyhnZW5lc2V0c19oKSx1cF9vbmx5ID0gRikKCnBsdCA9IGh5cF9kb3RzKGh5cF9vYmosbWVyZ2UgPSBGLGZkciA9IDAuMikKcGx0W1sxXV0gKyBhZXMoc2l6ZT1uZXMpKyAKICBndWlkZXMoCiAgICBzaXplID0gZ3VpZGVfbGVnZW5kKHRpdGxlPSJORVMiLHJldmVyc2U9VCkpCgoKYGBgCgojIE9QU0NDIEdTRUEKCmBgYHtyfQpyYW5rZWRfdmVjID0gb3BzY2NfZGVnWywiYXZnX2RpZmYiXSU+JSBzZXROYW1lcyhyb3duYW1lcyhvcHNjY19kZWcpKSAlPiUgbmEub21pdCgpICMgbWFrZSBuYW1lZCB2ZWN0b3IKaHlwX29iaiA8LWh5cGVSX2Znc2VhKHNpZ25hdHVyZSA9IHJhbmtlZF92ZWMsZ2VuZXNldHMgPSBnZW5lSWRzKGdlbmVzZXRzX2gpLHVwX29ubHkgPSBGKQoKcGx0ID0gaHlwX2RvdHMoaHlwX29iaixtZXJnZSA9IEYsZmRyID0gMC4yKQpwbHRbWzFdXSArIGFlcyhzaXplPW5lcykrIAogIGd1aWRlcygKICAgIHNpemUgPSBndWlkZV9sZWdlbmQodGl0bGU9Ik5FUyIscmV2ZXJzZT1UKSkKCnBsdFtbMl1dICsgYWVzKHNpemU9bmVzKSArc2NhbGVfc2l6ZSh0cmFucyA9ICdyZXZlcnNlJykrCiAgZ3VpZGVzKAogICAgc2l6ZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZT0iTkVTIixyZXZlcnNlPUYpKQoKCmBgYAoKIyBTQ0MgR1NFQQpgYGB7cn0KcmFua2VkX3ZlYyA9IHNjY19kZWdbLCJhdmdfZGlmZiJdJT4lIHNldE5hbWVzKHJvd25hbWVzKHNjY19kZWcpKSAlPiUgbmEub21pdCgpICMgbWFrZSBuYW1lZCB2ZWN0b3IKaHlwX29iaiA8LWh5cGVSX2Znc2VhKHNpZ25hdHVyZSA9IHJhbmtlZF92ZWMsZ2VuZXNldHMgPSBnZW5lSWRzKGdlbmVzZXRzX2gpLHVwX29ubHkgPSBGKQoKcGx0ID0gaHlwX2RvdHMoaHlwX29iaixtZXJnZSA9IEYsZmRyID0gMC4yKQpwbHRbWzFdXSArIGFlcyhzaXplPW5lcykrIAogIGd1aWRlcygKICAgIHNpemUgPSBndWlkZV9sZWdlbmQodGl0bGU9Ik5FUyIscmV2ZXJzZT1UKSkKCnBsdFtbMl1dICsgYWVzKHNpemU9bmVzKSArc2NhbGVfc2l6ZSh0cmFucyA9ICdyZXZlcnNlJykrCiAgZ3VpZGVzKAogICAgc2l6ZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZT0iTkVTIixyZXZlcnNlPUYpKQoKYGBgCiMgT1BTQ0MgYm94cGxvdApgYGB7cn0KCnRvcF9nZW5lcyA9IGhtc2NfZGVnICU+JSBhcnJhbmdlKGRlc2MoLiRhdmdfZGlmZikpICU+JSBoZWFkKDUpICU+JSByb3duYW1lcygpCgp0b3BfZ2VuZXNfZXhwciA9IEZldGNoRGF0YShvYmplY3QgPSBvcHNjYyx2YXJzID0gYygiaHB2Iix0b3BfZ2VuZXMpKQpkZiA9IHJlc2hhcGUyOjptZWx0KHRvcF9nZW5lc19leHByLHZhbHVlLm5hbWUgPSAiRXhwcmVzc2lvbiIpICU+JSBkcGx5cjo6cmVuYW1lKGdlbmUgPSB2YXJpYWJsZSkKCmxpYnJhcnkocnN0YXRpeCkKc3RhdC50ZXN0IDwtIGRmICU+JQogICAgZ3JvdXBfYnkoZ2VuZSkgJT4lCiAgd2lsY294X3Rlc3QoRXhwcmVzc2lvbiB+IGhwdikgJT4lCiAgbXV0YXRlKHkucG9zaXRpb24gPSA1KQoKc3RhdC50ZXN0CgpzdGF0LnRlc3QgPC0gc3RhdC50ZXN0ICU+JSAKICBhZGRfeHlfcG9zaXRpb24oeCA9ICJnZW5lIiwgZG9kZ2UgPSAwLjgpCgpnZ2JveHBsb3QoCiAgZGYsCiAgeCA9ICJnZW5lIiwKICB5ID0gIkV4cHJlc3Npb24iLAogIGNvbG9yID0gImhwdiIsCiAgcGFsZXR0ZSA9ICJqY28iLAogIGFkZCA9IGMoIm1lYW4iLCJib3hwbG90IiksdHJpbSA9IFQKKSsgc3RhdF9wdmFsdWVfbWFudWFsKHN0YXQudGVzdCwgbGFiZWwgPSAicCA9IHtwfSIscmVtb3ZlLmJyYWNrZXQgPSBUKQpgYGAKIyBTQ0MgYm94cGxvdApgYGB7cn0KCnRvcF9nZW5lcyA9IGhtc2NfZGVnICU+JSBhcnJhbmdlKGRlc2MoLiRhdmdfZGlmZikpICU+JSBoZWFkKDUpICU+JSByb3duYW1lcygpCgp0b3BfZ2VuZXNfZXhwciA9IEZldGNoRGF0YShvYmplY3QgPSBzY2NfbXliX3BhdGllbnRzLHZhcnMgPSBjKCJocHZfcG9zaXRpdmUiLHRvcF9nZW5lcykpCmRmID0gcmVzaGFwZTI6Om1lbHQodG9wX2dlbmVzX2V4cHIsdmFsdWUubmFtZSA9ICJFeHByZXNzaW9uIikgJT4lIGRwbHlyOjpyZW5hbWUoZ2VuZSA9IHZhcmlhYmxlKQoKbGlicmFyeShyc3RhdGl4KQpzdGF0LnRlc3QgPC0gZGYgJT4lCiAgICBncm91cF9ieShnZW5lKSAlPiUKICB3aWxjb3hfdGVzdChFeHByZXNzaW9uIH4gaHB2X3Bvc2l0aXZlKSAlPiUKICBtdXRhdGUoeS5wb3NpdGlvbiA9IDUpCgpzdGF0LnRlc3QKCnN0YXQudGVzdCA8LSBzdGF0LnRlc3QgJT4lIAogIGFkZF94eV9wb3NpdGlvbih4ID0gImdlbmUiLCBkb2RnZSA9IDAuOCkKCmdnYm94cGxvdCgKICBkZiwKICB4ID0gImdlbmUiLAogIHkgPSAiRXhwcmVzc2lvbiIsCiAgY29sb3IgPSAiaHB2X3Bvc2l0aXZlIiwKICBwYWxldHRlID0gImpjbyIsCiAgYWRkID0gYygibWVhbiIsImJveHBsb3QiKSx0cmltID0gVAopKyBzdGF0X3B2YWx1ZV9tYW51YWwoc3RhdC50ZXN0LCBsYWJlbCA9ICJwID0ge3B9IixyZW1vdmUuYnJhY2tldCA9IFQpCmBgYAoK