- 概念:探讨一组变量和另一组变量间的相关关系(Canonical Correlation Analysis),是简单相关和多元相关的延伸
- 将参数压缩成一个变量
- 参数限制:标准化变换,使协方差为1
- 拉格朗日展开
- 求导算极值
- 得到特征方程
- 典型变量的性质
- 典型变量相关性的检验:对典型相关系数进行检验,以确定相关系数的个数,然后根据显著的典型相关系数对资料进行典型相关性分析
d11.1=read.table('clipboard',header = T)
#简单相关分析
cor(d11.1)
#多变量相关分析
summary(lm(y1~x1+x2+x3,d11.1))$r.sq
summary(lm(y2~x1+x2+x3,d11.1))$r.sq
summary(lm(y3~x1+x2+x3,d11.1))$r.sq
#典型相关分析
d11.2=read.table('clipboard',header = T)
ca=cancor(d11.1[,1:3],d11.1[,4:6])
ca$cor
#典型变量
ca$xcoef
ca$ycoef
msa.cancor(d11.1[,1:3],d11.1[,4:6],plot = TRUE)
msa.cancor(d11.2[,1:4],d11.2[,5:10],plot = TRUE,pq=2)
msa.cancor<-function (x, y, pq=min(ncol(x),ncol(y)), plot = FALSE){
x = scale(x)
y = scale(y)
n = nrow(x)
p = ncol(x)
q = ncol(y)
ca = cancor(x, y)
#cat("\n"); print(ca)
r = ca$cor
m <- length(r)
Q <- rep(0, m)
P = 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]
P[k] <- 1 - pchisq(Q[k], (p - k + 1) * (q - k + 1))
}
#cat("\n cancor test: \n")
#print(round(data.frame(r, Q, P),4))
cr=round(data.frame(CR=r, Q, P),4)
cat("\n")
u=as.data.frame(ca$xcoef[,1:pq]); colnames(u)=paste('u',1:pq,sep='')
#print(round(u,4))
v=as.data.frame(ca$ycoef[,1:pq]); colnames(v)=paste('v',1:pq,sep='')
#print(round(v,4))
if (plot) {
u1 = as.matrix(x) %*% u[,1]
v1 = as.matrix(y) %*% v[,1]
plot(u1, v1, xlab = "u1", ylab = "v1")
abline(lm(u1 ~ v1))
}
list(cor=cr,xcoef=t(round(u,4)),ycoef=t(round(v,4)))
}