一、关键词:
主成分分析思想:降维
信息量:第一主成分,第二主成分,.....
模型:矩阵方程或线性方程组
方程条件:主成分系数平方和为1,主成分间独立,主成分的方差递减
几何意义:坐标系旋转,以达到浓缩并覆盖原始信息避免信息重叠。
基于协方差阵求主成分:1.特征根,2.特征向量.3.第 i 主成分系数对应第 i 特征根的特征向量。
4.累积贡献率,5.k个主成分的得分,6.主成分载荷
基于相关系数阵求主成分:1.相关系数矩阵,2.特征根,3.特征向量,......
二、语法
主成份分析过程为princomp,可以从原始变量分析,也可直接从协方差矩阵、相关系数矩阵或叉积阵(SSCP)分析。分析结果可以存储到数据集中,供其他过程调用。
princomp过程一般由下列语句控制:
proc princomp data=数据集 </选项列表> ; |
var 变量列表; |
partial 变量列表; |
weight 变量; |
freq 变量; |
by 变量; |
run ; |
princomp过程的结果表包括每一变量的简单统计数、相关系数或方差-协方差矩阵、特征值和特征向量等。
- 1. proc princomp语句</选项列表>。
l type=cov或type=corr——指明数据集类型,例如:data=new type=corr:表明new为一相关系数corr数据集。
l out=数据集名——规定存储原始数据和主分量得分的输出数据集。
l outstat=数据集名——生成一个包括变量的平均数、标准差、相关系数、特征值、特征向量的输出数据集。另外,如果规定cov选项,还包括由协方差矩阵进行的计算(一般由相关系数矩阵进行计算);
l n=个数——指定主分量个数。
l std——要求在out=的数据集里把主成份得分标准化为单位方差。如果没有规定此项,主成份得分的方差等于相应的特征值。
l noint——要求在模型中不含截距。
l noprint——不打印输出分析结果。
- 2. proc princomp过程中的主要语句。
l var语句——指明分析的数值变量。如果省略var语句,则对所有数值变量进行分析。
partial语句——指明对偏相关阵或偏协方差矩阵进行分析时,被偏出去的这些数值变量的名字。
三、例子
from <<sas/stat User's guide>>
/*-----------------------------------------------------------*/
/* */
/* Pre-season 1985 College Basketball Rankings */
/* (rankings of 35 teams by 10 news services) */
/* */
/* Note: (a) news services rank varying numbers of teams; */
/* (b) not all teams are ranked by all news services; */
/* (c) each team is ranked by at least one service; */
/* (d) rank 20 is missing for UPI. */
/* */
/*-----------------------------------------------------------*/
data HoopsRanks;
input School $13. CSN DurSun DurHer WashPost USAToday
Sport InSports UPI AP SI;
label CSN = 'Community Sports News (Chapel Hill, NC)'
DurSun = 'Durham Sun'
DurHer = 'Durham Morning Herald'
WashPost = 'Washington Post'
USAToday = 'USA Today'
Sport = 'Sport Magazine'
InSports = 'Inside Sports'
UPI = 'United Press International'
AP = 'Associated Press'
SI = 'Sports Illustrated'
;
format CSN--SI 5.1;
datalines;
Louisville 1 8 1 9 8 9 6 10 9 9
Georgia Tech 2 2 4 3 1 1 1 2 1 1
Kansas 3 4 5 1 5 11 8 4 5 7
Michigan 4 5 9 4 2 5 3 1 3 2
Duke 5 6 7 5 4 10 4 5 6 5
UNC 6 1 2 2 3 4 2 3 2 3
Syracuse 7 10 6 11 6 6 5 6 4 10
Notre Dame 8 14 15 13 11 20 18 13 12 .
Kentucky 9 15 16 14 14 19 11 12 11 13
LSU 10 9 13 . 13 15 16 9 14 8
DePaul 11 . 21 15 20 . 19 . . 19
Georgetown 12 7 8 6 9 2 9 8 8 4
Navy 13 20 23 10 18 13 15 . 20 .
Illinois 14 3 3 7 7 3 10 7 7 6
Iowa 15 16 . . 23 . . 14 . 20
Arkansas 16 . . . 25 . . . . 16
Memphis State 17 . 11 . 16 8 20 . 15 12
Washington 18 . . . . . . 17 . .
UAB 19 13 10 . 12 17 . 16 16 15
UNLV 20 18 18 19 22 . 14 18 18 .
NC State 21 17 14 16 15 . 12 15 17 18
Maryland 22 . . . 19 . . . 19 14
Pittsburgh 23 . . . . . . . . .
Oklahoma 24 19 17 17 17 12 17 . 13 17
Indiana 25 12 20 18 21 . . . . .
Virginia 26 . 22 . . 18 . . . .
Old Dominion 27 . . . . . . . . .
Auburn 28 11 12 8 10 7 7 11 10 11
St. Johns 29 . . . . 14 . . . .
UCLA 30 . . . . . . 19 . .
St. Joseph's . . 19 . . . . . . .
Tennessee . . 24 . . 16 . . . .
Montana . . . 20 . . . . . .
Houston . . . . 24 . . . . .
Virginia Tech . . . . . . 13 . . .
;
;/* PROC MEANS is used to output a data set containing the */
/* maximum value of each of the newspaper and magazine */
/* rankings. The output data set, maxrank, is then used */
/* to set the missing values to the next highest rank plus */
/* thirty-six, divided by two (that is, the mean of the */
/* missing ranks). This ad hoc method of replacing missing */
/* values is based more on intuition than on rigorous */
/* statistical theory. Observations are weighted by the */
/* number of nonmissing values. */
/* */
title 'Pre-Season 1985 College Basketball Rankings';
proc means data=HoopsRanks;
output out=MaxRank
max=CSNMax DurSunMax DurHerMax
WashPostMax USATodayMax SportMax
InSportsMax UPIMax APMax SIMax;
run;
data Basketball;
set HoopsRanks;
if _n_=1 then set MaxRank;
array Services{10} CSN--SI;
array MaxRanks{10} CSNMax--SIMax;
keep School CSN--SI Weight;
Weight=0;
do i=1 to 10;
if Services{i}=. then Services{i}=(MaxRanks{i}+36)/2;
else Weight=Weight+1;
end;
run;
ods graphics on;
proc princomp data=Basketball n=1 out=PCBasketball standard
plots=patternprofile;
var CSN--SI;
weight Weight;
run;
ods graphics off;
proc sort data=PCBasketball;
by Prin1;
run;
proc print;
var School Prin1;
title 'Pre-Season 1985 College Basketball Rankings';
title2 'College Teams as Ordered by PROC PRINCOMP';
run;