因子分析是一种多变量统计方法,旨在揭示观测数据中的潜在结构。该方法的目标是确定观测数据中的隐藏因子,这些因子可以解释变量之间的共变性。通过因子分析,可以降低数据的维度,将多个变量归纳为较少的潜在因子,从而简化数据的解释和分析。
在因子分析中,有两种主要类型的因子:公因子和特殊因子。
1. **公因子(Common Factors):** 反映观测变量之间共享的方差,即彼此之间的共同影响。这些因子代表了数据中的共同结构或潜在变量。
2. **特殊因子(Unique Factors):** 表示每个观测变量特有的方差,即不能通过公共因子解释的部分。这些因子包含了每个变量独特的信息。
在因子分析过程中,研究者通常会利用协方差矩阵或相关矩阵来进行分析。常见的因子分析方法包括主成分分析(Principal Component Analysis,PCA)和最大似然法。
因子分析的应用领域包括心理学、社会科学、市场研究等。在心理学中,因子分析经常用于研究人格特质和心理测试的结构。在市场研究中,因子分析可用于分析消费者购物偏好的潜在因素。
总体而言,因子分析是一种强大的数据降维和模式识别工具,有助于揭示观测数据背后的结构和潜在关联。
这里给出两种因子分析的MATLAB代码:
ssgs=load('上市公司数据.txt'); %把原始数据保存在纯文本文件 ssgs.txt 中
n=size(ssgs,1);
x=ssgs(:,[1:4]); y=ssgs(:,5); %分别提出自变量 x1...x4 和因变量 x 的值
x=zscore(x); %数据标准化
r=corrcoef(x) %求相关系数矩阵
[vec1,val,con1]=pcacov(r)
%进行主成分分析的相关计算,vec1 的列为 r 的特征向量,即主成分系数,val 为特征值
f1=repmat(sign(sum(vec1)),size(vec1,1),1);%构造与 vecl 同尾数的元素为 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 %显示回归系数,和相关统计量的值
x=load('生化指标数据.txt'); %把原始数据保存在纯文本文件 ssgs.txt 中
x=zscore(x); %数据标准化
r=corrcoef(x) %求相关系数矩阵
[vec1,val,con1]=pcacov(r)
%进行主成分分析的相关计算,vec1 的列为 r 的特征向量,即主成分系数,val 为特征值
f1=repmat(sign(sum(vec1)),size(vec1,1),1);%构造与 vecl 同尾数的元素为 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])]; %旋转后全部因子的载荷矩阵,前两个旋转,后面不旋转
degree=sum(bm.^2,2)%计算共同度
con2=sum(bt.^2)
%计算因子贡献
check=[con1,con2'/sum(con2)*100]%该语句是领会旋转意义,con1 是未旋转前的贡献率
rate=con2(1:num)/sum(con2) %计算因子贡献率
coef=inv(r)*bm
%计算得分函数的系数