当前位置: 首页 > news >正文

Xenium | 细胞邻域(Cellular Neighborhood)分析(fixed k-nearest neighbor)

CN分析概念最早来源于空间单细胞蛋白组Codex文章,Coordinated Cellular Neighborhoods Orchestrate Antitumoral Immunity at the Colorectal Cancer Invasive Front

图片

图片

图片

定义

Cell Neighborhood(细胞邻域)指骨髓微环境中空间上邻近的细胞群体形成的功能单元,这些单元由特定细胞类型组成,反映细胞间的物理邻近性和潜在相互作用。邻域的划分基于细胞类型的共定位模式,例如:动脉-内骨膜邻域(Arterio-endosteal neighborhood):富含早期髓系前体细胞(EMPs)和粒细胞-单核祖细胞(GMPs),靠近动脉和骨表面;红细胞生成岛(Erythroid islands):由巨噬细胞和红细胞前体细胞组成;间充质-白血病细胞邻域(MSC-blast neighborhoods):在AML样本中,间充质基质细胞(MSCs)与白血病原始细胞共定位。

计算方法
  1. 无监督邻域分析

    • 邻近窗口构建:以每个细胞为中心,计算其与周围10个最近邻细胞的物理距离,形成局部窗口。

    • K-means聚类:将所有窗口的细胞类型组成进行聚类(如K=15),识别出具有相似细胞类型组成的空间区域,即邻域。

    • 富集分析:通过超几何检验(hypergeometric test)评估每个邻域中特定细胞类型的富集程度。公式如下:

      P=(Kk)(N−Kn−k)(Nn)P

      图片

    • 其中,NN为总细胞数,KK为某细胞类型的总数量,nn为邻域内细胞数,kk为邻域内该细胞类型的数量。通过Benjamini-Hochberg方法校正多重假设检验的p值。

  2. 邻域注释
    根据富集的细胞类型和已知生物学知识(如动脉、内骨膜的位置),为每个聚类赋予生物学意义的名称(如“早期髓系-动脉邻域”)。

除了上述文章中的使用固定K近邻方法(fixed k-nearest neighbors)定义细胞Neighborhood,还有种方法是固定半径范围内(fixed radius)细胞定义细胞Neighborhood

图片

fixed K-nearest neighbors


import numpy as np
import pandas as pd
import scanpy as sc
import seaborn as sns
from sklearn.neighbors import NearestNeighbors
from sklearn.cluster import MiniBatchKMeans
import matplotlib.pyplot as plt
from matplotlib.pyplot import rc_context


def cellular_neighborhood_knn(adata, column, n_neighbors=10, k=10, n_clusters=10, out_dir=None):
    spatial_coords = adata.obsm['spatial']
    onehot_encoding = pd.get_dummies(adata.obs[column])
    
    # 计算最近邻居
    nbrs = NearestNeighbors(n_neighbors=n_neighbors).fit(spatial_coords)
    distances, indices = nbrs.kneighbors(spatial_coords)
    
    # 对每个cell,计算其邻居的类型分布
    cluster_cols = adata.obs[column].unique()
    values = onehot_encoding[cluster_cols].values
  
    def compute_window_sums(indices, values, k):
        windows = []
        for idx in range(indices.shape[0]):
            neighbors = indices[idx, :k]
            window_sum = values[neighbors].sum(axis=0)
            windows.append(window_sum)
        return np.array(windows)
    
    windows = compute_window_sums(indices, values, k)
    km = MiniBatchKMeans(n_clusters=n_clusters, random_state=0)
    labels = km.fit_predict(windows)
    adata.obs[f'CNs_{n_clusters}'] = [f'CN{i}' for i in labels]
    adata.obs.to_csv(os.path.join(out_dir, f'CNs_{n_clusters}_all_cell_features.xls'), sep='\t', index=None)
    
    # 保存聚类中心
    k_centroids = km.cluster_centers_
    
    # 计算Fold Change (fc)
    tissue_avgs = values.mean(axis=0)
    fc = np.log2(((k_centroids + tissue_avgs) / (k_centroids + tissue_avgs).sum(axis=1, keepdims=True)) / tissue_avgs)
    fc = pd.DataFrame(fc, columns=adata.obs[column].unique())
    fc.index = 'CN' + fc.index.astype(str)
    sns.set_style("white")
    g = sns.clustermap(fc, vmin=-2, vmax=2, cmap="vlag", row_cluster=False, col_cluster=True, linewidths=0.5, figsize=(6, 6))
    g.ax_heatmap.tick_params(right=False, bottom=False)
    plt.savefig(os.path.join(out_dir, f"CNs_{n_clusters}.png"), dpi=300, bbox_inches='tight')

    return adata

图片

图片

图片

Xenium | 空间原位转录组数据分析全解

Xenium数据分析 | 下机数据读取

Xenium数据分析 | 数据预处理、单细胞降维聚类、细胞类型定义

空间转录组 | 细胞niche分析

http://www.dtcms.com/a/91717.html

相关文章:

  • 【蓝桥杯】每日练习 Day13
  • 深度学习论文分享(十)A Tutorial on Principal Component Analysis
  • AI日报 - 2025年3月27日
  • #vue中解决异步请求的竞态
  • 数据结构 单链表 数组模仿链表
  • 【Java/数据结构】二叉树(BinaryTree)
  • ipconfig、ping、ipconfig/all 4个常用 **Windows终端(CMD)命令** 的详细解释
  • vscode 通过Remote-ssh远程连接服务器报错 could not establish connection to ubuntu
  • 基于ssm人脸识别的网络相册管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 2-2 MATLAB鮣鱼优化算法ROA优化CNN超参数回归预测
  • 【git】认识git的本地仓库
  • jeecgboot vue 分片上传 minio
  • AOA与TOA混合定位,MATLAB例程,自适应基站数量,三维空间下的运动轨迹,滤波使用EKF
  • Apache Shiro 统一化实现多端登录(PC端移动端)
  • canvas.toDataURL返回 Base64 编码黑色图片的检测方法
  • cs231n-图像分类:kNN与线性分类器
  • 【遥感小目标数据集】【AI-TOD】Tiny Object Detection in Aerial Images
  • Java多线程与JConsole实践:从线程状态到性能优化!!!
  • LeetCode Hot100 刷题笔记(4)—— 二叉树、图论
  • PyTorch实现Transformer模型
  • 输出输入练习
  • 《数字图像处理》第四章 频率域滤波简要学习笔记以及频率域滤波与空间域滤波的区别
  • 构建稳健的机器学习系统:应对数据偏移挑战
  • Leetcode 交错字符串
  • [FPGA基础学习]加法器、三八译码器及DE2-115基本使用方法和数码管显示
  • (C语言)动态分配的动态通讯录(静态通讯录Plus)(C语言小项目)
  • 关于跨域问题(本地前端访问服务器端接口跨域出错)
  • Notepad++ 替换 换行符 为 逗号
  • 关于服务器只能访问localhost:8111地址,局域网不能访问的问题
  • AWE直击:萤石RX30 Max的吸泡面战争,一场清洁技术的范式革命