因子分析法(Matlab与SPSS对比)

该博客介绍了如何在Matlab中进行主成分分析和因子分析,包括数据预处理、主成分计算、旋转、因子贡献率计算等步骤,并与SPSS的结果进行了对比。通过示例数据,展示了如何对上市公司财务数据进行分析,最后进行了回归计算验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Matlab代码来源是司守奎书中的案例。

clc;
clear;

%% 1.进行主成分分析
fid = fopen('data.txt');%打开数据文件,返回文件标志符
data1 = textscan(fid,'%s %f %f %f %f %f','CollectOutput',1);
data = data1{2};
data = reshape(data, [16, 5]);
m = size(data, 1);
x = data(:,5);data = data(:,1:4);num = 2;
% 数据标准化
data = zscore(data);
r = cov(data);
% 进行主成分分析的相关计算
[vec, val, con] = pcacov(r);
disp('旋转前特征向量:');
val
disp('旋转前因子贡献率:');
con

f1 = repmat(sign(sum(vec)), size(vec,1), 1);
% 特征向量正负号转换
vec = vec.*f1;
f2 = repmat(sqrt(val)', size(vec,1), 1);
% 载荷矩阵
disp('载荷矩阵');
a = vec.*f2

%% 2.对载荷矩阵进行旋转
% 如果指标变量多,选择的主因子个数少,可以直接使用factoran实现因子分析
% varimax采用最大方差法进行旋转
[b, t] = rotatefactors(a(:,1:num),'method','varimax');
% 旋转后的载荷矩阵
disp('旋转后的载荷矩阵:');
bz = [b,a(:,num+1:end)]
disp('成分转化矩阵');
t
% 计算因子贡献
disp('旋转后的因子贡献:');
gx = sum(bz.^2)
% 计算因子贡献率
disp('旋转后的因子贡献率:');
gxv = gx/sum(gx)
% 计算得分函数的系数
disp('得分函数的系数:');
dfxsh = inv(r)*b
% 计算各个因子的得分
disp('上市公司在各个因子的得分:');
df = data * dfxsh;

% 对各因子的得分进行加权求和
zdf = df*gxv(1:num)'/sum(gxv(1:num));
% 对企业进行排名
[szdf, ind] = sort(zdf, 'descend');
% 显示计算结果
xianshi = [df(ind,:)'; zdf(ind)'; ind'];
for j = 1:m
    i = ind(j);
    disp(['',num2str(j),'名:',data1{1}{i},'=>F1得分为',num2str(df(i,1)),',F2得分为',num2str(df(i,2)),',F得分为',num2str(zdf(i))]);
end
disp('\n');
% 计算相关系数
[x_zdf_coef, p] = corrcoef([zdf, x]);
disp('F与x之间的相关系数为');
x_zdf_coef

%% 回归分析计算
disp('因子分析法回归方程系数为d1');
[d1, d1int,r,rint,stats] = regress(zdf, [ones(m,1), x]);
d1
% 绘制残差及其置信区间
figure(1)
rcoplot(r,rint)
% 绘制回归曲线图
figure(2)
[x,ind] = sort(x);
p = [ones(length(x),1), x]*d1;
plot(x,zdf(ind),'bo');
hold on;
plot(x,p,'rx');

其中data.txt为:

歌华有线	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

结果分析将数据导入SPSS,可以得到:

  1. 对比一:SPSS中的初始特征值部分对应Matlab通过[vec, val, con] = pcacov®得到的val和con值,其中vec特征值对应总计,con为对应方差百分比。
    SPSS结果

因为这里手动设置了提取两个公因子,因此提取载荷平方和部分取的是初始特征值的前两行。
Matlab结果

  1. 对比二:SPSS中总方差解释表中的旋转载荷平方和对应Matlab通过对rotatefactors命令载荷矩阵进行旋转后得到的gx值和gxv值。
    SPSS结果二
    Matlab结果二
  2. 对比三
    SPSS的成分矩阵表对应于Matlab中计算的载荷矩阵a,这里SPSS只取了两个主成分的结果。
    SPSS结果三
    Matlab结果三
  3. 对比四
    SPSS旋转后的成分矩阵对应与Matlab旋转后计算得到的矩阵bz。
    SPSS结果四
    Matlab结果四
  4. 对比五
    SPSS中的成分转换矩阵对应于Matlab计算得到的成分转化矩阵。
    SPSS结果五
    Matlab结果五

其中SPSS对应的一些设置:
设置一
设置二

使用Matlab对最后的结果进行回归计算:
回归图
残差图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值