当前位置:   article > 正文

matlab在线性代数中的应用_canoncorr

canoncorr

 chapter1

  1. function test1
  2. format rat
  3. a=[1,-2,-1,0,2;
  4. -2,4,2,6,-6;
  5. 2,-1,0,2,3;
  6. 3,3,3,3,4];
  7. %求a的最大无关组
  8. b=rref(a)

  1. function test2
  2. format rat
  3. a=[2 2 -1;
  4. 2 -1 2;
  5. -1 2 2];
  6. %求a的最大无关组
  7. b=[1 4;
  8. 0 3;
  9. -4 2];
  10. c=rref([a,b]);
  11. %
  12. % c =
  13. %
  14. % 1 0 0 2/3 4/3
  15. % 0 1 0 -2/3 1
  16. % 0 0 1 -1 2/3
  17. %
  18. b1=2/3*a(:,1)-2/3*a(:,2)-1*a(:,3)
  19. b2=4/3*a(:,1)+1*a(:,2)+2/3*a(:,3)

chapter2

  1. function test3
  2. format rat
  3. a=[2 1 -5 1;
  4. 1 -3 0 -6;
  5. 0 2 -1 2;
  6. 1 4 -7 6];
  7. %求a的最大无关组
  8. b=[8;
  9. 9;
  10. -5;
  11. 0];
  12. solution =a\b
  13. % 3 -4 -1 1 %solution'

另一种解法---solve函数

  1. function test3_1
  2. format long
  3. syms a b c d
  4. eqn = [2*a+b-5*c+d == 8;
  5. a-3*b-6*d==9;
  6. 2*b-c+2*d==-5;
  7. a+4*b-7*c+6*d==0
  8. ]
  9. [a,b,c,d] = solve(eqn,[a,b,c,d]);
  10. [a,b,c,d]

  1. function test4
  2. format rat
  3. a=[2 4;
  4. 3 -5;
  5. 1 2;
  6. 2 1];
  7. %求a的最大无关组
  8. b=[11;
  9. 3;
  10. 6;
  11. 7];
  12. solution =a\b
  13. % 830/273 113/91 %solution'
  14. a*solution
  15. %
  16. % ans =
  17. %
  18. % 232/21
  19. % 265/91
  20. % 116/21
  21. % 1999/273
  22. format long
  23. a*solution
  24. %
  25. % ans =
  26. %
  27. % 11.047619047619046
  28. % 2.912087912087914
  29. % 5.523809523809523
  30. % 7.322344322344321

 从上面的结果,看出,并不能很好求出结果,对于求得结果,后两个等式基本不满足

  1. function test4_1
  2. format long
  3. syms a b
  4. eqn = [2*a + 4*b == 11;
  5. 3*a-5*b==3;
  6. a+2*b==6;
  7. 2*a+b==7];
  8. [a,b] = solve(eqn,[a,b]);
  9. [a,b]

