Changes in version 1.2.0 (2025-10-28) o New function readFragPipe() to read FragPipe output. o New function readMaxQuant() to read MaxQuant output. o readDIANN() now allows user-specified input column names and "parquet" is now the default format. o Bug fixes to readSpectronaut() when `sep` is other than a tab or when there is only one peptide annotation column. o Revisions to all the read functions. readDIANN(), readFragPipe(), readMaxQuant(), and readSpectronaut() all use `fread()` with `data.table=FALSE` now to read ascii delimited files. o New argument `logit.p` for dztbinom(), which allows the function to avoid subtractive cancellation for success probabilities close to 1. dpc() now uses the new argument when calling dztbinom(). o New function dpcON() to estimate the DPC assuming the oberved-normal model. Should give same output as dpc() but is somewhat faster. dpcON() calls a new function, pztbinomSameSizeLogitPBothTails(), which computes left and right tail p-values for zero-truncated binomial quantiles. o Revisions to dpcCN() to improve convergence. To improve speed, the function now randomly selects a subset of rows of data to process, with the number of rows given by the new argument `subset`. The default number of outer iterations is decreased to 2. o dpcImpute() now sets row.names. Sections on dpcImpute() and imputeByExpTilt() have been added to the package vignette. o dpcQuant() now calls dpcImpute() automatically when all proteins have just one peptide. o New function plotPeptides() to plot the peptide-level log-intensities for one protein. o Fix simProteinDataSet() processing of `prop.missing` argument. o Cite the limpa bioRxiv preprint (Li et al, bioRxiv 2025) in the vignette and help pages. o Expand Quantification section in the vignette to give more math details. Changes in version 1.0.0 (2025-04-16) o dpcQuant() and peptides2Proteins() now return essentially equal values if there are multiple entirely imputed values for the same protein. o Update readSpectronaut() to allow more flexibility regarding which columns are read. o Remove reference to DIA in vignette, because limpa works for both DIA and DDA. o New function plotMDSUsingSEs(), which accounts for standard errors when computing between-sample distances for the plot. o New argument `chunk` for dpcQuant() and dpcImpute(). o dpcImpute() now passes the `verbose` argument to peptides2Proteins(). o Add more background information to the vignette, including references for DIA-NN, Spectronaut and MaxQuant. Add mention of voomaLmFitWithImputation(). o Bug fix to starting values in peptides2Proteins() for single-peptide proteins. o expTiltByColumns() is now more robust for datasets with very few rows, especially when the column variance is exactly zero by chance. It originally assumed that the number of rows would always be large. This also improves the robustness of imputeByExpTilt(). o peptides2Proteins() now runs imputeByExpTilt() on the whole dataset in order to get starting values for each protein. This improves speed slightly and makes the starting values more robust for large datasets with many NAs. o readDIANN() now supports DIA-NN output in either tsv or Parquet formats. o New functions dpcImpute() and dpcImputeHyperparam() to facilitate imputation and differential expression analysis at the peptide level. This may be needed for phosphoproteomics and analogous applications. o Package title changed to "Quantification and Differential Analysis of Proteomics Data", and package description expanded. o New function plotProtein(), to plot the quantifications for a given protein with error bars. o Cleanup annotation output from dpcQuant() to remove peptide-level annotation columns o dpc() now outputs `n.detected` for each peptide. o dpc() now checks for peptides that are entirely missing. o plotDPC() now accepts input from either dpc() or dpcCN(). It now estimates the jittering amount automatically. o Add readDIANN() code to vignette. o Add peptide filtering to vignette. o New function voomaLmFitWithImputation(), which is the same as limma::voomaLmFit() except that it allows for loss of degrees of freedom when all the values for a particular protein in a particular group are imputed. dpcDE() now calls this new function instead of limma::voomaLmFit(), making the differential expression analysis more robust to high rates of missing values. o Fix dpcQuant() `genes` output when the input `y` is a plain matrix instead of an `EList` object. o New argument `dpc.slope` for dpcQuant(), to allow the use of a preset DPC slope. o estimateDPCIntercept() now allows `dpc.slope=0`, corresponding to the case that missing values are uninformative. Changes in version 0.99.0 (2025-01-03) o Initial public release of the limpa package ("Linear Models for Proteomics Data") at with the following exported functions: completeMomentsON, dpc, dpcCN, dpcDE, dpcQuant, dpcQuant.default, dpcQuant.EList, dpcQuantHyperparam, dztbinom, estimateDPCIntercept, expTiltByColumns, expTiltByRows, filterCompoundProteins, filterCompoundProteins.default, filterCompoundProteins.EList, filterCompoundProteins.EListRaw, filterNonProteotypicPeptides, filterNonProteotypicPeptides.default, filterNonProteotypicPeptides.EList, filterNonProteotypicPeptides.EListRaw, filterSingletonPeptides, filterSingletonPeptides.default, filterSingletonPeptides.EList, filterSingletonPeptides.EListRaw, fitZTLogit, imputeByExpTilt, imputeByExpTilt.default, imputeByExpTilt.EList, imputeByExpTilt.EListRaw, observedMomentsCN, peptides2ProteinBFGS, peptides2ProteinNewton, peptides2Proteins, peptides2ProteinWithoutNAs, plotDPC, proteinResVarFromCompletePeptideData, pztbinom, readDIANN, readSpectronaut, removeNARows, removeNARows.default, removeNARows.EList, simCompleteDataCN, simCompleteDataON, simProteinDataSet.