person correlation,spearman correlation and kendall's t的算法(python,算法来自FRM-market risk )

简介: person correlation,spearman correlation and kendall's t的算法(python,算法来自FRM-market risk )
# this module aims to calculate the correlation:
# person correlation,spearman correlation and kendall's t
# note:there is also maturity algorithm in pandas,numpy
# scipy,and statsmodels and so on,this module just write
# my mind when I read market risk measurement and management
###########################################################
import pandas as pd
import numpy as  np
from collections import Iterable
from itertools import combinations
# person correlation
def person_cor(x,y):
    '''this function  is uesed to calculate person correlation,
    it requires pandas:import pandas as pd
    Arguments:
        data {[list,array,series]} -- [python's list,
                pandas's series,numpy's array]
    '''
    if isinstance(x,Iterable):
        x=pd.Series(x)
    else:
        print('x is not a iterable')
        return 
    if isinstance(y,Iterable):
        y=pd.Series(y)
    else:
        print('y is not a iterable')
        return 
    xy=x*y
    xx=x*x
    yy=y*y
    e_x=x.mean()
    e_y=y.mean()
    e_xy=xy.mean()
    e_x_e_y=x.mean()*y.mean()
    e_xx=xx.mean()
    e_yy=yy.mean()
    return (e_xy-e_x_e_y)/((e_xx-e_x**2)*(e_yy-e_y**2))**0.5
def spearman_cor(x,y):
    '''this function  is uesed to calculate person correlation,
    it requires pandas:import pandas as pd
    Arguments:
        data {[list,array,series]} -- [python's list,
                pandas's series,numpy's array]
    '''
    if isinstance(x,Iterable):
        x=pd.Series(x)
    else:
        print('x is not a iterable')
        return 
    if isinstance(y,Iterable):
        y=pd.Series(y)
    else:
        print('y is not a iterable')
        return 
    df=pd.DataFrame() 
    df['x']=x
    df['y']=y
    #sort value according x
    df=df.sort_values('x')  
    # x rank from low to high
    df['x_rank']=range(1,len(x)+1)
    # sort values according y
    df=df.sort_values('y')
    # y rank from low to high
    df['y_rank']=range(1,len(y)+1)
    # diff square
    df['diff']=df['x_rank']-df['y_rank']
    df['diff_square']=df['diff']**2
    # num length
    n=len(df)
    diff_2_sum=df['diff_square'].sum()
    return 1-(6*diff_2_sum/(n*(n*n-1)))
def kendall_t(x,y):
    '''this function  is uesed to calculate person correlation,
    it requires pandas:import pandas as pd
    Arguments:
        data {[list,array,series]} -- [python's list,
                pandas's series,numpy's array]
    '''
    x=[1,2,3]
    y=[2,3,4]
    if isinstance(x,Iterable):
        x=pd.Series(x)
    else:
        print('x is not a iterable')
        return 
    if isinstance(y,Iterable):
        y=pd.Series(y)
    else:
        print('y is not a iterable')
        return 
    df=pd.DataFrame() 
    df['x']=x
    df['y']=y
    #sort value according x
    df=df.sort_values('x')  
    # x rank from low to high
    df['x_rank']=range(1,len(x)+1)
    # sort values according y
    df=df.sort_values('y')
    # y rank from low to high
    df['y_rank']=rang(1,len(y)+1)
    tuple_list=list(zip(df['x_rank'],df['y_rank']))
    #tuple_list=list(zip(df['x_rank'],df['y_rank']))
    com_list=list(combinations(tuple_list,2))
    com_list=[[com[0][0],com[0][1],com[1][0],com[1][1]] for com in com_list]
    com_df=pd.DataFrame(com_list)
    com_df.columns=['x0','y0','x1','y1']
    com_df['num']=(com_df['x0']-com_df['y0'])*(com_df['x1']-com_df['y1'])
    con_num=len(com_df[com_df['num']>0])
    dis_num=len(com_df[com_df['num']<0])
    equal_num=len(com_df[com_df['num']==0])
    n=len(com_df)
    return 2*(con_num-dis_num)/(n*(n-1))

注:1、斯皮尔曼相关系数已经验证,和古扎拉蒂 计量经济学基础第五版 3.18计算结果一致。


#不足之处

#person correlation

'''


1、皮尔逊系数衡量的是线性的相关关系,但是,金融的相关往往是非线性的


2、皮尔逊相关系数为0并不意味着两个变量是独立的,只是没有线性的相关关系


3、当两个变量间的联合分布不是elliptical,回归系数没有有意义的解释


4、当进行相关性计算的时候,需要两个变量的方差都是有限的,而现实当中,

 有些分布的方差可能是无限的


5、当数据做过转换之后,计算的系数是没有意义的

'''

#spearman correlation,kendall's t

'''


1、是基于次序的,没有考虑数量的变化


2、因为忽略了奇异值,造成低估一些风险


3、当有很多次序是一样的时候,kendall's t计算的结果是歪曲的

'''



目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
31 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
1天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
30 11
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
2天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
17 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
13天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
48 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
1天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
24 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
9天前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
24 9
|
2天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
11 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
10天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
28 5
|
23天前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
105 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
25天前
|
算法 数据处理 数据安全/隐私保护