高山流水分享 http://blog.sciencenet.cn/u/friendpine 走在科学路上的一位无名侠客,只是静静的走着.........

博文

学习笔记-主成分分析和主成分回归

已有 13204 次阅读 2010-10-20 22:41 |个人分类:统计学与R语言学习|系统分类:科研笔记

主成份分析是对数据降维的方法,通过从数据中抽提少数的主成份来近似代表数据。选择主成份是根据数据的方差来进行的,每次选择的主成份都是数据中方差最大的方向,并且主成份之间不相关。

求主成份的两种方法:
1 从变量构成的矩阵X出发,先求出t(X)X的特征值和特征向量,然后用X乘以特征向量就得到了主成份
2 从矩阵X的相关矩阵出发,求相关矩阵的特征值和特征向量,然后用归一化的X乘以特征向量得到了主成份

主成份的选择:
主成份分析的目的是用尽量少的主成份代表众多的变量,因此它们所包含的信息量不应该损失太多。数据的方差大小代表了所包含的信息量,主成份的方差等于相关矩阵的特征值,而特征值的加和等于变量的个数p,因此选择主成份可以根据它们所代表的信息量,即特征值的进行。一般来说,可以选择信息量大于80%或者更高的前面几个主成份,也可以选择特征值大于1的主成份。如果选择了所有的主成份就相当于没有做主成份分析了。

主成分分析的应用:
1 从数据中抽提到的主成份相当于对于数据的一种浓缩,得到的主成份往往综合了多个变量的信息,因此可以用于进行综合评价。
2 主成份回归

主成份回归:
主成份回归可以解决变量间共线性的问题。它使用从数据抽提出的主成份进行回归,一般来说是选择前面的几个主成份。下面给出一个例子,训练集中的自变量数据X和因变量y,以及测试集中的数据Xnew和因变量Ynew,结果给出训练集中的回归模型得到的预测值和实际值的相关系数,以及测试集中相应的相关系数。代码是采用R语言。

principle <- function(x,y,xnew,ynew){
#给定系数矩阵x,和反应变量y,以及需要预测的系数矩阵xnew和ynew
   xmean <- colMeans(x);
   xsd <- sd(x);
   x <- scale(x);  #归一化
   p <- ncol(x);
   n <- nrow(x);
   corr <- cor(x);
   e <- eigen(corr);
   main <- x %*% e$vec;
   select <- 0;
 #根据特征值大于等于1选择主成份个数
   for(i in 1:p){
     if(e$values[i] >= 1) select=select+1
    }
   data <- matrix(rep(0,times=n*select),n);
   for(i in 1:select){
      data[,i] = main[,i];
   }
   model <- lm(y~data);
   coef <- model$coef;
   constant=coef[1];
   coef = coef[2:(select+1)];
   preTrain <- data %*% coef+constant;
   corTrain <- cor(y,preTrain);

#对新数据进行验证
   xnew <- scale(xnew,center=xmean,scale=xsd);  #归一化
   preTest <- (xnew %*% e$vec[,1:select]) %*% coef + constant;
   corTest <- cor(ynew,preTest);
   
   list(corTrain=corTrain,corTest=corTest);
}


参考:余松林《医学统计学》


https://blog.sciencenet.cn/blog-54276-375339.html

上一篇:Muscle,ClustalW和T-coffee的简单比较
下一篇:ridge regression
收藏 IP: 159.226.118.*| 热度|

1 高建国

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 12:13

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部