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,可以得到: