sas:主成分分析

最近和同学讨论他们要做的电子医疗系统的时候,聊到单因素分析和主成分分析,一想自己对这方面也不是很懂,就用sas做了一套标准的流程,记录如下:

个人总结:如果遇到多因素分析,想要很多很多个自变量与因变量进行线性回归分析必须进行降维,一种很好的解决方案就是主成分分析。

引言

主成分分析,举了这么个例子:就像你选女人,有身材、相貌两个指标,如果身材、相貌都很突出,那当然很好选择;但如果两个女人,一个身材突出,一个相貌出众,看着都很喜欢,那可如何是好!这个时候通过主成分分析,汇总出一个指标,这个指标可以一定程度上代替原来的身材、相貌,这时就可以排序做出选择了。

这例子当然有很多缺陷,但至少指出了主成分分析的目的之一:减少决策变量数,也就是降维。主成分分析的另一个目的是防范多重共线性。实际问题往往涉及很多变量,但某些变量之间会有一定的相关性,我们希望构造较少的几个互不相关的新指标来代替原始变量,去除多重共线性,减少所需分析的变量,同时尽可能减少这一过程的信息损失。主成分分析正是基于这样的目的而产生的有效方法。

主成分分析流程

1、原始数据标准化。

2、计算标准化变量间的相关系数矩阵。

3、计算相关系数矩阵的特征值和特征向量。

4、计算主成分变量值。

5、统计结果分析,提取所需的主成分。

实例(个人觉得说了再多,其实一个实例就懂了)

下表列出了1999年全国31个省、直辖市和自治区(港、澳、台不在其中)的城镇居民家庭平均每人全年消费性支出的八个主要变量数据,请从八个变量中识别出主成分。

变量说明(随便从网上找的数据)

x1:食品                        x2:交通和通讯

x3:衣着                        x4:娱乐教育文化服务

x5:家庭设备用品及服务   x6:居住

x7:医疗保健                  x8:杂项商品和服务

1.对照省份可用sas做表

data comp;
input name $ x1-x8;
cards;
北京	2959.19	730.79	749.41	513.34	467.87	1141.82	478.42	457.64
天津	2459.77	495.47	697.33	302.87	284.19	735.97	570.84	305.08
河北	1495.63	515.90	362.37	285.32	272.95	540.58	364.91	188.63
山西	1406.33	477.77	290.15	208.57	201.50	414.72	281.84	212.10
内蒙古	1303.97	524.29	254.83	192.17	249.81	463.09	287.87	192.96
辽宁	1730.84	553.90	246.91	279.81	239.18	445.20	330.24	163.86
吉林	1561.86	492.42	200.49	218.36	220.69	459.62	360.48	147.76
黑龙江	1410.11	510.71	211.88	277.11	224.65	376.82	317.61	152.85
上海	3712.31	550.74	893.37	346.93	527.00	1034.98	720.33	462.03
江苏	2207.58	449.37	572.40	211.92	302.09	585.23	429.77	252.54
浙江	2629.16	557.32	689.73	435.69	514.66	795.87	575.76	323.36
安徽	1844.78	430.29	271.28	126.33	250.56	513.18	314.00	151.39
福建	2709.46	428.11	334.12	160.77	405.14	461.67	535.13	232.29
江西	1563.78	303.65	233.81	107.90	209.70	393.99	509.39	160.12
山东	1675.75	613.32	550.71	219.79	272.59	599.43	371.62	211.84
河南	1427.65	431.79	288.55	208.14	217.00	337.76	421.31	165.32
湖北	1783.43	511.88	282.84	201.01	237.60	617.74	523.52	182.52
湖南	1942.23	512.27	401.39	206.06	321.29	697.22	492.60	226.45
广东	3055.17	353.23	564.56	356.27	811.88	873.06	1082.82	420.81
广西	2033.87	300.82	338.65	157.78	329.06	621.74	587.02	218.27
海南	2057.86	186.44	202.72	171.79	329.65	477.17	312.93	279.19
重庆	2303.29	589.99	516.21	236.55	403.92	730.05	438.41	225.80
四川	1974.28	507.76	344.79	203.21	240.24	575.10	430.36	223.46
贵州	1673.82	437.75	461.61	153.32	254.66	445.59	346.11	191.48
云南	2194.25	537.01	369.07	249.54	290.84	561.91	407.70	330.95
西藏	2646.61	839.70	204.44	209.11	379.30	371.04	269.59	389.33
陕西	1472.95	390.89	447.95	259.51	230.61	490.90	469.10	191.34
甘肃	1525.57	472.98	328.90	219.86	206.65	449.69	249.66	228.19
青海	1654.69	437.77	258.78	303.00	244.93	479.53	288.56	236.51
宁夏	1375.46	480.89	273.84	317.32	251.08	424.75	228.73	195.93
新疆	1608.82	536.05	432.46	235.82	250.28	541.30	344.85	214.40
;
run;

