【生物信息学】使用皮尔逊相关系数进行相关性分析

news2024/11/25 14:43:14

目录

一、实验介绍

二、实验环境

1. 配置虚拟环境

2. 库版本介绍

3. IDE

三、实验内容

0. 导入必要的工具

1. cal_pearson(计算皮尔逊相关系数)

2. 主程序

a. 实验1(较强的正相关关系):

b. 实验2(几乎没有线性相关关系):

c. 实验3(非常强的正相关关系):

d. 实验4(斯皮尔曼相关系数矩阵):

3. 代码整合


一、实验介绍

        本实验主要实现了自定义皮尔逊相关系数进行相关性分析。

        相关性分析是一种常用的统计方法,用于评估两个或多个变量之间的关联程度。在本实验中,我们使用了皮尔逊相关系数和斯皮尔曼相关系数这两种常见的相关性指标。皮尔逊相关系数用于度量两个连续变量之间的线性关系,而斯皮尔曼相关系数则适用于评估两个变量之间的任何单调关系,无论是否线性。

二、实验环境

    本系列实验使用了PyTorch深度学习框架,相关操作如下(基于深度学习系列文章的环境):

1. 配置虚拟环境

深度学习系列文章的环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn

新增加

conda install pandas
conda install seaborn
conda install networkx
conda install statsmodels
pip install pyHSICLasso

注:本人的实验环境按照上述顺序安装各种库,若想尝试一起安装(天知道会不会出问题)

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

新增

networkx2.6.33.1
pandas1.2.32.1.1
pyHSICLasso1.4.21.4.2
seaborn0.12.20.13.0
statsmodels0.13.50.14.0

3. IDE

        建议使用Pycharm(其中,pyHSICLasso库在VScode出错,尚未找到解决办法……)

win11 安装 Anaconda(2022.10)+pycharm(2022.3/2023.1.4)+配置虚拟环境_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/128693741https://blog.csdn.net/m0_63834988/article/details/128693741icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/128693741

三、实验内容

0. 导入必要的工具

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

1. cal_pearson(计算皮尔逊相关系数)

def cal_pearson(x, y):
    n = len(x)

    mean_x = np.mean(x)
    mean_y = np.mean(y)

    x_ = x - mean_x
    y_ = y - mean_y

    s_x = np.sqrt(np.sum(x_ * x_))
    s_y = np.sqrt(np.sum(y_ * y_))

    r = np.sum((x_ / s_x) * (y_ / s_y))
    t = r / np.sqrt((1 - r * r) / (n - 2))  # p值需要对t值进行查表获得

    return r
  • 计算变量 x 的长度,即样本个数。

  • 计算变量 x 、 y 的均值。

  • 计算变量 x、 y 的标准差。

  • 计算皮尔逊相关系数 r,即将 x_ 和 y_ 中对应位置的值相除,然后相乘后求和。

  • 计算 t 值,即将 r 的值除以 sqrt((1 - r^2) / (n - 2))。这里的 n - 2 是修正因子,用于校正样本量对 t 值的影响。

  • 返回计算得到的皮尔逊相关系数 r。

2. 主程序

a. 实验1(较强的正相关关系):

    x1 = np.random.random(100)
    y1 = np.random.random(100) + x1
    plt.scatter(x1, y1, marker='.')
    plt.show()
    pearson1, p1 = stats.pearsonr(x1, y1)
    r1 = cal_pearson(x1, y1)
    print(pearson1)
    print(r1)
    print()
  • 生成两个长度为100的随机数组x1和y1,其中y1是在x1的基础上加上一些随机噪声。
  • 绘制x1和y1的散点图。
  • 使用scipy.stats.pearsonr函数计算了x1和y1的皮尔逊相关系数和p值,
  • 使用自定义的cal_pearson函数计算了相同的相关系数。
0.6991720710419989
0.6991720710419991

