因子分析(factor analysis)案例(matlab实现)

Posted Icy Hunter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了因子分析(factor analysis)案例(matlab实现)相关的知识,希望对你有一定的参考价值。


模型介绍:
值得注意的是,特殊因子是不能被公共因子包含的。


载荷矩阵的几个统计性质:



下面通过一个例题来展示。

ssgs = [43.31 7.39 8.73 54.89 15.35
    17.11 12.13 17.29 44.25 29.69
    21.11 6.03 7 89.37 13.82
    29.55 8.62 10.13 73 14.88
    11 8.41 11.83 25.22 25.49
    17.63 13.86 15.41 36.44 10.03
    2.73 4.22 17.16 9.96 74.12
    29.11 5.44 6.09 56.26 9.85
    20.29 9.48 12.97 82.23 26.73
    3.99 4.64 9.35 13.04 50.19
    22.65 11.13 14.3 50.51 21.59
    4.43 7.3 14.36 29.04 44.74
    5.4 8.9 12.53 65.5 23.27
    7.06 2.79 5.24 19.79 40.68
    19.82 10.53 18.55 42.04 37.19
    7.26 2.99 6.99 22.72 56.58];
n = size(ssgs, 1);
x = ssgs(:, [1:4]);
y = ssgs(:, 5);
x = zscore(x); % 对前四个收益指标标准化处理

r = corrcoef(x);  % 计算相关系数矩阵(皮尔逊系数)

[vec1, val, con1] = pcacov(r)
f1 = repmat(sign(sum(vec1)), size(vec1, 1), 1);
vec2 = vec1.*f1; % mu
f2 = repmat(sqrt(val)', size(vec2, 1), 1); % 根号lamda
a = vec2 .* f2 % 根号lamda * mu 初等载荷矩阵

这里<=4因为总共就4个

num = input('请选择主因子个数'); % 选择主因子个数
am = a(:, [1:num]); % 提出num个主因子的载荷矩阵
[bm, t] = rotatefactors(am, 'method', 'varimax') %am旋转变换,bm为旋转后的载荷阵
bt = [bm, a(:, [num+1:end])]; % 旋转后全部因子的载荷矩阵,前两个旋转,后面不旋转
con2 = sum(bt.^2) % 计算因子贡献
check = [con1, con2'/sum(con2) * 100] % 该语句是领会旋转意义,con1是未旋转前的贡献率
rate = con2(1:num)/sum(con2) % 计算因子贡献率


coef = inv(r) * bm % 计算得分函数的系数
score = x * coef % 计算各个因子的得分
weight = rate/sum(rate) % 计算得分的权重
Tscore = score * weight' % 对各个因子的得分进行加权求和,即求各企业的综合得分
[STscore, ind] = sort(Tscore, 'descend') % 对企业进行排序
display = [score(ind, :)'; STscore'; ind'] % 显示排序结果
[ccoef, p] = corrcoef([Tscore, y]) % 计算F与资产负债的相关性系数
[d, dt, e, et, stats] = regress(Tscore, [ones(n, 1), y]); % 计算F与资产负债的方程
d, stats % 显示回归系数,和相关统计量的值

完整代码如下:

clc,clear

ssgs = [43.31 7.39 8.73 54.89 15.35
    17.11 12.13 17.29 44.25 29.69
    21.11 6.03 7 89.37 13.82
    29.55 8.62 10.13 73 14.88
    11 8.41 11.83 25.22 25.49
    17.63 13.86 15.41 36.44 10.03
    2.73 4.22 17.16 9.96 74.12
    29.11 5.44 6.09 56.26 9.85
    20.29 9.48 12.97 82.23 26.73
    3.99 4.64 9.35 13.04 50.19
    22.65 11.13 14.3 50.51 21.59
    4.43 7.3 14.36 29.04 44.74
    5.4 8.9 12.53 65.5 23.27
    7.06 2.79 5.24 19.79 40.68
    19.82 10.53 18.55 42.04 37.19
    7.26 2.99 6.99 22.72 56.58];
n = size(ssgs, 1);
x = ssgs(:, [1:4]);
KMO(x)

y = ssgs(:, 5);
x = zscore(x);% 对前四个收益指标标准化处理
r = corrcoef(x); % 求相关系数矩阵 
[vec1, val, con1] = pcacov(r); % 进行主成分分析的相关计算
f1 = repmat(sign(sum(vec1)), size(vec1, 1), 1);
vec2 = vec1.*f1; % 特征向量正负号转换
f2 = repmat(sqrt(val)', size(vec2, 1), 1);
a = vec2 .* f2 % 求初等载荷矩阵
num = input('请选择主因子个数'); % 选择主因子个数
am = a(:, [1:num]); % 提出num个主因子的载荷矩阵
[bm, t] = rotatefactors(am, 'method', 'varimax') %am旋转变换,bm为旋转后的载荷阵
bt = [bm, a(:, [num+1:end])]; % 旋转后全部因子的载荷矩阵,前两个旋转,后面不旋转
con2 = sum(bt.^2) % 计算因子贡献
check = [con1, con2'/sum(con2) * 100] % 该语句是领会旋转意义,con1是未旋转前的贡献率
rate = con2(1:num)/sum(con2) % 计算因子贡献率
coef = inv(r) * bm % 计算得分函数的系数
score = x * coef % 计算各个因子的得分
weight = rate/sum(rate) % 计算得分的权重
Tscore = score * weight' % 对各个因子的得分进行加权求和,即求各企业的综合得分
[STscore, ind] = sort(Tscore, 'descend') % 对企业进行排序
display = [score(ind, :)'; STscore'; ind']; % 显示排序结果
[ccoef, p] = corrcoef([Tscore, y]) % 计算F与资产负债的相关性系数
[d, dt, e, et, stats] = regress(Tscore, [ones(n, 1), y]); % 计算F与资产负债的方程
d, stats % 显示回归系数,和相关统计量的值


KMO函数的代码(评价里也不知道要不要进行检验,先放着好了)

function kmo=KMO(x)
    R=corrcoef(x); % 简单相关系数
    P=partialcorr(x);  %偏相关系数
    R_1=R-eye(size(R));  %简单相关系数减去对角线上的1
    P_1=P-eye(size(P));  %偏相关系数减去对角线上的1
    KMO=sum(R_1(:).^2)/(sum(R_1(:).^2)+sum(P_1(:).^2))
end

以上是关于因子分析(factor analysis)案例(matlab实现)的主要内容,如果未能解决你的问题,请参考以下文章

R语言因子分析FA(factor analysis)步骤实战

主成分分析(Principal Component Analysis,PCA)与因子分析(factor analysis)

主成分分析(principle component analysis)和因子分析(exploratory factor analysis)主成分分析PCA和因子分析EFA的关系是什么?

因子分析法(Factor Analysis)是什么分析

R语言探索性因子分析(Exploratory factor analysis)

投资因子(Investment factor)——投资组合分析(EAP.portfolio_analysis)