R中多变量的glm
我想为我的snps阵列建模。我可以使用下面的代码一个接一个地执行此操作R中多变量的glm,r,loops,apply,glm,R,Loops,Apply,Glm,我想为我的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))) 如何使用循环或应用程序对所有其他
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将被所有其他SNP替换。
顺致敬意,
Zillur考虑开发一种处理任何SNP的通用方法。然后使用Lappy或sapply迭代传递每个SNP列: 要构建数据帧,请调整方法和lappy调用,后跟do.call+rbind:
SNP列是否在数据中?特别是除了DX以外的所有列?更好的数据,谢谢。对SNP是数据中的列。DX也是一个包含两个级别“CAS”和“CON”的列。除了SNP和DX,数据中还有其他列吗?谢谢。对还有许多其他专栏。总共有489个栏目,其中3:426是SNP,谢谢。在输出调用中,我得到了这个错误。relevel.factorsnps中出错,AA:“ref”必须是现有级别。我有其他的SNP水平,包括“AA”,你的400+中可能有一个没有AA水平。请参阅tryCatch edit,您可以在lappy中捕获错误,但在sapply中返回NA。非常感谢。它起作用了。下游的另一个问题。我得到的结果是:非常感谢。它起作用了。下游的另一个问题。我得到的输出是:$rs3024847_R或2.5%97.5%截距1.2285714 0.8970813 1.688313 relevelsnps,aa其他0.7657037 0.5404940 1.081639。是否可以将输出转换为具有上述列或、2.5%和97.5%以及行名作为SNP名称的数据帧。请参阅扩展以构建rbind外部循环的数据帧列表。
# 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)
# BUILD LIST OF FUNCTION OUTPUT
glm_list <- lapply(Data[3:426], function(col)
tryCatch(proc_glm(col), error = function(e) e))
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)