灰色预测模型代码_生信审稿人最常问的验证!临床预测模型中的PCA主成分分析!这点你注意到了没!(附代码)...

本文介绍了主成分分析(PCA)的基本概念及其在高维度数据集中的应用。通过具体案例演示了如何利用R语言进行PCA分析,包括数据预处理、主成分抽取、正交旋转及模型构建等步骤。

在高维度数据不断出现的现在,输入特征的数量呈指数形式迅速增长,形成了所谓的维数灾难。今天,我们将重点讲讲主成分分析从原始数据集中找出一个更小的,但能最大程度保留原来大部分信息的变量集合

所谓主成分分析,即Principle Component Analysis (PCA),其实就是寻找主成分的过程,且通常被认为是一种特殊的非监督学习算法,可以对复杂或多变的变量进行处理分析。一般而言,成分可以认为是特征的规范化线性组合。其中,第一主成分是能够最大程度解释数据中方差的特征线性组合,而第二主成分是在方向上与第一主成分垂直的条件下,最大程度解释数据中方差的另一种线性组合。其后的每一个主成分都遵循相同的原则。此外,主成分得分是对于每个主成分和每个观测变量计算而得到的。

下面,我们一起来看下如何进行主成分分析并建立模型。

1.R包的安装与读取

1.R包的安装与读取

rm(list = ls())   #清空环境变量 
options(stringsAsFactors = F)

###1. R包的安装与读取 
if(!require(psych))install.packages("psych") 
if(!require(ggplot2))install.packages("ggplot2") 
if(!require(ggpubr))install.packages("ggpubr") 
if(!require(ROCR))install.packages("ROCR") 
library(psych)   #PCA packages 
library(ggplot2) 
library(ggpubr) 
library(ROCR)

psych包常被用于进行主成分分析,包括:判断主成分的个数;提取主成分;获取主成分得分;以及列出主成分方程,解释主成分意义。

2.数据的读取与预处理

2.1 读取表达数据

rt <- read.table("exp.txt", header=T, sep="  ", check.names=F, row.names = 1) 
exp <- t(log2(rt+1)) 
str(exp)

与之前的模型构建一样,首先使用read.table()函数读取表达数据,并通过结构函数str()检查数据。

2.2 数据标准化

exp.scale <- scale(exp) 
exp.cor <- cor(exp.scale) 
cor.plot(exp.cor)

在分析之前,我们需要对数据进行标准化,使数据的均值为0,标准差为1。同时,完成标准化后,使用psych包提供的cor.plot()函数,将输入基因之间的相关性进行可视化展示。

e8d61c282155e3ab3df361c1e00773e2.png

2.3 读取临床数据

cli <- read.table("cliData.txt",header=T,sep="  ",check.names=F, row.names = 1) 
head(cli) 
str(cli)

随后,将提前清洗准备好的临床数据进行读取。

f8b61f130096144ddeeadd97729a53ed.png

3.主成分分析

3.1 主成分抽取
pca <- principal(exp.scale, rotate = "none")

通过psych包的principal()函数抽取主成分。首先,我们将rotate的参数设置为none,得到其中的各个成分。

plot(pca$values, type = "b", ylab = "Eigenvalues", xlab = "Component")

接着,为了确定要保留的成分的数量,使用碎石图来评估能解释大部分数据方差的主成分,其中x轴表示主成分的数量,y轴表示相应的特征。在碎石图中,需要找出使变化率降低的那个点,也就是常说的“肘点”或者弯曲点。从图中可以看出,4个主成分是比较令人信服的。

5b4e6e98695abb134e7686e6a6c87026.png

3.2 正交旋转与解释

正交旋转又称为“方差最大法”,而旋转的意义是使变量在某个主成分上的载荷最大化,减少主成分之间的相关性,从而有助于对主成分的解释。

pca.rotate <- principal(exp.scale, nfactors = 4, rotate = "varimax")
pca.rotate

在输出的结果中,4个主成分的变量载荷分别标注为RC1到RC4,而SS loading中的值是每个主成分的特征值。同时,Cumulative Var结果表示这4个旋转后的主成分可以解释86%的全部方差。一般而言,我们选择的主成分至少应该解释大于70%的全部方差。可见,4个主成分已经可以用于后续的建模分析。

2a97f0d84def2f410567562085af3192.png

3.3 根据主成分建立因子得分

pca.scores <- data.frame(pca.rotate$scores)
head(pca.scores)

检查旋转和的主成分载荷,并将其作为每个患者的因子得分。而且,这些得分说明了每个患者与旋转后的主成分之间的相关程度。

7bdcd38e6cd54cacbf84d0276cd14562.png
exp.pca <-cbind(cli, pca.scores)

最后,将得分与临床信息进行合并。

4.模型构建与评价

4.1 回归分析

#通过lm()函数建立线性模型 
lm_all <- lm(fustat ~ RC1+RC2+RC3+RC4, data = exp.pca) 
summary(lm_all)

首先,将所有的因子作为输入,然后查看结果摘要。结果显示,整体模型在统计学上是具有显著性的,P值为0.0348。而且,其中RC1和RC4具有显著性。

027ed1cde703a96e253a417f423d7def.png
#使用RC1和RC4变量建立线性模型 
lm_2 <- lm(fustat ~ RC1+RC4, data = exp.pca) 
summary(lm_2)

随后,将不显著的主成分因子排出模型,只保留RC1和RC4,再一次构建模型。可以发现,整体模型的统计学显著性得到了提升,P值为0.0057。