b. 实验2(几乎没有线性相关关系):

    x2 = np.random.random(100)
    y2 = np.random.random(100)
    plt.scatter(x2, y2, marker='.')
    plt.show()
    pearson2, p2 = stats.pearsonr(x2, y2)
    r2 = cal_pearson(x2, y2)
    print(pearson2)
    print(r2)
    print()

        生成了两个长度为100的随机数组x2和y2,没有加入噪声。同样绘制了散点图,并分别计算了皮尔逊相关系数。

-0.11511730616773974
-0.11511730616773967

c. 实验3(非常强的正相关关系):

        生成了两个长度为100的随机数组x3和y3,其中y3是在x3的基础上加上一些较大的随机噪声。同样绘制了散点图,并分别计算了皮尔逊相关系数。

    x3 = np.random.random(100)
    y3 = np.random.random(100) + x3 * 50
    plt.scatter(x3, y3, marker='.')
    plt.show()
    pearson3, p3 = stats.pearsonr(x3, y3)
    r3 = cal_pearson(x3, y3)
    print(pearson3)
    print(r3)
    print()

d. 实验4(斯皮尔曼相关系数矩阵):

        生成了一个形状为(10, 10)的随机数组data,使用scipy.stats.spearmanr函数计算了data中各列之间的斯皮尔曼相关系数和p值,并将结果打印输出。

    data = np.random.random((10, 10))
    spearman_np, p_np = stats.spearmanr(data)
    print(spearman_np, p_np)

3. 代码整合

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt


def cal_pearson(x, y):
    n = len(x)

    mean_x = np.mean(x)
    mean_y = np.mean(y)

    x_ = x - mean_x
    y_ = y - mean_y

    s_x = np.sqrt(np.sum(x_ * x_))
    s_y = np.sqrt(np.sum(y_ * y_))

    r = np.sum((x_ / s_x) * (y_ / s_y))
    t = r / np.sqrt((1 - r * r) / (n - 2))  # p值需要对t值进行查表获得

    return r


if __name__ == '__main__':
    np.random.seed(0)

    x1 = np.random.random(100)
    y1 = np.random.random(100) + x1
    plt.scatter(x1, y1, marker='.')
    plt.show()
    pearson1, p1 = stats.pearsonr(x1, y1)
    r1 = cal_pearson(x1, y1)
    print(pearson1)
    print(r1)
    print()

    x2 = np.random.random(100)
    y2 = np.random.random(100)
    plt.scatter(x2, y2, marker='.')
    plt.show()
    pearson2, p2 = stats.pearsonr(x2, y2)
    r2 = cal_pearson(x2, y2)
    print(pearson2)
    print(r2)
    print()

    x3 = np.random.random(100)
    y3 = np.random.random(100) + x3 * 50
    plt.scatter(x3, y3, marker='.')
    plt.show()
    pearson3, p3 = stats.pearsonr(x3, y3)
    r3 = cal_pearson(x3, y3)
    print(pearson3)
    print(r3)
    print()

    data = np.random.random((10, 10))
    spearman_np, p_np = stats.spearmanr(data)
    print(spearman_np, p_np)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络学习易错点(持续更新~~~)

