单细胞笔记14-Seurat中寻找差异基因的方法

LR

  • 对于每个基因:利用逻辑回归,使用这个基因的表达来预测分组(属于(1) 或 不属于(0)这个细胞类型),如果有隐变量,就也作为自变量加到回归模型里。
  • 函数:Seurat:::LRDETest
function (data.use, cells.1, cells.2, latent.vars = NULL, verbose = TRUE) 
{
    group.info <- data.frame(row.names = c(cells.1, cells.2))
    group.info[cells.1, "group"] <- "Group1"
    group.info[cells.2, "group"] <- "Group2"
    group.info[, "group"] <- factor(x = group.info[, "group"])
    data.use <- data.use[, rownames(group.info), drop = FALSE]
    latent.vars <- latent.vars[rownames(group.info), , drop = FALSE]
    my.sapply <- ifelse(test = verbose && nbrOfWorkers() == 1, 
        yes = pbsapply, no = future_sapply)
    p_val <- my.sapply(X = 1:nrow(x = data.use), FUN = function(x) {
        if (is.null(x = latent.vars)) {
            model.data <- cbind(GENE = data.use[x, ], group.info)
            fmla <- as.formula(object = "group ~ GENE")
            fmla2 <- as.formula(object = "group ~ 1")
        }
        else {
            model.data <- cbind(GENE = data.use[x, ], group.info, 
                latent.vars)
            fmla <- as.formula(object = paste("group ~ GENE +", 
                paste(colnames(x = latent.vars), collapse = "+")))
            fmla2 <- as.formula(object = paste("group ~", paste(colnames(x = latent.vars), 
                collapse = "+")))
        }
        model1 <- glm(formula = fmla, data = model.data, family = "binomial")
        model2 <- glm(formula = fmla2, data = model.data, family = "binomial")
        lrtest <- lrtest(model1, model2)
        return(lrtest$Pr[2])
    })
    to.return <- data.frame(p_val, row.names = rownames(data.use))
    return(to.return)
}

未完待续

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容