一条龙-T检验+绘制boxplot

1.输入文件:
在这里插入图片描述

2.代码

#title:boxplot-5utr-cds-3tr-ATCG的百分比分布和T检验_封装函数版
rm(list=ls(all=TRUE))
setwd("E:/R/Rscripts/5UTR_ABD_TE")
library(tidyverse)
library(ggplot2)
# library(RColorBrewer)
library(patchwork)
library(dplyr)
library(tidyr)
library(openxlsx)
library(stringr)
dfutr5<- read.table(file="lijinonextended_5utr_ATCG.fasta",na.strings = "#N/A",sep="\t",header = TRUE)
dfcds<- read.table("lijinonextended_cds_ATCG.fasta",na.strings = "#N/A",sep="\t",header = TRUE)
dfutr3<- read.table("lijinonextended_3utr_ATCG.fasta",na.strings = "#N/A",sep="\t",header = TRUE)reshape_data_frame <- function(df, id_column = NULL) {# 如果指定了ID列,则保留ID列,否则只处理核苷酸列if (!is.null(id_column)) {df_long <- df %>%pivot_longer(cols = c(A, T, C, G),names_to = "nucleotide",values_to = "percentage",id_cols = id_column  # 保留ID列)} else {df_long <- df %>%select(-Sequence_ID) %>%pivot_longer(cols = c(A, T, C, G),names_to = "nucleotide",values_to = "percentage")}return(df_long)
}# 调用函数,转换数据框,假设我们想保留Id列
# reshaped_df <- reshape_data_frame(df, id_column = "Id")
# print(reshaped_df)# 如果不想保留Id列
dfutr5longer<- reshape_data_frame(dfutr5) %>% mutate(percentage1=percentage/100)
dfcdslonger<- reshape_data_frame(dfcds)%>% mutate(percentage1=percentage/100)
dfutr3longer<- reshape_data_frame(dfutr3)%>% mutate(percentage1=percentage/100)##############################################
#######定义函数用于T检验
##############################################perform_all_combinations_T_test <- function(df, group_column, score_column, df_name) {# 获取所有唯一的组unique_groups <- unique(df[[group_column]])# 生成所有可能的两两组合combinations <- combn(unique_groups, 2, simplify = FALSE)# 初始化一个空的数据框来存储结果results_df <- data.frame(Comparison = character(), Mean1 = numeric(), Mean2 = numeric(), Pvalue = numeric(), stringsAsFactors = FALSE)# 遍历每一对组合进行T检验for(combination in combinations) {group1 <- combination[1]group2 <- combination[2]# 提取两个组的指定Score值scores_group1 <- df[[score_column]][df[[group_column]] == group1]scores_group2 <- df[[score_column]][df[[group_column]] == group2]# 确保scores_group1和scores_group2不为空并且都是数值型if (length(scores_group1) > 0 && length(scores_group2) > 0 && all(is.numeric(scores_group1)) && all(is.numeric(scores_group2))) {# 进行T检验t_test_result <- t.test(scores_group1, scores_group2)# 计算两个组的均值mean_group1 <- mean(scores_group1, na.rm = TRUE)mean_group2 <- mean(scores_group2, na.rm = TRUE)# 向结果数据框添加一行comparison_value <- paste(df_name, group1, "_Vs_", df_name, group2, sep="")new_row <- data.frame(Comparison = comparison_value,Mean1 = mean_group1, Mean2 = mean_group2, Pvalue = t_test_result$p.value, stringsAsFactors = FALSE)results_df <- rbind(results_df, new_row)}}return(results_df)
}# 调用函数的例子:
result5utr <- perform_all_combinations_T_test(dfutr5longer, "nucleotide", "percentage1", "5utr")
resultcds <- perform_all_combinations_T_test(dfcdslonger, "nucleotide", "percentage1", "cds")
result3utr <- perform_all_combinations_T_test(dfutr3longer, "nucleotide", "percentage1", "3utr")# # 正确的调用方法
# t.test_result <- t.test(
#   dfutr5longer$percentage1[dfutr5longer$nucleotide == "A"],
#   dfutr5longer$percentage1[dfutr5longer$nucleotide == "T"]
# )
# 
# # 打印测试结果
# print(t.test_result)###########################################################################
##绘制boxplot-自定义函数
##########################################################################
library(tidyverse)
library(ggplot2)
library(patchwork)# 更新函数定义以包括x轴标题作为参数
create_grouped_boxplot <- function(data, group_var, score_var, x_label = "5'UTR",y_label = "Score", y_limits = c(0, 100), y_breaks = seq(0, 100, 20), fill_values = c("#c59d94", "#afc7e8", "#dbdb8d", "#ff9896")) {data[[group_var]] <- factor(data[[group_var]], levels = c("A", "T", "C", "G"), labels = c("A", "U", "C", "G"), ordered = TRUE)p <-  ggplot(data, aes(x = .data[[group_var]], y = .data[[score_var]], fill = .data[[group_var]])) +# geom_violin(trim=FALSE,color="white") + geom_errorbar(width = 0.1,size = 0.35,position = position_dodge(0.9),stat = "boxplot") +geom_boxplot(outlier.size = -1,width = 0.25,position = position_dodge(0.9),fatten = 1.2,size = 0.5) +theme_classic() +labs(y = y_label, x = x_label) +scale_y_continuous(limits = y_limits, breaks = y_breaks) +theme(strip.background = element_rect(colour = "black", fill = "#FFFFFF"),plot.title = element_text(hjust = 0.5, vjust = 1, lineheight = 1, color = "black"),panel.background = element_rect(fill = "white", colour = "black", linewidth  = 0.5),axis.title.y = element_text(size = 15, face = "bold", color = "black"),axis.title.x = element_text(size = 15, face = "bold", color = "black", vjust = 0.5, hjust = 0.5, margin = margin(t = 12)),axis.text = element_text(size = 13, face = "bold", color = "black")) +scale_fill_manual(values = fill_values) +guides(fill = "none")return(p)
}
p1 <- create_grouped_boxplot(dfutr5longer, "nucleotide", "percentage", x_label = "5'UTR")
p2 <- create_grouped_boxplot(dfcdslonger, "nucleotide", "percentage", x_label = "CDS")
p3 <- create_grouped_boxplot(dfutr3longer, "nucleotide", "percentage", x_label = "3'UTR")
p4<-p1+p2+p3+plot_layout(nrow = 1,ncol = 3)
ggsave("boxplot-5utr-cds-3tr-ATCG的百分比分布和T检验.pdf",plot=p4,width=18,height=8)

