【问题标题】:glm for multiple variables in R用于R中的多个变量的glm
【发布时间】:2019-05-07 18:06:06
【问题描述】:

我想为我的 snps 数组建模。我可以使用以下代码一一完成。

Data$DX=as.factor(Data$DX)
univariate=glm(relevel(DX, "CON") ~ relevel(rs6693065_D,"AA"), family = binomial, data = Data)
summary(univariate)
exp(cbind(OR = coef(univariate), confint(univariate)))

如何使用循环或应用对所有其他 snp 执行此操作? snps 是 rs6693065_D、rs6693065_A 和数百个。从上面的代码中,只有“rs6693065_D”将被所有其他 snps 替换。 最好的祝福 齐鲁尔

【问题讨论】:

  • Data 中有 snps 列吗?特别是除 DX 之外的所有列?更好的是dput(head(Data))reproducible example
  • 谢谢。是的。 snps 是 Data 中的列。 DX 也是一个具有两个级别('CAS' 和 'CON')的列。
  • 除了 snpsDX 之外,Data 中是否还有其他列?
  • 谢谢。是的。还有许多其他列。共有 489 列,其中 3:426 为 SNP。

标签: r loops apply glm


【解决方案1】:

考虑开发一种通用方法来处理任何snps。然后使用lapplysapply 迭代地传递每个snps 列:

# GENERALIZED METHOD
proc_glm <- function(snps) {
   univariate <- glm(relevel(data$DX, "CON") ~ relevel(snps, "AA"), family = binomial)

   return(exp(cbind(OR = coef(univariate), confint(univariate))))
}

# BUILD LIST OF FUNCTION OUTPUT 
glm_list <- lapply(Data[3:426], proc_glm)

如果出现relevel 之类的错误,请使用tryCatch

# BUILD LIST OF FUNCTION OUTPUT 
glm_list <- lapply(Data[3:426], function(col) 
                   tryCatch(proc_glm(col), error = function(e) e))

要构建数据框,请调整方法和 lapply 调用,然后是 do.call + rbind

proc_glm <- function(col){
  # BUILD FORMULA BY STRING
  univariate <- glm(as.formula(paste("y ~", col)), family = binomial, data = Data)

  # RETURN DATA FRAME OF COLUMN AND ESTIMATES
  cbind.data.frame(COL = col,
                   exp(cbind(OR = coef(univariate), confint(univariate)))
  )
}

# BUILD LIST OF DFs, PASSING COLUMN NAMES
glm_list <- lapply(names(Data)[3:426], 
                   tryCatch(proc_glm(col), error = function(e) NA))

# APPEND ALL DFs FOR SINGLE MASTER DF
final_df <- do.call(rbind, glm_list)

【讨论】:

  • 谢谢。在输出调用中,我收到此错误。 " relevel.factor(snps, "AA") 中的错误:'ref' 必须是现有级别"。我在 snps 中还有其他级别,包括“AA”
  • 您的 400 多位用户中可能有一个没有 AA 级别。请参阅 tryCatch 编辑,您可以在其中捕获 lapply 中的错误,但在 sapply 中返回为 NA
  • 非常感谢。有用。下游的另一个问题。我得到的输出看起来像:
  • 非常感谢。有用。下游的另一个问题。我得到的输出看起来像: "$rs3024847_R OR 2.5 % 97.5 % (Intercept) 1.2285714 0.8970813 1.688313 relevel(snps, "AA")OTHER 0.7657037 0.5404940 1.081639" 。是否可以将输出转换为具有上述列(OR、2.5% 和 97.5%)和行名作为 snps 名称的数据框。
  • 查看扩展,为rbind 外部循环构建数据框列表。
猜你喜欢
  • 2014-07-06
  • 2014-04-30
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
相关资源
最近更新 更多