1. Spearman 秩相关系数
比较组间相关性,适用于非线性关系或非正态分布数据,与 Pearson 的区别:不要求数据线性相关,只关注秩次的单调关系。


2. 数据模拟+Spearman检验+SCI相关性绘图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from matplotlib.patches import Rectangle
# 设置字体
#plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题
def generate_mutation_data(n_samples=20, random_seed=42):
"""
生成肿瘤和正常组织的突变数量数据
参数:
n_samples -- 样本对数
random_seed -- 随机种子,确保结果可重现
返回:
DataFrame -- 包含样本ID、肿瘤突变数和正常突变数的数据框
"""
np.random.seed(random_seed)
# 生成基础变异水平(不同样本的个体差异)
base_mutations = np.random.gamma(shape=5, scale=10, size=n_samples)
# 肿瘤组织突变数(基础水平 + 肿瘤特异性变异 + 随机噪声)
tumor_mutations = base_mutations + np.random.gamma(shape=3, scale=5, size=n_samples) + np.random.normal(0, 5, n_samples)
# 正常组织突变数(基础水平 + 随机噪声,通常低于肿瘤)
normal_mutations = base_mutations * 0.6 + np.random.normal(0, 8, n_samples)
# 确保突变数非负
tumor_mutations = np.maximum(1, tumor_mutations).astype(int)
normal_mutations = np.maximum(1, normal_mutations).astype(int)
# 创建数据框
data = pd.DataFrame({
'样本ID': [f'S{
i+1}' for i in range(n_samples)],
'肿瘤组织突变数': tumor_mutations,
'正常组织突变数': normal_mutations
})
return data
def calculate_spearman_correlation(data):
"""
计算Spearman相关性和p值
参数:
data -- 包含肿瘤和正常组织突变数的数据框
返回:
correlation -- Spearman相关系数
p_value -- 对应的p值
significant -- 是否显著相关(p<0.05)
"""
x = data['肿瘤组织突变数']
y
Spearman检验组间相关性及SCI绘图

最低0.47元/天 解锁文章
3525

被折叠的 条评论
为什么被折叠?