3.输出结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/650325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳厂房降温水帘墙

深圳厂房降温水帘墙的安装是一个相对复杂的过程&#xff0c;需要综合考虑多个因素&#xff0c;包括安装位置、设备选择、安装步骤以及后续维护等。以下是一个大致的安装流程&#xff1a; 一、安装前的考虑因素 安装位置&#xff1a;根据厂房的空间布局和空气流动特点&#xf…

ContextMenuStrip内容菜单源对象赋值学习笔记(含源码)

一、前言 MetroTileItem属于第三方控件,无法定义ContextMenuStrip属性 想实现某子项点击菜单时,与源控件(按钮metroTileItem)的某值对应,用于动态控制按钮的状态或方法 1.1 效果 二、实现方法 2.1 方法1 (代码,说明见注释) private void metroTileItem_MouseDown(o…

java版微信小程序商城 免 费 搭 建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

15 JavaScript学习:循环

JavaScript循环语句概念和分类 JavaScript中的循环语句用于重复执行特定的代码块&#xff0c;直到指定的条件不再满足。下面是JavaScript中常用的循环语句以及它们的概念和分类&#xff1a; for 循环&#xff1a;for循环通过指定起始条件、循环条件和递增/递减步长来进行迭代。…

ChatGPT全方位指导:学术论文写作从零开始,轻松搞定高质量论文!

目录 文末福利 一、论文选题的深度探讨 二、撰写摘要的艺术 三、关键词的精选 四、引言的构建 五、正文的结构设计 六、撰写结论的策略 七、致谢的编写 八、附录的有效利用 九、参考文献的整理 文末有福利哦 撰写一篇高质量的学术论文是一项既复杂又耗时的任务。这个…

【YOLOv8】隐藏预测实例分割的目标类别和置信度信息

目录 &#x1f340;&#x1f340;需求 &#x1f337;&#x1f337;解决方案 &#x1f349;&#x1f349;修改代码 整理不易&#xff0c;欢迎一键三连&#xff01;&#xff01;&#xff01; 送你们一条美丽的--分割线-- &#x1f340;&#x1f340;需求 需要从上图变成下图&…

pytest参数化数据驱动(数据库/execl/yaml)

常见的数据驱动 数据结构&#xff1a; 列表、字典、json串 文件&#xff1a; txt、csv、excel 数据库&#xff1a; 数据库链接 数据库提取 参数化&#xff1a; pytest.mark.parametrize() pytest.fixture()…

【JAVA】阿里技术官耗时三个月整理的Java核心知识点

在裁员风波的席卷之下&#xff0c;IT行业弥漫着浓厚的焦虑和不安。面对如此动荡的环境&#xff0c;一个共识日益凸显&#xff1a;提升个人价值至关重要。 这不仅仅是指薪资上的数字增长&#xff0c;更重要的是在职场中、在专业领域、在技术上不断取得突破&#xff0c;并塑造自…

力扣HOT100 - 200. 岛屿数量

解题思路&#xff1a; 岛屿题目一般使用dfs。 1.判断是否越界 2.用0&#xff0c;1&#xff0c;2三个状态标识当前格子的状态&#xff08;三个状态比两个状态更清晰&#xff09; 3.向周围四个方向遍历 class Solution {public int numIslands(char[][] grid) {int cnt 0;fo…

如何在PostgreSQL中创建并使用窗口函数来进行复杂的分析查询?

文章目录 解决方案1. 了解窗口函数的基本概念2. 常用的窗口函数3. 使用示例示例 1&#xff1a;计算每行销售数据的累计销售额示例 2&#xff1a;计算每行销售数据相对于前一行销售额的增长率 结论 PostgreSQL 提供了一套强大的窗口函数&#xff08;Window Functions&#xff09…

用Python绘制了几张有趣的可视化图表

流程图存在于我们生活的方方面面&#xff0c;对于我们追踪项目的进展&#xff0c;做出各种事情的决策都有着巨大的帮助&#xff0c;而对于的Python而言呢&#xff0c;绘制流程图也是十分轻松的&#xff0c;今天小编就来为大家介绍两个用于绘制流程图的模块&#xff0c;我们先来…

FebHost:注册国外域名优先考虑可用性还是成本?

在选择域名后缀时&#xff0c;应该优先考虑可用性还是成本&#xff1f;这主要取决于您的具体情况。这两个因素都很重要&#xff0c;您应根据自己的需求进行权衡。 可用性方面&#xff1a;热门的域名后缀&#xff0c;如.com和.net&#xff0c;通常需求量较大&#xff0c;因此可…