只求解前三个等式

  1. function test4_2
  2. format rat
  3. a=[2 4;
  4. 3 -5;
  5. 1 2;];
  6. %求a的最大无关组
  7. b=[11;
  8. 3;
  9. 6];
  10. solution =a\b
  11. % 3.090909090909089 1.254545454545454%solution'
  12. a*solution
  13. %
  14. % ans =
  15. %
  16. % 56/5
  17. % 3
  18. % 28/5
  19. format long
  20. a*solution
  21. %
  22. % ans =
  23. %
  24. % 11.199999999999994
  25. % 2.999999999999996
  26. % 5.599999999999997

 欠定方程

  1. function test5_2
  2. format rat
  3. a=[1 -1 -1 1;
  4. 1 -1 1 -3;
  5. 1 -1 -2 1];
  6. %求a的最大无关组
  7. b=[0;
  8. 1;
  9. -1/2];
  10. solution =a\b
  11. % solution =
  12. %
  13. % 0
  14. % -1/2
  15. % 1/2
  16. % 1/39831333786592880

 利用最大线性无关组

  1. function test5
  2. format rat
  3. a=[1 -1 -1 1;
  4. 1 -1 1 -3;
  5. 1 -1 -2 1];
  6. %求a的最大无关组
  7. b=[0;
  8. 1;
  9. -1/2];
  10. c=[a,b];
  11. d=rref(c)
  12. % solution =
  13. %
  14. % 0
  15. % -1/2
  16. % 1/2
  17. % 1/39831333786592880
  18. % d =
  19. %
  20. % 1 -1 0 0 1/2
  21. % 0 0 1 0 1/2
  22. % 0 0 0 1 0
  23. % a-b=0.5;
  24. % c=0.5;
  25. % d=0;

  1. function test5_1
  2. format long
  3. syms a b c d
  4. eqn = [a-b-c+d == 0;
  5. a-b+c-3*d==1;
  6. a-b-2*c+d==-0.5];
  7. [a,b c d] = solve(eqn,[a,b c d]);
  8. [a,b c d]
  9. % ans =
  10. %
  11. % [ 1/2, 0, 1/2, 0]

  1. function test6_1
  2. x=str2sym('[a+sin(d),b;1/c,d]');
  3. y=det(x)
  4. %det(x)%返回x的行列式
  5. %
  6. % x=str2sym('[a+sin(d),b;1/c,d]');
  7. % y=det(x)
  8. %
  9. % y =
  10. %
  11. % (a*c*d - b + c*d*sin(d))/c

  1. function test6
  2. syms a b c d
  3. x=[a+sin(d),b;1/c,d];
  4. y=det(x)
  5. %det(x)%返回x的行列式
  6. % y =
  7. %
  8. % (a*c*d - b + c*d*sin(d))/c

  1. function test7
  2. a=[2/3,sqrt(2);3,1];
  3. b=sym(a)
  4. %
  5. % a=[2/3,sqrt(2);3,1];
  6. % a
  7. %
  8. % a =
  9. %
  10. % 2/3 1393/985
  11. % 3 1
  12. %
  13. % b=sym(a)
  14. %
  15. % b =
  16. %
  17. % [ 2/3, 2^(1/2)]
  18. % [ 3, 1]

  1. function test8
  2. a=[2/3,sqrt(2);3,1];
  3. b=sym(a)
  4. %
  5. % a=[2/3,sqrt(2);3,1];
  6. % a
  7. %
  8. % a =
  9. %
  10. % 2/3 1393/985
  11. % 3 1
  12. %
  13. % b=sym(a)
  14. %
  15. % b =
  16. %
  17. % [ 2/3, 2^(1/2)]
  18. % [ 3, 1]
  19. b(2,2)=str2sym('log(9)')
  20. %
  21. % b(2,2)=str2sym('log(9)')
  22. %
  23. % b =
  24. %
  25. % [ 2/3, 2^(1/2)]
  26. % [ 3, log(9)]

  1. function test9
  2. format rat
  3. a=[0 1 1 -1;
  4. 1 0 -1 1;
  5. 1 -1 0 1;
  6. -1 1 1 0];
  7. [p,d]=eig(a)
  8. format short
  9. p,d
  10. % p =
  11. %
  12. % -1/2 390/1351 780/989 780/3691
  13. % 1/2 -390/1351 780/3691 780/989
  14. % 1/2 -390/1351 780/1351 -780/1351
  15. % -1/2 -1170/1351 0 0
  16. %
  17. %
  18. % d =
  19. %
  20. % -3 0 0 0
  21. % 0 1 0 0
  22. % 0 0 1 0
  23. % 0 0 0 1
  24. %
  25. %
  26. % p =
  27. %
  28. % -0.5000 0.2887 0.7887 0.2113
  29. % 0.5000 -0.2887 0.2113 0.7887
  30. % 0.5000 -0.2887 0.5774 -0.5774
  31. % -0.5000 -0.8660 0 0
  32. %
  33. %
  34. % d =
  35. %
  36. % -3.0000 0 0 0
  37. % 0 1.0000 0 0
  38. % 0 0 1.0000 0
  39. % 0 0 0 1.0000

  1. function test9_1
  2. a=str2sym('[0 1 1 -1;1 0 -1 1;1 -1 0 1;-1 1 1 0]');
  3. [p,d]=eig(a)
  4. % p =
  5. %
  6. % [ 1, 1, 1, -1]
  7. % [ -1, 1, 0, 0]
  8. % [ -1, 0, 1, 0]
  9. % [ 1, 0, 0, 1]
  10. %
  11. %
  12. % d =
  13. %
  14. % [ -3, 0, 0, 0]
  15. % [ 0, 1, 0, 0]
  16. % [ 0, 0, 1, 0]
  17. % [ 0, 0, 0, 1]
  18. %

多元分析

综述:多元分析,是多变量统计分析方法。多变量统计分析的基本出发点:变量之间的相关性,不能简单地把每个变量结果进行汇总。

聚类分析

聚类分析,可以分为两类。一个是面对很多样本,如何将这些样本进行聚类分析,分几个类别,每个类别有不同的特点,这称为Q型聚类分析,就是样本聚类分析;另一个是,每个样本都有很多变量属性,这些属性并不是相互独立的,有的变量之间的相关性较强,即,有的变量可以归为一类,有的单独是一类,这是样本各个评价指标的变量分析,称为R型聚类分析

聚类分析基本概念

相似性度量:

样本的相似性度量:样本有多个属性,每个属性可以视为一个坐标轴,那么含有n个属性的样本都能用n维空间中的一个点表示,这样,一个样本用一个点表示,自然而然,样本之间的相似性,可以用点与点之间的距离作为衡量。(从这里容易看出,对于样本的各个属性,要使用标准化或者归一化操作去除量纲,消除单位不同带来的影响,防止大数据吃掉小数据)下面给出距离的定义

 

 

 

 

常用的有类平均法

 

 

 例题

 

 

 

 

 

 

 

 

 对样本的属性进行聚类分析,变量聚类法,R型聚类

 

变量的相似性度量:相关系数,余弦夹角

