NEWS
OlinkAnalyze 5.0.0 (2026-03-28)
Major Changes
Complete rewrite of read_npx() (@klevdiamanti)
read_npx() (and its alias read_NPX()) has been fully rewritten with
improved architecture, splitting the monolithic reader into dedicated
sub-readers for each file format: Excel, delimited (CSV/TSV), Parquet, ZIP
archives, and wide-format qPCR exports
- New parameters have been added for greater control over data import:
out_df
(output format), long_format, olink_platform, data_type,
.ignore_files, quiet, and legacy.
- Automatic detection of file format, Olink platform, and data type.
- A new exported function
check_npx() validates NPX data for correctness and
completeness before downstream analysis.
- Checks include: column name standardization, OlinkID validity, assays with
all-NA values, duplicate sample identifiers, column data types, assay QC
warnings, UniProt mapping consistency, and DarID validity.
- Returns a structured list with detailed diagnostics that can be used as input
to
clean_npx().
- The list check log output from
check_npx() is now used in all the functions
in downstream analysis to allow for alternative column names and provide
consistent and informative warnings and errors when data issues are detected.
- A new exported function
clean_npx() applies an automated quality-control
cleaning pipeline to remove unsuitable data records.
- Cleaning steps include: removing assays with invalid OlinkIDs, removing
assays with all-NA quantification values, removing duplicate samples,
removing external control samples, removing QC-failing samples, removing
internal control assays, removing assays with QC warnings, correcting
column data types, and resolving non-unique UniProt mappings.
- Each cleaning step can be individually toggled on or off.
Vignettes moved to OlinkAnalyzeVignettes (@klevdiamanti & @dtopouza)
- All vignettes except from the main guide-Vignette (LOD, outlier exclusion,
bridging introduction, cross-product bridging, and plate randomizer) have been
moved to the sibling package OlinkAnalyzeVignettes that will be online soon,
to reduce package size and installation time.
- Some functions, such as
read_NPX(), have been renamed to their equivalent
snake case read_npx() to be more intuitive and consistent with R naming
conventions. Previous function names are retained as aliases for backward
compatibility.
arrow, duckdb, and dbplyr are now imported for enhanced Parquet file
support and efficient data processing.
cli is now used for most user-facing messages, warnings, and error reporting
- The
magrittr pipe (%>%) has been replaced by the native R pipe (|>).
throughout the package; magrittr is no longer a dependency.
- A new
olink_osi_dist_plot() function has been added for visualizing Olink
Sample Index (OSI) values distributions.
- The functions
olink_qc_plot(), olink_pca_plot() and olink_umap_plot()
now have full support for OSI values.
- Internal input validation has been improved with a suite of type-checking
helper functions.
- Test infrastructure has been expanded with parallel test execution enabled
via
testthat edition 3, and test coverage extended to >90%.
- Several dependencies have been moved from Imports to Suggests (
broom,
car, emmeans, ggpubr, ggrepel, readxl, rstatix, FSA)
to reduce the package's installation footprint
OlinkAnalyze 4.5.0 (2026-01-28)
Minor Changes
- Added section to LOD vignette about how to handle LOD in bridged data (#656, @KangD-dev)
- Support for NPX files from NPX Map 2.0 was added to read_NPX (#660, @kathy-nevola)
- Continuous color scale was added to PCA for graphing Olink Sample Index (OSI) continuous columns (#659, @amrita-kar)
- Function for formatting bridged data was updated to work with other types of normalization (#643, @dtopouza, #644, @klevdiamanti)
Bug Fixes
- olink_ordinalRegression changed from type = 3 to type = "marginal" to work with newest version of ordinal package (#657, @kathy-nevola)
- Regex fixed for DarID detection in olink_lod and read_NPX (#658, @kathy-nevola)
OlinkAnalyze 4.4.0 (2025-12-02)
Minor Changes
Bug Fixes
- Fix wording of bridgeable assays in cross-product bridging tutorial (#632, #630, @kathy-nevola)
- Fixed warning message in case of duplicate samples so that samples with control assays did not count as duplicated samples (#634, @amrita-kar)
- QS Normalization will now exclude bridge samples with NA with warning, preventing error (#640, @klev-diamanti)
OlinkAnalyze 4.3.2 (2025-09-24)
Bug Fixes
- Tests for
olink_wilcox() are now arranged by Assay name to handle ties (#616, @boxizhang)
- The
extrafont package has been removed as a dependency as it is archived on CRAN (#619, @klevdiamanti)
- Regex in
olink_lmer() has been improved to better capture the warning message (#618, @klevdiamanti)
- Handling for when
AssayQC is not present in both data sets for normalization (#620, @klevdiamanti)
OlinkAnalyze 4.3.1 (2025-07-31)
Bug Fixes
olink_lod() call to checkNPX() now correctly uses data instead of df, allowing the function to run without error (#579, @klevdiamanti)
- broken link in bridging tutorial has been fixed (#597, @amrita-kar)
- minor edits have been made to the bridging tutorial and
olink_bridgeselector() to clarify how to set sampleMissingFreq argument for different products and biological contexts (#597, @amrita-kar, #596, @kathy-nevola)
- minor edits have been made to the bridging tutorial to clarify that Ct and count data is not normalized during bridging and to define a batch (#597, @amrita-kar)
OlinkAnalyze 4.3.0 (2025-06-24)
Minor Changes
- Recommended Olink Reveal bridge sample numbers have been added to the bridging tutorial (#523, @kathy-nevola)
- Missing meta-data in parquet files now result in a warning instead of an error (#540, @OlaCaster)
- Pathway enrichment updated to support msigdbr v10.0 (#542, @klevdiamanti)
- Support for PanelVersion and LODNPX was added (#551, #552, #559, @klevdiamanti, @MasoumehSheikhi)
- Support for new version of warning message when converting LME results to tidy format has been added (#565, @kathy-nevola)
- Improvements made to user interface for olink_bridgeability_plot() (#525, #522, @klevdiamanti)
Bug Fixes
- Fixed bug causing missing significance stars in olink_boxplot (#536, @boxizhang)
- Files with multiple quantification files will now select the quantification method to use (#563, @kristynchin-olink, @amrita-kar)
- OlinkIDs with multiple UniProt IDs across different panel versions will now be harmonized to one UniProt ID to allow for assays to be analyzed together (#564, @kathy-nevola)
OlinkAnalyze 4.2.0 (2025-02-24)
Minor Changes
- Cross-product bridging is now supported for bridging Olink Explore 3072 to Olink Reveal (#509, @kathy-nevola)
- Standard data exports from NPX Signature 2.0 are now supported (#511, @KangD-dev)
- Kang Dong and Stephen Pollo have been added as authors (#514, @kathy-nevola)
- MaxLOD will be recalculated after bridging to reflect the MaxLOD across all projects (#505, @klevdiamanti)
Bug Fixes
- A warning message will be displayed when fewer than the recommended number of bridging samples are used in cross product bridging (#507, @klevdiamanti)
- If count data is not provided in cross-product bridging, an error message will occur (#510, @kristynchin-olink)
- For cross-product bridging, if the sample type and assay warning columns do not have the same column naming (ex: SampleType and Sample_Type), both columns will be included in the output. (#515, @spollo-olprot, @MasoumehSheikh)
OlinkAnalyze 4.1.1
Minor Changes
- Images were decreased in dimension to meet CRAN Size requirements (#500, @kathy-nevola)
Bug Fixes
- Dataframe name was corrected in Olink Explore 3072 to Olink Explore HT bridging tutorial Downstream Analysis section. (#500, @kathy-nevola)
OlinkAnalyze 4.1.0
Minor Changes
- Functionality has been added to read_NPX, olink_lod, and olink_plate_randomizer to support additional data types (#487, @kathy-nevola)
- A new function has been added to visualize the criteria used to establish the recommended bridging method for an assay in cross-product bridging (#468, @amrita-kar)
- A new function has been added to simplify data wrangling on bridged data after cross-product bridging (#472, @dtopouza)
- The tutorial on Olink Explore 3072 to Explore HT bridging has been updated to reflect the new functions (#473, @kristynchin-olink)
- Documentation for plate randomization when keeping samples from the same studies together has been improved in function documentation and the Plate Randomization tutorial (#483, @kathy-nevola)
- Contact us and legal disclaimer information has been updated and added to all tutorials (#490, @kathy-nevola)
- A Research Use Only (RUO) message is now printed when reading parquet files (#487, @kathy-nevola)
- References to NPX Explore have been generalized to Olink Software in tutorials (#490, @kathy-nevola)
- The overview tutorial has been updated and streamlined (#473, @kristynchin-olink)
Bug Fixes
- Assay CTRL is no longer characterized as a control assay (#484, @dtopouza)
- An error that had previously limited Explore HT to Explore HT bridging has been resolved (#491, @klevdiamanti)
- The minimum number of bridge samples for QS normalization has been corrected to 40 samples.
- The Block column is now transformed into a character value to ensure consistency across products.
- An error that had previously impacted paired Wilcoxon tests has been resolved. (#485, @boxizhang)
OlinkAnalyze 4.0.2 (2024-11-22)
Bug Fixes
- Product is now identified by column name for cross-product normalization, rather than OlinkIDs. This allows for non-overlapping assays to be present in input files. (#469, @kathy-nevola)
- Added many-to-many mapping in joining Explore HT data to the mapping file to support correlation assays (#469, @kathy-nevola)
- Corrected spelling in error message. (#469, @kathy-nevola)
- Fixed typo in NotBridgeable category name in tutorial (#471, @dtopouza)
OlinkAnalyze 4.0.1 (2024-09-24)
Minor Changes
- larger rds files used for unit tests have been excluded from build to abide by CRAN size limitations (#462, @kathy-nevola)
OlinkAnalyze 4.0.0
Major Changes
- olink_normalization can now be used for bridging Explore 3072 data to Explore HT data (#453, #452, #439, #449, #447,#446, #441, #440, #434, #422, #436, #435 @klevdiamanti, @kathy-nevola, @kristynchin-olink, @dtopouza, @amrita-kar, @MasoumehSheikh)
- olink_normalization has undergone major changes to improve speed, reproducibility, and extending functionality (#418, @klevdiamanti, @kristynchin-olink, @MasoumehSheikh)
Minor Changes
- New tutorial has been added to explain and support Explore 3072 to Explore HT bridging (#448, #428, #427, #426, #425, #424, #423, @kristynchin-olink, @boxizhang, @dtopouza, @kathy-nevola, @MasoumehSheikh)
- Update FAQ links in tutorials with queries links (#451, @kathy-nevola)
- Decrease package size on Mac and Linux (#445, @kathy-nevola)
- Removed redundant information from overview vignette (#458, @kathy-nevola)
Bug Fixes
OlinkAnalyze 3.9.1
Bug Fix
OlinkAnalyze 3.9.0
Minor Changes
- Explore HT recommended bridging samples have been added to Introduction to Bridging tutorial (#409, @kathy-nevola)
- Support for CSVs with SampleQC column was added to read_NPX (#406, @kathy-nevola)
- Support for Olink Analyze Export parquets was added to read_NPX (#408, @kathy-nevola)
- Quantitative value csvs will now give a warning about limited support for Quant data (#406, @kathy-nevola)
- Instructions for importing multiple NPX files has been added to the overview tutorial (#403, @dtopouza)
- Additional background information was added to the LOD tutorial to clarify how LOD is calculated from counts (#404, @kathy-nevola)
- LOD can now be calculated using fixed LOD, negative controls, or both methods (#390, @kathy-nevola)
- An error message will now appear when running anova and control assays are present (#416, @dtopouza)
- Danai Topouza's role has been changed from contributor to author (#415, @kathy-nevola)
Bug Fixes
OlinkAnalyze 3.8.2 (2024-06-27)
Bug Fixes
- update to URL hyperlink in LOD tutorial to include https
- data with Plate_LQL and PlateLQL columns in long format will now be supported (#392, @klevdiamanti)
OlinkAnalyze 3.8.1
Bug Fixes
- update to outdated URL in LOD tutorial
Minor Changes
Bug Fixes
- Removed outdated reference to NPX Manager (#354, @dtopouza)
- Removed mention of Welch's t-test in Mann Whitney documentation (#354, @dtopouza)
- Assays that include apostrophes will now be read in correctly from long format csvs (#381, @kathy-nevola)
OlinkAnalyze 3.7.0 (2024-02-22)
Minor Changes
OlinkAnalyze 3.6.2 (2024-01-13)
Bug Fixes
- Packages in Suggest field are now called conditionally in vignettes, tests, and examples. (#319, @kathy-nevola)
- read_NPX will now work with Target 96 data that does not contain "Target 96" in the panel name (#320, @kathy-nevola)
- olink_lmer will no longer require the presence of an Index column in the data (#321, @kathy-nevola)
- corrected examples for subset normalization (#312 @kathy-nevola)
- added additional information on example data to outlier vignette (#313 @kathy-nevola)
- clarified documentation for longitudinal randomization (#314 @kathy-nevola)
- corrected warning message for olink_ordinalRegression (#296 @boxizhang)
OlinkAnalyze 3.6.1
Minor Changes
OlinkAnalyze 3.6.0 (2023-11-03)
Minor Changes
Bug Fixes
- olink_normalization and related function will now compare normalization strategy by assay (#291, klevdiamanti)
- Excluded assays will not cause warnings in olink_normalization (#291, klevdiamanti)
- olink_pca_plot will now show the same label and text for point when SampleID is numeric (#289, @MasoumehSheikh)
OlinkAnalyze 3.5.1 (2023-08-08)
Bug Fixes
- read_NPX will now support additional formats of parquet files
OlinkAnalyze 3.5.0
Minor Changes
- read_NPX will now detect and import Flex excel files in wide format (@kathy-nevola, #234)
- Add example of bridge samples selector and minor updates for clarity to Intro to bridging vignette (@Orbmac, @kathy-nevola, #260)
- Increase plate randomizer unit test coverage (@amrita-kar, #264)
- Add support for parquet files in read_NPX (@kathy-nevola, #265, @klevdiamanti, #270)
- Add support for alternative forms of LOD including Max and Plate LOD (@kathy-nevola, #267)
- Add support for SampleQC column (alternative to QC_Warning) (@kathy-nevola, #267, @MasoumehSheikhi, @268)
- Add support for plate randomization with variable control numbers (@kathy-nevola, @AskPascal, #269)
- Controls can now be randomized across the plate with olink_plate_randomizer (@kathy-nevola, @AskPascal, #269)
- Minor updates for clarity to Plate Randomization vignette (@kathy-nevola, @AskPascal, #269)
- Change formatting for long format Target CSVs to match excel (@kathy-nevola, #273)
Bug Fixes
- Project name is now consistent and generic throughout bridging vignette (@kathy-nevola, #257)
- Estimate is now included in output when Paired Mann-Whitney U test is performed (@boxizhang, #259)
OlinkAnalyze 3.4.1 (2023-05-08)
Bug Fixes
- Skip PCA snapshot tests in R version > 4.2.3 (@AskPascal, #254)
- Bridge selector will now return all samples when requesting max number of samples based on missing frequency (@klevdiamanti, #252)
- Fixed unit tests to expect NA as logical instead of "NA" as character (@MasoumehSheikhi, #250)
OlinkAnalyze 3.4.0 (2023-04-26)
Minor Changes
- User can now specify label for proteins in olink_heatmap_plot() (@simfor, #228)
- Updates to unit test and CI based on dependency changes (@AskPascal, #231, #236, #240)
- Addition of normalization functions to simplify bridge, subset, and multi-batch normalization (@klevdiamanti, #201)
- Introduction to bridging vignette added (@leiliuC, @kathy-nevola, #174)
- Plate Randomization vignette added (@boxizhang, #241)
- Outlier Exclusion vignette added (@kathy-nevola, #229)
- Added Lei Conze as author (@kathy-nevola, #246)
- Addition of citation (@kathy-nevola, #246)
Bug Fixes
- Update to olink_wilcox documentation and UniProt description in documentation has been corrected (@boxizhang, #235)
OlinkAnalyze 3.3.1 (2023-02-27)
Bug Fixes
- olink_pathway_enrichment now prints a message when there are non matching names when using method = "ORA" (@MasoumehSheikhi, #222)
- olink_pca_plot will now generate PCA when data is missing from the first OlinkID (@kathy-nevola, #221)
- read_NPX now supports csv files with Sample_Type column but not ExploreVersion column (@klevdiamanti, #220)
- extra columns in input file will no longer result in a warning message (@kathy-nevola, #223)
OlinkAnalyze 3.3.0 (2023-01-24)
Minor Changes
- Support for additional versions of Olink data - Read_NPX now supports a wider range of Olink data types (@AskPascal, @kathy-nevola, #207, #208, #211, #216)
- Automatic support for normalizing 2 datasets with different column configurations - olink_normalization will now automatically add missing columns to datasets (filled NA) to allow data with different configurations to be more easily normalized together (@kathy-nevola, #212)
- Automatic checking that datasets used the same normalization method before bridging - Datasets that were normalized with different methods (different values in normalization column) will now warn before performing normalization (@klevdiamanti, #210)
Bug Fixes
- Data with '#' in SampleID column is now supported (@AskPascal, #208)
- PCA can now be generated when indices are not consistent across SampleIDs (@amrita-kar, #206)
OlinkAnalyze 3.2.2 (2022-11-15)
Bug Fixes
- remove www. from links in vignette to prevent rerouting of URL (@kathy-nevola, #188)
- update set_plot_theme() to use linewidth instead of size per ggplot2 3.4
OlinkAnalyze 3.2.1
Bug Fixes
- Change in unit test to write to temporary directory (@AskPascal, #181)
OlinkAnalyze 3.2.0 (2022-11-01)
Minor Changes
- Addition of functions to perform Uniform Manifold Approximation and Projection (UMAP) dimensional reduction and plots (@simfor, #139)
- Add additional install methods to Readme (@AskPascal, #153)
- ggrepel can now be disabled when outlier lines are present in the PCA plot (@klevdiamanti, #158)
- Long running unit tests are now skipped on CRAN (@AskPascal, #163)
- Internal functions were added to read_NPX to support future development (@klevdiamanti, #167)
- CI workflows were refactored to utilize external actions (@AskPascal, #169)
- Read_NPX will now warn the user when NAs are detected in the NPX column (@AskPascal, #170)
- Friedman test interface and documentation was updated to be more intuitive (@boxizhang, #171)
Bug fixes
OlinkAnalyze 3.1.0 (2022-06-10)
Minor Changes
- Non-parametric functions are now available (@boxizhang, #114, #142)
- Updated installation instructions to reflect CRAN acceptance (@kathy-nevola, #107)
- Zipped files from MyData can now be used as input for read_NPX (@klevdiamanti, #115)
- LME and ANOVA formulas can now be customized (@jrguess, #120)
- Pathway enrichment functions and visualizations are now available (@kathy-nevola, #125)
- Heatmaps can now be generated (@Orbmac, $127)
- olink_boxplot function now has significance bars and stars (@boxizhang, #132)
- PCA preprocessing was moved to internal function (@simfor, #133)
- olink_plate_randomizer will now return a warning if there are duplicate SampleIDs or if SubjectColumn is missing (@kristianHoden, #146)
- olink_plate_randomizer can now keep studies together on plates (@kristianHoden, #146)
- Added Masoumeh Sheikhi and Boxi Zhang as authors
- Added Kristian Hodén as contributor
Bug Fixes
- olink_pca_plot by Panel will now show correct colors when a variable is missing (@MasoumehSheikhi, Issue #117, Commit 0f2f157)
- olink_ttest will now return a warning message if an assay has less than 2 datapoints in a group. (@marisand, #110)
- LMER class is now checked using inherits (@MasoumehSheikhi, #134)
- License was corrected to AGPL-3 (@Orbmac, #138)
- Correct output type of olink_dist_plot in vignette to ggplot object (@kathy-nevola, Issue #112, #141)
- Previously called "intensity normalization" has been clarified as a special type of subset normalization and an example has been added to the documentation and vignette (@Orbmac, #144)
OlinkAnalyze 3.0.0 (2022-02-10)
Major Changes
- displayPlateDistributions and displayPlateLayout names were updated to olink_displayPlateDistributions and olink_displayPlateLayout (@simfor, #98)
Minor Changes
- Update CI to Ubuntu 20.04 (@AskPascal, #97)
- olink_bridgeselector will now give an error if less than n (number of) bridge samples can be selected based on set sampleMissingFreq (@marisand, #100)
- update return value documentation for all functions to specify columns and class of output (@kathy-nevola, #102)
- replaced or removed cat/print with message/stop so messages printed to the console can be suppressed (@jrguess, #103)
Bugfixes
- fixed spelling mistakes in documentation (@kathy-nevola, #92)
- updated DESCRIPTION to fit CRAN specification (@kathy-nevola, #94)
- change T/F to TRUE/FALSE for stability (@AskPascal, #96)
- updated documentation to olink_plate_randomizer, olink_displayPlateDistributions and olink_displayPlateLayout to link related functions and clarify olink_plate_randomizer documentation (@simfor, #98)
- fixed keywords in documentation (@kathy-nevola, #99)
OlinkAnalyze 2.0.1
Bug Fixes
OlinkAnalyze 2.0.0
Major Changes
- Package is in the process of being submitted to CRAN
- Added ability to prevent OlinkAnalyze from loading fonts and setting to themes (@OlaCaster, #73)
- Decreased the size of npx_data1 and npx_data2 to 2 panels instead of 12 (@kathy-nevola, #76)
- Updates to the olink_qc_plot and olink_pca_plot functions (@simfor, #78)
BugFixes
OlinkAnalyze 1.3.0
Major Changes
- DESCRIPTION file updated to include all authors and maintainers (@kathy-nevola, #66)
- Unit testing was added (@marisand, @simfor, #65, #55, #47)
- Continuous Integration (CI) was added (@AskPascal, #57, #53, #40, #31)
read_NPX now converts Panel Names to Sentence case except Roman Numerals (@kathy-nevola, #44)
- Output order of
olink_bridgeselector() is now randomized (@marisand, #60)
- PlateSize argument was added to
displayPlateLayout() and olink_plate_randomizer for T48 and T96. Hardcoded sizes have been removed. (@marisand, #47)
- Changed
olink_pal() to have gray instead of light blue (@marisand, #22)
Bug Fixes
set_plot_theme() will now load Swedish Gothic Thin if available on all OS (@marisand, @AskPascal, #70, #39)
- Help documentation was updated to correct typos and clarify notation for ANOVA and LME models (@kathy-nevola, @marisand,@AskPascal #67, #33, #37)
- Fix
olink_dist_plot() from showing multiple bars when sample has QC warning in some assays (@marisand, @AskPascal, #64)
- Fix
olink_qc_plot() from showing multiple points/labels when sample has QC warning in some assays (@marisand, @AskPascal, #63)
- Panel names in npx_data1 and npx_data2 were fixed to match new
read_NPX() formatting (@kathy-nevola, #62)
olink_bridgeselector() QC warning filtering changed to match olink_qc_plot() and olink_dist_plot() (@marisand, @AskPascal, #61)
- global variables are now specified (@kathy-nevola, #45)
- Function documentation updated to remove notes on R CMD check (@kathy-nevola, #39)
- Fix summary casting "tukey" to "sidak" adjustment warning in
olink_anova_posthoc() and olink_lmer_posthoc() functions (@marisand, #38)
- Update functions to import selectively (@kathy-nevola, @Orbmac, @AskPascal, @marisand, #21, #20, #19, #18, #15, #29)
- Fix guides size argument in
olink_pca_plot() (#17) (@AskPascal, #24)