Quality Control & Sample Size Estimation
We ran your samples through the same analysis pipeline that will be applied to the main experiment. This document summarizes the protein variability, assesses the reproducibility of the biological samples, and estimates the sample sizes needed for the main experiment.
Input: a pilot data set with 20 samples and quantified proteins. The detailed source-data reference is recorded in Session Info.
The Quality Control tab describes detection, reproducibility, abundance distributions, and variability. Sample Size Calculation then uses the measured variability to size the main experiment for biologically relevant effect sizes.
This report is generated automatically and contains no experiment-specific conclusions. Please discuss it with your project bioinformatician or statistician (who is typically not your project coach).
Each tab below covers one aspect of data quality, from feature detection through sample-to-sample structure.
Here we summarize the number of proteins measured in the QC experiment. Depending on the type of your sample (e.g., pull-down, supernatant, whole cell lysate) we observe some dozens up to a few thousands of proteins. While the overall number of proteins can vary widely with the type of experiment, it is crucial that the number of proteins is similar between your biological replicates (reproducibility).
Table 1 reports the overall totals, Figure 1 the per-sample counts (the same numbers are tabulated in Table 8), and Figure 2 shows which proteins are shared across samples.
| NR.isotope | NR.protein_Id | NR.peptide_Id |
|---|---|---|
| light | 163 | 1258 |
Ideally, we identify each protein in all of the samples. However, because of the limit of detection (LOD) low-intensity proteins might not be observed in all samples. Ideally, the LOD should be the only source of missingness in biological replicates. Figure 3 and Figure 4 help us verify the reproducibility of the measurement at the level of missing data: missingness should be confined to low-intensity proteins and should not separate replicates of the same group.
Normalization removes systematic differences between samples, for example from differing sample amounts or loading. Figure 5 compares the protein intensity distributions before and after variance-stabilizing normalization (vsn); after normalization the sample distributions should be similar.
The coefficient of variation (CV) of a group of samples can be compared against other experiments [@piehowski2013sources]. For high-performance liquid chromatography experiments the median CV typically ranges from 2% to 35% depending on the sample, the chromatography, and label-free versus labelled quantification [@taverna2021critical]. On the raw scale we report the CV; after variance-stabilizing normalization we switch to the standard deviation (SD) on the transformed scale, as explained in the two sub-tabs below.
Before scaling and normalization, the protein intensities should have comparable variability across samples. We assess this with protein -level coefficient of variation (CV) densities (Figure 6); Table 2 summarizes the CV quantiles. Ideally the within-group CV is smaller than the CV across all samples.
| probs | e | a | b | c | d | All |
|---|---|---|---|---|---|---|
| 0.5 | 19.84 | 17.19 | 18.28 | 18.27 | 18.35 | 22.33 |
| 0.6 | 22.59 | 20.18 | 21.13 | 21.04 | 21.47 | 25.65 |
| 0.7 | 25.94 | 23.50 | 24.87 | 24.89 | 25.27 | 30.16 |
| 0.8 | 32.06 | 28.34 | 30.73 | 31.43 | 31.74 | 35.63 |
| 0.9 | 42.69 | 41.06 | 40.28 | 43.83 | 40.85 | 43.74 |
We applied the vsn::justvsn normalization, which removes systematic differences between samples and reduces within-group variance. The coefficient of variation is only interpretable on a ratio scale with a meaningful zero; after variance-stabilizing normalization the intensities are on an approximately \(\log_2\) scale where \(sd/mean\) is no longer meaningful, so we quantify variability directly as the standard deviation (SD) on the transformed scale. Because that scale is roughly \(\log_2\), this SD approximates the relative (fold-change) error on the original scale — exactly the input a fold-change-based power calculation requires. Figure 7 shows the distribution of protein SDs, Figure 8 their empirical cumulative distribution function (ECDF), and Table 3 summarizes the SD quantiles.
| probs | e | a | b | c | d | All |
|---|---|---|---|---|---|---|
| 0.5 | 0.197 | 0.195 | 0.194 | 0.191 | 0.198 | 0.270 |
| 0.6 | 0.242 | 0.237 | 0.238 | 0.236 | 0.240 | 0.331 |
| 0.7 | 0.301 | 0.293 | 0.298 | 0.285 | 0.296 | 0.407 |
| 0.8 | 0.380 | 0.372 | 0.386 | 0.364 | 0.372 | 0.526 |
| 0.9 | 0.563 | 0.554 | 0.563 | 0.581 | 0.544 | 0.713 |
We also inspect how similar the samples are to each other. Figure 9 shows pairwise sample correlations after transformation, Figure 10 gives an overview of all transformed protein intensities, and Figure 11 compares sample pairs in detail. Replicates of the same group should correlate highly, cluster together, and show tight agreement in the pairwise scatter plots.
Reproducible QC data show comparable intensity distributions across samples, high sample-to-sample correlations, replicates that cluster together in the overview heatmap, and missingness confined to low-intensity proteins near the limit of detection. Treat clear deviations from these expectations as points to discuss before proceeding, rather than as automated verdicts.
We take the protein standard deviation at the 50th and 75th percentile from Table 3 as the assumed within-group standard deviation and feed it into a two-sample t-test power calculation to estimate the sample sizes needed for the main experiment.
An important factor in estimating sample size is the smallest effect size you want to detect between two conditions, such as a reference and a treatment. Smaller biologically relevant effects require more samples. Typical \(log_2\) fold-change thresholds are \(0.59, 1, 2\), corresponding to fold changes of \(1.5, 2, 4\).
The power of a test is \(1-\beta\), where \(\beta\) is the probability of a Type 2 error (failing to reject the null hypothesis when the alternative hypothesis is true). In other words, if you have a \(20\%\) chance of failing to detect a real difference, then the power of your test is \(80\%\).
The confidence level is equal to \(1 - \alpha\), where \(\alpha\) is the probability of making a Type 1 error. That is, alpha represents the chance of falsely rejecting \(H_0\) and picking up a false-positive effect. Alpha is usually set at a \(5\%\) significance level, for a \(95\%\) confidence level.
Fold change: suppose you compare a treatment group to a placebo group and measure some continuous response which, you hypothesize, is affected by the treatment. Consider the mean response in the treatment group, \(\mu_1\), and in the placebo group, \(\mu_2\). Define \(\Delta = \mu_1 - \mu_2\) as the mean difference. The smaller the difference you want to detect, the larger the required sample size.
The sub-tabs below give, for each tested \(log_2\) fold-change (\(0.59, 1, 2\)), the number of samples needed per group at a significance level of \(5\%\) and power of \(80\%\), using the SD quantiles for \(50\%\) and \(75\%\) of the measured proteins — shown as a bar chart and a table.
| dilution. | probs | sdtrimmed | N |
|---|---|---|---|
| e | 0.50 | 0.197 | 4 |
| e | 0.75 | 0.330 | 7 |
| a | 0.50 | 0.195 | 4 |
| a | 0.75 | 0.328 | 6 |
| b | 0.50 | 0.194 | 4 |
| b | 0.75 | 0.333 | 7 |
| c | 0.50 | 0.191 | 3 |
| c | 0.75 | 0.318 | 6 |
| d | 0.50 | 0.198 | 4 |
| d | 0.75 | 0.327 | 6 |
| All | 0.50 | 0.270 | 5 |
| All | 0.75 | 0.462 | 11 |
| dilution. | probs | sdtrimmed | N |
|---|---|---|---|
| e | 0.50 | 0.197 | 3 |
| e | 0.75 | 0.330 | 4 |
| a | 0.50 | 0.195 | 3 |
| a | 0.75 | 0.328 | 4 |
| b | 0.50 | 0.194 | 3 |
| b | 0.75 | 0.333 | 4 |
| c | 0.50 | 0.191 | 3 |
| c | 0.75 | 0.318 | 3 |
| d | 0.50 | 0.198 | 3 |
| d | 0.75 | 0.327 | 4 |
| All | 0.50 | 0.270 | 3 |
| All | 0.75 | 0.462 | 5 |
| dilution. | probs | sdtrimmed | N |
|---|---|---|---|
| e | 0.50 | 0.197 | 2 |
| e | 0.75 | 0.330 | 2 |
| a | 0.50 | 0.195 | 2 |
| a | 0.75 | 0.328 | 2 |
| b | 0.50 | 0.194 | 2 |
| b | 0.75 | 0.333 | 2 |
| c | 0.50 | 0.191 | 2 |
| c | 0.75 | 0.318 | 2 |
| d | 0.50 | 0.198 | 2 |
| d | 0.75 | 0.327 | 2 |
| All | 0.50 | 0.270 | 2 |
| All | 0.75 | 0.462 | 3 |
| raw.file | sampleName | dilution. | run_Id |
|---|---|---|---|
| b03_10_150304_human_ecoli_a_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | a~10 | a | 10 |
| b03_11_150304_human_ecoli_a_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | a~11 | a | 11 |
| b03_20_150304_human_ecoli_a_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | a~20 | a | 20 |
| b03_21_150304_human_ecoli_a_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | a~21 | a | 21 |
| b03_02_150304_human_ecoli_b_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | b~02 | b | 02 |
| b03_09_150304_human_ecoli_b_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | b~09 | b | 09 |
| b03_12_150304_human_ecoli_b_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | b~12 | b | 12 |
| b03_19_150304_human_ecoli_b_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | b~19 | b | 19 |
| b03_03_150304_human_ecoli_c_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | c~03 | c | 03 |
| b03_08_150304_human_ecoli_c_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | c~08 | c | 08 |
| b03_13_150304_human_ecoli_c_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | c~13 | c | 13 |
| b03_18_150304_human_ecoli_c_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | c~18 | c | 18 |
| b03_04_150304_human_ecoli_d_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | d~04 | d | 04 |
| b03_07_150304_human_ecoli_d_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | d~07 | d | 07 |
| b03_14_150304_human_ecoli_d_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | d~14 | d | 14 |
| b03_17_150304_human_ecoli_d_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | d~17 | d | 17 |
| b03_05_150304_human_ecoli_e_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | e~05 | e | 05 |
| b03_06_150304_human_ecoli_e_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | e~06 | e | 06 |
| b03_15_150304_human_ecoli_e_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | e~15 | e | 15 |
| b03_16_150304_human_ecoli_e_3ul_3um_column_95_hcd_ot_2hrs_30b_9b | e~16 | e | 16 |
The per-sample counts plotted in Figure 1 are tabulated below.
| isotope | sampleName | protein_Id | peptide_Id |
|---|---|---|---|
| light | a~10 | 154 | 1021 |
| light | a~11 | 152 | 1006 |
| light | a~20 | 153 | 992 |
| light | a~21 | 155 | 982 |
| light | b~02 | 158 | 1047 |
| light | b~09 | 158 | 1029 |
| light | b~12 | 155 | 1043 |
| light | b~19 | 155 | 989 |
| light | c~03 | 160 | 1042 |
| light | c~08 | 157 | 1019 |
| light | c~13 | 155 | 1011 |
| light | c~18 | 159 | 1018 |
| light | d~04 | 159 | 1060 |
| light | d~07 | 160 | 1038 |
| light | d~14 | 160 | 1032 |
| light | d~17 | 160 | 1043 |
| light | e~05 | 158 | 1054 |
| light | e~06 | 161 | 1046 |
| light | e~15 | 158 | 1023 |
| light | e~16 | 157 | 1021 |
| Field | Value |
|---|---|
| Workunit ID | n/a |
| Order ID | n/a |
| Project ID | n/a |
| Project name | n/a |
| Creator | runner |
| Created at | 2026-07-29 11:13:24 UTC |
| Input data | n/a |
| Quantification software | n/a |
| Model | n/a |
| prolfquapp version | 2.6.1 |
R version 4.6.1 (2026-06-24)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 24.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
locale:
[1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
[4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
[7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
time zone: UTC
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_4.0.3 prolfqua_1.7.0 rlang_1.3.0
loaded via a namespace (and not attached):
[1] RColorBrewer_1.1-3 jsonlite_2.0.0
[3] shape_1.4.6.1 magrittr_2.0.5
[5] jomo_2.7-6 farver_2.1.2
[7] logistf_1.26.1 nloptr_2.2.1
[9] rmarkdown_2.31 GlobalOptions_0.1.4
[11] vctrs_0.7.3 minqa_1.2.8
[13] htmltools_0.5.9 S4Arrays_1.12.0
[15] forcats_1.0.1 broom_1.0.13
[17] cellranger_1.1.0 SparseArray_1.12.2
[19] mitml_0.4-5 KernSmooth_2.23-26
[21] htmlwidgets_1.6.4 plyr_1.8.9
[23] plotly_4.12.1 mime_0.13
[25] lifecycle_1.0.5 iterators_1.0.14
[27] pkgconfig_2.0.3 Matrix_1.7-5
[29] R6_2.6.1 fastmap_1.2.0
[31] shiny_1.14.0 rbibutils_2.4.1
[33] MatrixGenerics_1.24.0 clue_0.3-68
[35] digest_0.6.39 dtplyr_1.3.3
[37] colorspace_2.1-3 lobstr_1.2.1
[39] S4Vectors_0.50.1 crosstalk_1.2.2
[41] GenomicRanges_1.64.0 labeling_0.4.3
[43] httr_1.4.8 abind_1.4-8
[45] mgcv_1.9-4 compiler_4.6.1
[47] bit64_4.8.2 withr_3.0.3
[49] doParallel_1.0.17 pander_0.6.6
[51] S7_0.2.2 backports_1.5.1
[53] UpSetR_1.4.1 prolfquasaint_0.1.5
[55] pan_2.0 MASS_7.3-65
[57] DelayedArray_0.38.2 rjson_0.2.23
[59] optparse_1.8.2 tools_4.6.1
[61] otel_0.2.0 httpuv_1.6.17
[63] nnet_7.3-20 glue_1.8.1
[65] promises_1.5.0 nlme_3.1-169
[67] grid_4.6.1 cluster_2.1.8.2
[69] generics_0.1.4 operator.tools_1.6.3.1
[71] gtable_0.3.6 tzdb_0.5.0
[73] formula.tools_1.7.1 preprocessCore_1.74.0
[75] tidyr_1.3.2 data.table_1.18.4
[77] hms_1.1.4 XVector_0.52.0
[79] BiocGenerics_0.58.1 ggrepel_0.9.8
[81] foreach_1.5.2 pillar_1.11.1
[83] stringr_1.6.0 limma_3.68.4
[85] later_1.4.8 circlize_0.4.18
[87] splines_4.6.1 dplyr_1.2.1
[89] lattice_0.22-9 survival_3.8-6
[91] bit_4.6.0 tidyselect_1.2.1
[93] ComplexHeatmap_2.28.0 knitr_1.51
[95] reformulas_0.4.4 gridExtra_2.3.1
[97] prolfquapp_2.6.1 bookdown_0.47
[99] IRanges_2.46.0 Seqinfo_1.2.0
[101] SummarizedExperiment_1.42.0 stats4_4.6.1
[103] xfun_0.60 Biobase_2.72.0
[105] statmod_1.5.2 matrixStats_1.5.0
[107] stringi_1.8.7 yaml_2.3.12
[109] boot_1.3-32 evaluate_1.0.5
[111] codetools_0.2-20 tibble_3.3.1
[113] BiocManager_1.30.27 cli_3.6.6
[115] affyio_1.82.0 rpart_4.1.27
[117] xtable_1.8-8 arrow_25.0.0
[119] Rdpack_2.6.6 Rcpp_1.1.2
[121] readxl_1.5.0 png_0.1-9
[123] parallel_4.6.1 readr_2.2.0
[125] assertthat_0.2.1 lme4_2.0-6
[127] glmnet_5.0 viridisLite_0.4.3
[129] scales_1.4.0 affy_1.90.0
[131] writexl_1.5.4 purrr_1.2.2
[133] crayon_1.5.3 GetoptLong_1.1.1
[135] vsn_3.80.0 mice_3.19.0
This report was generated from the Quarto template QCandSSE_tabset.qmd included in the prolfquapp R package (version 2.6.1).