精华内容
下载资源
问答
  • R语言典型相关分析

    万次阅读 多人点赞 2017-02-27 16:40:46
    部分参考薛毅的《统计建模与R软件》和《R语言实战》1 关键点:典型相关分析典型相关分析是用于分析两组随机变量之间的相关程度的一种统计方法,它能够有效地揭示两组随机变量之间的相互(线性依赖)关系例如 研究生...

    自己整理编写的R语言常用数据分析模型的模板,原文件为Rmd格式,直接复制粘贴过来,作为个人学习笔记保存和分享。部分参考薛毅的《统计建模与R软件》和《R语言实战》

    1 关键点:典型相关分析

    典型相关分析是用于分析两组随机变量之间的相关程度的一种统计方法,它能够有效地揭示两组随机变量之间的相互(线性依赖)关系

    例如 研究生入学考试成绩与本科阶段一些主要课程成绩的相关性

    将研究两组变量的相关性问题转化为研究两个变量的相关性问题 此类相关为典型相关#

    2 分类:

    总体典型相关

    样本典型相关

    3 R语言提供的计算函数:

    典型相关计算 cancor(x,y,xcenter=TRUE,ycenter=TRUE)

    x,y是相应的数据矩阵 xcenter,ycenter是逻辑变量 TRUE是将数据中心化 FALSE是不中心化

    4 分析结果含义

    cor是典型相关系数

    xcoef是对应于数据x的系数 又称关于数据x的典型载荷即样本典型变量U系数矩阵A的转置

    xcenter是数据X的中心 即数据X的样本均值

    y是对应于数据x的系数 又称关于数据y的典型载荷即样本典型变量V系数矩阵B的转置

    ycenter是数据Y的中心 即数据Y的样本均值

    5 分析步骤

    (1.)载入原始数据 data.frame

    (2.)原始数据标准化 scale

    (3.)典型相关分析 cancor

    (4.)相关系数显著性检验 corcoef.test.R


    I.典型相关分析的计算

    现对20名中年人测得三个生理指标:体重(X1) 腰围(X2) 脉搏(X3);三个训练指标:引体向上(Y1) 起座次数(Y2) 跳跃次数(Y3) 试分析这组数据的相关性

    #用数据框的形式输入数据矩阵
    test<-data.frame(
      X1=c(191, 193, 189, 211, 176, 169, 154, 193, 176, 156, 
           189, 162, 182, 167, 154, 166, 247, 202, 157, 138), 
      X2=c(36, 38, 35, 38, 31, 34, 34, 36, 37, 33, 
           37, 35, 36, 34, 33, 33, 46, 37, 32, 33),
      X3=c(50, 58, 46, 56, 74, 50, 64, 46, 54, 54,
           52, 62, 56, 60, 56, 52, 50, 62, 52, 68), 
      Y1=c( 5, 12, 13,  8, 15, 17, 14,  6,  4, 15, 
            2, 12,  4,  6, 17, 13,  1, 12, 11,  2), 
      Y2=c(162, 101, 155, 101, 200, 120, 215,  70,  60, 225, 
           110, 105, 101, 125, 251, 210,  50, 210, 230, 110), 
      Y3=c(60, 101, 58, 38, 40, 38, 105, 31, 25, 73, 
           60, 37, 42, 40, 250, 115, 50, 120, 80, 43)
    )
    #为了消除数量级的影响 将数据标准化处理 调用scale函数
    test<-scale(test)
    #对标准化的数据做典型相关分析
    ca<-cancor(test[,1:3],test[,4:6])
    #查看分析结果
    ca

    结果说明:
    1) cor; xcoef是对应于数据X的系数, 即为关于数据X的典型载荷; ycoefY; xcenter与$ycenter是数据X与Y的中心, 即样本均值;

    2) 对于该问题, 第一对典型变量的表达式为

    U1 = -0.17788841x1 + 0.36232695x2 - 0.01356309x3

    U2 = -0.43230348x1 + 0.27085764x2 - 0.05301954x3

    U3 = -0.04381432x1 + 0.11608883x2 + 0.24106633x3

    V1 = -0.08018009y1 - 0.24180670y2 + 0.16435956y3

    V2 = -0.08615561y1 + 0.02833066y2 + 0.24367781y3

    V3 = -0.29745900y1 + 0.28373986y2 - 0.09608099y3

    相应的相关系数为:p(U1,V1)=0.79560815 ,p(U2,V2)=0.20055604 ,p(U3,V3)=0.07257029

    可以进行典型相关系数的显著性检验, 经检验也只有第一组典型变量.

    下面计算样本数据在典型变量下的得分:

    #计算数据在典型变量下的得分 U=AX  V=BY
    U<-as.matrix(test[, 1:3])%*% ca$xcoef ; U
    V<-as.matrix(test[, 4:6])%*% ca$ycoef ; V
    #调整图形
    opar <- par(mfrow = c(1, 1),mar = c(5,4,1,1))
    #画出以相关变量U1、V1和U3、V3为坐标的数据散点图
    plot(U[,1], V[,1], xlab="U1", ylab="V1")
    plot(U[,3], V[,3], xlab="U3", ylab="V3")
    #调整图形
    par(opar)

    由散点图可知 第一典型相关变量分布在一条直线附近;第三典型相关变量数据很分散。因为第一典型变量其相关系数为0.79560815,接近1,所以在一直线附近;第三典型变量的相关系数是0.07257029,接近于0,所以很分散。


    II.典型相关系数的显著性检验

    作为相关分析的目的 就是选择多少对典型变量?因此需要做典型相关系数的显著性检验。若认为相关系数k为0 就没有必要考虑第k对典型变量了

    #相关系数检验R程序
    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
    }
    source("corcoef.test.R")
    #输入相关系数r,样本个数n,两个随机向量的维数p和q,置信水平a(缺省值为0.1)
    corcoef.test(r=ca$cor,n=20,p=3,q=3)
    #程序输出值为典型变量的对数

    最终程序运行结果显示选择第一对典型相关变量。我们只利用第一典型变量分析问题,达到降维的目的。

    write.csv(test,"test_test.csv") 
    展开全文
  • R语言 相关分析典型相关分析

    千次阅读 2019-03-19 09:14:07
    @R语言相关分析典型相关分析 #相关分析典型相关分析 #pearson相关系数 a=c(1,3,5,7,9);b=c(1,4,6,9,10) cor(a,b) #pearson相关系数 cor.test(a,b) #检验相关系数的显著性 cor(iris[1:4]) #相关系数,参数填数据集...

    @R语言相关分析与典型相关分析

    #相关分析与典型相关分析
    #pearson相关系数
    a=c(1,3,5,7,9);b=c(1,4,6,9,10)
    cor(a,b) #pearson相关系数
    cor.test(a,b) #检验相关系数的显著性
    cor(iris[1:4]) #相关系数,参数填数据集,则计算相关系数矩阵

    #spearman相关系数,亦即秩相关系数
    #spearman和kendall都是等级相关系数,亦即其值与两个相关变量的具体值无关,而仅仅与其值之间的大小关系有关。
    #spearman相关系数,亦即秩相关系数,根据随机变量的等级而不是其原始值衡量相关性的一种方法。
    m=c(1,2,4,3);n=c(100,101,102,103)
    m1=c(30,31,35,34);n1=c(85,87,90,93)
    cor(m,n);cor(m1,n1)
    cor(m,n,method = “spearman”);cor(m1,n1,method = “spearman”)
    cor.test(m,n,method = “spearman”);cor.test(m1,n1,method = “spearman”)
    #spearman相关系数的计算可以由计算pearson系数的方法,只需要把原随机变量中的原始数据替换成其在随机变量中的等级顺序即可:

    acf #自相关和协方差函数
    acf(airmiles,type=‘correlation’,lag.max=10) #自相关
    pacf(airmiles,lag.max=10) #偏自相关
    pairs(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,data=iris,
    main=“Simple Scatterplot Matrix”) #散点图矩阵
    install.packages(“scatterplot3d”) #3D散点图
    library(scatterplot3d)
    scatterplot3d(iris S e p a l . L e n g t h , i r i s Sepal.Length, iris Sepal.Length,irisPetal.Length, iris$Petal.Width)

    install.packages(“corrgram”) #有兴趣的同学自己练习
    library(corrgram)
    #1、设置排序处理
    corrgram(mtcars,order=TRUE)
    #2、设置上下三角面板形状
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie)
    #3、只显示下三角部分
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=NULL)
    #4、调整面板颜色
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,
    col.regions=colorRampPalette(c(“darkgoldenrod4”,“burlywood1”,“white”, “darkkhaki”,“darkgreen”)))
    install.packages(“corrplot”)
    library(corrplot)
    #1、使用不同的method绘制相关矩阵图
    methods<-c(“circle”,“square”,“ellipse”,“pie”,“shade”,“color”)
    par(mfrow=c(2,3))
    t0=mapply(function(x){corrplot(cor(mtcars), method=x,order=“AOE”)},methods)
    par(mfrow=c(1,1))
    #2、设置method=color绘制热力矩阵图
    corrplot(cor(mtcars), method=“color”, order = “AOE”,tl.col=“black”,tl.srt=45,
    addCoef.col=“black”,col=colorRampPalette(c("#7F0000",“red”,"#FF7F00",
    “yellow”,“white”, “cyan”, “#007FFF”, “blue”,"#00007F"))(20))
    #3、绘制上下三角及不同色彩的相关矩阵图
    library(RColorBrewer)
    par(mfrow=c(2,2))
    corrplot(cor(mtcars),type=“lower”)
    corrplot(cor(mtcars),type=“lower”,order=“hclust”,
    col=brewer.pal(n=8,name=“RdYlBu”))
    corrplot(cor(mtcars),type=“upper”,order=“AOE”,
    col=c(“black”,“white”),bg=“lightblue”)
    corrplot(cor(mtcars),type=“upper”,order=“FPC”,
    col=brewer.pal(n=8, name=“PuOr”))
    par(mfrow=c(1,1))

    d<-sqrt(1-cor(mtcars)^2)
    hc<-hclust(as.dist(d))
    plot(hc)
    rect.hclust(hc,k=3)

    install.packages(“pvclust”)
    library(pvclust)
    cluster.bootstrap <- pvclust(mtcars, nboot=1000, method.dist=“correlation”)
    plot(cluster.bootstrap)
    pvrect(cluster.bootstrap) #自己练习部分结束

    #典型相关:指两组变量之间的相关关系,不是两个变量之间相关关系,也不是两组变量之间两两组合的简单相关
    #两组变量作为整体的相关性
    #例如体育运动和身体状况的相关性,体育运动包括跑步,篮球,足球,乒乓球,游泳等变量,身体状况包括身高,体重,肺活量,血压等变量
    #以R语言自带的iris为例
    #1、提取iris的前4个数值列,并进行标准化处理
    data0=scale(iris[1:4])
    #2、计算这4个变量的协方差,由于经过标准化处理,这样得到的也是相关系数
    M=cov(data0)
    #3、将M进行分块,1:2两个变量一组,3:4是另外一组,并进行两两组合
    X11=M[1:2,1:2]
    X12=M[1:2,3:4]
    X21=M[3:4,1:2]
    X22=M[3:4,3:4]
    #4、按公式求解矩阵A和B
    A=solve(X11)%%X12%%solve(X22)%%X21
    B=solve(X22)%
    %X21%%solve(X11)%%X12
    #5、使用eigen函数求解典型相关系数如下
    eV=sqrt(eigen(A)$values)
    eV

    #6、进行验证
    #…比较A与XΛX^(-1)是否相等
    round(A-eigen(A) v e c t o r s vectors%*%diag(eigen(A) vectorsvalues)%*%solve(eigen(A)$vectors),3)

    Sepal.Length Sepal.Width

    Sepal.Length 0 0

    Sepal.Width 0 0

    #…比较B与YΛY^(-1)是否相等
    round(B-eigen(B) v e c t o r s vectors%*%diag(eigen(B) vectorsvalues)%*%solve(eigen(B)$vectors),3)

    #…求解A对应的特征向量并计算典型向量C1
    C1=data0[,1:2]%*%eigen(A)$vectors
    #…验证C1对应各变量的标准差是否为1,同时查看均差
    apply(C1,2,sd)

    [1] 1.041196 0.951045

    apply(C1,2,mean)

    [1] -4.880321e-16 -2.759430e-17

    #…由于均值为0,标准差不为1,这里对特征向量进行伸缩变换
    eA=eigen(A)$vectors%%diag(1/apply(C1,2,sd))
    #…再次验证方差和均值
    C1=data0[,1:2]%
    %eA
    apply(C1,2,sd)

    [1] 1 1

    apply(C1,2,mean)

    [1] -4.667693e-16 -2.745503e-17

    #…可见,特征向量已经满足要求,同理对B可得
    C2=data0[,3:4]%*%eigen(B)$vectors
    apply(C2,2,sd)

    [1] 0.6291236 0.2003530

    apply(C2,2,mean)

    [1] -1.403572e-17 -9.859870e-18

    eB=eigen(B)$vectors%%diag(1/apply(C2,2,sd))
    C2=data0[,3:4]%
    %eB
    apply(C2,2,sd)

    [1] 1 1

    apply(C2,2,mean)

    round(cor(cbind(C1,C2)),3)
    #用cancor可以直接求解典型相关系数
    x<-as.matrix(iris[,1:2])
    y<-as.matrix(iris[,3:4])
    cancor(x,y)

    展开全文
  • R语言 典型相关分析

    千次阅读 2016-05-05 14:50:25
    1 关键点:#典型相关分析# #典型相关分析是用于分析两组随机变量之间的相关程度的一种统计方法,它能够有效地揭示两组随机变量之间的相互(线性依赖)关系 #例如 研究生入学考试成绩与本科阶段...3 R语言提供的计算...

    1 关键点:#典型相关分析#
    #典型相关分析是用于分析两组随机变量之间的相关程度的一种统计方法,它能够有效地揭示两组随机变量之间的相互(线性依赖)关系
    #例如 研究生入学考试成绩与本科阶段一些主要课程成绩的相关性
    #将研究两组变量的相关性问题转化为研究两个变量的相关性问题 此类相关为典型相关#

    2 分类:#总体典型相关#样本典型相关

    3 R语言提供的计算函数:

    #典型相关计算 cancor(x,y,xcenter=TRUE,ycenter=TRUE)
    #x,y是相应的数据矩阵 xcenter,ycenter是逻辑变量 TRUE是将数据中心化 FALSE是不中心化

    4 分析结果含义

    #cor是典型相关系数

    #xcoef是对应于数据x的系数 又称关于数据x的典型载荷即样本典型变量U系数矩阵A的转置
    #xcenter是数据X的中心 即数据X的样本均值

    #y是对应于数据x的系数 又称关于数据y的典型载荷即样本典型变量V系数矩阵B的转置
    #ycenter是数据Y的中心 即数据Y的样本均值

    4 分析步骤

    #1.载入原始数据 data.frame
    #2.原始数据标准化 scale
    #3.典型相关分析 cancor

    #4.相关系数显著性检验 corcoef.test.R

    5 案例

    #现对20名中年人测得三个生理指标:体重(X1) 腰围(X2) 脉搏(X3)
    #三个训练指标:引体向上(Y1) 起座次数(Y2) 跳跃次数(Y3) 试分析这组数据的相关性

    #用数据框的形式输入数据
    test<-data.frame(
    X1=c(191, 193, 189, 211, 176, 169, 154, 193, 176, 156,
    189, 162, 182, 167, 154, 166, 247, 202, 157, 138),
    X2=c(36, 38, 35, 38, 31, 34, 34, 36, 37, 33,
    37, 35, 36, 34, 33, 33, 46, 37, 32, 33),
    X3=c(50, 58, 46, 56, 74, 50, 64, 46, 54, 54,
    52, 62, 56, 60, 56, 52, 50, 62, 52, 68),
    Y1=c( 5, 12, 13, 8, 15, 17, 14, 6, 4, 15,
    2, 12, 4, 6, 17, 13, 1, 12, 11, 2),
    Y2=c(162, 101, 155, 101, 200, 120, 215, 70, 60, 225,
    110, 105, 101, 125, 251, 210, 50, 210, 230, 110),
    Y3=c(60, 101, 58, 38, 40, 38, 105, 31, 25, 73,
    60, 37, 42, 40, 250, 115, 50, 120, 80, 43)
    )

    #为了消除数量级的影响 将数据标准化处理 调用scale函数
    test<-scale(test)
    #对标准化的数据做典型相关分析
    ca<-cancor(test[,1:3],test[,4:6])
    #查看分析结果
    ca

    R语言 <wbr>典型相关分析

    #计算数据在典型变量下的得分 U=AX V=BY
    U<-as.matrix(test[, 1:3])%*% ca$xcoef
    V<-as.matrix(test[, 4:6])%*% ca$ycoef
    #画出U1、V1和U3、V3为组表的数据散点图
    plot(U[,1], V[,1], xlab=”U1″, ylab=”V1″)
    plot(U[,3], V[,3], xlab=”U3″, ylab=”V3″)

    R语言 <wbr>典型相关分析

    由散点图可知 第一典型相关变量分布在一条直线附近 ;第三典型相关变量数据很分散。
    #典型相关系数的显著性检验
    #作为相关分析的目的 就是选择多少对典型变量?因此需要做典型相关系数的显著性检验
    #若认为相关系数k为0 就没有必要考虑第k对典型变量了

    #相关系数检验R程序
    source(“E:/R/corcoef.test.R”)
    corcoef.test(r=ca$cor,n=20,p=3,q=3)

    最终程序运行结果显示选择第一对典型相关变量。

    典型相关系数检验 R语言程序 corcoef.test.R 将其保存在计算机的E盘的R文件夹下

    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 #显示输出结果 选用第几对典型变量
    }

    展开全文
  • 典型相关分析中,当一组变量仅有两个时,可用简单相关系数衡量;当考察一组时,可用复相关进行衡量。大量的实际问题需要我们把指标之间的联系扩展到两组随机变量之间的相互依赖关系。典型相关关系就是为了解决此类...

    一.基本概念和原理

    典型相关分析中,当一组变量仅有两个时,可用简单相关系数衡量;当考察一组时,可用复相关进行衡量。大量的实际问题需要我们把指标之间的联系扩展到两组随机变量之间的相互依赖关系。典型相关关系就是为了解决此类问题而提出的多变量统计分析方法。它实际上是利用主成分的思想来讨论两组随机变量的相关性问题,把两组变量间的相关性研究化为少数几对变量间的相关性研究,而且这少数几对变量之间又是不相关的,以此来达到化解复杂相关关系的目的。

    以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟!

    MATLAB-30天带你从入门到精通

    MATLAB深入理解高级教程(附源码)

    tableau可视化数据分析高级教程

    二.分析原理

    典型相关分析是研究两组变量之间的相关关系的一种多变量统计分析方法,它可以真正反映两组变量之间的相互依赖的线性关系。设两组变量   用x1,x2....xp及y1,y2...yp表示,采用类似主成分分析的方法,在每组变量中选择若干个有代表性的综合指标(变量的线性组合),通过研究两组综合指标之间的关系来反映两组变量之间的关系。

    展开全文
  • (可以看出与自相关的公式差不多,其实互相关分析就是两个时间序列在不同时刻暴力套上自相关系数的公式…大概可以这么理解) 在r中用ccf函数可以计算 这里以r中自带的airmiles数据集和LakeHuron(1937-1960年)进行...
  • 《数据分析方法》–梅长林 各章原理及R语言实现 数据描述性分析 回归分析 方差分析 主成分分析典型相关分析 判别分析 聚类分析 Bayes统计分析 4.1主成分分析 4.1.1总体主成分的求法   求主成分归结为求样本...
  • 简单相关系数 简单相关系数的代码实现 1.XY都是随机变量,地位对称 2.相关系数只反映两变量之间线性相关的程度,不能说明其非线性相关关系。 3.虽能度量相关关系,但是不能度量变量间的因果关系 公式 library('...
  • 1.典型相关分析:两组变量之间的相关问题 cancor() cancor(x, y, xcenter = TRUE, ycenter = TRUE) x,y为两组变量的数据矩阵;xcenter和ycenter是逻辑值,表示是否中心化,实际中一般采用默认值TRUE 注意...
  • ![图片说明]... 典型相关分析中,本来应该是A、B矩阵的特征根求出来是一样的,为什么我这里不仅值不一样,连个数也不一样,不知道哪里出问题了,有没有大佬帮我看看!!! 很急呜呜呜呜

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,451
精华内容 19,780
关键字:

r语言做典型相关分析