精华内容
下载资源
问答
  • 文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp...CCA典型相关分析CCA(canonical correlation analysis)利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原...

    文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.com

    Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用很多,很有必要熟悉其原理。

    CCA典型相关分析

    CCA(canonical correlation analysis)利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1和V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体相关性。

    1936年,Hotelling提出典型相关分析。考虑两组变量的线性组合, 并研究它们之间的相关系数p(u,v).在所有的线性组合中, 找一对相关系数最大的线性组合, 用这个组合的单相关系数来表示两组变量的相关性, 叫做两组变量的典型相关系数, 而这两个线性组合叫做一对典型变量。在两组多变量的情形下, 需要用若干对典型变量才能完全反映出它们之间的相关性。下一步, 再在两组变量的与u1,v1不相关的线性组合中, 找一对相关系数最大的线性组合, 它就是第二对典型变量, 而且p(u2,v2)就是第二个典型相关系数。这样下去, 可以得到若干对典型变量, 从而提取出两组变量间的全部信息。

    典型相关分析的实质就是在两组随机变量中选取若干个有代表性的综合指标(变量的线性组合), 用这些指标的相关关系来表示原来的两组变量的相关关系。这在两组变量的相关性分析中, 可以起到合理的简化变量的作用; 当典型相关系数足够大时, 可以像回归分析那样, 由- 组变量的数值预测另一组变量的线性组合的数值。

    原理描述

    案例实现

    # 导入工具包

    import h5py

    import rcca

    import sys

    import numpy as np

    import cortex

    zscore = lambda d: (d-d.mean(0))/d.std(0)

    第一步:加载数据

    请从CRCNS下载数据:http://crcns.org/data-sets/vc/vim-2以下分析假定该数据位于当前目录中名为“ data”的目录中。

    data = []

    vdata = []

    numSubjects = 3

    # subjects 是3个受试者列表.

    subjects = ['S1', 'S2', 'S3']

    # xfms 是Pycortex中变换名称的列表,该名称用于对齐每个受试者的功能和解剖数据。

    xfms = ['S1_xfm', 'S2_xfm', 'S3_xfm']

    dataPath ="./data/VoxelResponses_subject%d.mat"

    for subj in range(numSubjects):

    # 打开数据

    f = h5py.File(dataPath % (subj+1),'r')

    # 获取数据大小

    datasize = (int(f["ei"]["datasize"].value[2]),int(f["ei"]["datasize"].value[1]),int(f["ei"]["datasize"].value[0]))

    # 从Pycortex获取皮质面罩

    mask = cortex.db.get_mask(subjects[subj], xfms[subj], type = 'thick')

    # 获取该受试者的训练数据

    data_subj = np.nan_to_num(zscore(np.nan_to_num(f["rt"].value.T)))

    data.append(data_subj.reshape((data_subj.shape[0],)+datasize)[:, mask])

    # 获取受试者的验证数据

    vdata_subj = np.nan_to_num(zscore(np.nan_to_num(f["rv"].value.T)))

    vdata.append(vdata_subj.reshape((vdata_subj.shape[0],)+datasize)[:, mask])

    第二步:定义CCA参数

    # 这里设置1e-4和1e2之间的一系列正则化值

    regs = np.array(np.logspace(-4, 2, 10))

    # 这里考虑3到10之间的成分数量

    numCCs = np.arange(3, 11)

    # 初始化cca模型

    cca = rcca.CCACrossValidate(numCCs=numCCs, regs=regs)

    第三步:对数据训练,分析并保存分析结果

    """

    说明:

    由于数据量大,此分析的计算量很大。

    在笔记本中运行它会花费大量时间,因此建议对其进行并行化和/或在计算机群集上运行它,然后加载结果以进行可视化。

    """

    # 利用cca训练数据

    cca.train(data)

    # 利用cca对验证数据进行验证

    cca.validate(vdata)

    # 计算方差,解释每个体素中的验证响应

    cca.compute_ev(vdata)

    # 保存分析结果

    cca.save("./data/CCA_results.hdf5")

    第四步:可视化分析结果

    # 导入可视化工具包

    %matplotlib inline

    import matplotlib.pyplot as plt

    # 导入Brewer色彩图以进行可视化

    from brewer2mpl import qualitative

    nSubj = len(cca.corrs)

    nBins = 30

    bmap = qualitative.Set1[nSubj]

    f = plt.figure(figsize = (8, 6))

    ax = f.add_subplot(111)

    for s in range(nSubj):

    # 绘制所有三个对象的所有体素之间的相关性直方图

    ax.hist(cca.corrs[s], bins = nBins, color = bmap.mpl_colors[s], histtype="stepfilled", alpha = 0.6)

    plt.legend(['Subject 1', 'Subject 2', 'Subject 3'], fontsize = 16)

    ax.set_xlabel('Prediction correlation', fontsize = 20)

    ax.set_ylabel('Number of voxels', fontsize = 20)

    ax.set_title("Prediction performance across voxels", fontsize = 20)

    # p <0.05时的显着性阈值(针对多次比较进行了校正)

    # 重要性是使用渐近方法计算的(有关详细信息,请参见论文文本)

    thresh = 0.0893

    ax.axvline(x = thresh, ymin = 0, ymax = 7000, linewidth = 2, color = 'k')

    ax.text(thresh+0.05, 5000, 'p<0.05', fontsize = 16)

    ax.set_xticklabels(0.1*np.arange(-8, 11, 2), fontsize = 16)

    ax.set_yticklabels(np.arange(0, 10000, 1000), fontsize = 16)

    该图显示了皮质图上一个对象的跨学科预测结果,即预测的验证响应和实际的验证响应之间的相关性。不重要的相关性(p <0.05,已针对多个比较进行校正)设置为0。

    import cortex

    from matplotlib import cm

    from copy import deepcopy

    subj = 0

    subjName = "S1"

    subjTransform = "S1_xfm"

    corrs = deepcopy(cca.corrs[subj])

    # 将所有低于显着性阈值的体素设置为0

    corrs[corrs

    _ = cortex.quickflat.make_figure(cortex.Volume(corrs, subjName,

    subjTransform,

    cmap = cm.PuBuGn_r,

    vmin = 0., vmax = 1.), with_curvature = True)

    参考点击上面动图扫描二维码,关注我们

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

    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

    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

    #对标准化的数据做典型相关分析

    ca

    #查看分析结果

    ca

    结果说明:

    1) cor给出了典型相关系数;xcoef是对应于数据X的系数,

    即为关于数据X的典型载荷; ycoef为关于数据Y的典型载荷;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

    V

    #调整图形

    opar

    #画出以相关变量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

    #r为相关系数 n为样本个数

    且n>p q

    m

    Q

    for (k in m:1){

    #检验统计量

    lambda

    #检验统计量取对数

    Q[k]

    s

    i

    for (k in 1:m){

    #统计量  Q[k]

    chi

    if (chi>alpha){

    i

    }

    s

    }

    #显示输出结果 选用第几对典型变量

    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")

    展开全文
  • 最近有小伙伴在问我一个数据分析的问题, 做毕设, 实证分析. 不知道改如何处理数据.看了下设计的量表大致是这样的, 都是 5级的里克特量表, 大致分为两波, X, Y. 小伙伴认为就只有两个变量, 这是从商业理论上来认识的,...

    最近有小伙伴在问我一个数据分析的问题, 做毕设, 实证分析. 不知道改如何处理数据.

    看了下设计的量表大致是这样的, 都是 5级的里克特量表, 大致分为两波, X, Y. 小伙伴认为就只有两个变量, 这是从商业理论上来认识的, 但从数据的角度, 却不是的.

    X: 一共有22个问题, 也就是22个字段; 里面又是有认为分组的, 三两个字段, 又被认定为一个别名.

    Y: 一共有13个问题, 也就是13个字段; 里面有是人为分组, 三两字段啥的, 分为 4组, 分别有别名.

    然后不知道该如何分析?

    问题

    探寻 X 与 Y 的相关关系(线性相关)

    其实探讨的时候, 挺不易的, 就很难知道她到底想要分析什么, 需求是什么, 还以为要做什么回归分析, 什么相关分析, 什么统计描述或其他的, 总之, 沟通过程非常漫长. 最后我放弃了, 还是单纯从这个数据级来分析.

    本质上, 其实宏观来看, 就是 X 和 Y 的相关性如何嘛, 以及如何影响的. 那这不是求一波, 相关系数嘛. 但这里, X, Y 是多个字段, 是多对多 的关系, 就求不来了. 因此需要引进新的方法.

    CCA

    于是引入了典型相关分析 (Canonical Correlation Analysis), 用于探索多变量之间的关联关系.

    于是这个问题, 就可以初步这样来做.

    更正一波,写的有点不对, 不是分别降低到一维度. 而是分别降维后, x 和 y 能进行 配对. 这里 y 有13个嘛, x 有22个, 假设根本不对 y 进行降维, 那最多也只能匹配到 13对. 约束条件就是相关系数最大呀. 这块的数学公式就暂时不写了, 跟 PCA , 因子分析的逻辑是类似的.

    发现了一个神器, 在线SPSS, 叫做 SPSSAU, 付费的, 但功能强大, UI 很有感觉, 重点是完全实现 傻瓜式操作. 虽然我已经不再做这块了, 但还是很怀念 SPSS, 比较是我数据分析之路的启蒙软件. 至少是真正用来做数据分析, 做市场研究的.

    简单, 托拉拽, 一键输出报告, 包含 假设检验. 探寻数据的应用意义, 而不用太多关注底层的数学公式. 虽然数学公式会更加帮助理解数据集, 这是后话. 我觉得这才是数据分析的意义:

    描述性统计分析

    关联性统计分析

    探索性建模分析

    这种基于统计理论的分析框架 + 商业理论, 已早已熟练于心. 虽然现在的不用这类 傻瓜工具了, 现在自己搞编程, 但我感觉企业中的数据分析, 至少我接触的反而更加低级.

    写 sql 查询数据 或 手动下载数据

    筛选字段, 合并表格

    计算业务指标, 几遍的加减乘除, 什么同比环比

    大量的分组聚合, 生成报表, 看板

    真的是, 从技术层面, 毫无难度. 我很多时间都是干这些活, 相比数据分析,我认为的, 我感觉还真不如几年前用 SPSS 的时光. 起码是真的再利用数据的价值来进行市场研究, 市场分析.

    然后会最终得到这样类似的结果 , 和一些假设检验, 因子载荷等的术语, 都蛮简单的. (我没跑, 数据暂不能公开, 找了一张网上的示意图)

    这样 CCP 就完成了, 多自变量 和 多因变量的关联分析了.

    Next - 回归

    继续要探寻, X 和部分 y 的关系. 我的思路, 都既然做相关分析了, 那很自然再拓展到回归分析呀.

    合并 y 为 1 列

    回归分析的 y 是一个字段, 因此, 可以将 量表中的 小 y 组进行, 合并为一列. 这里, 可以加权 或者 直接平均, 自己能解释清楚就行.

    主成分 + 多元回归

    有一个 y, 有很多的 x1, x2, x2... 相关分析, 就是要判断, 这些 x1, x2..与 y 是都是分别有线性相关性的(相关系数高); 而 x1, 与 x2, x3.. 之间呢, 彼此相关系数 要低

    第二步就是要降维. 为啥必须要降维度呢, 就是怕 X 矩阵, 存在共线, 然后就不能 求 逆了呀.

    PCA降维

    至于如何降维, 我感觉我自己都说烂了. 也搞好几年了, 就是让特征重新进行线性组合 (改变数据了哦) 为几个较少得到特征, 然后尽可能保留原来更多的信息 (协方差的范数尽可能大)

    求解模型参数

    方法1 是一步求解, 就用上面的共线图中的矩阵运算即可.

    方法2 是用梯度下降法来做, 我用的多, 但这个小伙伴, 没有学过编程, 就还是给推荐, 撒花是点点点算了.

    小结

    多自变量 和 多因变量 分析可以考虑 典型相关分析 CCA 这种 "降维配对" 的技术

    回归分析必须 3步: 先做相关性分析; 再做降维处理; 再训练模型参数;

    PCA 我感觉非常厉害的. 还有一在线版spssau 的工具体验感很好, 市场研究方面的数据处理, 很适合.

    展开全文
  • sklearn 的 cca 看不懂,自己实现了一下 参考:《数学建模算法与应用》 def cca(x, y): ''' ... 输出一个excel('典型相关分析输出结果.xlsx'): X组的典型相关变量_系数 Y组的典型相关变量_系数

    sklearncca 看不懂,于是自己实现了一下
    参考:《数学建模算法与应用》

    def cca(x, y):
        import numpy as np
        import pandas as pd
        from scipy import stats  # 计算p值
        '''
        输入:
            x:X组的矩阵/DataFrame,行是样本,列是变量
            y:Y组的矩阵/DataFrame,行是样本,列是变量
            注:列名不能相同,否则会报错
        输出:
            输出一个excel('典型相关分析输出结果.xlsx'):
            X组的典型相关变量_系数
            Y组的典型相关变量_系数
            xu的相关系数; xv的相关系数; yv的相关系数; yu的相关系数
            解释百分比
            显著性检验
        '''
        r = x.join(y).corr()  # 计算x和y合并后的相关系数
        n1 = x.shape[1]  # X组变量个数
        n2 = y.shape[1]  # Y组变量个数
    
        r = np.array(r)  # X和Y的相关系数转为矩阵
        num = min(n1, n2)
        s1 = r[:n1, :n1]  # 提出X与X的相关系数
        s2 = r[n1:, n1:]  # 提出Y与Y的相关系数
        s12 = r[:n1, n1:]  # 提出X与Y的相关系数
        s21 = s12.T  # Y与X的相关系数
    
        m1 = np.linalg.inv(s1).dot(s12).dot(np.linalg.inv(s2)).dot(s21)  # 计算矩阵M1
        m2 = np.linalg.inv(s2).dot(s21).dot(np.linalg.inv(s1)).dot(s12)  # 计算矩阵M2
    
        writer = pd.ExcelWriter('典型相关分析输出结果.xlsx')  # 打开excel文件
    
        # ---------------------------计算X组的典型相关向量和典型相关系数------------------------
        [val1, vec1] = np.linalg.eig(m1)  # M1的特征值vec1和特征向量val1
        val1 = val1.real;
        vec1 = vec1.real
        for i in range(n1):
            # 特征向量归一化,满足a's1a=1
            vec1[:, i] = vec1[:, i] / np.sqrt(vec1[:, i].T.dot(s1).dot(vec1[:, i]))
            # 特征向量乘+-1,保证所有分量为正
            vec1[:, i] = vec1[:, i] / np.sign(np.sum(vec1[:, i]))
    
        val1 = np.sqrt(val1[val1 > 0])  # 计算特征值的平方根
        val1, ind1 = np.sort(val1, axis=0)[::-1], np.argsort(-val1, axis=0)  # 按照从大到小排列
    
        a = vec1[:, ind1.flatten()[:num]]  # 取出x组的系数阵a
        dcoef1 = val1.flatten()[:num]  # 提出典型相关系数
        save1 = pd.DataFrame(a, columns=['u%s' % i for i in range(1, num + 1)],
                             index=['x%s' % i for i in range(1, n1 + 1)])  # 转为DataFrame
        print('X组的系数阵/典型相关变量:');
        display(save1)
        save1.loc['典型相关系数'] = dcoef1
        save1.to_excel(writer, 'X组的典型相关变量_系数')  # 系数矩阵
    
        # ----------------------------计算Y组的典型相关向量和典型相关系数-------------------------
        [val2, vec2] = np.linalg.eig(m2)  # m2的特征值vec2和特征向量val2
        val2 = val2.real
        vec2 = vec2.real  # 这里得到的结果是复数,所以要提取为实数
    
        for i in range(n2):
            # 特征向量归一化,满足b's2b=save2
            vec2[:, i] = vec2[:, i] / np.sqrt(vec2[:, i].T.dot(s2).dot(vec2[:, i]))
            # 特征向量乘+-1,保证所有分量为正
            vec2[:, i] = vec2[:, i] / np.sign(np.sum(vec2[:, i]))
    
        val2 = np.sqrt(val2[val2 > 0])  # 计算特征值的平方根
        val2, ind2 = np.sort(val2)[::-1], val2.argsort()[::-1]  # 选出大于0的,并从大到小排序得到索引
    
        b = vec2[:, ind2[:num]]  # 取出x组的系数阵a
        dcoef2 = val2[:num]  # 提出典型相关系数
        save2 = pd.DataFrame(b, columns=['v%s' % i for i in range(1, num + 1)],
                             index=['y%s' % i for i in range(1, n2 + 1)])  # 转为DataFrame
        print('Y组的系数阵/典型相关变量:');
        display(save2)
        print('典型相关系数:');
        print(dcoef2)
        save2.loc['典型相关系数'] = dcoef2
        save2.to_excel(writer, 'Y组的典型相关变量_系数')  # 系数矩阵
    
        # ------------------------------计算原始变量和典型变量的相关系数---------------------------
        rxu = s1.dot(a)  # xu的相关系数
        ryv = s2.dot(b)  # yv的相关系数
        rxv = s12.dot(b)  # xv的相关系数
        ryu = s21.dot(a)  # yu的相关系数
        x_index = ['x%s' % i for i in range(1, n1 + 1)]
        y_index = ['y%s' % i for i in range(1, n2 + 1)]
        u_col = ['u%s' % i for i in range(1, num + 1)]
        v_col = ['v%s' % i for i in range(1, num + 1)]
        pd.DataFrame(rxu, columns=u_col, index=x_index).to_excel(writer, 'xu的相关系数')
        pd.DataFrame(rxv, columns=v_col, index=x_index).to_excel(writer, 'xv的相关系数')
        pd.DataFrame(ryv, columns=v_col, index=y_index).to_excel(writer, 'yv的相关系数')
        pd.DataFrame(ryu, columns=u_col, index=y_index).to_excel(writer, 'yu的相关系数')
    
        # -------------------------------计算解释的方差比例----------------------------------------
        mu = np.sum(rxu ** 2) / n1;
        print('*x组原始变量被u_i解释的方差比例:', format(mu, '.2%'))
        mv = np.sum(rxv ** 2) / n1;
        print('x组原始变量被v_i解释的方差比例:', format(mv, '.2%'))
        nv = np.sum(ryv ** 2) / n2;
        print('*y组原始变量被v_i解释的方差比例:', format(nv, '.2%'))
        nu = np.sum(ryu ** 2) / n2;
        print('y组原始变量被u_i解释的方差比例:', format(nu, '.2%'))
        pd.DataFrame([mu, mv, nv, nu], index=['u解释x', 'v解释x', 'v解释y', 'u解释y']).to_excel(writer, '解释百分比')
    
        # -------------------------------典型相关系数的卡方检验------------------------------------
        # 典型相关系数就是特征值,逐一对典型相关系数做检验
        jianyan = pd.DataFrame(columns=['自由度', '卡方计算值', '卡方临界值(0.05显著水平)', 'P值'], index=range(1, num + 1))
        for j in range(num):  # 遍历num个典型相关系数
            k = j + 1;
            n = len(x)  # 第k个λ,n是样本量
            prod_lamuda = np.prod([1 - i ** 2 for i in dcoef1[j:]])  # 拉姆达连乘
            df = (n1 - k + 1) * (n2 - k + 1)  # 自由度
            Q = -(n - k - 0.5 * (n1 + n2 + 1)) * np.log(prod_lamuda)  # 统计量
            p_value = 1 - stats.chi2.cdf(Q, df)  # p值
            jianyan.loc[k, '自由度'] = df
            jianyan.loc[k, '卡方计算值'] = Q
            jianyan.loc[k, '卡方临界值(0.05显著水平)'] = stats.chi2.ppf(0.95, df)
            jianyan.loc[k, 'P值'] = p_value
        display(jianyan)
        jianyan.to_excel(writer, '显著性检验')
        writer.save()  # 保存excel文件
    
    
    if __name__ == '__main__':
        x1 = pd.DataFrame(np.array([[1.03, 0.42], [1.34, 0.13], [1.07, 0.4], [-0.43, 0.19], [-0.53, 0.25], [-0.11, 0.07]]),
                          columns=['x1', 'x2'])
        y1 = pd.DataFrame(np.array([[4.562305e+04, 2.500000e+00, 8.439000e+03], [5.225667e+04, 1.300000e+00, 1.857900e+04],
                                    [4.655187e+04, 1.130000e+00, 1.044500e+04], [2.814676e+04, 1.380000e+00, 7.813000e+03],
                                    [3.867043e+04, 1.200000e-01, 8.980000e+03],
                                    [2.631696e+04, 1.370000e+00, 6.609000e+03]]),
                          columns=['y1', 'y2', 'y3'])
        cca(x1, y1)
    

    在这里插入图片描述

    输出结果:
    在这里插入图片描述
    excel内容展示:
    在这里插入图片描述

    展开全文
  • 可以用CCA(典型相关分析)计算不同刺激频率下,通道信号和模板信号的相关系数。 CCA的python实现: import numpy as np from sklearn.cross_decomposition import CCA X = [[0, 0, 0] for i in range(2000)] #第一...
  • 笔者做过国赛也做过美赛,其中一类典型问题就是分析相关性,从而进行预测或者其他操作。这类问题通常情况下属于比较常规的问题,一般通过matlab或SPSS分析相关性,得到一个较好的数值即可。 然而有的时候不论取哪两...
  • 最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意。 那求人不如尔己,自己写一个吧 需要用到的...
  • Jimmy大神的tushare一直是广大python数据分析以及业余量化爱好者喜爱的免费、开源的python财经数据接口包。 平时一直有在用阿里云服务器通过tushare的接口自动落地相关财经数据,但日复权行情数据以往在串行下载的...
  • PyKCCA-master.zip

    2020-05-12 18:55:48
    典型相关分析python实现
  • 随着中国工业和科技的发展,中国...并借助机器学习算法根据数据预测空气质量,以达到分析预测的典型大数据分析模式效果。 整体分析的流程图如下: 实验前的准备 1.1 数据获取 我们这里所得到的数据来源于网络.
  • 1基于CPLEX的相关运输问题的分析及求解举例摘要:我们通常把货物从生产商到销售商的分配问题称为运输问题(TransportationProblem,简记TP),是一类非常典型的线性规划问题。在现代的生活中,运输可以说是实现经济...
  • 0.偏最小二乘回归集成了多元线性回归、主成分分析和典型相关分析的优点,在建模中是一个更好的选择,并且MATLAB提供了完整的实现,应用时主要的问题是:注意检验,各种检验参数:有关回归的检验以及有关多元分析的...
  • 同时和工作相结合也用Python实现了一些小功能。 最近公司面临转型,IT开发越来越重要,也有很多同事咨询Python开发相关事项,因此打算编写此教程。供大家参考交流。 本教程使用Python 3开发,主要想普及Python基本...
  • 语音信号的典型特征包括短时能量分析,过零率,短时自相关系数(下一个博客再说)等。实现语音信号的短时分析,首先实现加窗分帧就要。 分帧 一般来说假定语音信号在10ms到30ms之间是一个平稳的信号,窗函数平滑的...
  • 关联分析(Apriori)

    千次阅读 2017-10-17 14:42:05
    之前总结的典型关联分析是目标通过计算数据间的相关系数来寻找多维度数据的关系,但直观来讲,在实际生活中如果某一件事总是和另一件事同时出现,那么这两件事之间一定是有某种关系的,比如著名的啤酒和尿布。...
  • DeepCCA-master.zip

    2019-12-12 11:16:00
    深度典型相关分析python实现,DCCA是Galen Andrew于2013年发表于ICML上的一篇文章,提出了将深度网络与CCA结合的新方法。
  • 我的心可能比你们都痛,因为我在网上收藏过上10部《机器学习》相关视频,外加国内本土风格的教程: 7月+小象 等等,我都很难去听懂,直到有一天,被一个百度的高级算法分析师推荐说: 《机器学习实战》还不错,通俗...
  • 从工程角度探讨线代的典型应用,通过“刷实例”来培养解决工程问题的数学直觉。 课程安排 1....用Python实现上述应用。 总结起来,就是每学完一个知识点,就给出相关实例,并用Python语言做对应的代码实践!
  • tipdm开源的python机器学习建模平台,用户通过拖拉就可以实现模型开发。 项目结构 backend :为java后台服务代码 frontedn :为vue js前端代码 mock-oauth-server:为java认证服务代码 主要分析backend后台...
  • 7 1.3 R在计算传播学中的典型应用 9 1.3.1 用R进行文本分析初探 9 1.3.2 互联网在线数据收集 10 1.3.3 社会网络分析 12 1.4 总结与提高 13 1.5 习题 14 第2章 R语言开发环境 15 2.1 R的获取、安装和基本使用 16 ...
  • JSP应用开发详解

    2013-04-20 15:45:57
    7.2.1 Servlet实现相关 120 7.2.2 Servlet配置相关 121 7.2.3 Servlet异常相关 122 7.2.4 请求和响应相关 122 7.2.5 会话跟踪 123 7.2.6 Servlet上下文 124 7.2.7 Servlet协作 124 7.2.8 过滤 125 7.3 使用...

空空如也

空空如也

1 2 3 4 5 6
收藏数 115
精华内容 46
关键字:

典型相关分析python实现

python 订阅