GLM для нескольких переменных в R - PullRequest
0 голосов
/ 07 мая 2019

Я хотел смоделировать свой массив 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)))

Как я могу сделать это для всех других snps, используя цикл или применить? Это snps rs6693065_D, rs6693065_A и сотни из них. Из приведенного выше кода только «rs6693065_D» будет заменен всеми другими snps. С уважением Зиллура

1 Ответ

0 голосов
/ 07 мая 2019

Рассмотрите возможность разработки обобщенного метода для обработки любых snps . Затем назовите его итеративно, пропуская каждый столбец snps , используя lapply или sapply:

# 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)

Используйте tryCatch в случае ошибок типа relevel:

# 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)
...