CellChat系列10:一个奇怪的Bug的修复,我们再次理解数据

一个奇怪的Bug的修复,我们再次理解数据

如上图所示,我本来输入数据做了一个exp,指数变化算得好好的。但是我用原始的data slot,反而出问题了。没办法只能排查。

当我把 warnings打印出来,原来底层原因是因为log之后产生了 NaNs


下面我们就具体去看看,哪里产生了这些wanings。

顺着这个NaN

在运算中出错的原因就在于:
sum(c(1:10,NaN)) == 0 这个结果返回NaN而不是它需要的T/F,下面我们要顺藤摸瓜,找到是哪里产生了NaN。

那么什么时候log会产生NAN呢?


这里,当我们输入的值小于0的时候就产生了。

那么为什么会有负值呢?

因为你的输入数据有负值,重磅发现 v1.6.1版本是有这个限制的。

一定要所有值都大于0。怪不得我取 exp变换之后,就可以运算了,原来是需要所有值都为正值。

那么这个具体是在哪个地方做了log变换呢?

关键的地方就在这里,这个geometricMean这函数,几何平均数必须要是正值才行。

#' Compute the geometric mean
#' @param x a numeric vector
#' @param na.rm whether remove na
#' @return
#' @export
geometricMean <- function(x,na.rm=TRUE){
  if (is.null(nrow(x))) {
    exp(mean(log(x),na.rm=na.rm))
  } else {
    exp(apply(log(x),2,mean,na.rm=na.rm))
  }
}

所以作者才会在创建CellChat对象的时候检查一下,data中的最小值是否大于0,否则是不能参与运算的。
但是你为什么输入的时候是matrix类型的就不检查呢?奇怪。一连串的黑人问号。

好,现在我们清楚了问题所在,我们再重申一下问题:

  1. 计算通讯概率需要用到几何平均数,但是几何平均数要求所有输入的值为正值
  2. 但是一般不是归一化之后的数据,他是有负值的
  3. 如何将包含负值的归一化数据转变成没有负值的数据

怎么破

不要紧,统计总有简单的方法

  1. shift data,就是每个值都加上一个 min(data) + offset, offset可以取1或者一个极小的数
  2. 进行exp变换,因为一般归一化之后出现负值也是因为取了Log变换,所以可以再变回去。

但是,不对啊,标准流程又怎么会产生负数

难道是我们的调用姿势不对?

标准流程有两个,当你的数据是一个dataset的时候,这个dataset没有批次效应。因此你可以用RNA中的data slot或者用SCT的 data slot。这个时候你把data放进来,它是不是有负值的,因为它log变化的时候取的是 log1p,所以最小值不会小于0.

第二个流程就是有两个 dataset,他们有批次性效应。官方的标准流程是先在一个dataset中把结果算好。然后再将单个dataset中的结果读进来做下游的整合分析。也就是说计算通讯概率等都是在原来dataset中进行的,后面只是可视化一下。

这里的dataset可以是不同的condition下的数据。例如你选取了三个时间点,t1,t2和t3。每个时间点养一窝小鼠。这样就会产生批次效应。每窝小鼠待得环境可能不一样。

其实还可以有第三个方案:
这个方案就是把不同conditon下的dataset,整合到一块,形成一个大的dataset。这个dataset,只包含了几千个高变基因,这个时候你再根据cell的标签,将其根据condition,来做不同condition下面的通讯分析。

这个方案与上面的标准流程有两个重要的不同,1.这里的基因少了,是几千个高变基因。2.这里的归一化后输入到CellChat的数据是有负值的。

所以知道了这些区别之后,你可以权衡。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,702评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,143评论 3 415
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,553评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,620评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,416评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,940评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,024评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,170评论 0 287
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,709评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,597评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,784评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,291评论 5 357
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,029评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,407评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,663评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,403评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,746评论 2 370

推荐阅读更多精彩内容