From 0103b70ec296a735956ee742060de75d18a21893 Mon Sep 17 00:00:00 2001 From: Franz Innerbichler Date: Thu, 16 Apr 2026 09:18:14 +0200 Subject: [PATCH] report download fixed --- .DS_Store | Bin 0 -> 6148 bytes Doc_BioassayReport copy.Rmd | 433 ++++++++++++++++++++++++++++++++++++ Doc_BioassayReport.Rmd | 68 +++--- logo.png | Bin 0 -> 23092 bytes server.R | 14 +- ui.R | 9 +- www/.DS_Store | Bin 0 -> 6148 bytes www/logo.png | Bin 0 -> 23092 bytes 8 files changed, 479 insertions(+), 45 deletions(-) create mode 100644 .DS_Store create mode 100644 Doc_BioassayReport copy.Rmd create mode 100644 logo.png create mode 100644 www/.DS_Store create mode 100644 www/logo.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3a85252ec5a37c3a4eb87e05580215bca039dd25 GIT binary patch literal 6148 zcmZQzU|@7AO)+F(5MW?n;9!8zj35RBCIAV8Fop~hRD=~|9>|R3oTU8x97YBP24<+# zpr=4?XJ#k|!IWZT_k)FU(hY-?^K%Q3ya835oA2V1l#`zX3crW%WFO=oKkf+jH&|b8 zehMDhf(#5(kt`Txj)uT!2#kinXb6mk0Bu76R8fQKFK*geGiv&12#kin5DWoO`Je!4 z+cP*o=>`Z5l44+FU;uXk7#SE?VBTW{^#dSkKw3d+Kw3dGNGk&)hy|7hYh_@BYGnj> zLl_ts!Cev%4c5-U2(}r-2Ww|w1l!EOzzEUKzzDS&)_GwB^=LrmL$ot6f^CPnZj>Gk zfzc3vg#fgZE&!_kT^Sf)SqLUQN{@!XXb6me5MX3+33hP;Rhl?F3#w~D^=SfB9#jWI ts$)>ajM@lbf($51K$U{3dyrNT4X%nA85qD?M;ijL5E`XNLxBDv000&tEsp>I literal 0 HcmV?d00001 diff --git a/Doc_BioassayReport copy.Rmd b/Doc_BioassayReport copy.Rmd new file mode 100644 index 0000000..769170f --- /dev/null +++ b/Doc_BioassayReport copy.Rmd @@ -0,0 +1,433 @@ +--- +output: + pdf_document: + extra_dependencies: ["float"] + number_sections: true + toc: true + toc_depth: 3 +header_includes: + -\usepackage{fancyheadr} + -\setlength{\headheight}{22pt}% + -\usepackage{lastpage} + -\pagestyle{fancy} + -\usepackage{pdflscape} + -\usepackage{longtable} + -\rhead{\includegraphics[width=.15\textwidth]{`r getwd()`/logo.png}} +params: + FileName: NA + newTitle: NA + author: NA + REP: NA + coeffs: NA +author: "Author: `r params$author`" +title: | + | ![](logo.png){width=1in} + | 4PL bioassay evaluation +subtitle: | + `r params$FileName` + + Unique time: `r Sys.time()` +date: "`r paste(params$Subway, params$Version)`" + +--- + +\fancyfoot[C]{\thepage\ of \pageref{LastPage}} +\newpage + +\newpage + +```{r setup, include=FALSE} + +knitr::opts_chunk$set(echo = TRUE) + +library(knitr) +library(DT) + +REP <- params$REP +author <- params$author +coeffs <- params$coeffs + +all_l <- REP$all_l +ANOVAXLS <- REP$ANOVAXLS +DiagnTable <- REP$DiagnTable +UnRPLAausw <- REP$UnRPLAausw +UnRPLBend <- REP$UnRPLBend +PLAausw <- REP$PLAausw +PLBend <- REP$PLBend +LogPLAausw <- REP$LogPLAausw +LogUnrPLAausw <- REP$LogUnrPLAausw + +XLdat2 <- REP$XLdat2 + +CIplot <- REP$CIplot +testsTab <- REP$testsTab +relpotTestPlot <- REP$relpotTestPlot + + + +``` + + +# Introduction + +Bioassay potency estimation uses statistical methods to quantify the strength of a biological product or drug by comparing its response to that of a reference standard. Because biological responses are inherently variable, affected by assay conditions, cell systems or organisms, and measurement noise, the 4-parametric logistic regression is used to obtain reliable potency values. The variance for confidence interval calculation is coming from the regression procedure itself and is an excellent predictor for the variability of any future potency determinations. +USP<1034> recommends calculation of standard errors of ratios of the parameters using Fieller's theorem [Finney D.J. 1978] or using the "delta" method (for a discussion about the "delta" method see [Ver Hoef 2012]). However, the presented gradient approach using the differences on the log-scale is methematically more stable und thus preferable compared to any ratio approach ([Franz, V.H. 2007]). + +# Results + +All data used for the 4PL evaluation is shown in table 1: + +```{r alll, echo=FALSE, warning=FALSE, results='asis'} + +kable(all_l, format = "markdown", caption= "Uploaded data (test and reference) in long format", digits=3) + +``` + +The following 4 plots show all 4 models: restricted and unrestricted, and log transformed, respectively. + +You can also embed plots, for example: + +```{r XLplot, echo=FALSE, warning=FALSE, fig.height=4, fig.width=6, fig.cap="Plot of models", fig.align='left'} + +plot_f <- function(dat, sigmoid,det_sig) { + CORdat <- cor(dat[,1],dat[,ncol(dat)]) + + all_l <- melt(data.frame(dat), id.vars="log_dose", variable.name="replname", value.name = "readout") + isRef <- rep(c(1,0),1,each=nrow(all_l)/2) + isSample <- rep(c(0,1),1,each=nrow(all_l)/2) + all_l2 <- cbind(all_l, isRef, isSample) + + if(is.null(det_sig)) { + if (CORdat<0) { + startlist <- list(a=sigmoid[3], b=-sigmoid[5],cs=sigmoid[7], + d=sigmoid[1],r=sigmoid[8]) + } else { + startlist <- list(a=sigmoid[3],b=sigmoid[5],cs=sigmoid[7], + d=sigmoid[1],r=sigmoid[8]) + } + } else { + startlist <- list(a=det_sig[5], b=det_sig[1],cs=det_sig[7], + d=det_sig[3],r=det_sig[7] - det_sig[8]) + } + #browser() + tryCatch({ + mr <- gsl_nls(fn = readout ~ a+(d-a)/(1+exp(b*(log_dose-(cs-r*isSample)))), + data=all_l2, + start=startlist, + control=gsl_nls_control(xtol=1e-6,ftol=1e-6, gtol=1e-6)) + }, + error = function(err) { + err$message + }) + s_mr <- summary(mr) + a <- s_mr$coefficients[1,1] + b <- s_mr$coefficients[2,1] + cs <- s_mr$coefficients[3,1] + d <- s_mr$coefficients[4,1] + r <- s_mr$coefficients[5,1] + + log_dose <- unique(all_l$log_dose) + seq_x <- seq(min(log_dose),max(log_dose),0.1) + SAMPLE <- a+(d-a)/(1+exp(b*(seq_x-(cs-r)))) + REF <- a+(d-a)/(1+exp(b*(seq_x-(cs)))) + + if (is.null(det_sig)) { + SAMPLEtrue <- sigmoid[4] + (sigmoid[2] -sigmoid[4])/(1+exp(sigmoid[6]*(seq_x-(sigmoid[7]-sigmoid[8])))) + REFtrue <- sigmoid[3] + (sigmoid[1] -sigmoid[3])/(1+exp(sigmoid[5]*(seq_x-(sigmoid[7])))) + } else { + SAMPLEtrue <- det_sig[4] + (det_sig[6] -det_sig[4])/(1+exp(-det_sig[2]*(seq_x-(det_sig[8])))) + REFtrue <- det_sig[3] + (det_sig[5] -det_sig[3])/(1+exp(-det_sig[1]*(seq_x-(det_sig[7])))) + } + + pl_df <- cbind(seq_x, SAMPLE, REF, SAMPLEtrue, REFtrue) + all_l2$readout[all_l2$readout < 0] <- 0.01 + all_l2$readouttrans <- log(all_l2$readout) + slopeEC50 <- b*(a-d)/4 + + Xbendl3 <- cs-(1.31696/b) + Xbendu3 <- cs+(1.31696/b) + XbendlT <- cs-r-(1.31696/b) + XbenduT <- cs-r+(1.31696/b) + bendpoints <- c(bendREF_lower = round(Xbendl3,3), bendREF_upper=round(Xbendu3,3), + bendSAMPLE_lower = round(XbendlT,3), bendSAMPLE_upper=round(XbenduT,3)) + + p <- ggplot(all_l2, aes(x=log_dose, y=readout, color=factor(isRef))) + + geom_point(shape=factor(isRef), alpha=0.8) + + labs(title = paste("restricted 4pl; bendp:", round(Xbendl3,3),round(Xbendu3,3),round(XbendlT,3),round(XbenduT,3)), + color="product") + + scale_color_manual(labels=c("test","reference"), values=c("red","blue")) + + scale_shape_manual(labels=c("test","reference")) + + theme_bw() + + theme(axis.text = element_text(size=14)) + + p2 <- p + geom_line(data=as.data.frame(pl_df), aes(x=seq_x, y=SAMPLE), color="red", + inherit.aes = F) + + geom_line(data=as.data.frame(pl_df), aes(x=seq_x, y=REF), color="blue", + inherit.aes = F) + + geom_line(data=as.data.frame(pl_df), aes(x=seq_x, y=SAMPLEtrue), color="red", linetype=2, alpha=0.4, + inherit.aes = F) + + geom_line(data=as.data.frame(pl_df), aes(x=seq_x, y=REFtrue), color="blue", linetype=2, alpha=0.4, + inherit.aes = F) + + geom_vline(xintercept=c(Xbendl3, Xbendu3), col="blue",linetype=2) + + geom_vline(xintercept=c(XbendlT, XbenduT), col="red",linetype=2) + + annotate("text", x=cs, y=a+(d-a)/2, label="0", size=5) + + theme(legend.position="none") + + + # transformed plots + p_rt <- ggplot(all_l2, aes(x=log_dose, y=readouttrans, color=factor(isRef))) + + geom_point(shape=factor(isRef), alpha=0.8) + + labs(title = paste("restricted transformed 4pl"), color="product") + + scale_color_manual(labels=c("test","reference"), values=c("red","blue")) + + theme_bw() + + mrt <- gsl_nls(fn = readouttrans ~ a+(d-a)/(1+exp(b*(log_dose-(cs-r*isSample)))), + data=all_l2, + start=startlist, + control=gsl_nls_control(xtol=1e-6,ftol=1e-6, gtol=1e-6)) + s_mrt <- summary(mrt) + a_trans <- s_mrt$coefficients[1,1] + b_trans <- s_mrt$coefficients[2,1] + cs_trans <- s_mrt$coefficients[3,1] + d_trans <- s_mrt$coefficients[4,1] + r_trans <- s_mrt$coefficients[5,1] + + XbendlTrans <- cs_trans-(1.31696/b_trans) + XbenduTrans <- cs_trans+(1.31696/b_trans) + XbendlTransT <- cs_trans-r_trans-(1.31696/b_trans) + XbenduTransT <- cs_trans-r_trans+(1.31696/b_trans) + bendpointsTRANS <- c(bendREF_lower = round(XbendlTrans,3), bendREF_upper=round(XbenduTrans,3), + bendSAMPLE_lower = round(XbendlTransT,3), bendSAMPLE_upper=round(XbenduTransT,3)) + + SAMPLEtrans <- a_trans+(d_trans-a_trans)/(1+exp(b_trans*(seq_x-(cs_trans-r_trans)))) + REFtrans <- a_trans+(d_trans-a_trans)/(1+exp(b_trans*(seq_x-(cs_trans)))) + + pl_df_trans <- cbind(seq_x, SAMPLEtrans, REFtrans) + p_rt2 <- p_rt + geom_line(data=as.data.frame(pl_df_trans), aes(x=seq_x, y=SAMPLEtrans), color="red", + inherit.aes = F) + + geom_line(data=as.data.frame(pl_df_trans), aes(x=seq_x, y=REFtrans), color="blue", + inherit.aes = F) + + geom_vline(xintercept=c(XbendlTrans, XbenduTrans), col="blue",linetype=2) + + geom_vline(xintercept=c(XbendlTransT, XbenduTransT), col="red",linetype=2) + + theme(legend.position = "none", axis.text=element_text(size=14)) + + if (is.null(det_sig)) { + unrestr <- drm(readout ~ exp(log_dose), isSample, data=all_l2, fct=LL.4(), + pmodels=data.frame(isSample, isSample,isSample,isSample)) + Sum_u <- summary(unrestr) + ast <- Sum_u$coefficients[3,1] + ate <- Sum_u$coefficients[4,1] + bst <- Sum_u$coefficients[1,1] + bte <- Sum_u$coefficients[2,1] + cst <- log(Sum_u$coefficients[7,1]) + cte <- log(Sum_u$coefficients[8,1]) + dst <- Sum_u$coefficients[5,1] + dte <- Sum_u$coefficients[6,1] + } else { + ast <- det_sig[5] + ate <- det_sig[6] + bst <- det_sig[1] + bte <- det_sig[2] + cst <- det_sig[7] + cte <- det_sig[8] + dst <- det_sig[3] + dte <- det_sig[4] + } + REFu <- ast + (dst-ast)/(1+exp(bst*(seq_x-cst))) + SAMPLEu <- ate + (dte-ate)/(1+exp(bte*(seq_x-cte))) + pl_df2 <- cbind(seq_x, SAMPLEu, REFu) +#browser() + pu <- ggplot(all_l2, aes(x=log_dose, y=readout, color=factor(isRef))) + + geom_point() + + labs(title="unrestricted 4_pl-Model", color="product") + + scale_color_manual(labels = c("test","reference"), values=c("red","blue")) + + theme_bw() + pu2 <- pu + geom_line(data=as.data.frame(pl_df2), aes(x=seq_x, y=SAMPLEu), + color="red", inherit.aes = F) + + geom_line(data=as.data.frame(pl_df2), aes(x=seq_x, y=REFu), + color="blue", inherit.aes = F, + show.legend = F) + pu2_ <- pu2 + + theme(legend.position = "none", axis.text = element_text(size=14)) + putrans <- ggplot(all_l2, aes(x=log_dose, y=readouttrans, color=factor(isRef))) + + geom_point() + + labs(title="unrestricted transformed 4_pl-Model", color="product") + + scale_color_manual(labels = c("test","reference"), values=c("red","blue")) + + theme_bw() + + unrestr_trans <- drm(readouttrans ~ exp(log_dose), isSample, data=all_l2, fct=LL.4(), + pmodels=data.frame(isSample, isSample,isSample,isSample)) + Sum_ut <- summary(unrestr_trans) + ast_t <- Sum_ut$coefficients[3,1] + ate_t <- Sum_ut$coefficients[4,1] + bst_t <- Sum_ut$coefficients[1,1] + bte_t <- Sum_ut$coefficients[2,1] + cst_t <- log(Sum_ut$coefficients[7,1]) + cte_t <- log(Sum_ut$coefficients[8,1]) + dst_t <- Sum_ut$coefficients[5,1] + dte_t <- Sum_ut$coefficients[6,1] + + REFu_trans <- ast_t + (dst_t-ast_t)/(1+exp(bst_t*(seq_x-cst_t))) + SAMPLEu_trans <- ate_t + (dte_t-ate_t)/(1+exp(bte_t*(seq_x-cte_t))) + pl_df2u_t <- cbind(seq_x, SAMPLEu_trans, REFu_trans) + + pu2_t <- putrans + geom_line(data=as.data.frame(pl_df2u_t), aes(x=seq_x, y=SAMPLEu_trans), + color="red", inherit.aes = F) + + geom_line(data=as.data.frame(pl_df2u_t), aes(x=seq_x, y=REFu_trans), + color="blue", inherit.aes = F, + show.legend = F) + pu3_t <- pu2_t + grid.arrange(p2,p_rt2,pu2_,pu3_t, nrow=2) +} + +plot_f(XLdat2, sigmoid=NULL, det_sig=coeffs) + + +``` + +The ANOVA of the unconstrained model is listed in table 2: + +```{r anovaxls, echo=FALSE, warning=FALSE, results='asis'} + +kable(ANOVAXLS, format = "markdown", caption= "ANOVA table unrestricted", digits=3) + + +``` + + +```{r SST_ergebn, fig.align='center', fig.pos='htb!', echo=FALSE, cache=FALSE, warning=FALSE, message=FALSE, tidy=TRUE} + +kable(testsTab[1:7,], row.names = F, format = "markdown", caption="SST results") + + +``` + + +*...The estimate for F-test on regression and on non-linearity is the p-value + F-test on regression passes if F-value > F-crit and thus p < 0.05 + F-test on non-linearity passes if F-value < F-crit and thus p > 0.05 + Test results outcome: + + 0 ... test passed (for EQ tests: CI within limits); + + 1 ... test failed (for EQ tests CI not within limits); + + -1 ... calculations unbound/denominator too close to 0 + + +```{r, label= 'CIplot', echo=FALSE, warning=FALSE, fig.width=100, fig.cap='Selected SSt confidence intervals with entered limits', fig.align='center'} + +png("CIplot.png") +print(CIplot) +dev.off() + + +``` + + +![](CIplot.png){width=60%} + + +## Fitting results of the 4 models with bend points + +The results of the non-linear fitting procedure for the restricted model (5 parameters) is listed in table 4: + +```{r PLAausw, echo=FALSE, warning=FALSE, results='asis'} + +kable(PLAausw, format = "markdown", caption= "Restricted 4PL evaluation", digits=3, row.names = F) + + +``` + + +A depiction of the CI and corresponding limits of relative potency is shown here: + +```{r, label='relpotPlot', echo=FALSE, warning=FALSE, fig.height=2, fig.width=3.5, fig.cap="Rel potency with CIs and limits", fig.align='left', results='asis'} + +print(relpotTestPlot) + + +``` + + +The bend points for test and reference sample are in table 5: + +```{r PLBend, echo=FALSE, warning=FALSE, results='asis'} + +kable(PLBend, format = "markdown", caption= "Bendpoints (Sebaugh) of restricted 4PL", digits=3) + + +``` + +The results of the non-linear fitting procedure for the unrestricted model (8 parameters) is listed in table 6: + +```{r UnRPLAausw, echo=FALSE, warning=FALSE, results='asis'} + +kable(UnRPLAausw, format = "markdown", caption= "UNrestricted 4PL evaluation", digits=3, row.names = F) + + +``` + + +```{r UnRPLBend, echo=FALSE, warning=FALSE, results='asis'} + +kable(UnRPLBend, format = "markdown", caption= "Bend points of 4PL unrestricted", digits=3, row.names = F) + + +``` + + + +```{r LogPLAausw, echo=FALSE, warning=FALSE, results='asis'} + +kable(LogPLAausw, format = "markdown", caption= "Restricted 4PL evaluation with log-transformed response", digits=3) + + +``` + + + +```{r LogUnRPLAausw, echo=FALSE, warning=FALSE, results='asis'} + +kable(LogUnrPLAausw, format = "markdown", caption= "Unrestricted 4PL evaluation with log-transformed response", digits=3) + + +``` + + +# Appendix: Formulas + +## 4PL regression + +$$ +Y = D + \frac{A-D} {1+(\frac{C} {x})^B } + \epsilon +$$ + + +## log-logistic 4P regression + +$$ +Y = D + \frac{A-D} {1+e^{(B*(C - log(x))) }} + \epsilon +$$ + +where: x ... concentration of the analyte + +A: upper asymptote + +B: slope + +D: lower asymptote + +C ... EC50 + +# Literature + +Finney, D.J.: (1978) Statistical Method in Biological Assay, London: Charles Griffin House, 3rd edition (pp. 80-82) + +Franz, V.H.: Ratios: A short guide to confidence limits and proper use. arXiv:0710.2024v1, 10 Oct 2007 + +VerHoef, J.M.: Who invented the Delta Method? The American Statistician, 2012, 66:2, 124-127 DOI: 10.1080/00031305.2012.687494 + + + + diff --git a/Doc_BioassayReport.Rmd b/Doc_BioassayReport.Rmd index 769170f..95bcdc7 100644 --- a/Doc_BioassayReport.Rmd +++ b/Doc_BioassayReport.Rmd @@ -31,10 +31,10 @@ date: "`r paste(params$Subway, params$Version)`" --- -\fancyfoot[C]{\thepage\ of \pageref{LastPage}} -\newpage + + -\newpage + ```{r setup, include=FALSE} @@ -93,10 +93,10 @@ plot_f <- function(dat, sigmoid,det_sig) { CORdat <- cor(dat[,1],dat[,ncol(dat)]) all_l <- melt(data.frame(dat), id.vars="log_dose", variable.name="replname", value.name = "readout") - isRef <- rep(c(1,0),1,each=nrow(all_l)/2) + isRef <- rep(c(1,0),1,each=nrow(all_l)/2) isSample <- rep(c(0,1),1,each=nrow(all_l)/2) all_l2 <- cbind(all_l, isRef, isSample) - + if(is.null(det_sig)) { if (CORdat<0) { startlist <- list(a=sigmoid[3], b=-sigmoid[5],cs=sigmoid[7], @@ -109,7 +109,7 @@ plot_f <- function(dat, sigmoid,det_sig) { startlist <- list(a=det_sig[5], b=det_sig[1],cs=det_sig[7], d=det_sig[3],r=det_sig[7] - det_sig[8]) } - #browser() + #browser() tryCatch({ mr <- gsl_nls(fn = readout ~ a+(d-a)/(1+exp(b*(log_dose-(cs-r*isSample)))), data=all_l2, @@ -125,12 +125,12 @@ plot_f <- function(dat, sigmoid,det_sig) { cs <- s_mr$coefficients[3,1] d <- s_mr$coefficients[4,1] r <- s_mr$coefficients[5,1] - + log_dose <- unique(all_l$log_dose) seq_x <- seq(min(log_dose),max(log_dose),0.1) SAMPLE <- a+(d-a)/(1+exp(b*(seq_x-(cs-r)))) REF <- a+(d-a)/(1+exp(b*(seq_x-(cs)))) - + if (is.null(det_sig)) { SAMPLEtrue <- sigmoid[4] + (sigmoid[2] -sigmoid[4])/(1+exp(sigmoid[6]*(seq_x-(sigmoid[7]-sigmoid[8])))) REFtrue <- sigmoid[3] + (sigmoid[1] -sigmoid[3])/(1+exp(sigmoid[5]*(seq_x-(sigmoid[7])))) @@ -138,19 +138,19 @@ plot_f <- function(dat, sigmoid,det_sig) { SAMPLEtrue <- det_sig[4] + (det_sig[6] -det_sig[4])/(1+exp(-det_sig[2]*(seq_x-(det_sig[8])))) REFtrue <- det_sig[3] + (det_sig[5] -det_sig[3])/(1+exp(-det_sig[1]*(seq_x-(det_sig[7])))) } - + pl_df <- cbind(seq_x, SAMPLE, REF, SAMPLEtrue, REFtrue) all_l2$readout[all_l2$readout < 0] <- 0.01 all_l2$readouttrans <- log(all_l2$readout) slopeEC50 <- b*(a-d)/4 - + Xbendl3 <- cs-(1.31696/b) Xbendu3 <- cs+(1.31696/b) XbendlT <- cs-r-(1.31696/b) XbenduT <- cs-r+(1.31696/b) bendpoints <- c(bendREF_lower = round(Xbendl3,3), bendREF_upper=round(Xbendu3,3), bendSAMPLE_lower = round(XbendlT,3), bendSAMPLE_upper=round(XbenduT,3)) - + p <- ggplot(all_l2, aes(x=log_dose, y=readout, color=factor(isRef))) + geom_point(shape=factor(isRef), alpha=0.8) + labs(title = paste("restricted 4pl; bendp:", round(Xbendl3,3),round(Xbendu3,3),round(XbendlT,3),round(XbenduT,3)), @@ -159,7 +159,7 @@ plot_f <- function(dat, sigmoid,det_sig) { scale_shape_manual(labels=c("test","reference")) + theme_bw() + theme(axis.text = element_text(size=14)) - + p2 <- p + geom_line(data=as.data.frame(pl_df), aes(x=seq_x, y=SAMPLE), color="red", inherit.aes = F) + geom_line(data=as.data.frame(pl_df), aes(x=seq_x, y=REF), color="blue", @@ -172,15 +172,15 @@ plot_f <- function(dat, sigmoid,det_sig) { geom_vline(xintercept=c(XbendlT, XbenduT), col="red",linetype=2) + annotate("text", x=cs, y=a+(d-a)/2, label="0", size=5) + theme(legend.position="none") - - + + # transformed plots p_rt <- ggplot(all_l2, aes(x=log_dose, y=readouttrans, color=factor(isRef))) + geom_point(shape=factor(isRef), alpha=0.8) + labs(title = paste("restricted transformed 4pl"), color="product") + scale_color_manual(labels=c("test","reference"), values=c("red","blue")) + theme_bw() - + mrt <- gsl_nls(fn = readouttrans ~ a+(d-a)/(1+exp(b*(log_dose-(cs-r*isSample)))), data=all_l2, start=startlist, @@ -191,17 +191,17 @@ plot_f <- function(dat, sigmoid,det_sig) { cs_trans <- s_mrt$coefficients[3,1] d_trans <- s_mrt$coefficients[4,1] r_trans <- s_mrt$coefficients[5,1] - + XbendlTrans <- cs_trans-(1.31696/b_trans) XbenduTrans <- cs_trans+(1.31696/b_trans) XbendlTransT <- cs_trans-r_trans-(1.31696/b_trans) XbenduTransT <- cs_trans-r_trans+(1.31696/b_trans) bendpointsTRANS <- c(bendREF_lower = round(XbendlTrans,3), bendREF_upper=round(XbenduTrans,3), bendSAMPLE_lower = round(XbendlTransT,3), bendSAMPLE_upper=round(XbenduTransT,3)) - + SAMPLEtrans <- a_trans+(d_trans-a_trans)/(1+exp(b_trans*(seq_x-(cs_trans-r_trans)))) REFtrans <- a_trans+(d_trans-a_trans)/(1+exp(b_trans*(seq_x-(cs_trans)))) - + pl_df_trans <- cbind(seq_x, SAMPLEtrans, REFtrans) p_rt2 <- p_rt + geom_line(data=as.data.frame(pl_df_trans), aes(x=seq_x, y=SAMPLEtrans), color="red", inherit.aes = F) + @@ -236,7 +236,7 @@ plot_f <- function(dat, sigmoid,det_sig) { REFu <- ast + (dst-ast)/(1+exp(bst*(seq_x-cst))) SAMPLEu <- ate + (dte-ate)/(1+exp(bte*(seq_x-cte))) pl_df2 <- cbind(seq_x, SAMPLEu, REFu) -#browser() +#browser() pu <- ggplot(all_l2, aes(x=log_dose, y=readout, color=factor(isRef))) + geom_point() + labs(title="unrestricted 4_pl-Model", color="product") + @@ -246,7 +246,7 @@ plot_f <- function(dat, sigmoid,det_sig) { color="red", inherit.aes = F) + geom_line(data=as.data.frame(pl_df2), aes(x=seq_x, y=REFu), color="blue", inherit.aes = F, - show.legend = F) + show.legend = F) pu2_ <- pu2 + theme(legend.position = "none", axis.text = element_text(size=14)) putrans <- ggplot(all_l2, aes(x=log_dose, y=readouttrans, color=factor(isRef))) + @@ -254,7 +254,7 @@ plot_f <- function(dat, sigmoid,det_sig) { labs(title="unrestricted transformed 4_pl-Model", color="product") + scale_color_manual(labels = c("test","reference"), values=c("red","blue")) + theme_bw() - + unrestr_trans <- drm(readouttrans ~ exp(log_dose), isSample, data=all_l2, fct=LL.4(), pmodels=data.frame(isSample, isSample,isSample,isSample)) Sum_ut <- summary(unrestr_trans) @@ -266,16 +266,16 @@ plot_f <- function(dat, sigmoid,det_sig) { cte_t <- log(Sum_ut$coefficients[8,1]) dst_t <- Sum_ut$coefficients[5,1] dte_t <- Sum_ut$coefficients[6,1] - + REFu_trans <- ast_t + (dst_t-ast_t)/(1+exp(bst_t*(seq_x-cst_t))) SAMPLEu_trans <- ate_t + (dte_t-ate_t)/(1+exp(bte_t*(seq_x-cte_t))) pl_df2u_t <- cbind(seq_x, SAMPLEu_trans, REFu_trans) - + pu2_t <- putrans + geom_line(data=as.data.frame(pl_df2u_t), aes(x=seq_x, y=SAMPLEu_trans), color="red", inherit.aes = F) + geom_line(data=as.data.frame(pl_df2u_t), aes(x=seq_x, y=REFu_trans), color="blue", inherit.aes = F, - show.legend = F) + show.legend = F) pu3_t <- pu2_t grid.arrange(p2,p_rt2,pu2_,pu3_t, nrow=2) } @@ -306,26 +306,26 @@ kable(testsTab[1:7,], row.names = F, format = "markdown", caption="SST results") *...The estimate for F-test on regression and on non-linearity is the p-value F-test on regression passes if F-value > F-crit and thus p < 0.05 F-test on non-linearity passes if F-value < F-crit and thus p > 0.05 - Test results outcome: - + Test results outcome: + 0 ... test passed (for EQ tests: CI within limits); - + 1 ... test failed (for EQ tests CI not within limits); - + -1 ... calculations unbound/denominator too close to 0 -```{r, label= 'CIplot', echo=FALSE, warning=FALSE, fig.width=100, fig.cap='Selected SSt confidence intervals with entered limits', fig.align='center'} + -png("CIplot.png") -print(CIplot) -dev.off() + + + -``` + -![](CIplot.png){width=60%} + ## Fitting results of the 4 models with bend points diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a6fc3b04057e92d1d7df16bde065c400d4d9c4 GIT binary patch literal 23092 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 a{AUyho~Gw8- F-crit and thus p < 0.05"), h5("F-test on non-linearity passes if F-value < F-crit and thus p > 0.05"), h5("Test results outcome: 0 ... test passed (for EQ tests: CI within limits); 1 ... test failed (for EQ tests CI not within limits); -1 ... calculations unbound/denominator too close to 0"), - plotOutput("CIplot, height=50%")) + #plotOutput("CIplot, height=50%") + ) )) ), #### Linear PLA ---- diff --git a/www/.DS_Store b/www/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmZQzU|@7AO)+F(5MW?n;9!8z45|!R0Z1N%F(jFgL>QrFAPJ2!M?+vV1V%$(Gz3ON zU^D~25V%SxcdJP zRior+2#kinunYl47MEZbCs3t{!+W4QHvuXKVuPw;Mo^s$(F3lEVT}ML$bg~*R5_@+ b2Uo?6kTwK}57Iu`5P${HC_Nei0}uiLNUI8I literal 0 HcmV?d00001 diff --git a/www/logo.png b/www/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a6fc3b04057e92d1d7df16bde065c400d4d9c4 GIT binary patch literal 23092 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 a{AUyho~Gw8-