Last updated: 2025-04-09

Checks: 7 0

Knit directory: HairCort-Evaluation-Nist2020/

This reproducible R Markdown analysis was created with workflowr (version 1.7.1). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20241016) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version ccad031. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .DS_Store
    Ignored:    .RData
    Ignored:    .Rhistory
    Ignored:    analysis/.DS_Store
    Ignored:    analysis/.Rhistory
    Ignored:    data/.DS_Store
    Ignored:    data/Test3/.DS_Store
    Ignored:    data/Test4/.DS_Store

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/ELISA_QC_test3.Rmd) and HTML (docs/ELISA_QC_test3.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
Rmd ccad031 Paloma 2025-04-09 new_calc
html ccad031 Paloma 2025-04-09 new_calc
Rmd 77c2ab5 Paloma 2025-04-08 cleaning test3
html 77c2ab5 Paloma 2025-04-08 cleaning test3

Data Cleaning and Quality Control (QC) details how files are loaded, merged, and cleaned, including the exclusion of unnecessary columns and handling of missing values.

# DATA SET 
current_test <- "Test3"
data_path <- file.path("./data", current_test)

Set parameters

# flag samples with high CV (15%) or binding above 80% and under 20%
CV_threshold <- 15.0
uppBinLim <- 80.0
lowBinLim <- 20.0

Data Cleaning and QC

Load, inspect and merge 3 files:

  • layout: 7 columns (Wells, Sample, weight_mg, buffer_nl, spike, volume of the spike, dilution factor), 96 rows
  • results: from myassays.com (not including standards), 82 rows
[1] 98  2
Wells Sample
A1 NSB
A2 NSB
B1 STD1
B2 STD1
C1 STD2
C2 STD2
[1] 82  8
Wells Raw X. Conc. Conc….Average. X.CV SD SEM
A3 0.403 28.8 2899 2888.0 0.565 16.3 11.5
A4 0.405 NA 2876 NA NA NA NA
B3 1.050 81.1 314.1 324.9 4.700 15.3 10.8
B4 1.040 NA 335.7 NA NA NA NA
C3 0.959 77.3 461.9 396.6 23.300 92.4 65.3
C4 1.040 NA 331.3 NA NA NA NA
Wells Sample Categ weight_mg buffer_nl spike vol_in_well.tube_uL spike_vol_uL Dilution
C3 1 NoSpike 13.1 250 0 50 0 1
D3 2 NoSpike 17.2 60 0 50 0 1
F3 4 NoSpike 11.7 250 0 50 0 1
G3 5 NoSpike 14.4 60 0 50 0 1
B5 8 NoSpike 15.3 250 0 50 0 1
E5 11 NoSpike 17.5 250 0 50 0 1
# Merge files
m <- merge(layout, results, by = "Wells")
m <- merge(m, info, by = c("Sample", "Wells"))
m <- na.omit(m)
colnames(m) <- c("Sample", "Wells", "Raw.OD", 
                 "Binding.Perc", "Conc_pg.ml",
                 "Ave_Conc_pg.ml", "CV.Perc", 
                 "SD", "SEM", "Category", "Weight_mg", "Buffer_nl", 
                 "Spike", "TotalVol_well_uL", "SpikeVol_uL", "Dilution") 
#m[, 3:11] <- lapply(m[, 3:11], 
 #                   function(x) as.numeric(as.character(x)))
m <- m[order(m$Sample),]
kable(head(m)) 
Sample Wells Raw.OD Binding.Perc Conc_pg.ml Ave_Conc_pg.ml CV.Perc SD SEM Category Weight_mg Buffer_nl Spike TotalVol_well_uL SpikeVol_uL Dilution
1 C3 0.959 77.3 461.9 396.6 23.30 92.4 65.3 NoSpike 13.1 250 0 50 0 1
10 D5 0.743 37.6 940.7 3064.0 98.00 3000.0 2120.0 YesSpike 17.7 60 1 50 25 1
11 E5 0.939 71.6 496.8 513.2 4.50 23.1 16.3 NoSpike 17.5 250 0 50 0 1
12 F5 0.422 30.0 2690 2728.0 1.92 52.5 37.1 YesSpike 24.1 250 1 50 25 1
13 G5 0.451 32.1 2412 2477.0 3.68 91.1 64.4 YesSpike 16.8 250 1 50 25 1
14 H5 0.437 31.8 2541 2504.0 2.11 52.9 37.4 YesSpike 13.8 250 1 50 25 1

Duplicates with high CV

Identify and flag samples with high coefficient of variation (duplicate measurements that are too different from each other)

Sample Wells Raw.OD Binding.Perc Conc_pg.ml Ave_Conc_pg.ml CV.Perc SD SEM Category Weight_mg Buffer_nl Spike TotalVol_well_uL SpikeVol_uL Dilution CV_categ
10 D5 0.743 37.6 940.7 3064.0 98.0 3000.0 2120.0 YesSpike 17.7 60 1 50 25 1 HIGH CV
25_S C9 0.347 31.1 3683 2802.0 44.5 1250.0 881.0 DONOTUSE 37.4 60 1 50 25 1 HIGH CV
35 D11 0.548 33.8 1727 2443.0 41.5 1010.0 716.0 NoSpike 32.1 60 0 50 0 1 HIGH CV
1 C3 0.959 77.3 461.9 396.6 23.3 92.4 65.3 NoSpike 13.1 250 0 50 0 1 HIGH CV
20 F7 0.538 43.6 1785 1550.0 21.4 332.0 235.0 NoSpike 30.1 60 0 50 0 1 HIGH CV
4 F3 1.070 80.6 295.8 334.5 16.3 54.6 38.6 NoSpike 11.7 250 0 50 0 1 HIGH CV
2 D3 0.675 53.8 1159 1045.0 15.3 160.0 113.0 NoSpike 17.2 60 0 50 0 1 HIGH CV
High CV in a total of 7 duplicates
  Wells
1    D5
2    C9
3   D11
4    C3
5    F7
6    F3
7    D3

Samples outside the curve

Samples that have a binding percentage over 80 or 20 do not provide accurate results, and we consider them to be outside the curve.

Total samples outside the curve: 3
Sample Wells Raw.OD Binding.Perc Conc_pg.ml Ave_Conc_pg.ml CV.Perc SD SEM Category Weight_mg Buffer_nl Spike TotalVol_well_uL SpikeVol_uL Dilution CV_categ Binding.Perc_categ
9 17 C7 1.08 84.3 278 270.6 3.86 10.5 7.39 NoSpike 24.5 60 0 50 0 1 NA ABOVE 80% binding
25 30B B3 1.05 81.1 314.1 324.9 4.70 15.3 10.80 NoSpike 29.6 250 0 50 0 1 NA ABOVE 80% binding
34 4 F3 1.07 80.6 295.8 334.5 16.30 54.6 38.60 NoSpike 11.7 250 0 50 0 1 HIGH CV ABOVE 80% binding

Total samples failed

Sample Wells Raw.OD Binding.Perc Conc_pg.ml Ave_Conc_pg.ml CV.Perc SD SEM Category Weight_mg Buffer_nl Spike TotalVol_well_uL SpikeVol_uL Dilution CV_categ Binding.Perc_categ Failed_samples
34 4 F3 1.070 80.6 295.8 334.5 16.30 54.6 38.6 NoSpike 11.7 250 0 50 0 1 HIGH CV ABOVE 80% binding HIGH CV;ABOVE 80% binding
35 5 G3 0.944 72.1 488 501.4 3.79 19.0 13.4 NoSpike 14.4 60 0 50 0 1 NA NA NA
36 6 H3 0.490 34.7 2099 2204.0 6.75 149.0 105.0 YesSpike 13.7 60 1 50 25 1 NA NA NA
37 7 A5 0.436 30.5 2551 2669.0 6.25 167.0 118.0 YesSpike 16.4 60 1 50 25 1 NA NA NA
38 8 B5 1.030 77.8 354.9 386.8 11.70 45.1 31.9 NoSpike 15.3 250 0 50 0 1 NA NA NA
39 9 C5 0.432 30.3 2590 2693.0 5.46 147.0 104.0 YesSpike 19.2 250 1 50 25 1 NA NA NA
Data set with low quality samples flagged: Data_QC_flagged.csv
Number of failed samples is 9
Number of good quality data points is 30
Good quality data is stored in Data_QC_filtered.csv file

sessionInfo()
R version 4.4.3 (2025-02-28)
Platform: aarch64-apple-darwin20
Running under: macOS Sequoia 15.4

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/Detroit
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_1.1.4 knitr_1.49 

loaded via a namespace (and not attached):
 [1] vctrs_0.6.5       cli_3.6.3         rlang_1.1.4       xfun_0.49        
 [5] stringi_1.8.4     generics_0.1.3    promises_1.3.0    jsonlite_1.8.9   
 [9] workflowr_1.7.1   glue_1.8.0        rprojroot_2.0.4   git2r_0.35.0     
[13] htmltools_0.5.8.1 httpuv_1.6.15     sass_0.4.9        fansi_1.0.6      
[17] rmarkdown_2.29    jquerylib_0.1.4   evaluate_1.0.1    tibble_3.2.1     
[21] fastmap_1.2.0     yaml_2.3.10       lifecycle_1.0.4   whisker_0.4.1    
[25] stringr_1.5.1     compiler_4.4.3    fs_1.6.5          Rcpp_1.0.13-1    
[29] pkgconfig_2.0.3   rstudioapi_0.17.1 later_1.3.2       digest_0.6.37    
[33] R6_2.5.1          tidyselect_1.2.1  utf8_1.2.4        pillar_1.9.0     
[37] magrittr_2.0.3    bslib_0.8.0       tools_4.4.3       cachem_1.1.0