职贝云数AI新零售门户

标题: 运用DeepSeek停止PCA、PLS-DA和OPLS-DA分析 [打印本页]

作者: BLpt8N    时间: 3 小时前
标题: 运用DeepSeek停止PCA、PLS-DA和OPLS-DA分析
Omicsmaster


点击蓝字 关注我们

深度定制 让研讨打破预期

关于如何运用DeepSeek停止PCA的教程之前曾经分享过,比如如何运用DeepSeek+Rstudio停止主成分分析(PCA)?、如何停止主成分分析并绘制PCA组合图?等。

接上去,继续为大家引见如何运用DeepSeek停止另外两种相似的“有监督”多元统计方法,PLS-DA和OPLS-DA。

(, 下载次数: 0)

(, 下载次数: 0)

1. 数据预备

(, 下载次数: 0)

数据的整理方法很简单,如下图。数据来自ropls包,为183名成人尿液样本对应的109种代谢物标准化后的丰度数据。

(, 下载次数: 0)

第2个需求预备的文件为分组信息文件(用于绘图时添加分组配色),表格的第1列为样本名,表格的第2列为分组称号,如下图,这里有2个分组。留意,确保样本名与上一个表格分歧。

(, 下载次数: 0)

此外,建议选择保存成逗号或制表符分隔的文本文件,这样就无需再安装额外读入数据的R包啦!



2. 数据分析



首先,打开DeepSeek上传范例数据。将示例数据文件直接复制粘贴到对话框中即可上传文件,当然也可点击“曲别针”图标上传附件。然后,根据本人的需求,尝试输入分析绘图指令。

(, 下载次数: 0)

初始分析绘图指令参考:

附件“sacurine.csv”文件为标准化后的代谢组丰度数据,第1列为样本称号,而“sample_info.csv”文件为样本对应的分组信息;依次运用R包ropls分别停止PCA、PLS-DA和OPLS-DA分析,并运用ggplot2绘制添加置信椭圆的分组得分图;置信椭圆的填充颜色与描边颜色相反,但透明度为0.3,分组配色方案为:#60bc55,#52bdb9;主题运用theme_bw,去掉panel.grid,在原点处添加程度和垂直的灰色虚线;要求代码依次单独展现3种ggplot2绘图结果,避免用到自定义函数和函数嵌套

经过13秒的深度思索,DeepSeek很快给出了分析绘图代码,如下图。

(, 下载次数: 0)

(, 下载次数: 0)

点击代码块右上角的“复制”按钮,将DeepSeek生成的代码复制粘贴到Rstudio的脚本编辑器中停止测试,如下图,留意在读入数据前,将示例数据文件所在文件夹设置为“工作目录”。

(, 下载次数: 0)

然后在Rstudio中点Run按钮逐行测试代码,我们可以发行到PCA部分没有报错,可正常出图。

(, 下载次数: 0)

异样,运转PLS-DA分析也没成绩,可正常绘制PLS-DA得分图,如下图。但是,在执行OPLS-DA分析后,提取OPLS-DA得分时还是出错了!

(, 下载次数: 0)



3. 优化代码



提交报错信息,要求DeepSeek重新优化代码,如下图。

(, 下载次数: 0)

经过22秒的深度思索,我们得到了优化后分析绘图代码。在Rstudio新建R脚本,复制第2版代码继续停止测试,如下图,DeepSeek根据我们的要求,很快给出了想要的绘图结果!

(, 下载次数: 0)

最终导出的图片效果如下:

(, 下载次数: 0)

最终版调整后的代码如下:

# 加载必要的包
library(ropls)
library(ggplot2)
library(dplyr)
# 读取数据
sacurine_data <- read.csv("sacurine.csv", header = TRUE, row.names = 1)
sample_info <- read.csv("sample_info.csv", header = TRUE)

# 确保样本顺序分歧
common_samples <- intersect(rownames(sacurine_data), sample_info$Urine_samples)
sacurine_data <- sacurine_data[common_samples, ]
sample_info <- sample_info[sample_info$Urine_samples %in% common_samples, ]
sample_info <- sample_info[match(common_samples, sample_info$Urine_samples), ]

# 1. PCA分析
pca_result <- opls(sacurine_data, scaleC = "standard")

# 提取PCA得分
pca_scores <- as.data.frame(pca_result@scoreMN[, 1:2])
colnames(pca_scores) <- c("PC1", "PC2")
pca_scores$Urine_samples <- rownames(sacurine_data)
pca_scores <- merge(pca_scores, sample_info, by = "Urine_samples")

