From c4801115527c882e10580b9164c9113daf85093c Mon Sep 17 00:00:00 2001 From: Franz Innerbichler Date: Mon, 1 Jun 2026 19:35:00 +0200 Subject: [PATCH] report generation after new setup of repo; linearity XL report improved --- .DS_Store | Bin 10244 -> 10244 bytes MultiL1.xlsx | Bin 0 -> 74081 bytes R/Global.R | 40 ++--- .../Doc_BioassayLinReport.Rmd | 54 +++++-- .../Doc_BioassayReport.Rmd | 1 + dev/app.R | 149 +++++++++++++++--- logo.png => dev/logo.png | Bin 7 files changed, 185 insertions(+), 59 deletions(-) create mode 100644 MultiL1.xlsx rename Doc_BioassayLinReport.Rmd => dev/Doc_BioassayLinReport.Rmd (71%) rename Doc_BioassayReport.Rmd => dev/Doc_BioassayReport.Rmd (99%) rename logo.png => dev/logo.png (100%) diff --git a/.DS_Store b/.DS_Store index 5fb0315a4c55a31866296234dbefd5ca43b88949..f61cc513e90ddce9acff9a473c7a2bea9cc218c3 100644 GIT binary patch delta 20 ccmZn(XbIRbQJj%s^Ca>A{EQ5fCy5sU08aM@8vpA{EUo~Cy5sU08a=99RL6T diff --git a/MultiL1.xlsx b/MultiL1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e8b56f2b8d5c41badd55f8145746ed053214896f GIT binary patch literal 74081 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 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]). +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. Biological responses are inherently variable, affected by assay conditions, cell systems or organisms, and measurement noise. To control this variability, a linear regression approach is used to obtain reliable potency values. Three consecutive dilution steps showing the steepest slope are used for linear fitting. +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]). The present analysis calculated the relative potency with the "delta" method. The formula of the relative potency is in the Appendix. # Raw data @@ -81,7 +84,7 @@ kable(XLdat2, format = "markdown", caption= "Uploaded data (test and reference) ``` -All data used linerar regression is shown in table 2. +The linerar regression is calculated on the readout listed in table 2. ```{r Circles, echo=FALSE, warning=FALSE, results='asis'} @@ -135,21 +138,37 @@ plot_grid(XLplotLin) ``` -The ANOVA of the unconstrained model is listed in table 3. -```{r anovaxls, echo=FALSE, warning=FALSE, results='asis'} +The relative potency can be read from tbale 3. -kable(ANOVAXLS, format = "markdown", caption= "ANOVA table unrestricted", digits=3) +```{r LinPotTab, echo=FALSE, warning=FALSE, results='asis'} + +kable(LinPotTab, format = "markdown", caption= "Potency table", digits=3) ``` -The assay suitability tests are shown in table 4. + + + +The ANOVA of the unconstrained model is listed in table 4. + +```{r anovaxls, echo=FALSE, warning=FALSE, results='asis'} + +kable(ANOVAlin, format = "markdown", caption= "ANOVA table unrestricted", digits=3) + +RMSE <- sqrt(ANOVAlin[5,4]) + +``` + +The standard deviation of the model is `r RMSE`. + +The assay suitability tests are shown in table 5. ```{r SST_ergebn, echo=FALSE, cache=FALSE, warning=FALSE, message=FALSE, tidy=TRUE} -kable(LinTests, row.names = F, format = "markdown", caption="Assay suitability test results", digits=3) +kable(LinTests1, row.names = F, format = "markdown", caption="Assay suitability test results", digits=3) ``` @@ -159,15 +178,15 @@ The estimate is the p-value of the test. F-tests on regression, significance of slopes, and preparation need to have a p-value <0.05 to pass. All other tests pass if p-value > 0.05. - 0 ... test passed (for EQ tests: CI within limits); + 0 ... test passed; - 1 ... test failed (for EQ tests CI not within limits); - + 1 ... test failed); +(NOTE: F-tests are sensitive, when the residual variability of the method is small. On the other hand effects may not be detected if residual variability is high.) ## Fitting results -The results of the linear fitting procedure for the restricted model is listed in table 5: +The results of the linear fitting procedure for the restricted model is listed in table 6: ```{r SumCSSI, echo=FALSE, warning=FALSE, results='asis'} @@ -178,9 +197,10 @@ kable(SuModAB, format = "markdown", caption= "Restricted linear regression (CSSI CSSI: common slope, separate intercept -The results of the linear fitting procedure for the unrestricted model is listed in table 6. +The results of the linear fitting procedure for the unrestricted model is listed in table 7. -```{r SuSSSI, echo=FALSE, warning=FALSE, results='asis'} + +```{r SumSSSI, echo=FALSE, warning=FALSE, results='asis'} kable(SuModABu, format = "markdown", caption= "Restricted linear regression (SSSI)", digits=3, row.names = F) @@ -197,7 +217,7 @@ SSSI: separate slope, separate intercept ## Potency of linear PLA $$ - rel Potency = \frac{I_{ref} - I_{test}{k} + rel Potency = \frac{I_{ref} - I_{test}}{k} $$ where: I... intercept of reference or test k ... common slope diff --git a/Doc_BioassayReport.Rmd b/dev/Doc_BioassayReport.Rmd similarity index 99% rename from Doc_BioassayReport.Rmd rename to dev/Doc_BioassayReport.Rmd index cef955e..ed42074 100644 --- a/Doc_BioassayReport.Rmd +++ b/dev/Doc_BioassayReport.Rmd @@ -93,6 +93,7 @@ kable(XLdat2, format = "markdown", caption= "Uploaded data (test and reference) ```{r Over_all, echo=FALSE, comment=NA, warning=NA, message=NA} +# browser() potFlag <- 0 if (pottab4plXL["test_result"][[1]][1]==1) potFlag <- 1 AnalysisFlag <- FALSE diff --git a/dev/app.R b/dev/app.R index 8cf81e8..91d89e2 100644 --- a/dev/app.R +++ b/dev/app.R @@ -548,6 +548,8 @@ server <- function(input, output, session) { ) }) + + #### UI wizard ---- output$wizard <- renderUI({ navbarPage( title = "Dilution setting", @@ -557,14 +559,12 @@ server <- function(input, output, session) { sidebarPanel( width = 3, fluidRow( - column( - 6, - numericInput( - "Limits", p("limit to be >", bsButton("q4", label = "", icon = icon("info"), style = "primary", size = "extra-small")), - bsPopover(id = "q4", title = "", content = "The calculated limits ...") + column(6, + box(title = "Upload multiple worksheets", status = "warning", solidHeader = T, width = 12, "Please upload your EXCEL file here", + fileInput("MiFile", "", accept = ".xlsx")) ) ) - ) + ), mainPanel( tabsetPanel( @@ -575,8 +575,7 @@ server <- function(input, output, session) { title = "ANOVA table", status = "primary", solidHeader = T, width = 12, tableOutput("Anovatab") ), - column( - 4, + column(4, h3("Confidence intervals"), tableOutput("CIs"), "The confidence interval table is interaactive for changes in: variability slider (%SD), potency of test-slider, @@ -584,8 +583,7 @@ server <- function(input, output, session) { tableOutput("optimalDils"), selectInput(inputId = "scenario", label = "Select an 'optimal' scenario:", choices = c("scenario 2", "scenario 3", "scenario 6", "steep slope")) ), - column( - 5, + column(5, plotOutput("plotfordilutions"), h4("in grey: most extreme bend point lines of theoretical samples with 50% and 200% potency"), sliderInput("dilslider", "Adjust the dilutions(+-change in %)", min = -100, max = 100, value = 0, step = 1, round = 0), @@ -595,8 +593,7 @@ server <- function(input, output, session) { "Short guidance: wider dilution ranges increase the CIs of rel. potency, and decrease the CIs of upper and lower asymptote ratios, as well as Hill's slope ratios", br(), "Narrower dilution ranges decrease the CIs of rel. potency, and increase the CIs of upper and lower asymptote ratios, ands Hill's slope ratios", ), - column( - 3, + column(3, h3("Bend points"), tableOutput("bps"), tableOutput("extremebps"), @@ -670,6 +667,22 @@ server <- function(input, output, session) { }) + observe({ + if (!is.null(input$MiFile)) { + MinFile <- input$MiFile + ext <- tools::file_ext(MinFile$name) + file.rename(MinFile$datapath, paste(MinFile$datapath, ".xlsx", sep = "")) + t.filelocation <- gsub("\\\\", "/", paste(MinFile$datapath, ext, sep = ".")) + sheets <- openxlsx::getSheetNames(t.filelocation) + dat <- lapply(sheets, openxlsx::read.xlsx, xlsxFile = t.filelocation) + names(dat) <- sheets + Dat$Mws <- dat + names(Dat$Mws) <- sheets + Dat$Msheets <- sheets + Dat$MFileName <- input$MiFile[["name"]] + } + }) + #### process XLSX file ---- observe({ if (!is.null(input$iFile)) { @@ -1339,7 +1352,7 @@ server <- function(input, output, session) { if (is.null(input$PureErr)) { return(NULL) } - if (!is.null(Dat$FITsFlag)) { + if (Dat$FITsFlag) { return(NULL) } @@ -1974,10 +1987,12 @@ server <- function(input, output, session) { #### 4pl potency table XL ---- observe({ + + if (is.null(Dat$EXCEL)) { return(NULL) } - if (!is.null(Dat$FITsFlag)) { + if (Dat$FITsFlag) { return(NULL) } ro_new <- Dat$EXCEL @@ -2025,7 +2040,7 @@ server <- function(input, output, session) { colnames(pottab4_) <- c("model", "potency", "lower95%CI", "upper95%CI", "relative_lower95%CI", "relative_upper95%CI", "test_result") row.names(pottab4_) <- NULL REP$pottab4plXL <- pottab4_[1:2, ] - +#browser() output$pottab4plXL <- DT::renderDataTable({ dat <- datatable(pottab4_[1:2, ], rownames = F, @@ -2055,8 +2070,101 @@ server <- function(input, output, session) { #### Dilutions Simulator ---- output$plotfordilutions <- renderPlot({ - tab <- sim2() - tab <- as.data.frame(tab) + if (!is.null(Dat$Mws)) + AllXL <- Dat$Mws + AllSheets <- Dat$Msheets + + + for (N_WS in 1:length(AllXL)) { + + datWS <- as.data.frame(AllXL[[N_WS]]) + + cn <- colnames(datWS) + logI <- grep("log|ln", cn) + logDoseI <- grep("log_dose", cn) + if (length(logI) > 0 & length(logDoseI) == 0) { + datWS$log_dose <- datWS[, logI] + datWS2 <- datWS[, -logI] + CORro <- cor(datWS$log_dose, datWS[, 3]) + } else if (length(logI) == 0 & length(logDoseI) == 0) { + Ind <- grep(".ilution|.ose|.onc", cn) + datWS$log_dose <- log(datWS[, Ind]) + CORro <- cor(datWS[, Ind], datWS[, 3]) + datWS2 <- datWS[, -Ind] + } else if (length(logI) > 0 & length(logDoseI) > 0) { + datWS2 <- datWS + CORro <- cor(datWS[, logI], datWS[, 3]) + } + Dat$datWS2 <- datWS2 + + FITs <- Fitting_FUNC(datWS2, TransFlag = F) + + pot_est <- FITs[[3]] + potU_est <- FITs[[4]] + # unrestricted + SU_mu <- FITs[[2]] + URMcoeffs <- SU_mu$coefficients + + X <- seq(min(log(datWS23$log_dose)), max(log(datWS2$log_dose)), 0.1) + sigRef <- URMcoefs[1,1] + (URMcoefs1[4,1]-URMcoefs[1,1])/(1+exp(URMcoefs[2,1]*(URMcoefs[3,1]-X))) + sigTest1 <- URMcoefs[5,1] + (URMcoefs[8,1]-URMcoefs[5,1])/(1+exp(URMcoefs[6,1]*(URMcoefs[7,1]-X))) + + dfPlotsigRef <- data.frame(X=X, sigRef = sigRef, Prod = pdfInd) + dfPlotsigTest <- data.frame(X=X, sigTest = sigTest1, Prod = AllSheets[[N_WS]]) + + if (!exists("SIGrefDF")) SIGrefDF <- dfPlotsigRef else SIGrefDF <- rbind(SIGrefDF, dfPlotsigRef) + if (!exists("SIGtestDF")) SIGtestDF <- dfPlotsigTest else SIGtestDF <- rbind(SIGtestDF,dfPlotsigTest) + + EC50TEST <- as.numeric(c(URMcoefsDF[,8])) + # EC50TEST <- EC50TEST[!EC50TEST %in% boxplot.stats(EC50TEST)$out] + EC50REF <- as.numeric(URMcoefsDF[,4]) + # EC50REF <- EC50REF[!EC50REF %in% boxplot.stats(EC50REF)$out] + UasREF <- as.numeric(URMcoefsDF[,5]) + # UasREF <- UasREF[!UasREF %in% boxplot.stats(UasREF)$out] + LasREF <- as.numeric(URMcoefsDF[,2]) + # LasREF <- LasREF[!LasREF %in% boxplot.stats(LasREF)$out] + # + # Dat$URMcoefsDF <- URMcoefsDF + # Dat$RestrM <- RestrM + # Dat$CalcPot <- CalcPot + # + #### sigmoid plots ---- + Slope <- as.numeric(URMcoefsDF[1,3]) + # if (Slope > 0) { + # x_UA <- max(X); x_LA <- min(X) + # } else { x_UA <- min(X); x_LA <- max(X) } + # + # p1 <- ggplot(SIGrefDF, aes(x_X, y=sigRef, col=as.factor(Prod))) + + # geom_line() + + # annotate("text", label="x", x=x_UA, y=UasREF, alpha=0.2) + + # annotate("text", label="o", x=x_LA, y=LasREF, alpha=0.2) + + # geom_vline(xintercept = EC50REF, alpha = 0.2) + + # xlab("dilutions") + + # ggtitle("Plot of all calculated reference fits (unrestricted model, in gray vertical lines: EC50)") + + # theme_bw() + + # theme(axis.text = element_text(face = "bold", size = 15), + # plot.title = element_text(size = 15, face = "bold")) + # + # output$sigPlotREF <- renderPlot({ p1 }) + # + # PLOTS$sigPlotREF <- p1 + # + # p2 <- ggplot(SIGtestDF, aes(x_X, y=sigTest, col=as.factor(Prod))) + + # geom_line() + + # #annotate("text", label="x", x=x_UA, y=UasREF, alpha=0.2) + + # #annotate("text", label="o", x=x_LA, y=LasREF, alpha=0.2) + + # geom_vline(xintercept = EC50TEST, alpha = 0.2) + + # xlab("dilutions") + + # ggtitle("Plot of all calculated reference fits (unrestricted model, in gray vertical lines: EC50)") + + # theme_bw() + + # theme(axis.text = element_text(face = "bold", size = 15), + # plot.title = element_text(size = 15, face = "bold")) + # + # output$sigPlotREF <- renderPlot({ p2 }) + # + # PLOTS$sigPlotTEST <- p2 + + dils <- tab$log_dose min_y <- min(tab[, 1:3]) max_y <- max(tab[, 1:3]) @@ -2077,7 +2185,10 @@ server <- function(input, output, session) { dils2 <- dils_avsc + av dilfactors <- 1 / exp(dils2 - lag(dils2)) } - + } #for N_WS + + + Dat$newDils <- dils2 sigmoid <- sigmoid() @@ -2538,6 +2649,8 @@ server <- function(input, output, session) { params = list( FileName = Dat$FileName, author = Dat$Author, + NoP = Dat$NoP, + Assay = Dat$Assay, REP = REP, REPlin = REPlin, coeffsLin = Dat$coeffs_UN diff --git a/logo.png b/dev/logo.png similarity index 100% rename from logo.png rename to dev/logo.png