变量聚类法:

 例子

 

  1. 1
  2. 0.366 1
  3. 0.242 0.233 1
  4. 0.28 0.194 0.59 1
  5. 0.36 0.324 0.476 0.435 1
  6. 0.282 0.262 0.483 0.47 0.452 1
  7. 0.245 0.265 0.54 0.478 0.535 0.663 1
  8. 0.448 0.345 0.452 0.404 0.431 0.322 0.266 1
  9. 0.486 0.367 0.365 0.357 0.429 0.283 0.287 0.82 1
  10. 0.648 0.662 0.216 0.032 0.429 0.283 0.263 0.527 0.547 1
  11. 0.689 0.671 0.243 0.313 0.43 0.302 0.294 0.52 0.558 0.957 1
  12. 0.486 0.636 0.174 0.243 0.375 0.296 0.255 0.403 0.417 0.857 0.852 1
  13. 0.133 0.153 0.732 0.477 0.339 0.392 0.446 0.266 0.241 0.054 0.099 0.055 1
  14. 0.376 0.252 0.676 0.581 0.441 0.447 0.44 0.424 0.372 0.363 0.376 0.321 0.627 1

 上面的数据文件名称edata10_2.txt;

  1. clc, clear, close all
  2. a=textread('data10_2.txt');%读取下三角相关系数
  3. d=1-abs(a); %进行数据变换,把相关系数转化为距离
  4. d=tril(d); %提出d矩阵的下三角部分
  5. b=nonzeros(d);%去掉d中的零元素
  6. b=b'; %化成行向量
  7. z=linkage(b,'complete'); %按最长距离法聚类
  8. y=cluster(z,'maxclust',2) %把变量划分成两类
  9. ind1=find(y==1);ind1=ind1' %显示第一类对应的变量标号
  10. ind2=find(y==2);ind2=ind2' %显示第二类对应的变量标号
  11. figure
  12. h=dendrogram(z); %画聚类图
  13. set(h,'Color','k','LineWidth',1.3) %把聚类图线的颜色改成黑色,线宽加粗

 

 

 综合运用Q&&R聚类方法

 

 

 

 上面的数据,命名为anli10_1.txt

  1. 5.96 310 461 1557 931 319 44.36 2615 2.20 13631
  2. 3.39 234 308 1035 498 161 35.02 3052 .90 12665
  3. 2.35 157 229 713 295 109 38.40 3031 .86 9385
  4. 1.35 81 111 364 150 58 30.45 2699 1.22 7881
  5. 1.50 88 128 421 144 58 34.30 2808 .54 7733
  6. 1.67 86 120 370 153 58 33.53 2215 .76 7480
  7. 1.17 63 93 296 117 44 35.22 2528 .58 8570
  8. 1.05 67 92 297 115 43 32.89 2835 .66 7262
  9. .95 64 94 287 102 39 31.54 3008 .39 7786
  10. .69 39 71 205 61 24 34.50 2988 .37 11355
  11. .56 40 57 177 61 23 32.62 3149 .55 7693
  12. .57 58 64 181 57 22 32.95 3202 .28 6805
  13. .71 42 62 190 66 26 28.13 2657 .73 7282
  14. .74 42 61 194 61 24 33.06 2618 .47 6477
  15. .86 42 71 204 66 26 29.94 2363 .25 7704
  16. 1.29 47 73 265 114 46 25.93 2060 .37 5719
  17. 1.04 53 71 218 63 26 29.01 2099 .29 7106
  18. .85 53 65 218 76 30 25.63 2555 .43 5580
  19. .81 43 66 188 61 23 29.82 2313 .31 5704
  20. .59 35 47 146 46 20 32.83 2488 .33 5628
  21. .66 36 40 130 44 19 28.55 1974 .48 9106
  22. .77 43 63 194 67 23 28.81 2515 .34 4085
  23. .70 33 51 165 47 18 27.34 2344 .28 7928
  24. .84 43 48 171 65 29 27.65 2032 .32 5581
  25. 1.69 26 45 137 75 33 12.10 810 1.00 14199
  26. .55 32 46 130 44 17 28.41 2341 .30 5714
  27. .60 28 43 129 39 17 31.93 2146 .24 5139
  28. 1.39 48 62 208 77 34 22.70 1500 .42 5377
  29. .64 23 32 93 37 16 28.12 1469 .34 5415
  30. 1.48 38 46 151 63 30 17.87 1024 .38 7368

 R型聚类分析---分析样本所含变量之间的相关性,避免多重线性性对分析的影响

  1. %%
  2. %变量聚类 R-聚类
  3. %% 第一种聚类方法
  4. clc, clear, close all
  5. %a=readmatrix('anli10_1.txt');
  6. a=load('anli10_1.txt');
  7. b=zscore(a); %数据标准化%去除量纲影响
  8. %对每一列进行标准化(每一列表示的是相同的属性)
  9. % Z = zscore(X) returns the z-score for each element
  10. %of X such that columns of X are centered to have
  11. %mean 0 and scaled to have standard deviation 1.
  12. %Z is the same size as X.
  13. % If X is a vector, then Z is a vector of z-scores.
  14. % If X is a matrix, then Z is a matrix of
  15. %the same size as X, and each column of Z has mean 0
  16. %and standard deviation 1.
  17. z=linkage(b','average','correlation'); %按类平均法聚类
  18. figure
  19. h=dendrogram(z); %画聚类图
  20. set(h,'Color','k','LineWidth',1.3) %把聚类图线的颜色改成黑色,线宽加粗
  21. T=cluster(z,'maxclust',6) %把变量划分成6类
  22. for i=1:6
  23. tm=find(T==i); %求第i类的对象
  24. fprintf('第%d类的有%s\n',i,int2str(tm')); %显示分类结果
  25. end
  26. %% 采用另一种聚类度量方法--相关系数距离
  27. clc, clear, close all
  28. %a=readmatrix('anli10_1.txt');
  29. a=load('anli10_1.txt');
  30. b=zscore(a); %数据标准化%去除量纲影响
  31. r=corrcoef(b) %计算相关系数矩阵
  32. %r=corrcoef(b)输入矩阵b,n*m,n个样本的m个属性矩阵
  33. %%输入的b每一列表示同一个属性
  34. %输出r是m*m矩阵,表示列与列之间的相关系数,
  35. %即每个属性之间相关系数
  36. % %corrcoef示例
  37. % x = randn(6,1);
  38. % y = randn(6,1);
  39. % A = [x y 2*y+3];
  40. % R = corrcoef(A)
  41. d=tril(1-r); d=nonzeros(d); %另外一种计算距离方法
  42. z=linkage(d'); %按类平均法聚类
  43. figure
  44. h=dendrogram(z); %画聚类图
  45. set(h,'Color','k','LineWidth',1.3) %把聚类图线的颜色改成黑色,线宽加粗
  46. T=cluster(z,'maxclust',6) %把变量划分成6类
  47. for i=1:6
  48. tm=find(T==i); %求第i类的对象
  49. fprintf('第%d类的有%s\n',i,int2str(tm')); %显示分类结果
  50. end

 

 

 下面,紧接着,进行样本聚类分析,即Q型聚类分析

主成分分析

 

 

 

 

主成分分析,利用已知的m维属性的样本数据X,找到m维方向向量C,时X*C的方差最大(差异化最大,方差表示差异化,方差越大,差异化越大,差异越大,表明找到了已知的m维变量的最大变异),单位化使求得的结果C有意义。

由上,求得的便叫作主成分。一般,求一个主成分不够,还要求几个,并且保证求得的主成分互相正交(这是m维空间,必能求到m个互相正交的单位向量)

 

数据data10_5.txt

  1. 7 26 6 60 78.5
  2. 1 29 15 52 74.3
  3. 11 56 8 20 104.3
  4. 11 31 8 47 87.6
  5. 7 52 6 33 95.9
  6. 11 55 9 22 109.2
  7. 3 71 17 6 102.7
  8. 1 31 22 44 72.5
  9. 2 54 18 22 93.1
  10. 21 47 4 26 115.9
  11. 1 40 23 34 83.8
  12. 11 66 9 12 113.3
  13. 10 68 8 12 109.4

 

 代码如下

  1. clc,clear
  2. %a=readmatrix('data10_5.txt');
  3. a=load('data10_5.txt');
  4. [m,n]=size(a);
  5. x0=a(:,[1:n-1]); y0=a(:,n);
  6. r=corrcoef(x0) %计算相关系数矩阵

 

  1. clc,clear
  2. %输入数据
  3. a=load('data10_5.txt');
  4. [m,n]=size(a);
  5. x0=a(:,[1:n-1]); y0=a(:,n);
  6. xd=zscore(x0); %对设计矩阵进行标准化处理
  7. yd=zscore(y0); %对y0进行标准化处理
  8. r=corrcoef(x0) %计算相关系数矩阵
  9. %% 直接做最小二乘法线性回归
  10. %左除计算回归系数%线性%下面的左除自带的是最小二乘法
  11. hg1=[ones(m,1),x0]\y0; %计算普通最小二乘法回归系数
  12. %变成行向量显示回归系数,其中第1个分量是常数项,
  13. %其它按x1,...,xn排序
  14. hg1=hg1'
  15. %输出最小二乘法结果结果
  16. fprintf('y=%f',hg1(1)); %开始显示普通最小二乘法回归结果
  17. for i=2:n
  18. if hg1(i)>0
  19. fprintf('+%f*x%d',hg1(i),i-1);
  20. else
  21. fprintf('%f*x%d',hg1(i),i-1)
  22. end
  23. end
  24. fprintf('\n')
  25. %% 最小二乘法+pca主成分分析回归
  26. xd=zscore(x0); %对设计矩阵进行标准化处理
  27. yd=zscore(y0); %对y0进行标准化处理
  28. [vec1,lamda,rate]=pcacov(r) %vec1为r的特征向量,lamda为r的特征值,rate为各个主成分的贡献率
  29. f=repmat(sign(sum(vec1)),size(vec1,1),1); %构造与vec1同维数的元素为±1的矩阵
  30. vec2=vec1.*f %修改特征向量的正负号,使得特征向量的所有分量和为正
  31. contr=cumsum(rate) %计算累积贡献率,第i个分量表示前i个主成分的贡献率%根据这个,确定主成分个数是3
  32. df=xd*vec2; %计算所有主成分的得分
  33. num=input('请选项主成分的个数:') %通过累积贡献率交互式选择主成分的个数%输入3
  34. hg21=df(:,[1:num])\yd %主成分变量的回归系数,这里由于数据标准化,回归方程的常数项为0
  35. hg22=vec2(:,1:num)*hg21 %标准化变量的回归方程系数
  36. hg23=[mean(y0)-std(y0)*mean(x0)./std(x0)*hg22, std(y0)*hg22'./std(x0)] %计算原始变量回归方程的系数
  37. %% 开始显示主成分回归结果
  38. fprintf('y=%f',hg23(1));
  39. for i=2:n
  40. if hg23(i)>0
  41. fprintf('+%f*x%d',hg23(i),i-1);
  42. else
  43. fprintf('%f*x%d',hg23(i),i-1);
  44. end
  45. end
  46. fprintf('\n')
  47. %% 下面计算两种回归分析的剩余标准差
  48. rmse1=sqrt(sum((hg1(1)+x0*hg1(2:end)'-y0).^2)/(m-n)) %拟合了n个参数
  49. rmse2=sqrt(sum((hg23(1)+x0*hg23(2:end)'-y0).^2)/(m-num)) %拟合了num个参数

 

显著性检验---置信区间--置信度

确定特征成分个数:1.累计贡献率2.选择的主成分对原始变量的贡献值---相关系数

 

 

 

 

 

 

 

 

 输入数据--》标准化--》相关系数作为变量相似性度量--》pca主成分提取

 

原始数据文件见上

  1. clc, clear, close all
  2. %a=readmatrix('anli10_1.txt');
  3. a=load('anli10_1.txt');
  4. a=zscore(a);
  5. r=corrcoef(a)
  6. [vec1,lamda,rate]=pcacov(r) %vec1为r的特征向量,lamda为r的特征值,rate为各个主成分的贡献率
  7. f=repmat(sign(sum(vec1)),size(vec1,1),1); %构造与vec1同维数的元素为±1的矩阵
  8. vec2=vec1.*f %修改特征向量的正负号,使得特征向量的所有分量和为正
  9. contr=cumsum(rate) %计算累积贡献率,第i个分量表示前i个主成分的贡献率
  10. %根据这个,确定主成分个数是4
  11. %每个主成分占一列
  12. % df=a*vec2; %计算所有主成分的得分
  13. vec1(:,1:4)
  14. df=a*vec2(:,1:4); %计算前四个主成分的得分
  15. tf=df*rate(1:4)/100
  16. [stf,ind]=sort(tf,'descend')
  17. [stf,ind]

 

 

 

因子分析

 

 数据文件anli10_3.txt

  1. 43.31 7.39 8.73 54.89 15.35
  2. 17.11 12.13 17.29 44.25 29.69
  3. 21.11 6.03 7 89.37 13.82
  4. 29.55 8.62 10.13 73 14.88
  5. 11 8.41 11.83 25.22 25.49
  6. 17.63 13.86 15.41 36.44 10.03
  7. 2.73 4.22 17.16 9.96 74.12
  8. 29.11 5.44 6.09 56.26 9.85
  9. 20.29 9.48 12.97 82.23 26.73
  10. 3.99 4.64 9.35 13.04 50.19
  11. 22.65 11.13 14.3 50.51 21.59
  12. 4.43 7.3 14.36 29.04 44.74
  13. 5.4 8.9 12.53 65.5 23.27
  14. 7.06 2.79 5.24 19.79 40.68
  15. 19.82 10.53 18.55 42.04 37.19
  16. 7.26 2.99 6.99 22.72 56.58

 

 

 

 

 

 

 

 得分和负债水平的相关系数和对应置信水平

 得分与负债水平的回归方程及对应显著水平

 

  1. clear
  2. %% 0%导入数据
  3. a = load('anli10_3.txt');
  4. n=size(a,1);%获得样本个数
  5. x=a(:,[1:4]); y=a(:,5); %分别提出自变量x1...x4和因变量y的值
  6. %% 1标准化
  7. x=zscore(x); %数据标准化
  8. %% 2计算相关系数矩阵
  9. r=corrcoef(x) %求相关系数矩阵
  10. %% 3%计算初等载荷矩阵
  11. %计算相关系数矩阵的特征值和对应特征向量
  12. %vel是特征向量,val是特征值,con1是贡献率
  13. [vec1,val,con1]=pcacov(r) %进行主成分分析的相关计算
  14. f1=repmat(sign(sum(vec1)),size(vec1,1),1);
  15. vec2=vec1.*f1; %特征向量正负号转换
  16. f2=repmat(sqrt(val)',size(vec2,1),1);
  17. a=vec2.*f2 %求初等载荷矩阵
  18. %factoran computes the maximum likelihood
  19. %estimate (MLE) of the factor loadings matrix Λ
  20. %in the factor analysis model
  21. %x=μ+Λf+e
  22. %如果指标变量多,选取的主因子个数少,
  23. %可以直接使用factoran进行因子分析
  24. %% 4选择初等载荷矩阵
  25. %num=input('请选择主因子的个数:'); %交互式选择主因子的个数
  26. num=2;
  27. %本题选择2个主因子
  28. am=a(:,[1:num]); %提出num个主因子的载荷矩阵
  29. [bm,t]=rotatefactors(am,'method', 'varimax') %am旋转变换,bm为旋转后的载荷阵
  30. bt=[bm,a(:,[num+1:end])]; %旋转后的载荷阵,前两个旋转,后面不旋转
  31. con2=sum(bt.^2) %计算因子贡献
  32. check=[con1,con2'/sum(con2)*100] %未旋转和旋转后的贡献率对照
  33. rate=con2(1:num)/sum(con2) %计算因子贡献率
  34. con=cumsum(rate)
  35. %贡献-贡献率-累计贡献率%贡献率数据
  36. [con2(1:num)',rate',con']
  37. %% 计算因子得分,进行综合评价
  38. coef=inv(r)*bm %计算得分函数的系数
  39. score=x*coef %计算各个因子的得分
  40. weight=rate/sum(rate) %计算得分的权重
  41. Tscore=score*weight' %对各因子的得分进行加权求和,即求各企业综合得分
  42. [STscore,ind]=sort(Tscore,'descend') %对企业进行排序%得分F
  43. display=[score(ind,:)';STscore';ind']' %显示排序结果
  44. [ccoef,p]=corrcoef([Tscore,y]) %计算F与资产负债的相关系数
  45. [d,dt,e,et,stats]=regress(Tscore,[ones(n,1),y]);%计算F与资产负债的方程
  46. d,stats %显示回归系数,和相关统计量的值
  47. %Model statistics, returned as a numeric vector
  48. %including the R2 statistic, the F-statistic and its p-value,
  49. %and an estimate of the error variance.
  50. %% 利用regress求解线性回归方程
  51. %计算F1与x1-x4的方程
  52. [d_f1,dt,e,et,stats_f1]=regress(score(:,1),[ones(n,1),x]);
  53. d_f1,stats_f1
  54. %计算F2与x1-x4的方程
  55. [d_f2,dt,e,et,stats_f2]=regress(score(:,2),[ones(n,1),x]);
  56. d_f2,stats_f2
  57. % format short
  58. %计算F与F1/F2的方程
  59. [d_ff,dt,e,et,stats_ff]=regress(Tscore,[ones(n,1),score]);
  60. d_ff,stats_ff

 

 

 

 

 

 

 判别分析

 判别分析,根据样本的属性,推断样本的类别,类似于无监督分类模型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

典型相关性分析

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 从表24知,u和v之间的相关系数是0.5537

 

 如上,得到u和v解释本组原始变量的比率分别是0.5818、0.3721

 

 表2-1

典型相关系数 

 

x-u,y-v 

x-v,y-u相关系数

 anli10_5_1.txt

  1. 1.00 0.49 0.53 0.49 0.51 0.33 0.32 0.20 0.19 0.30 0.37 0.21
  2. 0.49 1.00 0.57 0.46 0.53 0.30 0.21 0.16 0.08 0.27 0.35 0.20
  3. 0.53 0.57 1.00 0.48 0.57 0.31 0.23 0.14 0.07 0.24 0.37 0.18
  4. 0.49 0.46 0.48 1.00 0.57 0.24 0.22 0.12 0.19 0.21 0.29 0.16
  5. 0.51 0.53 0.57 0.57 1.00 0.38 0.32 0.17 0.23 0.32 0.36 0.27
  6. 0.33 0.30 0.31 0.24 0.38 1.00 0.43 0.27 0.24 0.34 0.37 0.40
  7. 0.32 0.21 0.23 0.22 0.32 0.43 1.00 0.33 0.26 0.54 0.32 0.58
  8. 0.20 0.16 0.14 0.12 0.17 0.27 0.33 1.00 0.25 0.46 0.29 0.45
  9. 0.19 0.08 0.07 0.19 0.23 0.24 0.26 0.25 1.00 0.28 0.30 0.27
  10. 0.30 0.27 0.24 0.21 0.32 0.34 0.54 0.46 0.28 1.00 0.35 0.59
  11. 0.37 0.35 0.37 0.29 0.36 0.37 0.32 0.29 0.30 0.35 1.00 0.31
  12. 0.21 0.20 0.18 0.16 0.27 0.40 0.58 0.45 0.27 0.59 0.31 1.00

  1. function anli10_5_fuben
  2. clear
  3. %% 数据导入
  4. r = load('anli10_5_1.txt'); %读入相关系数矩阵
  5. %% 根据公式(81)求m1和m2
  6. n1=5; n2=7; num=min(n1,n2);
  7. s11=r([1:n1],[1:n1]); %提出X与X的相关系数
  8. s12=r([1:n1],[n1+1:end]); %提出X与Y的相关系数
  9. s21=s12'; %提出Y与X的相关系数
  10. s22=r([n1+1:end],[n1+1:end]); %提出Y与Y的相关系数
  11. m1=inv(s11)*s12*inv(s22)*s21; %计算矩阵M1,式(81)
  12. m2=inv(s22)*s21*inv(s11)*s12; %计算矩阵M2,式(81)
  13. %% 求m1、m2特征值特征向量
  14. [vec1,val1]=eig(m1); %求M1的特征向量vec1和特征值val1
  15. for i=1:n1
  16. vec1(:,i)=vec1(:,i)/sqrt(vec1(:,i)'*s11*vec1(:,i));
  17. %特征向量归一化,满足a's1a=1
  18. vec1(:,i)=vec1(:,i)*sign(sum(vec1(:,i)));
  19. %特征向量乘以1或-1,保证所有分量和为正
  20. end
  21. val1=sqrt(diag(val1)); %计算特征值的平方根
  22. [val1,ind1]=sort(val1,'descend'); %按照从大到小排列
  23. a=vec1(:,ind1(1:num)) %取出X组的系数阵
  24. % 典型相关系数
  25. dcoef1=val1(1:num) %提出典型相关系数%%************
  26. [vec2,val2]=eig(m2);
  27. for i=1:n2
  28. vec2(:,i)=vec2(:,i)/sqrt(vec2(:,i)'*s22*vec2(:,i));
  29. vec2(:,i)=vec2(:,i)*sign(sum(vec2(:,i)));
  30. end
  31. val2=sqrt(diag(val2)); %计算特征值的平方根
  32. [val2,ind2]=sort(val2,'descend'); %按照从大到小排列
  33. b=vec2(:,ind2(1:num)) %取出Y组的系数阵
  34. % 典型相关系数
  35. dcoef2=val2(1:num) %提出典型相关系数
  36. %% x/y与u、v之间的相关系数
  37. x_u_r=s11*a %x,u的相关系数
  38. y_v_r=s22*b %y,v的相关系数
  39. x_v_r=s12*b %x,v的相关系数
  40. y_u_r=s21*a %y,u的相关系数
  41. %% u和v分别解释x、y的比率
  42. %u解释x组变量--v解释y组变量
  43. mu=sum(x_u_r.^2)/n1 %x组原始变量被u_i解释的方差比例
  44. mv=sum(x_v_r.^2)/n1 %x组原始变量被v_i解释的方差比例%sum(mv)
  45. nu=sum(y_u_r.^2)/n2 %y组原始变量被u_i解释的方差比例%sum(nu)
  46. nv=sum(y_v_r.^2)/n2 %y组原始变量被v_i解释的方差比例
  47. fprintf('X组的原始变量被u1~u%d解释的比例为%f\n',num,sum(mu));
  48. fprintf('Y组的原始变量被v1~v%d解释的比例为%f\n',num,sum(nv));

 典型相关性分析步骤

 

 

 

 

 

 

 

 

 

 

 

matlab求解,u=u(x1,x2,x3,x4,x5,x6) ,u=(u1,u2)

 

 v=v(y1,y2,y3,y4),v=(v1,v2)

 

 

 

 

 

  1. clear
  2. %导入数据
  3. load x
  4. load y
  5. %数据预处理
  6. p=size(x,2);q=size(y,2);
  7. x=zscore(x);y=zscore(y); %标准化数据
  8. n=size(x,1); %观测数据的个数
  9. %下面做典型相关分析
  10. %a1,b1返回的是典型变量的系数,
  11. %r返回的是典型相关系数
  12. %u1,v1返回的是典型变量的值,
  13. %stats返回的是假设检验的一些统计量的值
  14. [a1,b1,r,u1,v1,stats]=canoncorr(x,y)
  15. %根据上面输出的stats,判断怎么利用获得的a1、b1、u1、v1的值,
  16. %下面修正a1,b1每一列的正负号,使得a,b每一列的系数和为正
  17. %对应的,典型变量取值的正负号也要修正
  18. a=a1.*repmat(sign(sum(a1)),size(a1,1),1) %集合1典型标准化相关系数%u=u(x1,x2,x3,x4,x5,x6
  19. b=b1.*repmat(sign(sum(b1)),size(b1,1),1) %集合2典型相关系数
  20. u=u1.*repmat(sign(sum(a1)),size(u1,1),1)
  21. v=v1.*repmat(sign(sum(b1)),size(v1,1),1)
  22. %% 计算x/y与u/v之间的相关系数
  23. x_u_r=x'*u/(n-1) %计算x,u的相关系数%集合1典型载荷
  24. y_v_r=y'*v/(n-1) %计算y,v的相关系数%集合2典型载荷
  25. x_v_r=x'*v/(n-1) %计算x,v的相关系数%集合1交叉载荷
  26. y_u_r=y'*u/(n-1) %计算y,u的相关系数%集合2交叉载荷
  27. %% 典型相关系数的平方
  28. val=r.^2 %典型相关系数的平方,M1或M2矩阵的非零特征值
  29. %% x组原始变量
  30. ux=sum(x_u_r.^2)/p %x组原始变量被u_i解释的方差比例
  31. ux_cum=cumsum(ux) %x组原始变量被u_i解释的方差累积比例
  32. vx=sum(x_v_r.^2)/p %x组原始变量被v_i解释的方差比例
  33. vx_cum=cumsum(vx) %x组原始变量被v_i解释的方差累积比例
  34. [ux',ux_cum',val',vx',vx_cum']
  35. %% y组原始变量
  36. vy=sum(y_v_r.^2)/q %y组原始变量被v_i解释的方差比例
  37. vy_cum=cumsum(vy) %y组原始变量被v_i解释的方差累积比例
  38. uy=sum(y_u_r.^2)/q %y组原始变量被u_i解释的方差比例
  39. uy_cum=cumsum(uy) %y组原始变量被u_i解释的方差累积比例
  40. [vy',vy_cum',val',uy',uy_cum']

 

 

 x.txt

  1. 1.03 0.42 50 2.15 1.23 1.64
  2. 1.34 0.13 131 0.33 -0.27 -0.64
  3. 1.07 0.4 48 1.31 0.49 0.09
  4. -0.43 0.19 20 0.87 3.57 1.8
  5. -0.53 0.25 32 -0.09 -0.33 -0.84
  6. -0.11 0.07 27 0.68 -0.12 0.87
  7. 0.35 0.06 31 0.28 -0.3 -0.16
  8. -0.5 0.27 38 -0.78 -0.12 1.61
  9. 0.31 0.25 43 0.49 -0.09 -0.06
  10. -0.28 0.84 37 -0.79 -0.49 -0.98
  11. 0.01 -0.14 24 0.37 -0.4 -0.49
  12. 0.02 -0.47 28 0.03 0.15 0.26
  13. -0.47 0.03 45 -0.76 -0.46 -0.75
  14. -0.45 -0.2 34 -0.45 -0.34 -0.52
  15. 0.72 -0.83 13 0.05 -0.09 0.56
  16. 0.37 -0.54 21 -0.11 -0.24 -0.02
  17. 0.01 0.38 40 -0.17 -0.4 -0.71
  18. -0.81 -0.49 22 -0.38 -0.21 -0.59
  19. -0.24 -0.91 18 -0.05 -0.27 0.61
  20. -0.53 -0.77 27 -0.45 -0.18 1.08

 y.txt

  1. 45623.05 2.5 8439 16.27
  2. 52256.67 1.3 18579 21.5
  3. 46551.87 1.13 10445 11.92
  4. 28146.76 1.38 7813 15
  5. 38670.43 0.12 8980 26.71
  6. 26316.96 1.37 6609 11.07
  7. 45330.53 0.56 6070 12.4
  8. 45853.89 0.28 7896 13.93
  9. 35964.64 0.74 6497 8.97
  10. 55832.61 -0.12 13149 9.22
  11. 33334.62 0.63 6222 11.63
  12. 24633.27 0.59 5573 16.39
  13. 39258.78 -0.69 9034 22.43
  14. 38201.47 -0.34 7083 18.53
  15. 16524.32 0.44 5323 12.22
  16. 31855.63 -0.02 6019 11.88
  17. 22528.8 -0.16 9069 15.7
  18. 21831.94 -0.15 5497 13.56
  19. 19966.36 -0.15 5344 12.43
  20. 19225.71 -0.16 4233 10.16

将上面的数据存到mat文件里即可,再导入load

对于matlab中的典型相关分析函数canoncorr(x,y)

chi-squared statistic:卡方统计量

[A,B] = canoncorr(X,Y) computes the sample canonical coefficients for the n-by-d1 and n-by-d2 data matrices X and Y. X and Y must have the same number of observations (rows) but can have different numbers of variables (columns). A and B are d1-by-d and d2-by-d matrices, where d = min(rank(X),rank(Y)). The jth columns of A and B contain the canonical coefficients, i.e., the linear combination of variables making up the jth canonical variable for X and Y, respectively. Columns of A and B are scaled to make the covariance matrices of the canonical variables the identity matrix (see U and V below). If X or Y is less than full rank, canoncorr gives a warning and returns zeros in the rows of A or B corresponding to dependent columns of X or Y.

[A,B,r] = canoncorr(X,Y) also returns a 1-by-d vector containing the sample canonical correlations. The jth element of r is the correlation between the jth columns of U and V (see below).

[A,B,r,U,V] = canoncorr(X,Y) also returns the canonical variables, scores. U and V are n-by-d matrices computed as

U = (X-repmat(mean(X),N,1))*A
V = (Y-repmat(mean(Y),N,1))*B

 [A,B,r,U,V,stats] = canoncorr(X,Y) also returns a structure stats containing information relating to the sequence of d null hypotheses that the (k+1)st through dth correlations are all zero, for k = 0:(d-1). stats contains seven fields, each a 1-by-d vector with elements corresponding to the values of k, as described in the following table:

 

 Wilks    
Wilks' lambda (likelihood ratio) statistic

df1    
Degrees of freedom for the chi-squared statistic, and the numerator degrees of freedom for the F statistic
df2    
Denominator degrees of freedom for the F statistic
F    
Rao's approximate F statistic for H(k)0
pF    
Right-tail significance level for F
chisq    
Bartlett's approximate chi-squared statistic for H(k)0 with Lawley's modification
pChisq    
Right-tail significance level for chisq
stats has two other fields (dfe and p) which are equal to df1 and pChisq, respectively, and exist for historical reasons.

典型相关分析五部分:

1.指标相关性corrcoef

2.典型相关系数及检验

3.典型相关模型

4.典型结构分析

5.典型冗余分析与解释能力

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号