目录 概述 1.internet和Internet的区别 2.面向连接和无连接 3.不同的T 4.传输速率和传播速率 5.传播时延和传输时延(发送时延) 6.语法,语义和同步 一.物理层 1.传输媒体与物理层 2.同步通信和异步通信 3.位同步(比特同…

leetCode 53.最大子数和 图解 + 贪心算法/动态规划+优化

53. 最大子数组和 - 力扣(LeetCode) 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入…

C++面试题准备

文章目录 一、线程1.什么是进程,线程,彼此有什么区别?2.多进程、多线程的优缺点3.什么时候用进程,什么时候用线程4.多进程、多线程同步(通讯)的方法5.父进程、子进程的关系以及区别6.什么是进程上下文、中断上下文7.一…

FFMPEG 视频类过滤器学习整理

addroi 作用 在视频帧上标记一块感兴趣的区域。 帧数据被原封不动地传递,但元数据被附加到帧,指示可能影响后续编码行为的感兴趣区域。可以通过多次应用过滤器来标记多个区域。 参数 qoffset: 应用在此区域的量化偏移。 参数范围:-1 ~ …

笔记一:odoo透视表和图表

透视表 1、首先在xml文件添加pivot 说明:(1)根元素pivot中属性: disable_linking:设置为True,删除表格单元格到列表视图的链接 display_quantity:设置为True,默认显示“数量”列 d…

什么是FOSS

FOSS 是指 自由和开放源码软件(Free and Open Source Software)。这并不意味着软件是免费的。它意味着软件的源代码是开放的,任何人都可以自由使用、研究和修改代码。这个原则允许人们像一个社区一样为软件的开发和改进做出贡献。

Axios post请求出现500错误

笔者在编写前端form表单传后端数据的时候,出现了以下问题 一、问题场景 当我用axios发送post请求的时候,出现了500错误 笔者找了很长时间错误,代码没问题,后端接口也没问题,后来发现问题出在实体类上了 当前端post请…

电脑msvcp140丢失报错解决方法,msvcp140.dll重新安装的解决方法

msvcp140.dll丢失可能会导致一些基于Microsoft Visual C 编写的程序和游戏无法正常运行。msvcp140.dll是Microsoft Visual C Redistributable的一个组件,它包含了 C 运行时库,这些库在运行程序时会被加载到内存中。如果该文件丢失或损坏,程序…

计算机视觉——飞桨深度学习实战-深度学习网络模型

深度学习网络模型的整体架构主要数据集、模型组网以及学习优化过程三部分,本章主要围绕着深度学习网络模型的算法架构、常见模型展开了详细介绍,从经典的深度学习网络模型以CNN、RNN为代表,到为了解决显存不足、实时性不够等问题的轻量化网络…

用于图像恢复的即插即用 ADMM:定点收敛和应用(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【MySQL入门到精通-黑马程序员】MySQL基础篇-DML

文章目录 前言一、DML-介绍二、DML-添加数据三、DML-修改数据四、DML-删除数据总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记,课程地址在这。如有侵权,立即删除。 一、DML-介绍 DML(Data Manipulation Language&#xf…

【算法|动态规划No.7】leetcode300. 最长递增子序列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

【iptables 实战】01 iptables概念

一、iptables和netfilter iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字…

UE4 自带体积云应用

新建空关卡 点击该选项 全部点击一遍 拖进场景

计算机网络(三):数据链路层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络(第7版)-谢希仁 1. 数据链路层概述 1.1 数据链路层在网络体系结构中所处的地位 链路 (Link) 就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点 数据链路 (Data Link)…

倒计时15天!百度世界2023抢先看

近日消息,在10月17日即将举办的百度世界2023上,百度创始人、董事长兼首席执行官李彦宏将带来主题演讲,“手把手教你做AI原生应用”。 增设社会报名,有机会获得精美伴手礼 目前,百度世界大会已经开放公众参会报名&…

选择和操作元素

上一篇文档我们介绍了DOM元素和DOM的获取;其实除了获取DOM,我们也可以去替换DOM元素中的文本 document.querySelector(.message).textContent "🎉Correct Number"● 除此之外,我们可以设置那个数字部分 document.que…

【iptables 实战】07 iptables NAT实验

在上一节中,我们将两个网段的机器,通过中间机器的网络转发,能达到互通。再来回顾一下这个网络连接的图 上一节我们在防火墙实验中,设置了主机B的的转发规则,我们先清空主机B的转发规则 [rootlocalhost ~]# iptables…

Linux下基本指令(上)

文章内容: 1. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 单个ls显示当前目录下的文件和目录 常用选项&#…

【Linux】线程详解完结篇——信号量 + 线程池 + 单例模式 + 读写锁

线程详解第四篇 前言正式开始信号量引例信号量的本质信号量相关的四个核心接口生产消费者模型用环形队列实现生产者消费者模型基于环形队列的生产消费模型的原理代码演示单生产者单消费者多生产者多消费者 计数器的意义 线程池基本概念代码 单例模式STL,智能指针和线程安全STL中…