test / app /R /plot_utils.R
okata's picture
Upload 42 files
bd8cdd3 verified
perform_statistical_test <- function(data, comparisons, test_method, y_var, w_var, p_adjust_method = "bonferroni") {
# 入力チェック
if (missing(data) || missing(comparisons) || missing(test_method) ||
missing(y_var) || missing(w_var)) {
stop("Required arguments are missing")
}
# 検定関数の取得
test_func <- tryCatch({
get(test_method, asNamespace("rstatix"))
}, error = function(e) {
stop(paste("Invalid test method:", test_method))
})
# 変数名を文字列からシンボルに変換
#y_sym <- sym(y_var)
w_sym <- sym(w_var)
# 結果を格納するデータフレーム
results <- data.frame()
# 各比較対についてループ
for(comp in comparisons) {
# グループを分割
print(comparisons)
print(comp)
groups <- strsplit(comp, "vs")[[1]]
print(as.formula(paste0("`", y_var, "` ~ `", w_var, "`")))
# データのサブセット作成
subset_data <- data %>%
dplyr::filter(!!w_sym %in% groups)
print((subset_data$Class) %>% unique())
# 検定実行
tryCatch({
test_result <- subset_data %>%
test_func(
formula = as.formula(paste0("`", y_var, "` ~ `", w_var, "`"))
) %>%
adjust_pvalue(method = p_adjust_method) %>%
add_significance()
results <- bind_rows(results, test_result)
}, error = function(e) {
warning(sprintf(
"Error in comparison %s: %s",
comp,
as.character(e)
))
})
}
# 結果が空の場合の処理
if (nrow(results) == 0) {
warning("No valid comparisons could be performed")
return(NULL)
}
return(results)
}
create_boxplot <- function(data, x_var, y_var, col, alpha, size, xlab_text, ylab_text, ggtitle_text) {
p <- ggplot(data) +
geom_boxplot(aes_string(x = x_var, y = y_var, fill = x_var),color = "black", lwd = 1, alpha = alpha) +
ggbeeswarm::geom_beeswarm(aes_string(x = x_var, y = y_var, fill = x_var), dodge.width = 0.1,
cex = 0.1,
shape = 21,
size = size) +
xlab(xlab_text) +
ylab(ylab_text) +
ggtitle(paste(ggtitle_text, "", sep = "")) +
scale_fill_manual(values = unlist(col))
p
}
process_boxplot <- function(input, yval, dataa, col,stat_test) {
y <- yval %>% as.character() %>% gsub("`", "", .)
p <- create_boxplot(dataa, input$w, yval, col, input$alpha, input$size,
input$xAxisLabel, input$yAxisLabel, yval)
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p <- p +
theme_classic() +
theme(
axis.text.x = element_text(
angle = input$x_rotation,
size = input$Fontsize
),
text = element_text(size = input$Fontsize)
)
plot(p)
}
process_boxplot_diagram <- function(input,yval,dataa,col,stat_test) {
y <- yval %>% as.character() %>% gsub("`", "", .)
p <- create_boxplot(dataa, input$w, yval, col, input$alpha, input$size,
input$xAxisLabel, input$yAxisLabel, yval)
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial"
) +
theme(
legend.position = "none",
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
axis.title.x = element_blank(),
aspect.ratio = 1.0,
text = element_text(size = input$Fontsize)
)
#if (input$q != "" && input$pvaluecheck == TRUE) {
# tukey_result <- process_tukey_result(input,y,input$q,p,dataa,0.05,input$Fontsize)
# p <- p + add_pvalue(tukey_result, remove.bracket = TRUE, bracket.size = 0.000001, label = "{symbol}", tip.length = 0,
# label.size = tukey_result$size, inherit.aes = FALSE,y.position = tukey_result$y.position_boxplot) + scale_y_continuous(
# limits = c(min(dataa[[y]]), (max(tukey_result$y.position_boxplot) + max(tukey_result$y.position_boxplot) / 30))
# )
#}
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p
}
process_action_boxplot <- function(input,dataa,metainfocol,svg_path,col,output,data) {
withProgress(message = 'Calculation in progress', detail = 'This may take a while...', value = 1, {
startnum <- 1 + metainfocol
for (i in startnum:ncol(dataa)) {
yval <- colnames(dataa)[i]
p <- create_boxplot(dataa, input$w, dataa[[yval]], col, input$alpha, input$size,input$xAxisLabel, input$yAxisLabel, "")
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial"
) +
theme(
legend.position = "none",
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
axis.title.x = element_blank(),
aspect.ratio = 1.0,
text = element_text(size = input$Fontsize)
)
# if (input$q != "" && input$pvaluecheck == TRUE) {
# tukey_result <- process_tukey_result(input,yval,input$q,p,dataa,0.05,input$Fontsize)
# p <- p + add_pvalue(tukey_result, remove.bracket = TRUE, bracket.size = 0.000001, label = "{symbol}", tip.length = 0,
# label.size = tukey_result$size, inherit.aes = FALSE,y.position = tukey_result$y.position_boxplot) + scale_y_continuous(
# limits = c(min(dataa[[yval]]), (max(tukey_result$y.position_boxplot) + max(tukey_result$y.position_boxplot) / 30))
# )
# }
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
# 検定関数の選択
test_func <- get(input$test_method, asNamespace("rstatix"))
# 結果を格納するデータフレーム
results <- data.frame()
for(comp in input$comparisons) {
# グループを分割
groups <- strsplit(comp, "vs")[[1]]
# データのサブセット作成
subset_data <- data %>%
dplyr::filter(!!sym(input$w) %in% groups)
# 検定実行
test_result <- test_func(subset_data, as.formula(paste(yval, "~", input$w)),paired = FALSE) %>%
adjust_pvalue(method = input$p_adjust) %>%
add_significance()
results <- rbind(results, test_result)
}
stat_results <- results
#stat_results <- perform_statistical_test(
# data = dataa,
# comparisons = input$comparisons,
# test_method = input$test_method, # または "t_test" など
# y_var = yval,
# w_var = input$w,
# p_adjust_method = input$p_adjust
#)
y_range <- diff(range(select(dataa,yval)))
y_max <- max(select(dataa,yval), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
svg(paste("./svg/",colnames(dataa)[i], ".svg", sep = ""))
plot(p)
dev.off()
incProgress(1 / ncol(dataa))
Sys.sleep(0.25)
}
})
data.frame(name = colnames(dataa)[-c(1:metainfocol)], path = paste("file:/", svg_path, "/", colnames(dataa)[-c(1:metainfocol)], ".svg", sep = "")) %>% write.csv("./svg/path.csv")
output$testtext1 <- renderText({
"Finish"
})
}
create_barplot <- function(data, x_var, y_var, col, alpha, size, xlab_text, ylab_text, ggtitle_text) {
p <- ggplot(data) +
geom_bar(aes_string(x = x_var, y = y_var, fill = x_var),color = "black", stat = "summary",fun = "mean",lwd = 1.2,width = 0.6) +
xlab(xlab_text) +
ylab(ylab_text) +
ggtitle(paste(ggtitle_text, "", sep = "")) +
scale_fill_manual(values = unlist(col))
p
}
process_barplot <- function(input, yval, dataa, col,stat_test) {
y <- yval %>% as.character() %>% gsub("`", "", .)
p <- create_barplot(dataa, input$w, yval, col, input$alpha, input$size,
input$xAxisLabel, input$yAxisLabel, yval)
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- dataa %>%
select(1,!!sym(input$w),!!sym(y)) %>%
group_by(!!sym(input$w)) %>%
summarise(mean_value = mean(!!sym(y))) %>%
summarise(max_mean = max(mean_value)) %>%
pull(max_mean)
#y_max <- max(select(dataa,y), na.rm = TRUE)
print(y_max)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p <- p +
theme_classic() +
theme(
axis.text.x = element_text(
angle = input$x_rotation,
size = input$Fontsize
),
text = element_text(size = input$Fontsize)
)
plot(p)
}
process_barplot_diagram <- function(input,yval,dataa,col,stat_test) {
y <- yval %>% as.character()
p <- create_barplot(dataa, input$w, y, col, input$alpha, input$size, input$xAxisLabel, input$yAxisLabel, y)
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial") +
theme(
legend.position = "none",
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
aspect.ratio = 1.0,
text = element_text(size = input$Fontsize))
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p
}
process_action_barplot <- function(input,dataa,metainfocol,svg_path,col,output,data) {
withProgress(message = 'Calculation in progress', detail = 'This may take a while...', value = 1, {
startnum <- 1 + metainfocol
for (i in startnum:ncol(dataa)) {
yval <- colnames(dataa)[i]
p <- create_barplot(dataa, input$w, dataa[[yval]], col, input$alpha, input$size, input$xAxisLabel, input$yAxisLabel, "")
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial") +
theme(
legend.position = "none",
axis.title.x = element_blank(),
aspect.ratio = 1.0,
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
text = element_text(size = input$Fontsize))
# if (input$q!= "" && input$pvaluecheck == TRUE) {
# tukey_result <- process_tukey_result(input,yval,input$q,p,dataa,0.05,input$Fontsize)
# p <- p + add_pvalue(tukey_result,remove.bracket = TRUE,
# bracket.size = 0.000001,
# label = "{symbol}",
# tip.length = 0,
# label.size = tukey_result$size,inherit.aes = FALSE,y.position = tukey_result$y.position_barplot)
# }
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
# 検定関数の選択
test_func <- get(input$test_method, asNamespace("rstatix"))
# 結果を格納するデータフレーム
results <- data.frame()
for(comp in input$comparisons) {
# グループを分割
groups <- strsplit(comp, "vs")[[1]]
# データのサブセット作成
subset_data <- data %>%
dplyr::filter(!!sym(input$w) %in% groups)
# 検定実行
test_result <- test_func(subset_data, as.formula(paste(yval, "~", input$w)),paired = FALSE) %>%
adjust_pvalue(method = input$p_adjust) %>%
add_significance()
results <- rbind(results, test_result)
}
stat_results <- results
#stat_results <- perform_statistical_test(
# data = dataa,
# comparisons = input$comparisons,
# test_method = input$test_method, # または "t_test" など
# y_var = yval,
# w_var = input$w,
# p_adjust_method = input$p_adjust
#)
y_range <- diff(range(select(dataa,yval)))
y_max <- max(select(dataa,yval), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
svg(paste("./svg/",colnames(dataa)[i], ".svg", sep = ""))
plot(p)
dev.off()
}
incProgress(1 / ncol(dataa))
Sys.sleep(0.25)
})
data.frame(name = colnames(dataa)[-c(1:metainfocol)], path = paste("file:/", svg_path, "/", colnames(dataa)[-c(1:metainfocol)], ".svg", sep = "")) %>% write.csv("./svg/path.csv")
output$testtext1 <- renderText({
"Finish"
})
}
process_violinplot <- function(input, yval, dataa, col,stat_test) {
y <- yval %>% as.character() %>% gsub("`", "", .)
p <- create_violinplot(dataa, input$w, yval, col, input$alpha, input$size,
input$xAxisLabel, input$yAxisLabel, yval)
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p <- p +
theme_classic() +
theme(
axis.text.x = element_text(
angle = input$x_rotation,
size = input$Fontsize
),
text = element_text(size = input$Fontsize)
)
plot(p)
}
create_violinplot <- function(data, x_var, y_var, col, alpha, size, xlab_text, ylab_text, ggtitle_text) {
p <- ggplot(data,aes_string(y = y_var)) +
geom_violin(aes_string(x = x_var,fill = x_var), adjust = 2,trim = FALSE) +
xlab(xlab_text) +
ylab(ylab_text) +
ggtitle(paste(ggtitle_text, "", sep = "")) +
scale_fill_manual(values = unlist(col))
p
}
process_violinplot_diagram <- function(input,yval,dataa,col,stat_test) {
y <- yval %>% as.character()
p <- create_violinplot(dataa, input$w, y, col, input$alpha, input$size, input$xAxisLabel, input$yAxisLabel, y)
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial") +
theme(
legend.position = "none",
axis.title.x = element_blank(),
aspect.ratio = 1.0,
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
text = element_text(size = input$Fontsize))
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p
}
process_action_violinplot <- function(input,dataa,metainfocol,svg_path,col,output,data) {
withProgress(message = 'Calculation in progress', detail = 'This may take a while...', value = 1, {
startnum <- 1 + metainfocol
for (i in startnum:ncol(dataa)) {
yval <- colnames(dataa)[i]
p <- create_violinplot(dataa, input$w, dataa[[yval]], col, input$alpha, input$size, input$xAxisLabel, input$yAxisLabel, "")
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial") +
theme(
legend.position = "none",
axis.title.x = element_blank(),
aspect.ratio = 1.0,
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
text = element_text(size = input$Fontsize))
#if (input$q!= "" && input$pvaluecheck == TRUE) {
# tukey_result <- process_tukey_result(input,yval,input$q,p,dataa,0.05,input$Fontsize)
# p <- p + add_pvalue(tukey_result, remove.bracket = TRUE, bracket.size = 0.000001, label = "{symbol}", tip.length = 0,
# label.size = tukey_result$size, inherit.aes = FALSE,y.position = tukey_result$y.position_boxplot) + scale_y_continuous(
# limits = c(min(dataa[[yval]]), (max(tukey_result$y.position_boxplot) + max(tukey_result$y.position_boxplot) / 30))
# )
#}
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
# 検定関数の選択
test_func <- get(input$test_method, asNamespace("rstatix"))
# 結果を格納するデータフレーム
results <- data.frame()
for(comp in input$comparisons) {
# グループを分割
groups <- strsplit(comp, "vs")[[1]]
# データのサブセット作成
subset_data <- data %>%
dplyr::filter(!!sym(input$w) %in% groups)
# 検定実行
test_result <- test_func(subset_data, as.formula(paste(yval, "~", input$w)),paired = FALSE) %>%
adjust_pvalue(method = input$p_adjust) %>%
add_significance()
results <- rbind(results, test_result)
}
stat_results <- results
#stat_results <- perform_statistical_test(
# data = dataa,
# comparisons = input$comparisons,
# test_method = input$test_method, # または "t_test" など
# y_var = yval,
# w_var = input$w,
# p_adjust_method = input$p_adjust
#)
y_range <- diff(range(select(dataa,yval)))
y_max <- max(select(dataa,yval), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
svg(paste("./svg/",colnames(dataa)[i], ".svg", sep = ""))
plot(p)
dev.off()
}
incProgress(1 / ncol(dataa))
Sys.sleep(0.25)
})
data.frame(name = colnames(dataa)[-c(1:metainfocol)], path = paste("file:/", svg_path, "/", colnames(dataa)[-c(1:metainfocol)], ".svg", sep = "")) %>% write.csv("./svg/path.csv")
output$testtext1 <- renderText({
"Finish"
})
}
process_polarplot <- function(input,yval,dataa,col) {
# if(is.na(unique(select(dataa,input$w))) != TRUE){
y <- yval %>% as.character()
p <- create_polarplot(dataa, input$w, y, col, input$alpha, input$size, input$yAxisLabel, y, input$Fontsize)
if (input$q != "" && input$pvaluecheck == TRUE) {
tukey_result <- process_tukey_result(input,y,input$q,p,dataa,0.05,input$Fontsize)
p <- p + add_pvalue(tukey_result,remove.bracket = TRUE,
bracket.size = 0.000001,
label = "{symbol}",
tip.length = 0,
label.size = tukey_result$size,inherit.aes = FALSE,y.position = tukey_result$y.position_barplot)
}
plot(p)
# }
}
create_polarplot <- function(data, x_var, y_var, col, alpha, size, ylab_text, ggtitle_text, Fontsize) {
p <- ggplot(data, aes_string(x = x_var, y = y_var, fill = x_var)) +
geom_bar(color = "black", stat = "summary",fun = "mean",lwd = 1.2,width = 0.6) +
coord_polar()+
scale_fill_manual(values = unlist(col))+
labs(
x="",
y="")+
theme_minimal(10) +
theme(
axis.text.x = element_text(size = Fontsize, angle = 360,hjust=0.8),
axis.title.x = element_blank(),
panel.grid.minor = element_blank(),
axis.ticks.y = element_blank())+
easy_remove_axes()
return(p)
}
process_dotplot <- function(input, yval, dataa, col,stat_test) {
y <- yval %>% as.character() %>% gsub("`", "", .)
p <- create_dotplot(dataa, input$w, yval, col, input$alpha, input$size,
input$xAxisLabel, input$yAxisLabel, yval)
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p <- p +
theme_classic() +
theme(
axis.text.x = element_text(
angle = input$x_rotation,
size = input$Fontsize
),
text = element_text(size = input$Fontsize)
)
plot(p)
}
create_dotplot <- function(data, x_var, y_var, col, alpha, size, xlab_text, ylab_text, ggtitle_text) {
p <- ggplot(data,aes_string(y = y_var)) +
ggbeeswarm::geom_beeswarm(aes_string(x = x_var,fill = x_var),
cex = 0.1,
shape = 21,
size = size)+
xlab(xlab_text) +
ylab(ylab_text) +
ggtitle(paste(ggtitle_text, "", sep = "")) +
scale_fill_manual(values = unlist(col))
p
}
process_dotplot_diagram <- function(input,yval,dataa,col,stat_test) {
y <- yval %>% as.character()
p <- create_dotplot(dataa, input$w, y, col, input$alpha, input$size, input$xAxisLabel, input$yAxisLabel, y)
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial"
) +
theme(
legend.position = "none",
axis.title.x = element_blank(),
aspect.ratio = 1.0,
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
text = element_text(size = input$Fontsize)
)
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
stat_results <- stat_test
y_range <- diff(range(select(dataa,y)))
y_max <- max(select(dataa,y), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
p
}
process_action_dotplot <- function(input,dataa,metainfocol,svg_path,col,output,data) {
withProgress(message = 'Calculation in progress', detail = 'This may take a while...', value = 1, {
startnum <- 1 + metainfocol
for (i in startnum:ncol(dataa)) {
yval <- colnames(dataa)[i]
p <- create_dotplot(dataa, input$w, dataa[[yval]], col, input$alpha, input$size, input$xAxisLabel, input$yAxisLabel, "")
p <- p + theme_prism(
base_fontface = "plain",
base_line_size = 0.9,
base_family = "Arial"
) +
theme(
legend.position = "none",
axis.title.x = element_blank(),
aspect.ratio = 1.0,
axis.text.x = element_text(angle = input$x_rotation,
size = input$Fontsize),
text = element_text(size = input$Fontsize)
)
# if (input$q != "" && input$pvaluecheck == TRUE) {
# tukey_result <- process_tukey_result(input,yval,input$q,p,dataa,0.05,input$Fontsize)
# p <- p + add_pvalue(tukey_result, remove.bracket = TRUE, bracket.size = 0.000001, label = "{symbol}", tip.length = 0,
# label.size = tukey_result$size, inherit.aes = FALSE,y.position = tukey_result$y.position_boxplot) + scale_y_continuous(
# limits = c(min(dataa[[yval]]), (max(tukey_result$y.position_boxplot) + max(tukey_result$y.position_boxplot) / 30))
# )
# }
if (input$pvaluecheck == TRUE && input$test_method != "anova_test") {
# 検定関数の選択
test_func <- get(input$test_method, asNamespace("rstatix"))
# 結果を格納するデータフレーム
results <- data.frame()
for(comp in input$comparisons) {
# グループを分割
groups <- strsplit(comp, "vs")[[1]]
# データのサブセット作成
subset_data <- data %>%
dplyr::filter(!!sym(input$w) %in% groups)
# 検定実行
test_result <- test_func(subset_data, as.formula(paste(yval, "~", input$w)),paired = FALSE) %>%
adjust_pvalue(method = input$p_adjust) %>%
add_significance()
results <- rbind(results, test_result)
}
stat_results <- results
#stat_results <- perform_statistical_test(
# data = dataa,
# comparisons = input$comparisons,
# test_method = input$test_method, # または "t_test" など
# y_var = yval,
# w_var = input$w,
# p_adjust_method = input$p_adjust
#)
y_range <- diff(range(select(dataa,yval)))
y_max <- max(select(dataa,yval), na.rm = TRUE)
step_size <- y_range * 0.15
y_positions <- y_max +
seq(step_size, by = step_size, length.out = nrow(stat_results))
p <- p + stat_pvalue_manual(
stat_results,
label.size = input$pvaluefontsize,
label = "p.adj.signif",
y.position = y_positions,
bracket.size = 0.5,
bracket.shorten = 0.1
)
}
svg(paste("./svg/",colnames(dataa)[i], ".svg", sep = ""))
plot(p)
dev.off()
incProgress(1 / ncol(dataa))
Sys.sleep(0.25)
}
})
data.frame(name = colnames(dataa)[-c(1:metainfocol)], path = paste("file:/", svg_path, "/", colnames(dataa)[-c(1:metainfocol)], ".svg", sep = "")) %>% write.csv("./svg/path.csv")
output$testtext1 <- renderText({
"Finish"
})
}
process_select_color_input <- function(input,data) {
if (length(grep(paste0(unique(as.matrix(select(data, input$w)))[1], "_selectcolor"), names(input), value = TRUE)) != 0) {
inputlist <- grep("selectcolor", names(input), value = TRUE)
for (input_name in inputlist) {
collist[str_remove_all(input_name, pattern = "_selectcolor")] <- input[[input_name]]
}
cola <<- unlist(collist)
cola <- cola[c(unique(data[[input$w]]))]
return(cola)
}
}
process_tukey_result <- function(input,yval, q,plot_obj, dataa, p_adj_threshold, Fontsize) {
yval <- gsub("`","",yval)
y <- dataa %>% pull(as.symbol(yval))
w <- dataa %>% pull(as.symbol(input$w))
tukey_result <- TukeyHSD(aov(y ~ w, data = dataa))
tukey_result <- data.frame(tukey_result$w)
a <- str_split_fixed(rownames(tukey_result), "-", 2)
colnames(a) <- c("Class1", "Class2")
tukey_result <- cbind(a, tukey_result)
maxvalue <- select(dataa,input$w,yval) %>%
group_by_(input$w) %>%
mutate(Mean = mean(!!as.symbol(yval))) %>%
ungroup() %>%
distinct(!!as.symbol(input$w),.keep_all = TRUE )
maxvalue <- max(maxvalue$Mean)
tukey_result <- filter(tukey_result, Class1 %in% q | Class2 %in% q) %>%
mutate(group2 = ifelse(Class1 == q, Class2, Class1)) %>%
mutate(group1 = paste0(q)) %>%
mutate(symbol = ifelse(p.adj < p_adj_threshold, "*", "")) %>%
select(group1, group2, p.adj, symbol) %>%
mutate(y.position_boxplot = max(dataa[[yval]])) %>%
mutate(y.position_barplot = maxvalue-maxvalue/15 ) %>%
mutate(y.min.position = min(dataa[[yval]])) %>%
mutate(size = ifelse(symbol != "*", 0, Fontsize))
return(tukey_result)
}