require(parallel) require(lme4) load("mdata.RData") #file including DNA methylation beta-values #optional: only use a subset of the CpGs included in mdata file subset <- read.csv("CpGs.csv", header=T, strings=F) head(subset) mdata <- mdata[,colnames(mdata) %in% subset$CpGs] pdata<-read.csv("pdata.csv", header=T, strings=F) #file including participant data mdata <- mdata[rownames(mdata) %in% pdata$id,] pdata <- pdata[pdata$id %in% rownames(mdata),] pdata <- pdata[match(rownames(mdata),pdata$id),] ##Exposure= Cardio-metabolic trait of interest #model 1 fm_char <- "y ~ Exposure + sex + Age + Granulocytes + Lymphocytes + Monocytes (1|Array_Number) + (1|Position_on_Array)" #model 2 including BMI + relevant medication fm_char <- "y ~ Exposure + sex + Age + BMI + medication + Granulocytes + Lymphocytes + Monocytes (1|Array_Number) + (1|Position_on_Array)" fm <- as.formula(fm_char) fm_fixed <- gsub("\\(1\\|", "", fm_char) fm_fixed <- as.formula(gsub("\\)", "", fm_fixed)) method = "LMM" if (method == "LMM") { pdata[,"y"] <- rnorm(nrow(pdata)) DFE <- lm(fm_fixed, data=pdata)$df.residual # LMM doOne <- function(i) { pdata$y <- as.numeric(mdata[,i]) betamean<-mean(pdata$y,na.rm=T) betasd<-sd(pdata$y,na.rm=T) result <- c(NA, NA, NA, length(na.omit(pdata$y)), betamean, betasd) buf <- tryCatch({ mresult <- lmer(fm, data=pdata) reduced_y <- mresult@frame[, "y"] tbl <- summary(mresult) # Automatic detection between new and old lme4 if (any(names(attributes(summary(tbl))) == "coefs")) { tbl <- tbl@coefs } else { tbl <- tbl$coef } # Returns Effect size, Standard Error, P-value, N result <- c(tbl[2,1], tbl[2,2], 2*pt(abs(tbl[2,3]), df=DFE, lower.tail=FALSE), length(reduced_y), betamean, betasd) }, error = function(e) { cat("WARNING: LMM failed for probe",i,"\n") print(e) }, finally={}) return (result) } } result_all <- do.call(rbind, mclapply(1:ncol(mdata), doOne)); result_all <- data.frame(result_all) result_all$ProbeID <- colnames(mdata) result_all <- result_all[,c(ncol(result_all), 1:(ncol(result_all)-1))] colnames(result_all) <- c("ProbeID", "Effect", "SE", "P", "N", "betaMean", "betaSD") write.csv(result_all,"CpGs_exposure.csv",quote=F,row.names=F)