美文网首页
排查CIBERSORT报错之模型不存在

排查CIBERSORT报错之模型不存在

作者: CrimsonUMO | 来源:发表于2022-11-10 21:18 被阅读0次

CIBERSORT是常用的评估免疫浸润的工具,但是由于没有R包只有脚本,平时用起来会比较麻烦,特别是这个脚本时不时给你报个错,非常烦人。今天师姐安排了CIBERSORT的任务,但是运行得不顺利,一直报错,一气之下决定查一查到底是咋个回事。

> source('Cibersort.R')
> result <- CIBERSORT('./LM22.txt','./expr_tpm.txt', perm = 0, QN = T) #perm置换次数=1000,QN分位数归一化=TRUE
 Error in predict.svm(ret, xhold, decision.values = TRUE) : 
Model is empty!

非常奇怪,运行之后显示模型为空。
去查原始的脚本,把X和Y读进来一步一步运行,运行到这步的时候报错了:

>   if(P > 0) {nulldist <- sort(doPerm(P, X, Y)$dist)}
 Error in h(simpleError(msg, call)) : 
在为'sort'函数选择方法时评估'x'参数出了错: Model is empty!

发现是doPerm这个函数报的错,往回翻一下

>   while(itor <= perm){
+     #print(itor)
+     
+     #random mixture
+     yr <- as.numeric(Ylist[sample(length(Ylist),dim(X)[1])])
+     
+     #standardize mixture
+     yr <- (yr - mean(yr)) / sd(yr)
+     
+     #run CIBERSORT core algorithm
+     result <- CoreAlg(X, yr)
+     
+     mix_r <- result$mix_r
+     
+     #store correlation
+     if(itor == 1) {dist <- mix_r}
+     else {dist <- rbind(dist, mix_r)}
+     
+     itor <- itor + 1
+   }
 Error in predict.svm(ret, xhold, decision.values = TRUE) : 
Model is empty!

发现是这里报的错。一步一步运行,发现这里的yr不太对劲,是个空值。这是咋回事呢?再往前翻,问题其实出在了这一行代码:

  Xgns <- row.names(X)
  Ygns <- row.names(Y)
  YintX <- Ygns %in% Xgns
  Y <- Y[YintX,]
  XintY <- Xgns %in% row.names(Y)
  X <- X[XintY,]

这里运算完之后会发现X和Y都是null
再往前找,会发现是读入矩阵时候的问题。读LM22这个文件的时候,脚本的代码是:

  #read in data
 X <- read.table(sig_matrix,header=T,sep = "\t",row.names=1,check.names=F)
 Y <- read.table(mixture_file, header=T, row.names=1,check.names=F)

本来应该读进来之后GeneSymbol是行名,但是实际上读进来的数据框rownames是数字,而且可能是空的,所以跟Y取交集的时候是null,后面也就会报错了。造成这个问题的原因有很多,比如LM22.txt格式不对。有的文件是把数字作为行名输入到txt文档里了。这样子的话你怎么改代码都是没用的。还有可能是因为sep="\t"这个参数不对,如果你的LM22.txt不是table分隔的话就会出问题。总之都怪他们课题组不出R包。
我个人是这两个原因都占了,所以把sep参数删了,然后读了一下LM22.csv重新输出了一个txt就好了。

X <- read.csv("./LM22.csv")
rownames(X) <- X[,1]
X <- X[,-1]
write.table(X,file = "LM22.txt",row.names = T)

试一下:

> rm(list = ls())
> source('Cibersort.R')
> result <- CIBERSORT('./LM22.txt','./expr_tpm.txt', perm = 10, QN = T) #perm置换次数=1000,QN分位数归一化=TRUE
> head(result)
     B.cells.naive B.cells.memory Plasma.cells T.cells.CD8
NML2    0.03057603    0.000000000   0.13662304 0.000000000
NML3    0.00000000    0.167572643   0.00000000 0.007671760
NML4    0.00000000    0.102559658   0.00000000 0.001115973
NML5    0.00000000    0.161794099   0.02120983 0.000000000
CON1    0.01544299    0.000000000   0.00000000 0.000000000
CON2    0.00000000    0.001725378   0.14095960 0.000000000

相关文章

网友评论

      本文标题:排查CIBERSORT报错之模型不存在

      本文链接:https://www.haomeiwen.com/subject/yzotxdtx.html