典型相关分析(canonical correlation analysis)就是利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1和V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体相关性。
二、条件:
典型相关分析有助于综合地描述两组变量之间的典型的相关关系。其条件是,两组变量都是连续变量,其资料都必须服从多元正态分布。
三、相关计算
如果我们记两组变量的第一对线性组合为:
Xu11Yv111(a11,a21,,ap1)1(11,21,,q1)
Var(X)1111Var(u)11
1111221
典型相关分析就是求和,使二者的相关系数达到最大。 11
Var(v)Var(Y)1Cov(X,Y)11121u1,v1Cov(u1,v1)1
典型相关分析希望寻求 a 和 b 使得 ρ 达到最大,但是由于随机变量乘以常数时不改变它们的相关系数,为了防止不必要的结果重复出现,最好的限制是令Var(U)=1 和Var(V)= 1。
1.实测变量标准化; 2.求实测变量的相关阵 3.求
RxxRRyxRxyXXRyyYXR; X1,...,XpXr1prppr1prqpYY1,...,Yqr11rp1XYYYr11rq1r11r1qrp1rpqr11r1qrq1rqq(pq)(pq)
A和B;
XYYYYXBYYYXXXXY
1111AXX4、求A和B的特征根及特征向量;
12...p
A关于i的特征向量(ai1,ai2,…,aip),求B关于
i的
特征向量(bi1,bi2,…,bip) 5、计算Vi和Wi ;
Vibi1X1bi2X2...bipXpWiai1Y1ai2Y2...aiqYq
6、Vi和Wi 的第i对典型相关系数
rii应用典型相关分析的场合是:可以使用回归方法,但有两个或两个以上的因变量;特别是因变量或准则变量相互间有一定的相关性,无视它们之间相互依赖的关系而分开处理,研究就毫无意义。另一种有效用法是检验X变量集合和Y变量集合间的独立性。 四、典型相关系数的检验
典型相关分析是否恰当,应该取决于两组原变量之间是否相关,如果两组变量之间毫无相关性而言,则不应该作典型相关分析。用样本来估计总体的典型相关系数是否有误,需要进行检验。在原假设为真的情况下,检验的统计量为:
1Q0n-1(pq1)ln0 2近似服从自由度为pq的2分布。在给定的显著性水平下,如果22 (pq),则拒绝原假设,认为至少第一对典型变量之间的相关性显著。 相应的R编程如下: setwd(\"D:/data\")
ex1=read.table(\"9-1.txt\ex1
x=ex1[,1:3];x y=ex1[,4:6];y x=as.matrix(x) y=as.matrix(y) x;y
s11=cov(x);s11 s22=cov(y);s22
s12=cov(ex1)[1:3,4:6];s12
s21=cov(ex1)[4:6,1:3];s21#求协方差矩阵
A=solve(s11)%*%s12%*%solve(s22)%*%s21#矩阵相乘用%*%,solve:求逆矩阵 A
eigen(A)#求特征值及其对应的特征向量, eigen(A)$vectors[,1]
a=sqrt(eigen(A)$values)#求典型相关系数=sqrt(特征值) a x t(a) t(t(a))%*%x
B=solve(s22)%*%s21%*%solve(s11)%*%s12 B eigen(B)
sqrt(eigen(B)$values)
A0=prod(1-eigen(A)$values) A0
Q0=-15.5*log(A0);Q0#求检验统计量 pr=1-pchisq(Q0,9)#求P值 pr
m1=cancor(x,y)#典型相关分析 m1
#相关系数的假设检验
corcoef.test<-function(r, n, p, q, alpha=0.1){ #r为相关系数 n为样本个数且n>p+q m<-length(r); Q<-rep(0, m); lambda <- 1 for (k in m:1){
lambda<-lambda*(1-r[k]^2); #检验统计量 Q[k]<- -log(lambda) #检验统计量取对数 }
s<-0; i<-m for (k in 1:m){
Q[k]<- (n-k+1-1/2*(p+q+3)+s)*Q[k] #统计量 chi<-1-pchisq(Q[k], (p-k+1)*(q-k+1)) if (chi>alpha){ i<-k-1; break }
s<-s+1/r[k]^2 }
i #显示输出结果选用第几对典型变量 }
corcoef.test(cancor(x,y)$cor,n=20,p=3,q=3,alpha=0.1)
因篇幅问题不能全部显示,请点此查看更多更全内容