标签:
设是可观测的随机向量,且
因子分析的一般模型为
(1)的分解
(1)
即因子载荷是第个变量与第个公共因子的相关系数,由于是的线性组合,所以系数是用来度量可由线性组合表示的程度
(2)令,则有
设样本的协方差阵S的特征值为,相应单位正交特征向量为,则S有谱分解式
factor.analy1<-function(S, m){
p<-nrow(S); diag_S<-diag(S); sum_rank<-sum(diag_S)
rowname<-paste("X", 1:p, sep="")
colname<-paste("Factor", 1:m, sep="")
A<-matrix(0, nrow=p, ncol=m,
dimnames=list(rowname, colname))
eig<-eigen(S)
for (i in 1:m)
A[,i]<-sqrt(eig$values[i])*eig$vectors[,i]
h<-diag(A%*%t(A))
rowname<-c("SS loadings", "Proportion Var", "Cumulative Var")
B<-matrix(0, nrow=3, ncol=m,
dimnames=list(rowname, colname))
for (i in 1:m){
B[1,i]<-sum(A[,i]^2)
B[2,i]<-B[1,i]/sum_rank
B[3,i]<-sum(B[1,1:i])/sum_rank
}
method<-c("Principal Component Method")
list(method=method, loadings=A,
var=cbind(common=h, spcific=diag_S-h), B=B)
}
函数输入值是样本方差阵或相关矩阵,是主因子的个数。函数的输出值是列表形式,其内容有估计参数的方法(主成分法),因子载荷(loadings),共性方差和特殊方差,以及因子对变量的共献、贡献率和累计贡献率。
因子分析的目的不仅是求出公共因子,更主要的是应该知道每个公因子的实际意义,但由于前面的估计方法所求出的公因子解,其初始因子载荷矩阵并不满足“简单结构准则”,即各个公因子的典型代表变量很不突出,因而更容易使公因子的实际意义含糊不清,不利用对因子的解释。为此,必须对因子载荷矩阵施行旋转变换,使得因子载荷的每一列各元素的平方按列向0或1两极转化,达到其结构简化的目的。
varimax(x,normalize=T,eps=1e-5)
其中x是因子载荷矩阵,normalize是逻辑变量,即是否对变量进行Kaiser正则化,eps是迭代终止精度。
对55个国家和地区的男子径赛记录作统计,每位运动员记录8项指标:100米跑()、200米跑()、400米跑()、800米跑()、1500米跑()、5000米跑()、10000米跑()、马拉松().八项指标的相关矩阵如下表,取,用主成分法估计因子载荷和共性方差等指标
> x<-c(1.000,
+ 0.923, 1.000,
+ 0.841, 0.851, 1.000,
+ 0.756, 0.807, 0.870, 1.000,
+ 0.700, 0.775, 0.835, 0.918, 1.000,
+ 0.619, 0.695, 0.779, 0.864, 0.928, 1.000,
+ 0.633, 0.697, 0.787, 0.869, 0.935, 0.975, 1.000,
+ 0.520, 0.596, 0.705, 0.806, 0.866, 0.932, 0.943, 1.000)
> names<-c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8")
> R<-matrix(0, nrow=8, ncol=8, dimnames=list(names, names))
> for (i in 1:8){
+ for (j in 1:i){
+ R[i,j]<-x[(i-1)*i/2+j]; R[j,i]<-R[i,j]
+ }
+ }
> source("factor.analy1.R")
> fa<-factor.analy1(R, m=2); fa
$method
[1] "Principal Component Method"
$loadings
Factor1 Factor2
X1 -0.8171700 -0.53109531
X2 -0.8672869 -0.43271347
X3 -0.9151671 -0.23251311
X4 -0.9487413 -0.01184826
X5 -0.9593762 0.13147503
X6 -0.9376630 0.29267677
X7 -0.9439737 0.28707618
X8 -0.8798085 0.41117192
$var
common spcific
X1 0.9498290 0.05017099
X2 0.9394274 0.06057257
X3 0.8915931 0.10840689
X4 0.9002505 0.09974954
X5 0.9376883 0.06231171
X6 0.9648716 0.03512837
X7 0.9734990 0.02650100
X8 0.9431254 0.05687460
$B
Factor1 Factor2
SS loadings 6.6223580 0.8779264
Proportion Var 0.8277947 0.1097408
Cumulative Var 0.8277947 0.9375355
若记
> E<-R-fa$loadings%*%t(fa$loadings)-diag(fa$var[,2])
> sum(E^2)
[1] 0.01740023
公因子个数的确定方法一般有两种,一是根据实际问题的意义或专业理论知识来确定;二是用确定主成分个数的原则,选为满足:
> vm1<-varimax(fa$loadings,normalize=F);vm1
$loadings
Loadings:
Factor1 Factor2
X1 -0.278 -0.934
X2 -0.380 -0.891
X3 -0.547 -0.770
X4 -0.715 -0.624
X5 -0.816 -0.521
X6 -0.904 -0.385
X7 -0.905 -0.393
X8 -0.937 -0.257
Factor1 Factor2
SS loadings 4.211 3.289
Proportion Var 0.526 0.411
Cumulative Var 0.526 0.938
$rotmat
[,1] [,2]
[1,] 0.7617765 0.6478399
[2,] -0.6478399 0.7617765
标签:
原文地址:http://www.cnblogs.com/XBlack/p/4889748.html