使用ComBat时出错

时间:2014-02-03 16:53:42

标签: r bioconductor

我是R的新手,我正在尝试在R sva库中使用331 x 89基因表达值矩阵的ComBat脚本。我的数据由5个批次组成,并以这种方式订购,因此前106行对应批次1,后者106对应批次2,依此类推。

 batch1 <- rep(1,times=106)
 batch2 <- rep(2,times=106)
 batch3 <- rep(3,times=39)
 batch4 <- rep(4,times=26)
 batch5 <- rep(5,times=54)
 batch.type <- as.factor(c(batch1,batch2,batch3,batch4,batch5)) 

然后我尝试使用此命令使用ComBat:

 ComBat(data,batch=batch.type,mod=NULL)

我收到以下读数和错误消息:

"Found 5 batches
Found 0  categorical covariate(s)
Standardizing Data across genes
Error in solve(t(design) %*% design) %*% t(design) %*% t(as.matrix(dat)) : 
  non-conformable arguments"

2 个答案:

答案 0 :(得分:10)

我已经在sva包中使用了ComBat(就在今天早上!)一年前的InSilicoDb软件包,并且在两个软件包中使用ComBat方法都遇到了类似的错误。虽然还有其他类似的线程,但错误消息可能不同。我遇到了&#34;解决错误(t(设计)%%设计)%%t(设计)%*%t(as.matrix(dat)):非-conformable arguments&#34;和&#34; while(更改&gt; conv){:缺少值,其中需要TRUE / FALSE&#34 ;,在两种情况下,当我的所有样本的方差都不够高时。

后一个错误更有帮助:你看到来自&#34;改变&#34;没有足够大的东西在这里发生变化。我经常使用我写的脚本来过滤掉变化很小的基因。方差系数可能是一个更好的(标准化)度量标准,但是如果我相当积极地阈值,去除方差为1以下的所有基因,那么ComBat可靠地运行(我只是尝试了一个较低的阈值.5并且它给出了错误信息你发现。也可能与数据有关。)

奇怪的是,更严格的方差阈值已经为我解决了这两个错误消息。我认为它必须与代码如何经过迭代直到收敛;也许低变异的基因会导致它在程序中的几个点停止?

&#34;更改&gt;上的线程CONV&#34;消息如下。但是,仅删除常量(方差= 0)基因对我来说就不足以像这个用户一样运行ComBat。他/她的数据集必须在所有样本中具有方差= 0或方差=大数:

https://groups.google.com/forum/#!msg/combat-user-forum/_z8DxYQNFJ8/7UI_a2nCoUEJ

我不喜欢过滤样品只是因为它们的变化很小,但是我还没有找到一种能够将这些与噪音区别开来的好方法。

让我知道这是否有帮助 - 如果它是100%由于样本中的低变异基因(或任何你有的功能)而非常好!

答案 1 :(得分:0)

我在批量载体中找到了NA。删除它们帮助我回顾了不合适的论点&#39;错误。并且删除零方差的值可以让我通过&#34;错误in(更改&gt; conv){:缺少值,其中需要TRUE / FALSE&#34;错误。 检查批处理向量中的NA和 添加到您的数据矩阵:

var.data <- apply(data, 1, var)
data <- data.free[-which(var.data == 0 ),]