首页 > 其他分享 >R:PLS-DA模型

R:PLS-DA模型

时间:2024-03-27 17:24:11浏览次数:13  
标签:PLS patchwork 模型 library DA frame

# 清除所有变量
rm(list = ls()) 
# 设置工作目录
setwd("C:\\Users\\Administrator\\Desktop\\新建文件夹\\PLS_Pathway") 

# 1. 加载所需的库
library(vegan)
library(tidyverse)
library(ggpubr)
library(patchwork)
library(ggforce)
library(mixOmics)
library(patchwork)



# 2. 读取和处理数据
otu <- read.table("./Path_table_A.txt", row.names = 1, sep = "\t", header = TRUE) %>% as.data.frame()
map <- read.table("./group.txt", sep = "\t", header = TRUE) 
colnames(map)[1] <- "ID" 
row.names(map) <- map$ID 
idx <- rownames(map) %in% colnames(otu) 
map1 <- map[idx,]
otu <- otu[, rownames(map1)]

# 准备PLS-DA分析的数据和分组信息
X <- t(otu) # Transposed OTU data
Y <- map1$Group # Group information


# 进行PLS-DA分析
plsda_result <- plsda(X, Y, ncomp = 2) # ncomp是你希望保留的成分数目

# 可视化PLS-DA结果
# plotIndiv函数用于绘制个体样本的分布,其中包括了样本的分类信息
plotIndiv(plsda_result, 
          group = Y, 
          title = 'PLS-DA', 
          ellipse = TRUE, 
          legend = TRUE)

# 对PLS-DA模型进行性能评估,这次使用正确的参数值'Mfold'
plsda.perf <- perf(plsda_result, validation = "Mfold", folds = 8, progressBar = FALSE)

# 获取第一和第二主成分的X和Y的解释率
R2X_comp1 <- round(plsda_result$prop_expl_var$X[1] * 100, 2)
R2X_comp2 <- round(plsda_result$prop_expl_var$X[2] * 100, 2)
R2Y_comp1 <- round(plsda_result$prop_expl_var$Y[1] * 100, 2)
R2Y_comp2 <- round(plsda_result$prop_expl_var$Y[2] * 100, 2)

# 构造坐标轴标题
xlab_text <- paste("Component 1 (R2X =", R2X_comp1, "%, R2Y =", R2Y_comp1, "%)")
ylab_text <- paste("Component 2 (R2X =", R2X_comp2, "%, R2Y =", R2Y_comp2, "%)")


# 假设已有plsda.perf结果
# 访问错误率,可能需要根据perf对象的具体内容调整
error_rates <- plsda.perf$error.rate

# 选择第一个成分的overall错误率和"max.dist"距离度量
selected_error_rate <- error_rates$overall["comp1", "max.dist"]

# 计算一个近似的Q2值
q2_approx <- 1 - selected_error_rate

# 打印近似的Q2值
print(q2_approx)
title_text <- paste("PLS-DA: Q2 =", round(q2_approx * 100, 2), "%")



# 直接从PLS-DA结果对象中提取X方向的得分
scores_plsda <- plsda_result$variates$X

# 首先将矩阵转换为数据框
scores_plsda_df <- as.data.frame(scores_plsda)

# 然后使用dplyr的rename函数重命名列
points_plsda <- dplyr::rename(scores_plsda_df, x = comp1, y = comp2)

# 将样本的分组信息添加到数据框架 - 确保这一步是在重命名之后执行
points_plsda$Group <- map1$Group[match(rownames(points_plsda), rownames(map1))]

# 定义颜色和形状
colors <- c("B73_DAS28"="#8FC9E2","B73_DAS42"="#8FC9E2","B73_DAS56"="#8FC9E2","B73_DAS70"="#8FC9E2","Mo17_DAS28"="#ECC97F","Mo17_DAS42"="#ECC97F","Mo17_DAS56"="#ECC97F","Mo17_DAS70"="#ECC97F")
shapes <- c("B73_DAS28"=24, "B73_DAS42"=22, "B73_DAS56"=21, "B73_DAS70"=23, 
            "Mo17_DAS28"=24, "Mo17_DAS42"=22, "Mo17_DAS56"=21, "Mo17_DAS70"=23)
levels_order <- c("B73_DAS28", "B73_DAS42", "B73_DAS56", "B73_DAS70", "Mo17_DAS28", "Mo17_DAS42", "Mo17_DAS56", "Mo17_DAS70") #定义顺序
points_plsda$Group <- factor(points_plsda$Group, levels = levels_order)

