MATLAB-主成分分析法CCC

      不同变量对于样本综合评分的贡献是不同的,对综合评分有较大贡献的变量应该更为重要。主成分分析法CCC是在主成分分析法PCA基础上进行改进得到的。其目的是对高维变量空间进行降维处理,去除冗余,甚至是干扰信息,从而让关键信息凸显出来。主成分分析法 CCC ,较之 PCA 方法,在主成分的基础上重新考虑处理后数据与原变量之间的相关关系,使得算法能够更好地揭露原数据内的隐含关系,客观全面地解决了原指标权重的确定问题,不受人为主观偏好的影响而使得评价指标准确度受经验导向浮动较大。

参考文献:基于总体相关系数法和综合评价法的高水平理工科高校科技成果转化绩效评价研究-陈辉

1. 主成分分析法具体分析步骤为:

(1)设X^{T}是一个p\times n维矩阵,P代表原始数据表中变量的维度,n代表样本个数。

(2)标准化 X 为 X_{S}

X_{S}=\left [ X-\frac{1}{n}IX \right ]diag\left ( \frac{1}{s_{1}} ,\frac{1}{s_{2}},... ,\frac{1}{s_{p}}\right )

 其中I是一个n\times n维的单位矩阵,diag\left ( \cdot \right )是一个对角矩阵,对角线上的元素s_{i}\left ( i=1,2, L,p\right ) 代表第 i 个变量的标准差。

(3)计算样本相关矩阵R_{_{X}}

R_{x}=\frac{1}{n-1}X_{s}^{T}X_{s}

其中 X_{S}^{T} 是 X_{S} 的转置。

(4)计算主成分。假定样本相关矩阵R_{X}的特征根以降序排序为\lambda _{1}\geqslant \lambda _{2}\geqslant L \geqslant \lambda _{p},其对应的相互正交的特征向量为\left ( u_{1}, u_{2}, L, u_{p}\right )

y_{i}=u_{i}^{T}X_{S}^{T} \, \, \, \, i=1,2,...,p

(5)假定第 i 个主成分的方差占总方差的比例为 r_{i} :

r_{i}=\frac{\lambda _{i}}{\lambda _{1}+\lambda _{2}+\begin{matrix} \cdot \cdot \cdot +\lambda _{p}& & \end{matrix}}

(6)计算第 k 个变量与所有主成分的关联程度(总体相关系数CCC)

\rho _{Y,X_{k}}=\sum_{i=1}^{p}\, r_{i}\, \rho _{y_{i},x_{k}}=\sum_{i=1}^{p}\frac{r_{i}\, u_{ki}\sqrt{\lambda _{i}}}{\sqrt{\sigma _{kk}}}

      \rho _{Y,X_{k}} 表明第 k 个变量对原始数据表的重要程度,P_{y_{i},x_{k}} 表示第 k 个变量与第 i 个主成分的相关系数,\lambda _{i} 是样本相关矩阵 R_{X} 的第 i 个特征值,u_{ki}是对应特征向量 u_{k} 的第 i 个元素,\sigma _{kk}表示第 k 个变量的方差。

(7)对CCC值进行归一化处理

\rho_{Y,X_{k}}=\frac{\rho_{Y,X_{k}}}{\sum_{i=1}^{P}\rho_{Y,X_{i}} }

2. 构建评价模型

      通过计算各项指标的CCC值,将其作为每项指标的权重后,利用统计学方法将指标权重后的隐形关系通过评分的方式表现,即综合指数评价法。综合指数评价法是针对于数据的多样性,利用统计学方法根据不同数据的相关性计算得出一个综合性数据的方法,用以宏观地反映事物变化的趋势和变化的程度,等同于将多组不同度量的数据,归一成同一度量的数据,然后通过对比来表明事物综合变化的指标。

     综合指标法以主成分的方差贡献率作为权数,通过计算得出综合评价值Z:

Z_{i}=\sum_{j=1}^{P}\rho _{Y,X_{j}}\, X_{ij}\, \, \, \, \left ( i=1,2,...,k \right )

     Z_{i} 表示第 i 个高校的综合指数,Z_{i} 值越大,表示综合评价值越高,\rho _{Y,X_{j}} 表示第 j 个指标的CCC值,X_{ij} 表示第 i 个高校的第 j 个指标。

 MATLAB示例数据(7个样本,每个样本对应9个变量值)相当于X^{T}

ABCDEFG
14.4479987115.3057918454.9740698848.5851439925.4357094147.194769717.293012921
25.4837106615.5980818356.0452602015.9489021195.6249897226.1875550467.154444268
35.2548925145.9784519185.4377481426.2285714296.6032807765.8107847676.118644068
41.8840579714.1588785051.0642781883.6206896555.3558718864.9857549868
50.5797101451.3551401870.1791359332.6724137932.5444839862.3741690414.926829268
67.0588235295.9090909093.759.0875912415.4794520556.56.279069767
7101010010100
81.0526315793.3333333333.3333333336.6666666672.53.3333333331.666666667
93.5376252984.7002425525.5796894194.9006839665.9846179964.3559997624.268801758

 MATLAB程序源代码

clc;
clear all;

