测试数据:
X1X2X3Y1Y2Y3
1913650516260
193385812101101
18935461315558
2113856810138
17631741520040
16934501712038
154346414215105
193364667031
176375446025
15633541522573
1893752211060
16235621210537
1823656410142
1673460612540
154335617251250
166335213210115
247465015050
202376212210120
15732521123080
1383368211043
#####典型相关分析
#依赖函数:cancor
#输入参数:训练数据CCAdata,
#输出结果:输出序号1(输出标签:第一组指标标准化结果)对应数据集CCAdata1
# 输出序号2(输出标签:第二组指标标准化结果)对应数据集CCAdata2
# 输出序号3(输出标签:典型相关分析结果)对应数据集ca
# 输出序号4(输出标签:第一组指标数据的典型载荷)对应数据集U
# 输出序号5(检验结果:第二组指标数据的典型载荷)对应数据集V
# 输出序号6(输出标签:散点图)对应图片
# 输出序号7(输出标签:显著性检验结果)对应数据集corcoef_test
#code
#读取数据
CCAdata=read.csv("C:\\Users\\Administrator\\Desktop\\CCA_test.csv")
#第一组指标
CCAdata1 <- CCAdata[,1:3] #此处选取原始数据第1、2、3列为第一组指标
#第二组指标
CCAdata2 <- CCAdata[,4:6] #此处选取原始数据第4、5、6列为第二组指标
#对第一、二组指标进行中心化和标准化,用于消除数据数量级的影响
CCAdata1_Z<-scale(CCAdata1) #(输出序号1)
CCAdata2_Z<-scale(CCAdata2) #(输出序号2)
#cancor用于典型相关分析的计算及输出
ca<-cancor(CCAdata1_Z,CCAdata2_Z);ca #(输出序号3)
#样本数据在典型变量下得分计算及输出
U<-as.matrix(CCAdata1_Z)%*% ca$xcoef ; U #xcoef为第一组指标数据的典型载荷(输出序号4)
V<-as.matrix(CCAdata2_Z)%*% ca$ycoef ; V #ycoef为第二组指标数据的典型载荷(输出序号5)
#画相关变量U和V的数据散点图,此处因为前面每组指标均有三个变量,故画三个
#画相关变量U1和V1为坐标的数据散点图(输出序号6)
plot(U[,1], V[,1], xlab="U1", ylab="V1")
#画相关变量U1和V1为坐标的数据散点图
plot(U[,2], V[,2], xlab="U2", ylab="V2")
#画相关变量U1和V1为坐标的数据散点图
plot(U[,3], V[,3], xlab="U3", ylab="V3")
##典型相关系数的显著性检验
#典型相关系数检验的R程序(程序名:corcoef.test)
corcoef.test<-function(r, n, p, q, alpha=0.1)
{
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 <- corcoef.test(r=ca$cor,n=20,p=3,q=3) #n代表训练数据样本数,p代表第一组指标数,q代表第二组指标数(输出序号7)
发表评论
额 本文暂时没人评论 来添加一个吧