# 使用这些标题在ggplot中
p1_plsda <- ggplot(points_plsda, aes(x = x, y = y, fill = Group, shape = Group)) + 
  geom_point(alpha = .7, size = 6) + 
  scale_shape_manual(values = shapes) + 
  scale_fill_manual(values = colors) +
  labs(x = xlab_text, y = ylab_text, title = title_text) +  # 使用xlab_text和ylab_text以及title_text
  geom_mark_ellipse(aes(fill = Group, label = Group), alpha = 0.1, color = "grey", linetype = 3) +
  theme_bw() +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text = element_text(color = "black", size = 12),
        axis.title = element_text(size = 16),
        legend.text = element_text(size = 14),
        legend.title = element_blank(), 
        plot.title = element_text(size = 16, face = "bold"),
        panel.border = element_rect(colour = "black", fill=NA, linewidth=2),
        axis.ticks = element_line(linewidth = 2),
        legend.key.size = unit(1, "cm")) +
  coord_cartesian(xlim = c(-max(abs(points_plsda$x)) * 1.1, max(abs(points_plsda$x)) * 1.1), 
                  ylim = c(-max(abs(points_plsda$y)) * 1.1, max(abs(points_plsda$y)) * 1.1)) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black")

# 显示PLS-DA绘制的图
print(p1_plsda)

# 保存PLS-DA图
ggsave(filename = "PLS-DA_plot.png", plot = p1_plsda, width = 10, height = 8, units = "in", dpi = 600)

 

标签:PLS,patchwork,模型,library,DA,frame
From: https://www.cnblogs.com/wzbzk/p/18099775

相关文章

  • 【ai模型系列】-1
    1、阿里通用多模态大模型OFA研究实践2、从零开始学习大模型-第四章-如何创建一个大模型3、大模型在IT运维领域的落地差距与未来展望4、大模型应用的10种架构模式......
  • WARN o.a.t.util.scan.StandardJarScanner - Failed to scan [file:/D:/Mavencangku/
    1、SpringBoot项目启动突然报错2024-03-2714:57:41[restartedMain]WARNo.a.t.util.scan.StandardJarScanner-Failedtoscan[file:/D:/Mavencangku/com/sun/xml/bind/jaxb-core/2.3.0/jaxb-api.jar]fromclassloaderhierarchyjava.io.FileNotFoundException:D:\Maven......
  • 中国 10 亿参数规模以上大模型数量已超 100 个;GitHub 推出代码自动修复工具丨 RTE 开
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢......
  • 『大模型笔记』常见的分布式并行策略(分布式训练)
    常见的分布式并行策略(分布式训练)文章目录一.为什么分布式训练越来越流行二.常见的并行策略2.1数据并行2.2模型并行2.3流水并行2.4混合并行二.参考文献一.为什么分布式训练越来越流行近年来,深度学习被广泛应用到各个领域,包括计算机视......
  • 攻防世界 gametime 使用IDA pro+OD动调
    自学犟种琢磨动调的一个记录,算是第一次动调的新手向,大佬请飘过题目 准备工作——IDApro(32X)下载得到一个exe文件,首先丢到PE里面——无壳,32bit丢到IDApro(x32)里面刚好main函数就在左边很瞩目的地方,双击+F5,试图反汇编,但是跳出一个弹窗你点OK或者直接叉掉,也会反汇编......
  • [Devops] ubuntu 重装 nvida-docker 驱动
    重装nvidia-docker2apt-getremovedockerdocker-enginedocker.iocontainerdruncapt-getinstallapt-transport-httpsca-certificatescurlgnupg-agentsoftware-properties-commoncurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudoapt-keyadd-a......
  • dolphinscheduler任务报错,日志显示dataX说脏数据过多了?
    经DataX智能分析,该任务最可能的错误原因是: com.alibaba.datax.common.exception.DataXException:Code:[Framework-14],Description:[DataX传输脏数据超过用户预期,该错误通常是由于源端数据存在较多业务脏数据导致,请仔细检查DataX汇报的脏数据日志信息,或者您可以适当调大......
  • BOSHIDA DC电源模块与其他电源模块的区别与优势
    BOSHIDADC电源模块与其他电源模块的区别与优势在现代电子设备中,电源模块是不可或缺的组成部分。电源模块的作用是将外部电源的电能转换为设备所需的电能进行供应。在电源模块的选择中,DC电源模块与其他电源模块有着明显的区别与优势。 首先,DC电源模块与其他电源模块的区别在......
  • SpringBootWeb最新相关技术(上接maven):IDEA2023-Spring环境,http协议复习概览,web服务器To
    Spring官网HTTPs://spring.iospring生态(全家桶)基于SpringFramework基础框架。但如果我们基于该基础框架开发,会面临配置繁琐,入门难度大的问题,SpringBoot则可以快速开发(简化配置,快速开发)。1.SpringBootWeb入门使用SpringBoot开发一个Web应用,浏览器发起请求/hello之后,给浏......
  • 解决“AttributeError: ‘numpy.ndarray’ object has no attribute ‘value_counts’
    成功解决AttributeError:‘numpy.ndarray’objecthasnoattribute‘value_counts’大家好,今天我想分享一个我在Python编程过程中遇到的问题,并详细阐述我是如何解决的。这个问题是关于numpy.ndarray对象没有value_counts属性的AttributeError。一、问题背景与错误描述......