Skip to content

Commit

Permalink
Version 1.09
Browse files Browse the repository at this point in the history
Volcano plot
  • Loading branch information
CHKim5 committed Aug 2, 2021
1 parent c9b6027 commit 6ee95e7
Show file tree
Hide file tree
Showing 6 changed files with 233 additions and 4 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: LMSstat
Title: AUTOMATION OF STATISTICAL TESTS WITH AN IDENTICAL DATA INPUT.
Version: 1.0.8
Version: 1.0.9
Authors@R:
person(given = "CHANG-HO",
family = "KIM",
Expand Down
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export(NMDS)
export(Norm_test)
export(PCA)
export(PCoA)
export(Volcano)
export(aroc_compute)
export(data_summary)
export(roc_all)
160 changes: 160 additions & 0 deletions R/Volcano.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#' Volcano plot for every group comparison
#'
#' @param data data inheriting from Allstats
#' @param asterisk statistics inheriting from Allstats # "t-test", "u-test", "Scheffe", "Dunn"
#' @param reverse reverse the direction of fold change
#' @param fig_width figure size
#' @param FC_log Fold change log transformation value
#' @param pval_log p_value log transformation value
#' @param fig_height figure size
#' @param dotsize dotsize
#' @param x_limit x axis limt c( -3,3)
#' @param y_limit y axis limit c(0, 100)
#' @param pval_intercept intercept for identification 0.05
#' @param sig_label label significant variables
#' @param color colors used for ggplots.color=c("#FF3300","#FF6600","#FFCC00","#99CC00","#0066CC","#660099")
#'
#' @return Volcano Plot
#' @export
#'
#' @examples data(Data)
#' Test<-Allstats(Data)
#' Volcano(Test,asterisk = "t-test")

Volcano<-function(data,
asterisk = "t-test",
reverse = F,
fig_width = NA,
FC_log = 2,
pval_log = 10,
fig_height = NA,
dotsize=2,
x_limit = c(-15,15),
y_limit = c(-2,6),
pval_intercept = 0.05,
sig_label = T,
color = c("blue","black", "red")){
ifelse(!dir.exists(file.path(getwd(), "Volcano")), dir.create(file.path(getwd(), "Volcano")), FALSE)
data[["Data_renamed"]]<-data[["Data_renamed"]] %>% plyr::mutate(
ZZZZ =data[["Data_renamed"]][,2] )
data[["Data_renamed"]]<-data[["Data_renamed"]][,c(-1,-2)]
data[["Data_renamed"]][,1:(ncol(data[["Data_renamed"]])-1)]<-sapply(data[["Data_renamed"]][,1:(ncol(data[["Data_renamed"]])-1)],
function(x) as.numeric(x))
NAMES<-colnames(data[["Data"]][3:ncol(data[["Data"]])])
data[["Data_renamed"]]$ZZZZ<-as.factor(data[["Data_renamed"]]$ZZZZ)
Comb<-gtools::combinations(length(unique(data[["Data"]]$Group)),2,unique(data[["Data"]]$Group))

{if (asterisk =="Scheffe"){
p_val_data<-data[["Anova_PostHoc"]]}
else if (asterisk =="t-test"){
p_val_data<-data[["t_test"]]}
else if (asterisk =="u-test"){
p_val_data<-data[["u_test"]]}
else if (asterisk =="Dunn"){
p_val_data<-data[["Dunn"]]}
else {
print("Wrong asterisk input must be one of (Dunn,Scheffe,u_test,t_test)")}}

{if(length(unique(data[["Data"]]$Group)) !=2){
for(a in 1:nrow(p_val_data)){
for(b in 1:ncol(p_val_data)){
if(is.nan(p_val_data[a,b])==T){
p_val_data[a,b]<-1
}
}
}}
else if(length(unique(data[["Data"]]$Group))==2){
for(b in 1:length(p_val_data)){
if(is.nan(p_val_data[b])==T){
p_val_data[b]<-1
}
}
}}

for (a in 1: nrow(Comb)){
{if(reverse ==T){
G1<- Comb[a,2]
G2<- Comb[a,1]
}
else if (reverse ==F){
G1<- Comb[a,1]
G2<- Comb[a,2]
}
data[["Data"]][,3:ncol(data[["Data"]])]<-apply(data[["Data"]][,3:ncol(data[["Data"]])],2,function(x)as.numeric(x))
Part_dat_1<-data[["Data"]] %>% dplyr::filter(Group == G1)
Part_dat_2<-data[["Data"]] %>% dplyr::filter(Group == G2)
Volc_Dat<-matrix(nrow = (ncol(data[["Data"]])-2),ncol = 3)
}
for (i in 3:ncol(Part_dat_1)){
Volc_Dat[(i-2),1]<- log(mean(Part_dat_1[,i])/mean(Part_dat_2[,i]),base = FC_log) }
if(length(unique(data[["Data"]]$Group))>2)
{if(asterisk == "Scheffe"){
{if (paste0(Comb[a,1],"-",Comb[a,2],"___","ANO_posthoc")%in% colnames(p_val_data)==T){
part_p_val<-p_val_data[,paste0(Comb[a,1],"-",Comb[a,2],"___","ANO_posthoc")]
}
else {part_p_val<-p_val_data[,paste0(Comb[a,2],"-",Comb[a,1],"___","ANO_posthoc")]}}
}
else if(asterisk == "Dunn"){
{if (paste0(Comb[a,1]," - ",Comb[a,2],"___","Kru_posthoc(Dunn)")%in% colnames(p_val_data)==T){
part_p_val<-p_val_data[,paste0(Comb[a,1]," - ",Comb[a,2],"___","Kru_posthoc(Dunn)")]
}
else {part_p_val<-p_val_data[,paste0(Comb[a,2]," - ",Comb[a,1],"___","Kru_posthoc(Dunn)")]}}
}
else{
{if (paste0(Comb[a,1],"-",Comb[a,2],"___",asterisk)%in% colnames(p_val_data)==T){
part_p_val<-p_val_data[,paste0(Comb[a,1],"-",Comb[a,2],"___",asterisk)]
}
else {part_p_val<-p_val_data[,paste0(Comb[a,2],"-",Comb[a,1],"___",asterisk)]}}

}}
else if(length(unique(data[["Data"]]$Group))==2){
{part_p_val<-p_val_data}
}

Volc_Dat[,2]<-part_p_val
rownames(Volc_Dat)<-colnames(data[["Data"]])[3:ncol(data[["Data"]])]
Volc_Dat<-as.data.frame(Volc_Dat)
colnames(Volc_Dat)<-c("log2FoldChange","pvalue","Direction")
Volc_Dat$Direction <- "Not Significant"
Volc_Dat$Direction[Volc_Dat$log2FoldChange > 0 & Volc_Dat$pvalue < pval_intercept] <- "UP"
Volc_Dat$Direction[Volc_Dat$log2FoldChange < 0 & Volc_Dat$pvalue < pval_intercept] <- "DOWN"
KK<-Volc_Dat %>% dplyr::filter(Direction!="Not Significant")
sem_res<-ggplot2::ggplot(data=Volc_Dat, ggplot2::aes(x=log2FoldChange, y=-log(pvalue,base = pval_log), col=Direction)) +
ggplot2::geom_point(size= dotsize) +
ggplot2::labs(title=paste0(G1," divided by ",G2," Volcano plot"),
x =eval(parse(text = paste0("expression(Log[",FC_log,"]~(Fold~Change))"))),
y = eval(parse(text = paste0("expression(Log[",pval_log,"]~(P-value))"))))+
ggplot2::theme_classic()+ ggplot2::theme(plot.title=ggplot2::element_text(size=25,
color="Black",
hjust=0.5,
lineheight=1.2), # title
plot.subtitle=ggplot2::element_text(size=15,
hjust=0.5), # subtitle
plot.caption=ggplot2::element_text(size=15), # caption
axis.title.x=ggplot2::element_text(vjust=0,
size=15), # X axis title
axis.title.y=ggplot2::element_text(size=15), # Y axis title
axis.text.x=ggplot2::element_text(size=10,
vjust=.5), # X axis text
axis.text.y=ggplot2::element_text(size=10))+
ggplot2::scale_color_manual(values=color[c("DOWN","Not Significant","UP")%in% unique(Volc_Dat$Direction)]) +
ggplot2::geom_vline(xintercept=c(0), col=c("black")) +
ggplot2::geom_hline(yintercept=-log(pval_intercept,base = pval_log), col="black")+
ggplot2::xlim(x_limit[1], x_limit[2])+
ggplot2::ylim(y_limit[1],y_limit[2])

{if (sig_label== T){
sem_res<- sem_res+ggrepel::geom_text_repel(size=3,
ggplot2::aes(label =ifelse(Volc_Dat$Direction!="Not Significant",
rownames(Volc_Dat),"")))
sem_res
}
else {sem_res}}

ggplot2::ggsave(filename = paste(G1, "divided by", G2, "Volcano plot.png",collapse = ""),
path=paste0(getwd(),"/Volcano"),
width = fig_width,
height = fig_height)

}
}
6 changes: 4 additions & 2 deletions man/LMSstat-package.Rd
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@ The package includes
* PCA

* PCoA

* Volcano
}
\details{
\tabular{ll}{
Package: \tab LMSstat\cr
Type: \tab Package\cr
Version: \tab 1.0.8\cr
Date: \tab 2021-07-29\cr
Version: \tab 1.0.9\cr
Date: \tab 2021-08-02\cr
License: \tab MIT License\cr
}
}
Expand Down
8 changes: 7 additions & 1 deletion man/NEWS.Rd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
\name{NEWS}
\alias{NEWS}
\title{News for Package
\title{News for Package}

\section{Changes in version 1.0.1,(February 2021)}{
\itemize{
Expand Down Expand Up @@ -55,3 +55,9 @@
\item PCoA added
}
}
\section{Changes in version 1.0.9,(August 2021)}{
\itemize{
\item Volcano plot added
}
}

60 changes: 60 additions & 0 deletions man/Volcano.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6ee95e7

Please sign in to comment.