2.假定相互独立,得到特征向量
proc princomp
data = mylib.comp
out = mylib.changecomp
prefix = comp /*(具体数据分析过程只需要看数据,避免其他的干扰,改成代号名称)*/
outstat = mylib.result
;
var x1-x8;
run ;


会得到以下结果:






除此之外,得到的changecomp表为:


得到的result表为:


3.快速得到主成分

首先我们需要知道主成分分析希望能够达到什么样的目的:

将多个指标转换为少数几个相互独立的且包含原来指标大部分信息(一般是80%或85%)的综合指标

假如你并不想知道各种结果的含义,只想知道那些是主成分,那其实只需要用到上面的“相关矩阵的特征值”表的最后两列:比例和累积

累积从哪一行大于85%就行了;本实例是从第三行,因为这3个变量合起来解释了原来8个变量87.81%的信息,能够满足要求。

4.详细解读各种表

表1:PRINCOMP 过程

31个观测代表数据中的31个省份/直辖市;

8个变量代表最开始的8个成分

表2:简单统计量

这个表也很简单,均值x不用说,StD是标准差,即方差开个正根

表3:相关矩阵

相关系数又称皮氏积矩相关系数(Pearson product-moment correlation coefficient,PPCC),就是我们高中统计学独立检验时候的r值;

当r>0时,表示两变量正相关,当r<0时,表示两变量为负相关。当|r|=1时,表示两变量为完全线性相关即函数关系。当r=1时,称为完全正相关,而当r=-1时,称为完全负相关。当r=0时,表示两变量间无线性相关关系。

当︱r︱≥0.8时,可视为高度相关;当0.5≤︱r︱<0.8时,可视为中度相关;当0.3≤︱r︱<0.5时,视为低度相关;当︱r︱<0.3时,说明两个变量之间的相关程度极弱。


本表里的x1与x5、x1与x8、x3与x6高度相关;x2与x7负相关

表4:相关矩阵的特征值

列1.特征值越大,表示对应的主成分变量包含的信息越多,对原始变量的解释力度越强。

列2.相邻两行特征值之间的差值

列3.改行特征值/总特征值的和

列4.前面几行的列3的和

(误区:变量不是越多越好,否则不能达到降维的目的,一般等sqrt(num))

表5:特征向量

这个和特征值都是线性代数的内容,幸亏还是学过这门课。


表3是A,表5的每一列是V,表4的特征值是lmt

5.除此之外的一些东西


1.以comp1与comp2分布散点图:(载荷图)

proc plot

data=mylib.changecomp vpct=100;/*vpct后的数值表示图所占页面的长度*/

plot comp1*comp2 ='*'$ name/

/* ='*'表明图中的散点用*表示,还可用#等*/

/*美元符号后写标签变量 name 代表每个点根据name变量命名*/

haxis=-3.5 to 3 by 0.5

HREF=-2,0,2      vaxis=-3 to 6 by 0.5

VREF=-2,0,2;    /*HREF代表垂直于水平轴-2,0,2处画参考线,VREF同理*/

title '主成分散点图'

;  /*title为结果命名。Plot:主成分散点图,否则Plot:SAS系统*/

run;


2.changecomp表的comp变量是怎么来的


主成分变量是原始变量的线性表示,用公式表示如下:;

X表示原始变量对应数据组成的矩阵(以下称为原始数据矩阵),U是特征向量以列向量形式依次排列组成的矩阵(以下称为特征向量矩阵)。

但是这样做有问题,原始数据还未标准化;

proc standard
data = mylib.comp
out = mylib.standard
mean = 0
std=1;
var x1-x8;
run ;




正确的公式应该是;

3.变量是否线性相关

proc corr
data = mylib.changecomp
out = mylib.compcorr
;
var comp1-comp8;
with comp1-comp8;
run ;




可以看出,主成分变量之间的相关系数都为零。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值