% 输入XT矩阵   
p=9;n=7;      % p为数据表中变量的维度,n为样本个数
XT=xlsread('C:\Users\Administrator\Desktop\MATLAB程序\主成分分析\数据(去中心化).xlsx') ;
X=XT';
%标准化X为Xs
s1=std(X(:,1),1);
s2=std(X(:,2),1);
s3=std(X(:,3),1);
s4=std(X(:,4),1);
s5=std(X(:,5),1);
s6=std(X(:,6),1);
s7=std(X(:,7),1);
s8=std(X(:,8),1);
s9=std(X(:,9),1);
I=eye(n,n);
a=[1/s1,1/s2,1/s3,1/s4,1/s5,1/s6,1/s7,1/s8,1/s9];
b=diag(a,0);
Xs=(X-(1/n)*I*X)*b;

% 计算样本相关矩阵Rx
Rx=(Xs'*Xs)/(n-1);

%计算主成分
[c,d]=eig(Rx);      % c为特征向量,d为特征值
for i=1:p
    e(i)=d(i,i);    % 把矩阵的特征值存储到矩阵e中
end

u1=c(:,1);
y1=(u1')*(Xs');
u2=c(:,2);
y2=(u2')*(Xs');
u3=c(:,3);
y3=(u3')*(Xs');
u4=c(:,4);
y4=(u4')*(Xs');
u5=c(:,5);
y5=(u5')*(Xs');
u6=c(:,6);
y6=(u6')*(Xs');
u7=c(:,7);
y7=(u7')*(Xs');
u8=c(:,8);
y8=(u8')*(Xs');
u9=c(:,9);
y9=(u9')*(Xs');

% 计算ri,在程序中放到了r矩阵
f=0;
for i=1:p
    f=f+abs(e(i)) ;
end
for i=1:p
    r(i)=abs(e(i))/f ;
end

%总体相关系数CCC    9个变量
for j=1:p
    g(j)=var(X(:,j));    % g(i)为第i个变量的方差
end

%第一个变量与所有主成分的关联程度
PYX1=0;
for i=1:p
    PYX1=PYX1+(r(i)*u1(i)*sqrt(abs(e(i))))/g(1);
end

%第二个变量与所有主成分的关联程度
PYX2=0;
for i=1:p
    PYX2=PYX2+(r(i)*u2(i)*sqrt(abs(e(i))))/g(2);
end

%第三个变量与所有主成分的关联程度
PYX3=0;
for i=1:p
    PYX3=PYX3+(r(i)*u3(i)*sqrt(abs(e(i))))/g(3);
end

%第四个变量与所有主成分的关联程度
PYX4=0;
for i=1:p
    PYX4=PYX4+(r(i)*u4(i)*sqrt(abs(e(i))))/g(4);
end

%第五个变量与所有主成分的关联程度
PYX5=0;
for i=1:p
    PYX5=PYX5+(r(i)*u5(i)*sqrt(abs(e(i))))/g(5);
end

%第六个变量与所有主成分的关联程度
PYX6=0;
for i=1:p
    PYX6=PYX6+(r(i)*u6(i)*sqrt(abs(e(i))))/g(6);
end

%第七个变量与所有主成分的关联程度
PYX7=0;
for i=1:p
    PYX7=PYX7+(r(i)*u7(i)*sqrt(abs(e(i))))/g(7);
end

%第八个变量与所有主成分的关联程度
PYX8=0;
for i=1:p
    PYX8=PYX8+(r(i)*u8(i)*sqrt(abs(e(i))))/g(8);
end
    
%第九个变量与所有主成分的关联程度
PYX9=0;
for i=1:p
    PYX9=PYX9+(r(i)*u9(i)*sqrt(abs(e(i))))/g(9);
end

%对CCC值进行归一化处理
m=40;     %偏移m
PYX=[PYX1+m PYX2+m PYX3+m PYX4+m PYX5+m PYX6+m PYX7+m PYX8+m PYX9+m];
T=0;
for i=1:p
    T=T+PYX(i);
end
for i=1:p
    w(i)=PYX(i)/T;
end
disp('每个变量的权重w:');
w

for i=1:n
    for j=1:p
        z(i)=w(j)*X(i,j);   
end
end
disp('7个样本的综合评分Z:');
z

MATLAB程序运行结果

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
主成分分析(PCA)是一种常用的数据降维方,可以将高维数据降到低维,并且保留数据的大部分信息。如果您想用PCA求解权重,可以按照以下步骤进行: 1. 准备数据 首先,您需要准备一个数据矩阵X,其中每行代表一个样本,每列代表一个特征。 2. 中心化数据 PCA算的第一步是将数据矩阵X进行中心化,即每个特征减去其平均值。这可以通过以下代码实现: ```matlab X = X - mean(X); ``` 3. 计算协方差矩阵 接下来,需要计算协方差矩阵C。可以使用MATLAB中的cov函数: ```matlab C = cov(X); ``` 4. 计算特征值和特征向量 对协方差矩阵C进行特征值分解,得到特征值和特征向量。可以使用MATLAB中的eig函数: ```matlab [V,D] = eig(C); ``` 其中,V是特征向量矩阵,每列代表一个特征向量;D是特征值矩阵,对角线上的元素是特征值。 5. 选择主成分 根据特征值的大小,选择前k个主成分,其中k是您想要降到的维数。可以使用以下代码实现: ```matlab [~, idx] = sort(diag(D), 'descend'); V = V(:,idx); V = V(:,1:k); ``` 6. 计算权重 最后,可以将原始数据矩阵X与所选的主成分矩阵V相乘,得到降维后的数据。这个过程中,每个样本的权重就是它在主成分上的投影值。可以使用以下代码实现: ```matlab W = X * V; ``` 其中,W是降维后的数据矩阵,每行代表一个样本,每列代表一个主成分。每个样本的权重就是W矩阵中对应行的值。 希望这可以帮助您用MATLAB实现PCA求解权重。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值