68d71715ffce8a5c25072d9909fdbd4c.png

4.2 模型评价

exp.pca$predict <- lm_2$fitted.values 
ggboxplot(exp.pca, 
         x = "fustat", y = "predict", 
         color = "fustat", palette = "jco", 
         add = "jitter") + 
 stat_compare_means()

提取模型得到的预测值,且箱型图结果显示两组之间具有显著性差异,P值为0.0035。

faab530569efbf761233b1e527464970.png

4.3 ROC分析

pred <- prediction(exp.pca$predict, exp.pca$fustat) 
ROC <- performance(pred,"tpr","fpr") 
auc <-  performance(pred,"auc")@y.values[[1]] 
auc 
#[1] 0.7101449 
plot(ROC, 
    col="red",   #曲线的颜色 
    xlab="False positive rate", ylab="True positive rate",   #x轴和y轴的名称 
    lty=1,lwd=3, 
    main=paste("AUC=", auc)) 
abline(0, 1, lty=2, lwd=3)   #绘制对角线

同时,ROC曲线分析结果显示,AUC值为0.71,表明其模型的预测能力较为一般。

f9e93c29c214a18bdd7b458179baed5c.png

好了,PCA的相关内容就介绍到这里了,简单的讲呢,就是使用一些相关的变量构造一个新的变量。在今后的文章分析中,遇到其他模型不理想时,或者其他高维度数据时候,不妨试试主成分分析来进行分析~~~

f3850f4c52f8485fc0bef6dd7695325e.png

欢迎大家关注解螺旋生信频道-挑圈联靠公号~

d04ddeb88d03f6f501e51b7390bc077b.png
—END—

本文首发于“挑圈联考”微信公众号

转载请注明:解螺旋·临床医生科研成长平台

<think>好的,用户想了解息学中的主成分分析PCA)的方法与应用。首先,我需要回忆PCA的基本原理,然后结合息学的具体应用场景。根据提供的引用资料,PCA在基因组学、细胞学等领域有广泛应用,但要注意其局限性,比如非线性数据可能不适用。 用户可能想知道如何在息学中实施PCA,包括步骤和注意事项。需要分步骤解释:数据预处理、协方差矩阵计算、特征分解、主成分选择、结果解释。同时,要提到息学的具体例子,比如基因表达数据分析或种群遗传结构分析,这样用户能更直观理解。 还要注意用户提到的引用内容,特别是引用3和4,强调数据集成中的高效方法以及PCA的适用场景。可能需要提到使用软件如SPSS简化流程,但真正理解需要代码实现,不过用户可能更关注实际应用而非代码细节。 另外,用户可能关心PCA息学中的实际案例,比如降维后可视化样本间关系,或者去除批次效应。需要指出这些应用场景,并引用相关文献支持。 后,考虑用户可能的问题,比如如何处理高维数据、与其他降维方法比较、结果解释的挑战等,确保回答全面且引导用户进一步思考。需要确保回答结构清晰,分点明确,引用正确,并自然融入参考资料中的息。</think>### 息学中的主成分分析PCA)方法与应用 #### 一、PCA的核心原理 主成分分析PCA)是一种线性降维方法,通过正交变换将原始高维数据映射到低维空间,保留大方差的方向作为主成分。数学上,PCA通过计算协方差矩阵的特征值和特征向量,选择前$k$个大特征值对应的特征向量作为主成分[^1]。 #### 二、息学中的实施步骤 1. **数据预处理** - 标准化处理:基因表达数据通常需进行标准化(如$z$-score标准化),消除量纲差异[^2] - 缺失值处理:通过均值填补或插值方法解决基因测序数据中的缺失值问题 2. **协方差矩阵与特征分解** 对标准化后的数据矩阵$X$计算协方差矩阵$C = \frac{1}{n-1}X^TX$,并通过特征值分解获取主成分方向: $$ C = V\Lambda V^T $$ 其中$\Lambda$为特征值对角矩阵,$V$为特征向量矩阵 3. **主成分选择** 根据累计贡献率(如$\sum_{i=1}^k \lambda_i / \sum \lambda_i \geq 85\%$)确定保留主成分数量 #### 三、典型应用场景 1. **基因表达数据分析** - 可视化样本聚类:通过前2-3个主成分绘制散点图,识别癌症亚型或实验批次效应 - 案例:TCGA数据库中乳腺癌样本的分子分型分析[^3] 2. **种群遗传结构解析** - 利用SNP数据主成分分析欧亚人群迁徙历史 - 示例:千人基因组计划中群体遗传距离的可视化 3. **多组学数据整合** - 整合转录组、蛋白质组数据时进行维度压缩 - 注意:需先对异构数据进行联合标准化处理[^4] #### 四、注意事项与优化策略 1. **非线性关系处理** 当基因互作存在非线性特征时,可结合核PCA(Kernel PCA)或t-SNE方法 2. **高维小样本问题** 针对单细胞测序等高维数据($p \gg n$),建议采用稀疏PCA(SPCA)增强解释性 3. **结果验证方法** - 通过置换检验评估主成分显著性 - 结合聚类稳定性分析(如轮廓系数) #### 五、与其他技术的对比 | 方法 | 适用场景 | 息学案例 | |------------|-------------------------|------------------------------| | PCA | 线性关系/全局结构 | 基因表达谱降维 | | t-SNE | 局部结构/可视化 | 单细胞转录组可视化 | | UMAP | 保留拓扑结构 | 多组学数据整合 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值