# 绘制PCA得分图
pca_plot <- ggplot(pca_scores, aes(x = PC1, y = PC2, color = gender)) +
  geom_point(size = 2,alpha = 0.8) +
  stat_ellipse(aes(fill = gender), geom = "polygon", alpha = 0.3, level = 0.95) +
  scale_color_manual(values = c("M" = "#60bc55", "F" = "#52bdb9")) +
  scale_fill_manual(values = c("M" = "#60bc55", "F" = "#52bdb9")) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray") +
  labs(title = "PCA Score Plot",
       x = paste0("PC1 (", round(pca_result@modelDF$R2X[1] * 100, 1), "%)"),
       y = paste0("PC2 (", round(pca_result@modelDF$R2X[2] * 100, 1), "%)")) +
  theme_bw() +
  theme(panel.grid = element_blank(),
        legend.position = "right")

print(pca_plot)

# 2. PLS-DA分析
# 将性别转换为数值变量
gender_numeric <- as.numeric(factor(sample_info$gender)) - 1

plsda_result <- opls(sacurine_data, gender_numeric, scaleC = "standard", predI = 2)

# 提取PLS-DA得分
plsda_scores <- as.data.frame(plsda_result@scoreMN[, 1:2])
colnames(plsda_scores) <- c("PC1", "PC2")
plsda_scores$Urine_samples <- rownames(sacurine_data)
plsda_scores <- merge(plsda_scores, sample_info, by = "Urine_samples")

# 绘制PLS-DA得分图
plsda_plot <- ggplot(plsda_scores, aes(x = PC1, y = PC2, color = gender)) +
  geom_point(size = 2,alpha = 0.8) +
  stat_ellipse(aes(fill = gender), geom = "polygon", alpha = 0.3, level = 0.95) +
  scale_color_manual(values = c("M" = "#60bc55", "F" = "#52bdb9")) +
  scale_fill_manual(values = c("M" = "#60bc55", "F" = "#52bdb9")) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray") +
  labs(title = "PLS-DA Score Plot",
       x = paste0("Component 1 (", round(plsda_result@modelDF$R2X[1] * 100, 1), "%)"),
       y = paste0("Component 2 (", round(plsda_result@modelDF$R2X[2] * 100, 1), "%)")) +
  theme_bw() +
  theme(panel.grid = element_blank(),
        legend.position = "right")

print(plsda_plot)

# 3. OPLS-DA分析
oplsda_result <- opls(sacurine_data, sample_info$gender,
                      predI = 1, orthoI = NA,
                      scaleC = "standard",
                      fig.pdfC = "none", info.txtC = "none")

# 提取OPLS-DA得分
# 预测得分
p_scores <- as.data.frame(oplsda_result@scoreMN)
# 正交得分
o_scores <- as.data.frame(oplsda_result@orthoScoreMN)

# 假如正交得分存在,则运用第一列;否则,创建一个零向量
if (ncol(o_scores) > 0) {
  oplsda_scores <- data.frame(
    PC1 = p_scores[, 1],
    PC2 = o_scores[, 1]
  )
} else {
  oplsda_scores <- data.frame(
    PC1 = p_scores[, 1],
    PC2 = rep(0, nrow(p_scores))
  )
}

colnames(oplsda_scores) <- c("PC1", "PC2")
oplsda_scores$Urine_samples <- rownames(sacurine_data)
oplsda_scores <- merge(oplsda_scores, sample_info, by = "Urine_samples")

# 绘制OPLS-DA得分图
oplsda_plot <- ggplot(oplsda_scores, aes(x = PC1, y = PC2, color = gender)) +
  geom_point(size = 2,alpha = 0.7) +
  stat_ellipse(aes(fill = gender), geom = "polygon", alpha = 0.3, level = 0.95) +
  scale_color_manual(values = c("M" = "#60bc55", "F" = "#52bdb9")) +
  scale_fill_manual(values = c("M" = "#60bc55", "F" = "#52bdb9")) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray") +
  labs(title = "OPLS-DA Score Plot",
       x = "Predictive Component (t_pred)",
       y = "Orthogonal Component (t_ortho)") +
  theme_bw() +
  theme(panel.grid = element_blank(),
        legend.position = "right")

print(oplsda_plot)
可见,运用DeepSeek停止PCA、PLS-DA和OPLS-DA分析还是非常给力的!好啦,本次的DeepSeek实操教程就分享到这里啦!

(, 下载次数: 0)

奥智团队一直坚守 “让每一分科研投入都物超所值” 的核心服务理念,从项目初期需求沟通到实验执行、数据分析,再到最终文章撰写与投稿,全程提供不妨碍对接。针对不同范畴、不同阶段的科研探求,奥智生物提供完善的定制化组学科研服务体系,涵盖单细胞组学、空间组学、转录组学、微生物组学、蛋白代谢组学等研讨方向。欢迎有项目意向的教师联络我们,奥智生物将为您提供深度定制化的处理方案。

长按辨认下方二维码咨询:

(, 下载次数: 0)

*未经答应,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权一切,侵权必究。

Omicsmaster

让每一分科研投入

都物超所值

#生信分析#科研绘图#DeepSeek#R言语




欢迎光临 职贝云数AI新零售门户 (https://www.taojin168.com/cloud/) Powered by Discuz! X3.5