首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >脚本扩展--空间邻近性分析

脚本扩展--空间邻近性分析

原创
作者头像
追风少年i
发布2026-04-02 10:05:44
发布2026-04-02 10:05:44
1520
举报

作者,Evil Genius

今天我们扩展脚本,大家应该经常在文章中看到这样的分析结果。

一般来讲,很多人立马想到用squidpy来分析

Squidpy的共现概率分析是一种描述性统计方法。它通过比较局部条件概率和全局背景概率,提供了一个直观的指标来判断不同细胞类型在空间上是相互吸引、排斥还是随机分布。这有助于我们从空间组织中挖掘细胞间潜在的通讯或生态位关系。

但是这个方法不够完美,实际操作中不能完全满足分析的需求,我们希望的是,分距离阶段看细胞的丰度变化。

即0-20um范围内,细胞的含量组成,20-40um的含量组成,以此类推,一般推到200um,然后看细胞比例的整体变化,这个过程不能累计,而是每段距离单独计算,然后拟合,我们换一个方法实现。

代码语言:javascript
复制
library(tidyverse)
library(phenoptr)

csd <- “读取示例数据”
csd %>% count(Phenotype)

distances <- find_nearest_distance(csd)
glimpse(distances)

csd_with_distance <- bind_cols(csd, distances)

merged_with_distance <- merged %>%
  group_by(`Sample Name`) %>%
  do(bind_cols(., find_nearest_distance(.)))


csd_with_distance %>% group_by(Phenotype) %>% 
  select(Phenotype, starts_with('Distance to')) %>% 
  summarize_all(~round(mean(.), 1))

ggplot(csd_with_distance, aes(`Distance to CD8+`, color=Phenotype)) +
  geom_density(size=1)
代码语言:javascript
复制
# Filter to just CD8+ and CK+ cells
cd8_cells = csd_with_distance %>% filter(select_rows(csd_with_distance, 'CD8+'))
ck_cells = csd_with_distance %>% filter(select_rows(csd_with_distance, 'CK+'))

# For each CD8+ cell, join with the data for the nearest CK+ cell
cd8_to_ck = cd8_cells %>% left_join(ck_cells, by=c('Cell ID CK+'='Cell ID'),
                                    suffix=c('', '.CK'))

# Read a background image and make a base plot
background_path = 
  system.file("extdata/sample/Set4_1-6plex_[16142,55840]_composite_image.jpg", package='phenoptr')
background = jpeg::readJPEG(background_path) %>% as.raster()
xlim = c(0, 934)
ylim = c(0, 700)
base_plot = ggplot(mapping=aes(`Cell X Position`, `Cell Y Position`)) %>% 
  phenoptr:::add_scales_and_background(background, xlim, ylim, scale_color='white') +
  labs(x='Cell X Position', y='Cell Y Position') +
  scale_color_manual('Phenotype', values=c('CD8+'='red', 'CK+'='cyan2'))

# Add lines and points
base_plot + geom_segment(data=cd8_to_ck,
               aes(xend=`Cell X Position.CK`, yend=`Cell Y Position.CK`),
               color='white') +
  geom_point(data=ck_cells, aes(color='CK+'), size=1) +
  geom_point(data=cd8_cells, aes(color='CD8+'), size=1) +
  labs(title='Nearest CK+ to each CD8+')
代码语言:javascript
复制
ck_to_cd8 = ck_cells %>% left_join(cd8_cells, by=c('Cell ID CD8+'='Cell ID'),
                                    suffix=c('', '.CD8'))
base_plot + 
  geom_segment(data=ck_to_cd8,
               aes(xend=`Cell X Position.CD8`, yend=`Cell Y Position.CD8`),
               color='white') +
  geom_point(data=ck_cells, aes(color='CK+'), size=1) +
  geom_point(data=cd8_cells, aes(color='CD8+'), size=1) +
  labs(title='Nearest CD8+ to each CK+')
代码语言:javascript
复制
mutual = ck_to_cd8 %>% filter(`Cell ID`==`Cell ID CK+.CD8`)

base_plot +
  geom_segment(data=mutual,
               aes(xend=`Cell X Position.CD8`, yend=`Cell Y Position.CD8`),
               size=1, color='white') +
  geom_point(data=ck_cells, aes(color='CK+'), size=1) +
  geom_point(data=cd8_cells, aes(color='CD8+'), size=1) +
  labs(title='Mutual nearest neighbors - CD8+ and CK+')

生活很好,有你更好。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者,Evil Genius
  • 今天我们扩展脚本,大家应该经常在文章中看到这样的分析结果。
  • 一般来讲,很多人立马想到用squidpy来分析
  • Squidpy的共现概率分析是一种描述性统计方法。它通过比较局部条件概率和全局背景概率,提供了一个直观的指标来判断不同细胞类型在空间上是相互吸引、排斥还是随机分布。这有助于我们从空间组织中挖掘细胞间潜在的通讯或生态位关系。
  • 但是这个方法不够完美,实际操作中不能完全满足分析的需求,我们希望的是,分距离阶段看细胞的丰度变化。
  • 即0-20um范围内,细胞的含量组成,20-40um的含量组成,以此类推,一般推到200um,然后看细胞比例的整体变化,这个过程不能累计,而是每段距离单独计算,然后拟合,我们换一个方法实现。
  • 生活很好,有你更好。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档