library(tidyverse) library(gslnls) library(ggplot2) library(reshape2) library(drc) library(ggridges) library(car) # Pseudoreplication # simulation of replication strategies Calc_DilRes <- function(as = 10, bs = 1, cs = -6, ds = 110, at = 10, bt = 1, r=0.01, ct = cs, dt = 110, sd_fac=0.1, gt=1, gs=1, log_concREF, log_concTEST, # -r THEOconc , heteroNoise=FALSE, noDilSeries, noDils) { # browser() yAxfac <- (as-ds) log_cREF_l <- melt(log_concREF) log_doseREF <- log_cREF_l$value log_cTEST_l <- melt(log_concTEST) log_doseTEST <- log_cTEST_l$value isRef <- rep(c(1,0),1,each=length(log_concREF)) isSample <- rep(c(0,1),1,each=length(log_concTEST)) #um with equal sample without ro_jit <- as*isRef + at*isSample + (ds*isRef + dt*isSample - as*isRef - at*isSample)/ (1 + isRef*exp(bs*(cs - log_doseREF)) + isSample*exp(bt*(ct -log_doseTEST))) ro_jit_ <- abs(ro_jit) all_var <- rbind(log_cREF_l, log_cTEST_l) ro_jit2 <- cbind(all_var, ro_jit_, rep(THEOconc, 6), isRef, isSample) # if (noDilSeries==3) { # colnames(ro_jit2) <- c("R_dil1","R_dil2","R_dil3","T_dil1","T_dil2","T_dil3", "log_dose") # } else if (noDilSeries==2) { # colnames(ro_jit2) <- c("R_dil1","R_dil2","T_dil1","T_dil2", "log_dose") # } colnames(ro_jit2) <- c("dil_no","repl","trueLogConc" ,"readout","log_dose","isRef","isSample") return(ro_jit2) } RestrMF <- function(data, M) { all_l <- data #plot(all_l$log_dose, all_l$readout, col=all_l$sample) CORro <- cor(all_l$log_dose[1:8], all_l$readout[1:8]) if (CORro<0) B <- -1 else B <- 1 # browser() startlist <- list(a = min(all_l$readout), b = B, cs=mean(all_l$log_dose), r=0.0001, d = max(all_l$readout)) mr <- tryCatch({ gsl_nls(fn = readout ~ a + (d - a)/(1 + exp(b*((cs-r*isSample)-log_dose))), data = all_l, start = startlist, #trace=T, control = gsl_nls_control(xtol = 1e-6, ftol = 1e-6, gtol = 1e-6)) }, error = function(msg){ return(0) } ) if (length(mr)>1) { s_mr_coef <- summary(mr)$coefficients s_mr <- summary(mr) } else { s_mr_coef <- rep(0,4); s_mr <- 0 } if (M == "R") { return(s_mr_coef) } else if (M =="CI") { if (length(mr)==1) return(rep(0,4)) (RelPot_mr <- exp(s_mr_coef[4,1])) # r exponentiated POTr_CI <- exp(confint(mr, "r", method = "asymptotic", level=0.95)) # Pure error #browser() suppressWarnings(FitAnova <- anova(lm(readout ~ factor(log_dose)*isSample, all_l))) meanPureErr <- FitAnova[4,3] SEsPure <- sqrt(diag(vcov(mr)/s_mr$sigma^2)*meanPureErr) # PLA software: 1.0252 - 1.4242 lCIpure <- exp(s_mr_coef[4,1]-qt(0.975,nrow(all_l)-16)*SEsPure[4]) uCIpure <- exp(s_mr_coef[4,1]+qt(0.975,nrow(all_l)-16)*SEsPure[4]) if (is.infinite(uCIpure)) uCIpure <- NA if (is.infinite(POTr_CI[2])) POTr_CI[2] <- NA relCIpure <- c(lCIpure/RelPot_mr, uCIpure/RelPot_mr) CIsDF <- c(RelPot_mr,POTr_CI, lCIpure, uCIpure) names(CIsDF) <- c("potency","lCI","uCI","lpureCI","upureCI") return(CIsDF) } else if (M=="U") { if (length(mr)==1) return(rep(0,4)) startlstmu <- list(as = min(all_l$readout), bs = B, cs = mean(all_l$log_dose), ds = max(all_l$readout), at = min(all_l$readout), bt = B, ct = mean(all_l$log_dose), dt = max(all_l$readout)) mu <- tryCatch({ gsl_nls(readout ~ as*isRef + at*isSample + (ds*isRef + dt*isSample - as*isRef - at*isSample)/ (1 + isRef*exp(bs*(cs -log_dose)) + isSample*exp(bt*(ct -log_dose))), data = all_l, start = startlstmu, trace=T, control = gsl_nls_control(xtol = 1e-10, ftol = 1e-10, gtol = 1e-10)) }, error = function(msg){ return(0) } ) if (length(mu)>1) { smu_coef <- tryCatch({ summary(mu)$coefficients }, error = function(msg){ return(rep(NA, 8)) } ) #s_mu <- summary(mu) return(smu_coef) } else return(rep(0,8)) } else return() } Dil8F <- function(Cn1) { CSer <- matrix(NA, nrow=8, ncol=3) for (i in 1:8) { Cn1 <- Cn1/dilfactor+rnorm(3,0,SD*Cn1) CSer[i,] <- Cn1 } return(CSer) } DilDirF <- function(OrigMenge) { CDir <- matrix(NA, nrow=10, ncol=3) for (DilExp in 1:10) { C_d <- OrigMenge/dilfactor^DilExp+rnorm(3,0,SD*OrigMenge/dilfactor^DilExp) CDir[DilExp,] <- C_d } return(CDir) } homhetCIF <- function(AssD_) { # Confidence level alpha <- 0.05 z <- qnorm(1 - alpha/2) # 1.96 for 95% CI ### 1. Homogeneously Weighted CI ### mean_logRP <- mean(AssD_$logRP) var_mean <- mean(AssD_$SE^2) / nrow(AssD_) SE_mean <- sqrt(var_mean) CI_homo <- c(mean_logRP - z * SE_mean, mean_logRP + z * SE_mean) CI_homo_exp <- exp(CI_homo) # cat("Homogeneous weighting:\n") # cat(round(exp(mean_logRP),3), "95% CI =", round(CI_homo_exp[1], 3), "-", round(CI_homo_exp[2], 3), "\n\n") ### 2. Heterogeneously Weighted CI ### weights <- 1 / (AssD_$SE^2) weighted_mean <- sum(weights * AssD_$logRP) / sum(weights) var_weighted <- 1 / sum(weights) SE_weighted <- sqrt(var_weighted) CI_hetero <- c(weighted_mean - z * SE_weighted, weighted_mean + z * SE_weighted) CI_hetero_exp <- exp(CI_hetero) res <- c(exp(mean_logRP) , CI_homo_exp, exp(weighted_mean), CI_hetero_exp ) return(res) # cat("Heterogeneous weighting:\n") # cat("Combined RP =", round(exp(weighted_mean), 3), "\n") # cat("95% CI =", round(CI_hetero_exp[1], 6), "-", round(CI_hetero_exp[2], 6), "\n") } Conc <- c(1) for (x in 1:10) Conc <- c(Conc, (1/3^x)) N <- 10000 OrigMenge <- 1 dilfactor <- 3 SD <- 0.02 rm(CIsM_all, DevTargC3_) for (x in 1:3) { if (x==1) { Repl1 <- x; Repl2 <- x } # Anzahl Replikate für C2 und C3 if (x==2) { Repl1 <- 1; Repl2 <- 3 } if (x==3) { Repl1 <- x; Repl2 <- x } Flags <- vector() SDs1 <- SDs2 <- POT <- DevTargC3 <- hhCIV <- c() for (nTrials in 1:N) { C2 <- OrigMenge/dilfactor+rnorm(Repl1,0,SD*OrigMenge) C3 <- C2/dilfactor+rnorm(Repl1,0,C2*SD) CSer <- Dil8F(C3) # "true" replication C2_1 <- OrigMenge/dilfactor+rnorm(Repl2,0,SD*OrigMenge) C3_1 <- C2_1/dilfactor+rnorm(Repl2,0,SD*C2_1) CSer_3 <-Dil8F(C3_1) # Flag <- sd(CSer)0) /N*100)) print(paste("pure CI coverage", sum(log(te$lpureCI)<0 & log(te$upureCI)>0) /N*100)) print(cor(te$potency, (te$C3_DIFF))) te$logpot <- log(te$potency) # plot(te$C3_DIFF,te$potency, pch=19, xlab="Difference at C3") # abline(te$potency ~ te$C3_DIFF, col = "blue") # lines(lowess(te$potency ~ te$C3_DIFF), col = "green") scatterplot(logpot ~ C3_DIFF, data=te) } plot(te$C3_DIFF,te$logpot, pch=19, xlab="Difference at C3") abline(te$logpot ~ te$C3_DIFF, col = "blue") lines(lowess(te$logpot ~ te$C3_DIFF), col = "green") scatterplot(logpot ~ C3_DIFF, data=te) colnames(hhCIDF_) <- c("homomean", "lhomoCI", "uhomoCI","heteromean","lheteroCI","uheteroCI") te <- cbind(CIsM_allDF, hhCIDF_) p_histCI <- ggplot(CIsM_allDF, aes(x=widthCI, y=as.factor(scheme), fill=as.factor(scheme))) + geom_density_ridges() + theme_ridges() p_histCI p_histCI2 <- ggplot(CIsM_allDF, aes(x=widthCI, y=as.factor(scheme), fill=as.factor(scheme))) + geom_density_ridges() + theme_ridges() p_histCI2 sum(Flags)/N*100 mean(SDs1) mean(SDs2) ro_new <- Calc_DilRes(sd_fac=0.1, log_concREF=log_concREF, log_concTEST=log_concTEST,THEOconc = log(Conc)[4:11])