美文网首页sas
sas:主成分分析

sas:主成分分析

作者: 中年英雄王叔叔 | 来源:发表于2016-05-25 22:42 被阅读209次

    最近和同学讨论他们要做的电子医疗系统的时候,聊到单因素分析和主成分分析,一想自己对这方面也不是很懂,就用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:特征向量

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

    对于同一个矩阵,特征值和特征向量是一一对应的;

    A是矩阵,V就是特征向量,是特征值

    对比本实例:

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

    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 ;

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

    相关文章

      网友评论

      • u玖乾殿主殿王:一般分析主成分,应该默认的是主成分的个数不超过5个吧?

      本文标题:sas:主成分分析

      本文链接:https://www.haomeiwen.com/subject/bcvtdttx.html