## installations install.packages("tidyverse") install.packages("meta") install.packages("metafor") install.packages("devtools") devtools::install_github("MathiasHarrer/dmetar") install.packages("data.table") install.packages("pwr") install.packages("corrplot") install.packages("Hmisc") install.packages("PerformanceAnalytics") install.packages("pheatmap") install.packages("gtools") setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1") ## import data and sort variable types library(readxl) full_data <- read_excel("AnMod_data.xlsx") setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/TG_out") full_data$Study <- as.factor(full_data$Study) full_data$Protocol <- as.numeric(full_data$Protocol) full_data$Sex <- as.factor(full_data$Sex) full_data$Indiv_drug_class_3 <- as.factor(full_data$Indiv_drug_class_3) full_data$Drug_Class_new_1_all <- as.factor(full_data$Drug_Class_new_1_all) full_data$Intervention <- as.factor(full_data$Intervention) full_data$Model_simple <- as.factor(full_data$Model_simple) full_data$Background_simple <- as.factor(full_data$Background_simple) full_data$Paper <- as.factor(full_data$Paper) ## log-transform skewed continuous variables ahead of meta-regression hist(full_data$Chol_per) full_data$log_Chol_per <- log(full_data$Chol_per) hist(full_data$log_Chol_per) hist(full_data$FructGluc_per) full_data$log_FructGluc_per <- log(full_data$FructGluc_per) hist(full_data$log_FructGluc_per) hist(full_data$Sucr_kcal) full_data$log_Sucr_kcal <- log(full_data$Sucr_kcal) hist(full_data$log_Sucr_kcal) hist(full_data$Fat_kcal) full_data$log_Fat_kcal <- log(full_data$Fat_kcal) hist(full_data$log_Fat_kcal) hist(full_data$Age_start) full_data$log_Age_start <- log(full_data$Age_start) hist(full_data$log_Age_start) hist(full_data$Age_end) full_data$log_Age_end <- log(full_data$Age_end) hist(full_data$log_Age_end) hist(full_data$Duration) full_data$log_Duration <- log(full_data$Duration) hist(full_data$log_Duration) hist(full_data$Wt_change) full_data$log_Wt_change <- log(full_data$Wt_change) hist(full_data$log_Wt_change) hist(full_data$Gluc_change) full_data$log_Gluc_change <- log(full_data$Gluc_change) hist(full_data$log_Gluc_change) hist(full_data$Insul_change) full_data$log_Insul_change <- log(full_data$Insul_change) hist(full_data$log_Insul_change) ## scale drug dose by each drug library(tidyverse) full_data <- full_data %>% group_by(Intervention) %>% mutate(Drug_dose = scale(Drug_dose)) ######## ## Run correlation analysis for continuous variables in models that don't cause weight loss library(corrplot) library(Hmisc) flattenCorrMatrix <- function(cormat, pmat) { ut <- upper.tri(cormat) data.frame( row = rownames(cormat)[row(cormat)[ut]], column = rownames(cormat)[col(cormat)[ut]], cor =(cormat)[ut], p = pmat[ut] ) } full_data_corrplot = subset(full_data, select = c("Qual_score","log_Chol_per","log_FructGluc_per","log_Sucr_kcal","log_Fat_kcal","log_Age_start","log_Age_end","log_Duration","log_Wt_change","log_Gluc_change","log_Insul_change")) full_cor_pears <- rcorr(as.matrix(full_data_corrplot), type="pearson") full_cor_pears_tab <- flattenCorrMatrix(full_cor_pears$r, full_cor_pears$P) write.table(full_cor_pears_tab, file="full_cor_pears_tab.csv",sep=",") col<- colorRampPalette(c("blue4", "white", "firebrick3"))(20) pdf(file="full_corrplot_v1.pdf",width=8,height=8) full_corrplot <- corrplot(full_cor_pears$r, tl.cex = 1, order = "hclust", addgrid.col = "darkgray",bg="snow2",outline = T,tl.col="black", col=col,tl.srt=45,p.mat = full_cor_pears$P, insig = "label_sig", sig.level = c(.001, .01, .05), pch.cex=1.2, pch.col = "black", type = "upper") full_corrplot dev.off() ######## ## Analysis for hepatic triglyceride content (TG) ######## ## Power analysis library(pwr) ## calculate common SD full_data$TG_Int_SD2 <- full_data$TG_Int_SD*full_data$TG_Int_SD full_data$TG_Pla_SD2 <- full_data$TG_Pla_SD*full_data$TG_Pla_SD full_data$TG_comm_SD <- sqrt(((full_data$TG_Int_SD2+full_data$TG_Pla_SD2)/2)) full_data$TG_m_diff <- full_data$TG_Pla_Mean-full_data$TG_Int_Mean full_data$TG_eff_size <- full_data$TG_m_diff/full_data$TG_comm_SD library(tidyr) TG_data <- full_data TG_data <- TG_data %>% drop_na(TG_eff_size) TG_data$power <- pwr.t2n.test(n1 = TG_data$TG_Int_size, n2 = TG_data$TG_Pla_size, d = TG_data$TG_eff_size)$power write.table(TG_data$power,file="TG_data_power.csv",sep=",") hist(TG_data$power) TG_dens_power <- density(TG_data$power) pdf(file="TG_kernel_power_v1.pdf") plot(TG_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)") polygon(TG_dens_power, col="red", border="blue") dev.off() ## load packages for metan library(dmetar) library(meta) library(metafor) library(readxl) max.print = 100000 ## drop where <3 unique studies for any drug class TG_drugsclass_counts <- TG_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) TG_class_counts <- TG_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) TG_class_less3 = subset(TG_class_counts, n <3) str(TG_class_less3) TG_class_less3$Drug_Class_new_1_all <- droplevels(TG_class_less3$Drug_Class_new_1_all) TG_class_droplist <- TG_class_less3$Drug_Class_new_1_all TG_data_min3class <- TG_data %>% filter(!Drug_Class_new_1_all %in% TG_class_droplist) ## run metan TG_metan_class_main <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") TG_metan_class <- update(TG_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results TG_metan_class_tab <- data.frame(TG_metan_class[["TE.random.w"]]) TG_metan_class_tab$drug <- TG_metan_class[["bylevs"]] TG_metan_class_tab$SE <- TG_metan_class[["seTE.random.w"]] TG_metan_class_tab$lower <- TG_metan_class[["lower.random.w"]] TG_metan_class_tab$upper <- TG_metan_class[["upper.random.w"]] TG_metan_class_tab$Pz <- TG_metan_class[["pval.random.w"]] TG_metan_class_tab$weight <- TG_metan_class[["w.random.w"]] TG_metan_class_tab$k <- TG_metan_class[["k.w"]] TG_metan_class_tab$controls <- TG_metan_class[["n.c.w"]] TG_metan_class_tab$experimental <- TG_metan_class[["n.e.w"]] TG_metan_class_tab$Q <- TG_metan_class[["Q.w"]] TG_metan_class_tab$Pq <- TG_metan_class[["pval.Q.w"]] TG_metan_class_tab$tau <- TG_metan_class[["tau.w"]] TG_metan_class_tab$I2 <- TG_metan_class[["I2.w"]] TG_metan_class_tab <- TG_metan_class_tab %>% rename(MD = TG_metan_class...TE.random.w...) TG_metan_class_tab <- TG_metan_class_tab[order(-TG_metan_class_tab$MD),] TG_metan_class_tab$row_number <- 1:nrow(TG_metan_class_tab) TG_metan_class_tab$subgroup <- "Subgroup" TG_class_counts <- TG_class_counts %>% rename(drug = Drug_Class_new_1_all) TG_metan_class_tab <- merge(TG_class_counts, TG_metan_class_tab, by="drug") TG_metan_class_tab_overall <- data.frame(TG_metan_class[["TE.random"]]) TG_metan_class_tab_overall$drug <- "Overall" TG_metan_class_tab_overall$SE <- TG_metan_class[["seTE.random"]] TG_metan_class_tab_overall$lower <- TG_metan_class[["lower.random"]] TG_metan_class_tab_overall$upper <- TG_metan_class[["upper.random"]] TG_metan_class_tab_overall$Pz <- TG_metan_class[["pval.random"]] TG_metan_class_tab_overall$weight <- (max(TG_metan_class_tab$weight)*2) TG_metan_class_tab_overall$k <- TG_metan_class[["k"]] TG_metan_class_tab_overall$controls <- sum(TG_metan_class_tab$controls) TG_metan_class_tab_overall$experimental <- sum(TG_metan_class_tab$experimental) TG_metan_class_tab_overall$Q <- TG_metan_class[["Q"]] TG_metan_class_tab_overall$Pq <- TG_metan_class[["pval.Q"]] TG_metan_class_tab_overall$tau <- TG_metan_class[["tau"]] TG_metan_class_tab_overall$I2 <- TG_metan_class[["I2"]] TG_metan_class_tab_overall <- TG_metan_class_tab_overall %>% rename(MD = TG_metan_class...TE.random...) TG_metan_class_tab_overall$row_number <- ((nrow(TG_metan_class_tab))+1) TG_metan_class_tab_overall$subgroup <- "Overall" TG_metan_class_tab_overall$n <- sum(TG_metan_class_tab$n) TG_metan_class_sumtab <- rbind(TG_metan_class_tab, TG_metan_class_tab_overall) TG_metan_class_sumtab$weight <- as.numeric(TG_metan_class_sumtab$weight) TG_metan_class_sumtab$row_number <- as.numeric(TG_metan_class_sumtab$row_number) TG_metan_class_sumtab$subgroup <- as.factor(TG_metan_class_sumtab$subgroup) TG_metan_class_sumtab$total = TG_metan_class_sumtab$controls + TG_metan_class_sumtab$experimental TG_metan_class_sumtab$text <- paste(format(round(TG_metan_class_sumtab$MD, 1), nsmall = 1), format(round(TG_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) TG_metan_class_sumtab$text <- paste(TG_metan_class_sumtab$text, format(round(TG_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) TG_metan_class_sumtab$text <- paste(TG_metan_class_sumtab$text, "", sep = ")", collapse = NULL) TG_metan_class_sumtab$SE_1dig <- paste(format(round(TG_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) TG_metan_class_sumtab$Pz_1dig <- paste((signif(TG_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) TG_metan_class_sumtab$tI2_2dig <- paste(format(round(TG_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) TG_metan_class_sumtab$tau_1dig <- paste(format(round(TG_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) TG_metan_class_sumtab$Pq_1dig <- paste((signif(TG_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(TG_metan_class_sumtab,file="TG_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(TG_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(TG_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(TG_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = TG_metan_class_tab_overall$lower overall_max = TG_metan_class_tab_overall$upper TG_metan_class_ybreaks <- nrow(TG_metan_class_sumtab) TG_metan_class_sumtab <- TG_metan_class_sumtab[order(TG_metan_class_sumtab$row_number),] TG_metan_class_forest <- ggplot(data= TG_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: TG_metan_class_ybreaks, labels = TG_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in hepatic triglyceride (%)") + scale_x_continuous(limits=c(-125, 150), breaks=seq(-75, 50, 25), expand=c(0,0)) + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-150, xmax=-75, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=TG_metan_class_sumtab, aes(x=25, label=text), size = 3.5, hjust=0) + geom_text(data=TG_metan_class_sumtab, aes(x=-115, label=k), size = 3.5, hjust=0) + geom_text(data=TG_metan_class_sumtab, aes(x=-90, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-125, 75)) pdf(file="TG_metan_class_forest.pdf",width=10,height=8) TG_metan_class_forest dev.off() ####### ## bias analysis TG_class_eggers <- eggers.test(x = TG_metan_class_main) TG_class_eggers sink("TG_class_eggers.txt") print(TG_class_eggers) sink() TG_class_trimfill <- trimfill(TG_metan_class_main) TG_class_trimfill sink("TG_class_trimfill.txt") print(TG_class_trimfill) sink() pdf(file="TG_class_funnel.pdf") funnel(TG_class_trimfill, xlab="Mean difference in hepatic TG (%)", contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-200, 1, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue")) dev.off() ## use Baujat plot to look for outliers pdf(file="TG_class_baujat.pdf") TG_class_baujat <- baujat(TG_metan_class_main) TG_class_baujat dev.off() ## look for outliers based on SD TG_commSD_mean <- mean(TG_data$TG_comm_SD, na.rm=TRUE) TG_commSD_SD <- sd(TG_data$TG_comm_SD, na.rm=TRUE) TG_commSD_norm <- dnorm(TG_data$TG_comm_SD, mean = TG_commSD_mean, sd = TG_commSD_SD, log = FALSE) TG_commSD_norm <- as.data.frame(TG_commSD_norm) TG_commSD_norm$TG_comm_SD <- TG_data$TG_comm_SD TG_commSD_norm$Paper <- TG_data$Paper pdf(file = "TG_commSD_norm.pdf") plot(TG_commSD_norm$TG_comm_SD, TG_commSD_norm$TG_commSD_norm) dev.off() ## exclude studies with TG_comm_SD >100 or high contribution to heterogeneity on baujat plot TG_NoOutlier_data = subset(TG_data, TG_comm_SD <100) TG_NoOutlier_data <- TG_NoOutlier_data %>% filter(Paper != "Wu 2016" & Paper != "Uto 2005" & Paper != "Ota 2007_1" & Paper != "Khaleel 2017") ####### ## re-rerun after outliers excluded ## drop where <3 unique studies for any drug class TG_NoOutlier_drugsclass_counts <- TG_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) TG_NoOutlier_class_counts <- TG_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) TG_NoOutlier_class_less3 = subset(TG_NoOutlier_class_counts, n <3) str(TG_NoOutlier_class_less3) TG_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(TG_NoOutlier_class_less3$Drug_Class_new_1_all) TG_NoOutlier_class_droplist <- TG_NoOutlier_class_less3$Drug_Class_new_1_all TG_NoOutlier_data_min3class <- TG_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% TG_NoOutlier_class_droplist) ## run metan TG_NoOutlier_metan_class_main <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") TG_NoOutlier_metan_class <- update(TG_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results TG_NoOutlier_metan_class_tab <- data.frame(TG_NoOutlier_metan_class[["TE.random.w"]]) TG_NoOutlier_metan_class_tab$drug <- TG_NoOutlier_metan_class[["bylevs"]] TG_NoOutlier_metan_class_tab$SE <- TG_NoOutlier_metan_class[["seTE.random.w"]] TG_NoOutlier_metan_class_tab$lower <- TG_NoOutlier_metan_class[["lower.random.w"]] TG_NoOutlier_metan_class_tab$upper <- TG_NoOutlier_metan_class[["upper.random.w"]] TG_NoOutlier_metan_class_tab$Pz <- TG_NoOutlier_metan_class[["pval.random.w"]] TG_NoOutlier_metan_class_tab$weight <- TG_NoOutlier_metan_class[["w.random.w"]] TG_NoOutlier_metan_class_tab$k <- TG_NoOutlier_metan_class[["k.w"]] TG_NoOutlier_metan_class_tab$controls <- TG_NoOutlier_metan_class[["n.c.w"]] TG_NoOutlier_metan_class_tab$experimental <- TG_NoOutlier_metan_class[["n.e.w"]] TG_NoOutlier_metan_class_tab$Q <- TG_NoOutlier_metan_class[["Q.w"]] TG_NoOutlier_metan_class_tab$Pq <- TG_NoOutlier_metan_class[["pval.Q.w"]] TG_NoOutlier_metan_class_tab$tau <- TG_NoOutlier_metan_class[["tau.w"]] TG_NoOutlier_metan_class_tab$I2 <- TG_NoOutlier_metan_class[["I2.w"]] TG_NoOutlier_metan_class_tab <- TG_NoOutlier_metan_class_tab %>% rename(MD = TG_NoOutlier_metan_class...TE.random.w...) TG_NoOutlier_metan_class_tab <- TG_NoOutlier_metan_class_tab[order(-TG_NoOutlier_metan_class_tab$MD),] TG_NoOutlier_metan_class_tab <- TG_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n()) TG_NoOutlier_metan_class_tab$subgroup <- "Subgroup" TG_NoOutlier_class_counts <- TG_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all) TG_NoOutlier_metan_class_tab <- merge(TG_NoOutlier_class_counts, TG_NoOutlier_metan_class_tab, by="drug") TG_NoOutlier_metan_class_tab_overall <- data.frame(TG_NoOutlier_metan_class[["TE.random"]]) TG_NoOutlier_metan_class_tab_overall$drug <- "Overall" TG_NoOutlier_metan_class_tab_overall$SE <- TG_NoOutlier_metan_class[["seTE.random"]] TG_NoOutlier_metan_class_tab_overall$lower <- TG_NoOutlier_metan_class[["lower.random"]] TG_NoOutlier_metan_class_tab_overall$upper <- TG_NoOutlier_metan_class[["upper.random"]] TG_NoOutlier_metan_class_tab_overall$Pz <- TG_NoOutlier_metan_class[["pval.random"]] TG_NoOutlier_metan_class_tab_overall$weight <- (max(TG_NoOutlier_metan_class_tab$weight)*2) TG_NoOutlier_metan_class_tab_overall$k <- TG_NoOutlier_metan_class[["k"]] TG_NoOutlier_metan_class_tab_overall$controls <- sum(TG_NoOutlier_metan_class_tab$controls) TG_NoOutlier_metan_class_tab_overall$experimental <- sum(TG_NoOutlier_metan_class_tab$experimental) TG_NoOutlier_metan_class_tab_overall$Q <- TG_NoOutlier_metan_class[["Q"]] TG_NoOutlier_metan_class_tab_overall$Pq <- TG_NoOutlier_metan_class[["pval.Q"]] TG_NoOutlier_metan_class_tab_overall$tau <- TG_NoOutlier_metan_class[["tau"]] TG_NoOutlier_metan_class_tab_overall$I2 <- TG_NoOutlier_metan_class[["I2"]] TG_NoOutlier_metan_class_tab_overall <- TG_NoOutlier_metan_class_tab_overall %>% rename(MD = TG_NoOutlier_metan_class...TE.random...) TG_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(TG_NoOutlier_metan_class_tab))+1) TG_NoOutlier_metan_class_tab_overall$subgroup <- "Overall" TG_NoOutlier_metan_class_tab_overall$n <- sum(TG_NoOutlier_metan_class_tab$n) TG_NoOutlier_metan_class_sumtab <- rbind(TG_NoOutlier_metan_class_tab, TG_NoOutlier_metan_class_tab_overall) TG_NoOutlier_metan_class_sumtab$weight <- as.numeric(TG_NoOutlier_metan_class_sumtab$weight) TG_NoOutlier_metan_class_sumtab$row_number <- as.numeric(TG_NoOutlier_metan_class_sumtab$row_number) TG_NoOutlier_metan_class_sumtab$subgroup <- as.factor(TG_NoOutlier_metan_class_sumtab$subgroup) TG_NoOutlier_metan_class_sumtab$total = TG_NoOutlier_metan_class_sumtab$controls + TG_NoOutlier_metan_class_sumtab$experimental TG_NoOutlier_metan_class_sumtab$text <- paste(format(round(TG_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(TG_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) TG_NoOutlier_metan_class_sumtab$text <- paste(TG_NoOutlier_metan_class_sumtab$text, format(round(TG_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) TG_NoOutlier_metan_class_sumtab$text <- paste(TG_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL) TG_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(TG_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) TG_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(TG_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) TG_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(TG_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) TG_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(TG_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) TG_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(TG_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(TG_NoOutlier_metan_class_sumtab,file="TG_NoOutlier_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(TG_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(TG_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(TG_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = TG_NoOutlier_metan_class_tab_overall$lower overall_max = TG_NoOutlier_metan_class_tab_overall$upper TG_NoOutlier_metan_class_ybreaks <- nrow(TG_NoOutlier_metan_class_sumtab) TG_NoOutlier_metan_class_sumtab <- TG_NoOutlier_metan_class_sumtab[order(TG_NoOutlier_metan_class_sumtab$row_number),] TG_NoOutlier_metan_class_forest <- ggplot(data= TG_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: TG_NoOutlier_metan_class_ybreaks, labels = TG_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in hepatic triglyceride (%)") + scale_x_continuous(limits=c(-125, 150), breaks=seq(-75, 50, 25), expand=c(0,0)) + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-150, xmax=-75, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=TG_NoOutlier_metan_class_sumtab, aes(x=25, label=text), size = 3.5, hjust=0) + geom_text(data=TG_NoOutlier_metan_class_sumtab, aes(x=-115, label=k), size = 3.5, hjust=0) + geom_text(data=TG_NoOutlier_metan_class_sumtab, aes(x=-90, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-125, 75)) pdf(file="TG_NoOutlier_metan_class_forest.pdf",width=10,height=8) TG_NoOutlier_metan_class_forest dev.off() ####### ## re-run using sub-grouping by individual drugs ## drop where <3 unique studies for any drug class TG_drugIndiv_counts <- TG_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) TG_drugIndiv_sum_counts <- TG_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) TG_drugIndiv_less3 = subset(TG_drugIndiv_sum_counts, n <3) str(TG_drugIndiv_less3) TG_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(TG_drugIndiv_less3$Indiv_drug_class_3) TG_drugIndiv_droplist <- TG_drugIndiv_less3$Indiv_drug_class_3 TG_data_min3drug <- TG_data %>% filter(!Indiv_drug_class_3 %in% TG_drugIndiv_droplist) ## run metan TG_metan_drugIndiv <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") TG_metan_drugIndiv <- update(TG_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug") ## make summary table of results TG_metan_drugIndiv_tab <- data.frame(TG_metan_drugIndiv[["TE.random.w"]]) TG_metan_drugIndiv_tab$drug <- TG_metan_drugIndiv[["bylevs"]] TG_metan_drugIndiv_tab$SE <- TG_metan_drugIndiv[["seTE.random.w"]] TG_metan_drugIndiv_tab$lower <- TG_metan_drugIndiv[["lower.random.w"]] TG_metan_drugIndiv_tab$upper <- TG_metan_drugIndiv[["upper.random.w"]] TG_metan_drugIndiv_tab$Pz <- TG_metan_drugIndiv[["pval.random.w"]] TG_metan_drugIndiv_tab$weight <- TG_metan_drugIndiv[["w.random.w"]] TG_metan_drugIndiv_tab$k <- TG_metan_drugIndiv[["k.w"]] TG_metan_drugIndiv_tab$controls <- TG_metan_drugIndiv[["n.c.w"]] TG_metan_drugIndiv_tab$experimental <- TG_metan_drugIndiv[["n.e.w"]] TG_metan_drugIndiv_tab$Q <- TG_metan_drugIndiv[["Q.w"]] TG_metan_drugIndiv_tab$Pq <- TG_metan_drugIndiv[["pval.Q.w"]] TG_metan_drugIndiv_tab$tau <- TG_metan_drugIndiv[["tau.w"]] TG_metan_drugIndiv_tab$I2 <- TG_metan_drugIndiv[["I2.w"]] TG_metan_drugIndiv_tab <- TG_metan_drugIndiv_tab %>% rename(MD = TG_metan_drugIndiv...TE.random.w...) TG_metan_drugIndiv_tab <- TG_metan_drugIndiv_tab[order(-TG_metan_drugIndiv_tab$MD),] TG_metan_drugIndiv_tab <- TG_metan_drugIndiv_tab %>% mutate(row_number= 1:n()) TG_metan_drugIndiv_tab$subgroup <- "Subgroup" TG_drugIndiv_sum_counts <- TG_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3) TG_metan_drugIndiv_tab <- merge(TG_drugIndiv_sum_counts, TG_metan_drugIndiv_tab, by="drug") TG_metan_drugIndiv_tab_overall <- data.frame(TG_metan_drugIndiv[["TE.random"]]) TG_metan_drugIndiv_tab_overall$drug <- "Overall" TG_metan_drugIndiv_tab_overall$SE <- TG_metan_drugIndiv[["seTE.random"]] TG_metan_drugIndiv_tab_overall$lower <- TG_metan_drugIndiv[["lower.random"]] TG_metan_drugIndiv_tab_overall$upper <- TG_metan_drugIndiv[["upper.random"]] TG_metan_drugIndiv_tab_overall$Pz <- TG_metan_drugIndiv[["pval.random"]] TG_metan_drugIndiv_tab_overall$weight <- (max(TG_metan_drugIndiv_tab$weight)*2) TG_metan_drugIndiv_tab_overall$k <- TG_metan_drugIndiv[["k"]] TG_metan_drugIndiv_tab_overall$controls <- sum(TG_metan_drugIndiv_tab$controls) TG_metan_drugIndiv_tab_overall$experimental <- sum(TG_metan_drugIndiv_tab$experimental) TG_metan_drugIndiv_tab_overall$Q <- TG_metan_drugIndiv[["Q"]] TG_metan_drugIndiv_tab_overall$Pq <- TG_metan_drugIndiv[["pval.Q"]] TG_metan_drugIndiv_tab_overall$tau <- TG_metan_drugIndiv[["tau"]] TG_metan_drugIndiv_tab_overall$I2 <- TG_metan_drugIndiv[["I2"]] TG_metan_drugIndiv_tab_overall <- TG_metan_drugIndiv_tab_overall %>% rename(MD = TG_metan_drugIndiv...TE.random...) TG_metan_drugIndiv_tab_overall$row_number <- ((nrow(TG_metan_drugIndiv_tab))+1) TG_metan_drugIndiv_tab_overall$subgroup <- "Overall" TG_metan_drugIndiv_tab_overall$n <- sum(TG_metan_drugIndiv_tab$n) TG_metan_drugIndiv_sumtab <- rbind(TG_metan_drugIndiv_tab, TG_metan_drugIndiv_tab_overall) TG_metan_drugIndiv_sumtab$weight <- as.numeric(TG_metan_drugIndiv_sumtab$weight) TG_metan_drugIndiv_sumtab$row_number <- as.numeric(TG_metan_drugIndiv_sumtab$row_number) TG_metan_drugIndiv_sumtab$subgroup <- as.factor(TG_metan_drugIndiv_sumtab$subgroup) TG_metan_drugIndiv_sumtab$total = TG_metan_drugIndiv_sumtab$controls + TG_metan_drugIndiv_sumtab$experimental TG_metan_drugIndiv_sumtab$text <- paste(format(round(TG_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(TG_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) TG_metan_drugIndiv_sumtab$text <- paste(TG_metan_drugIndiv_sumtab$text, format(round(TG_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) TG_metan_drugIndiv_sumtab$text <- paste(TG_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL) TG_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(TG_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) TG_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(TG_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) TG_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(TG_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) TG_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(TG_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) TG_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(TG_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(TG_metan_drugIndiv_sumtab,file="TG_metan_drugIndiv_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(TG_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(TG_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(TG_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10") overall_min = TG_metan_drugIndiv_tab_overall$lower overall_max = TG_metan_drugIndiv_tab_overall$upper TG_metan_drugIndiv_ybreaks <- nrow(TG_metan_drugIndiv_sumtab) TG_metan_drugIndiv_sumtab <- TG_metan_drugIndiv_sumtab[order(TG_metan_drugIndiv_sumtab$row_number),] TG_metan_drugIndiv_forest <- ggplot(data= TG_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: TG_metan_drugIndiv_ybreaks, labels = TG_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in hepatic triglyceride (%)") + scale_x_continuous(limits=c(-125, 150), breaks=seq(-75, 50, 25), expand=c(0,0)) + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-150, xmax=-75, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=TG_metan_drugIndiv_sumtab, aes(x=25, label=text), size = 3.5, hjust=0) + geom_text(data=TG_metan_drugIndiv_sumtab, aes(x=-115, label=k), size = 3.5, hjust=0) + geom_text(data=TG_metan_drugIndiv_sumtab, aes(x=-90, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-125, 75)) pdf(file="TG_metan_drugIndiv_forest.pdf",width=10,height=8) TG_metan_drugIndiv_forest dev.off() ######## ## calculate sample size needed for average results ## mean comm_SD = TG_commSD_mean ## meta-analysis mean difference = TG_metan_class_main[["TE.random"]] ## calculate Cohen's d TG_cohen_d = TG_metan_class_main[["TE.random"]] / TG_commSD_mean TG_samplesize_av <- pwr.t.test(d = TG_cohen_d, power = 0.80, sig.level = 0.05) ## n = 16 - number in **each** group ## find number of studies with n > TG_samplesize_av TG_data$total = TG_data$TG_Int_size + TG_data$TG_Pla_size TG_pwrcount <- TG_data %>% group_by(total, Paper) %>% summarise(n = n()) TG_pwrcount_adequate = subset(TG_pwrcount, total >= 2*(TG_samplesize_av[["n"]])) write.table(TG_pwrcount_adequate,file="TG_pwrcount_adequate.csv",sep=",") ######## ## run meta-regressions on full TG dataset for continuous traits TG_metan_full <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## create metan with >3 for each level of categorical variables ## Background TG_bg_counts <- TG_data %>% group_by(Background_simple, Study) %>% summarise(n = n()) TG_bg_counts_sum <- TG_bg_counts %>% group_by(Background_simple) %>% summarise(n = n()) TG_bg_less3 = subset(TG_bg_counts_sum, n <3) TG_bg_less3$Background_simple <- droplevels(TG_bg_less3$Background_simple) TG_bg_droplist <- TG_bg_less3$Background_simple TG_data_min3bg <- TG_data %>% filter(!Background_simple %in% TG_bg_droplist) TG_metan_bg <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## Model TG_model_counts <- TG_data %>% group_by(Model_simple, Study) %>% summarise(n = n()) TG_model_counts_sum <- TG_model_counts %>% group_by(Model_simple) %>% summarise(n = n()) TG_model_less3 = subset(TG_model_counts_sum, n <3) TG_model_less3$Model_simple <- droplevels(TG_model_less3$Model_simple) TG_model_droplist <- TG_model_less3$Model_simple TG_data_min3model <- TG_data %>% filter(!Model_simple %in% TG_model_droplist) TG_metan_model <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## run metaregs TG_reg_Qual_score <- metareg(TG_metan_full, Qual_score) TG_reg_Qual_score_tab <- data.frame(TG_reg_Qual_score[["beta"]]) TG_reg_Qual_score_tab$se <- TG_reg_Qual_score[["se"]] TG_reg_Qual_score_tab$pval <- TG_reg_Qual_score[["pval"]] TG_reg_Qual_score_tab$beta <- TG_reg_Qual_score[["beta"]] TG_reg_Qual_score_tab <- TG_reg_Qual_score_tab[-c(1),] TG_reg_Qual_score_tab <- TG_reg_Qual_score_tab[-c(1)] TG_reg_Qual_score_tab$k <- TG_reg_Qual_score[["k"]] TG_reg_Qual_score_tab$r2 <- TG_reg_Qual_score[["R2"]] TG_reg_Qual_score_tab$var <- "Qual_score" TG_reg_Protocol <- metareg(TG_metan_full, Protocol) TG_reg_Protocol_tab <- data.frame(TG_reg_Protocol[["beta"]]) TG_reg_Protocol_tab$se <- TG_reg_Protocol[["se"]] TG_reg_Protocol_tab$pval <- TG_reg_Protocol[["pval"]] TG_reg_Protocol_tab$beta <- TG_reg_Protocol[["beta"]] TG_reg_Protocol_tab <- TG_reg_Protocol_tab[-c(1),] TG_reg_Protocol_tab <- TG_reg_Protocol_tab[-c(1)] TG_reg_Protocol_tab$k <- TG_reg_Protocol[["k"]] TG_reg_Protocol_tab$r2 <- TG_reg_Protocol[["R2"]] TG_reg_Protocol_tab$var <- "Protocol" TG_reg_Randomisation <- metareg(TG_metan_full, Randomisation) TG_reg_Randomisation_tab <- data.frame(TG_reg_Randomisation[["beta"]]) TG_reg_Randomisation_tab$se <- TG_reg_Randomisation[["se"]] TG_reg_Randomisation_tab$pval <- TG_reg_Randomisation[["pval"]] TG_reg_Randomisation_tab$beta <- TG_reg_Randomisation[["beta"]] TG_reg_Randomisation_tab <- TG_reg_Randomisation_tab[-c(1),] TG_reg_Randomisation_tab <- TG_reg_Randomisation_tab[-c(1)] TG_reg_Randomisation_tab$k <- TG_reg_Randomisation[["k"]] TG_reg_Randomisation_tab$r2 <- TG_reg_Randomisation[["R2"]] TG_reg_Randomisation_tab$var <- "Randomisation" TG_reg_Blinding <- metareg(TG_metan_full, Blinding) TG_reg_Blinding_tab <- data.frame(TG_reg_Blinding[["beta"]]) TG_reg_Blinding_tab$se <- TG_reg_Blinding[["se"]] TG_reg_Blinding_tab$pval <- TG_reg_Blinding[["pval"]] TG_reg_Blinding_tab$beta <- TG_reg_Blinding[["beta"]] TG_reg_Blinding_tab <- TG_reg_Blinding_tab[-c(1),] TG_reg_Blinding_tab <- TG_reg_Blinding_tab[-c(1)] TG_reg_Blinding_tab$k <- TG_reg_Blinding[["k"]] TG_reg_Blinding_tab$r2 <- TG_reg_Blinding[["R2"]] TG_reg_Blinding_tab$var <- "Blinding" TG_reg_Power_calculation <- metareg(TG_metan_full, Power_calculation) TG_reg_Power_calculation_tab <- data.frame(TG_reg_Power_calculation[["beta"]]) TG_reg_Power_calculation_tab$se <- TG_reg_Power_calculation[["se"]] TG_reg_Power_calculation_tab$pval <- TG_reg_Power_calculation[["pval"]] TG_reg_Power_calculation_tab$beta <- TG_reg_Power_calculation[["beta"]] TG_reg_Power_calculation_tab <- TG_reg_Power_calculation_tab[-c(1),] TG_reg_Power_calculation_tab <- TG_reg_Power_calculation_tab[-c(1)] TG_reg_Power_calculation_tab$k <- TG_reg_Power_calculation[["k"]] TG_reg_Power_calculation_tab$r2 <- TG_reg_Power_calculation[["R2"]] TG_reg_Power_calculation_tab$var <- "Power_calculation" TG_reg_Chol_per <- metareg(TG_metan_full, Chol_per) TG_reg_Chol_per_tab <- data.frame(TG_reg_Chol_per[["beta"]]) TG_reg_Chol_per_tab$se <- TG_reg_Chol_per[["se"]] TG_reg_Chol_per_tab$pval <- TG_reg_Chol_per[["pval"]] TG_reg_Chol_per_tab$beta <- TG_reg_Chol_per[["beta"]] TG_reg_Chol_per_tab <- TG_reg_Chol_per_tab[-c(1),] TG_reg_Chol_per_tab <- TG_reg_Chol_per_tab[-c(1)] TG_reg_Chol_per_tab$k <- TG_reg_Chol_per[["k"]] TG_reg_Chol_per_tab$r2 <- TG_reg_Chol_per[["R2"]] TG_reg_Chol_per_tab$var <- "Chol_per" TG_reg_log_FructGluc_per <- metareg(TG_metan_full, log_FructGluc_per) TG_reg_log_FructGluc_per_tab <- data.frame(TG_reg_log_FructGluc_per[["beta"]]) TG_reg_log_FructGluc_per_tab$se <- TG_reg_log_FructGluc_per[["se"]] TG_reg_log_FructGluc_per_tab$pval <- TG_reg_log_FructGluc_per[["pval"]] TG_reg_log_FructGluc_per_tab$beta <- TG_reg_log_FructGluc_per[["beta"]] TG_reg_log_FructGluc_per_tab <- TG_reg_log_FructGluc_per_tab[-c(1),] TG_reg_log_FructGluc_per_tab <- TG_reg_log_FructGluc_per_tab[-c(1)] TG_reg_log_FructGluc_per_tab$k <- TG_reg_log_FructGluc_per[["k"]] TG_reg_log_FructGluc_per_tab$r2 <- TG_reg_log_FructGluc_per[["R2"]] TG_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per" TG_reg_log_Sucr_kcal <- metareg(TG_metan_full, log_Sucr_kcal) TG_reg_log_Sucr_kcal_tab <- data.frame(TG_reg_log_Sucr_kcal[["beta"]]) TG_reg_log_Sucr_kcal_tab$se <- TG_reg_log_Sucr_kcal[["se"]] TG_reg_log_Sucr_kcal_tab$pval <- TG_reg_log_Sucr_kcal[["pval"]] TG_reg_log_Sucr_kcal_tab$beta <- TG_reg_log_Sucr_kcal[["beta"]] TG_reg_log_Sucr_kcal_tab <- TG_reg_log_Sucr_kcal_tab[-c(1),] TG_reg_log_Sucr_kcal_tab <- TG_reg_log_Sucr_kcal_tab[-c(1)] TG_reg_log_Sucr_kcal_tab$k <- TG_reg_log_Sucr_kcal[["k"]] TG_reg_log_Sucr_kcal_tab$r2 <- TG_reg_log_Sucr_kcal[["R2"]] TG_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal" TG_reg_log_Fat_kcal <- metareg(TG_metan_full, log_Fat_kcal) TG_reg_log_Fat_kcal_tab <- data.frame(TG_reg_log_Fat_kcal[["beta"]]) TG_reg_log_Fat_kcal_tab$se <- TG_reg_log_Fat_kcal[["se"]] TG_reg_log_Fat_kcal_tab$pval <- TG_reg_log_Fat_kcal[["pval"]] TG_reg_log_Fat_kcal_tab$beta <- TG_reg_log_Fat_kcal[["beta"]] TG_reg_log_Fat_kcal_tab <- TG_reg_log_Fat_kcal_tab[-c(1),] TG_reg_log_Fat_kcal_tab <- TG_reg_log_Fat_kcal_tab[-c(1)] TG_reg_log_Fat_kcal_tab$k <- TG_reg_log_Fat_kcal[["k"]] TG_reg_log_Fat_kcal_tab$r2 <- TG_reg_log_Fat_kcal[["R2"]] TG_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal" TG_reg_log_Age_start <- metareg(TG_metan_full, log_Age_start) TG_reg_log_Age_start_tab <- data.frame(TG_reg_log_Age_start[["beta"]]) TG_reg_log_Age_start_tab$se <- TG_reg_log_Age_start[["se"]] TG_reg_log_Age_start_tab$pval <- TG_reg_log_Age_start[["pval"]] TG_reg_log_Age_start_tab$beta <- TG_reg_log_Age_start[["beta"]] TG_reg_log_Age_start_tab <- TG_reg_log_Age_start_tab[-c(1),] TG_reg_log_Age_start_tab <- TG_reg_log_Age_start_tab[-c(1)] TG_reg_log_Age_start_tab$k <- TG_reg_log_Age_start[["k"]] TG_reg_log_Age_start_tab$r2 <- TG_reg_log_Age_start[["R2"]] TG_reg_log_Age_start_tab$var <- "log_Age_start" TG_reg_log_Duration <- metareg(TG_metan_full, log_Duration) TG_reg_log_Duration_tab <- data.frame(TG_reg_log_Duration[["beta"]]) TG_reg_log_Duration_tab$se <- TG_reg_log_Duration[["se"]] TG_reg_log_Duration_tab$pval <- TG_reg_log_Duration[["pval"]] TG_reg_log_Duration_tab$beta <- TG_reg_log_Duration[["beta"]] TG_reg_log_Duration_tab <- TG_reg_log_Duration_tab[-c(1),] TG_reg_log_Duration_tab <- TG_reg_log_Duration_tab[-c(1)] TG_reg_log_Duration_tab$k <- TG_reg_log_Duration[["k"]] TG_reg_log_Duration_tab$r2 <- TG_reg_log_Duration[["R2"]] TG_reg_log_Duration_tab$var <- "log_Duration" TG_reg_log_Age_end <- metareg(TG_metan_full, log_Age_end) TG_reg_log_Age_end_tab <- data.frame(TG_reg_log_Age_end[["beta"]]) TG_reg_log_Age_end_tab$se <- TG_reg_log_Age_end[["se"]] TG_reg_log_Age_end_tab$pval <- TG_reg_log_Age_end[["pval"]] TG_reg_log_Age_end_tab$beta <- TG_reg_log_Age_end[["beta"]] TG_reg_log_Age_end_tab <- TG_reg_log_Age_end_tab[-c(1),] TG_reg_log_Age_end_tab <- TG_reg_log_Age_end_tab[-c(1)] TG_reg_log_Age_end_tab$k <- TG_reg_log_Age_end[["k"]] TG_reg_log_Age_end_tab$r2 <- TG_reg_log_Age_end[["R2"]] TG_reg_log_Age_end_tab$var <- "log_Age_end" TG_reg_log_Wt_change <- metareg(TG_metan_full, log_Wt_change) TG_reg_log_Wt_change_tab <- data.frame(TG_reg_log_Wt_change[["beta"]]) TG_reg_log_Wt_change_tab$se <- TG_reg_log_Wt_change[["se"]] TG_reg_log_Wt_change_tab$pval <- TG_reg_log_Wt_change[["pval"]] TG_reg_log_Wt_change_tab$beta <- TG_reg_log_Wt_change[["beta"]] TG_reg_log_Wt_change_tab <- TG_reg_log_Wt_change_tab[-c(1),] TG_reg_log_Wt_change_tab <- TG_reg_log_Wt_change_tab[-c(1)] TG_reg_log_Wt_change_tab$k <- TG_reg_log_Wt_change[["k"]] TG_reg_log_Wt_change_tab$r2 <- TG_reg_log_Wt_change[["R2"]] TG_reg_log_Wt_change_tab$var <- "log_Wt_change" TG_reg_log_Gluc_change <- metareg(TG_metan_full, log_Gluc_change) TG_reg_log_Gluc_change_tab <- data.frame(TG_reg_log_Gluc_change[["beta"]]) TG_reg_log_Gluc_change_tab$se <- TG_reg_log_Gluc_change[["se"]] TG_reg_log_Gluc_change_tab$pval <- TG_reg_log_Gluc_change[["pval"]] TG_reg_log_Gluc_change_tab$beta <- TG_reg_log_Gluc_change[["beta"]] TG_reg_log_Gluc_change_tab <- TG_reg_log_Gluc_change_tab[-c(1),] TG_reg_log_Gluc_change_tab <- TG_reg_log_Gluc_change_tab[-c(1)] TG_reg_log_Gluc_change_tab$k <- TG_reg_log_Gluc_change[["k"]] TG_reg_log_Gluc_change_tab$r2 <- TG_reg_log_Gluc_change[["R2"]] TG_reg_log_Gluc_change_tab$var <- "log_Gluc_change" TG_reg_log_Insul_change <- metareg(TG_metan_full, log_Insul_change) TG_reg_log_Insul_change_tab <- data.frame(TG_reg_log_Insul_change[["beta"]]) TG_reg_log_Insul_change_tab$se <- TG_reg_log_Insul_change[["se"]] TG_reg_log_Insul_change_tab$pval <- TG_reg_log_Insul_change[["pval"]] TG_reg_log_Insul_change_tab$beta <- TG_reg_log_Insul_change[["beta"]] TG_reg_log_Insul_change_tab <- TG_reg_log_Insul_change_tab[-c(1),] TG_reg_log_Insul_change_tab <- TG_reg_log_Insul_change_tab[-c(1)] TG_reg_log_Insul_change_tab$k <- TG_reg_log_Insul_change[["k"]] TG_reg_log_Insul_change_tab$r2 <- TG_reg_log_Insul_change[["R2"]] TG_reg_log_Insul_change_tab$var <- "log_Insul_change" TG_reg_Sex <- metareg(TG_metan_full, Sex) TG_reg_Sex_tab <- data.frame(TG_reg_Sex[["beta"]]) TG_reg_Sex_tab$se <- TG_reg_Sex[["se"]] TG_reg_Sex_tab$pval <- TG_reg_Sex[["pval"]] TG_reg_Sex_tab$beta <- TG_reg_Sex[["beta"]] TG_reg_Sex_tab <- TG_reg_Sex_tab[-c(1),] TG_reg_Sex_tab <- TG_reg_Sex_tab[-c(1)] TG_reg_Sex_tab$k <- TG_reg_Sex[["k"]] TG_reg_Sex_tab$r2 <- NA TG_reg_Sex_tab$var <- rownames(TG_reg_Sex_tab) TG_reg_Sex_overall_tab <- data.frame(TG_reg_Sex[["QMp"]]) TG_reg_Sex_overall_tab$se <- NA TG_reg_Sex_overall_tab$pval <- TG_reg_Sex[["QMp"]] TG_reg_Sex_overall_tab$beta <- NA TG_reg_Sex_overall_tab <- TG_reg_Sex_overall_tab[-c(1)] TG_reg_Sex_overall_tab$k <- TG_reg_Sex[["k"]] TG_reg_Sex_overall_tab$r2 <- TG_reg_Sex[["R2"]] TG_reg_Sex_overall_tab$var <- "Sex_overall" TG_reg_Sex_tab <- rbind(TG_reg_Sex_tab, TG_reg_Sex_overall_tab) TG_reg_Drug_dose <- metareg(TG_metan_drugIndiv, Drug_dose) TG_reg_Drug_dose_tab <- data.frame(TG_reg_Drug_dose[["beta"]]) TG_reg_Drug_dose_tab$se <- TG_reg_Drug_dose[["se"]] TG_reg_Drug_dose_tab$pval <- TG_reg_Drug_dose[["pval"]] TG_reg_Drug_dose_tab$beta <- TG_reg_Drug_dose[["beta"]] TG_reg_Drug_dose_tab <- TG_reg_Drug_dose_tab[-c(1),] TG_reg_Drug_dose_tab <- TG_reg_Drug_dose_tab[-c(1)] TG_reg_Drug_dose_tab$k <- TG_reg_Drug_dose[["k"]] TG_reg_Drug_dose_tab$r2 <- TG_reg_Drug_dose[["R2"]] TG_reg_Drug_dose_tab$var <- "Drug_dose" TG_reg_Indiv_drug_class_3 <- metareg(TG_metan_drugIndiv, Indiv_drug_class_3) TG_reg_Indiv_drug_class_3_tab <- data.frame(TG_reg_Indiv_drug_class_3[["beta"]]) TG_reg_Indiv_drug_class_3_tab$se <- TG_reg_Indiv_drug_class_3[["se"]] TG_reg_Indiv_drug_class_3_tab$pval <- TG_reg_Indiv_drug_class_3[["pval"]] TG_reg_Indiv_drug_class_3_tab$beta <- TG_reg_Indiv_drug_class_3[["beta"]] TG_reg_Indiv_drug_class_3_tab <- TG_reg_Indiv_drug_class_3_tab[-c(1),] TG_reg_Indiv_drug_class_3_tab <- TG_reg_Indiv_drug_class_3_tab[-c(1)] TG_reg_Indiv_drug_class_3_tab$k <- TG_reg_Indiv_drug_class_3[["k"]] TG_reg_Indiv_drug_class_3_tab$r2 <- NA TG_reg_Indiv_drug_class_3_tab$var <- rownames(TG_reg_Indiv_drug_class_3_tab) TG_reg_Indiv_drug_class_3_overall_tab <- data.frame(TG_reg_Indiv_drug_class_3[["QMp"]]) TG_reg_Indiv_drug_class_3_overall_tab$se <- NA TG_reg_Indiv_drug_class_3_overall_tab$pval <- TG_reg_Indiv_drug_class_3[["QMp"]] TG_reg_Indiv_drug_class_3_overall_tab$beta <- NA TG_reg_Indiv_drug_class_3_overall_tab <- TG_reg_Indiv_drug_class_3_overall_tab[-c(1)] TG_reg_Indiv_drug_class_3_overall_tab$k <- TG_reg_Indiv_drug_class_3[["k"]] TG_reg_Indiv_drug_class_3_overall_tab$r2 <- TG_reg_Indiv_drug_class_3[["R2"]] TG_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall" TG_reg_Indiv_drug_class_3_tab <- rbind(TG_reg_Indiv_drug_class_3_tab, TG_reg_Indiv_drug_class_3_overall_tab) TG_reg_Model_simple <- metareg(TG_metan_model, Model_simple) TG_reg_Model_simple_tab <- data.frame(TG_reg_Model_simple[["beta"]]) TG_reg_Model_simple_tab$se <- TG_reg_Model_simple[["se"]] TG_reg_Model_simple_tab$pval <- TG_reg_Model_simple[["pval"]] TG_reg_Model_simple_tab$beta <- TG_reg_Model_simple[["beta"]] TG_reg_Model_simple_tab <- TG_reg_Model_simple_tab[-c(1),] TG_reg_Model_simple_tab <- TG_reg_Model_simple_tab[-c(1)] TG_reg_Model_simple_tab$k <- TG_reg_Model_simple[["k"]] TG_reg_Model_simple_tab$r2 <- NA TG_reg_Model_simple_tab$var <- rownames(TG_reg_Model_simple_tab) TG_reg_Model_simple_overall_tab <- data.frame(TG_reg_Model_simple[["QMp"]]) TG_reg_Model_simple_overall_tab$se <- NA TG_reg_Model_simple_overall_tab$pval <- TG_reg_Model_simple[["QMp"]] TG_reg_Model_simple_overall_tab$beta <- NA TG_reg_Model_simple_overall_tab <- TG_reg_Model_simple_overall_tab[-c(1)] TG_reg_Model_simple_overall_tab$k <- TG_reg_Model_simple[["k"]] TG_reg_Model_simple_overall_tab$r2 <- TG_reg_Model_simple[["R2"]] TG_reg_Model_simple_overall_tab$var <- "Model_simple_overall" TG_reg_Model_simple_tab <- rbind(TG_reg_Model_simple_tab, TG_reg_Model_simple_overall_tab) TG_reg_Background_simple <- metareg(TG_metan_bg, Background_simple) TG_reg_Background_simple_tab <- data.frame(TG_reg_Background_simple[["beta"]]) TG_reg_Background_simple_tab$se <- TG_reg_Background_simple[["se"]] TG_reg_Background_simple_tab$pval <- TG_reg_Background_simple[["pval"]] TG_reg_Background_simple_tab$beta <- TG_reg_Background_simple[["beta"]] TG_reg_Background_simple_tab <- TG_reg_Background_simple_tab[-c(1),] TG_reg_Background_simple_tab <- TG_reg_Background_simple_tab[-c(1)] TG_reg_Background_simple_tab$k <- TG_reg_Background_simple[["k"]] TG_reg_Background_simple_tab$r2 <- NA TG_reg_Background_simple_tab$var <- rownames(TG_reg_Background_simple_tab) TG_reg_Background_simple_overall_tab <- data.frame(TG_reg_Background_simple[["QMp"]]) TG_reg_Background_simple_overall_tab$se <- NA TG_reg_Background_simple_overall_tab$pval <- TG_reg_Background_simple[["QMp"]] TG_reg_Background_simple_overall_tab$beta <- NA TG_reg_Background_simple_overall_tab <- TG_reg_Background_simple_overall_tab[-c(1)] TG_reg_Background_simple_overall_tab$k <- TG_reg_Background_simple[["k"]] TG_reg_Background_simple_overall_tab$r2 <- TG_reg_Background_simple[["R2"]] TG_reg_Background_simple_overall_tab$var <- "Background_simple_overall" TG_reg_Background_simple_tab <- rbind(TG_reg_Background_simple_tab, TG_reg_Background_simple_overall_tab) TG_metareg_sumtab <- rbind(TG_reg_Qual_score_tab, TG_reg_Protocol_tab, TG_reg_Randomisation_tab, TG_reg_Blinding_tab, TG_reg_Power_calculation_tab, TG_reg_Chol_per_tab, TG_reg_log_FructGluc_per_tab, TG_reg_log_Sucr_kcal_tab, TG_reg_log_Fat_kcal_tab, TG_reg_log_Age_start_tab, TG_reg_log_Duration_tab, TG_reg_log_Age_end_tab, TG_reg_log_Wt_change_tab, TG_reg_log_Gluc_change_tab, TG_reg_log_Insul_change_tab, TG_reg_Sex_tab, TG_reg_Drug_dose_tab, TG_reg_Indiv_drug_class_3_tab, TG_reg_Model_simple_tab, TG_reg_Background_simple_tab) TG_metareg_sumtab$text <- paste(format(round(TG_metareg_sumtab$beta, 1), nsmall = 1), format(round(TG_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) TG_metareg_sumtab$text <- paste(TG_metareg_sumtab$text, "", sep = ")", collapse = NULL) TG_metareg_sumtab$pval_2dig <- paste((signif(TG_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) TG_metareg_sumtab$r2_2dig <- paste(format(round(TG_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(TG_metareg_sumtab,file="TG_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="TG_bubble_Wt_change.pdf",width=6,height=6) TG_bubble_Wt_change <- bubble(TG_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in hepatic triglyceride content (%)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-100,200), xlim = c(-.8, .6)) TG_bubble_Wt_change dev.off() pdf(file="TG_bubble_Insul_change.pdf",width=6,height=6) TG_bubble_Insul_change <- bubble(TG_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in hepatic triglyceride content (%)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-100,200), xlim = c(-3, 2)) TG_bubble_Insul_change dev.off() #### #### ## re-examine for evidence of drug dose effect only where there are at least 10 studies for each drug TG_multimetareg_data_drugcounts10 <- TG_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) TG_multimetareg_data_drugcounts10_sum <- TG_multimetareg_data_drugcounts10 %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) TG_multimetareg_data_drugcounts_less10 = subset(TG_multimetareg_data_drugcounts10_sum, n <10) TG_multimetareg_data_drugcounts_less10$Indiv_drug_class_3 <- droplevels(TG_multimetareg_data_drugcounts_less10$Indiv_drug_class_3) TG_multimetareg_data_drug10_droplist <- TG_multimetareg_data_drugcounts_less10$Indiv_drug_class_3 TG_multimetareg_data_drug10 <- TG_data %>% filter(!Indiv_drug_class_3 %in% TG_multimetareg_data_drug10_droplist) # Run metan TG_metan_drug10 <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_multimetareg_data_drug10, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") TG_reg_Drug10_dose <- metareg(TG_metan_drug10, Drug_dose) TG_reg_Drug10_dose ########## ##### run multiple meta-regression ## create data subset including >3 for each model >3 for background, and >3 for each drug ## start with dataset containing >3 for each background = TG_data_min3bg TG_data_min3bg_modelcounts <- TG_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) TG_data_min3bg_modelcounts_sum <- TG_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) TG_data_min3bg_model_less3 = subset(TG_data_min3bg_modelcounts_sum, n <3) TG_data_min3bg_model_less3$Model_simple <- droplevels(TG_data_min3bg_model_less3$Model_simple) TG_data_min3bg_model_droplist <- TG_data_min3bg_model_less3$Model_simple TG_multimetareg_data <- TG_data_min3bg %>% filter(!Model_simple %in% TG_data_min3bg_model_droplist) ## run multiple meta-regression ## create data subset including >3 for each model and >3 for background ## start with dataset containing >3 for each background = TG_data_min3bg TG_data_min3bg_modelcounts <- TG_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) TG_data_min3bg_modelcounts_sum <- TG_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) TG_data_min3bg_model_less3 = subset(TG_data_min3bg_modelcounts_sum, n <3) TG_data_min3bg_model_less3$Model_simple <- droplevels(TG_data_min3bg_model_less3$Model_simple) TG_data_min3bg_model_droplist <- TG_data_min3bg_model_less3$Model_simple TG_multimetareg_data <- TG_data_min3bg %>% filter(!Model_simple %in% TG_data_min3bg_model_droplist) ## Run metan TG_multimetareg_metan <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) TG_multmetareg_tab <- data.frame(TG_multimetareg_metan$studlab) TG_multmetareg_tab$yi <- TG_multimetareg_metan[["TE"]] TG_multmetareg_tab$sei <- TG_multimetareg_metan[["seTE"]] TG_multmetareg_tab$Model_simple <- TG_multimetareg_metan[["data"]][["Model_simple"]] TG_multmetareg_tab$Background_simple <- TG_multimetareg_metan[["data"]][["Background_simple"]] TG_multmetareg_tab$Sex <- TG_multimetareg_metan[["data"]][["Sex"]] TG_multmetareg_tab$Indiv_drug_class_3 <- TG_multimetareg_metan[["data"]][["Indiv_drug_class_3"]] TG_multmetareg_tab$log_Fat_kcal <- TG_multimetareg_metan[["data"]][["log_Fat_kcal"]] TG_multmetareg_tab$log_Age_start <- TG_multimetareg_metan[["data"]][["log_Age_start"]] TG_multmetareg_tab$log_Age_end <- TG_multimetareg_metan[["data"]][["log_Age_end"]] TG_multmetareg_tab$log_Duration <- TG_multimetareg_metan[["data"]][["log_Duration"]] TG_multmetareg_tab$log_Wt_change <- TG_multimetareg_metan[["data"]][["log_Wt_change"]] TG_multmetareg_tab$log_Gluc_change <- TG_multimetareg_metan[["data"]][["log_Gluc_change"]] TG_multmetareg_tab$log_Insul_change <- TG_multimetareg_metan[["data"]][["log_Insul_change"]] TG_multmetareg_tab$Qual_score <- TG_multimetareg_metan[["data"]][["Qual_score"]] TG_multmetareg_tab_cor <- cor(TG_multmetareg_tab[,8:15], use="complete.obs") TG_multmetareg_tab_cor library(PerformanceAnalytics) chart.Correlation(TG_multmetareg_tab[,8:15], use="complete.obs") ## high correlation between age_start, age,_end, and duration, therefore drop age_end from model library(dmetar) TG_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = TG_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Insul_change", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE) TG_multi_intereference1 sink("TG_multi_intereference1.txt") print(TG_multi_intereference1) sink() ## run multi-metareg for top model TG_multmetareg_1 <- rma(yi = yi, sei = sei, data = TG_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + log_Age_start + log_Wt_change + Background_simple + log_Gluc_change + log_Insul_change + Model_simple + log_Duration + Qual_score, test="knha") TG_multmetareg_1_tab <- coef(summary(TG_multmetareg_1)) TG_multmetareg_1_tab$rownames <- rownames(TG_multmetareg_1_tab) TG_multmetareg_1_tab$mod1_text <- paste(format(round(TG_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(TG_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) TG_multmetareg_1_tab$mod1_text <- paste(TG_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL) TG_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(TG_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL) ## check robustness using permutation test TG_multmetareg_1_permut <- permutest(TG_multmetareg_1) sink("TG_multmetareg_1_permut.txt") print(TG_multmetareg_1_permut) sink() #### ## repeat but also include drug in model, therefore drop where <3 unique studies for any drug class TG_multimetareg_data_drugcounts <- TG_multimetareg_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) TG_multimetareg_data_drugcounts_sum <- TG_multimetareg_data_drugcounts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) TG_multimetareg_data_drugcounts_less3 = subset(TG_multimetareg_data_drugcounts_sum, n <3) TG_multimetareg_data_drugcounts_less3$Indiv_drug_class_3 <- droplevels(TG_multimetareg_data_drugcounts_less3$Indiv_drug_class_3) TG_multimetareg_data_drug_droplist <- TG_multimetareg_data_drugcounts_less3$Indiv_drug_class_3 TG_multimetareg_data_2 <- TG_multimetareg_data %>% filter(!Indiv_drug_class_3 %in% TG_multimetareg_data_drug_droplist) ## Run metan TG_multimetareg_metan_2 <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_multimetareg_data_2, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) TG_multmetareg_tab_2 <- data.frame(TG_multimetareg_metan_2$studlab) TG_multmetareg_tab_2$yi <- TG_multimetareg_metan_2[["TE"]] TG_multmetareg_tab_2$sei <- TG_multimetareg_metan_2[["seTE"]] TG_multmetareg_tab_2$Model_simple <- TG_multimetareg_metan_2[["data"]][["Model_simple"]] TG_multmetareg_tab_2$Background_simple <- TG_multimetareg_metan_2[["data"]][["Background_simple"]] TG_multmetareg_tab_2$Sex <- TG_multimetareg_metan_2[["data"]][["Sex"]] TG_multmetareg_tab_2$Indiv_drug_class_3 <- TG_multimetareg_metan_2[["data"]][["Indiv_drug_class_3"]] TG_multmetareg_tab_2$log_Fat_kcal <- TG_multimetareg_metan_2[["data"]][["log_Fat_kcal"]] TG_multmetareg_tab_2$log_Age_start <- TG_multimetareg_metan_2[["data"]][["log_Age_start"]] TG_multmetareg_tab_2$log_Age_end <- TG_multimetareg_metan_2[["data"]][["log_Age_end"]] TG_multmetareg_tab_2$log_Duration <- TG_multimetareg_metan_2[["data"]][["log_Duration"]] TG_multmetareg_tab_2$log_Wt_change <- TG_multimetareg_metan_2[["data"]][["log_Wt_change"]] TG_multmetareg_tab_2$log_Gluc_change <- TG_multimetareg_metan_2[["data"]][["log_Gluc_change"]] TG_multmetareg_tab_2$log_Insul_change <- TG_multimetareg_metan_2[["data"]][["log_Insul_change"]] TG_multmetareg_tab_2$Qual_score <- TG_multimetareg_metan_2[["data"]][["Qual_score"]] TG_multmetareg_tab_2_cor <- cor(TG_multmetareg_tab_2[,8:15], use="complete.obs") TG_multmetareg_tab_2_cor library(PerformanceAnalytics) chart.Correlation(TG_multmetareg_tab_2[,8:15], use="complete.obs") ## high correlation between age_start, age,_end, and duration, therefore drop age_end from model library(dmetar) TG_multi_intereference2 <- multimodel.inference(TE = "yi", seTE = "sei", data = TG_multmetareg_tab_2, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Insul_change", "log_Gluc_change", "Model_simple", "Background_simple", "Indiv_drug_class_3"), interaction = FALSE) TG_multi_intereference2 ## run multi-metareg for top model TG_multmetareg_2 <- rma(yi = yi, sei = sei, data = TG_multmetareg_tab_2, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + log_Gluc_change + log_Insul_change + Indiv_drug_class_3 + Background_simple + log_Age_start, test="knha") TG_multmetareg_2_tab <- coef(summary(TG_multmetareg_2)) TG_multmetareg_2_tab$rownames <- rownames(TG_multmetareg_2_tab) TG_multmetareg_2_tab$mod2_text <- paste(format(round(TG_multmetareg_2_tab$estimate, 1), nsmall = 1), format(round(TG_multmetareg_2_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) TG_multmetareg_2_tab$mod2_text <- paste(TG_multmetareg_2_tab$mod2_text, "", sep = ")", collapse = NULL) TG_multmetareg_2_tab$mod2_pval_2dig <- paste((signif(TG_multmetareg_2_tab$pval, digits=2)), "", sep = "", collapse = NULL) TG_multmetareg_sumtab <- merge(TG_multmetareg_1_tab, TG_multmetareg_2_tab, by="rownames", all=TRUE) write.table(TG_multmetareg_sumtab, "TG_multmetareg_sumtab.csv", sep=",") ## check robustness using permutation test TG_multmetareg_2_permut <- permutest(TG_multmetareg_2) sink("TG_multmetareg_2_permut.txt") print(TG_multmetareg_2_permut) sink() ## See if meta-regression results change after removal of weight-loss diets library(tidyverse) TG_NoWtLoss_data <- TG_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') TG_NoWtLoss_metan_full <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") TG_NoWtLoss_reg_log_Wt_change <- metareg(TG_NoWtLoss_metan_full, log_Wt_change) TG_NoWtLoss_reg_log_Wt_change_tab <- data.frame(TG_NoWtLoss_reg_log_Wt_change[["beta"]]) TG_NoWtLoss_reg_log_Wt_change_tab$se <- TG_NoWtLoss_reg_log_Wt_change[["se"]] TG_NoWtLoss_reg_log_Wt_change_tab$pval <- TG_NoWtLoss_reg_log_Wt_change[["pval"]] TG_NoWtLoss_reg_log_Wt_change_tab$beta <- TG_NoWtLoss_reg_log_Wt_change[["beta"]] TG_NoWtLoss_reg_log_Wt_change_tab <- TG_NoWtLoss_reg_log_Wt_change_tab[-c(1),] TG_NoWtLoss_reg_log_Wt_change_tab <- TG_NoWtLoss_reg_log_Wt_change_tab[-c(1)] TG_NoWtLoss_reg_log_Wt_change_tab$k <- TG_NoWtLoss_reg_log_Wt_change[["k"]] TG_NoWtLoss_reg_log_Wt_change_tab$r2 <- TG_NoWtLoss_reg_log_Wt_change[["R2"]] TG_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change" TG_NoWtLoss_reg_log_Gluc_change <- metareg(TG_NoWtLoss_metan_full, log_Gluc_change) TG_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(TG_NoWtLoss_reg_log_Gluc_change[["beta"]]) TG_NoWtLoss_reg_log_Gluc_change_tab$se <- TG_NoWtLoss_reg_log_Gluc_change[["se"]] TG_NoWtLoss_reg_log_Gluc_change_tab$pval <- TG_NoWtLoss_reg_log_Gluc_change[["pval"]] TG_NoWtLoss_reg_log_Gluc_change_tab$beta <- TG_NoWtLoss_reg_log_Gluc_change[["beta"]] TG_NoWtLoss_reg_log_Gluc_change_tab <- TG_NoWtLoss_reg_log_Gluc_change_tab[-c(1),] TG_NoWtLoss_reg_log_Gluc_change_tab <- TG_NoWtLoss_reg_log_Gluc_change_tab[-c(1)] TG_NoWtLoss_reg_log_Gluc_change_tab$k <- TG_NoWtLoss_reg_log_Gluc_change[["k"]] TG_NoWtLoss_reg_log_Gluc_change_tab$r2 <- TG_NoWtLoss_reg_log_Gluc_change[["R2"]] TG_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change" TG_NoWtLoss_reg_log_Insul_change <- metareg(TG_NoWtLoss_metan_full, log_Insul_change) TG_NoWtLoss_reg_log_Insul_change_tab <- data.frame(TG_NoWtLoss_reg_log_Insul_change[["beta"]]) TG_NoWtLoss_reg_log_Insul_change_tab$se <- TG_NoWtLoss_reg_log_Insul_change[["se"]] TG_NoWtLoss_reg_log_Insul_change_tab$pval <- TG_NoWtLoss_reg_log_Insul_change[["pval"]] TG_NoWtLoss_reg_log_Insul_change_tab$beta <- TG_NoWtLoss_reg_log_Insul_change[["beta"]] TG_NoWtLoss_reg_log_Insul_change_tab <- TG_NoWtLoss_reg_log_Insul_change_tab[-c(1),] TG_NoWtLoss_reg_log_Insul_change_tab <- TG_NoWtLoss_reg_log_Insul_change_tab[-c(1)] TG_NoWtLoss_reg_log_Insul_change_tab$k <- TG_NoWtLoss_reg_log_Insul_change[["k"]] TG_NoWtLoss_reg_log_Insul_change_tab$r2 <- TG_NoWtLoss_reg_log_Insul_change[["R2"]] TG_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change" TG_NoWtLoss_metareg_sumtab <- rbind(TG_NoWtLoss_reg_log_Wt_change_tab, TG_NoWtLoss_reg_log_Gluc_change_tab, TG_NoWtLoss_reg_log_Insul_change_tab) TG_NoWtLoss_metareg_sumtab$text <- paste(format(round(TG_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(TG_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) TG_NoWtLoss_metareg_sumtab$text <- paste(TG_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL) TG_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(TG_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) TG_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(TG_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(TG_NoWtLoss_metareg_sumtab,file="TG_NoWtLoss_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="TG_NoWtLoss_bubble_weight_change.pdf",width=6,height=6) TG_NoWtLoss_bubble_weight_change <- bubble(TG_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-150, 200), xlim = c(-1,1)) TG_NoWtLoss_bubble_weight_change dev.off() pdf(file="TG_NoWtLoss_bubble_gluc_change.pdf",width=6,height=6) TG_NoWtLoss_bubble_gluc_change <- bubble(TG_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) TG_NoWtLoss_bubble_gluc_change dev.off() pdf(file="TG_NoWtLoss_bubble_Insul_change.pdf",width=6,height=6) TG_NoWtLoss_bubble_Insul_change <- bubble(TG_NoWtLoss_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-3,3), ylim = c(-150, 200)) TG_NoWtLoss_bubble_Insul_change dev.off() ######## ## Assess impact of each drug on weight, glucose, and inuslin after removal of weightloss models full_NoWtLoss_data <- full_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') DrugClass_Wt <- full_NoWtLoss_data %>% group_by(Drug_Class_new_1_all) %>% summarise(mean_Wt_change = mean(Wt_change, na.rm = TRUE), sd_Wt_change = sd(Wt_change, na.rm = TRUE), n = n()) %>% mutate(se_Wt_change = sd_Wt_change / sqrt(n), lower_ci_Wt_change = mean_Wt_change - qt(1 - (0.05 / 2), n - 1) * se_Wt_change, upper_ci_Wt_change = mean_Wt_change + qt(1 - (0.05 / 2), n - 1) * se_Wt_change) DrugClass_Wt$mean_Wt_change <- format(round(DrugClass_Wt$mean_Wt_change, 2), nsmall = 2) DrugClass_Wt$sd_Wt_change <- format(round(DrugClass_Wt$sd_Wt_change, 2), nsmall = 2) DrugClass_Wt$lower_ci_Wt_change <- format(round(DrugClass_Wt$lower_ci_Wt_change, 2), nsmall = 2) DrugClass_Wt$upper_ci_Wt_change <- format(round(DrugClass_Wt$upper_ci_Wt_change, 2), nsmall = 2) DrugClass_Gluc <- full_NoWtLoss_data %>% group_by(Drug_Class_new_1_all) %>% summarise(mean_Gluc_change = mean(Gluc_change, na.rm = TRUE), sd_Gluc_change = sd(Gluc_change, na.rm = TRUE), n = n()) %>% mutate(se_Gluc_change = sd_Gluc_change / sqrt(n), lower_ci_Gluc_change = mean_Gluc_change - qt(1 - (0.05 / 2), n - 1) * se_Gluc_change, upper_ci_Gluc_change = mean_Gluc_change + qt(1 - (0.05 / 2), n - 1) * se_Gluc_change) DrugClass_Gluc$mean_Gluc_change <- format(round(DrugClass_Gluc$mean_Gluc_change, 2), nsmall = 2) DrugClass_Gluc$sd_Gluc_change <- format(round(DrugClass_Gluc$sd_Gluc_change, 2), nsmall = 2) DrugClass_Gluc$lower_ci_Gluc_change <- format(round(DrugClass_Gluc$lower_ci_Gluc_change, 2), nsmall = 2) DrugClass_Gluc$upper_ci_Gluc_change <- format(round(DrugClass_Gluc$upper_ci_Gluc_change, 2), nsmall = 2) DrugClass_Insul <- full_NoWtLoss_data %>% group_by(Drug_Class_new_1_all) %>% summarise(mean_Insul_change = mean(Insul_change, na.rm = TRUE), sd_Insul_change = sd(Insul_change, na.rm = TRUE), n = n()) %>% mutate(se_Insul_change = sd_Insul_change / sqrt(n), lower_ci_Insul_change = mean_Insul_change - qt(1 - (0.05 / 2), n - 1) * se_Insul_change, upper_ci_Insul_change = mean_Insul_change + qt(1 - (0.05 / 2), n - 1) * se_Insul_change) DrugClass_Insul$mean_Insul_change <- format(round(DrugClass_Insul$mean_Insul_change, 2), nsmall = 2) DrugClass_Insul$sd_Insul_change <- format(round(DrugClass_Insul$sd_Insul_change, 2), nsmall = 2) DrugClass_Insul$lower_ci_Insul_change <- format(round(DrugClass_Insul$lower_ci_Insul_change, 2), nsmall = 2) DrugClass_Insul$upper_ci_Insul_change <- format(round(DrugClass_Insul$upper_ci_Insul_change, 2), nsmall = 2) DrugClass_summary <- cbind(DrugClass_Wt, DrugClass_Gluc, DrugClass_Insul) DrugClass_summary_tab = subset(DrugClass_summary, select = c("Drug_Class_new_1_all", "mean_Wt_change", "sd_Wt_change", "lower_ci_Wt_change", "upper_ci_Wt_change", "mean_Gluc_change", "sd_Gluc_change", "lower_ci_Gluc_change", "upper_ci_Gluc_change", "mean_Insul_change", "sd_Insul_change", "lower_ci_Insul_change", "upper_ci_Insul_change", "n")) write.table(DrugClass_summary_tab, file="DrugClass_summary_tab.csv", sep=",") ### make figures for each library(ggplot2) library(forcats) DrugClass_Wt_data <- full_NoWtLoss_data %>% drop_na(Wt_change) ## drop where <3 data points for each drug class for _Wt DrugClass_Wt_counts <- DrugClass_Wt_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) DrugClass_Wt_counts_sum <- DrugClass_Wt_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) DrugClass_Wt_less3 = subset(DrugClass_Wt_counts_sum, n <3) DrugClass_Wt_less3$Drug_Class_new_1_all <- droplevels(DrugClass_Wt_less3$Drug_Class_new_1_all) DrugClass_Wt_droplist <- DrugClass_Wt_less3$Drug_Class_new_1_all DrugClass_Wt_min2class <- DrugClass_Wt_data %>% filter(!Drug_Class_new_1_all %in% DrugClass_Wt_droplist) DrugClass_Wt_min2class$Drug_Class_new_1_all <- droplevels(DrugClass_Wt_min2class$Drug_Class_new_1_all) DrugClass_Wt_box <- ggplot(data=DrugClass_Wt_min2class, aes(x=fct_reorder(Drug_Class_new_1_all, Wt_change, .fun = median, .desc =TRUE), y=Wt_change, colour=Drug_Class_new_1_all)) + geom_hline(yintercept=1, linetype="dashed", color = "black", size=0.2, alpha=0.4) + geom_boxplot(outlier.shape=NA, aes(fill=Drug_Class_new_1_all), alpha=0.2, show.legend=FALSE) + ylab("Interventional/placebo \n weight difference") + theme_classic() + theme(axis.title.y=element_text(size=12, angle=0, vjust=0.5), axis.text.x=element_text(size=10, angle = 45, hjust = 1)) + xlab("") + geom_point(aes(colour=Drug_Class_new_1_all), size=0.6, alpha=0.3, show.legend=FALSE) + scale_y_continuous(limits=c(0.4, 1.2), breaks=seq(0.4, 1.2, .2)) + coord_cartesian(ylim = c(.6, 1.2)) DrugClass_Wt_box pdf(file="DrugClass_Wt_box.pdf",width=12,height=6) DrugClass_Wt_box dev.off() ## for glucose DrugClass_Gluc_data <- full_NoWtLoss_data %>% drop_na(Gluc_change) ## drop where <3 data points for each drug class for _Gluc DrugClass_Gluc_counts <- DrugClass_Gluc_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) DrugClass_Gluc_counts_sum <- DrugClass_Gluc_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) DrugClass_Gluc_less3 = subset(DrugClass_Gluc_counts_sum, n <3) DrugClass_Gluc_less3$Drug_Class_new_1_all <- droplevels(DrugClass_Gluc_less3$Drug_Class_new_1_all) DrugClass_Gluc_droplist <- DrugClass_Gluc_less3$Drug_Class_new_1_all DrugClass_Gluc_min2class <- DrugClass_Gluc_data %>% filter(!Drug_Class_new_1_all %in% DrugClass_Gluc_droplist) DrugClass_Gluc_min2class$Drug_Class_new_1_all <- droplevels(DrugClass_Gluc_min2class$Drug_Class_new_1_all) DrugClass_Gluc_box <- ggplot(data=DrugClass_Gluc_min2class, aes(x=fct_reorder(Drug_Class_new_1_all, Gluc_change, .fun = median, .desc =TRUE), y=Gluc_change, colour=Drug_Class_new_1_all)) + geom_hline(yintercept=1, linetype="dashed", color = "black", size=0.2, alpha=0.4) + geom_boxplot(outlier.shape=NA, aes(fill=Drug_Class_new_1_all), alpha=0.2, show.legend=FALSE) + ylab("Interventional/placebo \n fasting glucose difference") + theme_classic() + theme(axis.title.y=element_text(size=12, angle=0, vjust=0.5), axis.text.x=element_text(size=10, angle = 45, hjust = 1)) + xlab("") + geom_point(aes(colour=Drug_Class_new_1_all), size=0.6, alpha=0.3, show.legend=FALSE) + scale_y_continuous(limits=c(0.2, 1.6), breaks=seq(0.2, 1.6, .2)) + coord_cartesian(ylim = c(.3, 1.4)) pdf(file="DrugClass_Gluc_box.pdf",width=12,height=6) DrugClass_Gluc_box dev.off() ## for insulin DrugClass_Insul_data <- full_NoWtLoss_data %>% drop_na(Insul_change) ## drop where <3 data points for each drug class for _Insul DrugClass_Insul_counts <- DrugClass_Insul_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) DrugClass_Insul_counts_sum <- DrugClass_Insul_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) DrugClass_Insul_less3 = subset(DrugClass_Insul_counts_sum, n <3) DrugClass_Insul_less3$Drug_Class_new_1_all <- droplevels(DrugClass_Insul_less3$Drug_Class_new_1_all) DrugClass_Insul_droplist <- DrugClass_Insul_less3$Drug_Class_new_1_all DrugClass_Insul_min2class <- DrugClass_Insul_data %>% filter(!Drug_Class_new_1_all %in% DrugClass_Insul_droplist) DrugClass_Insul_min2class$Drug_Class_new_1_all <- droplevels(DrugClass_Insul_min2class$Drug_Class_new_1_all) DrugClass_Insul_box <- ggplot(data=DrugClass_Insul_min2class, aes(x=fct_reorder(Drug_Class_new_1_all, Insul_change, .fun = median, .desc =TRUE), y=Insul_change, colour=Drug_Class_new_1_all)) + geom_hline(yintercept=1, linetype="dashed", color = "black", size=0.2, alpha=0.4) + geom_boxplot(outlier.shape=NA, aes(fill=Drug_Class_new_1_all), alpha=0.2, show.legend=FALSE) + ylab("Interventional/placebo \n fasting insulin difference") + theme_classic() + theme(axis.title.y=element_text(size=12, angle=0, vjust=0.5), axis.text.x=element_text(size=10, angle = 45, hjust = 1)) + xlab("") + geom_point(aes(colour=Drug_Class_new_1_all), size=0.6, alpha=0.3, show.legend=FALSE) + scale_y_continuous(limits=c(0.2, 4), breaks=seq(0.2, 4, .2)) + coord_cartesian(ylim = c(.2, 1.5)) pdf(file="DrugClass_Insul_box.pdf",width=12,height=6) DrugClass_Insul_box dev.off() ########## #### Steatosis analysis ## following on from TG analysis setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/Stea_out") ######## ## Analysis for histological steatosis grade (Stea) ######## ## Power analysis library(pwr) ## calculate common SD full_data$Stea_Int_SD2 <- full_data$Stea_Int_SD*full_data$Stea_Int_SD full_data$Stea_Pla_SD2 <- full_data$Stea_Pla_SD*full_data$Stea_Pla_SD full_data$Stea_comm_SD <- sqrt(((full_data$Stea_Int_SD2+full_data$Stea_Pla_SD2)/2)) full_data$Stea_m_diff <- full_data$Stea_Pla_Mean-full_data$Stea_Int_Mean full_data$Stea_eff_size <- full_data$Stea_m_diff/full_data$Stea_comm_SD library(tidyr) Stea_data <- full_data Stea_data <- Stea_data %>% drop_na(Stea_eff_size) Stea_data$power <- pwr.t2n.test(n1 = Stea_data$Stea_Int_size, n2 = Stea_data$Stea_Pla_size, d = Stea_data$Stea_eff_size)$power write.table(Stea_data$power,file="Stea_data_power.csv",sep=",") hist(Stea_data$power) Stea_dens_power <- density(Stea_data$power) pdf(file="Stea_kernel_power_v1.pdf") plot(Stea_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)") polygon(Stea_dens_power, col="red", border="blue") dev.off() ## load packages for metan library(dmetar) library(meta) library(metafor) library(readxl) max.print = 100000 ## drop where <3 unique studies for any drug class Stea_drugsclass_counts <- Stea_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Stea_class_counts <- Stea_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Stea_class_less3 = subset(Stea_class_counts, n <3) str(Stea_class_less3) Stea_class_less3$Drug_Class_new_1_all <- droplevels(Stea_class_less3$Drug_Class_new_1_all) Stea_class_droplist <- Stea_class_less3$Drug_Class_new_1_all Stea_data_min3class <- Stea_data %>% filter(!Drug_Class_new_1_all %in% Stea_class_droplist) ## run metan Stea_metan_class_main <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Stea_metan_class <- update(Stea_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results Stea_metan_class_tab <- data.frame(Stea_metan_class[["TE.random.w"]]) Stea_metan_class_tab$drug <- Stea_metan_class[["bylevs"]] Stea_metan_class_tab$SE <- Stea_metan_class[["seTE.random.w"]] Stea_metan_class_tab$lower <- Stea_metan_class[["lower.random.w"]] Stea_metan_class_tab$upper <- Stea_metan_class[["upper.random.w"]] Stea_metan_class_tab$Pz <- Stea_metan_class[["pval.random.w"]] Stea_metan_class_tab$weight <- Stea_metan_class[["w.random.w"]] Stea_metan_class_tab$k <- Stea_metan_class[["k.w"]] Stea_metan_class_tab$controls <- Stea_metan_class[["n.c.w"]] Stea_metan_class_tab$experimental <- Stea_metan_class[["n.e.w"]] Stea_metan_class_tab$Q <- Stea_metan_class[["Q.w"]] Stea_metan_class_tab$Pq <- Stea_metan_class[["pval.Q.w"]] Stea_metan_class_tab$tau <- Stea_metan_class[["tau.w"]] Stea_metan_class_tab$I2 <- Stea_metan_class[["I2.w"]] Stea_metan_class_tab <- Stea_metan_class_tab %>% rename(MD = Stea_metan_class...TE.random.w...) Stea_metan_class_tab <- Stea_metan_class_tab[order(-Stea_metan_class_tab$MD),] Stea_metan_class_tab$row_number <- 1:nrow(Stea_metan_class_tab) Stea_metan_class_tab$subgroup <- "Subgroup" Stea_class_counts <- Stea_class_counts %>% rename(drug = Drug_Class_new_1_all) Stea_metan_class_tab <- merge(Stea_class_counts, Stea_metan_class_tab, by="drug") Stea_metan_class_tab_overall <- data.frame(Stea_metan_class[["TE.random"]]) Stea_metan_class_tab_overall$drug <- "Overall" Stea_metan_class_tab_overall$SE <- Stea_metan_class[["seTE.random"]] Stea_metan_class_tab_overall$lower <- Stea_metan_class[["lower.random"]] Stea_metan_class_tab_overall$upper <- Stea_metan_class[["upper.random"]] Stea_metan_class_tab_overall$Pz <- Stea_metan_class[["pval.random"]] Stea_metan_class_tab_overall$weight <- (max(Stea_metan_class_tab$weight)*2) Stea_metan_class_tab_overall$k <- Stea_metan_class[["k"]] Stea_metan_class_tab_overall$controls <- sum(Stea_metan_class_tab$controls) Stea_metan_class_tab_overall$experimental <- sum(Stea_metan_class_tab$experimental) Stea_metan_class_tab_overall$Q <- Stea_metan_class[["Q"]] Stea_metan_class_tab_overall$Pq <- Stea_metan_class[["pval.Q"]] Stea_metan_class_tab_overall$tau <- Stea_metan_class[["tau"]] Stea_metan_class_tab_overall$I2 <- Stea_metan_class[["I2"]] Stea_metan_class_tab_overall <- Stea_metan_class_tab_overall %>% rename(MD = Stea_metan_class...TE.random...) Stea_metan_class_tab_overall$row_number <- ((nrow(Stea_metan_class_tab))+1) Stea_metan_class_tab_overall$subgroup <- "Overall" Stea_metan_class_tab_overall$n <- sum(Stea_metan_class_tab$n) Stea_metan_class_sumtab <- rbind(Stea_metan_class_tab, Stea_metan_class_tab_overall) Stea_metan_class_sumtab$weight <- as.numeric(Stea_metan_class_sumtab$weight) Stea_metan_class_sumtab$row_number <- as.numeric(Stea_metan_class_sumtab$row_number) Stea_metan_class_sumtab$subgroup <- as.factor(Stea_metan_class_sumtab$subgroup) Stea_metan_class_sumtab$total = Stea_metan_class_sumtab$controls + Stea_metan_class_sumtab$experimental Stea_metan_class_sumtab$text <- paste(format(round(Stea_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Stea_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_metan_class_sumtab$text <- paste(Stea_metan_class_sumtab$text, format(round(Stea_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Stea_metan_class_sumtab$text <- paste(Stea_metan_class_sumtab$text, "", sep = ")", collapse = NULL) Stea_metan_class_sumtab$SE_1dig <- paste(format(round(Stea_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Stea_metan_class_sumtab$Pz_1dig <- paste((signif(Stea_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Stea_metan_class_sumtab$tI2_2dig <- paste(format(round(Stea_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Stea_metan_class_sumtab$tau_1dig <- paste(format(round(Stea_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Stea_metan_class_sumtab$Pq_1dig <- paste((signif(Stea_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Stea_metan_class_sumtab,file="Stea_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(Stea_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Stea_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Stea_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = Stea_metan_class_tab_overall$lower overall_max = Stea_metan_class_tab_overall$upper Stea_metan_class_ybreaks <- nrow(Stea_metan_class_sumtab) Stea_metan_class_sumtab <- Stea_metan_class_sumtab[order(Stea_metan_class_sumtab$row_number),] Stea_metan_class_forest <- ggplot(data= Stea_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Stea_metan_class_ybreaks, labels = Stea_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in steatosis grade") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.75, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-3.7, 3.5), breaks=seq(-3, 1, 0.5), expand=c(0,0)) + geom_text(data=Stea_metan_class_sumtab, aes(x=.8, label=text), size = 3.5, hjust=0) + geom_text(data=Stea_metan_class_sumtab, aes(x=-3.6, label=k), size = 3.5, hjust=0) + geom_text(data=Stea_metan_class_sumtab, aes(x=-3.25, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-4, 2)) pdf(file="Stea_metan_class_forest.pdf",width=9,height=6) Stea_metan_class_forest dev.off() ##################### ####### ## bias analysis Stea_class_eggers <- eggers.test(x = Stea_metan_class_main) Stea_class_eggers sink("Stea_class_eggers.txt") print(Stea_class_eggers) sink() Stea_class_trimfill <- trimfill(Stea_metan_class_main) Stea_class_trimfill sink("Stea_class_trimfill.txt") print(Stea_class_trimfill) sink() pdf(file="Stea_class_funnel.pdf") funnel(Stea_class_trimfill, xlab="Mean difference in hepatic Stea (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue")) dev.off() ## use Baujat plot to look for outliers pdf(file="Stea_class_baujat.pdf") Stea_class_baujat <- baujat(Stea_metan_class_main) Stea_class_baujat dev.off() ## look for outliers based on SD Stea_commSD_mean <- mean(Stea_data$Stea_comm_SD, na.rm=TRUE) Stea_commSD_SD <- sd(Stea_data$Stea_comm_SD, na.rm=TRUE) Stea_commSD_norm <- dnorm(Stea_data$Stea_comm_SD, mean = Stea_commSD_mean, sd = Stea_commSD_SD, log = FALSE) Stea_commSD_norm <- as.data.frame(Stea_commSD_norm) Stea_commSD_norm$Stea_comm_SD <- Stea_data$Stea_comm_SD Stea_commSD_norm$Paper <- Stea_data$Paper pdf(file = "Stea_commSD_norm.pdf") plot(Stea_commSD_norm$Stea_comm_SD, Stea_commSD_norm$Stea_commSD_norm) dev.off() ## exclude studies with Stea_comm_SD >1.5 or high contribution to heterogeneity on baujat plot Stea_NoOutlier_data = subset(Stea_data, Stea_comm_SD <1.5) Stea_NoOutlier_data <- Stea_NoOutlier_data %>% filter(Paper != "Afrin 2017" & Paper != "Kim 2012b" & Paper != "Goto 2018_4" & Paper != "Goto 2018_3" & Paper != "Miranda−Henrique 2014" & Paper != "Valdecantos 2017_2") ####### ## re-rerun after outliers excluded ## drop where <3 unique studies for any drug class Stea_NoOutlier_drugsclass_counts <- Stea_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Stea_NoOutlier_class_counts <- Stea_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Stea_NoOutlier_class_less3 = subset(Stea_NoOutlier_class_counts, n <3) str(Stea_NoOutlier_class_less3) Stea_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(Stea_NoOutlier_class_less3$Drug_Class_new_1_all) Stea_NoOutlier_class_droplist <- Stea_NoOutlier_class_less3$Drug_Class_new_1_all Stea_NoOutlier_data_min3class <- Stea_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% Stea_NoOutlier_class_droplist) ## run metan Stea_NoOutlier_metan_class_main <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Stea_NoOutlier_metan_class <- update(Stea_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results Stea_NoOutlier_metan_class_tab <- data.frame(Stea_NoOutlier_metan_class[["TE.random.w"]]) Stea_NoOutlier_metan_class_tab$drug <- Stea_NoOutlier_metan_class[["bylevs"]] Stea_NoOutlier_metan_class_tab$SE <- Stea_NoOutlier_metan_class[["seTE.random.w"]] Stea_NoOutlier_metan_class_tab$lower <- Stea_NoOutlier_metan_class[["lower.random.w"]] Stea_NoOutlier_metan_class_tab$upper <- Stea_NoOutlier_metan_class[["upper.random.w"]] Stea_NoOutlier_metan_class_tab$Pz <- Stea_NoOutlier_metan_class[["pval.random.w"]] Stea_NoOutlier_metan_class_tab$weight <- Stea_NoOutlier_metan_class[["w.random.w"]] Stea_NoOutlier_metan_class_tab$k <- Stea_NoOutlier_metan_class[["k.w"]] Stea_NoOutlier_metan_class_tab$controls <- Stea_NoOutlier_metan_class[["n.c.w"]] Stea_NoOutlier_metan_class_tab$experimental <- Stea_NoOutlier_metan_class[["n.e.w"]] Stea_NoOutlier_metan_class_tab$Q <- Stea_NoOutlier_metan_class[["Q.w"]] Stea_NoOutlier_metan_class_tab$Pq <- Stea_NoOutlier_metan_class[["pval.Q.w"]] Stea_NoOutlier_metan_class_tab$tau <- Stea_NoOutlier_metan_class[["tau.w"]] Stea_NoOutlier_metan_class_tab$I2 <- Stea_NoOutlier_metan_class[["I2.w"]] Stea_NoOutlier_metan_class_tab <- Stea_NoOutlier_metan_class_tab %>% rename(MD = Stea_NoOutlier_metan_class...TE.random.w...) Stea_NoOutlier_metan_class_tab <- Stea_NoOutlier_metan_class_tab[order(-Stea_NoOutlier_metan_class_tab$MD),] Stea_NoOutlier_metan_class_tab <- Stea_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n()) Stea_NoOutlier_metan_class_tab$subgroup <- "Subgroup" Stea_NoOutlier_class_counts <- Stea_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all) Stea_NoOutlier_metan_class_tab <- merge(Stea_NoOutlier_class_counts, Stea_NoOutlier_metan_class_tab, by="drug") Stea_NoOutlier_metan_class_tab_overall <- data.frame(Stea_NoOutlier_metan_class[["TE.random"]]) Stea_NoOutlier_metan_class_tab_overall$drug <- "Overall" Stea_NoOutlier_metan_class_tab_overall$SE <- Stea_NoOutlier_metan_class[["seTE.random"]] Stea_NoOutlier_metan_class_tab_overall$lower <- Stea_NoOutlier_metan_class[["lower.random"]] Stea_NoOutlier_metan_class_tab_overall$upper <- Stea_NoOutlier_metan_class[["upper.random"]] Stea_NoOutlier_metan_class_tab_overall$Pz <- Stea_NoOutlier_metan_class[["pval.random"]] Stea_NoOutlier_metan_class_tab_overall$weight <- (max(Stea_NoOutlier_metan_class_tab$weight)*2) Stea_NoOutlier_metan_class_tab_overall$k <- Stea_NoOutlier_metan_class[["k"]] Stea_NoOutlier_metan_class_tab_overall$controls <- sum(Stea_NoOutlier_metan_class_tab$controls) Stea_NoOutlier_metan_class_tab_overall$experimental <- sum(Stea_NoOutlier_metan_class_tab$experimental) Stea_NoOutlier_metan_class_tab_overall$Q <- Stea_NoOutlier_metan_class[["Q"]] Stea_NoOutlier_metan_class_tab_overall$Pq <- Stea_NoOutlier_metan_class[["pval.Q"]] Stea_NoOutlier_metan_class_tab_overall$tau <- Stea_NoOutlier_metan_class[["tau"]] Stea_NoOutlier_metan_class_tab_overall$I2 <- Stea_NoOutlier_metan_class[["I2"]] Stea_NoOutlier_metan_class_tab_overall <- Stea_NoOutlier_metan_class_tab_overall %>% rename(MD = Stea_NoOutlier_metan_class...TE.random...) Stea_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(Stea_NoOutlier_metan_class_tab))+1) Stea_NoOutlier_metan_class_tab_overall$subgroup <- "Overall" Stea_NoOutlier_metan_class_tab_overall$n <- sum(Stea_NoOutlier_metan_class_tab$n) Stea_NoOutlier_metan_class_sumtab <- rbind(Stea_NoOutlier_metan_class_tab, Stea_NoOutlier_metan_class_tab_overall) Stea_NoOutlier_metan_class_sumtab$weight <- as.numeric(Stea_NoOutlier_metan_class_sumtab$weight) Stea_NoOutlier_metan_class_sumtab$row_number <- as.numeric(Stea_NoOutlier_metan_class_sumtab$row_number) Stea_NoOutlier_metan_class_sumtab$subgroup <- as.factor(Stea_NoOutlier_metan_class_sumtab$subgroup) Stea_NoOutlier_metan_class_sumtab$total = Stea_NoOutlier_metan_class_sumtab$controls + Stea_NoOutlier_metan_class_sumtab$experimental Stea_NoOutlier_metan_class_sumtab$text <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Stea_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$text <- paste(Stea_NoOutlier_metan_class_sumtab$text, format(round(Stea_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$text <- paste(Stea_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(Stea_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Stea_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(Stea_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Stea_NoOutlier_metan_class_sumtab,file="Stea_NoOutlier_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(Stea_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Stea_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Stea_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = Stea_NoOutlier_metan_class_tab_overall$lower overall_max = Stea_NoOutlier_metan_class_tab_overall$upper Stea_NoOutlier_metan_class_ybreaks <- nrow(Stea_NoOutlier_metan_class_sumtab) Stea_NoOutlier_metan_class_sumtab <- Stea_NoOutlier_metan_class_sumtab[order(Stea_NoOutlier_metan_class_sumtab$row_number),] Stea_NoOutlier_metan_class_forest <- ggplot(data= Stea_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Stea_NoOutlier_metan_class_ybreaks, labels = Stea_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in steatosis grade") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.75, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-3.7, 3.5), breaks=seq(-3, 1, 0.5), expand=c(0,0)) + geom_text(data=Stea_NoOutlier_metan_class_sumtab, aes(x=.8, label=text), size = 3.5, hjust=0) + geom_text(data=Stea_NoOutlier_metan_class_sumtab, aes(x=-3.6, label=k), size = 3.5, hjust=0) + geom_text(data=Stea_NoOutlier_metan_class_sumtab, aes(x=-3.25, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-4, 2)) pdf(file="Stea_NoOutlier_metan_class_forest.pdf",width=9,height=6) Stea_NoOutlier_metan_class_forest dev.off() ####### ## re-run using sub-grouping by individual drugs ## drop where <3 unique studies for any drug class Stea_drugIndiv_counts <- Stea_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) Stea_drugIndiv_sum_counts <- Stea_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) Stea_drugIndiv_less3 = subset(Stea_drugIndiv_sum_counts, n <3) str(Stea_drugIndiv_less3) Stea_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(Stea_drugIndiv_less3$Indiv_drug_class_3) Stea_drugIndiv_droplist <- Stea_drugIndiv_less3$Indiv_drug_class_3 Stea_data_min3drug <- Stea_data %>% filter(!Indiv_drug_class_3 %in% Stea_drugIndiv_droplist) ## run metan Stea_metan_drugIndiv <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Stea_metan_drugIndiv <- update(Stea_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug") ## make summary table of results Stea_metan_drugIndiv_tab <- data.frame(Stea_metan_drugIndiv[["TE.random.w"]]) Stea_metan_drugIndiv_tab$drug <- Stea_metan_drugIndiv[["bylevs"]] Stea_metan_drugIndiv_tab$SE <- Stea_metan_drugIndiv[["seTE.random.w"]] Stea_metan_drugIndiv_tab$lower <- Stea_metan_drugIndiv[["lower.random.w"]] Stea_metan_drugIndiv_tab$upper <- Stea_metan_drugIndiv[["upper.random.w"]] Stea_metan_drugIndiv_tab$Pz <- Stea_metan_drugIndiv[["pval.random.w"]] Stea_metan_drugIndiv_tab$weight <- Stea_metan_drugIndiv[["w.random.w"]] Stea_metan_drugIndiv_tab$k <- Stea_metan_drugIndiv[["k.w"]] Stea_metan_drugIndiv_tab$controls <- Stea_metan_drugIndiv[["n.c.w"]] Stea_metan_drugIndiv_tab$experimental <- Stea_metan_drugIndiv[["n.e.w"]] Stea_metan_drugIndiv_tab$Q <- Stea_metan_drugIndiv[["Q.w"]] Stea_metan_drugIndiv_tab$Pq <- Stea_metan_drugIndiv[["pval.Q.w"]] Stea_metan_drugIndiv_tab$tau <- Stea_metan_drugIndiv[["tau.w"]] Stea_metan_drugIndiv_tab$I2 <- Stea_metan_drugIndiv[["I2.w"]] Stea_metan_drugIndiv_tab <- Stea_metan_drugIndiv_tab %>% rename(MD = Stea_metan_drugIndiv...TE.random.w...) Stea_metan_drugIndiv_tab <- Stea_metan_drugIndiv_tab[order(-Stea_metan_drugIndiv_tab$MD),] Stea_metan_drugIndiv_tab <- Stea_metan_drugIndiv_tab %>% mutate(row_number= 1:n()) Stea_metan_drugIndiv_tab$subgroup <- "Subgroup" Stea_drugIndiv_sum_counts <- Stea_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3) Stea_metan_drugIndiv_tab <- merge(Stea_drugIndiv_sum_counts, Stea_metan_drugIndiv_tab, by="drug") Stea_metan_drugIndiv_tab_overall <- data.frame(Stea_metan_drugIndiv[["TE.random"]]) Stea_metan_drugIndiv_tab_overall$drug <- "Overall" Stea_metan_drugIndiv_tab_overall$SE <- Stea_metan_drugIndiv[["seTE.random"]] Stea_metan_drugIndiv_tab_overall$lower <- Stea_metan_drugIndiv[["lower.random"]] Stea_metan_drugIndiv_tab_overall$upper <- Stea_metan_drugIndiv[["upper.random"]] Stea_metan_drugIndiv_tab_overall$Pz <- Stea_metan_drugIndiv[["pval.random"]] Stea_metan_drugIndiv_tab_overall$weight <- (max(Stea_metan_drugIndiv_tab$weight)*2) Stea_metan_drugIndiv_tab_overall$k <- Stea_metan_drugIndiv[["k"]] Stea_metan_drugIndiv_tab_overall$controls <- sum(Stea_metan_drugIndiv_tab$controls) Stea_metan_drugIndiv_tab_overall$experimental <- sum(Stea_metan_drugIndiv_tab$experimental) Stea_metan_drugIndiv_tab_overall$Q <- Stea_metan_drugIndiv[["Q"]] Stea_metan_drugIndiv_tab_overall$Pq <- Stea_metan_drugIndiv[["pval.Q"]] Stea_metan_drugIndiv_tab_overall$tau <- Stea_metan_drugIndiv[["tau"]] Stea_metan_drugIndiv_tab_overall$I2 <- Stea_metan_drugIndiv[["I2"]] Stea_metan_drugIndiv_tab_overall <- Stea_metan_drugIndiv_tab_overall %>% rename(MD = Stea_metan_drugIndiv...TE.random...) Stea_metan_drugIndiv_tab_overall$row_number <- ((nrow(Stea_metan_drugIndiv_tab))+1) Stea_metan_drugIndiv_tab_overall$subgroup <- "Overall" Stea_metan_drugIndiv_tab_overall$n <- sum(Stea_metan_drugIndiv_tab$n) Stea_metan_drugIndiv_sumtab <- rbind(Stea_metan_drugIndiv_tab, Stea_metan_drugIndiv_tab_overall) Stea_metan_drugIndiv_sumtab$weight <- as.numeric(Stea_metan_drugIndiv_sumtab$weight) Stea_metan_drugIndiv_sumtab$row_number <- as.numeric(Stea_metan_drugIndiv_sumtab$row_number) Stea_metan_drugIndiv_sumtab$subgroup <- as.factor(Stea_metan_drugIndiv_sumtab$subgroup) Stea_metan_drugIndiv_sumtab$total = Stea_metan_drugIndiv_sumtab$controls + Stea_metan_drugIndiv_sumtab$experimental Stea_metan_drugIndiv_sumtab$text <- paste(format(round(Stea_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(Stea_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_metan_drugIndiv_sumtab$text <- paste(Stea_metan_drugIndiv_sumtab$text, format(round(Stea_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Stea_metan_drugIndiv_sumtab$text <- paste(Stea_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL) Stea_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(Stea_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Stea_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(Stea_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Stea_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(Stea_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Stea_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(Stea_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Stea_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(Stea_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Stea_metan_drugIndiv_sumtab,file="Stea_metan_drugIndiv_sumtab.csv",sep=",") ## make forest plot label_bold <- ifelse(Stea_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Stea_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Stea_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10") overall_min = Stea_metan_drugIndiv_tab_overall$lower overall_max = Stea_metan_drugIndiv_tab_overall$upper Stea_metan_drugIndiv_ybreaks <- nrow(Stea_metan_drugIndiv_sumtab) Stea_metan_drugIndiv_sumtab <- Stea_metan_drugIndiv_sumtab[order(Stea_metan_drugIndiv_sumtab$row_number),] Stea_metan_drugIndiv_forest <- ggplot(data= Stea_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Stea_metan_drugIndiv_ybreaks, labels = Stea_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in steatosis grade") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.75, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-3.7, 3.5), breaks=seq(-3, 1, 0.5), expand=c(0,0)) + geom_text(data=Stea_metan_drugIndiv_sumtab, aes(x=.8, label=text), size = 3.5, hjust=0) + geom_text(data=Stea_metan_drugIndiv_sumtab, aes(x=-3.6, label=k), size = 3.5, hjust=0) + geom_text(data=Stea_metan_drugIndiv_sumtab, aes(x=-3.25, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-4, 2)) pdf(file="Stea_metan_drugIndiv_forest.pdf",width=9,height=6) Stea_metan_drugIndiv_forest dev.off() ######## ## calculate sample size needed for average results ## mean comm_SD = Stea_commSD_mean ## meta-analysis mean difference = Stea_metan_class_main[["TE.random"]] ## calculate Cohen's d Stea_cohen_d = Stea_metan_class_main[["TE.random"]] / Stea_commSD_mean Stea_samplesize_av <- pwr.t.test(d = Stea_cohen_d, power = 0.80, sig.level = 0.05) ## n = 16 - number in **each** group ## find number of studies with n > Stea_samplesize_av Stea_data$total = Stea_data$Stea_Int_size + Stea_data$Stea_Pla_size Stea_pwrcount <- Stea_data %>% group_by(total, Paper) %>% summarise(n = n()) Stea_pwrcount_adequate = subset(Stea_pwrcount, total >= 2*(Stea_samplesize_av[["n"]])) write.table(Stea_pwrcount_adequate,file="Stea_pwrcount_adequate.csv",sep=",") ######## ## run meta-regressions on full Stea dataset for continuous traits Stea_metan_full <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## create metan with >3 for each level of categorical variables ## Background Stea_bg_counts <- Stea_data %>% group_by(Background_simple, Study) %>% summarise(n = n()) Stea_bg_counts_sum <- Stea_bg_counts %>% group_by(Background_simple) %>% summarise(n = n()) Stea_bg_less3 = subset(Stea_bg_counts_sum, n <3) Stea_bg_less3$Background_simple <- droplevels(Stea_bg_less3$Background_simple) Stea_bg_droplist <- Stea_bg_less3$Background_simple Stea_data_min3bg <- Stea_data %>% filter(!Background_simple %in% Stea_bg_droplist) Stea_metan_bg <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## Model Stea_model_counts <- Stea_data %>% group_by(Model_simple, Study) %>% summarise(n = n()) Stea_model_counts_sum <- Stea_model_counts %>% group_by(Model_simple) %>% summarise(n = n()) Stea_model_less3 = subset(Stea_model_counts_sum, n <3) Stea_model_less3$Model_simple <- droplevels(Stea_model_less3$Model_simple) Stea_model_droplist <- Stea_model_less3$Model_simple Stea_data_min3model <- Stea_data %>% filter(!Model_simple %in% Stea_model_droplist) Stea_metan_model <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## run metaregs Stea_reg_Qual_score <- metareg(Stea_metan_full, Qual_score) Stea_reg_Qual_score_tab <- data.frame(Stea_reg_Qual_score[["beta"]]) Stea_reg_Qual_score_tab$se <- Stea_reg_Qual_score[["se"]] Stea_reg_Qual_score_tab$pval <- Stea_reg_Qual_score[["pval"]] Stea_reg_Qual_score_tab$beta <- Stea_reg_Qual_score[["beta"]] Stea_reg_Qual_score_tab <- Stea_reg_Qual_score_tab[-c(1),] Stea_reg_Qual_score_tab <- Stea_reg_Qual_score_tab[-c(1)] Stea_reg_Qual_score_tab$k <- Stea_reg_Qual_score[["k"]] Stea_reg_Qual_score_tab$r2 <- Stea_reg_Qual_score[["R2"]] Stea_reg_Qual_score_tab$var <- "Qual_score" Stea_reg_Protocol <- metareg(Stea_metan_full, Protocol) Stea_reg_Protocol_tab <- data.frame(Stea_reg_Protocol[["beta"]]) Stea_reg_Protocol_tab$se <- Stea_reg_Protocol[["se"]] Stea_reg_Protocol_tab$pval <- Stea_reg_Protocol[["pval"]] Stea_reg_Protocol_tab$beta <- Stea_reg_Protocol[["beta"]] Stea_reg_Protocol_tab <- Stea_reg_Protocol_tab[-c(1),] Stea_reg_Protocol_tab <- Stea_reg_Protocol_tab[-c(1)] Stea_reg_Protocol_tab$k <- Stea_reg_Protocol[["k"]] Stea_reg_Protocol_tab$r2 <- Stea_reg_Protocol[["R2"]] Stea_reg_Protocol_tab$var <- "Protocol" Stea_reg_Randomisation <- metareg(Stea_metan_full, Randomisation) Stea_reg_Randomisation_tab <- data.frame(Stea_reg_Randomisation[["beta"]]) Stea_reg_Randomisation_tab$se <- Stea_reg_Randomisation[["se"]] Stea_reg_Randomisation_tab$pval <- Stea_reg_Randomisation[["pval"]] Stea_reg_Randomisation_tab$beta <- Stea_reg_Randomisation[["beta"]] Stea_reg_Randomisation_tab <- Stea_reg_Randomisation_tab[-c(1),] Stea_reg_Randomisation_tab <- Stea_reg_Randomisation_tab[-c(1)] Stea_reg_Randomisation_tab$k <- Stea_reg_Randomisation[["k"]] Stea_reg_Randomisation_tab$r2 <- Stea_reg_Randomisation[["R2"]] Stea_reg_Randomisation_tab$var <- "Randomisation" Stea_reg_Blinding <- metareg(Stea_metan_full, Blinding) Stea_reg_Blinding_tab <- data.frame(Stea_reg_Blinding[["beta"]]) Stea_reg_Blinding_tab$se <- Stea_reg_Blinding[["se"]] Stea_reg_Blinding_tab$pval <- Stea_reg_Blinding[["pval"]] Stea_reg_Blinding_tab$beta <- Stea_reg_Blinding[["beta"]] Stea_reg_Blinding_tab <- Stea_reg_Blinding_tab[-c(1),] Stea_reg_Blinding_tab <- Stea_reg_Blinding_tab[-c(1)] Stea_reg_Blinding_tab$k <- Stea_reg_Blinding[["k"]] Stea_reg_Blinding_tab$r2 <- Stea_reg_Blinding[["R2"]] Stea_reg_Blinding_tab$var <- "Blinding" Stea_reg_Power_calculation <- metareg(Stea_metan_full, Power_calculation) Stea_reg_Power_calculation_tab <- data.frame(Stea_reg_Power_calculation[["beta"]]) Stea_reg_Power_calculation_tab$se <- Stea_reg_Power_calculation[["se"]] Stea_reg_Power_calculation_tab$pval <- Stea_reg_Power_calculation[["pval"]] Stea_reg_Power_calculation_tab$beta <- Stea_reg_Power_calculation[["beta"]] Stea_reg_Power_calculation_tab <- Stea_reg_Power_calculation_tab[-c(1),] Stea_reg_Power_calculation_tab <- Stea_reg_Power_calculation_tab[-c(1)] Stea_reg_Power_calculation_tab$k <- Stea_reg_Power_calculation[["k"]] Stea_reg_Power_calculation_tab$r2 <- Stea_reg_Power_calculation[["R2"]] Stea_reg_Power_calculation_tab$var <- "Power_calculation" Stea_reg_Chol_per <- metareg(Stea_metan_full, Chol_per) Stea_reg_Chol_per_tab <- data.frame(Stea_reg_Chol_per[["beta"]]) Stea_reg_Chol_per_tab$se <- Stea_reg_Chol_per[["se"]] Stea_reg_Chol_per_tab$pval <- Stea_reg_Chol_per[["pval"]] Stea_reg_Chol_per_tab$beta <- Stea_reg_Chol_per[["beta"]] Stea_reg_Chol_per_tab <- Stea_reg_Chol_per_tab[-c(1),] Stea_reg_Chol_per_tab <- Stea_reg_Chol_per_tab[-c(1)] Stea_reg_Chol_per_tab$k <- Stea_reg_Chol_per[["k"]] Stea_reg_Chol_per_tab$r2 <- Stea_reg_Chol_per[["R2"]] Stea_reg_Chol_per_tab$var <- "Chol_per" Stea_reg_log_FructGluc_per <- metareg(Stea_metan_full, log_FructGluc_per) Stea_reg_log_FructGluc_per_tab <- data.frame(Stea_reg_log_FructGluc_per[["beta"]]) Stea_reg_log_FructGluc_per_tab$se <- Stea_reg_log_FructGluc_per[["se"]] Stea_reg_log_FructGluc_per_tab$pval <- Stea_reg_log_FructGluc_per[["pval"]] Stea_reg_log_FructGluc_per_tab$beta <- Stea_reg_log_FructGluc_per[["beta"]] Stea_reg_log_FructGluc_per_tab <- Stea_reg_log_FructGluc_per_tab[-c(1),] Stea_reg_log_FructGluc_per_tab <- Stea_reg_log_FructGluc_per_tab[-c(1)] Stea_reg_log_FructGluc_per_tab$k <- Stea_reg_log_FructGluc_per[["k"]] Stea_reg_log_FructGluc_per_tab$r2 <- Stea_reg_log_FructGluc_per[["R2"]] Stea_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per" Stea_reg_log_Sucr_kcal <- metareg(Stea_metan_full, log_Sucr_kcal) Stea_reg_log_Sucr_kcal_tab <- data.frame(Stea_reg_log_Sucr_kcal[["beta"]]) Stea_reg_log_Sucr_kcal_tab$se <- Stea_reg_log_Sucr_kcal[["se"]] Stea_reg_log_Sucr_kcal_tab$pval <- Stea_reg_log_Sucr_kcal[["pval"]] Stea_reg_log_Sucr_kcal_tab$beta <- Stea_reg_log_Sucr_kcal[["beta"]] Stea_reg_log_Sucr_kcal_tab <- Stea_reg_log_Sucr_kcal_tab[-c(1),] Stea_reg_log_Sucr_kcal_tab <- Stea_reg_log_Sucr_kcal_tab[-c(1)] Stea_reg_log_Sucr_kcal_tab$k <- Stea_reg_log_Sucr_kcal[["k"]] Stea_reg_log_Sucr_kcal_tab$r2 <- Stea_reg_log_Sucr_kcal[["R2"]] Stea_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal" Stea_reg_log_Fat_kcal <- metareg(Stea_metan_full, log_Fat_kcal) Stea_reg_log_Fat_kcal_tab <- data.frame(Stea_reg_log_Fat_kcal[["beta"]]) Stea_reg_log_Fat_kcal_tab$se <- Stea_reg_log_Fat_kcal[["se"]] Stea_reg_log_Fat_kcal_tab$pval <- Stea_reg_log_Fat_kcal[["pval"]] Stea_reg_log_Fat_kcal_tab$beta <- Stea_reg_log_Fat_kcal[["beta"]] Stea_reg_log_Fat_kcal_tab <- Stea_reg_log_Fat_kcal_tab[-c(1),] Stea_reg_log_Fat_kcal_tab <- Stea_reg_log_Fat_kcal_tab[-c(1)] Stea_reg_log_Fat_kcal_tab$k <- Stea_reg_log_Fat_kcal[["k"]] Stea_reg_log_Fat_kcal_tab$r2 <- Stea_reg_log_Fat_kcal[["R2"]] Stea_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal" Stea_reg_log_Age_start <- metareg(Stea_metan_full, log_Age_start) Stea_reg_log_Age_start_tab <- data.frame(Stea_reg_log_Age_start[["beta"]]) Stea_reg_log_Age_start_tab$se <- Stea_reg_log_Age_start[["se"]] Stea_reg_log_Age_start_tab$pval <- Stea_reg_log_Age_start[["pval"]] Stea_reg_log_Age_start_tab$beta <- Stea_reg_log_Age_start[["beta"]] Stea_reg_log_Age_start_tab <- Stea_reg_log_Age_start_tab[-c(1),] Stea_reg_log_Age_start_tab <- Stea_reg_log_Age_start_tab[-c(1)] Stea_reg_log_Age_start_tab$k <- Stea_reg_log_Age_start[["k"]] Stea_reg_log_Age_start_tab$r2 <- Stea_reg_log_Age_start[["R2"]] Stea_reg_log_Age_start_tab$var <- "log_Age_start" Stea_reg_log_Duration <- metareg(Stea_metan_full, log_Duration) Stea_reg_log_Duration_tab <- data.frame(Stea_reg_log_Duration[["beta"]]) Stea_reg_log_Duration_tab$se <- Stea_reg_log_Duration[["se"]] Stea_reg_log_Duration_tab$pval <- Stea_reg_log_Duration[["pval"]] Stea_reg_log_Duration_tab$beta <- Stea_reg_log_Duration[["beta"]] Stea_reg_log_Duration_tab <- Stea_reg_log_Duration_tab[-c(1),] Stea_reg_log_Duration_tab <- Stea_reg_log_Duration_tab[-c(1)] Stea_reg_log_Duration_tab$k <- Stea_reg_log_Duration[["k"]] Stea_reg_log_Duration_tab$r2 <- Stea_reg_log_Duration[["R2"]] Stea_reg_log_Duration_tab$var <- "log_Duration" Stea_reg_log_Age_end <- metareg(Stea_metan_full, log_Age_end) Stea_reg_log_Age_end_tab <- data.frame(Stea_reg_log_Age_end[["beta"]]) Stea_reg_log_Age_end_tab$se <- Stea_reg_log_Age_end[["se"]] Stea_reg_log_Age_end_tab$pval <- Stea_reg_log_Age_end[["pval"]] Stea_reg_log_Age_end_tab$beta <- Stea_reg_log_Age_end[["beta"]] Stea_reg_log_Age_end_tab <- Stea_reg_log_Age_end_tab[-c(1),] Stea_reg_log_Age_end_tab <- Stea_reg_log_Age_end_tab[-c(1)] Stea_reg_log_Age_end_tab$k <- Stea_reg_log_Age_end[["k"]] Stea_reg_log_Age_end_tab$r2 <- Stea_reg_log_Age_end[["R2"]] Stea_reg_log_Age_end_tab$var <- "log_Age_end" Stea_reg_log_Wt_change <- metareg(Stea_metan_full, log_Wt_change) Stea_reg_log_Wt_change_tab <- data.frame(Stea_reg_log_Wt_change[["beta"]]) Stea_reg_log_Wt_change_tab$se <- Stea_reg_log_Wt_change[["se"]] Stea_reg_log_Wt_change_tab$pval <- Stea_reg_log_Wt_change[["pval"]] Stea_reg_log_Wt_change_tab$beta <- Stea_reg_log_Wt_change[["beta"]] Stea_reg_log_Wt_change_tab <- Stea_reg_log_Wt_change_tab[-c(1),] Stea_reg_log_Wt_change_tab <- Stea_reg_log_Wt_change_tab[-c(1)] Stea_reg_log_Wt_change_tab$k <- Stea_reg_log_Wt_change[["k"]] Stea_reg_log_Wt_change_tab$r2 <- Stea_reg_log_Wt_change[["R2"]] Stea_reg_log_Wt_change_tab$var <- "log_Wt_change" Stea_reg_log_Gluc_change <- metareg(Stea_metan_full, log_Gluc_change) Stea_reg_log_Gluc_change_tab <- data.frame(Stea_reg_log_Gluc_change[["beta"]]) Stea_reg_log_Gluc_change_tab$se <- Stea_reg_log_Gluc_change[["se"]] Stea_reg_log_Gluc_change_tab$pval <- Stea_reg_log_Gluc_change[["pval"]] Stea_reg_log_Gluc_change_tab$beta <- Stea_reg_log_Gluc_change[["beta"]] Stea_reg_log_Gluc_change_tab <- Stea_reg_log_Gluc_change_tab[-c(1),] Stea_reg_log_Gluc_change_tab <- Stea_reg_log_Gluc_change_tab[-c(1)] Stea_reg_log_Gluc_change_tab$k <- Stea_reg_log_Gluc_change[["k"]] Stea_reg_log_Gluc_change_tab$r2 <- Stea_reg_log_Gluc_change[["R2"]] Stea_reg_log_Gluc_change_tab$var <- "log_Gluc_change" Stea_reg_log_Insul_change <- metareg(Stea_metan_full, log_Insul_change) Stea_reg_log_Insul_change_tab <- data.frame(Stea_reg_log_Insul_change[["beta"]]) Stea_reg_log_Insul_change_tab$se <- Stea_reg_log_Insul_change[["se"]] Stea_reg_log_Insul_change_tab$pval <- Stea_reg_log_Insul_change[["pval"]] Stea_reg_log_Insul_change_tab$beta <- Stea_reg_log_Insul_change[["beta"]] Stea_reg_log_Insul_change_tab <- Stea_reg_log_Insul_change_tab[-c(1),] Stea_reg_log_Insul_change_tab <- Stea_reg_log_Insul_change_tab[-c(1)] Stea_reg_log_Insul_change_tab$k <- Stea_reg_log_Insul_change[["k"]] Stea_reg_log_Insul_change_tab$r2 <- Stea_reg_log_Insul_change[["R2"]] Stea_reg_log_Insul_change_tab$var <- "log_Insul_change" Stea_reg_Sex <- metareg(Stea_metan_full, Sex) Stea_reg_Sex_tab <- data.frame(Stea_reg_Sex[["beta"]]) Stea_reg_Sex_tab$se <- Stea_reg_Sex[["se"]] Stea_reg_Sex_tab$pval <- Stea_reg_Sex[["pval"]] Stea_reg_Sex_tab$beta <- Stea_reg_Sex[["beta"]] Stea_reg_Sex_tab <- Stea_reg_Sex_tab[-c(1),] Stea_reg_Sex_tab <- Stea_reg_Sex_tab[-c(1)] Stea_reg_Sex_tab$k <- Stea_reg_Sex[["k"]] Stea_reg_Sex_tab$r2 <- NA Stea_reg_Sex_tab$var <- rownames(Stea_reg_Sex_tab) Stea_reg_Sex_overall_tab <- data.frame(Stea_reg_Sex[["QMp"]]) Stea_reg_Sex_overall_tab$se <- NA Stea_reg_Sex_overall_tab$pval <- Stea_reg_Sex[["QMp"]] Stea_reg_Sex_overall_tab$beta <- NA Stea_reg_Sex_overall_tab <- Stea_reg_Sex_overall_tab[-c(1)] Stea_reg_Sex_overall_tab$k <- Stea_reg_Sex[["k"]] Stea_reg_Sex_overall_tab$r2 <- Stea_reg_Sex[["R2"]] Stea_reg_Sex_overall_tab$var <- "Sex_overall" Stea_reg_Sex_tab <- rbind(Stea_reg_Sex_tab, Stea_reg_Sex_overall_tab) Stea_reg_Drug_dose <- metareg(Stea_metan_drugIndiv, Drug_dose) Stea_reg_Drug_dose_tab <- data.frame(Stea_reg_Drug_dose[["beta"]]) Stea_reg_Drug_dose_tab$se <- Stea_reg_Drug_dose[["se"]] Stea_reg_Drug_dose_tab$pval <- Stea_reg_Drug_dose[["pval"]] Stea_reg_Drug_dose_tab$beta <- Stea_reg_Drug_dose[["beta"]] Stea_reg_Drug_dose_tab <- Stea_reg_Drug_dose_tab[-c(1),] Stea_reg_Drug_dose_tab <- Stea_reg_Drug_dose_tab[-c(1)] Stea_reg_Drug_dose_tab$k <- Stea_reg_Drug_dose[["k"]] Stea_reg_Drug_dose_tab$r2 <- Stea_reg_Drug_dose[["R2"]] Stea_reg_Drug_dose_tab$var <- "Drug_dose" Stea_reg_Indiv_drug_class_3 <- metareg(Stea_metan_drugIndiv, Indiv_drug_class_3) Stea_reg_Indiv_drug_class_3_tab <- data.frame(Stea_reg_Indiv_drug_class_3[["beta"]]) Stea_reg_Indiv_drug_class_3_tab$se <- Stea_reg_Indiv_drug_class_3[["se"]] Stea_reg_Indiv_drug_class_3_tab$pval <- Stea_reg_Indiv_drug_class_3[["pval"]] Stea_reg_Indiv_drug_class_3_tab$beta <- Stea_reg_Indiv_drug_class_3[["beta"]] Stea_reg_Indiv_drug_class_3_tab <- Stea_reg_Indiv_drug_class_3_tab[-c(1),] Stea_reg_Indiv_drug_class_3_tab <- Stea_reg_Indiv_drug_class_3_tab[-c(1)] Stea_reg_Indiv_drug_class_3_tab$k <- Stea_reg_Indiv_drug_class_3[["k"]] Stea_reg_Indiv_drug_class_3_tab$r2 <- NA Stea_reg_Indiv_drug_class_3_tab$var <- rownames(Stea_reg_Indiv_drug_class_3_tab) Stea_reg_Indiv_drug_class_3_overall_tab <- data.frame(Stea_reg_Indiv_drug_class_3[["QMp"]]) Stea_reg_Indiv_drug_class_3_overall_tab$se <- NA Stea_reg_Indiv_drug_class_3_overall_tab$pval <- Stea_reg_Indiv_drug_class_3[["QMp"]] Stea_reg_Indiv_drug_class_3_overall_tab$beta <- NA Stea_reg_Indiv_drug_class_3_overall_tab <- Stea_reg_Indiv_drug_class_3_overall_tab[-c(1)] Stea_reg_Indiv_drug_class_3_overall_tab$k <- Stea_reg_Indiv_drug_class_3[["k"]] Stea_reg_Indiv_drug_class_3_overall_tab$r2 <- Stea_reg_Indiv_drug_class_3[["R2"]] Stea_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall" Stea_reg_Indiv_drug_class_3_tab <- rbind(Stea_reg_Indiv_drug_class_3_tab, Stea_reg_Indiv_drug_class_3_overall_tab) Stea_reg_Model_simple <- metareg(Stea_metan_model, Model_simple) Stea_reg_Model_simple_tab <- data.frame(Stea_reg_Model_simple[["beta"]]) Stea_reg_Model_simple_tab$se <- Stea_reg_Model_simple[["se"]] Stea_reg_Model_simple_tab$pval <- Stea_reg_Model_simple[["pval"]] Stea_reg_Model_simple_tab$beta <- Stea_reg_Model_simple[["beta"]] Stea_reg_Model_simple_tab <- Stea_reg_Model_simple_tab[-c(1),] Stea_reg_Model_simple_tab <- Stea_reg_Model_simple_tab[-c(1)] Stea_reg_Model_simple_tab$k <- Stea_reg_Model_simple[["k"]] Stea_reg_Model_simple_tab$r2 <- NA Stea_reg_Model_simple_tab$var <- rownames(Stea_reg_Model_simple_tab) Stea_reg_Model_simple_overall_tab <- data.frame(Stea_reg_Model_simple[["QMp"]]) Stea_reg_Model_simple_overall_tab$se <- NA Stea_reg_Model_simple_overall_tab$pval <- Stea_reg_Model_simple[["QMp"]] Stea_reg_Model_simple_overall_tab$beta <- NA Stea_reg_Model_simple_overall_tab <- Stea_reg_Model_simple_overall_tab[-c(1)] Stea_reg_Model_simple_overall_tab$k <- Stea_reg_Model_simple[["k"]] Stea_reg_Model_simple_overall_tab$r2 <- Stea_reg_Model_simple[["R2"]] Stea_reg_Model_simple_overall_tab$var <- "Model_simple_overall" Stea_reg_Model_simple_tab <- rbind(Stea_reg_Model_simple_tab, Stea_reg_Model_simple_overall_tab) Stea_reg_Background_simple <- metareg(Stea_metan_bg, Background_simple) Stea_reg_Background_simple_tab <- data.frame(Stea_reg_Background_simple[["beta"]]) Stea_reg_Background_simple_tab$se <- Stea_reg_Background_simple[["se"]] Stea_reg_Background_simple_tab$pval <- Stea_reg_Background_simple[["pval"]] Stea_reg_Background_simple_tab$beta <- Stea_reg_Background_simple[["beta"]] Stea_reg_Background_simple_tab <- Stea_reg_Background_simple_tab[-c(1),] Stea_reg_Background_simple_tab <- Stea_reg_Background_simple_tab[-c(1)] Stea_reg_Background_simple_tab$k <- Stea_reg_Background_simple[["k"]] Stea_reg_Background_simple_tab$r2 <- NA Stea_reg_Background_simple_tab$var <- rownames(Stea_reg_Background_simple_tab) Stea_reg_Background_simple_overall_tab <- data.frame(Stea_reg_Background_simple[["QMp"]]) Stea_reg_Background_simple_overall_tab$se <- NA Stea_reg_Background_simple_overall_tab$pval <- Stea_reg_Background_simple[["QMp"]] Stea_reg_Background_simple_overall_tab$beta <- NA Stea_reg_Background_simple_overall_tab <- Stea_reg_Background_simple_overall_tab[-c(1)] Stea_reg_Background_simple_overall_tab$k <- Stea_reg_Background_simple[["k"]] Stea_reg_Background_simple_overall_tab$r2 <- Stea_reg_Background_simple[["R2"]] Stea_reg_Background_simple_overall_tab$var <- "Background_simple_overall" Stea_reg_Background_simple_tab <- rbind(Stea_reg_Background_simple_tab, Stea_reg_Background_simple_overall_tab) Stea_metareg_sumtab <- rbind(Stea_reg_Qual_score_tab, Stea_reg_Protocol_tab, Stea_reg_Randomisation_tab, Stea_reg_Blinding_tab, Stea_reg_Power_calculation_tab, Stea_reg_Chol_per_tab, Stea_reg_log_FructGluc_per_tab, Stea_reg_log_Sucr_kcal_tab, Stea_reg_log_Fat_kcal_tab, Stea_reg_log_Age_start_tab, Stea_reg_log_Duration_tab, Stea_reg_log_Age_end_tab, Stea_reg_log_Wt_change_tab, Stea_reg_log_Gluc_change_tab, Stea_reg_log_Insul_change_tab, Stea_reg_Sex_tab, Stea_reg_Drug_dose_tab, Stea_reg_Indiv_drug_class_3_tab, Stea_reg_Model_simple_tab, Stea_reg_Background_simple_tab) Stea_metareg_sumtab$text <- paste(format(round(Stea_metareg_sumtab$beta, 1), nsmall = 1), format(round(Stea_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_metareg_sumtab$text <- paste(Stea_metareg_sumtab$text, "", sep = ")", collapse = NULL) Stea_metareg_sumtab$pval_2dig <- paste((signif(Stea_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) Stea_metareg_sumtab$r2_2dig <- paste(format(round(Stea_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(Stea_metareg_sumtab,file="Stea_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="Stea_bubble_Wt_change.pdf",width=6,height=6) Stea_bubble_Wt_change <- bubble(Stea_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1,.5)) Stea_bubble_Wt_change dev.off() pdf(file="Stea_bubble_Insul_change.pdf",width=6,height=6) Stea_bubble_Insul_change <- bubble(Stea_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-2,1), ylim = c(-4, 1)) Stea_bubble_Insul_change dev.off() pdf(file="Stea_bubble_Gluc_change.pdf",width=6,height=6) Stea_bubble_Gluc_change <- bubble(Stea_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1,.5), ylim = c(-4, 2)) Stea_bubble_Gluc_change dev.off() ########## ##### run multiple meta-regression ## create data subset including >3 for each model >3 for background, and >3 for each drug ## start with dataset containing >3 for each background = Stea_data_min3bg Stea_data_min3bg_modelcounts <- Stea_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) Stea_data_min3bg_modelcounts_sum <- Stea_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) Stea_data_min3bg_model_less3 = subset(Stea_data_min3bg_modelcounts_sum, n <3) Stea_data_min3bg_model_less3$Model_simple <- droplevels(Stea_data_min3bg_model_less3$Model_simple) Stea_data_min3bg_model_droplist <- Stea_data_min3bg_model_less3$Model_simple Stea_multimetareg_data <- Stea_data_min3bg %>% filter(!Model_simple %in% Stea_data_min3bg_model_droplist) ## run multiple meta-regression ## create data subset including >3 for each model and >3 for background ## start with dataset containing >3 for each background = Stea_data_min3bg Stea_data_min3bg_modelcounts <- Stea_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) Stea_data_min3bg_modelcounts_sum <- Stea_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) Stea_data_min3bg_model_less3 = subset(Stea_data_min3bg_modelcounts_sum, n <3) Stea_data_min3bg_model_less3$Model_simple <- droplevels(Stea_data_min3bg_model_less3$Model_simple) Stea_data_min3bg_model_droplist <- Stea_data_min3bg_model_less3$Model_simple Stea_multimetareg_data <- Stea_data_min3bg %>% filter(!Model_simple %in% Stea_data_min3bg_model_droplist) ## Run metan Stea_multimetareg_metan <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) Stea_multmetareg_tab <- data.frame(Stea_multimetareg_metan$studlab) Stea_multmetareg_tab$yi <- Stea_multimetareg_metan[["TE"]] Stea_multmetareg_tab$sei <- Stea_multimetareg_metan[["seTE"]] Stea_multmetareg_tab$Model_simple <- Stea_multimetareg_metan[["data"]][["Model_simple"]] Stea_multmetareg_tab$Background_simple <- Stea_multimetareg_metan[["data"]][["Background_simple"]] Stea_multmetareg_tab$Sex <- Stea_multimetareg_metan[["data"]][["Sex"]] Stea_multmetareg_tab$Indiv_drug_class_3 <- Stea_multimetareg_metan[["data"]][["Indiv_drug_class_3"]] Stea_multmetareg_tab$log_Fat_kcal <- Stea_multimetareg_metan[["data"]][["log_Fat_kcal"]] Stea_multmetareg_tab$log_Age_start <- Stea_multimetareg_metan[["data"]][["log_Age_start"]] Stea_multmetareg_tab$log_Age_end <- Stea_multimetareg_metan[["data"]][["log_Age_end"]] Stea_multmetareg_tab$log_Duration <- Stea_multimetareg_metan[["data"]][["log_Duration"]] Stea_multmetareg_tab$log_Wt_change <- Stea_multimetareg_metan[["data"]][["log_Wt_change"]] Stea_multmetareg_tab$log_Gluc_change <- Stea_multimetareg_metan[["data"]][["log_Gluc_change"]] Stea_multmetareg_tab$log_Insul_change <- Stea_multimetareg_metan[["data"]][["log_Insul_change"]] Stea_multmetareg_tab$Qual_score <- Stea_multimetareg_metan[["data"]][["Qual_score"]] Stea_multmetareg_tab_cor <- cor(Stea_multmetareg_tab[,8:15], use="complete.obs") Stea_multmetareg_tab_cor library(PerformanceAnalytics) chart.Correlation(Stea_multmetareg_tab[,8:15], use="complete.obs") ## high correlation between age_start, age,_end, and duration, therefore drop age_end from model ## also have to drop insulin change due to insufficient data library(dmetar) Stea_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = Stea_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE) Stea_multi_intereference1 sink("Stea_multi_intereference1.txt") print(Stea_multi_intereference1) sink() ## run multi-metareg for top model 1 Stea_multmetareg_1 <- rma(yi = yi, sei = sei, data = Stea_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + Background_simple + log_Gluc_change, test="knha") Stea_multmetareg_1_tab <- coef(summary(Stea_multmetareg_1)) Stea_multmetareg_1_tab$rownames <- rownames(Stea_multmetareg_1_tab) Stea_multmetareg_1_tab$mod1_text <- paste(format(round(Stea_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(Stea_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_multmetareg_1_tab$mod1_text <- paste(Stea_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL) Stea_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(Stea_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL) ## check robustness using permutation test Stea_multmetareg_1_permut <- permutest(Stea_multmetareg_1) sink("Stea_multmetareg_1_permut.txt") print(Stea_multmetareg_1_permut) sink() #### ## repeat but also include drug class in model, therefore drop where <3 unique studies for any drug class ## insufficient data to do by individual drug Stea_multimetareg_data_drugcounts <- Stea_multimetareg_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Stea_multimetareg_data_drugcounts_sum <- Stea_multimetareg_data_drugcounts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Stea_multimetareg_data_drugcounts_less3 = subset(Stea_multimetareg_data_drugcounts_sum, n <3) Stea_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all <- droplevels(Stea_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all) Stea_multimetareg_data_drug_droplist <- Stea_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all Stea_multimetareg_data_2 <- Stea_multimetareg_data %>% filter(!Drug_Class_new_1_all %in% Stea_multimetareg_data_drug_droplist) ## Run metan Stea_multimetareg_metan_2 <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_multimetareg_data_2, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) Stea_multmetareg_tab_2 <- data.frame(Stea_multimetareg_metan_2$studlab) Stea_multmetareg_tab_2$yi <- Stea_multimetareg_metan_2[["TE"]] Stea_multmetareg_tab_2$sei <- Stea_multimetareg_metan_2[["seTE"]] Stea_multmetareg_tab_2$Model_simple <- Stea_multimetareg_metan_2[["data"]][["Model_simple"]] Stea_multmetareg_tab_2$Background_simple <- Stea_multimetareg_metan_2[["data"]][["Background_simple"]] Stea_multmetareg_tab_2$Sex <- Stea_multimetareg_metan_2[["data"]][["Sex"]] Stea_multmetareg_tab_2$Drug_Class_new_1_all <- Stea_multimetareg_metan_2[["data"]][["Drug_Class_new_1_all"]] Stea_multmetareg_tab_2$log_Fat_kcal <- Stea_multimetareg_metan_2[["data"]][["log_Fat_kcal"]] Stea_multmetareg_tab_2$log_Age_start <- Stea_multimetareg_metan_2[["data"]][["log_Age_start"]] Stea_multmetareg_tab_2$log_Age_end <- Stea_multimetareg_metan_2[["data"]][["log_Age_end"]] Stea_multmetareg_tab_2$log_Duration <- Stea_multimetareg_metan_2[["data"]][["log_Duration"]] Stea_multmetareg_tab_2$log_Wt_change <- Stea_multimetareg_metan_2[["data"]][["log_Wt_change"]] Stea_multmetareg_tab_2$log_Gluc_change <- Stea_multimetareg_metan_2[["data"]][["log_Gluc_change"]] Stea_multmetareg_tab_2$log_Insul_change <- Stea_multimetareg_metan_2[["data"]][["log_Insul_change"]] Stea_multmetareg_tab_2$Qual_score <- Stea_multimetareg_metan_2[["data"]][["Qual_score"]] Stea_multmetareg_tab_2_cor <- cor(Stea_multmetareg_tab_2[,8:15], use="complete.obs") Stea_multmetareg_tab_2_cor library(PerformanceAnalytics) chart.Correlation(Stea_multmetareg_tab_2[,8:15], use="complete.obs") ## high correlation between age_start, age,_end, and duration, therefore drop age_end from model, as well as previous redundant mods (age, duration, qual score), also had to remove glucose library(dmetar) Stea_multi_intereference2 <- multimodel.inference(TE = "yi", seTE = "sei", data = Stea_multmetareg_tab_2, predictors = c("log_Fat_kcal", "Sex", "log_Wt_change", "Model_simple", "Background_simple", "Drug_Class_new_1_all"), interaction = FALSE) Stea_multi_intereference2 ## run multi-metareg for top model Stea_multmetareg_2 <- rma(yi = yi, sei = sei, data = Stea_multmetareg_tab_2, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + Background_simple + Model_simple, test="knha") Stea_multmetareg_2_tab <- coef(summary(Stea_multmetareg_2)) Stea_multmetareg_2_tab$rownames <- rownames(Stea_multmetareg_2_tab) Stea_multmetareg_2_tab$mod2_text <- paste(format(round(Stea_multmetareg_2_tab$estimate, 1), nsmall = 1), format(round(Stea_multmetareg_2_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_multmetareg_2_tab$mod2_text <- paste(Stea_multmetareg_2_tab$mod2_text, "", sep = ")", collapse = NULL) Stea_multmetareg_2_tab$mod2_pval_2dig <- paste((signif(Stea_multmetareg_2_tab$pval, digits=2)), "", sep = "", collapse = NULL) Stea_multmetareg_sumtab <- merge(Stea_multmetareg_1_tab, Stea_multmetareg_2_tab, by="rownames", all=TRUE) write.table(Stea_multmetareg_sumtab, "Stea_multmetareg_sumtab.csv", sep=",") ## check robustness using permutation test Stea_multmetareg_2_permut <- permutest(Stea_multmetareg_2) sink("Stea_multmetareg_2_permut.txt") print(Stea_multmetareg_2_permut) sink() ## See if meta-regression results change after removal of weight-loss diets library(tidyverse) Stea_NoWtLoss_data <- Stea_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') Stea_NoWtLoss_metan_full <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Stea_NoWtLoss_reg_log_Wt_change <- metareg(Stea_NoWtLoss_metan_full, log_Wt_change) Stea_NoWtLoss_reg_log_Wt_change_tab <- data.frame(Stea_NoWtLoss_reg_log_Wt_change[["beta"]]) Stea_NoWtLoss_reg_log_Wt_change_tab$se <- Stea_NoWtLoss_reg_log_Wt_change[["se"]] Stea_NoWtLoss_reg_log_Wt_change_tab$pval <- Stea_NoWtLoss_reg_log_Wt_change[["pval"]] Stea_NoWtLoss_reg_log_Wt_change_tab$beta <- Stea_NoWtLoss_reg_log_Wt_change[["beta"]] Stea_NoWtLoss_reg_log_Wt_change_tab <- Stea_NoWtLoss_reg_log_Wt_change_tab[-c(1),] Stea_NoWtLoss_reg_log_Wt_change_tab <- Stea_NoWtLoss_reg_log_Wt_change_tab[-c(1)] Stea_NoWtLoss_reg_log_Wt_change_tab$k <- Stea_NoWtLoss_reg_log_Wt_change[["k"]] Stea_NoWtLoss_reg_log_Wt_change_tab$r2 <- Stea_NoWtLoss_reg_log_Wt_change[["R2"]] Stea_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change" Stea_NoWtLoss_reg_log_Gluc_change <- metareg(Stea_NoWtLoss_metan_full, log_Gluc_change) Stea_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(Stea_NoWtLoss_reg_log_Gluc_change[["beta"]]) Stea_NoWtLoss_reg_log_Gluc_change_tab$se <- Stea_NoWtLoss_reg_log_Gluc_change[["se"]] Stea_NoWtLoss_reg_log_Gluc_change_tab$pval <- Stea_NoWtLoss_reg_log_Gluc_change[["pval"]] Stea_NoWtLoss_reg_log_Gluc_change_tab$beta <- Stea_NoWtLoss_reg_log_Gluc_change[["beta"]] Stea_NoWtLoss_reg_log_Gluc_change_tab <- Stea_NoWtLoss_reg_log_Gluc_change_tab[-c(1),] Stea_NoWtLoss_reg_log_Gluc_change_tab <- Stea_NoWtLoss_reg_log_Gluc_change_tab[-c(1)] Stea_NoWtLoss_reg_log_Gluc_change_tab$k <- Stea_NoWtLoss_reg_log_Gluc_change[["k"]] Stea_NoWtLoss_reg_log_Gluc_change_tab$r2 <- Stea_NoWtLoss_reg_log_Gluc_change[["R2"]] Stea_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change" Stea_NoWtLoss_reg_log_Insul_change <- metareg(Stea_NoWtLoss_metan_full, log_Insul_change) Stea_NoWtLoss_reg_log_Insul_change_tab <- data.frame(Stea_NoWtLoss_reg_log_Insul_change[["beta"]]) Stea_NoWtLoss_reg_log_Insul_change_tab$se <- Stea_NoWtLoss_reg_log_Insul_change[["se"]] Stea_NoWtLoss_reg_log_Insul_change_tab$pval <- Stea_NoWtLoss_reg_log_Insul_change[["pval"]] Stea_NoWtLoss_reg_log_Insul_change_tab$beta <- Stea_NoWtLoss_reg_log_Insul_change[["beta"]] Stea_NoWtLoss_reg_log_Insul_change_tab <- Stea_NoWtLoss_reg_log_Insul_change_tab[-c(1),] Stea_NoWtLoss_reg_log_Insul_change_tab <- Stea_NoWtLoss_reg_log_Insul_change_tab[-c(1)] Stea_NoWtLoss_reg_log_Insul_change_tab$k <- Stea_NoWtLoss_reg_log_Insul_change[["k"]] Stea_NoWtLoss_reg_log_Insul_change_tab$r2 <- Stea_NoWtLoss_reg_log_Insul_change[["R2"]] Stea_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change" Stea_NoWtLoss_metareg_sumtab <- rbind(Stea_NoWtLoss_reg_log_Wt_change_tab, Stea_NoWtLoss_reg_log_Gluc_change_tab, Stea_NoWtLoss_reg_log_Insul_change_tab) Stea_NoWtLoss_metareg_sumtab$text <- paste(format(round(Stea_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(Stea_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Stea_NoWtLoss_metareg_sumtab$text <- paste(Stea_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL) Stea_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(Stea_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) Stea_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(Stea_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(Stea_NoWtLoss_metareg_sumtab,file="Stea_NoWtLoss_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="Stea_NoWtLoss_bubble_weight_change.pdf",width=6,height=6) Stea_NoWtLoss_bubble_weight_change <- bubble(Stea_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1,0.5), ylim = c(-4,1)) Stea_NoWtLoss_bubble_weight_change dev.off() pdf(file="Stea_NoWtLoss_bubble_gluc_change.pdf",width=6,height=6) Stea_NoWtLoss_bubble_gluc_change <- bubble(Stea_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1, 0.5), ylim = c(-4,2)) Stea_NoWtLoss_bubble_gluc_change dev.off() pdf(file="Stea_NoWtLoss_bubble_Insul_change.pdf",width=6,height=6) Stea_NoWtLoss_bubble_Insul_change <- bubble(Stea_NoWtLoss_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-2,.5), ylim = c(-4, 2)) Stea_NoWtLoss_bubble_Insul_change dev.off() #### Lob Inf analysis ## following on from Stea analysis setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/LobIn_out") ######## ## Analysis for histological lobular inflammation grade (LobIn) ######## ## Power analysis library(pwr) ## calculate common SD full_data$LobIn_Int_SD2 <- full_data$LobIn_Int_SD*full_data$LobIn_Int_SD full_data$LobIn_Pla_SD2 <- full_data$LobIn_Pla_SD*full_data$LobIn_Pla_SD full_data$LobIn_comm_SD <- sqrt(((full_data$LobIn_Int_SD2+full_data$LobIn_Pla_SD2)/2)) full_data$LobIn_m_diff <- full_data$LobIn_Pla_Mean-full_data$LobIn_Int_Mean full_data$LobIn_eff_size <- full_data$LobIn_m_diff/full_data$LobIn_comm_SD library(tidyr) LobIn_data <- full_data LobIn_data <- LobIn_data %>% drop_na(LobIn_eff_size) LobIn_data$power <- pwr.t2n.test(n1 = LobIn_data$LobIn_Int_size, n2 = LobIn_data$LobIn_Pla_size, d = LobIn_data$LobIn_eff_size)$power write.table(LobIn_data$power,file="LobIn_data_power.csv",sep=",") hist(LobIn_data$power) LobIn_dens_power <- density(LobIn_data$power) pdf(file="LobIn_kernel_power_v1.pdf") plot(LobIn_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)") polygon(LobIn_dens_power, col="red", border="blue") dev.off() ## load packages for metan library(dmetar) library(meta) library(metafor) library(readxl) max.print = 100000 ## drop where <3 unique studies for any drug class LobIn_drugsclass_counts <- LobIn_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) LobIn_class_counts <- LobIn_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) LobIn_class_less3 = subset(LobIn_class_counts, n <3) str(LobIn_class_less3) LobIn_class_less3$Drug_Class_new_1_all <- droplevels(LobIn_class_less3$Drug_Class_new_1_all) LobIn_class_droplist <- LobIn_class_less3$Drug_Class_new_1_all LobIn_data_min3class <- LobIn_data %>% filter(!Drug_Class_new_1_all %in% LobIn_class_droplist) ## run metan LobIn_metan_class_main <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") LobIn_metan_class <- update(LobIn_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results LobIn_metan_class_tab <- data.frame(LobIn_metan_class[["TE.random.w"]]) LobIn_metan_class_tab$drug <- LobIn_metan_class[["bylevs"]] LobIn_metan_class_tab$SE <- LobIn_metan_class[["seTE.random.w"]] LobIn_metan_class_tab$lower <- LobIn_metan_class[["lower.random.w"]] LobIn_metan_class_tab$upper <- LobIn_metan_class[["upper.random.w"]] LobIn_metan_class_tab$Pz <- LobIn_metan_class[["pval.random.w"]] LobIn_metan_class_tab$weight <- LobIn_metan_class[["w.random.w"]] LobIn_metan_class_tab$k <- LobIn_metan_class[["k.w"]] LobIn_metan_class_tab$controls <- LobIn_metan_class[["n.c.w"]] LobIn_metan_class_tab$experimental <- LobIn_metan_class[["n.e.w"]] LobIn_metan_class_tab$Q <- LobIn_metan_class[["Q.w"]] LobIn_metan_class_tab$Pq <- LobIn_metan_class[["pval.Q.w"]] LobIn_metan_class_tab$tau <- LobIn_metan_class[["tau.w"]] LobIn_metan_class_tab$I2 <- LobIn_metan_class[["I2.w"]] LobIn_metan_class_tab <- LobIn_metan_class_tab %>% rename(MD = LobIn_metan_class...TE.random.w...) LobIn_metan_class_tab <- LobIn_metan_class_tab[order(-LobIn_metan_class_tab$MD),] LobIn_metan_class_tab$row_number <- 1:nrow(LobIn_metan_class_tab) LobIn_metan_class_tab$subgroup <- "Subgroup" LobIn_class_counts <- LobIn_class_counts %>% rename(drug = Drug_Class_new_1_all) LobIn_metan_class_tab <- merge(LobIn_class_counts, LobIn_metan_class_tab, by="drug") LobIn_metan_class_tab_overall <- data.frame(LobIn_metan_class[["TE.random"]]) LobIn_metan_class_tab_overall$drug <- "Overall" LobIn_metan_class_tab_overall$SE <- LobIn_metan_class[["seTE.random"]] LobIn_metan_class_tab_overall$lower <- LobIn_metan_class[["lower.random"]] LobIn_metan_class_tab_overall$upper <- LobIn_metan_class[["upper.random"]] LobIn_metan_class_tab_overall$Pz <- LobIn_metan_class[["pval.random"]] LobIn_metan_class_tab_overall$weight <- (max(LobIn_metan_class_tab$weight)*2) LobIn_metan_class_tab_overall$k <- LobIn_metan_class[["k"]] LobIn_metan_class_tab_overall$controls <- sum(LobIn_metan_class_tab$controls) LobIn_metan_class_tab_overall$experimental <- sum(LobIn_metan_class_tab$experimental) LobIn_metan_class_tab_overall$Q <- LobIn_metan_class[["Q"]] LobIn_metan_class_tab_overall$Pq <- LobIn_metan_class[["pval.Q"]] LobIn_metan_class_tab_overall$tau <- LobIn_metan_class[["tau"]] LobIn_metan_class_tab_overall$I2 <- LobIn_metan_class[["I2"]] LobIn_metan_class_tab_overall <- LobIn_metan_class_tab_overall %>% rename(MD = LobIn_metan_class...TE.random...) LobIn_metan_class_tab_overall$row_number <- ((nrow(LobIn_metan_class_tab))+1) LobIn_metan_class_tab_overall$subgroup <- "Overall" LobIn_metan_class_tab_overall$n <- sum(LobIn_metan_class_tab$n) LobIn_metan_class_sumtab <- rbind(LobIn_metan_class_tab, LobIn_metan_class_tab_overall) LobIn_metan_class_sumtab$weight <- as.numeric(LobIn_metan_class_sumtab$weight) LobIn_metan_class_sumtab$row_number <- as.numeric(LobIn_metan_class_sumtab$row_number) LobIn_metan_class_sumtab$subgroup <- as.factor(LobIn_metan_class_sumtab$subgroup) LobIn_metan_class_sumtab$total = LobIn_metan_class_sumtab$controls + LobIn_metan_class_sumtab$experimental LobIn_metan_class_sumtab$text <- paste(format(round(LobIn_metan_class_sumtab$MD, 1), nsmall = 1), format(round(LobIn_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) LobIn_metan_class_sumtab$text <- paste(LobIn_metan_class_sumtab$text, format(round(LobIn_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) LobIn_metan_class_sumtab$text <- paste(LobIn_metan_class_sumtab$text, "", sep = ")", collapse = NULL) LobIn_metan_class_sumtab$SE_1dig <- paste(format(round(LobIn_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) LobIn_metan_class_sumtab$Pz_1dig <- paste((signif(LobIn_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) LobIn_metan_class_sumtab$tI2_2dig <- paste(format(round(LobIn_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) LobIn_metan_class_sumtab$tau_1dig <- paste(format(round(LobIn_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) LobIn_metan_class_sumtab$Pq_1dig <- paste((signif(LobIn_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(LobIn_metan_class_sumtab,file="LobIn_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(LobIn_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(LobIn_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(LobIn_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = LobIn_metan_class_tab_overall$lower overall_max = LobIn_metan_class_tab_overall$upper LobIn_metan_class_ybreaks <- nrow(LobIn_metan_class_sumtab) LobIn_metan_class_sumtab <- LobIn_metan_class_sumtab[order(LobIn_metan_class_sumtab$row_number),] LobIn_metan_class_forest <- ggplot(data= LobIn_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: LobIn_metan_class_ybreaks, labels = LobIn_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.7, 1.2), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-2.7, xmax=-2, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=LobIn_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_class_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_class_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0) pdf(file="LobIn_metan_class_forest.pdf",width=9,height=4) LobIn_metan_class_forest dev.off() ##################### ####### ## bias analysis LobIn_class_eggers <- eggers.test(x = LobIn_metan_class_main) LobIn_class_eggers sink("LobIn_class_eggers.txt") print(LobIn_class_eggers) sink() LobIn_class_trimfill <- trimfill(LobIn_metan_class_main) LobIn_class_trimfill sink("LobIn_class_trimfill.txt") print(LobIn_class_trimfill) sink() pdf(file="LobIn_class_funnel.pdf") funnel(LobIn_class_trimfill, xlab="Mean difference in hepatic LobIn (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue")) dev.off() ## use Baujat plot to look for outliers pdf(file="LobIn_class_baujat.pdf") LobIn_class_baujat <- baujat(LobIn_metan_class_main) LobIn_class_baujat dev.off() ## look for outliers based on SD LobIn_commSD_mean <- mean(LobIn_data$LobIn_comm_SD, na.rm=TRUE) LobIn_commSD_SD <- sd(LobIn_data$LobIn_comm_SD, na.rm=TRUE) LobIn_commSD_norm <- dnorm(LobIn_data$LobIn_comm_SD, mean = LobIn_commSD_mean, sd = LobIn_commSD_SD, log = FALSE) LobIn_commSD_norm <- as.data.frame(LobIn_commSD_norm) LobIn_commSD_norm$LobIn_comm_SD <- LobIn_data$LobIn_comm_SD LobIn_commSD_norm$Paper <- LobIn_data$Paper pdf(file = "LobIn_commSD_norm.pdf") plot(LobIn_commSD_norm$LobIn_comm_SD, LobIn_commSD_norm$LobIn_commSD_norm) dev.off() ## exclude studies with LobIn_comm_SD >1.5 or high contribution to heterogeneity on baujat plot LobIn_NoOutlier_data = subset(LobIn_data, LobIn_comm_SD <1.5) LobIn_NoOutlier_data <- LobIn_NoOutlier_data %>% filter(Paper != "Ding 2018_2 " & Paper != "Assy 2006_3" & Paper != "Assy 2006_2" & Paper != "Konuma 2015" & Paper != "Tang 2015" & Paper != "Ishii 2009" & Paper != "Zhang 2009b" & Paper != "Valdecantos 2017_2" & Paper != "Pais 2014_1" & Paper != "Afrin 2017") ####### ## re-rerun after outliers excluded ## drop where <3 unique studies for any drug class LobIn_NoOutlier_drugsclass_counts <- LobIn_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) LobIn_NoOutlier_class_counts <- LobIn_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) LobIn_NoOutlier_class_less3 = subset(LobIn_NoOutlier_class_counts, n <3) str(LobIn_NoOutlier_class_less3) LobIn_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(LobIn_NoOutlier_class_less3$Drug_Class_new_1_all) LobIn_NoOutlier_class_droplist <- LobIn_NoOutlier_class_less3$Drug_Class_new_1_all LobIn_NoOutlier_data_min3class <- LobIn_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% LobIn_NoOutlier_class_droplist) ## run metan LobIn_NoOutlier_metan_class_main <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") LobIn_NoOutlier_metan_class <- update(LobIn_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results LobIn_NoOutlier_metan_class_tab <- data.frame(LobIn_NoOutlier_metan_class[["TE.random.w"]]) LobIn_NoOutlier_metan_class_tab$drug <- LobIn_NoOutlier_metan_class[["bylevs"]] LobIn_NoOutlier_metan_class_tab$SE <- LobIn_NoOutlier_metan_class[["seTE.random.w"]] LobIn_NoOutlier_metan_class_tab$lower <- LobIn_NoOutlier_metan_class[["lower.random.w"]] LobIn_NoOutlier_metan_class_tab$upper <- LobIn_NoOutlier_metan_class[["upper.random.w"]] LobIn_NoOutlier_metan_class_tab$Pz <- LobIn_NoOutlier_metan_class[["pval.random.w"]] LobIn_NoOutlier_metan_class_tab$weight <- LobIn_NoOutlier_metan_class[["w.random.w"]] LobIn_NoOutlier_metan_class_tab$k <- LobIn_NoOutlier_metan_class[["k.w"]] LobIn_NoOutlier_metan_class_tab$controls <- LobIn_NoOutlier_metan_class[["n.c.w"]] LobIn_NoOutlier_metan_class_tab$experimental <- LobIn_NoOutlier_metan_class[["n.e.w"]] LobIn_NoOutlier_metan_class_tab$Q <- LobIn_NoOutlier_metan_class[["Q.w"]] LobIn_NoOutlier_metan_class_tab$Pq <- LobIn_NoOutlier_metan_class[["pval.Q.w"]] LobIn_NoOutlier_metan_class_tab$tau <- LobIn_NoOutlier_metan_class[["tau.w"]] LobIn_NoOutlier_metan_class_tab$I2 <- LobIn_NoOutlier_metan_class[["I2.w"]] LobIn_NoOutlier_metan_class_tab <- LobIn_NoOutlier_metan_class_tab %>% rename(MD = LobIn_NoOutlier_metan_class...TE.random.w...) LobIn_NoOutlier_metan_class_tab <- LobIn_NoOutlier_metan_class_tab[order(-LobIn_NoOutlier_metan_class_tab$MD),] LobIn_NoOutlier_metan_class_tab <- LobIn_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n()) LobIn_NoOutlier_metan_class_tab$subgroup <- "Subgroup" LobIn_NoOutlier_class_counts <- LobIn_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all) LobIn_NoOutlier_metan_class_tab <- merge(LobIn_NoOutlier_class_counts, LobIn_NoOutlier_metan_class_tab, by="drug") LobIn_NoOutlier_metan_class_tab_overall <- data.frame(LobIn_NoOutlier_metan_class[["TE.random"]]) LobIn_NoOutlier_metan_class_tab_overall$drug <- "Overall" LobIn_NoOutlier_metan_class_tab_overall$SE <- LobIn_NoOutlier_metan_class[["seTE.random"]] LobIn_NoOutlier_metan_class_tab_overall$lower <- LobIn_NoOutlier_metan_class[["lower.random"]] LobIn_NoOutlier_metan_class_tab_overall$upper <- LobIn_NoOutlier_metan_class[["upper.random"]] LobIn_NoOutlier_metan_class_tab_overall$Pz <- LobIn_NoOutlier_metan_class[["pval.random"]] LobIn_NoOutlier_metan_class_tab_overall$weight <- (max(LobIn_NoOutlier_metan_class_tab$weight)*2) LobIn_NoOutlier_metan_class_tab_overall$k <- LobIn_NoOutlier_metan_class[["k"]] LobIn_NoOutlier_metan_class_tab_overall$controls <- sum(LobIn_NoOutlier_metan_class_tab$controls) LobIn_NoOutlier_metan_class_tab_overall$experimental <- sum(LobIn_NoOutlier_metan_class_tab$experimental) LobIn_NoOutlier_metan_class_tab_overall$Q <- LobIn_NoOutlier_metan_class[["Q"]] LobIn_NoOutlier_metan_class_tab_overall$Pq <- LobIn_NoOutlier_metan_class[["pval.Q"]] LobIn_NoOutlier_metan_class_tab_overall$tau <- LobIn_NoOutlier_metan_class[["tau"]] LobIn_NoOutlier_metan_class_tab_overall$I2 <- LobIn_NoOutlier_metan_class[["I2"]] LobIn_NoOutlier_metan_class_tab_overall <- LobIn_NoOutlier_metan_class_tab_overall %>% rename(MD = LobIn_NoOutlier_metan_class...TE.random...) LobIn_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(LobIn_NoOutlier_metan_class_tab))+1) LobIn_NoOutlier_metan_class_tab_overall$subgroup <- "Overall" LobIn_NoOutlier_metan_class_tab_overall$n <- sum(LobIn_NoOutlier_metan_class_tab$n) LobIn_NoOutlier_metan_class_sumtab <- rbind(LobIn_NoOutlier_metan_class_tab, LobIn_NoOutlier_metan_class_tab_overall) LobIn_NoOutlier_metan_class_sumtab$weight <- as.numeric(LobIn_NoOutlier_metan_class_sumtab$weight) LobIn_NoOutlier_metan_class_sumtab$row_number <- as.numeric(LobIn_NoOutlier_metan_class_sumtab$row_number) LobIn_NoOutlier_metan_class_sumtab$subgroup <- as.factor(LobIn_NoOutlier_metan_class_sumtab$subgroup) LobIn_NoOutlier_metan_class_sumtab$total = LobIn_NoOutlier_metan_class_sumtab$controls + LobIn_NoOutlier_metan_class_sumtab$experimental LobIn_NoOutlier_metan_class_sumtab$text <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(LobIn_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$text <- paste(LobIn_NoOutlier_metan_class_sumtab$text, format(round(LobIn_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$text <- paste(LobIn_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(LobIn_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) LobIn_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(LobIn_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(LobIn_NoOutlier_metan_class_sumtab,file="LobIn_NoOutlier_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(LobIn_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(LobIn_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(LobIn_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = LobIn_NoOutlier_metan_class_tab_overall$lower overall_max = LobIn_NoOutlier_metan_class_tab_overall$upper LobIn_NoOutlier_metan_class_ybreaks <- nrow(LobIn_NoOutlier_metan_class_sumtab) LobIn_NoOutlier_metan_class_sumtab <- LobIn_NoOutlier_metan_class_sumtab[order(LobIn_NoOutlier_metan_class_sumtab$row_number),] LobIn_NoOutlier_metan_class_forest <- ggplot(data= LobIn_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: LobIn_NoOutlier_metan_class_ybreaks, labels = LobIn_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.7, 1.2), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-2.7, xmax=-2, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=LobIn_NoOutlier_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=LobIn_NoOutlier_metan_class_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=LobIn_NoOutlier_metan_class_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0) pdf(file="LobIn_NoOutlier_metan_class_forest.pdf",width=9,height=5) LobIn_NoOutlier_metan_class_forest dev.off() ####### ## re-run using sub-grouping by individual drugs ## drop where <3 unique studies for any drug class LobIn_drugIndiv_counts <- LobIn_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) LobIn_drugIndiv_sum_counts <- LobIn_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) LobIn_drugIndiv_less3 = subset(LobIn_drugIndiv_sum_counts, n <3) str(LobIn_drugIndiv_less3) LobIn_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(LobIn_drugIndiv_less3$Indiv_drug_class_3) LobIn_drugIndiv_droplist <- LobIn_drugIndiv_less3$Indiv_drug_class_3 LobIn_data_min3drug <- LobIn_data %>% filter(!Indiv_drug_class_3 %in% LobIn_drugIndiv_droplist) ## run metan LobIn_metan_drugIndiv <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") LobIn_metan_drugIndiv <- update(LobIn_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug") ## make summary table of results LobIn_metan_drugIndiv_tab <- data.frame(LobIn_metan_drugIndiv[["TE.random.w"]]) LobIn_metan_drugIndiv_tab$drug <- LobIn_metan_drugIndiv[["bylevs"]] LobIn_metan_drugIndiv_tab$SE <- LobIn_metan_drugIndiv[["seTE.random.w"]] LobIn_metan_drugIndiv_tab$lower <- LobIn_metan_drugIndiv[["lower.random.w"]] LobIn_metan_drugIndiv_tab$upper <- LobIn_metan_drugIndiv[["upper.random.w"]] LobIn_metan_drugIndiv_tab$Pz <- LobIn_metan_drugIndiv[["pval.random.w"]] LobIn_metan_drugIndiv_tab$weight <- LobIn_metan_drugIndiv[["w.random.w"]] LobIn_metan_drugIndiv_tab$k <- LobIn_metan_drugIndiv[["k.w"]] LobIn_metan_drugIndiv_tab$controls <- LobIn_metan_drugIndiv[["n.c.w"]] LobIn_metan_drugIndiv_tab$experimental <- LobIn_metan_drugIndiv[["n.e.w"]] LobIn_metan_drugIndiv_tab$Q <- LobIn_metan_drugIndiv[["Q.w"]] LobIn_metan_drugIndiv_tab$Pq <- LobIn_metan_drugIndiv[["pval.Q.w"]] LobIn_metan_drugIndiv_tab$tau <- LobIn_metan_drugIndiv[["tau.w"]] LobIn_metan_drugIndiv_tab$I2 <- LobIn_metan_drugIndiv[["I2.w"]] LobIn_metan_drugIndiv_tab <- LobIn_metan_drugIndiv_tab %>% rename(MD = LobIn_metan_drugIndiv...TE.random.w...) LobIn_metan_drugIndiv_tab <- LobIn_metan_drugIndiv_tab[order(-LobIn_metan_drugIndiv_tab$MD),] LobIn_metan_drugIndiv_tab <- LobIn_metan_drugIndiv_tab %>% mutate(row_number= 1:n()) LobIn_metan_drugIndiv_tab$subgroup <- "Subgroup" LobIn_drugIndiv_sum_counts <- LobIn_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3) LobIn_metan_drugIndiv_tab <- merge(LobIn_drugIndiv_sum_counts, LobIn_metan_drugIndiv_tab, by="drug") LobIn_metan_drugIndiv_tab_overall <- data.frame(LobIn_metan_drugIndiv[["TE.random"]]) LobIn_metan_drugIndiv_tab_overall$drug <- "Overall" LobIn_metan_drugIndiv_tab_overall$SE <- LobIn_metan_drugIndiv[["seTE.random"]] LobIn_metan_drugIndiv_tab_overall$lower <- LobIn_metan_drugIndiv[["lower.random"]] LobIn_metan_drugIndiv_tab_overall$upper <- LobIn_metan_drugIndiv[["upper.random"]] LobIn_metan_drugIndiv_tab_overall$Pz <- LobIn_metan_drugIndiv[["pval.random"]] LobIn_metan_drugIndiv_tab_overall$weight <- (max(LobIn_metan_drugIndiv_tab$weight)*2) LobIn_metan_drugIndiv_tab_overall$k <- LobIn_metan_drugIndiv[["k"]] LobIn_metan_drugIndiv_tab_overall$controls <- sum(LobIn_metan_drugIndiv_tab$controls) LobIn_metan_drugIndiv_tab_overall$experimental <- sum(LobIn_metan_drugIndiv_tab$experimental) LobIn_metan_drugIndiv_tab_overall$Q <- LobIn_metan_drugIndiv[["Q"]] LobIn_metan_drugIndiv_tab_overall$Pq <- LobIn_metan_drugIndiv[["pval.Q"]] LobIn_metan_drugIndiv_tab_overall$tau <- LobIn_metan_drugIndiv[["tau"]] LobIn_metan_drugIndiv_tab_overall$I2 <- LobIn_metan_drugIndiv[["I2"]] LobIn_metan_drugIndiv_tab_overall <- LobIn_metan_drugIndiv_tab_overall %>% rename(MD = LobIn_metan_drugIndiv...TE.random...) LobIn_metan_drugIndiv_tab_overall$row_number <- ((nrow(LobIn_metan_drugIndiv_tab))+1) LobIn_metan_drugIndiv_tab_overall$subgroup <- "Overall" LobIn_metan_drugIndiv_tab_overall$n <- sum(LobIn_metan_drugIndiv_tab$n) LobIn_metan_drugIndiv_sumtab <- rbind(LobIn_metan_drugIndiv_tab, LobIn_metan_drugIndiv_tab_overall) LobIn_metan_drugIndiv_sumtab$weight <- as.numeric(LobIn_metan_drugIndiv_sumtab$weight) LobIn_metan_drugIndiv_sumtab$row_number <- as.numeric(LobIn_metan_drugIndiv_sumtab$row_number) LobIn_metan_drugIndiv_sumtab$subgroup <- as.factor(LobIn_metan_drugIndiv_sumtab$subgroup) LobIn_metan_drugIndiv_sumtab$total = LobIn_metan_drugIndiv_sumtab$controls + LobIn_metan_drugIndiv_sumtab$experimental LobIn_metan_drugIndiv_sumtab$text <- paste(format(round(LobIn_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(LobIn_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) LobIn_metan_drugIndiv_sumtab$text <- paste(LobIn_metan_drugIndiv_sumtab$text, format(round(LobIn_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) LobIn_metan_drugIndiv_sumtab$text <- paste(LobIn_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL) LobIn_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(LobIn_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) LobIn_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(LobIn_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) LobIn_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(LobIn_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) LobIn_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(LobIn_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) LobIn_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(LobIn_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(LobIn_metan_drugIndiv_sumtab,file="LobIn_metan_drugIndiv_sumtab.csv",sep=",") ## make forest plot label_bold <- ifelse(LobIn_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(LobIn_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(LobIn_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10") overall_min = LobIn_metan_drugIndiv_tab_overall$lower overall_max = LobIn_metan_drugIndiv_tab_overall$upper LobIn_metan_drugIndiv_ybreaks <- nrow(LobIn_metan_drugIndiv_sumtab) LobIn_metan_drugIndiv_sumtab <- LobIn_metan_drugIndiv_sumtab[order(LobIn_metan_drugIndiv_sumtab$row_number),] LobIn_metan_drugIndiv_forest <- ggplot(data= LobIn_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: LobIn_metan_drugIndiv_ybreaks, labels = LobIn_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-3.4, 1.2), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-2.7, xmax=-2, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=LobIn_metan_drugIndiv_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_drugIndiv_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_drugIndiv_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-2.7, 1.2)) pdf(file="LobIn_metan_drugIndiv_forest.pdf",width=9,height=5) LobIn_metan_drugIndiv_forest dev.off() ######## ## calculate sample size needed for average results ## mean comm_SD = LobIn_commSD_mean ## meta-analysis mean difference = LobIn_metan_class_main[["TE.random"]] ## calculate Cohen's d LobIn_cohen_d = LobIn_metan_class_main[["TE.random"]] / LobIn_commSD_mean LobIn_samplesize_av <- pwr.t.test(d = LobIn_cohen_d, power = 0.80, sig.level = 0.05) ## n = 16 - number in **each** group ## find number of studies with n > LobIn_samplesize_av LobIn_data$total = LobIn_data$LobIn_Int_size + LobIn_data$LobIn_Pla_size LobIn_pwrcount <- LobIn_data %>% group_by(total, Paper) %>% summarise(n = n()) LobIn_pwrcount_adequate = subset(LobIn_pwrcount, total >= 2*(LobIn_samplesize_av[["n"]])) write.table(LobIn_pwrcount_adequate,file="LobIn_pwrcount_adequate.csv",sep=",") ######## ## run meta-regressions on full LobIn dataset for continuous traits LobIn_metan_full <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## create metan with >3 for each level of categorical variables ## Background LobIn_bg_counts <- LobIn_data %>% group_by(Background_simple, Study) %>% summarise(n = n()) LobIn_bg_counts_sum <- LobIn_bg_counts %>% group_by(Background_simple) %>% summarise(n = n()) LobIn_bg_less3 = subset(LobIn_bg_counts_sum, n <3) LobIn_bg_less3$Background_simple <- droplevels(LobIn_bg_less3$Background_simple) LobIn_bg_droplist <- LobIn_bg_less3$Background_simple LobIn_data_min3bg <- LobIn_data %>% filter(!Background_simple %in% LobIn_bg_droplist) LobIn_metan_bg <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## Model LobIn_model_counts <- LobIn_data %>% group_by(Model_simple, Study) %>% summarise(n = n()) LobIn_model_counts_sum <- LobIn_model_counts %>% group_by(Model_simple) %>% summarise(n = n()) LobIn_model_less3 = subset(LobIn_model_counts_sum, n <3) LobIn_model_less3$Model_simple <- droplevels(LobIn_model_less3$Model_simple) LobIn_model_droplist <- LobIn_model_less3$Model_simple LobIn_data_min3model <- LobIn_data %>% filter(!Model_simple %in% LobIn_model_droplist) LobIn_metan_model <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## run metaregs LobIn_reg_Qual_score <- metareg(LobIn_metan_full, Qual_score) LobIn_reg_Qual_score_tab <- data.frame(LobIn_reg_Qual_score[["beta"]]) LobIn_reg_Qual_score_tab$se <- LobIn_reg_Qual_score[["se"]] LobIn_reg_Qual_score_tab$pval <- LobIn_reg_Qual_score[["pval"]] LobIn_reg_Qual_score_tab$beta <- LobIn_reg_Qual_score[["beta"]] LobIn_reg_Qual_score_tab <- LobIn_reg_Qual_score_tab[-c(1),] LobIn_reg_Qual_score_tab <- LobIn_reg_Qual_score_tab[-c(1)] LobIn_reg_Qual_score_tab$k <- LobIn_reg_Qual_score[["k"]] LobIn_reg_Qual_score_tab$r2 <- LobIn_reg_Qual_score[["R2"]] LobIn_reg_Qual_score_tab$var <- "Qual_score" LobIn_reg_Protocol <- metareg(LobIn_metan_full, Protocol) LobIn_reg_Protocol_tab <- data.frame(LobIn_reg_Protocol[["beta"]]) LobIn_reg_Protocol_tab$se <- LobIn_reg_Protocol[["se"]] LobIn_reg_Protocol_tab$pval <- LobIn_reg_Protocol[["pval"]] LobIn_reg_Protocol_tab$beta <- LobIn_reg_Protocol[["beta"]] LobIn_reg_Protocol_tab <- LobIn_reg_Protocol_tab[-c(1),] LobIn_reg_Protocol_tab <- LobIn_reg_Protocol_tab[-c(1)] LobIn_reg_Protocol_tab$k <- LobIn_reg_Protocol[["k"]] LobIn_reg_Protocol_tab$r2 <- LobIn_reg_Protocol[["R2"]] LobIn_reg_Protocol_tab$var <- "Protocol" LobIn_reg_Randomisation <- metareg(LobIn_metan_full, Randomisation) LobIn_reg_Randomisation_tab <- data.frame(LobIn_reg_Randomisation[["beta"]]) LobIn_reg_Randomisation_tab$se <- LobIn_reg_Randomisation[["se"]] LobIn_reg_Randomisation_tab$pval <- LobIn_reg_Randomisation[["pval"]] LobIn_reg_Randomisation_tab$beta <- LobIn_reg_Randomisation[["beta"]] LobIn_reg_Randomisation_tab <- LobIn_reg_Randomisation_tab[-c(1),] LobIn_reg_Randomisation_tab <- LobIn_reg_Randomisation_tab[-c(1)] LobIn_reg_Randomisation_tab$k <- LobIn_reg_Randomisation[["k"]] LobIn_reg_Randomisation_tab$r2 <- LobIn_reg_Randomisation[["R2"]] LobIn_reg_Randomisation_tab$var <- "Randomisation" LobIn_reg_Blinding <- metareg(LobIn_metan_full, Blinding) LobIn_reg_Blinding_tab <- data.frame(LobIn_reg_Blinding[["beta"]]) LobIn_reg_Blinding_tab$se <- LobIn_reg_Blinding[["se"]] LobIn_reg_Blinding_tab$pval <- LobIn_reg_Blinding[["pval"]] LobIn_reg_Blinding_tab$beta <- LobIn_reg_Blinding[["beta"]] LobIn_reg_Blinding_tab <- LobIn_reg_Blinding_tab[-c(1),] LobIn_reg_Blinding_tab <- LobIn_reg_Blinding_tab[-c(1)] LobIn_reg_Blinding_tab$k <- LobIn_reg_Blinding[["k"]] LobIn_reg_Blinding_tab$r2 <- LobIn_reg_Blinding[["R2"]] LobIn_reg_Blinding_tab$var <- "Blinding" LobIn_reg_Power_calculation <- metareg(LobIn_metan_full, Power_calculation) LobIn_reg_Power_calculation_tab <- data.frame(LobIn_reg_Power_calculation[["beta"]]) LobIn_reg_Power_calculation_tab$se <- LobIn_reg_Power_calculation[["se"]] LobIn_reg_Power_calculation_tab$pval <- LobIn_reg_Power_calculation[["pval"]] LobIn_reg_Power_calculation_tab$beta <- LobIn_reg_Power_calculation[["beta"]] LobIn_reg_Power_calculation_tab <- LobIn_reg_Power_calculation_tab[-c(1),] LobIn_reg_Power_calculation_tab <- LobIn_reg_Power_calculation_tab[-c(1)] LobIn_reg_Power_calculation_tab$k <- LobIn_reg_Power_calculation[["k"]] LobIn_reg_Power_calculation_tab$r2 <- LobIn_reg_Power_calculation[["R2"]] LobIn_reg_Power_calculation_tab$var <- "Power_calculation" LobIn_reg_Chol_per <- metareg(LobIn_metan_full, Chol_per) LobIn_reg_Chol_per_tab <- data.frame(LobIn_reg_Chol_per[["beta"]]) LobIn_reg_Chol_per_tab$se <- LobIn_reg_Chol_per[["se"]] LobIn_reg_Chol_per_tab$pval <- LobIn_reg_Chol_per[["pval"]] LobIn_reg_Chol_per_tab$beta <- LobIn_reg_Chol_per[["beta"]] LobIn_reg_Chol_per_tab <- LobIn_reg_Chol_per_tab[-c(1),] LobIn_reg_Chol_per_tab <- LobIn_reg_Chol_per_tab[-c(1)] LobIn_reg_Chol_per_tab$k <- LobIn_reg_Chol_per[["k"]] LobIn_reg_Chol_per_tab$r2 <- LobIn_reg_Chol_per[["R2"]] LobIn_reg_Chol_per_tab$var <- "Chol_per" LobIn_reg_log_FructGluc_per <- metareg(LobIn_metan_full, log_FructGluc_per) LobIn_reg_log_FructGluc_per_tab <- data.frame(LobIn_reg_log_FructGluc_per[["beta"]]) LobIn_reg_log_FructGluc_per_tab$se <- LobIn_reg_log_FructGluc_per[["se"]] LobIn_reg_log_FructGluc_per_tab$pval <- LobIn_reg_log_FructGluc_per[["pval"]] LobIn_reg_log_FructGluc_per_tab$beta <- LobIn_reg_log_FructGluc_per[["beta"]] LobIn_reg_log_FructGluc_per_tab <- LobIn_reg_log_FructGluc_per_tab[-c(1),] LobIn_reg_log_FructGluc_per_tab <- LobIn_reg_log_FructGluc_per_tab[-c(1)] LobIn_reg_log_FructGluc_per_tab$k <- LobIn_reg_log_FructGluc_per[["k"]] LobIn_reg_log_FructGluc_per_tab$r2 <- LobIn_reg_log_FructGluc_per[["R2"]] LobIn_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per" LobIn_reg_log_Sucr_kcal <- metareg(LobIn_metan_full, log_Sucr_kcal) LobIn_reg_log_Sucr_kcal_tab <- data.frame(LobIn_reg_log_Sucr_kcal[["beta"]]) LobIn_reg_log_Sucr_kcal_tab$se <- LobIn_reg_log_Sucr_kcal[["se"]] LobIn_reg_log_Sucr_kcal_tab$pval <- LobIn_reg_log_Sucr_kcal[["pval"]] LobIn_reg_log_Sucr_kcal_tab$beta <- LobIn_reg_log_Sucr_kcal[["beta"]] LobIn_reg_log_Sucr_kcal_tab <- LobIn_reg_log_Sucr_kcal_tab[-c(1),] LobIn_reg_log_Sucr_kcal_tab <- LobIn_reg_log_Sucr_kcal_tab[-c(1)] LobIn_reg_log_Sucr_kcal_tab$k <- LobIn_reg_log_Sucr_kcal[["k"]] LobIn_reg_log_Sucr_kcal_tab$r2 <- LobIn_reg_log_Sucr_kcal[["R2"]] LobIn_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal" LobIn_reg_log_Fat_kcal <- metareg(LobIn_metan_full, log_Fat_kcal) LobIn_reg_log_Fat_kcal_tab <- data.frame(LobIn_reg_log_Fat_kcal[["beta"]]) LobIn_reg_log_Fat_kcal_tab$se <- LobIn_reg_log_Fat_kcal[["se"]] LobIn_reg_log_Fat_kcal_tab$pval <- LobIn_reg_log_Fat_kcal[["pval"]] LobIn_reg_log_Fat_kcal_tab$beta <- LobIn_reg_log_Fat_kcal[["beta"]] LobIn_reg_log_Fat_kcal_tab <- LobIn_reg_log_Fat_kcal_tab[-c(1),] LobIn_reg_log_Fat_kcal_tab <- LobIn_reg_log_Fat_kcal_tab[-c(1)] LobIn_reg_log_Fat_kcal_tab$k <- LobIn_reg_log_Fat_kcal[["k"]] LobIn_reg_log_Fat_kcal_tab$r2 <- LobIn_reg_log_Fat_kcal[["R2"]] LobIn_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal" LobIn_reg_log_Age_start <- metareg(LobIn_metan_full, log_Age_start) LobIn_reg_log_Age_start_tab <- data.frame(LobIn_reg_log_Age_start[["beta"]]) LobIn_reg_log_Age_start_tab$se <- LobIn_reg_log_Age_start[["se"]] LobIn_reg_log_Age_start_tab$pval <- LobIn_reg_log_Age_start[["pval"]] LobIn_reg_log_Age_start_tab$beta <- LobIn_reg_log_Age_start[["beta"]] LobIn_reg_log_Age_start_tab <- LobIn_reg_log_Age_start_tab[-c(1),] LobIn_reg_log_Age_start_tab <- LobIn_reg_log_Age_start_tab[-c(1)] LobIn_reg_log_Age_start_tab$k <- LobIn_reg_log_Age_start[["k"]] LobIn_reg_log_Age_start_tab$r2 <- LobIn_reg_log_Age_start[["R2"]] LobIn_reg_log_Age_start_tab$var <- "log_Age_start" LobIn_reg_log_Duration <- metareg(LobIn_metan_full, log_Duration) LobIn_reg_log_Duration_tab <- data.frame(LobIn_reg_log_Duration[["beta"]]) LobIn_reg_log_Duration_tab$se <- LobIn_reg_log_Duration[["se"]] LobIn_reg_log_Duration_tab$pval <- LobIn_reg_log_Duration[["pval"]] LobIn_reg_log_Duration_tab$beta <- LobIn_reg_log_Duration[["beta"]] LobIn_reg_log_Duration_tab <- LobIn_reg_log_Duration_tab[-c(1),] LobIn_reg_log_Duration_tab <- LobIn_reg_log_Duration_tab[-c(1)] LobIn_reg_log_Duration_tab$k <- LobIn_reg_log_Duration[["k"]] LobIn_reg_log_Duration_tab$r2 <- LobIn_reg_log_Duration[["R2"]] LobIn_reg_log_Duration_tab$var <- "log_Duration" LobIn_reg_log_Age_end <- metareg(LobIn_metan_full, log_Age_end) LobIn_reg_log_Age_end_tab <- data.frame(LobIn_reg_log_Age_end[["beta"]]) LobIn_reg_log_Age_end_tab$se <- LobIn_reg_log_Age_end[["se"]] LobIn_reg_log_Age_end_tab$pval <- LobIn_reg_log_Age_end[["pval"]] LobIn_reg_log_Age_end_tab$beta <- LobIn_reg_log_Age_end[["beta"]] LobIn_reg_log_Age_end_tab <- LobIn_reg_log_Age_end_tab[-c(1),] LobIn_reg_log_Age_end_tab <- LobIn_reg_log_Age_end_tab[-c(1)] LobIn_reg_log_Age_end_tab$k <- LobIn_reg_log_Age_end[["k"]] LobIn_reg_log_Age_end_tab$r2 <- LobIn_reg_log_Age_end[["R2"]] LobIn_reg_log_Age_end_tab$var <- "log_Age_end" LobIn_reg_log_Wt_change <- metareg(LobIn_metan_full, log_Wt_change) LobIn_reg_log_Wt_change_tab <- data.frame(LobIn_reg_log_Wt_change[["beta"]]) LobIn_reg_log_Wt_change_tab$se <- LobIn_reg_log_Wt_change[["se"]] LobIn_reg_log_Wt_change_tab$pval <- LobIn_reg_log_Wt_change[["pval"]] LobIn_reg_log_Wt_change_tab$beta <- LobIn_reg_log_Wt_change[["beta"]] LobIn_reg_log_Wt_change_tab <- LobIn_reg_log_Wt_change_tab[-c(1),] LobIn_reg_log_Wt_change_tab <- LobIn_reg_log_Wt_change_tab[-c(1)] LobIn_reg_log_Wt_change_tab$k <- LobIn_reg_log_Wt_change[["k"]] LobIn_reg_log_Wt_change_tab$r2 <- LobIn_reg_log_Wt_change[["R2"]] LobIn_reg_log_Wt_change_tab$var <- "log_Wt_change" LobIn_reg_log_Gluc_change <- metareg(LobIn_metan_full, log_Gluc_change) LobIn_reg_log_Gluc_change_tab <- data.frame(LobIn_reg_log_Gluc_change[["beta"]]) LobIn_reg_log_Gluc_change_tab$se <- LobIn_reg_log_Gluc_change[["se"]] LobIn_reg_log_Gluc_change_tab$pval <- LobIn_reg_log_Gluc_change[["pval"]] LobIn_reg_log_Gluc_change_tab$beta <- LobIn_reg_log_Gluc_change[["beta"]] LobIn_reg_log_Gluc_change_tab <- LobIn_reg_log_Gluc_change_tab[-c(1),] LobIn_reg_log_Gluc_change_tab <- LobIn_reg_log_Gluc_change_tab[-c(1)] LobIn_reg_log_Gluc_change_tab$k <- LobIn_reg_log_Gluc_change[["k"]] LobIn_reg_log_Gluc_change_tab$r2 <- LobIn_reg_log_Gluc_change[["R2"]] LobIn_reg_log_Gluc_change_tab$var <- "log_Gluc_change" LobIn_reg_log_Insul_change <- metareg(LobIn_metan_full, log_Insul_change) LobIn_reg_log_Insul_change_tab <- data.frame(LobIn_reg_log_Insul_change[["beta"]]) LobIn_reg_log_Insul_change_tab$se <- LobIn_reg_log_Insul_change[["se"]] LobIn_reg_log_Insul_change_tab$pval <- LobIn_reg_log_Insul_change[["pval"]] LobIn_reg_log_Insul_change_tab$beta <- LobIn_reg_log_Insul_change[["beta"]] LobIn_reg_log_Insul_change_tab <- LobIn_reg_log_Insul_change_tab[-c(1),] LobIn_reg_log_Insul_change_tab <- LobIn_reg_log_Insul_change_tab[-c(1)] LobIn_reg_log_Insul_change_tab$k <- LobIn_reg_log_Insul_change[["k"]] LobIn_reg_log_Insul_change_tab$r2 <- LobIn_reg_log_Insul_change[["R2"]] LobIn_reg_log_Insul_change_tab$var <- "log_Insul_change" LobIn_reg_Sex <- metareg(LobIn_metan_full, Sex) LobIn_reg_Sex_tab <- data.frame(LobIn_reg_Sex[["beta"]]) LobIn_reg_Sex_tab$se <- LobIn_reg_Sex[["se"]] LobIn_reg_Sex_tab$pval <- LobIn_reg_Sex[["pval"]] LobIn_reg_Sex_tab$beta <- LobIn_reg_Sex[["beta"]] LobIn_reg_Sex_tab <- LobIn_reg_Sex_tab[-c(1),] LobIn_reg_Sex_tab <- LobIn_reg_Sex_tab[-c(1)] LobIn_reg_Sex_tab$k <- LobIn_reg_Sex[["k"]] LobIn_reg_Sex_tab$r2 <- NA LobIn_reg_Sex_tab$var <- rownames(LobIn_reg_Sex_tab) LobIn_reg_Sex_overall_tab <- data.frame(LobIn_reg_Sex[["QMp"]]) LobIn_reg_Sex_overall_tab$se <- NA LobIn_reg_Sex_overall_tab$pval <- LobIn_reg_Sex[["QMp"]] LobIn_reg_Sex_overall_tab$beta <- NA LobIn_reg_Sex_overall_tab <- LobIn_reg_Sex_overall_tab[-c(1)] LobIn_reg_Sex_overall_tab$k <- LobIn_reg_Sex[["k"]] LobIn_reg_Sex_overall_tab$r2 <- LobIn_reg_Sex[["R2"]] LobIn_reg_Sex_overall_tab$var <- "Sex_overall" LobIn_reg_Sex_tab <- rbind(LobIn_reg_Sex_tab, LobIn_reg_Sex_overall_tab) LobIn_reg_Drug_dose <- metareg(LobIn_metan_drugIndiv, Drug_dose) LobIn_reg_Drug_dose_tab <- data.frame(LobIn_reg_Drug_dose[["beta"]]) LobIn_reg_Drug_dose_tab$se <- LobIn_reg_Drug_dose[["se"]] LobIn_reg_Drug_dose_tab$pval <- LobIn_reg_Drug_dose[["pval"]] LobIn_reg_Drug_dose_tab$beta <- LobIn_reg_Drug_dose[["beta"]] LobIn_reg_Drug_dose_tab <- LobIn_reg_Drug_dose_tab[-c(1),] LobIn_reg_Drug_dose_tab <- LobIn_reg_Drug_dose_tab[-c(1)] LobIn_reg_Drug_dose_tab$k <- LobIn_reg_Drug_dose[["k"]] LobIn_reg_Drug_dose_tab$r2 <- LobIn_reg_Drug_dose[["R2"]] LobIn_reg_Drug_dose_tab$var <- "Drug_dose" LobIn_reg_Indiv_drug_class_3 <- metareg(LobIn_metan_drugIndiv, Indiv_drug_class_3) LobIn_reg_Indiv_drug_class_3_tab <- data.frame(LobIn_reg_Indiv_drug_class_3[["beta"]]) LobIn_reg_Indiv_drug_class_3_tab$se <- LobIn_reg_Indiv_drug_class_3[["se"]] LobIn_reg_Indiv_drug_class_3_tab$pval <- LobIn_reg_Indiv_drug_class_3[["pval"]] LobIn_reg_Indiv_drug_class_3_tab$beta <- LobIn_reg_Indiv_drug_class_3[["beta"]] LobIn_reg_Indiv_drug_class_3_tab <- LobIn_reg_Indiv_drug_class_3_tab[-c(1),] LobIn_reg_Indiv_drug_class_3_tab <- LobIn_reg_Indiv_drug_class_3_tab[-c(1)] LobIn_reg_Indiv_drug_class_3_tab$k <- LobIn_reg_Indiv_drug_class_3[["k"]] LobIn_reg_Indiv_drug_class_3_tab$r2 <- NA LobIn_reg_Indiv_drug_class_3_tab$var <- rownames(LobIn_reg_Indiv_drug_class_3_tab) LobIn_reg_Indiv_drug_class_3_overall_tab <- data.frame(LobIn_reg_Indiv_drug_class_3[["QMp"]]) LobIn_reg_Indiv_drug_class_3_overall_tab$se <- NA LobIn_reg_Indiv_drug_class_3_overall_tab$pval <- LobIn_reg_Indiv_drug_class_3[["QMp"]] LobIn_reg_Indiv_drug_class_3_overall_tab$beta <- NA LobIn_reg_Indiv_drug_class_3_overall_tab <- LobIn_reg_Indiv_drug_class_3_overall_tab[-c(1)] LobIn_reg_Indiv_drug_class_3_overall_tab$k <- LobIn_reg_Indiv_drug_class_3[["k"]] LobIn_reg_Indiv_drug_class_3_overall_tab$r2 <- LobIn_reg_Indiv_drug_class_3[["R2"]] LobIn_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall" LobIn_reg_Indiv_drug_class_3_tab <- rbind(LobIn_reg_Indiv_drug_class_3_tab, LobIn_reg_Indiv_drug_class_3_overall_tab) LobIn_reg_Model_simple <- metareg(LobIn_metan_model, Model_simple) LobIn_reg_Model_simple_tab <- data.frame(LobIn_reg_Model_simple[["beta"]]) LobIn_reg_Model_simple_tab$se <- LobIn_reg_Model_simple[["se"]] LobIn_reg_Model_simple_tab$pval <- LobIn_reg_Model_simple[["pval"]] LobIn_reg_Model_simple_tab$beta <- LobIn_reg_Model_simple[["beta"]] LobIn_reg_Model_simple_tab <- LobIn_reg_Model_simple_tab[-c(1),] LobIn_reg_Model_simple_tab <- LobIn_reg_Model_simple_tab[-c(1)] LobIn_reg_Model_simple_tab$k <- LobIn_reg_Model_simple[["k"]] LobIn_reg_Model_simple_tab$r2 <- NA LobIn_reg_Model_simple_tab$var <- rownames(LobIn_reg_Model_simple_tab) LobIn_reg_Model_simple_overall_tab <- data.frame(LobIn_reg_Model_simple[["QMp"]]) LobIn_reg_Model_simple_overall_tab$se <- NA LobIn_reg_Model_simple_overall_tab$pval <- LobIn_reg_Model_simple[["QMp"]] LobIn_reg_Model_simple_overall_tab$beta <- NA LobIn_reg_Model_simple_overall_tab <- LobIn_reg_Model_simple_overall_tab[-c(1)] LobIn_reg_Model_simple_overall_tab$k <- LobIn_reg_Model_simple[["k"]] LobIn_reg_Model_simple_overall_tab$r2 <- LobIn_reg_Model_simple[["R2"]] LobIn_reg_Model_simple_overall_tab$var <- "Model_simple_overall" LobIn_reg_Model_simple_tab <- rbind(LobIn_reg_Model_simple_tab, LobIn_reg_Model_simple_overall_tab) LobIn_reg_Background_simple <- metareg(LobIn_metan_bg, Background_simple) LobIn_reg_Background_simple_tab <- data.frame(LobIn_reg_Background_simple[["beta"]]) LobIn_reg_Background_simple_tab$se <- LobIn_reg_Background_simple[["se"]] LobIn_reg_Background_simple_tab$pval <- LobIn_reg_Background_simple[["pval"]] LobIn_reg_Background_simple_tab$beta <- LobIn_reg_Background_simple[["beta"]] LobIn_reg_Background_simple_tab <- LobIn_reg_Background_simple_tab[-c(1),] LobIn_reg_Background_simple_tab <- LobIn_reg_Background_simple_tab[-c(1)] LobIn_reg_Background_simple_tab$k <- LobIn_reg_Background_simple[["k"]] LobIn_reg_Background_simple_tab$r2 <- NA LobIn_reg_Background_simple_tab$var <- rownames(LobIn_reg_Background_simple_tab) LobIn_reg_Background_simple_overall_tab <- data.frame(LobIn_reg_Background_simple[["QMp"]]) LobIn_reg_Background_simple_overall_tab$se <- NA LobIn_reg_Background_simple_overall_tab$pval <- LobIn_reg_Background_simple[["QMp"]] LobIn_reg_Background_simple_overall_tab$beta <- NA LobIn_reg_Background_simple_overall_tab <- LobIn_reg_Background_simple_overall_tab[-c(1)] LobIn_reg_Background_simple_overall_tab$k <- LobIn_reg_Background_simple[["k"]] LobIn_reg_Background_simple_overall_tab$r2 <- LobIn_reg_Background_simple[["R2"]] LobIn_reg_Background_simple_overall_tab$var <- "Background_simple_overall" LobIn_reg_Background_simple_tab <- rbind(LobIn_reg_Background_simple_tab, LobIn_reg_Background_simple_overall_tab) LobIn_metareg_sumtab <- rbind(LobIn_reg_Qual_score_tab, LobIn_reg_Protocol_tab, LobIn_reg_Randomisation_tab, LobIn_reg_Blinding_tab, LobIn_reg_Power_calculation_tab, LobIn_reg_Chol_per_tab, LobIn_reg_log_FructGluc_per_tab, LobIn_reg_log_Sucr_kcal_tab, LobIn_reg_log_Fat_kcal_tab, LobIn_reg_log_Age_start_tab, LobIn_reg_log_Duration_tab, LobIn_reg_log_Age_end_tab, LobIn_reg_log_Wt_change_tab, LobIn_reg_log_Gluc_change_tab, LobIn_reg_log_Insul_change_tab, LobIn_reg_Sex_tab, LobIn_reg_Drug_dose_tab, LobIn_reg_Indiv_drug_class_3_tab, LobIn_reg_Model_simple_tab, LobIn_reg_Background_simple_tab) LobIn_metareg_sumtab$text <- paste(format(round(LobIn_metareg_sumtab$beta, 1), nsmall = 1), format(round(LobIn_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) LobIn_metareg_sumtab$text <- paste(LobIn_metareg_sumtab$text, "", sep = ")", collapse = NULL) LobIn_metareg_sumtab$pval_2dig <- paste((signif(LobIn_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) LobIn_metareg_sumtab$r2_2dig <- paste(format(round(LobIn_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(LobIn_metareg_sumtab,file="LobIn_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="LobIn_bubble_Wt_change.pdf",width=6,height=6) LobIn_bubble_Wt_change <- bubble(LobIn_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) LobIn_bubble_Wt_change dev.off() pdf(file="LobIn_bubble_Fat_kcal.pdf",width=6,height=6) LobIn_bubble_Fat_kcal <- bubble(LobIn_reg_log_Fat_kcal, xlab = "Log fat in diet (% kcal)", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) LobIn_bubble_Fat_kcal dev.off() pdf(file="LobIn_bubble_Qual_score.pdf",width=6,height=6) LobIn_bubble_Qual_score <- bubble(LobIn_reg_Qual_score, xlab = "Study quality score (0-4)", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) LobIn_bubble_Qual_score dev.off() ########## ##### run multiple meta-regression ## create data subset including >3 for each model >3 for background, and >3 for each drug ## start with dataset containing >3 for each background = LobIn_data_min3bg LobIn_data_min3bg_modelcounts <- LobIn_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) LobIn_data_min3bg_modelcounts_sum <- LobIn_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) LobIn_data_min3bg_model_less3 = subset(LobIn_data_min3bg_modelcounts_sum, n <3) LobIn_data_min3bg_model_less3$Model_simple <- droplevels(LobIn_data_min3bg_model_less3$Model_simple) LobIn_data_min3bg_model_droplist <- LobIn_data_min3bg_model_less3$Model_simple LobIn_multimetareg_data <- LobIn_data_min3bg %>% filter(!Model_simple %in% LobIn_data_min3bg_model_droplist) ## run multiple meta-regression ## create data subset including >3 for each model and >3 for background ## start with dataset containing >3 for each background = LobIn_data_min3bg LobIn_data_min3bg_modelcounts <- LobIn_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) LobIn_data_min3bg_modelcounts_sum <- LobIn_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) LobIn_data_min3bg_model_less3 = subset(LobIn_data_min3bg_modelcounts_sum, n <3) LobIn_data_min3bg_model_less3$Model_simple <- droplevels(LobIn_data_min3bg_model_less3$Model_simple) LobIn_data_min3bg_model_droplist <- LobIn_data_min3bg_model_less3$Model_simple LobIn_multimetareg_data <- LobIn_data_min3bg %>% filter(!Model_simple %in% LobIn_data_min3bg_model_droplist) ## Run metan LobIn_multimetareg_metan <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) LobIn_multmetareg_tab <- data.frame(LobIn_multimetareg_metan$studlab) LobIn_multmetareg_tab$yi <- LobIn_multimetareg_metan[["TE"]] LobIn_multmetareg_tab$sei <- LobIn_multimetareg_metan[["seTE"]] LobIn_multmetareg_tab$Model_simple <- LobIn_multimetareg_metan[["data"]][["Model_simple"]] LobIn_multmetareg_tab$Background_simple <- LobIn_multimetareg_metan[["data"]][["Background_simple"]] LobIn_multmetareg_tab$Sex <- LobIn_multimetareg_metan[["data"]][["Sex"]] LobIn_multmetareg_tab$Indiv_drug_class_3 <- LobIn_multimetareg_metan[["data"]][["Indiv_drug_class_3"]] LobIn_multmetareg_tab$log_Fat_kcal <- LobIn_multimetareg_metan[["data"]][["log_Fat_kcal"]] LobIn_multmetareg_tab$log_Age_start <- LobIn_multimetareg_metan[["data"]][["log_Age_start"]] LobIn_multmetareg_tab$log_Age_end <- LobIn_multimetareg_metan[["data"]][["log_Age_end"]] LobIn_multmetareg_tab$log_Duration <- LobIn_multimetareg_metan[["data"]][["log_Duration"]] LobIn_multmetareg_tab$log_Wt_change <- LobIn_multimetareg_metan[["data"]][["log_Wt_change"]] LobIn_multmetareg_tab$log_Gluc_change <- LobIn_multimetareg_metan[["data"]][["log_Gluc_change"]] LobIn_multmetareg_tab$log_Insul_change <- LobIn_multimetareg_metan[["data"]][["log_Insul_change"]] LobIn_multmetareg_tab$Qual_score <- LobIn_multimetareg_metan[["data"]][["Qual_score"]] LobIn_multmetareg_tab_cor <- cor(LobIn_multmetareg_tab[,8:15], use="complete.obs") LobIn_multmetareg_tab_cor library(PerformanceAnalytics) chart.Correlation(LobIn_multmetareg_tab[,8:15], use="complete.obs") ## high correlation between age_start and age_end therefore drop age_end from model ## also have to drop insulin change due to insufficient data library(dmetar) LobIn_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = LobIn_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE) LobIn_multi_intereference1 sink("LobIn_multi_intereference1.txt") print(LobIn_multi_intereference1) sink() ## run multi-metareg for top model 1 LobIn_multmetareg_1 <- rma(yi = yi, sei = sei, data = LobIn_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + log_Gluc_change, test="knha") LobIn_multmetareg_1_tab <- coef(summary(LobIn_multmetareg_1)) LobIn_multmetareg_1_tab$rownames <- rownames(LobIn_multmetareg_1_tab) LobIn_multmetareg_1_tab$mod1_text <- paste(format(round(LobIn_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(LobIn_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) LobIn_multmetareg_1_tab$mod1_text <- paste(LobIn_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL) LobIn_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(LobIn_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL) ## check robustness using permutation test LobIn_multmetareg_1_permut <- permutest(LobIn_multmetareg_1) sink("LobIn_multmetareg_1_permut.txt") print(LobIn_multmetareg_1_permut) sink() ## insufficient data to repeat multiple meta-reg using individual drugs in addition to other variables LobIn_multmetareg_sumtab <- LobIn_multmetareg_1_tab write.table(LobIn_multmetareg_sumtab, "LobIn_multmetareg_sumtab.csv", sep=",") ## See if meta-regression results change after removal of weight-loss diets library(tidyverse) LobIn_NoWtLoss_data <- LobIn_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') LobIn_NoWtLoss_metan_full <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") LobIn_NoWtLoss_reg_log_Wt_change <- metareg(LobIn_NoWtLoss_metan_full, log_Wt_change) LobIn_NoWtLoss_reg_log_Wt_change_tab <- data.frame(LobIn_NoWtLoss_reg_log_Wt_change[["beta"]]) LobIn_NoWtLoss_reg_log_Wt_change_tab$se <- LobIn_NoWtLoss_reg_log_Wt_change[["se"]] LobIn_NoWtLoss_reg_log_Wt_change_tab$pval <- LobIn_NoWtLoss_reg_log_Wt_change[["pval"]] LobIn_NoWtLoss_reg_log_Wt_change_tab$beta <- LobIn_NoWtLoss_reg_log_Wt_change[["beta"]] LobIn_NoWtLoss_reg_log_Wt_change_tab <- LobIn_NoWtLoss_reg_log_Wt_change_tab[-c(1),] LobIn_NoWtLoss_reg_log_Wt_change_tab <- LobIn_NoWtLoss_reg_log_Wt_change_tab[-c(1)] LobIn_NoWtLoss_reg_log_Wt_change_tab$k <- LobIn_NoWtLoss_reg_log_Wt_change[["k"]] LobIn_NoWtLoss_reg_log_Wt_change_tab$r2 <- LobIn_NoWtLoss_reg_log_Wt_change[["R2"]] LobIn_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change" LobIn_NoWtLoss_reg_log_Gluc_change <- metareg(LobIn_NoWtLoss_metan_full, log_Gluc_change) LobIn_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(LobIn_NoWtLoss_reg_log_Gluc_change[["beta"]]) LobIn_NoWtLoss_reg_log_Gluc_change_tab$se <- LobIn_NoWtLoss_reg_log_Gluc_change[["se"]] LobIn_NoWtLoss_reg_log_Gluc_change_tab$pval <- LobIn_NoWtLoss_reg_log_Gluc_change[["pval"]] LobIn_NoWtLoss_reg_log_Gluc_change_tab$beta <- LobIn_NoWtLoss_reg_log_Gluc_change[["beta"]] LobIn_NoWtLoss_reg_log_Gluc_change_tab <- LobIn_NoWtLoss_reg_log_Gluc_change_tab[-c(1),] LobIn_NoWtLoss_reg_log_Gluc_change_tab <- LobIn_NoWtLoss_reg_log_Gluc_change_tab[-c(1)] LobIn_NoWtLoss_reg_log_Gluc_change_tab$k <- LobIn_NoWtLoss_reg_log_Gluc_change[["k"]] LobIn_NoWtLoss_reg_log_Gluc_change_tab$r2 <- LobIn_NoWtLoss_reg_log_Gluc_change[["R2"]] LobIn_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change" LobIn_NoWtLoss_reg_log_Insul_change <- metareg(LobIn_NoWtLoss_metan_full, log_Insul_change) LobIn_NoWtLoss_reg_log_Insul_change_tab <- data.frame(LobIn_NoWtLoss_reg_log_Insul_change[["beta"]]) LobIn_NoWtLoss_reg_log_Insul_change_tab$se <- LobIn_NoWtLoss_reg_log_Insul_change[["se"]] LobIn_NoWtLoss_reg_log_Insul_change_tab$pval <- LobIn_NoWtLoss_reg_log_Insul_change[["pval"]] LobIn_NoWtLoss_reg_log_Insul_change_tab$beta <- LobIn_NoWtLoss_reg_log_Insul_change[["beta"]] LobIn_NoWtLoss_reg_log_Insul_change_tab <- LobIn_NoWtLoss_reg_log_Insul_change_tab[-c(1),] LobIn_NoWtLoss_reg_log_Insul_change_tab <- LobIn_NoWtLoss_reg_log_Insul_change_tab[-c(1)] LobIn_NoWtLoss_reg_log_Insul_change_tab$k <- LobIn_NoWtLoss_reg_log_Insul_change[["k"]] LobIn_NoWtLoss_reg_log_Insul_change_tab$r2 <- LobIn_NoWtLoss_reg_log_Insul_change[["R2"]] LobIn_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change" LobIn_NoWtLoss_metareg_sumtab <- rbind(LobIn_NoWtLoss_reg_log_Wt_change_tab, LobIn_NoWtLoss_reg_log_Gluc_change_tab, LobIn_NoWtLoss_reg_log_Insul_change_tab) LobIn_NoWtLoss_metareg_sumtab$text <- paste(format(round(LobIn_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(LobIn_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) LobIn_NoWtLoss_metareg_sumtab$text <- paste(LobIn_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL) LobIn_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(LobIn_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) LobIn_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(LobIn_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(LobIn_NoWtLoss_metareg_sumtab,file="LobIn_NoWtLoss_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="LobIn_NoWtLoss_bubble_weight_change.pdf",width=6,height=6) LobIn_NoWtLoss_bubble_weight_change <- bubble(LobIn_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) LobIn_NoWtLoss_bubble_weight_change dev.off() ## following on from LobIn analysis setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/Bal_out") ######## ## Analysis for histological lobular inflammation grade (Bal) ######## ## Power analysis library(pwr) ## calculate common SD full_data$Bal_Int_SD2 <- full_data$Bal_Int_SD*full_data$Bal_Int_SD full_data$Bal_Pla_SD2 <- full_data$Bal_Pla_SD*full_data$Bal_Pla_SD full_data$Bal_comm_SD <- sqrt(((full_data$Bal_Int_SD2+full_data$Bal_Pla_SD2)/2)) full_data$Bal_m_diff <- full_data$Bal_Pla_Mean-full_data$Bal_Int_Mean full_data$Bal_eff_size <- full_data$Bal_m_diff/full_data$Bal_comm_SD library(tidyr) Bal_data <- full_data Bal_data <- Bal_data %>% drop_na(Bal_eff_size) Bal_data$power <- pwr.t2n.test(n1 = Bal_data$Bal_Int_size, n2 = Bal_data$Bal_Pla_size, d = Bal_data$Bal_eff_size)$power write.table(Bal_data$power,file="Bal_data_power.csv",sep=",") hist(Bal_data$power) Bal_dens_power <- density(Bal_data$power) pdf(file="Bal_kernel_power_v1.pdf") plot(Bal_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)") polygon(Bal_dens_power, col="red", border="blue") dev.off() ## load packages for metan library(dmetar) library(meta) library(metafor) library(readxl) max.print = 100000 ## drop where <3 unique studies for any drug class Bal_drugsclass_counts <- Bal_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Bal_class_counts <- Bal_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Bal_class_less3 = subset(Bal_class_counts, n <3) str(Bal_class_less3) Bal_class_less3$Drug_Class_new_1_all <- droplevels(Bal_class_less3$Drug_Class_new_1_all) Bal_class_droplist <- Bal_class_less3$Drug_Class_new_1_all Bal_data_min3class <- Bal_data %>% filter(!Drug_Class_new_1_all %in% Bal_class_droplist) ## run metan Bal_metan_class_main <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Bal_metan_class <- update(Bal_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results Bal_metan_class_tab <- data.frame(Bal_metan_class[["TE.random.w"]]) Bal_metan_class_tab$drug <- Bal_metan_class[["bylevs"]] Bal_metan_class_tab$SE <- Bal_metan_class[["seTE.random.w"]] Bal_metan_class_tab$lower <- Bal_metan_class[["lower.random.w"]] Bal_metan_class_tab$upper <- Bal_metan_class[["upper.random.w"]] Bal_metan_class_tab$Pz <- Bal_metan_class[["pval.random.w"]] Bal_metan_class_tab$weight <- Bal_metan_class[["w.random.w"]] Bal_metan_class_tab$k <- Bal_metan_class[["k.w"]] Bal_metan_class_tab$controls <- Bal_metan_class[["n.c.w"]] Bal_metan_class_tab$experimental <- Bal_metan_class[["n.e.w"]] Bal_metan_class_tab$Q <- Bal_metan_class[["Q.w"]] Bal_metan_class_tab$Pq <- Bal_metan_class[["pval.Q.w"]] Bal_metan_class_tab$tau <- Bal_metan_class[["tau.w"]] Bal_metan_class_tab$I2 <- Bal_metan_class[["I2.w"]] Bal_metan_class_tab <- Bal_metan_class_tab %>% rename(MD = Bal_metan_class...TE.random.w...) Bal_metan_class_tab <- Bal_metan_class_tab[order(-Bal_metan_class_tab$MD),] Bal_metan_class_tab$row_number <- 1:nrow(Bal_metan_class_tab) Bal_metan_class_tab$subgroup <- "Subgroup" Bal_class_counts <- Bal_class_counts %>% rename(drug = Drug_Class_new_1_all) Bal_metan_class_tab <- merge(Bal_class_counts, Bal_metan_class_tab, by="drug") Bal_metan_class_tab_overall <- data.frame(Bal_metan_class[["TE.random"]]) Bal_metan_class_tab_overall$drug <- "Overall" Bal_metan_class_tab_overall$SE <- Bal_metan_class[["seTE.random"]] Bal_metan_class_tab_overall$lower <- Bal_metan_class[["lower.random"]] Bal_metan_class_tab_overall$upper <- Bal_metan_class[["upper.random"]] Bal_metan_class_tab_overall$Pz <- Bal_metan_class[["pval.random"]] Bal_metan_class_tab_overall$weight <- (max(Bal_metan_class_tab$weight)*2) Bal_metan_class_tab_overall$k <- Bal_metan_class[["k"]] Bal_metan_class_tab_overall$controls <- sum(Bal_metan_class_tab$controls) Bal_metan_class_tab_overall$experimental <- sum(Bal_metan_class_tab$experimental) Bal_metan_class_tab_overall$Q <- Bal_metan_class[["Q"]] Bal_metan_class_tab_overall$Pq <- Bal_metan_class[["pval.Q"]] Bal_metan_class_tab_overall$tau <- Bal_metan_class[["tau"]] Bal_metan_class_tab_overall$I2 <- Bal_metan_class[["I2"]] Bal_metan_class_tab_overall <- Bal_metan_class_tab_overall %>% rename(MD = Bal_metan_class...TE.random...) Bal_metan_class_tab_overall$row_number <- ((nrow(Bal_metan_class_tab))+1) Bal_metan_class_tab_overall$subgroup <- "Overall" Bal_metan_class_tab_overall$n <- sum(Bal_metan_class_tab$n) Bal_metan_class_sumtab <- rbind(Bal_metan_class_tab, Bal_metan_class_tab_overall) Bal_metan_class_sumtab$weight <- as.numeric(Bal_metan_class_sumtab$weight) Bal_metan_class_sumtab$row_number <- as.numeric(Bal_metan_class_sumtab$row_number) Bal_metan_class_sumtab$subgroup <- as.factor(Bal_metan_class_sumtab$subgroup) Bal_metan_class_sumtab$total = Bal_metan_class_sumtab$controls + Bal_metan_class_sumtab$experimental Bal_metan_class_sumtab$text <- paste(format(round(Bal_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Bal_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Bal_metan_class_sumtab$text <- paste(Bal_metan_class_sumtab$text, format(round(Bal_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Bal_metan_class_sumtab$text <- paste(Bal_metan_class_sumtab$text, "", sep = ")", collapse = NULL) Bal_metan_class_sumtab$SE_1dig <- paste(format(round(Bal_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Bal_metan_class_sumtab$Pz_1dig <- paste((signif(Bal_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Bal_metan_class_sumtab$tI2_2dig <- paste(format(round(Bal_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Bal_metan_class_sumtab$tau_1dig <- paste(format(round(Bal_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Bal_metan_class_sumtab$Pq_1dig <- paste((signif(Bal_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Bal_metan_class_sumtab,file="Bal_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(Bal_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Bal_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Bal_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = Bal_metan_class_tab_overall$lower overall_max = Bal_metan_class_tab_overall$upper Bal_metan_class_ybreaks <- nrow(Bal_metan_class_sumtab) Bal_metan_class_sumtab <- Bal_metan_class_sumtab[order(Bal_metan_class_sumtab$row_number),] Bal_metan_class_forest <- ggplot(data= Bal_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Bal_metan_class_ybreaks, labels = Bal_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-2.6, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Bal_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=Bal_metan_class_sumtab, aes(x=-2.2, label=k), size = 3.5, hjust=0) + geom_text(data=Bal_metan_class_sumtab, aes(x=-1.95, label=total), size = 3.5, hjust=0) pdf(file="Bal_metan_class_forest.pdf",width=10,height=4) Bal_metan_class_forest dev.off() ##################### ####### ## bias analysis Bal_class_eggers <- eggers.test(x = Bal_metan_class_main) Bal_class_eggers sink("Bal_class_eggers.txt") print(Bal_class_eggers) sink() Bal_class_trimfill <- trimfill(Bal_metan_class_main) Bal_class_trimfill sink("Bal_class_trimfill.txt") print(Bal_class_trimfill) sink() pdf(file="Bal_class_funnel.pdf") funnel(Bal_class_trimfill, xlab="Mean difference in hepatic Bal (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue")) dev.off() ## use Baujat plot to look for outliers pdf(file="Bal_class_baujat.pdf") Bal_class_baujat <- baujat(Bal_metan_class_main) Bal_class_baujat dev.off() ## look for outliers based on SD Bal_commSD_mean <- mean(Bal_data$Bal_comm_SD, na.rm=TRUE) Bal_commSD_SD <- sd(Bal_data$Bal_comm_SD, na.rm=TRUE) Bal_commSD_norm <- dnorm(Bal_data$Bal_comm_SD, mean = Bal_commSD_mean, sd = Bal_commSD_SD, log = FALSE) Bal_commSD_norm <- as.data.frame(Bal_commSD_norm) Bal_commSD_norm$Bal_comm_SD <- Bal_data$Bal_comm_SD Bal_commSD_norm$Paper <- Bal_data$Paper pdf(file = "Bal_commSD_norm.pdf") plot(Bal_commSD_norm$Bal_comm_SD, Bal_commSD_norm$Bal_commSD_norm) dev.off() ## exclude studies with Bal_comm_SD >1 or high contribution to heterogeneity on baujat plot Bal_NoOutlier_data = subset(Bal_data, Bal_comm_SD <1) Bal_NoOutlier_data <- Bal_NoOutlier_data %>% filter(Paper != "Fan 2017" & Paper != "Chong 2015_1" & Paper != "Ideta 2015" & Paper != "Ishii 2009" & Paper != "Magdy 2017_1" & Paper != "Pais 2014_1" ) ####### ## re-rerun after outliers excluded ## drop where <3 unique studies for any drug class Bal_NoOutlier_drugsclass_counts <- Bal_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Bal_NoOutlier_class_counts <- Bal_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Bal_NoOutlier_class_less3 = subset(Bal_NoOutlier_class_counts, n <3) str(Bal_NoOutlier_class_less3) Bal_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(Bal_NoOutlier_class_less3$Drug_Class_new_1_all) Bal_NoOutlier_class_droplist <- Bal_NoOutlier_class_less3$Drug_Class_new_1_all Bal_NoOutlier_data_min3class <- Bal_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% Bal_NoOutlier_class_droplist) ## run metan Bal_NoOutlier_metan_class_main <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Bal_NoOutlier_metan_class <- update(Bal_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results Bal_NoOutlier_metan_class_tab <- data.frame(Bal_NoOutlier_metan_class[["TE.random.w"]]) Bal_NoOutlier_metan_class_tab$drug <- Bal_NoOutlier_metan_class[["bylevs"]] Bal_NoOutlier_metan_class_tab$SE <- Bal_NoOutlier_metan_class[["seTE.random.w"]] Bal_NoOutlier_metan_class_tab$lower <- Bal_NoOutlier_metan_class[["lower.random.w"]] Bal_NoOutlier_metan_class_tab$upper <- Bal_NoOutlier_metan_class[["upper.random.w"]] Bal_NoOutlier_metan_class_tab$Pz <- Bal_NoOutlier_metan_class[["pval.random.w"]] Bal_NoOutlier_metan_class_tab$weight <- Bal_NoOutlier_metan_class[["w.random.w"]] Bal_NoOutlier_metan_class_tab$k <- Bal_NoOutlier_metan_class[["k.w"]] Bal_NoOutlier_metan_class_tab$controls <- Bal_NoOutlier_metan_class[["n.c.w"]] Bal_NoOutlier_metan_class_tab$experimental <- Bal_NoOutlier_metan_class[["n.e.w"]] Bal_NoOutlier_metan_class_tab$Q <- Bal_NoOutlier_metan_class[["Q.w"]] Bal_NoOutlier_metan_class_tab$Pq <- Bal_NoOutlier_metan_class[["pval.Q.w"]] Bal_NoOutlier_metan_class_tab$tau <- Bal_NoOutlier_metan_class[["tau.w"]] Bal_NoOutlier_metan_class_tab$I2 <- Bal_NoOutlier_metan_class[["I2.w"]] Bal_NoOutlier_metan_class_tab <- Bal_NoOutlier_metan_class_tab %>% rename(MD = Bal_NoOutlier_metan_class...TE.random.w...) Bal_NoOutlier_metan_class_tab <- Bal_NoOutlier_metan_class_tab[order(-Bal_NoOutlier_metan_class_tab$MD),] Bal_NoOutlier_metan_class_tab <- Bal_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n()) Bal_NoOutlier_metan_class_tab$subgroup <- "Subgroup" Bal_NoOutlier_class_counts <- Bal_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all) Bal_NoOutlier_metan_class_tab <- merge(Bal_NoOutlier_class_counts, Bal_NoOutlier_metan_class_tab, by="drug") Bal_NoOutlier_metan_class_tab_overall <- data.frame(Bal_NoOutlier_metan_class[["TE.random"]]) Bal_NoOutlier_metan_class_tab_overall$drug <- "Overall" Bal_NoOutlier_metan_class_tab_overall$SE <- Bal_NoOutlier_metan_class[["seTE.random"]] Bal_NoOutlier_metan_class_tab_overall$lower <- Bal_NoOutlier_metan_class[["lower.random"]] Bal_NoOutlier_metan_class_tab_overall$upper <- Bal_NoOutlier_metan_class[["upper.random"]] Bal_NoOutlier_metan_class_tab_overall$Pz <- Bal_NoOutlier_metan_class[["pval.random"]] Bal_NoOutlier_metan_class_tab_overall$weight <- (max(Bal_NoOutlier_metan_class_tab$weight)*2) Bal_NoOutlier_metan_class_tab_overall$k <- Bal_NoOutlier_metan_class[["k"]] Bal_NoOutlier_metan_class_tab_overall$controls <- sum(Bal_NoOutlier_metan_class_tab$controls) Bal_NoOutlier_metan_class_tab_overall$experimental <- sum(Bal_NoOutlier_metan_class_tab$experimental) Bal_NoOutlier_metan_class_tab_overall$Q <- Bal_NoOutlier_metan_class[["Q"]] Bal_NoOutlier_metan_class_tab_overall$Pq <- Bal_NoOutlier_metan_class[["pval.Q"]] Bal_NoOutlier_metan_class_tab_overall$tau <- Bal_NoOutlier_metan_class[["tau"]] Bal_NoOutlier_metan_class_tab_overall$I2 <- Bal_NoOutlier_metan_class[["I2"]] Bal_NoOutlier_metan_class_tab_overall <- Bal_NoOutlier_metan_class_tab_overall %>% rename(MD = Bal_NoOutlier_metan_class...TE.random...) Bal_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(Bal_NoOutlier_metan_class_tab))+1) Bal_NoOutlier_metan_class_tab_overall$subgroup <- "Overall" Bal_NoOutlier_metan_class_tab_overall$n <- sum(Bal_NoOutlier_metan_class_tab$n) Bal_NoOutlier_metan_class_sumtab <- rbind(Bal_NoOutlier_metan_class_tab, Bal_NoOutlier_metan_class_tab_overall) Bal_NoOutlier_metan_class_sumtab$weight <- as.numeric(Bal_NoOutlier_metan_class_sumtab$weight) Bal_NoOutlier_metan_class_sumtab$row_number <- as.numeric(Bal_NoOutlier_metan_class_sumtab$row_number) Bal_NoOutlier_metan_class_sumtab$subgroup <- as.factor(Bal_NoOutlier_metan_class_sumtab$subgroup) Bal_NoOutlier_metan_class_sumtab$total = Bal_NoOutlier_metan_class_sumtab$controls + Bal_NoOutlier_metan_class_sumtab$experimental Bal_NoOutlier_metan_class_sumtab$text <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Bal_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$text <- paste(Bal_NoOutlier_metan_class_sumtab$text, format(round(Bal_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$text <- paste(Bal_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(Bal_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Bal_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(Bal_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Bal_NoOutlier_metan_class_sumtab,file="Bal_NoOutlier_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(Bal_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Bal_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Bal_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = Bal_NoOutlier_metan_class_tab_overall$lower overall_max = Bal_NoOutlier_metan_class_tab_overall$upper Bal_NoOutlier_metan_class_ybreaks <- nrow(Bal_NoOutlier_metan_class_sumtab) Bal_NoOutlier_metan_class_sumtab <- Bal_NoOutlier_metan_class_sumtab[order(Bal_NoOutlier_metan_class_sumtab$row_number),] Bal_NoOutlier_metan_class_forest <- ggplot(data= Bal_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Bal_NoOutlier_metan_class_ybreaks, labels = Bal_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-2.6, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Bal_NoOutlier_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=Bal_NoOutlier_metan_class_sumtab, aes(x=-2.2, label=k), size = 3.5, hjust=0) + geom_text(data=Bal_NoOutlier_metan_class_sumtab, aes(x=-1.95, label=total), size = 3.5, hjust=0) pdf(file="Bal_NoOutlier_metan_class_forest.pdf",width=10,height=5) Bal_NoOutlier_metan_class_forest dev.off() ####### ## re-run using sub-grouping by individual drugs ## drop where <3 unique studies for any drug class Bal_drugIndiv_counts <- Bal_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) Bal_drugIndiv_sum_counts <- Bal_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) Bal_drugIndiv_less3 = subset(Bal_drugIndiv_sum_counts, n <3) str(Bal_drugIndiv_less3) Bal_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(Bal_drugIndiv_less3$Indiv_drug_class_3) Bal_drugIndiv_droplist <- Bal_drugIndiv_less3$Indiv_drug_class_3 Bal_data_min3drug <- Bal_data %>% filter(!Indiv_drug_class_3 %in% Bal_drugIndiv_droplist) ## run metan Bal_metan_drugIndiv <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Bal_metan_drugIndiv <- update(Bal_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug") ## make summary table of results Bal_metan_drugIndiv_tab <- data.frame(Bal_metan_drugIndiv[["TE.random.w"]]) Bal_metan_drugIndiv_tab$drug <- Bal_metan_drugIndiv[["bylevs"]] Bal_metan_drugIndiv_tab$SE <- Bal_metan_drugIndiv[["seTE.random.w"]] Bal_metan_drugIndiv_tab$lower <- Bal_metan_drugIndiv[["lower.random.w"]] Bal_metan_drugIndiv_tab$upper <- Bal_metan_drugIndiv[["upper.random.w"]] Bal_metan_drugIndiv_tab$Pz <- Bal_metan_drugIndiv[["pval.random.w"]] Bal_metan_drugIndiv_tab$weight <- Bal_metan_drugIndiv[["w.random.w"]] Bal_metan_drugIndiv_tab$k <- Bal_metan_drugIndiv[["k.w"]] Bal_metan_drugIndiv_tab$controls <- Bal_metan_drugIndiv[["n.c.w"]] Bal_metan_drugIndiv_tab$experimental <- Bal_metan_drugIndiv[["n.e.w"]] Bal_metan_drugIndiv_tab$Q <- Bal_metan_drugIndiv[["Q.w"]] Bal_metan_drugIndiv_tab$Pq <- Bal_metan_drugIndiv[["pval.Q.w"]] Bal_metan_drugIndiv_tab$tau <- Bal_metan_drugIndiv[["tau.w"]] Bal_metan_drugIndiv_tab$I2 <- Bal_metan_drugIndiv[["I2.w"]] Bal_metan_drugIndiv_tab <- Bal_metan_drugIndiv_tab %>% rename(MD = Bal_metan_drugIndiv...TE.random.w...) Bal_metan_drugIndiv_tab <- Bal_metan_drugIndiv_tab[order(-Bal_metan_drugIndiv_tab$MD),] Bal_metan_drugIndiv_tab <- Bal_metan_drugIndiv_tab %>% mutate(row_number= 1:n()) Bal_metan_drugIndiv_tab$subgroup <- "Subgroup" Bal_drugIndiv_sum_counts <- Bal_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3) Bal_metan_drugIndiv_tab <- merge(Bal_drugIndiv_sum_counts, Bal_metan_drugIndiv_tab, by="drug") Bal_metan_drugIndiv_tab_overall <- data.frame(Bal_metan_drugIndiv[["TE.random"]]) Bal_metan_drugIndiv_tab_overall$drug <- "Overall" Bal_metan_drugIndiv_tab_overall$SE <- Bal_metan_drugIndiv[["seTE.random"]] Bal_metan_drugIndiv_tab_overall$lower <- Bal_metan_drugIndiv[["lower.random"]] Bal_metan_drugIndiv_tab_overall$upper <- Bal_metan_drugIndiv[["upper.random"]] Bal_metan_drugIndiv_tab_overall$Pz <- Bal_metan_drugIndiv[["pval.random"]] Bal_metan_drugIndiv_tab_overall$weight <- (max(Bal_metan_drugIndiv_tab$weight)*2) Bal_metan_drugIndiv_tab_overall$k <- Bal_metan_drugIndiv[["k"]] Bal_metan_drugIndiv_tab_overall$controls <- sum(Bal_metan_drugIndiv_tab$controls) Bal_metan_drugIndiv_tab_overall$experimental <- sum(Bal_metan_drugIndiv_tab$experimental) Bal_metan_drugIndiv_tab_overall$Q <- Bal_metan_drugIndiv[["Q"]] Bal_metan_drugIndiv_tab_overall$Pq <- Bal_metan_drugIndiv[["pval.Q"]] Bal_metan_drugIndiv_tab_overall$tau <- Bal_metan_drugIndiv[["tau"]] Bal_metan_drugIndiv_tab_overall$I2 <- Bal_metan_drugIndiv[["I2"]] Bal_metan_drugIndiv_tab_overall <- Bal_metan_drugIndiv_tab_overall %>% rename(MD = Bal_metan_drugIndiv...TE.random...) Bal_metan_drugIndiv_tab_overall$row_number <- ((nrow(Bal_metan_drugIndiv_tab))+1) Bal_metan_drugIndiv_tab_overall$subgroup <- "Overall" Bal_metan_drugIndiv_tab_overall$n <- sum(Bal_metan_drugIndiv_tab$n) Bal_metan_drugIndiv_sumtab <- rbind(Bal_metan_drugIndiv_tab, Bal_metan_drugIndiv_tab_overall) Bal_metan_drugIndiv_sumtab$weight <- as.numeric(Bal_metan_drugIndiv_sumtab$weight) Bal_metan_drugIndiv_sumtab$row_number <- as.numeric(Bal_metan_drugIndiv_sumtab$row_number) Bal_metan_drugIndiv_sumtab$subgroup <- as.factor(Bal_metan_drugIndiv_sumtab$subgroup) Bal_metan_drugIndiv_sumtab$total = Bal_metan_drugIndiv_sumtab$controls + Bal_metan_drugIndiv_sumtab$experimental Bal_metan_drugIndiv_sumtab$text <- paste(format(round(Bal_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(Bal_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Bal_metan_drugIndiv_sumtab$text <- paste(Bal_metan_drugIndiv_sumtab$text, format(round(Bal_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Bal_metan_drugIndiv_sumtab$text <- paste(Bal_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL) Bal_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(Bal_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Bal_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(Bal_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Bal_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(Bal_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Bal_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(Bal_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Bal_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(Bal_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Bal_metan_drugIndiv_sumtab,file="Bal_metan_drugIndiv_sumtab.csv",sep=",") ## make forest plot label_bold <- ifelse(Bal_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Bal_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Bal_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10") overall_min = Bal_metan_drugIndiv_tab_overall$lower overall_max = Bal_metan_drugIndiv_tab_overall$upper Bal_metan_drugIndiv_ybreaks <- nrow(Bal_metan_drugIndiv_sumtab) Bal_metan_drugIndiv_sumtab <- Bal_metan_drugIndiv_sumtab[order(Bal_metan_drugIndiv_sumtab$row_number),] Bal_metan_drugIndiv_forest <- ggplot(data= Bal_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Bal_metan_drugIndiv_ybreaks, labels = Bal_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-2, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Bal_metan_drugIndiv_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=Bal_metan_drugIndiv_sumtab, aes(x=-1.8, label=k), size = 3.5, hjust=0) + geom_text(data=Bal_metan_drugIndiv_sumtab, aes(x=-1.55, label=total), size = 3.5, hjust=0) pdf(file="Bal_metan_drugIndiv_forest.pdf",width=10,height=5) Bal_metan_drugIndiv_forest dev.off() ######## ## calculate sample size needed for average results ## mean comm_SD = Bal_commSD_mean ## meta-analysis mean difference = Bal_metan_class_main[["TE.random"]] ## calculate Cohen's d Bal_cohen_d = Bal_metan_class_main[["TE.random"]] / Bal_commSD_mean Bal_samplesize_av <- pwr.t.test(d = Bal_cohen_d, power = 0.80, sig.level = 0.05) ## n = 16 - number in **each** group ## find number of studies with n > Bal_samplesize_av Bal_data$total = Bal_data$Bal_Int_size + Bal_data$Bal_Pla_size Bal_pwrcount <- Bal_data %>% group_by(total, Paper) %>% summarise(n = n()) Bal_pwrcount_adequate = subset(Bal_pwrcount, total >= 2*(Bal_samplesize_av[["n"]])) write.table(Bal_pwrcount_adequate,file="Bal_pwrcount_adequate.csv",sep=",") ######## ## run meta-regressions on full Bal dataset for continuous traits Bal_metan_full <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## create metan with >3 for each level of categorical variables ## Background Bal_bg_counts <- Bal_data %>% group_by(Background_simple, Study) %>% summarise(n = n()) Bal_bg_counts_sum <- Bal_bg_counts %>% group_by(Background_simple) %>% summarise(n = n()) Bal_bg_less3 = subset(Bal_bg_counts_sum, n <3) Bal_bg_less3$Background_simple <- droplevels(Bal_bg_less3$Background_simple) Bal_bg_droplist <- Bal_bg_less3$Background_simple Bal_data_min3bg <- Bal_data %>% filter(!Background_simple %in% Bal_bg_droplist) Bal_metan_bg <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## Model Bal_model_counts <- Bal_data %>% group_by(Model_simple, Study) %>% summarise(n = n()) Bal_model_counts_sum <- Bal_model_counts %>% group_by(Model_simple) %>% summarise(n = n()) Bal_model_less3 = subset(Bal_model_counts_sum, n <3) Bal_model_less3$Model_simple <- droplevels(Bal_model_less3$Model_simple) Bal_model_droplist <- Bal_model_less3$Model_simple Bal_data_min3model <- Bal_data %>% filter(!Model_simple %in% Bal_model_droplist) Bal_metan_model <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## run metaregs Bal_reg_Qual_score <- metareg(Bal_metan_full, Qual_score) Bal_reg_Qual_score_tab <- data.frame(Bal_reg_Qual_score[["beta"]]) Bal_reg_Qual_score_tab$se <- Bal_reg_Qual_score[["se"]] Bal_reg_Qual_score_tab$pval <- Bal_reg_Qual_score[["pval"]] Bal_reg_Qual_score_tab$beta <- Bal_reg_Qual_score[["beta"]] Bal_reg_Qual_score_tab <- Bal_reg_Qual_score_tab[-c(1),] Bal_reg_Qual_score_tab <- Bal_reg_Qual_score_tab[-c(1)] Bal_reg_Qual_score_tab$k <- Bal_reg_Qual_score[["k"]] Bal_reg_Qual_score_tab$r2 <- Bal_reg_Qual_score[["R2"]] Bal_reg_Qual_score_tab$var <- "Qual_score" Bal_reg_Protocol <- metareg(Bal_metan_full, Protocol) Bal_reg_Protocol_tab <- data.frame(Bal_reg_Protocol[["beta"]]) Bal_reg_Protocol_tab$se <- Bal_reg_Protocol[["se"]] Bal_reg_Protocol_tab$pval <- Bal_reg_Protocol[["pval"]] Bal_reg_Protocol_tab$beta <- Bal_reg_Protocol[["beta"]] Bal_reg_Protocol_tab <- Bal_reg_Protocol_tab[-c(1),] Bal_reg_Protocol_tab <- Bal_reg_Protocol_tab[-c(1)] Bal_reg_Protocol_tab$k <- Bal_reg_Protocol[["k"]] Bal_reg_Protocol_tab$r2 <- Bal_reg_Protocol[["R2"]] Bal_reg_Protocol_tab$var <- "Protocol" Bal_reg_Randomisation <- metareg(Bal_metan_full, Randomisation) Bal_reg_Randomisation_tab <- data.frame(Bal_reg_Randomisation[["beta"]]) Bal_reg_Randomisation_tab$se <- Bal_reg_Randomisation[["se"]] Bal_reg_Randomisation_tab$pval <- Bal_reg_Randomisation[["pval"]] Bal_reg_Randomisation_tab$beta <- Bal_reg_Randomisation[["beta"]] Bal_reg_Randomisation_tab <- Bal_reg_Randomisation_tab[-c(1),] Bal_reg_Randomisation_tab <- Bal_reg_Randomisation_tab[-c(1)] Bal_reg_Randomisation_tab$k <- Bal_reg_Randomisation[["k"]] Bal_reg_Randomisation_tab$r2 <- Bal_reg_Randomisation[["R2"]] Bal_reg_Randomisation_tab$var <- "Randomisation" Bal_reg_Blinding <- metareg(Bal_metan_full, Blinding) Bal_reg_Blinding_tab <- data.frame(Bal_reg_Blinding[["beta"]]) Bal_reg_Blinding_tab$se <- Bal_reg_Blinding[["se"]] Bal_reg_Blinding_tab$pval <- Bal_reg_Blinding[["pval"]] Bal_reg_Blinding_tab$beta <- Bal_reg_Blinding[["beta"]] Bal_reg_Blinding_tab <- Bal_reg_Blinding_tab[-c(1),] Bal_reg_Blinding_tab <- Bal_reg_Blinding_tab[-c(1)] Bal_reg_Blinding_tab$k <- Bal_reg_Blinding[["k"]] Bal_reg_Blinding_tab$r2 <- Bal_reg_Blinding[["R2"]] Bal_reg_Blinding_tab$var <- "Blinding" Bal_reg_Power_calculation <- metareg(Bal_metan_full, Power_calculation) Bal_reg_Power_calculation_tab <- data.frame(Bal_reg_Power_calculation[["beta"]]) Bal_reg_Power_calculation_tab$se <- Bal_reg_Power_calculation[["se"]] Bal_reg_Power_calculation_tab$pval <- Bal_reg_Power_calculation[["pval"]] Bal_reg_Power_calculation_tab$beta <- Bal_reg_Power_calculation[["beta"]] Bal_reg_Power_calculation_tab <- Bal_reg_Power_calculation_tab[-c(1),] Bal_reg_Power_calculation_tab <- Bal_reg_Power_calculation_tab[-c(1)] Bal_reg_Power_calculation_tab$k <- Bal_reg_Power_calculation[["k"]] Bal_reg_Power_calculation_tab$r2 <- Bal_reg_Power_calculation[["R2"]] Bal_reg_Power_calculation_tab$var <- "Power_calculation" Bal_reg_Chol_per <- metareg(Bal_metan_full, Chol_per) Bal_reg_Chol_per_tab <- data.frame(Bal_reg_Chol_per[["beta"]]) Bal_reg_Chol_per_tab$se <- Bal_reg_Chol_per[["se"]] Bal_reg_Chol_per_tab$pval <- Bal_reg_Chol_per[["pval"]] Bal_reg_Chol_per_tab$beta <- Bal_reg_Chol_per[["beta"]] Bal_reg_Chol_per_tab <- Bal_reg_Chol_per_tab[-c(1),] Bal_reg_Chol_per_tab <- Bal_reg_Chol_per_tab[-c(1)] Bal_reg_Chol_per_tab$k <- Bal_reg_Chol_per[["k"]] Bal_reg_Chol_per_tab$r2 <- Bal_reg_Chol_per[["R2"]] Bal_reg_Chol_per_tab$var <- "Chol_per" Bal_reg_log_FructGluc_per <- metareg(Bal_metan_full, log_FructGluc_per) Bal_reg_log_FructGluc_per_tab <- data.frame(Bal_reg_log_FructGluc_per[["beta"]]) Bal_reg_log_FructGluc_per_tab$se <- Bal_reg_log_FructGluc_per[["se"]] Bal_reg_log_FructGluc_per_tab$pval <- Bal_reg_log_FructGluc_per[["pval"]] Bal_reg_log_FructGluc_per_tab$beta <- Bal_reg_log_FructGluc_per[["beta"]] Bal_reg_log_FructGluc_per_tab <- Bal_reg_log_FructGluc_per_tab[-c(1),] Bal_reg_log_FructGluc_per_tab <- Bal_reg_log_FructGluc_per_tab[-c(1)] Bal_reg_log_FructGluc_per_tab$k <- Bal_reg_log_FructGluc_per[["k"]] Bal_reg_log_FructGluc_per_tab$r2 <- Bal_reg_log_FructGluc_per[["R2"]] Bal_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per" Bal_reg_log_Sucr_kcal <- metareg(Bal_metan_full, log_Sucr_kcal) Bal_reg_log_Sucr_kcal_tab <- data.frame(Bal_reg_log_Sucr_kcal[["beta"]]) Bal_reg_log_Sucr_kcal_tab$se <- Bal_reg_log_Sucr_kcal[["se"]] Bal_reg_log_Sucr_kcal_tab$pval <- Bal_reg_log_Sucr_kcal[["pval"]] Bal_reg_log_Sucr_kcal_tab$beta <- Bal_reg_log_Sucr_kcal[["beta"]] Bal_reg_log_Sucr_kcal_tab <- Bal_reg_log_Sucr_kcal_tab[-c(1),] Bal_reg_log_Sucr_kcal_tab <- Bal_reg_log_Sucr_kcal_tab[-c(1)] Bal_reg_log_Sucr_kcal_tab$k <- Bal_reg_log_Sucr_kcal[["k"]] Bal_reg_log_Sucr_kcal_tab$r2 <- Bal_reg_log_Sucr_kcal[["R2"]] Bal_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal" Bal_reg_log_Fat_kcal <- metareg(Bal_metan_full, log_Fat_kcal) Bal_reg_log_Fat_kcal_tab <- data.frame(Bal_reg_log_Fat_kcal[["beta"]]) Bal_reg_log_Fat_kcal_tab$se <- Bal_reg_log_Fat_kcal[["se"]] Bal_reg_log_Fat_kcal_tab$pval <- Bal_reg_log_Fat_kcal[["pval"]] Bal_reg_log_Fat_kcal_tab$beta <- Bal_reg_log_Fat_kcal[["beta"]] Bal_reg_log_Fat_kcal_tab <- Bal_reg_log_Fat_kcal_tab[-c(1),] Bal_reg_log_Fat_kcal_tab <- Bal_reg_log_Fat_kcal_tab[-c(1)] Bal_reg_log_Fat_kcal_tab$k <- Bal_reg_log_Fat_kcal[["k"]] Bal_reg_log_Fat_kcal_tab$r2 <- Bal_reg_log_Fat_kcal[["R2"]] Bal_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal" Bal_reg_log_Age_start <- metareg(Bal_metan_full, log_Age_start) Bal_reg_log_Age_start_tab <- data.frame(Bal_reg_log_Age_start[["beta"]]) Bal_reg_log_Age_start_tab$se <- Bal_reg_log_Age_start[["se"]] Bal_reg_log_Age_start_tab$pval <- Bal_reg_log_Age_start[["pval"]] Bal_reg_log_Age_start_tab$beta <- Bal_reg_log_Age_start[["beta"]] Bal_reg_log_Age_start_tab <- Bal_reg_log_Age_start_tab[-c(1),] Bal_reg_log_Age_start_tab <- Bal_reg_log_Age_start_tab[-c(1)] Bal_reg_log_Age_start_tab$k <- Bal_reg_log_Age_start[["k"]] Bal_reg_log_Age_start_tab$r2 <- Bal_reg_log_Age_start[["R2"]] Bal_reg_log_Age_start_tab$var <- "log_Age_start" Bal_reg_log_Duration <- metareg(Bal_metan_full, log_Duration) Bal_reg_log_Duration_tab <- data.frame(Bal_reg_log_Duration[["beta"]]) Bal_reg_log_Duration_tab$se <- Bal_reg_log_Duration[["se"]] Bal_reg_log_Duration_tab$pval <- Bal_reg_log_Duration[["pval"]] Bal_reg_log_Duration_tab$beta <- Bal_reg_log_Duration[["beta"]] Bal_reg_log_Duration_tab <- Bal_reg_log_Duration_tab[-c(1),] Bal_reg_log_Duration_tab <- Bal_reg_log_Duration_tab[-c(1)] Bal_reg_log_Duration_tab$k <- Bal_reg_log_Duration[["k"]] Bal_reg_log_Duration_tab$r2 <- Bal_reg_log_Duration[["R2"]] Bal_reg_log_Duration_tab$var <- "log_Duration" Bal_reg_log_Age_end <- metareg(Bal_metan_full, log_Age_end) Bal_reg_log_Age_end_tab <- data.frame(Bal_reg_log_Age_end[["beta"]]) Bal_reg_log_Age_end_tab$se <- Bal_reg_log_Age_end[["se"]] Bal_reg_log_Age_end_tab$pval <- Bal_reg_log_Age_end[["pval"]] Bal_reg_log_Age_end_tab$beta <- Bal_reg_log_Age_end[["beta"]] Bal_reg_log_Age_end_tab <- Bal_reg_log_Age_end_tab[-c(1),] Bal_reg_log_Age_end_tab <- Bal_reg_log_Age_end_tab[-c(1)] Bal_reg_log_Age_end_tab$k <- Bal_reg_log_Age_end[["k"]] Bal_reg_log_Age_end_tab$r2 <- Bal_reg_log_Age_end[["R2"]] Bal_reg_log_Age_end_tab$var <- "log_Age_end" Bal_reg_log_Wt_change <- metareg(Bal_metan_full, log_Wt_change) Bal_reg_log_Wt_change_tab <- data.frame(Bal_reg_log_Wt_change[["beta"]]) Bal_reg_log_Wt_change_tab$se <- Bal_reg_log_Wt_change[["se"]] Bal_reg_log_Wt_change_tab$pval <- Bal_reg_log_Wt_change[["pval"]] Bal_reg_log_Wt_change_tab$beta <- Bal_reg_log_Wt_change[["beta"]] Bal_reg_log_Wt_change_tab <- Bal_reg_log_Wt_change_tab[-c(1),] Bal_reg_log_Wt_change_tab <- Bal_reg_log_Wt_change_tab[-c(1)] Bal_reg_log_Wt_change_tab$k <- Bal_reg_log_Wt_change[["k"]] Bal_reg_log_Wt_change_tab$r2 <- Bal_reg_log_Wt_change[["R2"]] Bal_reg_log_Wt_change_tab$var <- "log_Wt_change" Bal_reg_log_Gluc_change <- metareg(Bal_metan_full, log_Gluc_change) Bal_reg_log_Gluc_change_tab <- data.frame(Bal_reg_log_Gluc_change[["beta"]]) Bal_reg_log_Gluc_change_tab$se <- Bal_reg_log_Gluc_change[["se"]] Bal_reg_log_Gluc_change_tab$pval <- Bal_reg_log_Gluc_change[["pval"]] Bal_reg_log_Gluc_change_tab$beta <- Bal_reg_log_Gluc_change[["beta"]] Bal_reg_log_Gluc_change_tab <- Bal_reg_log_Gluc_change_tab[-c(1),] Bal_reg_log_Gluc_change_tab <- Bal_reg_log_Gluc_change_tab[-c(1)] Bal_reg_log_Gluc_change_tab$k <- Bal_reg_log_Gluc_change[["k"]] Bal_reg_log_Gluc_change_tab$r2 <- Bal_reg_log_Gluc_change[["R2"]] Bal_reg_log_Gluc_change_tab$var <- "log_Gluc_change" Bal_reg_log_Insul_change <- metareg(Bal_metan_full, log_Insul_change) Bal_reg_log_Insul_change_tab <- data.frame(Bal_reg_log_Insul_change[["beta"]]) Bal_reg_log_Insul_change_tab$se <- Bal_reg_log_Insul_change[["se"]] Bal_reg_log_Insul_change_tab$pval <- Bal_reg_log_Insul_change[["pval"]] Bal_reg_log_Insul_change_tab$beta <- Bal_reg_log_Insul_change[["beta"]] Bal_reg_log_Insul_change_tab <- Bal_reg_log_Insul_change_tab[-c(1),] Bal_reg_log_Insul_change_tab <- Bal_reg_log_Insul_change_tab[-c(1)] Bal_reg_log_Insul_change_tab$k <- Bal_reg_log_Insul_change[["k"]] Bal_reg_log_Insul_change_tab$r2 <- Bal_reg_log_Insul_change[["R2"]] Bal_reg_log_Insul_change_tab$var <- "log_Insul_change" Bal_reg_Sex <- metareg(Bal_metan_full, Sex) Bal_reg_Sex_tab <- data.frame(Bal_reg_Sex[["beta"]]) Bal_reg_Sex_tab$se <- Bal_reg_Sex[["se"]] Bal_reg_Sex_tab$pval <- Bal_reg_Sex[["pval"]] Bal_reg_Sex_tab$beta <- Bal_reg_Sex[["beta"]] Bal_reg_Sex_tab <- Bal_reg_Sex_tab[-c(1),] Bal_reg_Sex_tab <- Bal_reg_Sex_tab[-c(1)] Bal_reg_Sex_tab$k <- Bal_reg_Sex[["k"]] Bal_reg_Sex_tab$r2 <- NA Bal_reg_Sex_tab$var <- rownames(Bal_reg_Sex_tab) Bal_reg_Sex_overall_tab <- data.frame(Bal_reg_Sex[["QMp"]]) Bal_reg_Sex_overall_tab$se <- NA Bal_reg_Sex_overall_tab$pval <- Bal_reg_Sex[["QMp"]] Bal_reg_Sex_overall_tab$beta <- NA Bal_reg_Sex_overall_tab <- Bal_reg_Sex_overall_tab[-c(1)] Bal_reg_Sex_overall_tab$k <- Bal_reg_Sex[["k"]] Bal_reg_Sex_overall_tab$r2 <- Bal_reg_Sex[["R2"]] Bal_reg_Sex_overall_tab$var <- "Sex_overall" Bal_reg_Sex_tab <- rbind(Bal_reg_Sex_tab, Bal_reg_Sex_overall_tab) Bal_reg_Drug_dose <- metareg(Bal_metan_drugIndiv, Drug_dose) Bal_reg_Drug_dose_tab <- data.frame(Bal_reg_Drug_dose[["beta"]]) Bal_reg_Drug_dose_tab$se <- Bal_reg_Drug_dose[["se"]] Bal_reg_Drug_dose_tab$pval <- Bal_reg_Drug_dose[["pval"]] Bal_reg_Drug_dose_tab$beta <- Bal_reg_Drug_dose[["beta"]] Bal_reg_Drug_dose_tab <- Bal_reg_Drug_dose_tab[-c(1),] Bal_reg_Drug_dose_tab <- Bal_reg_Drug_dose_tab[-c(1)] Bal_reg_Drug_dose_tab$k <- Bal_reg_Drug_dose[["k"]] Bal_reg_Drug_dose_tab$r2 <- Bal_reg_Drug_dose[["R2"]] Bal_reg_Drug_dose_tab$var <- "Drug_dose" Bal_reg_Indiv_drug_class_3 <- metareg(Bal_metan_drugIndiv, Indiv_drug_class_3) Bal_reg_Indiv_drug_class_3_tab <- data.frame(Bal_reg_Indiv_drug_class_3[["beta"]]) Bal_reg_Indiv_drug_class_3_tab$se <- Bal_reg_Indiv_drug_class_3[["se"]] Bal_reg_Indiv_drug_class_3_tab$pval <- Bal_reg_Indiv_drug_class_3[["pval"]] Bal_reg_Indiv_drug_class_3_tab$beta <- Bal_reg_Indiv_drug_class_3[["beta"]] Bal_reg_Indiv_drug_class_3_tab <- Bal_reg_Indiv_drug_class_3_tab[-c(1),] Bal_reg_Indiv_drug_class_3_tab <- Bal_reg_Indiv_drug_class_3_tab[-c(1)] Bal_reg_Indiv_drug_class_3_tab$k <- Bal_reg_Indiv_drug_class_3[["k"]] Bal_reg_Indiv_drug_class_3_tab$r2 <- NA Bal_reg_Indiv_drug_class_3_tab$var <- rownames(Bal_reg_Indiv_drug_class_3_tab) Bal_reg_Indiv_drug_class_3_overall_tab <- data.frame(Bal_reg_Indiv_drug_class_3[["QMp"]]) Bal_reg_Indiv_drug_class_3_overall_tab$se <- NA Bal_reg_Indiv_drug_class_3_overall_tab$pval <- Bal_reg_Indiv_drug_class_3[["QMp"]] Bal_reg_Indiv_drug_class_3_overall_tab$beta <- NA Bal_reg_Indiv_drug_class_3_overall_tab <- Bal_reg_Indiv_drug_class_3_overall_tab[-c(1)] Bal_reg_Indiv_drug_class_3_overall_tab$k <- Bal_reg_Indiv_drug_class_3[["k"]] Bal_reg_Indiv_drug_class_3_overall_tab$r2 <- Bal_reg_Indiv_drug_class_3[["R2"]] Bal_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall" Bal_reg_Indiv_drug_class_3_tab <- rbind(Bal_reg_Indiv_drug_class_3_tab, Bal_reg_Indiv_drug_class_3_overall_tab) Bal_reg_Model_simple <- metareg(Bal_metan_model, Model_simple) Bal_reg_Model_simple_tab <- data.frame(Bal_reg_Model_simple[["beta"]]) Bal_reg_Model_simple_tab$se <- Bal_reg_Model_simple[["se"]] Bal_reg_Model_simple_tab$pval <- Bal_reg_Model_simple[["pval"]] Bal_reg_Model_simple_tab$beta <- Bal_reg_Model_simple[["beta"]] Bal_reg_Model_simple_tab <- Bal_reg_Model_simple_tab[-c(1),] Bal_reg_Model_simple_tab <- Bal_reg_Model_simple_tab[-c(1)] Bal_reg_Model_simple_tab$k <- Bal_reg_Model_simple[["k"]] Bal_reg_Model_simple_tab$r2 <- NA Bal_reg_Model_simple_tab$var <- rownames(Bal_reg_Model_simple_tab) Bal_reg_Model_simple_overall_tab <- data.frame(Bal_reg_Model_simple[["QMp"]]) Bal_reg_Model_simple_overall_tab$se <- NA Bal_reg_Model_simple_overall_tab$pval <- Bal_reg_Model_simple[["QMp"]] Bal_reg_Model_simple_overall_tab$beta <- NA Bal_reg_Model_simple_overall_tab <- Bal_reg_Model_simple_overall_tab[-c(1)] Bal_reg_Model_simple_overall_tab$k <- Bal_reg_Model_simple[["k"]] Bal_reg_Model_simple_overall_tab$r2 <- Bal_reg_Model_simple[["R2"]] Bal_reg_Model_simple_overall_tab$var <- "Model_simple_overall" Bal_reg_Model_simple_tab <- rbind(Bal_reg_Model_simple_tab, Bal_reg_Model_simple_overall_tab) Bal_reg_Background_simple <- metareg(Bal_metan_bg, Background_simple) Bal_reg_Background_simple_tab <- data.frame(Bal_reg_Background_simple[["beta"]]) Bal_reg_Background_simple_tab$se <- Bal_reg_Background_simple[["se"]] Bal_reg_Background_simple_tab$pval <- Bal_reg_Background_simple[["pval"]] Bal_reg_Background_simple_tab$beta <- Bal_reg_Background_simple[["beta"]] Bal_reg_Background_simple_tab <- Bal_reg_Background_simple_tab[-c(1),] Bal_reg_Background_simple_tab <- Bal_reg_Background_simple_tab[-c(1)] Bal_reg_Background_simple_tab$k <- Bal_reg_Background_simple[["k"]] Bal_reg_Background_simple_tab$r2 <- NA Bal_reg_Background_simple_tab$var <- rownames(Bal_reg_Background_simple_tab) Bal_reg_Background_simple_overall_tab <- data.frame(Bal_reg_Background_simple[["QMp"]]) Bal_reg_Background_simple_overall_tab$se <- NA Bal_reg_Background_simple_overall_tab$pval <- Bal_reg_Background_simple[["QMp"]] Bal_reg_Background_simple_overall_tab$beta <- NA Bal_reg_Background_simple_overall_tab <- Bal_reg_Background_simple_overall_tab[-c(1)] Bal_reg_Background_simple_overall_tab$k <- Bal_reg_Background_simple[["k"]] Bal_reg_Background_simple_overall_tab$r2 <- Bal_reg_Background_simple[["R2"]] Bal_reg_Background_simple_overall_tab$var <- "Background_simple_overall" Bal_reg_Background_simple_tab <- rbind(Bal_reg_Background_simple_tab, Bal_reg_Background_simple_overall_tab) Bal_metareg_sumtab <- rbind(Bal_reg_Qual_score_tab, Bal_reg_Protocol_tab, Bal_reg_Randomisation_tab, Bal_reg_Blinding_tab, Bal_reg_Power_calculation_tab, Bal_reg_Chol_per_tab, Bal_reg_log_FructGluc_per_tab, Bal_reg_log_Sucr_kcal_tab, Bal_reg_log_Fat_kcal_tab, Bal_reg_log_Age_start_tab, Bal_reg_log_Duration_tab, Bal_reg_log_Age_end_tab, Bal_reg_log_Wt_change_tab, Bal_reg_log_Gluc_change_tab, Bal_reg_log_Insul_change_tab, Bal_reg_Sex_tab, Bal_reg_Drug_dose_tab, Bal_reg_Indiv_drug_class_3_tab, Bal_reg_Model_simple_tab, Bal_reg_Background_simple_tab) Bal_metareg_sumtab$text <- paste(format(round(Bal_metareg_sumtab$beta, 1), nsmall = 1), format(round(Bal_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Bal_metareg_sumtab$text <- paste(Bal_metareg_sumtab$text, "", sep = ")", collapse = NULL) Bal_metareg_sumtab$pval_2dig <- paste((signif(Bal_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) Bal_metareg_sumtab$r2_2dig <- paste(format(round(Bal_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(Bal_metareg_sumtab,file="Bal_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="Bal_bubble_Wt_change.pdf",width=6,height=6) Bal_bubble_Wt_change <- bubble(Bal_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) Bal_bubble_Wt_change dev.off() pdf(file="Bal_bubble_Gluc_change.pdf",width=6,height=6) Bal_bubble_Gluc_change <- bubble(Bal_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) Bal_bubble_Gluc_change dev.off() pdf(file="Bal_bubble_FructGluc_per.pdf",width=6,height=6) Bal_bubble_FructGluc_per <- bubble(Bal_reg_log_FructGluc_per, xlab = "Log fat in diet (% kcal)", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-2.5, 1.2), xlim = c(2,4)) Bal_bubble_FructGluc_per dev.off() pdf(file="Bal_bubble_Fat_kcal.pdf",width=6,height=6) Bal_bubble_Fat_kcal <- bubble(Bal_reg_log_Fat_kcal, xlab = "Log fructose in diet (% weight)", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-2.5, 1.2), xlim = c(3, 4.5)) Bal_bubble_Fat_kcal dev.off() pdf(file="Bal_bubble_log_Duration.pdf",width=6,height=6) Bal_bubble_log_Duration <- bubble(Bal_reg_log_Duration, xlab = "Study quality score (0-4)", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-2.5, 1.2), xlim = c(0, 4)) Bal_bubble_log_Duration dev.off() ########## ##### run multiple meta-regression ## create data subset including >3 for each model >3 for background, and >3 for each drug ## start with dataset containing >3 for each background = Bal_data_min3bg Bal_data_min3bg_modelcounts <- Bal_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) Bal_data_min3bg_modelcounts_sum <- Bal_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) Bal_data_min3bg_model_less3 = subset(Bal_data_min3bg_modelcounts_sum, n <3) Bal_data_min3bg_model_less3$Model_simple <- droplevels(Bal_data_min3bg_model_less3$Model_simple) Bal_data_min3bg_model_droplist <- Bal_data_min3bg_model_less3$Model_simple Bal_multimetareg_data <- Bal_data_min3bg %>% filter(!Model_simple %in% Bal_data_min3bg_model_droplist) ## run multiple meta-regression ## create data subset including >3 for each model and >3 for background ## start with dataset containing >3 for each background = Bal_data_min3bg Bal_data_min3bg_modelcounts <- Bal_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) Bal_data_min3bg_modelcounts_sum <- Bal_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) Bal_data_min3bg_model_less3 = subset(Bal_data_min3bg_modelcounts_sum, n <3) Bal_data_min3bg_model_less3$Model_simple <- droplevels(Bal_data_min3bg_model_less3$Model_simple) Bal_data_min3bg_model_droplist <- Bal_data_min3bg_model_less3$Model_simple Bal_multimetareg_data <- Bal_data_min3bg %>% filter(!Model_simple %in% Bal_data_min3bg_model_droplist) ## Run metan Bal_multimetareg_metan <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) Bal_multmetareg_tab <- data.frame(Bal_multimetareg_metan$studlab) Bal_multmetareg_tab$yi <- Bal_multimetareg_metan[["TE"]] Bal_multmetareg_tab$sei <- Bal_multimetareg_metan[["seTE"]] Bal_multmetareg_tab$Model_simple <- Bal_multimetareg_metan[["data"]][["Model_simple"]] Bal_multmetareg_tab$Background_simple <- Bal_multimetareg_metan[["data"]][["Background_simple"]] Bal_multmetareg_tab$Sex <- Bal_multimetareg_metan[["data"]][["Sex"]] Bal_multmetareg_tab$Indiv_drug_class_3 <- Bal_multimetareg_metan[["data"]][["Indiv_drug_class_3"]] Bal_multmetareg_tab$log_Fat_kcal <- Bal_multimetareg_metan[["data"]][["log_Fat_kcal"]] Bal_multmetareg_tab$log_Age_start <- Bal_multimetareg_metan[["data"]][["log_Age_start"]] Bal_multmetareg_tab$log_Age_end <- Bal_multimetareg_metan[["data"]][["log_Age_end"]] Bal_multmetareg_tab$log_Duration <- Bal_multimetareg_metan[["data"]][["log_Duration"]] Bal_multmetareg_tab$log_Wt_change <- Bal_multimetareg_metan[["data"]][["log_Wt_change"]] Bal_multmetareg_tab$log_Gluc_change <- Bal_multimetareg_metan[["data"]][["log_Gluc_change"]] Bal_multmetareg_tab$log_Insul_change <- Bal_multimetareg_metan[["data"]][["log_Insul_change"]] Bal_multmetareg_tab$Qual_score <- Bal_multimetareg_metan[["data"]][["Qual_score"]] Bal_multmetareg_tab_cor <- cor(Bal_multmetareg_tab[,8:15], use="complete.obs") Bal_multmetareg_tab_cor library(PerformanceAnalytics) chart.Correlation(Bal_multmetareg_tab[,8:15], use="complete.obs") ## high correlations between variables, therefore drop: Wt_change, insulin change, & age start library(dmetar) Bal_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = Bal_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_end", "log_Duration", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE) Bal_multi_intereference1 sink("Bal_multi_intereference1.txt") print(Bal_multi_intereference1) sink() ## run multi-metareg for top model 1 Bal_multmetareg_1 <- rma(yi = yi, sei = sei, data = Bal_multmetareg_tab, method = "ML", mods = ~ log_Gluc_change, test="knha") Bal_multmetareg_1_tab <- coef(summary(Bal_multmetareg_1)) Bal_multmetareg_1_tab$rownames <- rownames(Bal_multmetareg_1_tab) Bal_multmetareg_1_tab$mod1_text <- paste(format(round(Bal_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(Bal_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Bal_multmetareg_1_tab$mod1_text <- paste(Bal_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL) Bal_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(Bal_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL) ## check robustness using permutation test Bal_multmetareg_1_permut <- permutest(Bal_multmetareg_1) sink("Bal_multmetareg_1_permut.txt") print(Bal_multmetareg_1_permut) sink() ## insufficient data to repeat multiple meta-reg using individual drugs in addition to other variables Bal_multmetareg_sumtab <- Bal_multmetareg_1_tab write.table(Bal_multmetareg_sumtab, "Bal_multmetareg_sumtab.csv", sep=",") ## See if meta-regression results change after removal of weight-loss diets library(tidyverse) Bal_NoWtLoss_data <- Bal_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') Bal_NoWtLoss_metan_full <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Bal_NoWtLoss_reg_log_Wt_change <- metareg(Bal_NoWtLoss_metan_full, log_Wt_change) Bal_NoWtLoss_reg_log_Wt_change_tab <- data.frame(Bal_NoWtLoss_reg_log_Wt_change[["beta"]]) Bal_NoWtLoss_reg_log_Wt_change_tab$se <- Bal_NoWtLoss_reg_log_Wt_change[["se"]] Bal_NoWtLoss_reg_log_Wt_change_tab$pval <- Bal_NoWtLoss_reg_log_Wt_change[["pval"]] Bal_NoWtLoss_reg_log_Wt_change_tab$beta <- Bal_NoWtLoss_reg_log_Wt_change[["beta"]] Bal_NoWtLoss_reg_log_Wt_change_tab <- Bal_NoWtLoss_reg_log_Wt_change_tab[-c(1),] Bal_NoWtLoss_reg_log_Wt_change_tab <- Bal_NoWtLoss_reg_log_Wt_change_tab[-c(1)] Bal_NoWtLoss_reg_log_Wt_change_tab$k <- Bal_NoWtLoss_reg_log_Wt_change[["k"]] Bal_NoWtLoss_reg_log_Wt_change_tab$r2 <- Bal_NoWtLoss_reg_log_Wt_change[["R2"]] Bal_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change" Bal_NoWtLoss_reg_log_Gluc_change <- metareg(Bal_NoWtLoss_metan_full, log_Gluc_change) Bal_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(Bal_NoWtLoss_reg_log_Gluc_change[["beta"]]) Bal_NoWtLoss_reg_log_Gluc_change_tab$se <- Bal_NoWtLoss_reg_log_Gluc_change[["se"]] Bal_NoWtLoss_reg_log_Gluc_change_tab$pval <- Bal_NoWtLoss_reg_log_Gluc_change[["pval"]] Bal_NoWtLoss_reg_log_Gluc_change_tab$beta <- Bal_NoWtLoss_reg_log_Gluc_change[["beta"]] Bal_NoWtLoss_reg_log_Gluc_change_tab <- Bal_NoWtLoss_reg_log_Gluc_change_tab[-c(1),] Bal_NoWtLoss_reg_log_Gluc_change_tab <- Bal_NoWtLoss_reg_log_Gluc_change_tab[-c(1)] Bal_NoWtLoss_reg_log_Gluc_change_tab$k <- Bal_NoWtLoss_reg_log_Gluc_change[["k"]] Bal_NoWtLoss_reg_log_Gluc_change_tab$r2 <- Bal_NoWtLoss_reg_log_Gluc_change[["R2"]] Bal_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change" Bal_NoWtLoss_reg_log_Insul_change <- metareg(Bal_NoWtLoss_metan_full, log_Insul_change) Bal_NoWtLoss_reg_log_Insul_change_tab <- data.frame(Bal_NoWtLoss_reg_log_Insul_change[["beta"]]) Bal_NoWtLoss_reg_log_Insul_change_tab$se <- Bal_NoWtLoss_reg_log_Insul_change[["se"]] Bal_NoWtLoss_reg_log_Insul_change_tab$pval <- Bal_NoWtLoss_reg_log_Insul_change[["pval"]] Bal_NoWtLoss_reg_log_Insul_change_tab$beta <- Bal_NoWtLoss_reg_log_Insul_change[["beta"]] Bal_NoWtLoss_reg_log_Insul_change_tab <- Bal_NoWtLoss_reg_log_Insul_change_tab[-c(1),] Bal_NoWtLoss_reg_log_Insul_change_tab <- Bal_NoWtLoss_reg_log_Insul_change_tab[-c(1)] Bal_NoWtLoss_reg_log_Insul_change_tab$k <- Bal_NoWtLoss_reg_log_Insul_change[["k"]] Bal_NoWtLoss_reg_log_Insul_change_tab$r2 <- Bal_NoWtLoss_reg_log_Insul_change[["R2"]] Bal_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change" Bal_NoWtLoss_metareg_sumtab <- rbind(Bal_NoWtLoss_reg_log_Wt_change_tab, Bal_NoWtLoss_reg_log_Gluc_change_tab, Bal_NoWtLoss_reg_log_Insul_change_tab) Bal_NoWtLoss_metareg_sumtab$text <- paste(format(round(Bal_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(Bal_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Bal_NoWtLoss_metareg_sumtab$text <- paste(Bal_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL) Bal_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(Bal_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) Bal_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(Bal_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(Bal_NoWtLoss_metareg_sumtab,file="Bal_NoWtLoss_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="Bal_NoWtLoss_bubble_Wt_change.pdf",width=6,height=6) Bal_NoWtLoss_bubble_Wt_change <- bubble(Bal_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) Bal_NoWtLoss_bubble_Wt_change dev.off() pdf(file="Bal_NoWtLoss_bubble_Gluc_change.pdf",width=6,height=6) Bal_NoWtLoss_bubble_Gluc_change <- bubble(Bal_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) Bal_NoWtLoss_bubble_Gluc_change dev.off() ## following on from Ballooning analysis setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/Fib_out") ######## ## Analysis for histological lobular inflammation grade (Fib) ######## ## Power analysis library(pwr) ## calculate common SD full_data$Fib_Int_SD2 <- full_data$Fib_Int_SD*full_data$Fib_Int_SD full_data$Fib_Pla_SD2 <- full_data$Fib_Pla_SD*full_data$Fib_Pla_SD full_data$Fib_comm_SD <- sqrt(((full_data$Fib_Int_SD2+full_data$Fib_Pla_SD2)/2)) full_data$Fib_m_diff <- full_data$Fib_Pla_Mean-full_data$Fib_Int_Mean full_data$Fib_eff_size <- full_data$Fib_m_diff/full_data$Fib_comm_SD library(tidyr) Fib_data <- full_data Fib_data <- Fib_data %>% drop_na(Fib_eff_size) Fib_data$power <- pwr.t2n.test(n1 = Fib_data$Fib_Int_size, n2 = Fib_data$Fib_Pla_size, d = Fib_data$Fib_eff_size)$power write.table(Fib_data$power,file="Fib_data_power.csv",sep=",") hist(Fib_data$power) Fib_dens_power <- density(Fib_data$power) pdf(file="Fib_kernel_power_v1.pdf") plot(Fib_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)") polygon(Fib_dens_power, col="red", border="blue") dev.off() ## load packages for metan library(dmetar) library(meta) library(metafor) library(readxl) max.print = 100000 ## drop where <3 unique studies for any drug class Fib_drugsclass_counts <- Fib_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Fib_class_counts <- Fib_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Fib_class_less3 = subset(Fib_class_counts, n <3) str(Fib_class_less3) Fib_class_less3$Drug_Class_new_1_all <- droplevels(Fib_class_less3$Drug_Class_new_1_all) Fib_class_droplist <- Fib_class_less3$Drug_Class_new_1_all Fib_data_min3class <- Fib_data %>% filter(!Drug_Class_new_1_all %in% Fib_class_droplist) ## run metan Fib_metan_class_main <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Fib_metan_class <- update(Fib_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results Fib_metan_class_tab <- data.frame(Fib_metan_class[["TE.random.w"]]) Fib_metan_class_tab$drug <- Fib_metan_class[["bylevs"]] Fib_metan_class_tab$SE <- Fib_metan_class[["seTE.random.w"]] Fib_metan_class_tab$lower <- Fib_metan_class[["lower.random.w"]] Fib_metan_class_tab$upper <- Fib_metan_class[["upper.random.w"]] Fib_metan_class_tab$Pz <- Fib_metan_class[["pval.random.w"]] Fib_metan_class_tab$weight <- Fib_metan_class[["w.random.w"]] Fib_metan_class_tab$k <- Fib_metan_class[["k.w"]] Fib_metan_class_tab$controls <- Fib_metan_class[["n.c.w"]] Fib_metan_class_tab$experimental <- Fib_metan_class[["n.e.w"]] Fib_metan_class_tab$Q <- Fib_metan_class[["Q.w"]] Fib_metan_class_tab$Pq <- Fib_metan_class[["pval.Q.w"]] Fib_metan_class_tab$tau <- Fib_metan_class[["tau.w"]] Fib_metan_class_tab$I2 <- Fib_metan_class[["I2.w"]] Fib_metan_class_tab <- Fib_metan_class_tab %>% rename(MD = Fib_metan_class...TE.random.w...) Fib_metan_class_tab <- Fib_metan_class_tab[order(-Fib_metan_class_tab$MD),] Fib_metan_class_tab$row_number <- 1:nrow(Fib_metan_class_tab) Fib_metan_class_tab$subgroup <- "Subgroup" Fib_class_counts <- Fib_class_counts %>% rename(drug = Drug_Class_new_1_all) Fib_metan_class_tab <- merge(Fib_class_counts, Fib_metan_class_tab, by="drug") Fib_metan_class_tab_overall <- data.frame(Fib_metan_class[["TE.random"]]) Fib_metan_class_tab_overall$drug <- "Overall" Fib_metan_class_tab_overall$SE <- Fib_metan_class[["seTE.random"]] Fib_metan_class_tab_overall$lower <- Fib_metan_class[["lower.random"]] Fib_metan_class_tab_overall$upper <- Fib_metan_class[["upper.random"]] Fib_metan_class_tab_overall$Pz <- Fib_metan_class[["pval.random"]] Fib_metan_class_tab_overall$weight <- (max(Fib_metan_class_tab$weight)*2) Fib_metan_class_tab_overall$k <- Fib_metan_class[["k"]] Fib_metan_class_tab_overall$controls <- sum(Fib_metan_class_tab$controls) Fib_metan_class_tab_overall$experimental <- sum(Fib_metan_class_tab$experimental) Fib_metan_class_tab_overall$Q <- Fib_metan_class[["Q"]] Fib_metan_class_tab_overall$Pq <- Fib_metan_class[["pval.Q"]] Fib_metan_class_tab_overall$tau <- Fib_metan_class[["tau"]] Fib_metan_class_tab_overall$I2 <- Fib_metan_class[["I2"]] Fib_metan_class_tab_overall <- Fib_metan_class_tab_overall %>% rename(MD = Fib_metan_class...TE.random...) Fib_metan_class_tab_overall$row_number <- ((nrow(Fib_metan_class_tab))+1) Fib_metan_class_tab_overall$subgroup <- "Overall" Fib_metan_class_tab_overall$n <- sum(Fib_metan_class_tab$n) Fib_metan_class_sumtab <- rbind(Fib_metan_class_tab, Fib_metan_class_tab_overall) Fib_metan_class_sumtab$weight <- as.numeric(Fib_metan_class_sumtab$weight) Fib_metan_class_sumtab$row_number <- as.numeric(Fib_metan_class_sumtab$row_number) Fib_metan_class_sumtab$subgroup <- as.factor(Fib_metan_class_sumtab$subgroup) Fib_metan_class_sumtab$total = Fib_metan_class_sumtab$controls + Fib_metan_class_sumtab$experimental Fib_metan_class_sumtab$text <- paste(format(round(Fib_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Fib_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Fib_metan_class_sumtab$text <- paste(Fib_metan_class_sumtab$text, format(round(Fib_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Fib_metan_class_sumtab$text <- paste(Fib_metan_class_sumtab$text, "", sep = ")", collapse = NULL) Fib_metan_class_sumtab$SE_1dig <- paste(format(round(Fib_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Fib_metan_class_sumtab$Pz_1dig <- paste((signif(Fib_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Fib_metan_class_sumtab$tI2_2dig <- paste(format(round(Fib_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Fib_metan_class_sumtab$tau_1dig <- paste(format(round(Fib_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Fib_metan_class_sumtab$Pq_1dig <- paste((signif(Fib_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Fib_metan_class_sumtab,file="Fib_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(Fib_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Fib_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Fib_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = Fib_metan_class_tab_overall$lower overall_max = Fib_metan_class_tab_overall$upper Fib_metan_class_ybreaks <- nrow(Fib_metan_class_sumtab) Fib_metan_class_sumtab <- Fib_metan_class_sumtab[order(Fib_metan_class_sumtab$row_number),] Fib_metan_class_forest <- ggplot(data= Fib_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Fib_metan_class_ybreaks, labels = Fib_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in fibrosis stage") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.1, 1), breaks=seq(-1.5, .5, 0.5), expand=c(0,0)) + geom_text(data=Fib_metan_class_sumtab, aes(x=.2, label=text), size = 3.5, hjust=0) + geom_text(data=Fib_metan_class_sumtab, aes(x=-2, label=k), size = 3.5, hjust=0) + geom_text(data=Fib_metan_class_sumtab, aes(x=-1.8, label=total), size = 3.5, hjust=0) pdf(file="Fib_metan_class_forest.pdf",width=9,height=3) Fib_metan_class_forest dev.off() ##################### ####### ## bias analysis Fib_class_eggers <- eggers.test(x = Fib_metan_class_main) Fib_class_eggers sink("Fib_class_eggers.txt") print(Fib_class_eggers) sink() Fib_class_trimfill <- trimfill(Fib_metan_class_main) Fib_class_trimfill sink("Fib_class_trimfill.txt") print(Fib_class_trimfill) sink() pdf(file="Fib_class_funnel.pdf") funnel(Fib_class_trimfill, xlab="Mean difference in hepatic Fib (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue")) dev.off() ## use Baujat plot to look for outliers pdf(file="Fib_class_baujat.pdf") Fib_class_baujat <- baujat(Fib_metan_class_main) Fib_class_baujat dev.off() ## look for outliers based on SD Fib_commSD_mean <- mean(Fib_data$Fib_comm_SD, na.rm=TRUE) Fib_commSD_SD <- sd(Fib_data$Fib_comm_SD, na.rm=TRUE) Fib_commSD_norm <- dnorm(Fib_data$Fib_comm_SD, mean = Fib_commSD_mean, sd = Fib_commSD_SD, log = FALSE) Fib_commSD_norm <- as.data.frame(Fib_commSD_norm) Fib_commSD_norm$Fib_comm_SD <- Fib_data$Fib_comm_SD Fib_commSD_norm$Paper <- Fib_data$Paper pdf(file = "Fib_commSD_norm.pdf") plot(Fib_commSD_norm$Fib_comm_SD, Fib_commSD_norm$Fib_commSD_norm) dev.off() ## exclude studies with Fib_comm_SD >1.5 or high contribution to heterogeneity on baujat plot Fib_NoOutlier_data = subset(Fib_data, Fib_comm_SD <1.5) Fib_NoOutlier_data <- Fib_NoOutlier_data %>% filter(Paper != "Imai 2017_1" & Paper != "Magdy 2017_1" & Paper != "Patel 2018_2" & Paper != "Kurita 2008_2") ####### ## re-rerun after outliers excluded ## drop where <3 unique studies for any drug class Fib_NoOutlier_drugsclass_counts <- Fib_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) Fib_NoOutlier_class_counts <- Fib_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) Fib_NoOutlier_class_less3 = subset(Fib_NoOutlier_class_counts, n <3) str(Fib_NoOutlier_class_less3) Fib_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(Fib_NoOutlier_class_less3$Drug_Class_new_1_all) Fib_NoOutlier_class_droplist <- Fib_NoOutlier_class_less3$Drug_Class_new_1_all Fib_NoOutlier_data_min3class <- Fib_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% Fib_NoOutlier_class_droplist) ## run metan Fib_NoOutlier_metan_class_main <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Fib_NoOutlier_metan_class <- update(Fib_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results Fib_NoOutlier_metan_class_tab <- data.frame(Fib_NoOutlier_metan_class[["TE.random.w"]]) Fib_NoOutlier_metan_class_tab$drug <- Fib_NoOutlier_metan_class[["bylevs"]] Fib_NoOutlier_metan_class_tab$SE <- Fib_NoOutlier_metan_class[["seTE.random.w"]] Fib_NoOutlier_metan_class_tab$lower <- Fib_NoOutlier_metan_class[["lower.random.w"]] Fib_NoOutlier_metan_class_tab$upper <- Fib_NoOutlier_metan_class[["upper.random.w"]] Fib_NoOutlier_metan_class_tab$Pz <- Fib_NoOutlier_metan_class[["pval.random.w"]] Fib_NoOutlier_metan_class_tab$weight <- Fib_NoOutlier_metan_class[["w.random.w"]] Fib_NoOutlier_metan_class_tab$k <- Fib_NoOutlier_metan_class[["k.w"]] Fib_NoOutlier_metan_class_tab$controls <- Fib_NoOutlier_metan_class[["n.c.w"]] Fib_NoOutlier_metan_class_tab$experimental <- Fib_NoOutlier_metan_class[["n.e.w"]] Fib_NoOutlier_metan_class_tab$Q <- Fib_NoOutlier_metan_class[["Q.w"]] Fib_NoOutlier_metan_class_tab$Pq <- Fib_NoOutlier_metan_class[["pval.Q.w"]] Fib_NoOutlier_metan_class_tab$tau <- Fib_NoOutlier_metan_class[["tau.w"]] Fib_NoOutlier_metan_class_tab$I2 <- Fib_NoOutlier_metan_class[["I2.w"]] Fib_NoOutlier_metan_class_tab <- Fib_NoOutlier_metan_class_tab %>% rename(MD = Fib_NoOutlier_metan_class...TE.random.w...) Fib_NoOutlier_metan_class_tab <- Fib_NoOutlier_metan_class_tab[order(-Fib_NoOutlier_metan_class_tab$MD),] Fib_NoOutlier_metan_class_tab <- Fib_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n()) Fib_NoOutlier_metan_class_tab$subgroup <- "Subgroup" Fib_NoOutlier_class_counts <- Fib_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all) Fib_NoOutlier_metan_class_tab <- merge(Fib_NoOutlier_class_counts, Fib_NoOutlier_metan_class_tab, by="drug") Fib_NoOutlier_metan_class_tab_overall <- data.frame(Fib_NoOutlier_metan_class[["TE.random"]]) Fib_NoOutlier_metan_class_tab_overall$drug <- "Overall" Fib_NoOutlier_metan_class_tab_overall$SE <- Fib_NoOutlier_metan_class[["seTE.random"]] Fib_NoOutlier_metan_class_tab_overall$lower <- Fib_NoOutlier_metan_class[["lower.random"]] Fib_NoOutlier_metan_class_tab_overall$upper <- Fib_NoOutlier_metan_class[["upper.random"]] Fib_NoOutlier_metan_class_tab_overall$Pz <- Fib_NoOutlier_metan_class[["pval.random"]] Fib_NoOutlier_metan_class_tab_overall$weight <- (max(Fib_NoOutlier_metan_class_tab$weight)*2) Fib_NoOutlier_metan_class_tab_overall$k <- Fib_NoOutlier_metan_class[["k"]] Fib_NoOutlier_metan_class_tab_overall$controls <- sum(Fib_NoOutlier_metan_class_tab$controls) Fib_NoOutlier_metan_class_tab_overall$experimental <- sum(Fib_NoOutlier_metan_class_tab$experimental) Fib_NoOutlier_metan_class_tab_overall$Q <- Fib_NoOutlier_metan_class[["Q"]] Fib_NoOutlier_metan_class_tab_overall$Pq <- Fib_NoOutlier_metan_class[["pval.Q"]] Fib_NoOutlier_metan_class_tab_overall$tau <- Fib_NoOutlier_metan_class[["tau"]] Fib_NoOutlier_metan_class_tab_overall$I2 <- Fib_NoOutlier_metan_class[["I2"]] Fib_NoOutlier_metan_class_tab_overall <- Fib_NoOutlier_metan_class_tab_overall %>% rename(MD = Fib_NoOutlier_metan_class...TE.random...) Fib_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(Fib_NoOutlier_metan_class_tab))+1) Fib_NoOutlier_metan_class_tab_overall$subgroup <- "Overall" Fib_NoOutlier_metan_class_tab_overall$n <- sum(Fib_NoOutlier_metan_class_tab$n) Fib_NoOutlier_metan_class_sumtab <- rbind(Fib_NoOutlier_metan_class_tab, Fib_NoOutlier_metan_class_tab_overall) Fib_NoOutlier_metan_class_sumtab$weight <- as.numeric(Fib_NoOutlier_metan_class_sumtab$weight) Fib_NoOutlier_metan_class_sumtab$row_number <- as.numeric(Fib_NoOutlier_metan_class_sumtab$row_number) Fib_NoOutlier_metan_class_sumtab$subgroup <- as.factor(Fib_NoOutlier_metan_class_sumtab$subgroup) Fib_NoOutlier_metan_class_sumtab$total = Fib_NoOutlier_metan_class_sumtab$controls + Fib_NoOutlier_metan_class_sumtab$experimental Fib_NoOutlier_metan_class_sumtab$text <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Fib_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$text <- paste(Fib_NoOutlier_metan_class_sumtab$text, format(round(Fib_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$text <- paste(Fib_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(Fib_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Fib_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(Fib_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Fib_NoOutlier_metan_class_sumtab,file="Fib_NoOutlier_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(Fib_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Fib_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Fib_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = Fib_NoOutlier_metan_class_tab_overall$lower overall_max = Fib_NoOutlier_metan_class_tab_overall$upper Fib_NoOutlier_metan_class_ybreaks <- nrow(Fib_NoOutlier_metan_class_sumtab) Fib_NoOutlier_metan_class_sumtab <- Fib_NoOutlier_metan_class_sumtab[order(Fib_NoOutlier_metan_class_sumtab$row_number),] Fib_NoOutlier_metan_class_forest <- ggplot(data= Fib_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Fib_NoOutlier_metan_class_ybreaks, labels = Fib_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in fibrosis stage") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.1, 1), breaks=seq(-1.5, .5, 0.5), expand=c(0,0)) + geom_text(data=Fib_NoOutlier_metan_class_sumtab, aes(x=.25, label=text), size = 3.5, hjust=0) + geom_text(data=Fib_NoOutlier_metan_class_sumtab, aes(x=-2, label=k), size = 3.5, hjust=0) + geom_text(data=Fib_NoOutlier_metan_class_sumtab, aes(x=-1.8, label=total), size = 3.5, hjust=0) pdf(file="Fib_NoOutlier_metan_class_forest.pdf",width=9,height=3) Fib_NoOutlier_metan_class_forest dev.off() ####### ## re-run using sub-grouping by individual drugs ## drop where <3 unique studies for any drug class Fib_drugIndiv_counts <- Fib_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) Fib_drugIndiv_sum_counts <- Fib_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) Fib_drugIndiv_less3 = subset(Fib_drugIndiv_sum_counts, n <3) str(Fib_drugIndiv_less3) Fib_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(Fib_drugIndiv_less3$Indiv_drug_class_3) Fib_drugIndiv_droplist <- Fib_drugIndiv_less3$Indiv_drug_class_3 Fib_data_min3drug <- Fib_data %>% filter(!Indiv_drug_class_3 %in% Fib_drugIndiv_droplist) ## run metan Fib_metan_drugIndiv <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Fib_metan_drugIndiv <- update(Fib_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug") ## make summary table of results Fib_metan_drugIndiv_tab <- data.frame(Fib_metan_drugIndiv[["TE.random.w"]]) Fib_metan_drugIndiv_tab$drug <- Fib_metan_drugIndiv[["bylevs"]] Fib_metan_drugIndiv_tab$SE <- Fib_metan_drugIndiv[["seTE.random.w"]] Fib_metan_drugIndiv_tab$lower <- Fib_metan_drugIndiv[["lower.random.w"]] Fib_metan_drugIndiv_tab$upper <- Fib_metan_drugIndiv[["upper.random.w"]] Fib_metan_drugIndiv_tab$Pz <- Fib_metan_drugIndiv[["pval.random.w"]] Fib_metan_drugIndiv_tab$weight <- Fib_metan_drugIndiv[["w.random.w"]] Fib_metan_drugIndiv_tab$k <- Fib_metan_drugIndiv[["k.w"]] Fib_metan_drugIndiv_tab$controls <- Fib_metan_drugIndiv[["n.c.w"]] Fib_metan_drugIndiv_tab$experimental <- Fib_metan_drugIndiv[["n.e.w"]] Fib_metan_drugIndiv_tab$Q <- Fib_metan_drugIndiv[["Q.w"]] Fib_metan_drugIndiv_tab$Pq <- Fib_metan_drugIndiv[["pval.Q.w"]] Fib_metan_drugIndiv_tab$tau <- Fib_metan_drugIndiv[["tau.w"]] Fib_metan_drugIndiv_tab$I2 <- Fib_metan_drugIndiv[["I2.w"]] Fib_metan_drugIndiv_tab <- Fib_metan_drugIndiv_tab %>% rename(MD = Fib_metan_drugIndiv...TE.random.w...) Fib_metan_drugIndiv_tab <- Fib_metan_drugIndiv_tab[order(-Fib_metan_drugIndiv_tab$MD),] Fib_metan_drugIndiv_tab <- Fib_metan_drugIndiv_tab %>% mutate(row_number= 1:n()) Fib_metan_drugIndiv_tab$subgroup <- "Subgroup" Fib_drugIndiv_sum_counts <- Fib_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3) Fib_metan_drugIndiv_tab <- merge(Fib_drugIndiv_sum_counts, Fib_metan_drugIndiv_tab, by="drug") Fib_metan_drugIndiv_tab_overall <- data.frame(Fib_metan_drugIndiv[["TE.random"]]) Fib_metan_drugIndiv_tab_overall$drug <- "Overall" Fib_metan_drugIndiv_tab_overall$SE <- Fib_metan_drugIndiv[["seTE.random"]] Fib_metan_drugIndiv_tab_overall$lower <- Fib_metan_drugIndiv[["lower.random"]] Fib_metan_drugIndiv_tab_overall$upper <- Fib_metan_drugIndiv[["upper.random"]] Fib_metan_drugIndiv_tab_overall$Pz <- Fib_metan_drugIndiv[["pval.random"]] Fib_metan_drugIndiv_tab_overall$weight <- (max(Fib_metan_drugIndiv_tab$weight)*2) Fib_metan_drugIndiv_tab_overall$k <- Fib_metan_drugIndiv[["k"]] Fib_metan_drugIndiv_tab_overall$controls <- sum(Fib_metan_drugIndiv_tab$controls) Fib_metan_drugIndiv_tab_overall$experimental <- sum(Fib_metan_drugIndiv_tab$experimental) Fib_metan_drugIndiv_tab_overall$Q <- Fib_metan_drugIndiv[["Q"]] Fib_metan_drugIndiv_tab_overall$Pq <- Fib_metan_drugIndiv[["pval.Q"]] Fib_metan_drugIndiv_tab_overall$tau <- Fib_metan_drugIndiv[["tau"]] Fib_metan_drugIndiv_tab_overall$I2 <- Fib_metan_drugIndiv[["I2"]] Fib_metan_drugIndiv_tab_overall <- Fib_metan_drugIndiv_tab_overall %>% rename(MD = Fib_metan_drugIndiv...TE.random...) Fib_metan_drugIndiv_tab_overall$row_number <- ((nrow(Fib_metan_drugIndiv_tab))+1) Fib_metan_drugIndiv_tab_overall$subgroup <- "Overall" Fib_metan_drugIndiv_tab_overall$n <- sum(Fib_metan_drugIndiv_tab$n) Fib_metan_drugIndiv_sumtab <- rbind(Fib_metan_drugIndiv_tab, Fib_metan_drugIndiv_tab_overall) Fib_metan_drugIndiv_sumtab$weight <- as.numeric(Fib_metan_drugIndiv_sumtab$weight) Fib_metan_drugIndiv_sumtab$row_number <- as.numeric(Fib_metan_drugIndiv_sumtab$row_number) Fib_metan_drugIndiv_sumtab$subgroup <- as.factor(Fib_metan_drugIndiv_sumtab$subgroup) Fib_metan_drugIndiv_sumtab$total = Fib_metan_drugIndiv_sumtab$controls + Fib_metan_drugIndiv_sumtab$experimental Fib_metan_drugIndiv_sumtab$text <- paste(format(round(Fib_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(Fib_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) Fib_metan_drugIndiv_sumtab$text <- paste(Fib_metan_drugIndiv_sumtab$text, format(round(Fib_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) Fib_metan_drugIndiv_sumtab$text <- paste(Fib_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL) Fib_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(Fib_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) Fib_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(Fib_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) Fib_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(Fib_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) Fib_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(Fib_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) Fib_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(Fib_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(Fib_metan_drugIndiv_sumtab,file="Fib_metan_drugIndiv_sumtab.csv",sep=",") ## make forest plot label_bold <- ifelse(Fib_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(Fib_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(Fib_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10") overall_min = Fib_metan_drugIndiv_tab_overall$lower overall_max = Fib_metan_drugIndiv_tab_overall$upper Fib_metan_drugIndiv_ybreaks <- nrow(Fib_metan_drugIndiv_sumtab) Fib_metan_drugIndiv_sumtab <- Fib_metan_drugIndiv_sumtab[order(Fib_metan_drugIndiv_sumtab$row_number),] Fib_metan_drugIndiv_forest <- ggplot(data= Fib_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: Fib_metan_drugIndiv_ybreaks, labels = Fib_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.7, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Fib_metan_drugIndiv_sumtab, aes(x=.2, label=text), size = 3.5, hjust=0) + geom_text(data=Fib_metan_drugIndiv_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=Fib_metan_drugIndiv_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0) pdf(file="Fib_metan_drugIndiv_forest.pdf",width=9,height=3) Fib_metan_drugIndiv_forest dev.off() ######## ## calculate sample size needed for average results ## mean comm_SD = Fib_commSD_mean ## meta-analysis mean difference = Fib_metan_class_main[["TE.random"]] ## calculate Cohen's d Fib_cohen_d = Fib_metan_class_main[["TE.random"]] / Fib_commSD_mean Fib_samplesize_av <- pwr.t.test(d = Fib_cohen_d, power = 0.80, sig.level = 0.05) ## n = 16 - number in **each** group ## find number of studies with n > Fib_samplesize_av Fib_data$total = Fib_data$Fib_Int_size + Fib_data$Fib_Pla_size Fib_pwrcount <- Fib_data %>% group_by(total, Paper) %>% summarise(n = n()) Fib_pwrcount_adequate = subset(Fib_pwrcount, total >= 2*(Fib_samplesize_av[["n"]])) write.table(Fib_pwrcount_adequate,file="Fib_pwrcount_adequate.csv",sep=",") ######## ## run meta-regressions on full Fib dataset for continuous traits Fib_metan_full <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## create metan with >3 for each level of categorical variables ## Background Fib_bg_counts <- Fib_data %>% group_by(Background_simple, Study) %>% summarise(n = n()) Fib_bg_counts_sum <- Fib_bg_counts %>% group_by(Background_simple) %>% summarise(n = n()) Fib_bg_less3 = subset(Fib_bg_counts_sum, n <3) Fib_bg_less3$Background_simple <- droplevels(Fib_bg_less3$Background_simple) Fib_bg_droplist <- Fib_bg_less3$Background_simple Fib_data_min3bg <- Fib_data %>% filter(!Background_simple %in% Fib_bg_droplist) Fib_metan_bg <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## Model Fib_model_counts <- Fib_data %>% group_by(Model_simple, Study) %>% summarise(n = n()) Fib_model_counts_sum <- Fib_model_counts %>% group_by(Model_simple) %>% summarise(n = n()) Fib_model_less3 = subset(Fib_model_counts_sum, n <3) Fib_model_less3$Model_simple <- droplevels(Fib_model_less3$Model_simple) Fib_model_droplist <- Fib_model_less3$Model_simple Fib_data_min3model <- Fib_data %>% filter(!Model_simple %in% Fib_model_droplist) Fib_metan_model <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## run metaregs Fib_reg_Qual_score <- metareg(Fib_metan_full, Qual_score) Fib_reg_Qual_score_tab <- data.frame(Fib_reg_Qual_score[["beta"]]) Fib_reg_Qual_score_tab$se <- Fib_reg_Qual_score[["se"]] Fib_reg_Qual_score_tab$pval <- Fib_reg_Qual_score[["pval"]] Fib_reg_Qual_score_tab$beta <- Fib_reg_Qual_score[["beta"]] Fib_reg_Qual_score_tab <- Fib_reg_Qual_score_tab[-c(1),] Fib_reg_Qual_score_tab <- Fib_reg_Qual_score_tab[-c(1)] Fib_reg_Qual_score_tab$k <- Fib_reg_Qual_score[["k"]] Fib_reg_Qual_score_tab$r2 <- Fib_reg_Qual_score[["R2"]] Fib_reg_Qual_score_tab$var <- "Qual_score" Fib_reg_Protocol <- metareg(Fib_metan_full, Protocol) Fib_reg_Protocol_tab <- data.frame(Fib_reg_Protocol[["beta"]]) Fib_reg_Protocol_tab$se <- Fib_reg_Protocol[["se"]] Fib_reg_Protocol_tab$pval <- Fib_reg_Protocol[["pval"]] Fib_reg_Protocol_tab$beta <- Fib_reg_Protocol[["beta"]] Fib_reg_Protocol_tab <- Fib_reg_Protocol_tab[-c(1),] Fib_reg_Protocol_tab <- Fib_reg_Protocol_tab[-c(1)] Fib_reg_Protocol_tab$k <- Fib_reg_Protocol[["k"]] Fib_reg_Protocol_tab$r2 <- Fib_reg_Protocol[["R2"]] Fib_reg_Protocol_tab$var <- "Protocol" Fib_reg_Randomisation <- metareg(Fib_metan_full, Randomisation) Fib_reg_Randomisation_tab <- data.frame(Fib_reg_Randomisation[["beta"]]) Fib_reg_Randomisation_tab$se <- Fib_reg_Randomisation[["se"]] Fib_reg_Randomisation_tab$pval <- Fib_reg_Randomisation[["pval"]] Fib_reg_Randomisation_tab$beta <- Fib_reg_Randomisation[["beta"]] Fib_reg_Randomisation_tab <- Fib_reg_Randomisation_tab[-c(1),] Fib_reg_Randomisation_tab <- Fib_reg_Randomisation_tab[-c(1)] Fib_reg_Randomisation_tab$k <- Fib_reg_Randomisation[["k"]] Fib_reg_Randomisation_tab$r2 <- Fib_reg_Randomisation[["R2"]] Fib_reg_Randomisation_tab$var <- "Randomisation" Fib_reg_Blinding <- metareg(Fib_metan_full, Blinding) Fib_reg_Blinding_tab <- data.frame(Fib_reg_Blinding[["beta"]]) Fib_reg_Blinding_tab$se <- Fib_reg_Blinding[["se"]] Fib_reg_Blinding_tab$pval <- Fib_reg_Blinding[["pval"]] Fib_reg_Blinding_tab$beta <- Fib_reg_Blinding[["beta"]] Fib_reg_Blinding_tab <- Fib_reg_Blinding_tab[-c(1),] Fib_reg_Blinding_tab <- Fib_reg_Blinding_tab[-c(1)] Fib_reg_Blinding_tab$k <- Fib_reg_Blinding[["k"]] Fib_reg_Blinding_tab$r2 <- Fib_reg_Blinding[["R2"]] Fib_reg_Blinding_tab$var <- "Blinding" Fib_reg_Power_calculation <- metareg(Fib_metan_full, Power_calculation) Fib_reg_Power_calculation_tab <- data.frame(Fib_reg_Power_calculation[["beta"]]) Fib_reg_Power_calculation_tab$se <- Fib_reg_Power_calculation[["se"]] Fib_reg_Power_calculation_tab$pval <- Fib_reg_Power_calculation[["pval"]] Fib_reg_Power_calculation_tab$beta <- Fib_reg_Power_calculation[["beta"]] Fib_reg_Power_calculation_tab <- Fib_reg_Power_calculation_tab[-c(1),] Fib_reg_Power_calculation_tab <- Fib_reg_Power_calculation_tab[-c(1)] Fib_reg_Power_calculation_tab$k <- Fib_reg_Power_calculation[["k"]] Fib_reg_Power_calculation_tab$r2 <- Fib_reg_Power_calculation[["R2"]] Fib_reg_Power_calculation_tab$var <- "Power_calculation" Fib_reg_Chol_per <- metareg(Fib_metan_full, Chol_per) Fib_reg_Chol_per_tab <- data.frame(Fib_reg_Chol_per[["beta"]]) Fib_reg_Chol_per_tab$se <- Fib_reg_Chol_per[["se"]] Fib_reg_Chol_per_tab$pval <- Fib_reg_Chol_per[["pval"]] Fib_reg_Chol_per_tab$beta <- Fib_reg_Chol_per[["beta"]] Fib_reg_Chol_per_tab <- Fib_reg_Chol_per_tab[-c(1),] Fib_reg_Chol_per_tab <- Fib_reg_Chol_per_tab[-c(1)] Fib_reg_Chol_per_tab$k <- Fib_reg_Chol_per[["k"]] Fib_reg_Chol_per_tab$r2 <- Fib_reg_Chol_per[["R2"]] Fib_reg_Chol_per_tab$var <- "Chol_per" Fib_reg_log_FructGluc_per <- metareg(Fib_metan_full, log_FructGluc_per) Fib_reg_log_FructGluc_per_tab <- data.frame(Fib_reg_log_FructGluc_per[["beta"]]) Fib_reg_log_FructGluc_per_tab$se <- Fib_reg_log_FructGluc_per[["se"]] Fib_reg_log_FructGluc_per_tab$pval <- Fib_reg_log_FructGluc_per[["pval"]] Fib_reg_log_FructGluc_per_tab$beta <- Fib_reg_log_FructGluc_per[["beta"]] Fib_reg_log_FructGluc_per_tab <- Fib_reg_log_FructGluc_per_tab[-c(1),] Fib_reg_log_FructGluc_per_tab <- Fib_reg_log_FructGluc_per_tab[-c(1)] Fib_reg_log_FructGluc_per_tab$k <- Fib_reg_log_FructGluc_per[["k"]] Fib_reg_log_FructGluc_per_tab$r2 <- Fib_reg_log_FructGluc_per[["R2"]] Fib_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per" Fib_reg_log_Sucr_kcal <- metareg(Fib_metan_full, log_Sucr_kcal) Fib_reg_log_Sucr_kcal_tab <- data.frame(Fib_reg_log_Sucr_kcal[["beta"]]) Fib_reg_log_Sucr_kcal_tab$se <- Fib_reg_log_Sucr_kcal[["se"]] Fib_reg_log_Sucr_kcal_tab$pval <- Fib_reg_log_Sucr_kcal[["pval"]] Fib_reg_log_Sucr_kcal_tab$beta <- Fib_reg_log_Sucr_kcal[["beta"]] Fib_reg_log_Sucr_kcal_tab <- Fib_reg_log_Sucr_kcal_tab[-c(1),] Fib_reg_log_Sucr_kcal_tab <- Fib_reg_log_Sucr_kcal_tab[-c(1)] Fib_reg_log_Sucr_kcal_tab$k <- Fib_reg_log_Sucr_kcal[["k"]] Fib_reg_log_Sucr_kcal_tab$r2 <- Fib_reg_log_Sucr_kcal[["R2"]] Fib_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal" Fib_reg_log_Fat_kcal <- metareg(Fib_metan_full, log_Fat_kcal) Fib_reg_log_Fat_kcal_tab <- data.frame(Fib_reg_log_Fat_kcal[["beta"]]) Fib_reg_log_Fat_kcal_tab$se <- Fib_reg_log_Fat_kcal[["se"]] Fib_reg_log_Fat_kcal_tab$pval <- Fib_reg_log_Fat_kcal[["pval"]] Fib_reg_log_Fat_kcal_tab$beta <- Fib_reg_log_Fat_kcal[["beta"]] Fib_reg_log_Fat_kcal_tab <- Fib_reg_log_Fat_kcal_tab[-c(1),] Fib_reg_log_Fat_kcal_tab <- Fib_reg_log_Fat_kcal_tab[-c(1)] Fib_reg_log_Fat_kcal_tab$k <- Fib_reg_log_Fat_kcal[["k"]] Fib_reg_log_Fat_kcal_tab$r2 <- Fib_reg_log_Fat_kcal[["R2"]] Fib_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal" Fib_reg_log_Age_start <- metareg(Fib_metan_full, log_Age_start) Fib_reg_log_Age_start_tab <- data.frame(Fib_reg_log_Age_start[["beta"]]) Fib_reg_log_Age_start_tab$se <- Fib_reg_log_Age_start[["se"]] Fib_reg_log_Age_start_tab$pval <- Fib_reg_log_Age_start[["pval"]] Fib_reg_log_Age_start_tab$beta <- Fib_reg_log_Age_start[["beta"]] Fib_reg_log_Age_start_tab <- Fib_reg_log_Age_start_tab[-c(1),] Fib_reg_log_Age_start_tab <- Fib_reg_log_Age_start_tab[-c(1)] Fib_reg_log_Age_start_tab$k <- Fib_reg_log_Age_start[["k"]] Fib_reg_log_Age_start_tab$r2 <- Fib_reg_log_Age_start[["R2"]] Fib_reg_log_Age_start_tab$var <- "log_Age_start" Fib_reg_log_Duration <- metareg(Fib_metan_full, log_Duration) Fib_reg_log_Duration_tab <- data.frame(Fib_reg_log_Duration[["beta"]]) Fib_reg_log_Duration_tab$se <- Fib_reg_log_Duration[["se"]] Fib_reg_log_Duration_tab$pval <- Fib_reg_log_Duration[["pval"]] Fib_reg_log_Duration_tab$beta <- Fib_reg_log_Duration[["beta"]] Fib_reg_log_Duration_tab <- Fib_reg_log_Duration_tab[-c(1),] Fib_reg_log_Duration_tab <- Fib_reg_log_Duration_tab[-c(1)] Fib_reg_log_Duration_tab$k <- Fib_reg_log_Duration[["k"]] Fib_reg_log_Duration_tab$r2 <- Fib_reg_log_Duration[["R2"]] Fib_reg_log_Duration_tab$var <- "log_Duration" Fib_reg_log_Age_end <- metareg(Fib_metan_full, log_Age_end) Fib_reg_log_Age_end_tab <- data.frame(Fib_reg_log_Age_end[["beta"]]) Fib_reg_log_Age_end_tab$se <- Fib_reg_log_Age_end[["se"]] Fib_reg_log_Age_end_tab$pval <- Fib_reg_log_Age_end[["pval"]] Fib_reg_log_Age_end_tab$beta <- Fib_reg_log_Age_end[["beta"]] Fib_reg_log_Age_end_tab <- Fib_reg_log_Age_end_tab[-c(1),] Fib_reg_log_Age_end_tab <- Fib_reg_log_Age_end_tab[-c(1)] Fib_reg_log_Age_end_tab$k <- Fib_reg_log_Age_end[["k"]] Fib_reg_log_Age_end_tab$r2 <- Fib_reg_log_Age_end[["R2"]] Fib_reg_log_Age_end_tab$var <- "log_Age_end" Fib_reg_log_Wt_change <- metareg(Fib_metan_full, log_Wt_change) Fib_reg_log_Wt_change_tab <- data.frame(Fib_reg_log_Wt_change[["beta"]]) Fib_reg_log_Wt_change_tab$se <- Fib_reg_log_Wt_change[["se"]] Fib_reg_log_Wt_change_tab$pval <- Fib_reg_log_Wt_change[["pval"]] Fib_reg_log_Wt_change_tab$beta <- Fib_reg_log_Wt_change[["beta"]] Fib_reg_log_Wt_change_tab <- Fib_reg_log_Wt_change_tab[-c(1),] Fib_reg_log_Wt_change_tab <- Fib_reg_log_Wt_change_tab[-c(1)] Fib_reg_log_Wt_change_tab$k <- Fib_reg_log_Wt_change[["k"]] Fib_reg_log_Wt_change_tab$r2 <- Fib_reg_log_Wt_change[["R2"]] Fib_reg_log_Wt_change_tab$var <- "log_Wt_change" Fib_reg_log_Gluc_change <- metareg(Fib_metan_full, log_Gluc_change) Fib_reg_log_Gluc_change_tab <- data.frame(Fib_reg_log_Gluc_change[["beta"]]) Fib_reg_log_Gluc_change_tab$se <- Fib_reg_log_Gluc_change[["se"]] Fib_reg_log_Gluc_change_tab$pval <- Fib_reg_log_Gluc_change[["pval"]] Fib_reg_log_Gluc_change_tab$beta <- Fib_reg_log_Gluc_change[["beta"]] Fib_reg_log_Gluc_change_tab <- Fib_reg_log_Gluc_change_tab[-c(1),] Fib_reg_log_Gluc_change_tab <- Fib_reg_log_Gluc_change_tab[-c(1)] Fib_reg_log_Gluc_change_tab$k <- Fib_reg_log_Gluc_change[["k"]] Fib_reg_log_Gluc_change_tab$r2 <- Fib_reg_log_Gluc_change[["R2"]] Fib_reg_log_Gluc_change_tab$var <- "log_Gluc_change" Fib_reg_log_Insul_change <- metareg(Fib_metan_full, log_Insul_change) Fib_reg_log_Insul_change_tab <- data.frame(Fib_reg_log_Insul_change[["beta"]]) Fib_reg_log_Insul_change_tab$se <- Fib_reg_log_Insul_change[["se"]] Fib_reg_log_Insul_change_tab$pval <- Fib_reg_log_Insul_change[["pval"]] Fib_reg_log_Insul_change_tab$beta <- Fib_reg_log_Insul_change[["beta"]] Fib_reg_log_Insul_change_tab <- Fib_reg_log_Insul_change_tab[-c(1),] Fib_reg_log_Insul_change_tab <- Fib_reg_log_Insul_change_tab[-c(1)] Fib_reg_log_Insul_change_tab$k <- Fib_reg_log_Insul_change[["k"]] Fib_reg_log_Insul_change_tab$r2 <- Fib_reg_log_Insul_change[["R2"]] Fib_reg_log_Insul_change_tab$var <- "log_Insul_change" Fib_reg_Sex <- metareg(Fib_metan_full, Sex) Fib_reg_Sex_tab <- data.frame(Fib_reg_Sex[["beta"]]) Fib_reg_Sex_tab$se <- Fib_reg_Sex[["se"]] Fib_reg_Sex_tab$pval <- Fib_reg_Sex[["pval"]] Fib_reg_Sex_tab$beta <- Fib_reg_Sex[["beta"]] Fib_reg_Sex_tab <- Fib_reg_Sex_tab[-c(1),] Fib_reg_Sex_tab <- Fib_reg_Sex_tab[-c(1)] Fib_reg_Sex_tab$k <- Fib_reg_Sex[["k"]] Fib_reg_Sex_tab$r2 <- NA Fib_reg_Sex_tab$var <- rownames(Fib_reg_Sex_tab) Fib_reg_Sex_overall_tab <- data.frame(Fib_reg_Sex[["QMp"]]) Fib_reg_Sex_overall_tab$se <- NA Fib_reg_Sex_overall_tab$pval <- Fib_reg_Sex[["QMp"]] Fib_reg_Sex_overall_tab$beta <- NA Fib_reg_Sex_overall_tab <- Fib_reg_Sex_overall_tab[-c(1)] Fib_reg_Sex_overall_tab$k <- Fib_reg_Sex[["k"]] Fib_reg_Sex_overall_tab$r2 <- Fib_reg_Sex[["R2"]] Fib_reg_Sex_overall_tab$var <- "Sex_overall" Fib_reg_Sex_tab <- rbind(Fib_reg_Sex_tab, Fib_reg_Sex_overall_tab) Fib_reg_Drug_dose <- metareg(Fib_metan_drugIndiv, Drug_dose) Fib_reg_Drug_dose_tab <- data.frame(Fib_reg_Drug_dose[["beta"]]) Fib_reg_Drug_dose_tab$se <- Fib_reg_Drug_dose[["se"]] Fib_reg_Drug_dose_tab$pval <- Fib_reg_Drug_dose[["pval"]] Fib_reg_Drug_dose_tab$beta <- Fib_reg_Drug_dose[["beta"]] Fib_reg_Drug_dose_tab <- Fib_reg_Drug_dose_tab[-c(1),] Fib_reg_Drug_dose_tab <- Fib_reg_Drug_dose_tab[-c(1)] Fib_reg_Drug_dose_tab$k <- Fib_reg_Drug_dose[["k"]] Fib_reg_Drug_dose_tab$r2 <- Fib_reg_Drug_dose[["R2"]] Fib_reg_Drug_dose_tab$var <- "Drug_dose" Fib_reg_Indiv_drug_class_3 <- metareg(Fib_metan_drugIndiv, Indiv_drug_class_3) Fib_reg_Indiv_drug_class_3_tab <- data.frame(Fib_reg_Indiv_drug_class_3[["beta"]]) Fib_reg_Indiv_drug_class_3_tab$se <- Fib_reg_Indiv_drug_class_3[["se"]] Fib_reg_Indiv_drug_class_3_tab$pval <- Fib_reg_Indiv_drug_class_3[["pval"]] Fib_reg_Indiv_drug_class_3_tab$beta <- Fib_reg_Indiv_drug_class_3[["beta"]] Fib_reg_Indiv_drug_class_3_tab <- Fib_reg_Indiv_drug_class_3_tab[-c(1),] Fib_reg_Indiv_drug_class_3_tab <- Fib_reg_Indiv_drug_class_3_tab[-c(1)] Fib_reg_Indiv_drug_class_3_tab$k <- Fib_reg_Indiv_drug_class_3[["k"]] Fib_reg_Indiv_drug_class_3_tab$r2 <- NA Fib_reg_Indiv_drug_class_3_tab$var <- rownames(Fib_reg_Indiv_drug_class_3_tab) Fib_reg_Indiv_drug_class_3_overall_tab <- data.frame(Fib_reg_Indiv_drug_class_3[["QMp"]]) Fib_reg_Indiv_drug_class_3_overall_tab$se <- NA Fib_reg_Indiv_drug_class_3_overall_tab$pval <- Fib_reg_Indiv_drug_class_3[["QMp"]] Fib_reg_Indiv_drug_class_3_overall_tab$beta <- NA Fib_reg_Indiv_drug_class_3_overall_tab <- Fib_reg_Indiv_drug_class_3_overall_tab[-c(1)] Fib_reg_Indiv_drug_class_3_overall_tab$k <- Fib_reg_Indiv_drug_class_3[["k"]] Fib_reg_Indiv_drug_class_3_overall_tab$r2 <- Fib_reg_Indiv_drug_class_3[["R2"]] Fib_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall" Fib_reg_Indiv_drug_class_3_tab <- rbind(Fib_reg_Indiv_drug_class_3_tab, Fib_reg_Indiv_drug_class_3_overall_tab) Fib_reg_Model_simple <- metareg(Fib_metan_model, Model_simple) Fib_reg_Model_simple_tab <- data.frame(Fib_reg_Model_simple[["beta"]]) Fib_reg_Model_simple_tab$se <- Fib_reg_Model_simple[["se"]] Fib_reg_Model_simple_tab$pval <- Fib_reg_Model_simple[["pval"]] Fib_reg_Model_simple_tab$beta <- Fib_reg_Model_simple[["beta"]] Fib_reg_Model_simple_tab <- Fib_reg_Model_simple_tab[-c(1),] Fib_reg_Model_simple_tab <- Fib_reg_Model_simple_tab[-c(1)] Fib_reg_Model_simple_tab$k <- Fib_reg_Model_simple[["k"]] Fib_reg_Model_simple_tab$r2 <- NA Fib_reg_Model_simple_tab$var <- rownames(Fib_reg_Model_simple_tab) Fib_reg_Model_simple_overall_tab <- data.frame(Fib_reg_Model_simple[["QMp"]]) Fib_reg_Model_simple_overall_tab$se <- NA Fib_reg_Model_simple_overall_tab$pval <- Fib_reg_Model_simple[["QMp"]] Fib_reg_Model_simple_overall_tab$beta <- NA Fib_reg_Model_simple_overall_tab <- Fib_reg_Model_simple_overall_tab[-c(1)] Fib_reg_Model_simple_overall_tab$k <- Fib_reg_Model_simple[["k"]] Fib_reg_Model_simple_overall_tab$r2 <- Fib_reg_Model_simple[["R2"]] Fib_reg_Model_simple_overall_tab$var <- "Model_simple_overall" Fib_reg_Model_simple_tab <- rbind(Fib_reg_Model_simple_tab, Fib_reg_Model_simple_overall_tab) Fib_reg_Background_simple <- metareg(Fib_metan_bg, Background_simple) Fib_reg_Background_simple_tab <- data.frame(Fib_reg_Background_simple[["beta"]]) Fib_reg_Background_simple_tab$se <- Fib_reg_Background_simple[["se"]] Fib_reg_Background_simple_tab$pval <- Fib_reg_Background_simple[["pval"]] Fib_reg_Background_simple_tab$beta <- Fib_reg_Background_simple[["beta"]] Fib_reg_Background_simple_tab <- Fib_reg_Background_simple_tab[-c(1),] Fib_reg_Background_simple_tab <- Fib_reg_Background_simple_tab[-c(1)] Fib_reg_Background_simple_tab$k <- Fib_reg_Background_simple[["k"]] Fib_reg_Background_simple_tab$r2 <- NA Fib_reg_Background_simple_tab$var <- rownames(Fib_reg_Background_simple_tab) Fib_reg_Background_simple_overall_tab <- data.frame(Fib_reg_Background_simple[["QMp"]]) Fib_reg_Background_simple_overall_tab$se <- NA Fib_reg_Background_simple_overall_tab$pval <- Fib_reg_Background_simple[["QMp"]] Fib_reg_Background_simple_overall_tab$beta <- NA Fib_reg_Background_simple_overall_tab <- Fib_reg_Background_simple_overall_tab[-c(1)] Fib_reg_Background_simple_overall_tab$k <- Fib_reg_Background_simple[["k"]] Fib_reg_Background_simple_overall_tab$r2 <- Fib_reg_Background_simple[["R2"]] Fib_reg_Background_simple_overall_tab$var <- "Background_simple_overall" Fib_reg_Background_simple_tab <- rbind(Fib_reg_Background_simple_tab, Fib_reg_Background_simple_overall_tab) Fib_metareg_sumtab <- rbind(Fib_reg_Qual_score_tab, Fib_reg_Protocol_tab, Fib_reg_Randomisation_tab, Fib_reg_Blinding_tab, Fib_reg_Power_calculation_tab, Fib_reg_Chol_per_tab, Fib_reg_log_FructGluc_per_tab, Fib_reg_log_Sucr_kcal_tab, Fib_reg_log_Fat_kcal_tab, Fib_reg_log_Age_start_tab, Fib_reg_log_Duration_tab, Fib_reg_log_Age_end_tab, Fib_reg_log_Wt_change_tab, Fib_reg_log_Gluc_change_tab, Fib_reg_log_Insul_change_tab, Fib_reg_Sex_tab, Fib_reg_Drug_dose_tab, Fib_reg_Indiv_drug_class_3_tab, Fib_reg_Model_simple_tab, Fib_reg_Background_simple_tab) Fib_metareg_sumtab$text <- paste(format(round(Fib_metareg_sumtab$beta, 1), nsmall = 1), format(round(Fib_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Fib_metareg_sumtab$text <- paste(Fib_metareg_sumtab$text, "", sep = ")", collapse = NULL) Fib_metareg_sumtab$pval_2dig <- paste((signif(Fib_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) Fib_metareg_sumtab$r2_2dig <- paste(format(round(Fib_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(Fib_metareg_sumtab,file="Fib_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="Fib_bubble_Wt_change.pdf",width=6,height=6) Fib_bubble_Wt_change <- bubble(Fib_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in fibrosis stage", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) Fib_bubble_Wt_change dev.off() ########## ##### run multiple meta-regression ## insufficient data to create a subset ## Run metan Fib_multimetareg_metan <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) Fib_multmetareg_tab <- data.frame(Fib_multimetareg_metan$studlab) Fib_multmetareg_tab$yi <- Fib_multimetareg_metan[["TE"]] Fib_multmetareg_tab$sei <- Fib_multimetareg_metan[["seTE"]] Fib_multmetareg_tab$Model_simple <- Fib_multimetareg_metan[["data"]][["Model_simple"]] Fib_multmetareg_tab$Background_simple <- Fib_multimetareg_metan[["data"]][["Background_simple"]] Fib_multmetareg_tab$Sex <- Fib_multimetareg_metan[["data"]][["Sex"]] Fib_multmetareg_tab$Indiv_drug_class_3 <- Fib_multimetareg_metan[["data"]][["Indiv_drug_class_3"]] Fib_multmetareg_tab$log_Fat_kcal <- Fib_multimetareg_metan[["data"]][["log_Fat_kcal"]] Fib_multmetareg_tab$log_Age_start <- Fib_multimetareg_metan[["data"]][["log_Age_start"]] Fib_multmetareg_tab$log_Age_end <- Fib_multimetareg_metan[["data"]][["log_Age_end"]] Fib_multmetareg_tab$log_Duration <- Fib_multimetareg_metan[["data"]][["log_Duration"]] Fib_multmetareg_tab$log_Wt_change <- Fib_multimetareg_metan[["data"]][["log_Wt_change"]] Fib_multmetareg_tab$log_Gluc_change <- Fib_multimetareg_metan[["data"]][["log_Gluc_change"]] Fib_multmetareg_tab$log_Insul_change <- Fib_multimetareg_metan[["data"]][["log_Insul_change"]] Fib_multmetareg_tab$Qual_score <- Fib_multimetareg_metan[["data"]][["Qual_score"]] Fib_multmetareg_tab_cor <- cor(Fib_multmetareg_tab[,8:15], use="complete.obs") Fib_multmetareg_tab_cor library(PerformanceAnalytics) chart.Correlation(Fib_multmetareg_tab[,8:15], use="complete.obs") ## high correlation between age_start and age_end therefore drop age_end from model ## also have to drop insulin change due to insufficient data library(dmetar) Fib_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = Fib_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE) Fib_multi_intereference1 sink("Fib_multi_intereference1.txt") print(Fib_multi_intereference1) sink() ## run multi-metareg for top model 1 Fib_multmetareg_1 <- rma(yi = yi, sei = sei, data = Fib_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Qual_score + log_Wt_change + log_Gluc_change + log_Duration + Model_simple + log_Age_start, test="knha") Fib_multmetareg_1_tab <- coef(summary(Fib_multmetareg_1)) Fib_multmetareg_1_tab$rownames <- rownames(Fib_multmetareg_1_tab) Fib_multmetareg_1_tab$mod1_text <- paste(format(round(Fib_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(Fib_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Fib_multmetareg_1_tab$mod1_text <- paste(Fib_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL) Fib_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(Fib_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL) ## check robustness using permutation test Fib_multmetareg_1_permut <- permutest(Fib_multmetareg_1) sink("Fib_multmetareg_1_permut.txt") print(Fib_multmetareg_1_permut) sink() ## insufficient data to repeat multiple meta-reg using individual drugs in addition to other variables Fib_multmetareg_sumtab <- Fib_multmetareg_1_tab write.table(Fib_multmetareg_sumtab, "Fib_multmetareg_sumtab.csv", sep=",") ## See if meta-regression results change after removal of weight-loss diets library(tidyverse) Fib_NoWtLoss_data <- Fib_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') Fib_NoWtLoss_metan_full <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") Fib_NoWtLoss_reg_log_Wt_change <- metareg(Fib_NoWtLoss_metan_full, log_Wt_change) Fib_NoWtLoss_reg_log_Wt_change_tab <- data.frame(Fib_NoWtLoss_reg_log_Wt_change[["beta"]]) Fib_NoWtLoss_reg_log_Wt_change_tab$se <- Fib_NoWtLoss_reg_log_Wt_change[["se"]] Fib_NoWtLoss_reg_log_Wt_change_tab$pval <- Fib_NoWtLoss_reg_log_Wt_change[["pval"]] Fib_NoWtLoss_reg_log_Wt_change_tab$beta <- Fib_NoWtLoss_reg_log_Wt_change[["beta"]] Fib_NoWtLoss_reg_log_Wt_change_tab <- Fib_NoWtLoss_reg_log_Wt_change_tab[-c(1),] Fib_NoWtLoss_reg_log_Wt_change_tab <- Fib_NoWtLoss_reg_log_Wt_change_tab[-c(1)] Fib_NoWtLoss_reg_log_Wt_change_tab$k <- Fib_NoWtLoss_reg_log_Wt_change[["k"]] Fib_NoWtLoss_reg_log_Wt_change_tab$r2 <- Fib_NoWtLoss_reg_log_Wt_change[["R2"]] Fib_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change" Fib_NoWtLoss_reg_log_Gluc_change <- metareg(Fib_NoWtLoss_metan_full, log_Gluc_change) Fib_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(Fib_NoWtLoss_reg_log_Gluc_change[["beta"]]) Fib_NoWtLoss_reg_log_Gluc_change_tab$se <- Fib_NoWtLoss_reg_log_Gluc_change[["se"]] Fib_NoWtLoss_reg_log_Gluc_change_tab$pval <- Fib_NoWtLoss_reg_log_Gluc_change[["pval"]] Fib_NoWtLoss_reg_log_Gluc_change_tab$beta <- Fib_NoWtLoss_reg_log_Gluc_change[["beta"]] Fib_NoWtLoss_reg_log_Gluc_change_tab <- Fib_NoWtLoss_reg_log_Gluc_change_tab[-c(1),] Fib_NoWtLoss_reg_log_Gluc_change_tab <- Fib_NoWtLoss_reg_log_Gluc_change_tab[-c(1)] Fib_NoWtLoss_reg_log_Gluc_change_tab$k <- Fib_NoWtLoss_reg_log_Gluc_change[["k"]] Fib_NoWtLoss_reg_log_Gluc_change_tab$r2 <- Fib_NoWtLoss_reg_log_Gluc_change[["R2"]] Fib_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change" Fib_NoWtLoss_reg_log_Insul_change <- metareg(Fib_NoWtLoss_metan_full, log_Insul_change) Fib_NoWtLoss_reg_log_Insul_change_tab <- data.frame(Fib_NoWtLoss_reg_log_Insul_change[["beta"]]) Fib_NoWtLoss_reg_log_Insul_change_tab$se <- Fib_NoWtLoss_reg_log_Insul_change[["se"]] Fib_NoWtLoss_reg_log_Insul_change_tab$pval <- Fib_NoWtLoss_reg_log_Insul_change[["pval"]] Fib_NoWtLoss_reg_log_Insul_change_tab$beta <- Fib_NoWtLoss_reg_log_Insul_change[["beta"]] Fib_NoWtLoss_reg_log_Insul_change_tab <- Fib_NoWtLoss_reg_log_Insul_change_tab[-c(1),] Fib_NoWtLoss_reg_log_Insul_change_tab <- Fib_NoWtLoss_reg_log_Insul_change_tab[-c(1)] Fib_NoWtLoss_reg_log_Insul_change_tab$k <- Fib_NoWtLoss_reg_log_Insul_change[["k"]] Fib_NoWtLoss_reg_log_Insul_change_tab$r2 <- Fib_NoWtLoss_reg_log_Insul_change[["R2"]] Fib_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change" Fib_NoWtLoss_metareg_sumtab <- rbind(Fib_NoWtLoss_reg_log_Wt_change_tab, Fib_NoWtLoss_reg_log_Gluc_change_tab, Fib_NoWtLoss_reg_log_Insul_change_tab) Fib_NoWtLoss_metareg_sumtab$text <- paste(format(round(Fib_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(Fib_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) Fib_NoWtLoss_metareg_sumtab$text <- paste(Fib_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL) Fib_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(Fib_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) Fib_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(Fib_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(Fib_NoWtLoss_metareg_sumtab,file="Fib_NoWtLoss_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="Fib_NoWtLoss_bubble_weight_change.pdf",width=6,height=6) Fib_NoWtLoss_bubble_weight_change <- bubble(Fib_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in fibrosis stage", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) Fib_NoWtLoss_bubble_weight_change dev.off() ## following on from Fibrosis analysis setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/NAS_out") ######## ## Analysis for histological NAS score ######## ## Power analysis library(pwr) ## calculate common SD full_data$NAS_Int_SD2 <- full_data$NAS_Int_SD*full_data$NAS_Int_SD full_data$NAS_Pla_SD2 <- full_data$NAS_Pla_SD*full_data$NAS_Pla_SD full_data$NAS_comm_SD <- sqrt(((full_data$NAS_Int_SD2+full_data$NAS_Pla_SD2)/2)) full_data$NAS_m_diff <- full_data$NAS_Pla_Mean-full_data$NAS_Int_Mean full_data$NAS_eff_size <- full_data$NAS_m_diff/full_data$NAS_comm_SD library(tidyr) NAS_data <- full_data NAS_data <- NAS_data %>% drop_na(NAS_eff_size) NAS_data$power <- pwr.t2n.test(n1 = NAS_data$NAS_Int_size, n2 = NAS_data$NAS_Pla_size, d = NAS_data$NAS_eff_size)$power write.table(NAS_data$power,file="NAS_data_power.csv",sep=",") hist(NAS_data$power) NAS_dens_power <- density(NAS_data$power) pdf(file="NAS_kernel_power_v1.pdf") plot(NAS_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)") polygon(NAS_dens_power, col="red", border="blue") dev.off() ## load packages for metan library(dmetar) library(meta) library(metafor) library(readxl) max.print = 100000 ## drop where <3 unique studies for any drug class NAS_drugsclass_counts <- NAS_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) NAS_class_counts <- NAS_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) NAS_class_less3 = subset(NAS_class_counts, n <3) str(NAS_class_less3) NAS_class_less3$Drug_Class_new_1_all <- droplevels(NAS_class_less3$Drug_Class_new_1_all) NAS_class_droplist <- NAS_class_less3$Drug_Class_new_1_all NAS_data_min3class <- NAS_data %>% filter(!Drug_Class_new_1_all %in% NAS_class_droplist) ## run metan NAS_metan_class_main <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") NAS_metan_class <- update(NAS_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results NAS_metan_class_tab <- data.frame(NAS_metan_class[["TE.random.w"]]) NAS_metan_class_tab$drug <- NAS_metan_class[["bylevs"]] NAS_metan_class_tab$SE <- NAS_metan_class[["seTE.random.w"]] NAS_metan_class_tab$lower <- NAS_metan_class[["lower.random.w"]] NAS_metan_class_tab$upper <- NAS_metan_class[["upper.random.w"]] NAS_metan_class_tab$Pz <- NAS_metan_class[["pval.random.w"]] NAS_metan_class_tab$weight <- NAS_metan_class[["w.random.w"]] NAS_metan_class_tab$k <- NAS_metan_class[["k.w"]] NAS_metan_class_tab$controls <- NAS_metan_class[["n.c.w"]] NAS_metan_class_tab$experimental <- NAS_metan_class[["n.e.w"]] NAS_metan_class_tab$Q <- NAS_metan_class[["Q.w"]] NAS_metan_class_tab$Pq <- NAS_metan_class[["pval.Q.w"]] NAS_metan_class_tab$tau <- NAS_metan_class[["tau.w"]] NAS_metan_class_tab$I2 <- NAS_metan_class[["I2.w"]] NAS_metan_class_tab <- NAS_metan_class_tab %>% rename(MD = NAS_metan_class...TE.random.w...) NAS_metan_class_tab <- NAS_metan_class_tab[order(-NAS_metan_class_tab$MD),] NAS_metan_class_tab$row_number <- 1:nrow(NAS_metan_class_tab) NAS_metan_class_tab$subgroup <- "Subgroup" NAS_class_counts <- NAS_class_counts %>% rename(drug = Drug_Class_new_1_all) NAS_metan_class_tab <- merge(NAS_class_counts, NAS_metan_class_tab, by="drug") NAS_metan_class_tab_overall <- data.frame(NAS_metan_class[["TE.random"]]) NAS_metan_class_tab_overall$drug <- "Overall" NAS_metan_class_tab_overall$SE <- NAS_metan_class[["seTE.random"]] NAS_metan_class_tab_overall$lower <- NAS_metan_class[["lower.random"]] NAS_metan_class_tab_overall$upper <- NAS_metan_class[["upper.random"]] NAS_metan_class_tab_overall$Pz <- NAS_metan_class[["pval.random"]] NAS_metan_class_tab_overall$weight <- (max(NAS_metan_class_tab$weight)*2) NAS_metan_class_tab_overall$k <- NAS_metan_class[["k"]] NAS_metan_class_tab_overall$controls <- sum(NAS_metan_class_tab$controls) NAS_metan_class_tab_overall$experimental <- sum(NAS_metan_class_tab$experimental) NAS_metan_class_tab_overall$Q <- NAS_metan_class[["Q"]] NAS_metan_class_tab_overall$Pq <- NAS_metan_class[["pval.Q"]] NAS_metan_class_tab_overall$tau <- NAS_metan_class[["tau"]] NAS_metan_class_tab_overall$I2 <- NAS_metan_class[["I2"]] NAS_metan_class_tab_overall <- NAS_metan_class_tab_overall %>% rename(MD = NAS_metan_class...TE.random...) NAS_metan_class_tab_overall$row_number <- ((nrow(NAS_metan_class_tab))+1) NAS_metan_class_tab_overall$subgroup <- "Overall" NAS_metan_class_tab_overall$n <- sum(NAS_metan_class_tab$n) NAS_metan_class_sumtab <- rbind(NAS_metan_class_tab, NAS_metan_class_tab_overall) NAS_metan_class_sumtab$weight <- as.numeric(NAS_metan_class_sumtab$weight) NAS_metan_class_sumtab$row_number <- as.numeric(NAS_metan_class_sumtab$row_number) NAS_metan_class_sumtab$subgroup <- as.factor(NAS_metan_class_sumtab$subgroup) NAS_metan_class_sumtab$total = NAS_metan_class_sumtab$controls + NAS_metan_class_sumtab$experimental NAS_metan_class_sumtab$text <- paste(format(round(NAS_metan_class_sumtab$MD, 1), nsmall = 1), format(round(NAS_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_metan_class_sumtab$text <- paste(NAS_metan_class_sumtab$text, format(round(NAS_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) NAS_metan_class_sumtab$text <- paste(NAS_metan_class_sumtab$text, "", sep = ")", collapse = NULL) NAS_metan_class_sumtab$SE_1dig <- paste(format(round(NAS_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) NAS_metan_class_sumtab$Pz_1dig <- paste((signif(NAS_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) NAS_metan_class_sumtab$tI2_2dig <- paste(format(round(NAS_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) NAS_metan_class_sumtab$tau_1dig <- paste(format(round(NAS_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) NAS_metan_class_sumtab$Pq_1dig <- paste((signif(NAS_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(NAS_metan_class_sumtab,file="NAS_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(NAS_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(NAS_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(NAS_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = NAS_metan_class_tab_overall$lower overall_max = NAS_metan_class_tab_overall$upper NAS_metan_class_ybreaks <- nrow(NAS_metan_class_sumtab) NAS_metan_class_sumtab <- NAS_metan_class_sumtab[order(NAS_metan_class_sumtab$row_number),] NAS_metan_class_forest <- ggplot(data= NAS_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: NAS_metan_class_ybreaks, labels = NAS_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in NAFLD Activity Score (NAS)") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-6.5, 3), breaks=seq(-5, 0, 1), expand=c(0,0)) + geom_text(data=NAS_metan_class_sumtab, aes(x=.65, label=text), size = 3.5, hjust=0) + geom_text(data=NAS_metan_class_sumtab, aes(x=-6.3, label=k), size = 3.5, hjust=0) + geom_text(data=NAS_metan_class_sumtab, aes(x=-5.8, label=total), size = 3.5, hjust=0) pdf(file="NAS_metan_class_forest.pdf",width=9,height=6) NAS_metan_class_forest dev.off() ##################### ####### ## bias analysis NAS_class_eggers <- eggers.test(x = NAS_metan_class_main) NAS_class_eggers sink("NAS_class_eggers.txt") print(NAS_class_eggers) sink() NAS_class_trimfill <- trimfill(NAS_metan_class_main) NAS_class_trimfill sink("NAS_class_trimfill.txt") print(NAS_class_trimfill) sink() pdf(file="NAS_class_funnel.pdf") funnel(NAS_class_trimfill, xlab="Mean difference in hepatic NAS (%)", xlim=c(-8,5), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-7, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue")) dev.off() ## use Baujat plot to look for outliers pdf(file="NAS_class_baujat.pdf") NAS_class_baujat <- baujat(NAS_metan_class_main) NAS_class_baujat dev.off() ## look for outliers based on SD NAS_commSD_mean <- mean(NAS_data$NAS_comm_SD, na.rm=TRUE) NAS_commSD_SD <- sd(NAS_data$NAS_comm_SD, na.rm=TRUE) NAS_commSD_norm <- dnorm(NAS_data$NAS_comm_SD, mean = NAS_commSD_mean, sd = NAS_commSD_SD, log = FALSE) NAS_commSD_norm <- as.data.frame(NAS_commSD_norm) NAS_commSD_norm$NAS_comm_SD <- NAS_data$NAS_comm_SD NAS_commSD_norm$Paper <- NAS_data$Paper pdf(file = "NAS_commSD_norm.pdf") plot(NAS_commSD_norm$NAS_comm_SD, NAS_commSD_norm$NAS_commSD_norm) dev.off() ## exclude studies with NAS_comm_SD >2 or high contribution to heterogeneity on baujat plot NAS_NoOutlier_data = subset(NAS_data, NAS_comm_SD <2) NAS_NoOutlier_data <- NAS_NoOutlier_data %>% filter(Paper != "Ishii 2009" & Paper != "Witek 2009_3") ####### ## re-rerun after outliers excluded ## drop where <3 unique studies for any drug class NAS_NoOutlier_drugsclass_counts <- NAS_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) NAS_NoOutlier_class_counts <- NAS_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) NAS_NoOutlier_class_less3 = subset(NAS_NoOutlier_class_counts, n <3) str(NAS_NoOutlier_class_less3) NAS_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(NAS_NoOutlier_class_less3$Drug_Class_new_1_all) NAS_NoOutlier_class_droplist <- NAS_NoOutlier_class_less3$Drug_Class_new_1_all NAS_NoOutlier_data_min3class <- NAS_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% NAS_NoOutlier_class_droplist) ## run metan NAS_NoOutlier_metan_class_main <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") NAS_NoOutlier_metan_class <- update(NAS_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class") ## make summary table of results NAS_NoOutlier_metan_class_tab <- data.frame(NAS_NoOutlier_metan_class[["TE.random.w"]]) NAS_NoOutlier_metan_class_tab$drug <- NAS_NoOutlier_metan_class[["bylevs"]] NAS_NoOutlier_metan_class_tab$SE <- NAS_NoOutlier_metan_class[["seTE.random.w"]] NAS_NoOutlier_metan_class_tab$lower <- NAS_NoOutlier_metan_class[["lower.random.w"]] NAS_NoOutlier_metan_class_tab$upper <- NAS_NoOutlier_metan_class[["upper.random.w"]] NAS_NoOutlier_metan_class_tab$Pz <- NAS_NoOutlier_metan_class[["pval.random.w"]] NAS_NoOutlier_metan_class_tab$weight <- NAS_NoOutlier_metan_class[["w.random.w"]] NAS_NoOutlier_metan_class_tab$k <- NAS_NoOutlier_metan_class[["k.w"]] NAS_NoOutlier_metan_class_tab$controls <- NAS_NoOutlier_metan_class[["n.c.w"]] NAS_NoOutlier_metan_class_tab$experimental <- NAS_NoOutlier_metan_class[["n.e.w"]] NAS_NoOutlier_metan_class_tab$Q <- NAS_NoOutlier_metan_class[["Q.w"]] NAS_NoOutlier_metan_class_tab$Pq <- NAS_NoOutlier_metan_class[["pval.Q.w"]] NAS_NoOutlier_metan_class_tab$tau <- NAS_NoOutlier_metan_class[["tau.w"]] NAS_NoOutlier_metan_class_tab$I2 <- NAS_NoOutlier_metan_class[["I2.w"]] NAS_NoOutlier_metan_class_tab <- NAS_NoOutlier_metan_class_tab %>% rename(MD = NAS_NoOutlier_metan_class...TE.random.w...) NAS_NoOutlier_metan_class_tab <- NAS_NoOutlier_metan_class_tab[order(-NAS_NoOutlier_metan_class_tab$MD),] NAS_NoOutlier_metan_class_tab <- NAS_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n()) NAS_NoOutlier_metan_class_tab$subgroup <- "Subgroup" NAS_NoOutlier_class_counts <- NAS_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all) NAS_NoOutlier_metan_class_tab <- merge(NAS_NoOutlier_class_counts, NAS_NoOutlier_metan_class_tab, by="drug") NAS_NoOutlier_metan_class_tab_overall <- data.frame(NAS_NoOutlier_metan_class[["TE.random"]]) NAS_NoOutlier_metan_class_tab_overall$drug <- "Overall" NAS_NoOutlier_metan_class_tab_overall$SE <- NAS_NoOutlier_metan_class[["seTE.random"]] NAS_NoOutlier_metan_class_tab_overall$lower <- NAS_NoOutlier_metan_class[["lower.random"]] NAS_NoOutlier_metan_class_tab_overall$upper <- NAS_NoOutlier_metan_class[["upper.random"]] NAS_NoOutlier_metan_class_tab_overall$Pz <- NAS_NoOutlier_metan_class[["pval.random"]] NAS_NoOutlier_metan_class_tab_overall$weight <- (max(NAS_NoOutlier_metan_class_tab$weight)*2) NAS_NoOutlier_metan_class_tab_overall$k <- NAS_NoOutlier_metan_class[["k"]] NAS_NoOutlier_metan_class_tab_overall$controls <- sum(NAS_NoOutlier_metan_class_tab$controls) NAS_NoOutlier_metan_class_tab_overall$experimental <- sum(NAS_NoOutlier_metan_class_tab$experimental) NAS_NoOutlier_metan_class_tab_overall$Q <- NAS_NoOutlier_metan_class[["Q"]] NAS_NoOutlier_metan_class_tab_overall$Pq <- NAS_NoOutlier_metan_class[["pval.Q"]] NAS_NoOutlier_metan_class_tab_overall$tau <- NAS_NoOutlier_metan_class[["tau"]] NAS_NoOutlier_metan_class_tab_overall$I2 <- NAS_NoOutlier_metan_class[["I2"]] NAS_NoOutlier_metan_class_tab_overall <- NAS_NoOutlier_metan_class_tab_overall %>% rename(MD = NAS_NoOutlier_metan_class...TE.random...) NAS_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(NAS_NoOutlier_metan_class_tab))+1) NAS_NoOutlier_metan_class_tab_overall$subgroup <- "Overall" NAS_NoOutlier_metan_class_tab_overall$n <- sum(NAS_NoOutlier_metan_class_tab$n) NAS_NoOutlier_metan_class_sumtab <- rbind(NAS_NoOutlier_metan_class_tab, NAS_NoOutlier_metan_class_tab_overall) NAS_NoOutlier_metan_class_sumtab$weight <- as.numeric(NAS_NoOutlier_metan_class_sumtab$weight) NAS_NoOutlier_metan_class_sumtab$row_number <- as.numeric(NAS_NoOutlier_metan_class_sumtab$row_number) NAS_NoOutlier_metan_class_sumtab$subgroup <- as.factor(NAS_NoOutlier_metan_class_sumtab$subgroup) NAS_NoOutlier_metan_class_sumtab$total = NAS_NoOutlier_metan_class_sumtab$controls + NAS_NoOutlier_metan_class_sumtab$experimental NAS_NoOutlier_metan_class_sumtab$text <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(NAS_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$text <- paste(NAS_NoOutlier_metan_class_sumtab$text, format(round(NAS_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$text <- paste(NAS_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(NAS_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) NAS_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(NAS_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(NAS_NoOutlier_metan_class_sumtab,file="NAS_NoOutlier_metan_class_sumtab.csv",sep=",") ## make forest plot library(ggplot2) label_bold <- ifelse(NAS_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(NAS_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(NAS_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10") overall_min = NAS_NoOutlier_metan_class_tab_overall$lower overall_max = NAS_NoOutlier_metan_class_tab_overall$upper NAS_NoOutlier_metan_class_ybreaks <- nrow(NAS_NoOutlier_metan_class_sumtab) NAS_NoOutlier_metan_class_sumtab <- NAS_NoOutlier_metan_class_sumtab[order(NAS_NoOutlier_metan_class_sumtab$row_number),] NAS_NoOutlier_metan_class_forest <- ggplot(data= NAS_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: NAS_NoOutlier_metan_class_ybreaks, labels = NAS_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in NAFLD Activity Score (NAS)") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.85, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-6.5, 3), breaks=seq(-5, 0, 1), expand=c(0,0)) + geom_text(data=NAS_NoOutlier_metan_class_sumtab, aes(x=.95, label=text), size = 3.5, hjust=0) + geom_text(data=NAS_NoOutlier_metan_class_sumtab, aes(x=-6.3, label=k), size = 3.5, hjust=0) + geom_text(data=NAS_NoOutlier_metan_class_sumtab, aes(x=-5.8, label=total), size = 3.5, hjust=0) pdf(file="NAS_NoOutlier_metan_class_forest.pdf",width=9,height=6) NAS_NoOutlier_metan_class_forest dev.off() ####### ## re-run using sub-grouping by individual drugs ## drop where <3 unique studies for any drug class NAS_drugIndiv_counts <- NAS_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n()) NAS_drugIndiv_sum_counts <- NAS_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n()) NAS_drugIndiv_less3 = subset(NAS_drugIndiv_sum_counts, n <3) str(NAS_drugIndiv_less3) NAS_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(NAS_drugIndiv_less3$Indiv_drug_class_3) NAS_drugIndiv_droplist <- NAS_drugIndiv_less3$Indiv_drug_class_3 NAS_data_min3drug <- NAS_data %>% filter(!Indiv_drug_class_3 %in% NAS_drugIndiv_droplist) ## run metan NAS_metan_drugIndiv <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") NAS_metan_drugIndiv <- update(NAS_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug") ## make summary table of results NAS_metan_drugIndiv_tab <- data.frame(NAS_metan_drugIndiv[["TE.random.w"]]) NAS_metan_drugIndiv_tab$drug <- NAS_metan_drugIndiv[["bylevs"]] NAS_metan_drugIndiv_tab$SE <- NAS_metan_drugIndiv[["seTE.random.w"]] NAS_metan_drugIndiv_tab$lower <- NAS_metan_drugIndiv[["lower.random.w"]] NAS_metan_drugIndiv_tab$upper <- NAS_metan_drugIndiv[["upper.random.w"]] NAS_metan_drugIndiv_tab$Pz <- NAS_metan_drugIndiv[["pval.random.w"]] NAS_metan_drugIndiv_tab$weight <- NAS_metan_drugIndiv[["w.random.w"]] NAS_metan_drugIndiv_tab$k <- NAS_metan_drugIndiv[["k.w"]] NAS_metan_drugIndiv_tab$controls <- NAS_metan_drugIndiv[["n.c.w"]] NAS_metan_drugIndiv_tab$experimental <- NAS_metan_drugIndiv[["n.e.w"]] NAS_metan_drugIndiv_tab$Q <- NAS_metan_drugIndiv[["Q.w"]] NAS_metan_drugIndiv_tab$Pq <- NAS_metan_drugIndiv[["pval.Q.w"]] NAS_metan_drugIndiv_tab$tau <- NAS_metan_drugIndiv[["tau.w"]] NAS_metan_drugIndiv_tab$I2 <- NAS_metan_drugIndiv[["I2.w"]] NAS_metan_drugIndiv_tab <- NAS_metan_drugIndiv_tab %>% rename(MD = NAS_metan_drugIndiv...TE.random.w...) NAS_metan_drugIndiv_tab <- NAS_metan_drugIndiv_tab[order(-NAS_metan_drugIndiv_tab$MD),] NAS_metan_drugIndiv_tab <- NAS_metan_drugIndiv_tab %>% mutate(row_number= 1:n()) NAS_metan_drugIndiv_tab$subgroup <- "Subgroup" NAS_drugIndiv_sum_counts <- NAS_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3) NAS_metan_drugIndiv_tab <- merge(NAS_drugIndiv_sum_counts, NAS_metan_drugIndiv_tab, by="drug") NAS_metan_drugIndiv_tab_overall <- data.frame(NAS_metan_drugIndiv[["TE.random"]]) NAS_metan_drugIndiv_tab_overall$drug <- "Overall" NAS_metan_drugIndiv_tab_overall$SE <- NAS_metan_drugIndiv[["seTE.random"]] NAS_metan_drugIndiv_tab_overall$lower <- NAS_metan_drugIndiv[["lower.random"]] NAS_metan_drugIndiv_tab_overall$upper <- NAS_metan_drugIndiv[["upper.random"]] NAS_metan_drugIndiv_tab_overall$Pz <- NAS_metan_drugIndiv[["pval.random"]] NAS_metan_drugIndiv_tab_overall$weight <- (max(NAS_metan_drugIndiv_tab$weight)*2) NAS_metan_drugIndiv_tab_overall$k <- NAS_metan_drugIndiv[["k"]] NAS_metan_drugIndiv_tab_overall$controls <- sum(NAS_metan_drugIndiv_tab$controls) NAS_metan_drugIndiv_tab_overall$experimental <- sum(NAS_metan_drugIndiv_tab$experimental) NAS_metan_drugIndiv_tab_overall$Q <- NAS_metan_drugIndiv[["Q"]] NAS_metan_drugIndiv_tab_overall$Pq <- NAS_metan_drugIndiv[["pval.Q"]] NAS_metan_drugIndiv_tab_overall$tau <- NAS_metan_drugIndiv[["tau"]] NAS_metan_drugIndiv_tab_overall$I2 <- NAS_metan_drugIndiv[["I2"]] NAS_metan_drugIndiv_tab_overall <- NAS_metan_drugIndiv_tab_overall %>% rename(MD = NAS_metan_drugIndiv...TE.random...) NAS_metan_drugIndiv_tab_overall$row_number <- ((nrow(NAS_metan_drugIndiv_tab))+1) NAS_metan_drugIndiv_tab_overall$subgroup <- "Overall" NAS_metan_drugIndiv_tab_overall$n <- sum(NAS_metan_drugIndiv_tab$n) NAS_metan_drugIndiv_sumtab <- rbind(NAS_metan_drugIndiv_tab, NAS_metan_drugIndiv_tab_overall) NAS_metan_drugIndiv_sumtab$weight <- as.numeric(NAS_metan_drugIndiv_sumtab$weight) NAS_metan_drugIndiv_sumtab$row_number <- as.numeric(NAS_metan_drugIndiv_sumtab$row_number) NAS_metan_drugIndiv_sumtab$subgroup <- as.factor(NAS_metan_drugIndiv_sumtab$subgroup) NAS_metan_drugIndiv_sumtab$total = NAS_metan_drugIndiv_sumtab$controls + NAS_metan_drugIndiv_sumtab$experimental NAS_metan_drugIndiv_sumtab$text <- paste(format(round(NAS_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(NAS_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_metan_drugIndiv_sumtab$text <- paste(NAS_metan_drugIndiv_sumtab$text, format(round(NAS_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL) NAS_metan_drugIndiv_sumtab$text <- paste(NAS_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL) NAS_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(NAS_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL) NAS_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(NAS_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL) NAS_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(NAS_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL) NAS_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(NAS_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL) NAS_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(NAS_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL) write.table(NAS_metan_drugIndiv_sumtab,file="NAS_metan_drugIndiv_sumtab.csv",sep=",") ## make forest plot label_bold <- ifelse(NAS_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain") label_colour <- ifelse(NAS_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black") label_size <- ifelse(NAS_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10") overall_min = NAS_metan_drugIndiv_tab_overall$lower overall_max = NAS_metan_drugIndiv_tab_overall$upper NAS_metan_drugIndiv_ybreaks <- nrow(NAS_metan_drugIndiv_sumtab) NAS_metan_drugIndiv_sumtab <- NAS_metan_drugIndiv_sumtab[order(NAS_metan_drugIndiv_sumtab$row_number),] NAS_metan_drugIndiv_forest <- ggplot(data= NAS_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup)) + scale_y_continuous(name = "", breaks=1: NAS_metan_drugIndiv_ybreaks, labels = NAS_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in NAFLD Activity Score (NAS)") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=1.4, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-8, xmax=-5.5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-8, 4), breaks=seq(-6, 1, 1), expand=c(0,0)) + geom_text(data=NAS_metan_drugIndiv_sumtab, aes(x=1.5, label=text), size = 3.5, hjust=0) + geom_text(data=NAS_metan_drugIndiv_sumtab, aes(x=-7.5, label=k), size = 3.5, hjust=0) + geom_text(data=NAS_metan_drugIndiv_sumtab, aes(x=-7, label=total), size = 3.5, hjust=0) pdf(file="NAS_metan_drugIndiv_forest.pdf",width=9,height=6) NAS_metan_drugIndiv_forest dev.off() ######## ## calculate sample size needed for average results ## mean comm_SD = NAS_commSD_mean ## meta-analysis mean difference = NAS_metan_class_main[["TE.random"]] ## calculate Cohen's d NAS_cohen_d = NAS_metan_class_main[["TE.random"]] / NAS_commSD_mean NAS_samplesize_av <- pwr.t.test(d = NAS_cohen_d, power = 0.80, sig.level = 0.05) ## n = 16 - number in **each** group ## find number of studies with n > NAS_samplesize_av NAS_data$total = NAS_data$NAS_Int_size + NAS_data$NAS_Pla_size NAS_pwrcount <- NAS_data %>% group_by(total, Paper) %>% summarise(n = n()) NAS_pwrcount_adequate = subset(NAS_pwrcount, total >= 2*(NAS_samplesize_av[["n"]])) write.table(NAS_pwrcount_adequate,file="NAS_pwrcount_adequate.csv",sep=",") ######## ## run meta-regressions on full NAS dataset for continuous traits NAS_metan_full <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## create metan with >3 for each level of categorical variables ## Background NAS_bg_counts <- NAS_data %>% group_by(Background_simple, Study) %>% summarise(n = n()) NAS_bg_counts_sum <- NAS_bg_counts %>% group_by(Background_simple) %>% summarise(n = n()) NAS_bg_less3 = subset(NAS_bg_counts_sum, n <3) NAS_bg_less3$Background_simple <- droplevels(NAS_bg_less3$Background_simple) NAS_bg_droplist <- NAS_bg_less3$Background_simple NAS_data_min3bg <- NAS_data %>% filter(!Background_simple %in% NAS_bg_droplist) NAS_metan_bg <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## Model NAS_model_counts <- NAS_data %>% group_by(Model_simple, Study) %>% summarise(n = n()) NAS_model_counts_sum <- NAS_model_counts %>% group_by(Model_simple) %>% summarise(n = n()) NAS_model_less3 = subset(NAS_model_counts_sum, n <3) NAS_model_less3$Model_simple <- droplevels(NAS_model_less3$Model_simple) NAS_model_droplist <- NAS_model_less3$Model_simple NAS_data_min3model <- NAS_data %>% filter(!Model_simple %in% NAS_model_droplist) NAS_metan_model <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") ## run metaregs NAS_reg_Qual_score <- metareg(NAS_metan_full, Qual_score) NAS_reg_Qual_score_tab <- data.frame(NAS_reg_Qual_score[["beta"]]) NAS_reg_Qual_score_tab$se <- NAS_reg_Qual_score[["se"]] NAS_reg_Qual_score_tab$pval <- NAS_reg_Qual_score[["pval"]] NAS_reg_Qual_score_tab$beta <- NAS_reg_Qual_score[["beta"]] NAS_reg_Qual_score_tab <- NAS_reg_Qual_score_tab[-c(1),] NAS_reg_Qual_score_tab <- NAS_reg_Qual_score_tab[-c(1)] NAS_reg_Qual_score_tab$k <- NAS_reg_Qual_score[["k"]] NAS_reg_Qual_score_tab$r2 <- NAS_reg_Qual_score[["R2"]] NAS_reg_Qual_score_tab$var <- "Qual_score" NAS_reg_Protocol <- metareg(NAS_metan_full, Protocol) NAS_reg_Protocol_tab <- data.frame(NAS_reg_Protocol[["beta"]]) NAS_reg_Protocol_tab$se <- NAS_reg_Protocol[["se"]] NAS_reg_Protocol_tab$pval <- NAS_reg_Protocol[["pval"]] NAS_reg_Protocol_tab$beta <- NAS_reg_Protocol[["beta"]] NAS_reg_Protocol_tab <- NAS_reg_Protocol_tab[-c(1),] NAS_reg_Protocol_tab <- NAS_reg_Protocol_tab[-c(1)] NAS_reg_Protocol_tab$k <- NAS_reg_Protocol[["k"]] NAS_reg_Protocol_tab$r2 <- NAS_reg_Protocol[["R2"]] NAS_reg_Protocol_tab$var <- "Protocol" NAS_reg_Randomisation <- metareg(NAS_metan_full, Randomisation) NAS_reg_Randomisation_tab <- data.frame(NAS_reg_Randomisation[["beta"]]) NAS_reg_Randomisation_tab$se <- NAS_reg_Randomisation[["se"]] NAS_reg_Randomisation_tab$pval <- NAS_reg_Randomisation[["pval"]] NAS_reg_Randomisation_tab$beta <- NAS_reg_Randomisation[["beta"]] NAS_reg_Randomisation_tab <- NAS_reg_Randomisation_tab[-c(1),] NAS_reg_Randomisation_tab <- NAS_reg_Randomisation_tab[-c(1)] NAS_reg_Randomisation_tab$k <- NAS_reg_Randomisation[["k"]] NAS_reg_Randomisation_tab$r2 <- NAS_reg_Randomisation[["R2"]] NAS_reg_Randomisation_tab$var <- "Randomisation" NAS_reg_Blinding <- metareg(NAS_metan_full, Blinding) NAS_reg_Blinding_tab <- data.frame(NAS_reg_Blinding[["beta"]]) NAS_reg_Blinding_tab$se <- NAS_reg_Blinding[["se"]] NAS_reg_Blinding_tab$pval <- NAS_reg_Blinding[["pval"]] NAS_reg_Blinding_tab$beta <- NAS_reg_Blinding[["beta"]] NAS_reg_Blinding_tab <- NAS_reg_Blinding_tab[-c(1),] NAS_reg_Blinding_tab <- NAS_reg_Blinding_tab[-c(1)] NAS_reg_Blinding_tab$k <- NAS_reg_Blinding[["k"]] NAS_reg_Blinding_tab$r2 <- NAS_reg_Blinding[["R2"]] NAS_reg_Blinding_tab$var <- "Blinding" NAS_reg_Power_calculation <- metareg(NAS_metan_full, Power_calculation) NAS_reg_Power_calculation_tab <- data.frame(NAS_reg_Power_calculation[["beta"]]) NAS_reg_Power_calculation_tab$se <- NAS_reg_Power_calculation[["se"]] NAS_reg_Power_calculation_tab$pval <- NAS_reg_Power_calculation[["pval"]] NAS_reg_Power_calculation_tab$beta <- NAS_reg_Power_calculation[["beta"]] NAS_reg_Power_calculation_tab <- NAS_reg_Power_calculation_tab[-c(1),] NAS_reg_Power_calculation_tab <- NAS_reg_Power_calculation_tab[-c(1)] NAS_reg_Power_calculation_tab$k <- NAS_reg_Power_calculation[["k"]] NAS_reg_Power_calculation_tab$r2 <- NAS_reg_Power_calculation[["R2"]] NAS_reg_Power_calculation_tab$var <- "Power_calculation" NAS_reg_Chol_per <- metareg(NAS_metan_full, Chol_per) NAS_reg_Chol_per_tab <- data.frame(NAS_reg_Chol_per[["beta"]]) NAS_reg_Chol_per_tab$se <- NAS_reg_Chol_per[["se"]] NAS_reg_Chol_per_tab$pval <- NAS_reg_Chol_per[["pval"]] NAS_reg_Chol_per_tab$beta <- NAS_reg_Chol_per[["beta"]] NAS_reg_Chol_per_tab <- NAS_reg_Chol_per_tab[-c(1),] NAS_reg_Chol_per_tab <- NAS_reg_Chol_per_tab[-c(1)] NAS_reg_Chol_per_tab$k <- NAS_reg_Chol_per[["k"]] NAS_reg_Chol_per_tab$r2 <- NAS_reg_Chol_per[["R2"]] NAS_reg_Chol_per_tab$var <- "Chol_per" NAS_reg_log_FructGluc_per <- metareg(NAS_metan_full, log_FructGluc_per) NAS_reg_log_FructGluc_per_tab <- data.frame(NAS_reg_log_FructGluc_per[["beta"]]) NAS_reg_log_FructGluc_per_tab$se <- NAS_reg_log_FructGluc_per[["se"]] NAS_reg_log_FructGluc_per_tab$pval <- NAS_reg_log_FructGluc_per[["pval"]] NAS_reg_log_FructGluc_per_tab$beta <- NAS_reg_log_FructGluc_per[["beta"]] NAS_reg_log_FructGluc_per_tab <- NAS_reg_log_FructGluc_per_tab[-c(1),] NAS_reg_log_FructGluc_per_tab <- NAS_reg_log_FructGluc_per_tab[-c(1)] NAS_reg_log_FructGluc_per_tab$k <- NAS_reg_log_FructGluc_per[["k"]] NAS_reg_log_FructGluc_per_tab$r2 <- NAS_reg_log_FructGluc_per[["R2"]] NAS_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per" NAS_reg_log_Sucr_kcal <- metareg(NAS_metan_full, log_Sucr_kcal) NAS_reg_log_Sucr_kcal_tab <- data.frame(NAS_reg_log_Sucr_kcal[["beta"]]) NAS_reg_log_Sucr_kcal_tab$se <- NAS_reg_log_Sucr_kcal[["se"]] NAS_reg_log_Sucr_kcal_tab$pval <- NAS_reg_log_Sucr_kcal[["pval"]] NAS_reg_log_Sucr_kcal_tab$beta <- NAS_reg_log_Sucr_kcal[["beta"]] NAS_reg_log_Sucr_kcal_tab <- NAS_reg_log_Sucr_kcal_tab[-c(1),] NAS_reg_log_Sucr_kcal_tab <- NAS_reg_log_Sucr_kcal_tab[-c(1)] NAS_reg_log_Sucr_kcal_tab$k <- NAS_reg_log_Sucr_kcal[["k"]] NAS_reg_log_Sucr_kcal_tab$r2 <- NAS_reg_log_Sucr_kcal[["R2"]] NAS_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal" NAS_reg_log_Fat_kcal <- metareg(NAS_metan_full, log_Fat_kcal) NAS_reg_log_Fat_kcal_tab <- data.frame(NAS_reg_log_Fat_kcal[["beta"]]) NAS_reg_log_Fat_kcal_tab$se <- NAS_reg_log_Fat_kcal[["se"]] NAS_reg_log_Fat_kcal_tab$pval <- NAS_reg_log_Fat_kcal[["pval"]] NAS_reg_log_Fat_kcal_tab$beta <- NAS_reg_log_Fat_kcal[["beta"]] NAS_reg_log_Fat_kcal_tab <- NAS_reg_log_Fat_kcal_tab[-c(1),] NAS_reg_log_Fat_kcal_tab <- NAS_reg_log_Fat_kcal_tab[-c(1)] NAS_reg_log_Fat_kcal_tab$k <- NAS_reg_log_Fat_kcal[["k"]] NAS_reg_log_Fat_kcal_tab$r2 <- NAS_reg_log_Fat_kcal[["R2"]] NAS_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal" NAS_reg_log_Age_start <- metareg(NAS_metan_full, log_Age_start) NAS_reg_log_Age_start_tab <- data.frame(NAS_reg_log_Age_start[["beta"]]) NAS_reg_log_Age_start_tab$se <- NAS_reg_log_Age_start[["se"]] NAS_reg_log_Age_start_tab$pval <- NAS_reg_log_Age_start[["pval"]] NAS_reg_log_Age_start_tab$beta <- NAS_reg_log_Age_start[["beta"]] NAS_reg_log_Age_start_tab <- NAS_reg_log_Age_start_tab[-c(1),] NAS_reg_log_Age_start_tab <- NAS_reg_log_Age_start_tab[-c(1)] NAS_reg_log_Age_start_tab$k <- NAS_reg_log_Age_start[["k"]] NAS_reg_log_Age_start_tab$r2 <- NAS_reg_log_Age_start[["R2"]] NAS_reg_log_Age_start_tab$var <- "log_Age_start" NAS_reg_log_Duration <- metareg(NAS_metan_full, log_Duration) NAS_reg_log_Duration_tab <- data.frame(NAS_reg_log_Duration[["beta"]]) NAS_reg_log_Duration_tab$se <- NAS_reg_log_Duration[["se"]] NAS_reg_log_Duration_tab$pval <- NAS_reg_log_Duration[["pval"]] NAS_reg_log_Duration_tab$beta <- NAS_reg_log_Duration[["beta"]] NAS_reg_log_Duration_tab <- NAS_reg_log_Duration_tab[-c(1),] NAS_reg_log_Duration_tab <- NAS_reg_log_Duration_tab[-c(1)] NAS_reg_log_Duration_tab$k <- NAS_reg_log_Duration[["k"]] NAS_reg_log_Duration_tab$r2 <- NAS_reg_log_Duration[["R2"]] NAS_reg_log_Duration_tab$var <- "log_Duration" NAS_reg_log_Age_end <- metareg(NAS_metan_full, log_Age_end) NAS_reg_log_Age_end_tab <- data.frame(NAS_reg_log_Age_end[["beta"]]) NAS_reg_log_Age_end_tab$se <- NAS_reg_log_Age_end[["se"]] NAS_reg_log_Age_end_tab$pval <- NAS_reg_log_Age_end[["pval"]] NAS_reg_log_Age_end_tab$beta <- NAS_reg_log_Age_end[["beta"]] NAS_reg_log_Age_end_tab <- NAS_reg_log_Age_end_tab[-c(1),] NAS_reg_log_Age_end_tab <- NAS_reg_log_Age_end_tab[-c(1)] NAS_reg_log_Age_end_tab$k <- NAS_reg_log_Age_end[["k"]] NAS_reg_log_Age_end_tab$r2 <- NAS_reg_log_Age_end[["R2"]] NAS_reg_log_Age_end_tab$var <- "log_Age_end" NAS_reg_log_Wt_change <- metareg(NAS_metan_full, log_Wt_change) NAS_reg_log_Wt_change_tab <- data.frame(NAS_reg_log_Wt_change[["beta"]]) NAS_reg_log_Wt_change_tab$se <- NAS_reg_log_Wt_change[["se"]] NAS_reg_log_Wt_change_tab$pval <- NAS_reg_log_Wt_change[["pval"]] NAS_reg_log_Wt_change_tab$beta <- NAS_reg_log_Wt_change[["beta"]] NAS_reg_log_Wt_change_tab <- NAS_reg_log_Wt_change_tab[-c(1),] NAS_reg_log_Wt_change_tab <- NAS_reg_log_Wt_change_tab[-c(1)] NAS_reg_log_Wt_change_tab$k <- NAS_reg_log_Wt_change[["k"]] NAS_reg_log_Wt_change_tab$r2 <- NAS_reg_log_Wt_change[["R2"]] NAS_reg_log_Wt_change_tab$var <- "log_Wt_change" NAS_reg_log_Gluc_change <- metareg(NAS_metan_full, log_Gluc_change) NAS_reg_log_Gluc_change_tab <- data.frame(NAS_reg_log_Gluc_change[["beta"]]) NAS_reg_log_Gluc_change_tab$se <- NAS_reg_log_Gluc_change[["se"]] NAS_reg_log_Gluc_change_tab$pval <- NAS_reg_log_Gluc_change[["pval"]] NAS_reg_log_Gluc_change_tab$beta <- NAS_reg_log_Gluc_change[["beta"]] NAS_reg_log_Gluc_change_tab <- NAS_reg_log_Gluc_change_tab[-c(1),] NAS_reg_log_Gluc_change_tab <- NAS_reg_log_Gluc_change_tab[-c(1)] NAS_reg_log_Gluc_change_tab$k <- NAS_reg_log_Gluc_change[["k"]] NAS_reg_log_Gluc_change_tab$r2 <- NAS_reg_log_Gluc_change[["R2"]] NAS_reg_log_Gluc_change_tab$var <- "log_Gluc_change" NAS_reg_log_Insul_change <- metareg(NAS_metan_full, log_Insul_change) NAS_reg_log_Insul_change_tab <- data.frame(NAS_reg_log_Insul_change[["beta"]]) NAS_reg_log_Insul_change_tab$se <- NAS_reg_log_Insul_change[["se"]] NAS_reg_log_Insul_change_tab$pval <- NAS_reg_log_Insul_change[["pval"]] NAS_reg_log_Insul_change_tab$beta <- NAS_reg_log_Insul_change[["beta"]] NAS_reg_log_Insul_change_tab <- NAS_reg_log_Insul_change_tab[-c(1),] NAS_reg_log_Insul_change_tab <- NAS_reg_log_Insul_change_tab[-c(1)] NAS_reg_log_Insul_change_tab$k <- NAS_reg_log_Insul_change[["k"]] NAS_reg_log_Insul_change_tab$r2 <- NAS_reg_log_Insul_change[["R2"]] NAS_reg_log_Insul_change_tab$var <- "log_Insul_change" NAS_reg_Sex <- metareg(NAS_metan_full, Sex) NAS_reg_Sex_tab <- data.frame(NAS_reg_Sex[["beta"]]) NAS_reg_Sex_tab$se <- NAS_reg_Sex[["se"]] NAS_reg_Sex_tab$pval <- NAS_reg_Sex[["pval"]] NAS_reg_Sex_tab$beta <- NAS_reg_Sex[["beta"]] NAS_reg_Sex_tab <- NAS_reg_Sex_tab[-c(1),] NAS_reg_Sex_tab <- NAS_reg_Sex_tab[-c(1)] NAS_reg_Sex_tab$k <- NAS_reg_Sex[["k"]] NAS_reg_Sex_tab$r2 <- NA NAS_reg_Sex_tab$var <- rownames(NAS_reg_Sex_tab) NAS_reg_Sex_overall_tab <- data.frame(NAS_reg_Sex[["QMp"]]) NAS_reg_Sex_overall_tab$se <- NA NAS_reg_Sex_overall_tab$pval <- NAS_reg_Sex[["QMp"]] NAS_reg_Sex_overall_tab$beta <- NA NAS_reg_Sex_overall_tab <- NAS_reg_Sex_overall_tab[-c(1)] NAS_reg_Sex_overall_tab$k <- NAS_reg_Sex[["k"]] NAS_reg_Sex_overall_tab$r2 <- NAS_reg_Sex[["R2"]] NAS_reg_Sex_overall_tab$var <- "Sex_overall" NAS_reg_Sex_tab <- rbind(NAS_reg_Sex_tab, NAS_reg_Sex_overall_tab) NAS_reg_Drug_dose <- metareg(NAS_metan_drugIndiv, Drug_dose) NAS_reg_Drug_dose_tab <- data.frame(NAS_reg_Drug_dose[["beta"]]) NAS_reg_Drug_dose_tab$se <- NAS_reg_Drug_dose[["se"]] NAS_reg_Drug_dose_tab$pval <- NAS_reg_Drug_dose[["pval"]] NAS_reg_Drug_dose_tab$beta <- NAS_reg_Drug_dose[["beta"]] NAS_reg_Drug_dose_tab <- NAS_reg_Drug_dose_tab[-c(1),] NAS_reg_Drug_dose_tab <- NAS_reg_Drug_dose_tab[-c(1)] NAS_reg_Drug_dose_tab$k <- NAS_reg_Drug_dose[["k"]] NAS_reg_Drug_dose_tab$r2 <- NAS_reg_Drug_dose[["R2"]] NAS_reg_Drug_dose_tab$var <- "Drug_dose" NAS_reg_Indiv_drug_class_3 <- metareg(NAS_metan_drugIndiv, Indiv_drug_class_3) NAS_reg_Indiv_drug_class_3_tab <- data.frame(NAS_reg_Indiv_drug_class_3[["beta"]]) NAS_reg_Indiv_drug_class_3_tab$se <- NAS_reg_Indiv_drug_class_3[["se"]] NAS_reg_Indiv_drug_class_3_tab$pval <- NAS_reg_Indiv_drug_class_3[["pval"]] NAS_reg_Indiv_drug_class_3_tab$beta <- NAS_reg_Indiv_drug_class_3[["beta"]] NAS_reg_Indiv_drug_class_3_tab <- NAS_reg_Indiv_drug_class_3_tab[-c(1),] NAS_reg_Indiv_drug_class_3_tab <- NAS_reg_Indiv_drug_class_3_tab[-c(1)] NAS_reg_Indiv_drug_class_3_tab$k <- NAS_reg_Indiv_drug_class_3[["k"]] NAS_reg_Indiv_drug_class_3_tab$r2 <- NA NAS_reg_Indiv_drug_class_3_tab$var <- rownames(NAS_reg_Indiv_drug_class_3_tab) NAS_reg_Indiv_drug_class_3_overall_tab <- data.frame(NAS_reg_Indiv_drug_class_3[["QMp"]]) NAS_reg_Indiv_drug_class_3_overall_tab$se <- NA NAS_reg_Indiv_drug_class_3_overall_tab$pval <- NAS_reg_Indiv_drug_class_3[["QMp"]] NAS_reg_Indiv_drug_class_3_overall_tab$beta <- NA NAS_reg_Indiv_drug_class_3_overall_tab <- NAS_reg_Indiv_drug_class_3_overall_tab[-c(1)] NAS_reg_Indiv_drug_class_3_overall_tab$k <- NAS_reg_Indiv_drug_class_3[["k"]] NAS_reg_Indiv_drug_class_3_overall_tab$r2 <- NAS_reg_Indiv_drug_class_3[["R2"]] NAS_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall" NAS_reg_Indiv_drug_class_3_tab <- rbind(NAS_reg_Indiv_drug_class_3_tab, NAS_reg_Indiv_drug_class_3_overall_tab) NAS_reg_Model_simple <- metareg(NAS_metan_model, Model_simple) NAS_reg_Model_simple_tab <- data.frame(NAS_reg_Model_simple[["beta"]]) NAS_reg_Model_simple_tab$se <- NAS_reg_Model_simple[["se"]] NAS_reg_Model_simple_tab$pval <- NAS_reg_Model_simple[["pval"]] NAS_reg_Model_simple_tab$beta <- NAS_reg_Model_simple[["beta"]] NAS_reg_Model_simple_tab <- NAS_reg_Model_simple_tab[-c(1),] NAS_reg_Model_simple_tab <- NAS_reg_Model_simple_tab[-c(1)] NAS_reg_Model_simple_tab$k <- NAS_reg_Model_simple[["k"]] NAS_reg_Model_simple_tab$r2 <- NA NAS_reg_Model_simple_tab$var <- rownames(NAS_reg_Model_simple_tab) NAS_reg_Model_simple_overall_tab <- data.frame(NAS_reg_Model_simple[["QMp"]]) NAS_reg_Model_simple_overall_tab$se <- NA NAS_reg_Model_simple_overall_tab$pval <- NAS_reg_Model_simple[["QMp"]] NAS_reg_Model_simple_overall_tab$beta <- NA NAS_reg_Model_simple_overall_tab <- NAS_reg_Model_simple_overall_tab[-c(1)] NAS_reg_Model_simple_overall_tab$k <- NAS_reg_Model_simple[["k"]] NAS_reg_Model_simple_overall_tab$r2 <- NAS_reg_Model_simple[["R2"]] NAS_reg_Model_simple_overall_tab$var <- "Model_simple_overall" NAS_reg_Model_simple_tab <- rbind(NAS_reg_Model_simple_tab, NAS_reg_Model_simple_overall_tab) NAS_reg_Background_simple <- metareg(NAS_metan_bg, Background_simple) NAS_reg_Background_simple_tab <- data.frame(NAS_reg_Background_simple[["beta"]]) NAS_reg_Background_simple_tab$se <- NAS_reg_Background_simple[["se"]] NAS_reg_Background_simple_tab$pval <- NAS_reg_Background_simple[["pval"]] NAS_reg_Background_simple_tab$beta <- NAS_reg_Background_simple[["beta"]] NAS_reg_Background_simple_tab <- NAS_reg_Background_simple_tab[-c(1),] NAS_reg_Background_simple_tab <- NAS_reg_Background_simple_tab[-c(1)] NAS_reg_Background_simple_tab$k <- NAS_reg_Background_simple[["k"]] NAS_reg_Background_simple_tab$r2 <- NA NAS_reg_Background_simple_tab$var <- rownames(NAS_reg_Background_simple_tab) NAS_reg_Background_simple_overall_tab <- data.frame(NAS_reg_Background_simple[["QMp"]]) NAS_reg_Background_simple_overall_tab$se <- NA NAS_reg_Background_simple_overall_tab$pval <- NAS_reg_Background_simple[["QMp"]] NAS_reg_Background_simple_overall_tab$beta <- NA NAS_reg_Background_simple_overall_tab <- NAS_reg_Background_simple_overall_tab[-c(1)] NAS_reg_Background_simple_overall_tab$k <- NAS_reg_Background_simple[["k"]] NAS_reg_Background_simple_overall_tab$r2 <- NAS_reg_Background_simple[["R2"]] NAS_reg_Background_simple_overall_tab$var <- "Background_simple_overall" NAS_reg_Background_simple_tab <- rbind(NAS_reg_Background_simple_tab, NAS_reg_Background_simple_overall_tab) NAS_metareg_sumtab <- rbind(NAS_reg_Qual_score_tab, NAS_reg_Protocol_tab, NAS_reg_Randomisation_tab, NAS_reg_Blinding_tab, NAS_reg_Power_calculation_tab, NAS_reg_Chol_per_tab, NAS_reg_log_FructGluc_per_tab, NAS_reg_log_Sucr_kcal_tab, NAS_reg_log_Fat_kcal_tab, NAS_reg_log_Age_start_tab, NAS_reg_log_Duration_tab, NAS_reg_log_Age_end_tab, NAS_reg_log_Wt_change_tab, NAS_reg_log_Gluc_change_tab, NAS_reg_log_Insul_change_tab, NAS_reg_Sex_tab, NAS_reg_Drug_dose_tab, NAS_reg_Indiv_drug_class_3_tab, NAS_reg_Model_simple_tab, NAS_reg_Background_simple_tab) NAS_metareg_sumtab$text <- paste(format(round(NAS_metareg_sumtab$beta, 1), nsmall = 1), format(round(NAS_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_metareg_sumtab$text <- paste(NAS_metareg_sumtab$text, "", sep = ")", collapse = NULL) NAS_metareg_sumtab$pval_2dig <- paste((signif(NAS_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) NAS_metareg_sumtab$r2_2dig <- paste(format(round(NAS_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(NAS_metareg_sumtab,file="NAS_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="NAS_bubble_Wt_change.pdf",width=6,height=6) NAS_bubble_Wt_change <- bubble(NAS_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) NAS_bubble_Wt_change dev.off() pdf(file="NAS_bubble_Gluc_change.pdf",width=6,height=6) NAS_bubble_Gluc_change <- bubble(NAS_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) NAS_bubble_Gluc_change dev.off() ########## ##### run multiple meta-regression ## create data subset including >3 for each model >3 for background, and >3 for each drug ## start with dataset containing >3 for each background = NAS_data_min3bg NAS_data_min3bg_modelcounts <- NAS_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) NAS_data_min3bg_modelcounts_sum <- NAS_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) NAS_data_min3bg_model_less3 = subset(NAS_data_min3bg_modelcounts_sum, n <3) NAS_data_min3bg_model_less3$Model_simple <- droplevels(NAS_data_min3bg_model_less3$Model_simple) NAS_data_min3bg_model_droplist <- NAS_data_min3bg_model_less3$Model_simple NAS_multimetareg_data <- NAS_data_min3bg %>% filter(!Model_simple %in% NAS_data_min3bg_model_droplist) ## run multiple meta-regression ## create data subset including >3 for each model and >3 for background ## start with dataset containing >3 for each background = NAS_data_min3bg NAS_data_min3bg_modelcounts <- NAS_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n()) NAS_data_min3bg_modelcounts_sum <- NAS_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n()) NAS_data_min3bg_model_less3 = subset(NAS_data_min3bg_modelcounts_sum, n <3) NAS_data_min3bg_model_less3$Model_simple <- droplevels(NAS_data_min3bg_model_less3$Model_simple) NAS_data_min3bg_model_droplist <- NAS_data_min3bg_model_less3$Model_simple NAS_multimetareg_data <- NAS_data_min3bg %>% filter(!Model_simple %in% NAS_data_min3bg_model_droplist) ## Run metan NAS_multimetareg_metan <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) NAS_multmetareg_tab <- data.frame(NAS_multimetareg_metan$studlab) NAS_multmetareg_tab$yi <- NAS_multimetareg_metan[["TE"]] NAS_multmetareg_tab$sei <- NAS_multimetareg_metan[["seTE"]] NAS_multmetareg_tab$Model_simple <- NAS_multimetareg_metan[["data"]][["Model_simple"]] NAS_multmetareg_tab$Background_simple <- NAS_multimetareg_metan[["data"]][["Background_simple"]] NAS_multmetareg_tab$Sex <- NAS_multimetareg_metan[["data"]][["Sex"]] NAS_multmetareg_tab$Indiv_drug_class_3 <- NAS_multimetareg_metan[["data"]][["Indiv_drug_class_3"]] NAS_multmetareg_tab$log_Fat_kcal <- NAS_multimetareg_metan[["data"]][["log_Fat_kcal"]] NAS_multmetareg_tab$log_Age_start <- NAS_multimetareg_metan[["data"]][["log_Age_start"]] NAS_multmetareg_tab$log_Age_end <- NAS_multimetareg_metan[["data"]][["log_Age_end"]] NAS_multmetareg_tab$log_Duration <- NAS_multimetareg_metan[["data"]][["log_Duration"]] NAS_multmetareg_tab$log_Wt_change <- NAS_multimetareg_metan[["data"]][["log_Wt_change"]] NAS_multmetareg_tab$log_Gluc_change <- NAS_multimetareg_metan[["data"]][["log_Gluc_change"]] NAS_multmetareg_tab$log_Insul_change <- NAS_multimetareg_metan[["data"]][["log_Insul_change"]] NAS_multmetareg_tab$Qual_score <- NAS_multimetareg_metan[["data"]][["Qual_score"]] NAS_multmetareg_tab_cor <- cor(NAS_multmetareg_tab[,8:15], use="complete.obs") NAS_multmetareg_tab_cor library(PerformanceAnalytics) chart.Correlation(NAS_multmetareg_tab[,8:15], use="complete.obs") ## high correlation between age_start, age,_end, and duration, therefore drop age_end from model ## also have to drop insulin change due to insufficient data library(dmetar) NAS_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = NAS_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE) NAS_multi_intereference1 sink("NAS_multi_intereference1.txt") print(NAS_multi_intereference1) sink() ## run multi-metareg for top model 1 NAS_multmetareg_1 <- rma(yi = yi, sei = sei, data = NAS_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + Background_simple + log_Age_start + log_Gluc_change, test="knha") NAS_multmetareg_1_tab <- coef(summary(NAS_multmetareg_1)) NAS_multmetareg_1_tab$rownames <- rownames(NAS_multmetareg_1_tab) NAS_multmetareg_1_tab$mod1_text <- paste(format(round(NAS_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(NAS_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_multmetareg_1_tab$mod1_text <- paste(NAS_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL) NAS_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(NAS_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL) ## check robustness using permutation test NAS_multmetareg_1_permut <- permutest(NAS_multmetareg_1) sink("NAS_multmetareg_1_permut.txt") print(NAS_multmetareg_1_permut) sink() #### ## repeat but also include drug class in model, therefore drop where <3 unique studies for any drug class ## insufficient data to do by individual drug NAS_multimetareg_data_drugcounts <- NAS_multimetareg_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n()) NAS_multimetareg_data_drugcounts_sum <- NAS_multimetareg_data_drugcounts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n()) NAS_multimetareg_data_drugcounts_less3 = subset(NAS_multimetareg_data_drugcounts_sum, n <3) NAS_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all <- droplevels(NAS_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all) NAS_multimetareg_data_drug_droplist <- NAS_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all NAS_multimetareg_data_2 <- NAS_multimetareg_data %>% filter(!Drug_Class_new_1_all %in% NAS_multimetareg_data_drug_droplist) ## Run metan NAS_multimetareg_metan_2 <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_multimetareg_data_2, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") library(metafor) NAS_multmetareg_tab_2 <- data.frame(NAS_multimetareg_metan_2$studlab) NAS_multmetareg_tab_2$yi <- NAS_multimetareg_metan_2[["TE"]] NAS_multmetareg_tab_2$sei <- NAS_multimetareg_metan_2[["seTE"]] NAS_multmetareg_tab_2$Model_simple <- NAS_multimetareg_metan_2[["data"]][["Model_simple"]] NAS_multmetareg_tab_2$Background_simple <- NAS_multimetareg_metan_2[["data"]][["Background_simple"]] NAS_multmetareg_tab_2$Sex <- NAS_multimetareg_metan_2[["data"]][["Sex"]] NAS_multmetareg_tab_2$Drug_Class_new_1_all <- NAS_multimetareg_metan_2[["data"]][["Drug_Class_new_1_all"]] NAS_multmetareg_tab_2$log_Fat_kcal <- NAS_multimetareg_metan_2[["data"]][["log_Fat_kcal"]] NAS_multmetareg_tab_2$log_Age_start <- NAS_multimetareg_metan_2[["data"]][["log_Age_start"]] NAS_multmetareg_tab_2$log_Age_end <- NAS_multimetareg_metan_2[["data"]][["log_Age_end"]] NAS_multmetareg_tab_2$log_Duration <- NAS_multimetareg_metan_2[["data"]][["log_Duration"]] NAS_multmetareg_tab_2$log_Wt_change <- NAS_multimetareg_metan_2[["data"]][["log_Wt_change"]] NAS_multmetareg_tab_2$log_Gluc_change <- NAS_multimetareg_metan_2[["data"]][["log_Gluc_change"]] NAS_multmetareg_tab_2$log_Insul_change <- NAS_multimetareg_metan_2[["data"]][["log_Insul_change"]] NAS_multmetareg_tab_2$Qual_score <- NAS_multimetareg_metan_2[["data"]][["Qual_score"]] NAS_multmetareg_tab_2_cor <- cor(NAS_multmetareg_tab_2[,8:15], use="complete.obs") NAS_multmetareg_tab_2_cor library(PerformanceAnalytics) chart.Correlation(NAS_multmetareg_tab_2[,8:15], use="complete.obs") ## high correlation between age_start, age,_end, and duration, therefore drop age_end from model, as well as previous redundant mods (age, duration, qual score), also had to remove glucose library(dmetar) NAS_multi_intereference2 <- multimodel.inference(TE = "yi", seTE = "sei", data = NAS_multmetareg_tab_2, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Wt_change", "Background_simple", "Drug_Class_new_1_all"), interaction = FALSE) NAS_multi_intereference2 ## run multi-metareg for top model NAS_multmetareg_2 <- rma(yi = yi, sei = sei, data = NAS_multmetareg_tab_2, method = "ML", mods = ~ Background_simple + log_Fat_kcal + log_Wt_change, test="knha") NAS_multmetareg_2_tab <- coef(summary(NAS_multmetareg_2)) NAS_multmetareg_2_tab$rownames <- rownames(NAS_multmetareg_2_tab) NAS_multmetareg_2_tab$mod2_text <- paste(format(round(NAS_multmetareg_2_tab$estimate, 1), nsmall = 1), format(round(NAS_multmetareg_2_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_multmetareg_2_tab$mod2_text <- paste(NAS_multmetareg_2_tab$mod2_text, "", sep = ")", collapse = NULL) NAS_multmetareg_2_tab$mod2_pval_2dig <- paste((signif(NAS_multmetareg_2_tab$pval, digits=2)), "", sep = "", collapse = NULL) NAS_multmetareg_sumtab <- merge(NAS_multmetareg_1_tab, NAS_multmetareg_2_tab, by="rownames", all=TRUE) write.table(NAS_multmetareg_sumtab, "NAS_multmetareg_sumtab.csv", sep=",") ## check robustness using permutation test NAS_multmetareg_2_permut <- permutest(NAS_multmetareg_2) sink("NAS_multmetareg_2_permut.txt") print(NAS_multmetareg_2_permut) sink() ## See if meta-regression results change after removal of weight-loss diets library(tidyverse) NAS_NoWtLoss_data <- NAS_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD') NAS_NoWtLoss_metan_full <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD") NAS_NoWtLoss_reg_log_Wt_change <- metareg(NAS_NoWtLoss_metan_full, log_Wt_change) NAS_NoWtLoss_reg_log_Wt_change_tab <- data.frame(NAS_NoWtLoss_reg_log_Wt_change[["beta"]]) NAS_NoWtLoss_reg_log_Wt_change_tab$se <- NAS_NoWtLoss_reg_log_Wt_change[["se"]] NAS_NoWtLoss_reg_log_Wt_change_tab$pval <- NAS_NoWtLoss_reg_log_Wt_change[["pval"]] NAS_NoWtLoss_reg_log_Wt_change_tab$beta <- NAS_NoWtLoss_reg_log_Wt_change[["beta"]] NAS_NoWtLoss_reg_log_Wt_change_tab <- NAS_NoWtLoss_reg_log_Wt_change_tab[-c(1),] NAS_NoWtLoss_reg_log_Wt_change_tab <- NAS_NoWtLoss_reg_log_Wt_change_tab[-c(1)] NAS_NoWtLoss_reg_log_Wt_change_tab$k <- NAS_NoWtLoss_reg_log_Wt_change[["k"]] NAS_NoWtLoss_reg_log_Wt_change_tab$r2 <- NAS_NoWtLoss_reg_log_Wt_change[["R2"]] NAS_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change" NAS_NoWtLoss_reg_log_Gluc_change <- metareg(NAS_NoWtLoss_metan_full, log_Gluc_change) NAS_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(NAS_NoWtLoss_reg_log_Gluc_change[["beta"]]) NAS_NoWtLoss_reg_log_Gluc_change_tab$se <- NAS_NoWtLoss_reg_log_Gluc_change[["se"]] NAS_NoWtLoss_reg_log_Gluc_change_tab$pval <- NAS_NoWtLoss_reg_log_Gluc_change[["pval"]] NAS_NoWtLoss_reg_log_Gluc_change_tab$beta <- NAS_NoWtLoss_reg_log_Gluc_change[["beta"]] NAS_NoWtLoss_reg_log_Gluc_change_tab <- NAS_NoWtLoss_reg_log_Gluc_change_tab[-c(1),] NAS_NoWtLoss_reg_log_Gluc_change_tab <- NAS_NoWtLoss_reg_log_Gluc_change_tab[-c(1)] NAS_NoWtLoss_reg_log_Gluc_change_tab$k <- NAS_NoWtLoss_reg_log_Gluc_change[["k"]] NAS_NoWtLoss_reg_log_Gluc_change_tab$r2 <- NAS_NoWtLoss_reg_log_Gluc_change[["R2"]] NAS_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change" NAS_NoWtLoss_reg_log_Insul_change <- metareg(NAS_NoWtLoss_metan_full, log_Insul_change) NAS_NoWtLoss_reg_log_Insul_change_tab <- data.frame(NAS_NoWtLoss_reg_log_Insul_change[["beta"]]) NAS_NoWtLoss_reg_log_Insul_change_tab$se <- NAS_NoWtLoss_reg_log_Insul_change[["se"]] NAS_NoWtLoss_reg_log_Insul_change_tab$pval <- NAS_NoWtLoss_reg_log_Insul_change[["pval"]] NAS_NoWtLoss_reg_log_Insul_change_tab$beta <- NAS_NoWtLoss_reg_log_Insul_change[["beta"]] NAS_NoWtLoss_reg_log_Insul_change_tab <- NAS_NoWtLoss_reg_log_Insul_change_tab[-c(1),] NAS_NoWtLoss_reg_log_Insul_change_tab <- NAS_NoWtLoss_reg_log_Insul_change_tab[-c(1)] NAS_NoWtLoss_reg_log_Insul_change_tab$k <- NAS_NoWtLoss_reg_log_Insul_change[["k"]] NAS_NoWtLoss_reg_log_Insul_change_tab$r2 <- NAS_NoWtLoss_reg_log_Insul_change[["R2"]] NAS_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change" NAS_NoWtLoss_metareg_sumtab <- rbind(NAS_NoWtLoss_reg_log_Wt_change_tab, NAS_NoWtLoss_reg_log_Gluc_change_tab, NAS_NoWtLoss_reg_log_Insul_change_tab) NAS_NoWtLoss_metareg_sumtab$text <- paste(format(round(NAS_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(NAS_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL) NAS_NoWtLoss_metareg_sumtab$text <- paste(NAS_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL) NAS_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(NAS_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL) NAS_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(NAS_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL) write.table(NAS_NoWtLoss_metareg_sumtab,file="NAS_NoWtLoss_metareg_sumtab.csv",sep=",") ## make relevant bubble plots pdf(file="NAS_NoWtLoss_bubble_weight_change.pdf",width=6,height=6) NAS_NoWtLoss_bubble_weight_change <- bubble(NAS_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score (NAS)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) NAS_NoWtLoss_bubble_weight_change dev.off() pdf(file="NAS_NoWtLoss_bubble_gluc_change.pdf",width=6,height=6) NAS_NoWtLoss_bubble_gluc_change <- bubble(NAS_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score (NAS)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5) NAS_NoWtLoss_bubble_weight_change dev.off() ########## ## Make summary heatmap of meta-regression results across multiple traits library(pheatmap) library(gtools) TG_metareg_sumtab$TG_beta <- TG_metareg_sumtab$beta Stea_metareg_sumtab$Stea_beta <- Stea_metareg_sumtab$beta LobIn_metareg_sumtab$LobIn_beta <- LobIn_metareg_sumtab$beta Bal_metareg_sumtab$Bal_beta <- Bal_metareg_sumtab$beta Fib_metareg_sumtab$Fib_beta <- Fib_metareg_sumtab$beta NAS_metareg_sumtab$NAS_beta <- NAS_metareg_sumtab$beta metareg_hm_tab = as.data.frame(TG_metareg_sumtab$var) metareg_hm_tab <- metareg_hm_tab %>% rename(var = "TG_metareg_sumtab$var") metareg_hm_tab <- merge(metareg_hm_tab, TG_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab <- merge(metareg_hm_tab, Stea_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab <- merge(metareg_hm_tab, LobIn_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab <- merge(metareg_hm_tab, Bal_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab <- merge(metareg_hm_tab, Fib_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab <- merge(metareg_hm_tab, NAS_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab <- subset(metareg_hm_tab, select = c("TG_beta","Stea_beta","LobIn_beta","Bal_beta","Fib_beta","NAS_beta","var")) metareg_hm_tab <- metareg_hm_tab %>% filter(var == "Chol_per" | var == "Drug_dose" | var == "log_Age_end" | var == "log_Age_start" | var == "log_Duration" | var == "log_Fat_kcal" | var == "log_FructGluc_per" | var == "log_Gluc_change" | var == "log_Insul_change" | var == "log_Wt_change" | var == "log_Sucr_kcal" | var == "Qual_score") metareg_hm_tab[1:6] <- lapply(metareg_hm_tab[1:6], function(x) c(scale(x))) rownames(metareg_hm_tab) = metareg_hm_tab[,7] metareg_hm_tab <- metareg_hm_tab[ order(row.names(metareg_hm_tab)), ] TG_metareg_sumtab$TG_pval <- TG_metareg_sumtab$pval Stea_metareg_sumtab$Stea_pval <- Stea_metareg_sumtab$pval LobIn_metareg_sumtab$LobIn_pval <- LobIn_metareg_sumtab$pval Bal_metareg_sumtab$Bal_pval <- Bal_metareg_sumtab$pval Fib_metareg_sumtab$Fib_pval <- Fib_metareg_sumtab$pval NAS_metareg_sumtab$NAS_pval <- NAS_metareg_sumtab$pval metareg_hm_tab_pval = as.data.frame(TG_metareg_sumtab$var) metareg_hm_tab_pval <- metareg_hm_tab_pval %>% rename(var = "TG_metareg_sumtab$var") metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, TG_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, Stea_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, LobIn_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, Bal_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, Fib_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, NAS_metareg_sumtab, by="var", all=TRUE) metareg_hm_tab_pval <- subset(metareg_hm_tab_pval, select = c("TG_pval","Stea_pval","LobIn_pval","Bal_pval","Fib_pval","NAS_pval","var")) metareg_hm_tab_pval <- metareg_hm_tab_pval %>% filter(var == "Chol_per" | var == "Drug_dose" | var == "log_Age_end" | var == "log_Age_start" | var == "log_Duration" | var == "log_Fat_kcal" | var == "log_FructGluc_per" | var == "log_Gluc_change" | var == "log_Insul_change" | var == "log_Wt_change" | var == "log_Sucr_kcal" | var == "Qual_score") rownames(metareg_hm_tab_pval) = metareg_hm_tab_pval[,7] metareg_hm_tab_pval <- metareg_hm_tab_pval[ order(row.names(metareg_hm_tab_pval)), ] metareg_hm_tab_pval_stars = as.data.frame(stars.pval(metareg_hm_tab_pval$Stea_pval)) metareg_hm_tab_pval_stars$TG_pval <- stars.pval(metareg_hm_tab_pval$TG_pval) metareg_hm_tab_pval_stars$Stea_pval <- stars.pval(metareg_hm_tab_pval$Stea_pval) metareg_hm_tab_pval_stars$LobIn_pval <- stars.pval(metareg_hm_tab_pval$LobIn_pval) metareg_hm_tab_pval_stars$Bal_pval <- stars.pval(metareg_hm_tab_pval$Bal_pval) metareg_hm_tab_pval_stars$Fib_pval <- stars.pval(metareg_hm_tab_pval$Fib_pval) metareg_hm_tab_pval_stars$NAS_pval <- stars.pval(metareg_hm_tab_pval$NAS_pval) metareg_hm_tab_pval_stars$var <- metareg_hm_tab_pval$var rownames(metareg_hm_tab_pval_stars) = rownames(metareg_hm_tab) metareg_hm_tab_pval_stars <- metareg_hm_tab_pval_stars[-c(1)] hm_colnames = c("Hepatic TG content","Steatosis","Lobular \n Inflammation","Ballooning","Fibrosis","NAS","var") hm_rownames = c("Cholesterol (% diet)", "Drug dose", "Age at end", "Age at start", "Duration of intervention", "Fat (%kcal diet)", "Fructose/glucose (% diet)", "Glucose change", "Insulin change", "Sucrose (%kcal diet)", "Weight change", "Quality score") hm_metareg_sum <- pheatmap(metareg_hm_tab[1:6], cluster_rows = TRUE, cluster_cols = TRUE, angle_col = 45, cutree_rows = 2, display_numbers = metareg_hm_tab_pval_stars[1:6], fontsize_number=16, labels_row = hm_rownames, labels_col = hm_colnames) pdf(file="hm_metareg_sum.pdf",width=6,height=6) hm_metareg_sum dev.off()