Changes in version 2.0.5 - May 31, 2023 - fix convergence issues - fix initialization of lmer() fit - use 1 OMP thread internally, then restore to original value Changes in version 2.0.4 - May 30, 2023 - When running dream(), ensure model convergence using second fitting with Nelder_Mead to avoid edge cases where the approximate hessian from lmerTest::as_lmerModLT() has a negative eigenvalue - fix issue in get_prediction() returning NA values when variables modeled as categorical and levels are omitted - fix issue in voomWithDreamWeights() when some genes don't converge - retry lmer() model fit with another optimizer after it fails convergence test. Changes in version 2.0.3 - May 13, 2023 - fix vcov() Changes in version 2.0.2 - May 17, 2023 - add matrix argument to mvTest() Changes in version 2.0.1 - May 12, 2023 - mvTest() now shrinks covariance using the Schafer-Strimmer method - vcovSqrt() returns the matrix whose cross product gives the vcov() result from fits with dream() Changes in version 2.0.0 - April 20, 2023 - Major code refactoring to: - improve code reuse - simplify debugging and maintaining code - simplify addition of new features - improve error handling - some linear mixed model analyses are 50% faster - enable additional features for dreamlet package that depends heavily on variancePartition. Changes in version 1.36.2 - Nov 7, 2024 - doc fix - Nov 7, 2024 - fix docs Changes in version 1.36.1 - Nov 5, 2024 - Upgrade to Bioc 3.20 - update generic for eBayes() to be comptabile with legacy parameter added in limma v3.62.0 Changes in version 1.35.5 - June 17, 2024 - fix bug in mvTest() for se value with 1 feature Changes in version 1.35.4 - June 13, 2024 - fix bug in [.MArrayLM2 dropping residuals to a vector Changes in version 1.35.3 - June 11, 2024 - in mvTest() with shrink.cov = TRUE uses lambda = 0.01 Changes in version 1.35.2 - June 6, 2024 - in mvTest() return beta and se Changes in version 1.35.1 - May 31, 2024 - version bump for BioC Changes in version 1.33.15 - May 16, 2024 - in voomWithDreamWeights(), default changed to rescaleWeightsAfter = FALSE Changes in version 1.33.14 - April 19, 2024 - in topTable() resolve issue when specifying multiple coeffs Changes in version 1.33.13 - April 6, 2024 - in voomWithDreamWeights(), add argument prior.count.for.weights Changes in version 1.33.12 - March 22, 2024 - Fix use with voomWithDreamWeights() taking raw counts - https://github.com/GabrielHoffman/variancePartition/issues/97 - in voomWithDreamWeights(), add argument priorWeightsAsCounts=FALSE and prior.count.for.weights Changes in version 1.33.11 - Feb 7, 2024 - fix bug in dream(...,ddf="Kenward-Roger") that gave false positives and negatives - scaled weights properly to fix this issue, since df in lmerTest::contest() assumes mean of weights is 1. - old code used unscaled weights, so df values were too large Changes in version 1.33.10 - Feb 5, 2024 - in augmentPriorCount() and voomWithDreamWeights(), add argument scaledByLib=FALSE Changes in version 1.33.9 - Jan 25, 2024 - bug fix in BIC() and .fitExtractVarPartModel() Changes in version 1.33.8 - Jan 22, 2024 - add BIC() for result of dream() and lmFit() Changes in version 1.33.7 - Jan 19, 2024 - add logLik() for result of dream() and lmFit() Changes in version 1.33.6 - fix issue with subsetting using logicals Changes in version 1.33.5 - Dec 21, 2023 - fix issue with ddf always calling "Satterthwaite" - enforce subsetting of residuals in assign( "[.MArrayLM2",) - this comes with when rdf < 1 Changes in version 1.33.4 - Dec 13, 2023 - fix bug with BiocParallel in Windows - https://github.com/GabrielHoffman/variancePartition/issues/91 - handle case where a single contrasts fails in makeContrastsDream() Changes in version 1.33.3 - Dec 5, 2023 - in residuals() when dividing by sqrt(1-hatvalues) add small offset to make sure the value is positive Changes in version 1.33.2 - Nov 13, 2023 - add augmentPriorCount() - add prior.count argument to voomWithDreamWeights() and feed it to augmentPriorCount() Changes in version 1.33.1 - Nov 2, 2023 - move omp_set_num_threads() deeper in nesting Changes in version 1.31.22 - Oct 19, 2023 - fix handling of variables with missing data - return fit$genes properly Changes in version 1.31.21 - Oct 16, 2023 - handle weights properly when the linear mixed model fails for some genes - lmFit() and - in iterRows() set scale = FALSE as default - in voomWithDreamWeights(), scale in input weights and weights in side fitVarPartModel() - get weights estimated most similar to voomLmFit() - in dream() use rescaleWeights = FALSE to get sigma estimates compatable with lmFit() Changes in version 1.31.20 - Sept 26, 2023 - allow weights to be a matrix in voomWithDreamWeights() Changes in version 1.31.19 - Sept 22, 2023 - add rescaleWeightsAfter argument to voomWithDreamWeights() Changes in version 1.31.18 - Sept 5, 2023 - improved error handling for fitVarPartModel(), fitExtractVarPartModel(), and voomWithDreamWeights() Changes in version 1.31.16 - August 18, 2023 - in dream(), if "Kenward-Roger" is specified but gives covariance matrix that has poor condition number or is not positive definite, then fall back to "Satterthwaite" for hypothesis testing in linear mixed models - Update documentation, and reformat code Changes in version 1.31.15 - August 10, 2023 - fit = dream() now returns fit$loglik (the log-likelihood for each gene), and fit$edf (the effective degreees of freedom for each gene) Changes in version 1.31.13 - August 7, 2023 - fix bug in calcVarPart() where weights was ignored in some cases - add additional tests to check this Changes in version 1.31.12 - July 3, 2023 - makeContrastsDream() converts NA contrasts to NULL Changes in version 1.31.11 - setting voomWithDreamWeights(..., span="auto") now estimates tuning parameter from data using fANCOVA::loess.as() Changes in version 1.31.10 - filterInputData() now ensures EList contains a matrix Changes in version 1.31.9 - Fix issue in mvTest() when specifying features with strings Changes in version 1.31.8 - Fix error message when linear mixed model fails Changes in version 1.31.7 - update mvTest() to run in parallel Changes in version 1.31.6 - update mvTest() to include Hotelling T2 test and LS.empirical() Changes in version 1.31.1 - June 4, 2023 - Rename for Bioconductor compatability Changes in version 1.29.2 - Rescale weights Changes in version 1.28.9 - March 14, 2023 - fix rounding error in makeContrastsDream() - add Pearson residuals to residuals() Changes in version 1.28.8 - March 8, 2023 - add mvTest() with features as list Changes in version 1.28.7 - March 7, 2023 - Fix bug in makeContrastsDream() by adding droplevels() Changes in version 1.28.6 - March 1, 2023 - diffVar() now fits contrasts estimated in first step Changes in version 1.28.5 - Feb 24, 2023 - Fix error in vcov() when samples are dropped due to covariate having NA value Changes in version 1.28.4 - Feb 2, 2023 - Improve documentation for contrasts Changes in version 1.28.3 - Jan 19, 2023 - Improve checking and documentation for contrasts Changes in version 1.28.2 - Jan 13, 2023 - canCorPairs() now allows random effects in formula - but won't change results Changes in version 1.28.1 - Jan 04, 2023 - bug fixes Changes in version 1.27.17 - in mvTest(), more consistent return values when one features is used Changes in version 1.27.16 - bug fix Changes in version 1.27.15 - fix approximation for vcov() - add checks for vcov() in test_vcov2() Changes in version 1.27.14 - fix bug in topTable() - add deviance() - update docs - update sqrtMatrix() to have positive diagonal Changes in version 1.27.13 - add diffVar() test of differential variance - dream() now returns formula, data, and hatvalues - define hatvalues() for result of dream() Changes in version 1.27.12 - in mvTest(): - default method is now "FE" Changes in version 1.27.11 - in mvTest(): - return number of features - return stat.FE and stat.het for RE2C - return NA for stat if 1 feature Changes in version 1.27.10 - Add check for very large weights in voomWithDreamWeights() - follows bug report: https://github.com/GabrielHoffman/variancePartition/issues/66 - in mvTest() change option "LS" to "FE" Changes in version 1.27.9 - bug fix in mvTest() for contrasts - extensive changes to vcov() in order to handle contrasts - fix by in subsetting MArrayLM2 object. cov.coefficients.list are now named based on gene names Changes in version 1.27.8 - bug fix in mvTest() Changes in version 1.27.7 - add vcov() for results from dream() - add mvTest() for multivariate tests on results from dream() using vcov() Changes in version 1.27.6 - remove FMT functions Changes in version 1.27.5 - update dependencies - make topTable() generic to work with R 4.2.1 and Bioc 3.16 Changes in version 1.27.4 - update dependencies Changes in version 1.27.3 - update filtering of covariates, especially for when many samples are dropped Changes in version 1.27.1 - update plotPercentBars arguments Changes in version 1.26.1 - patch to update docs Changes in version 1.25.13 - Fix compatibility issue with lme4 1.1.29 - reported https://github.com/GabrielHoffman/variancePartition/issues/51 Changes in version 1.25.12 - in makeContrastsDream(), fix issue where terms with colon cause and error Changes in version 1.25.11 - fix bug in dream() for variables with NA values - improve handling of invalid contrasts in makeContrastsDream() Changes in version 1.25.9 - for getContrast() and makeContrastsDream() make sure formula argument is a formula and not a string Changes in version 1.25.8 - small bug fixes Changes in version 1.25.7 - dream() now drops samples with missing data gracefully Changes in version 1.25.6 - fix small plotting bug in plotStratify() and plotStratifyBy() Changes in version 1.25.5 - add getTreat() to evaluate treat()/topTreat() seamlessly on results of dream() Changes in version 1.25.4 - in dream() set default ddf = "adaptive", which uses "KR" for less than 12 samples - all functions default tp BPPARAM=SerialParam() - add eBayes() to vignette for dream() Changes in version 1.25.3 - add genes argument to plotPercentBars() Changes in version 1.25.2 - change plotPercentBars() to use generic S4 Changes in version 1.25.1 - update handling of weights in voomWithDreamWeights() and add applyQualityWeights() Changes in version 1.23.6 - update calcVarPart() with argument scale=TRUE allowing the user to disable scaling to fractions Changes in version 1.23.5 - use RhpcBLASctl::omp_set_num_threads(1) to use only 1 OpenMP thread for linear algebra within each BiocParallel process - update dream() so useWeights=FALSE works with lmFit() Changes in version 1.23.4 - convert some warnings to errors - add proper handling of weights to voomWithDreamWeights() Changes in version 1.23.3 - add calcVarPart() support for a range of GLM/GLMM's Changes in version 1.23.2 - add flag to checkModelStatus() so warnings are thrown immediately - fix export of as.data.frame - fixed issues where messages were printed even if quiet=TRUE Changes in version 1.23.1 - New freeze for Bioconductor devel branch Changes in version 1.21.10 - add suppressWarnings flag to makeContrastsDream() - ensure that z.std is finite Changes in version 1.21.9 - fix bug with makeContrastsDream() Changes in version 1.21.8 - update dream vignette - update documentation for makeContrastsDream() - fix error in rdf_from_matrices() with eigen() failing Changes in version 1.21.7 - Merge changes to contrast code: https://github.com/GabrielHoffman/variancePartition/pull/32 - Merge improvments to error checking: https://github.com/GabrielHoffman/variancePartition/pull/28 - New warning/error if variables in formula have missing data - add makeContrastsDream() Changes in version 1.21.6 - in dream() allow L to be NULL Changes in version 1.21.5 - Fix roxygen2 documentation to pass R CMD check Changes in version 1.21.4 - variance fractions for fixed effects model is now computed using new method - fixes subtle issue with previous version where estimates dependend on of terms in the formula - https://github.com/GabrielHoffman/variancePartition/issues/30 - Update documentation Changes in version 1.21.3 - Faster aggregration after running multiple threads - Pulled from https://github.com/GabrielHoffman/variancePartition/pull/27 - by Ryan C. Thompson - eBayes() now works with dream for linear mixed models - add rdf.merMod Changes in version 1.21.2 - Reduce size of data passed to each thread by only including variables used in the formula. Applies to multiple functions - add more unit tests Changes in version 1.21.1 - fix issue with dream and random slopes Changes in version 1.19.20 - fix bug discovered when the number of features is less than the number of chunks in iterBatch() Changes in version 1.19.19 - simple bug fixes to pass R CMD check Changes in version 1.19.18 - simplify calcVarPart for lm and lmer. Add compatibility for glm - Simplify checkModelStatus.merMod to allow formula (A|B) where A is continuous - remove unused "adjust" arguments for clarity Changes in version 1.19.17 - add get_prediction() for results of lm() - improve documentation of get_prediction() Changes in version 1.19.16 - in canCorPairs() change statistic used to summarize CCA to Cramer's V. The difference is very subtle, but is now based on first principles. - in dream, check that data is a data.frame - dream() defaults to computeResiduals=TRUE for compatability with zenith Changes in version 1.19.14 - fix issue with residuals() where examples fail Changes in version 1.19.13 - fix issues with residuals() - https://github.com/GabrielHoffman/variancePartition/issues/18 - fix issue exporting eBayes, topTable, etc Changes in version 1.19.12 - Improve documentation for contrasts in dream.Rmd - check that contrasts sum to zero in plotContrasts. Changes in version 1.19.11 - in voomWithDreamWeights() fix issue with not defining design - https://github.com/GabrielHoffman/variancePartition/issues/17 Changes in version 1.19.10 - in voomWithDreamWeights() fix issue with returning design matrix - better error if counts can't be converted to matrix - https://github.com/GabrielHoffman/variancePartition/issues/15 Changes in version 1.19.7 - Round numbers in plotContrasts() - fix issues with strings are passed to formula arguments Changes in version 1.19.6 - New gives meaning full error message for dream(), etc when variable is not found in data. Changes in version 1.19.5 - Better error catching when running fitVarPartModel() with fxn that fails - add get_prediction() function - the following code now can be run in parallel fitList = fitVarPartModel( Y, ~ (1|Batch), data, fxn = function(fit){ B = variancePartition::get_prediction(fit, ~(1|Batch)) fit@resp$y - B }, BPPARAM=SnowParam(3)) Changes in version 1.19.4 - Update vignette #3, and update documentation of REML argument Changes in version 1.19.3 - add new FAQ.Rmd Changes in version 1.19.2 - canCorPairs() now returns NA correlation when two variables have no overlapping observed values - plotCorrMatrix() now handles NA correlation values Changes in version 1.19.1 - Bump to next Bioconductor version Changes in version 1.18.3 - Improve documentation - move location of eBayesFMT code Changes in version 1.18.2 - Clean up some code and add documentation - document ebayesFMT Changes in version 1.18.1 - Clean up some code and add documentation - compute effective degrees of freedom for each model Changes in version 1.18.0 - Bioconductor freeze Changes in version 1.17.10 - fix issue returning residuals from limma - resolve issue where dream gives error: r[cbind(1L:p, 1L:p)] <- 1 : subscript out of bounds - only occured when no fixed effects were used Changes in version 1.17.9 - Fix issues with compatability with R/4.0.0 Changes in version 1.17.8 - Better error message when response contains missing data Changes in version 1.17.7 - Better error message when variable in formula does not exist Changes in version 1.17.6 - comply with new Bioconductor check: R_CHECK_LENGTH_1_LOGIC2 Changes in version 1.17.5 - if contrasts for dream() is data.frame, convert to matrix Changes in version 1.17.4 - Don't print warnings for residuals() when only one argument passed. - fix bug with residuals evaluated with only fixed effects Changes in version 1.17.3 - Allow sparseMatrix for gene expression. Now saves memory by avoiding conversion to matrix. Processing sparseMatrix will be slower, but memory usage will be low. - dream(..., computeResiduals=TRUE) now computes residuals and allows use of residuals() function Changes in version 1.17.2 - fix error in voomWithDreamWeights() when design matrix is null Changes in version 1.17.1 - topTable(...,sort.by=) now is correct when and F-test is used - fixed issue in classifyTestsF.MArrayLM2, now is much faster Changes in version 1.15.8 - Replace cat() with message() - add quiet option to a few functions - dream() does not call eBayes() when lmFit is used Changes in version 1.15.7 - Official release to development branch Changes in version 1.15.6 - fix convergence errror when recycling parameters values from first gene - add column z.std and F.std to topTable Changes in version 1.15.4 - Add error message when scale of fixed effects causes a problem Changes in version 1.15.3 - Try changing order of eBayes Changes in version 1.15.2 - Update vignette Changes in version 1.15.0 - Push changes to Bioconductor devel Changes in version 1.13.11 - Fixed bug in voomWithDreamWeights() with approxfun() with ties Changes in version 1.13.10 - fix parallel processing issues Changes in version 1.13.9 - update vignette for new parallel processing backend Changes in version 1.13.8 - apply empirical Bayes when doing F-test - hypothesis testing for single coefficients is now included by default, so only need to specify contrast matrix if for more complicated contrasts - add voomWithDreamWeights() for computing observation weights using random effects - Add BiocParallel capability with BPPARAM argument - allows parallel processing with lower memory usage - dream() is now compatable with gene set enrichments from pinnacle (software comming soon) Changes in version 1.13.7 - in dream(), add support for genes annotation in DGElist() - in dream(), automatically evaluate contrasts for all single coefficients - add future compatability for gene set enrichments method "pinnacle" Changes in version 1.13.5 - add plotContrasts() to dream vignette Changes in version 1.13.4 - export classes to fix bug with class "varPartResults" not being defined - Thanks Megan Behringer Changes in version 1.13.3 - add plotContrasts() Changes in version 1.13.2 - Enable random slope models in dream, but not for estimating variance fractions - Thanks Jonas Zierer Changes in version 1.13.1 - Add progress bar at ETA ======= Changes in version 1.12.4 - Update dream vignette Changes in version 1.12.3 o add plotContrasts() o Enable random slope models in dream, but not for estimating variance fractions o export classes to fix bug with class "varPartResults" not being defined - Thanks Megan Behringer Changes in version 1.11.13 - Fix multithreading issue Changes in version 1.11.11 - dream can handle multiple contrasts at the same time Changes in version 1.11.10 - fix typos in dream vignette Changes in version 1.11.8 - Check and stop() if response variable has variance of 0 - in dream(), fitExtractVarPartModel(), and fitVarPartModel() - add standardized_t_stat() implicitly in eBayes() using MArrayLM2 class - this transforms moderated t-statistics to have same degrees of freedom Changes in version 1.11.7 - Simplify object return by dream to be more more similar to lmFit - now returns MArrayLM instead of MArrayLMM_lmer - if a fixed effects formula is specified (i.e. not random terms) - dream call lmFit in the backend - getContrast() works seamlessly - dream() now returns gene annotation if passed to function Changes in version 1.11.6 - add error checing for L in dream - fix typoes in dream vignette - fix typoes in theory_practice_random_effects.Rnw Changes in version 1.11.5 - Add dream function for differential expression for repeated measures with a linear mixed model Changes in version 1.11.2 - Add warnings to canCorPairs for colinear terms Changes in version 1.11.1 - Add vignette: theory_practice_random_effects.Rnw Changes in version 1.9.9 - Fix issue when package is autoloaded when starting R Changes in version 1.9.8 o Fix issue where if info data.frame contained a column name "gene", fitExtractVarPartModel() would not run Changes in version 1.9.6 o Fix tximport issue with eval=FALSE Changes in version 1.9.2 o Fix vignette Changes in version 1.9.1 o Fix formatting of vignette o add description of canCorPairs() function Changes in version 1.5.7 - include splines in foreach .packages Changes in version 1.5.6 - compatibility with tximport v1.3.5 Changes in version 1.5.5 - Decrease computing time of effective sample size with ESS() by additional ~10x with sparse solver - fix margins for plotPercentBars() - Fix bug for getVarianceComponents() when correlated continous variables are included - compatibility with ggplot2 2.2.0 - center plot titles - fix order of bars in plotPercentBars() - legend background to transparent - set text to be black - include lme4 in foreach .packages - change residuals color to not be transparent - add CITATION information - plotCorrMatrix now shows dendrogram by default - Estimate run time for fitExtractVarPartModel() / fitVarPartModel() - improve warnings for plotPercentBar() - improve warnings for plotCorrStructure() - define ylab for plotVarPart() - add as.matrix.varPartResults() (hidden) - define isVaryingCoefficientModel() (hidden) Changes in version 1.3.11 - in canCorPairs() and other functions, convert formula with as.formula() - improve error messages for canCorPairs() Changes in version 1.3.10 - Add plotStratify() - Update documentation Changes in version 1.3.8 - Add additional examples to vignette - show projected memory usage of fitVarPartModel() Changes in version 1.3.7 - fitVarPartModel warns if names in exprObj and data are not identical - residuals() and other functions deal with missing values properly Changes in version 1.3.6 - Small changes to vignette Changes in version 1.3.5 - Fix Bioconductor error Changes in version 1.3.4 - Fix typos Changes in version 1.3.3 - Improve documentation Changes in version 1.1.9 - Update sortCols to handle Measurement.error - change backend package structure - set Residuals to be grey by default in plotVarPart() and plotPercentBars() - add control = lme4::lmerControl(calc.derivs=FALSE, check.rankX="stop.deficient" ) - add plotCorrStructure Changes in version 1.1.8 - Add ESS.R - Add fitVarTest.R - use lmerTest by default - fix bug checkModelStatus() for variables with backticks in name Changes in version 1.1.7 - GPL License Changes in version 1.1.6 - Move packages from Depends to Imports - For clarity, replace = with <- in parts of examples and vignette - Stop cluster in examples to solve error on Windows machines Changes in version 1.1.5 - Stop cluster in vignette to solve error on Windows machines Changes in version 1.1.4 - Fix Bioconductor check error Changes in version 1.1.3 o Add details to vignette - Fix ggplot2 compatibility issues Changes in version 1.1.2 - Add details to vignette Changes in version 1.1.1 - add plotPercentBars() to vizualize variance fractions for a subset of genes - add ESS() to compute effective sample size - fix x.labels argument in plotStratifyBy(). Previously, this argument was not used correctly Changes in version 1.0.0 - Release to Bioconductor 3.2 Changes in version 0.99.9 - add legend argument to plotStratifyBy() - improve warnings / errors for varying coefficient models - allow user to manually adjust cutoff for determining when design matrix is singular - changed default cutoff to 0.999 from 0.99 Changes in version 0.99.8 - improve warnings / errors when design matrix is close to or exactly singular Changes in version 0.99.7 - added new class varPartResults to store results of fitExtractVarPartModel() and extractVarPart() - the user will not notice any change, only the backend is different o Allow computation of adjusted ICC in addition to ICC. - add warning when categorical variables are modeled as fixed effects - fix computation of variance fractions for varying coefficient models - add getVarianceComponents() to return variances from lmer() or lm() model fit - showWarnings=FALSE suppresses warning messages - add fxn argument to fitVarPartModel to evaluate any function on the model fit Changes in version 0.99.6 - Update DESCRIPTION information Changes in version 0.99.5 - residuals deals with missing data gracefully and returns a matrix Changes in version 0.99.4 o add documentation for example datasets o convert calcVarPart() to S4 from S3 function call o fix typos in vignette Changes in version 0.99.3 o fitVarPartModel() and fitExractVarPartModel() use S4 instead of S3 calls Changes in version 0.99.2 - rename sort.varParFrac to sortCols - support ExpressionSet - change options for plotStratifyBy() Changes in version 0.99.0 - Initial version Changes in version 0.0.12 - add plotStratifyBy() - update documentation Changes in version 0.0.11 - fix sort to work on correct argument Changes in version 0.0.10 - fitExtractVarPartModel() and fitVarPartModel() now take subset argument - throw warning when no Intercept is specified - if using lmer, warning if categorical variable is modeled as fixed effect - fixed calcVarPart bug with reporting too few variances for multicategory fixed effects - add colinearityScore Changes in version 0.0.9 o function now use the precision weights when specified - remove warning about unspecified weights, when useWeights=TRUE - fix issue with sort with only one variable - add main argument to plotVarPart Changes in version 0.0.8 o Bug update to vignette and simulated data Changes in version 0.0.7 - remove 'variable' from xlab of plotVarPart Changes in version 0.0.6 - set REML=FALSE to default. This fixes issues of inaccurate variance estiamtes, and makes lmer() results more concordant with lm() results - Fix residuals function when lm or lmer is used - fix useWeights argument error for fitExtractVarPartModel() Changes in version 0.0.5 o plotVarPart() as ylim=c(0,100) as default, and can be changed by user - fitExtractVarPartModel() labels rows correctly Changes in version 0.0.4 - Add sort() for output of extractVarPart() or fitExtractVarPartModel() Changes in version 0.0.3 - add residuals function - add fitExtractVarPartModel() - foreach loops us iterators