Changes: version 1.3.3  (2026-09-24)

1.) Fixed bug in help file examples
	- Previously five help file examples simulated data using Parafac2 G weights when Parafac B weights should have been used
	- Now these examples correctly use Parafac B weights to simulate data

2.) Fixed bug in function 'tunecpfa'
	- Previously the following input combination produced an error: nfac = 1, family = "multinomial", and method = "PLR"
	- Now the error is resolved for glmnet package version 5.0 and above, which is now required 

3.) Modified wording in the help file for function 'plotcpfa' to better reflect the function's purpose
	- Previously the help file referred to the 'optimal' model identified in output from function 'cpfa'
	- Now the help file refers to the 'best' model, which reflects that a comparison is made

4.) Added 'stratify' argument to function 'cpfa'
	- Previously function 'cpfa' allowed only simple random sampling to partition observations into training and test sets
	- Now argument 'stratify' allows the option for stratified random sampling based on the observed class proportions in input 'y' 

----------------

Changes: version 1.3.2  (2026-08-02)

1.) Fixed bug in internal function 'kcv.plr'
	- Previously function 'kcv.plr' did not use user-supplied lambda values for the case where nfolds = 2
	- Now function 'kcv.plr' correctly uses user-supplied lambda values when nfolds = 2

2.) Modified default values for internal function 'kcv.nn'
	- Previously 'kcv.nn' allowed function 'nnet' to use default values for arguments 'entropy' and 'softmax'
        - Now 'kcv.nn' sets (1) 'entropy' and 'softmax' to TRUE for multiclass and (2) 'entropy' to TRUE and 'softmax' to FALSE for binary

3.) Added argument 'light' to function 'cpfa'
	- Previously 'cpfa' did not have an argument that could be used to exclude input 'x' from the output object
	- Now 'cpfa' has the 'light' argument: when 'light' is set to TRUE, 'x' is excluded from the output, reducing the size of the output object

4.) Modified default values in tuning parameter gamma for method SVM
	- Previously function 'tunecpfa' included 0 in the range of default values for tuning parameter gamma 
	- Now function 'tunecpfa' does not include 0 in the range of default values; instead, it includes the value 0.00001

----------------

Changes: version 1.3.1  (2026-07-13)

1.) Fixed bug in function 'pficpfa'
	- Previously function 'pficpfa' did not change the order of components in 'opt.model' with respect to permutation/order alignment
	- Now function 'pficpfa' changes the order based on alignment, matching components to the correct model weights for PFI calculations

2.) Modified help file for main package function 'cpfa'
	- Previously help file did not make it explicit that 'opt.model' is not re-ordered when argument 'align' is TRUE
        - Now the help file clearly states that 'opt.model' is not re-ordered for this case

----------------

Changes: version 1.3.0  (2026-06-03)

1.) Added option to solve permutation (order) indeterminacy in Parafac and Parafac2 models
	- Previously package did not provide a method for solving the permutation (order) indeterminacy across train-test splits in function 'cpfa'
	- Now has the option to use Tucker congruence coefficients and the Hungarian algorithm to order components consistently across splits

2.) Added function 'pficpfa' to calculate permutation feature importance and model-based conditional permutation feature importance
	- Previously package did not provide a method to calculate the classification importance of individual features
	- Now function 'pficpfa' calculates permutation feature importance and model-based conditional importance using output from function 'cpfa'

3.) Fixed bug in function 'simcpfa'
	- Previously function 'simcpfa' contained a misplacement of its cooling device when argument 'smethod' is set to 'logistic'
	- Now function places its cooling device within the correct loop

4.) Fixed bug in function 'plotcpfa'
	- Previously function 'plotcpfa' did not include logic to ensure runs are reproducible when using parallel computing
	- Now function includes logic to ensure runs are reproducible for parallel computing

5.) Change in the use of function 'makeCluster()' for several package functions 
	- Previously, for parallel computing, when a cluster was not provided, calls to function 'makeCluster()' used 'makeCluster(detectCores())'
        - Now such calls use 'makeCluster(max(1L, detectCores() - 1L))' as a safeguard to reduce the risk of crashes

----------------

Changes: version 1.2-9  (2026-05-08)

1.) Added URLs for access to new GitHub repository to allow for bug reports
	- Previously package did not provide a place for reporting bugs
	- Now package provides a link to a GitHub repository for bug reports

2.) Vignette fixes
	- Previously the package vignette contained several inaccuracies due to recent changes
	- Now the package vignette has been fixed

3.) Added output in package function 'cpfa'
	- Previously function 'plotcpfa' did not provide classification mode training weights in output 'train.weights'
	- Now the function provides these weights in 'train.weights' as the list 'Classtrain.weights'

4.) Bug fix in function 'cpm.all'
	- Previously the function 'cpm.all' incorrectly switched predicted and known labels passed to function 'cpm'
	- Now values have been ordered correctly in function 'cpm.all'

----------------

Changes: version 1.2-8  (2026-04-13)

1.) Bug fix in package function 'plotcpfa' - issue with incorrect code
	- Previously incorrect graphics code was added during an update, causing a vignette error for certain Windows builds
	- Now incorrect code has been removed and replaced with correct code, fixing errors 

2.) Added option to include covariates as additional features alongside estimated components
	- Previously only estimated component weights could be used as features for classification
	- Now covariates can be included for classification in functions 'tunecpfa', 'predict.tunecpfa', and 'cpfa'

3.) Bug fix in package function 'cpm' - issue with multiclass npv and fpr calculation
	- Previously formula for calculating multiclass npv or multiclass fpr was incorrect
	- Now each formula has been corrected

----------------

Changes: version 1.2-7  (2026-03-29)

1.) Added principal component analysis (PCA) as an additional component model, which works with a two-way matrix
	- Previously used only Parafac and Parafac2 as component models
	- Now includes functionality for PCA with an option for a varimax rotation

2.) Bug fix in package function 'plotcpfa' - edge case when a single value is present
	- Previously did not produce plots correctly when only one method and one number of components had been used
	- Now produces such plots correctly

3.) Bug fix in package function 'plotcpfa' - plot overwrite
	- Previously component heatmaps were overwritten if a user did not have GUI with plot history enabled
	- Now all component heatmaps are produced, regardless of the GUI used

4.) Modification to function 'simcpfa' - class change for output 'y' to align with function 'cpfa'
	- Previously value 'y' was output as an object of class matrix
	- Now 'y' is output as an object of class factor, which primary package function 'cpfa' expects

5.) Enhancement to package function 'cpfa' - IDs as output
	- Previously training and test IDs were not provided in output for function 'cpfa'
	- Now such IDs are provided for all train-test replications for 'cpfa'

6.) Help file cleanup
	- Previously various omissions or inconsistencies existed in several package help files
	- Now such issues have been fixed to make function usage clearer

----------------

Changes: version 1.2-6  (2026-02-06)

1.) Bug fix in package function 'plotcpfa'
	- Previously function 'plotcpfa' did not have an argument to identify the classification mode
	- Now argument 'cmode' is included to identify the classification mode to permute it to be the last mode

2.) Bug fix in package function 'tunecpfa'
	- Previously function 'tunecpfa' did not scale features consistently across classification methods
	- Now 'tunecpfa' scales features consistently across classification methods

3.) Bug fix in package function 'cpfa'
	- Previous updates included a bug that prevented function 'cpfa' from passing additional arguments to function 'tunecpfa' 
	- Now additional arguments (e.g., 'const') are passed to 'tunecpfa' successfully

4.) Bug fix in package function 'predict.tunecpfa' and internal function 'kcv.gbm'
	- Previously incorrect use of 't()' to obtain a matrix transpose rendered performance measures incorrect for method GBM
	- Now 't()' is removed, giving correct dimensions and returning correct performance measures for GBM

5.) Modified function 'tunecpfa' to include a scaling argument
	- Previously function 'tunecpfa' did not include an option for scaling predictors
	- Now 'tunecpfa' includes logical argument 'compscale' to allow an option for scaling

----------------

Changes: version 1.2-5  (2026-01-15)

1.) Bug fix in help file examples
	- Previously help file examples using function 'simcpfa' did not include code for argument 'techlist'
	- Now help file examples include code for argument 'techlist'

2.) Bug fix to ensure 'doRNG' functionality works with functions 'cpfa' and 'tunecpfa'
	- Previously 'doRNG' inclusion did not ensure reproducible results with parallel computing
	- Now a fix ensures reproducible results with parallel computing

3.) Modified procedures for handling class imbalance
	- Previously functions 'tunecpfa' and 'cpfa' handled class imbalance inconsistently across methods
	- Now both functions handle imbalance consistently and with proper documentation

----------------

Changes: version 1.2-4  (2025-12-15)

1.) Efficiency enhancement to package functions 'tunecpfa' and 'cpfa'
	- Previously functions created and stopped clusters inefficiently for parallel computing
	- Now functions create and stop clusters more efficiently for parallel computing

2.) Update to internal package function 'kcv.gbm' to be compatible with recent changes to package 'xgboost'
	- Previously function 'xgboost' was used to train gradient boosting machine models for cross-validation
	- Now function 'xgb.train' is used to train models

3.) Code management enhancement to package function 'tunecpfa'
	- Previously function used 'eval(parse())' logic to read text as code
	- Now function replaces this logic to improve code maintenance and transparency

4.) Bug fix in package function 'tunecpfa'
	- Previously input argument 'prior' was overwritten with observed class label frequencies for method 'PLR'
	- Now function correctly handles argument 'prior' for method 'PLR'

5.) Included package 'doRNG' to make parallel computing reproducible
	- Previously sole reliance on package 'doParallel' for parallel computing prevented reproducibility
	- Now inclusion of package 'doRNG' allows for reproducible parallel computing when using functions 'cpfa' or 'tunecpfa'

6.) Modified argument 'prior' in function 'tunecpfa' to handle class imbalances as typically expected
	- Previously, if 'prior = NULL', default was to use observed proportions of class labels in argument 'y'
	- Now, if 'prior = NULL', default is to use the inverse of observed proportions of class labels in argument 'y'

7.) Added additional simulation method in function 'simcpfa'
	- Previously only an iterative Monte Carlo rejection sampling technique was available for simulating a data array and class labels
	- Now an additional method is available that efficiently simulates latent data via the eigendecomposition

----------------

Changes: version 1.2-3  (2025-11-02)

1.) Bug fix in package function 'plotcpfa'
	- Previously function produced an error when creating plots for one-component models
	- Now function successfully produces plots for one-component models 

2.) Added link within package vignette
	- Previously vignette did not contain a URL link to an external project
	- Now contains a URL to an external project that applies this package to real data
	- URL: https://github.com/matthewasisgress/multiway-classification

3.) Help file cleanup
	- Previously help file for function cpfa stated that the SVM cost parameter can be zero
	- Now the help file correctly states that the SVM cost parameter must be greater than zero

----------------

Changes: version 1.2-2  (2025-10-19)

1.) Bug fix in package function 'plotcpfa'
	- Previously used 'cmode' to permute array 'X' used in function 'cpfa'
	- Now does not permute because 'X' was already permuted using 'cpfa'

2.) Added example to package vignette
	- Previously package vignette did not contain a binary classification example
	- Now vignette contains a binary classification example

----------------

Changes: version 1.2-1  (2025-07-07)

1.) Modified package function 'plotcpfa' to provide additional output
	- Previously function 'plotcpfa' did not output weights for all modes of the optimal model
	- Now 'plotcpfa' provides weights for all modes

2.) Added new internal checking functions to improve code efficiency
	- Previously did not contain checking functions for certain numeric or logical arguments
	- Now contains new internal functions to check certain numeric or logical arguments

3.) Updated author name in anticipation of upcoming marriage
	- Previously package listed author's name as author's bachelor name: Snodgress
	- Now package lists author's name as author's new marital name: Asisgress

----------------

Changes: version 1.2-0  (2025-06-11)

1.) Bug fix in package function 'cpfa'
	- Previously a bug prevented argument 'cmode' from permuting 'X' when using Parafac models
	- Now 'cmode' correctly permutes 'X' for Parafac models

2.) Added a short vignette describing how to use the package
	- Previously package contained no guide for use
	- Now adds vignette describing how to use the package

----------------

Changes: version 1.1-9  (2025-05-23)

1.) Fixed wording inconsistencies in help files
	- Previously several help files contained wording errors
	- Now errors are fixed with improved help file readability

2.) Improved function 'simcpfa' by allowing different error structures
	- Previously, added error could only come from a standard normal distribution
	- Now different types of error can be added to the simulated array

3.) Improved function 'simcpfa' by allowing custom classification mode weight matrices
	- Previously a classification mode weight matrix could not be specified, only generated
	- Now the classification mode weight matrix can be specified

4.) Improved function 'simcpfa' by allowing additional probability distributions
	- Previously weights could be drawn from only seven probability distributions
	- Now weights can be drawn from 12 common probability distributions

5.) Bug fix in package function 'simcpfa'
	- Previously a bug prevented data from being generated when 'nfac = 1'
	- Now data can be generated successfully when 'nfac = 1'

----------------

Changes: version 1.1-8  (2025-04-15)

1.) Added new function 'simcpfa' for simulating data structures for 'cpfa'
	- Previously package 'cpfa' did not have a function to simulate relevant data
	- Now a new function simulates data arrays that are connected to class labels

2.) Added new internal function 'distdraw' to support new function 'simcpfa'
	- Previously package did not have a function to simulate data from common distributions
	- Now a new internal function simulates data from distributions to support 'simcpfa'

3.) Fixed contact email address in package help files
	- Previously contact email listed in help files was a university email address
	- Now contact email is listed as a personal email address

4.) Updated references and fixed wording in help files
	- Previously several help file references were outdated and some wording was vague
	- Now help file references reflect R package updates and wording is improved

----------------

Changes: version 1.1-7  (2025-02-23)

1.) Updated contact information
	- Previously the description file contained a university email address for contact
	- Now the description file contains a personal email address

2.) Improved readability of help and function files
	- Previously code did not contain consistent spacing for clear reading
	- Now adds consistent spaces in files to improve code readability

3.) Bug fix in package function 'cpfa'
	- Previously code contained several incorrect conditional statements
	- Now conditional statements have been fixed

4.) Bug fix in internal package function 'kcv.plr'
	- Previously a bug prevented the correct model from being returned when 'nfolds = 2'
	- Now the correct model is returned when 'nfolds = 2'

----------------

Changes: version 1.1-6  (2024-11-01)

1.) Bug fix in package function 'plotcpfa' for argument '...'
	- Previously a bug prevented arguments from being passed forward
	- Now additional arguments can be passed to model fitting functions

2.) Simplified code for internal cross-validation functions
	- Previously some redundancies existed in error checking for internal functions
	- Now code has been simplified to reduce repetition

3.) Simplified code for 'print.tunecpfa' function
	- Previously redundant code existed in this function
	- Now the code has been simplified

----------------

Changes: version 1.1-5  (2024-10-01)

1.) Added new function 'plotcpfa' to plot output from function 'cpfa'
	- Previously 'cpfa' output did not have a method to visualize results
	- Now a new function fits a model based on 'cpfa' output and plots results

2.) Improved readability of function files
	- Previously some inconsistencies existed in line spacing
	- Now spacing is more consistent to improve code readability

----------------

Changes: version 1.1-4  (2024-04-26)

1.) Removed three deprecated functions
	- Previously functions 'tune.cpfa', 'predict.cpfa', and 'print.cpfa' remained   
	- Now all three functions have been removed

----------------

Changes: version 1.1-3  (2024-04-07)

1.) Modified names of three functions (old functions remain available until next update)
        - Previously main functions were 'tune.cpfa', 'predict.cpfa', and 'print.cpfa'
        - Now these functions are 'tunecpfa', 'predict.tunecpfa', and 'print.tunecpfa'

2.) Added gradient boosting machine (GBM) as a classifier
	- Previously used five classification methods
	- Now adds GBM as a new classification method

----------------

Changes:  version 1.1-2  (2024-02-15)

1.) Bug fix in main package function 'tune.cpfa' for argument 'nfac'
	- Previously bug prevented argument 'nfac' from containing multiple values
	- Now argument 'nfac' can contain multiple values  

2.) Added a Parafac2 example to help files
	- Previously help files did not include a Parafac2 example
	- Now help files include a Parafac2 example

3.) Bug fix in main package function 'tune.cpfa' for argument 'cmode'
	- Previously could not match 'y' length with classification mode's number of levels
	- Now can match them together correctly

4.) Bug fix in main package function 'predict.cpfa' for argument 'newdata'
	- Previously did not specify array dimensions correctly for four-way arrays
	- Now specifies array dimensions correctly for four-way arrays

5.) Bug fix in main package function 'predict.cpfa' for method 'SVM' for multiclass response
	- Previously columns of SVM predicted probabilities matrix were ordered incorrectly
	- Now columns are ordered correctly, calculating correct performance measures

----------------

Changes:  version 1.1-1  (2024-02-03)

1.) Added help file examples where tensor and response are related
	- Previously examples did not use tensors that were related to responses 
	- Now help file examples use tensors related to responses 

2.) Improved readability of function files
	- Previously code did not contain spaces for clear reading
	- Now adds spaces in function files to improve code readability

----------------

Changes:  version 1.1-0  (2023-12-02)

1.) Bug fix in main package function 'tune.cpfa'
	- Previously a bug prevented Parafac2 models from being fit
	- Now Parafac2 models can be fit correctly

2.) Bug fix in internal package function 'kcv.plr'
	- Previously a bug prevented 'threshold' from working with 'nfolds = 2'
	- Now argument 'threshold' works correctly with 'nfolds = 2'

----------------

Changes:  version 1.0-9  (2023-11-19)

1.) Placed tuning arguments into a list for functions 'tune.cpfa' and 'cpfa'
	- Previously classifier tuning arguments were separate inputs
	- Now combines tuning arguments in a list to improve readability

2.) Added new output to function 'cpfa'
	- Previously optimal tuning parameters were not provided by cpfa
	- Now provides optimal tuning parameters for each replication

----------------

Changes:  version 1.0-8  (2023-10-15)

1.) Bug fix in internal function 'kcv.rda' for KCV error calculation
	- Previously provided accuracy as classification error output
	- Now correctly uses classification error instead of accuracy

2.) Improvements to help files for most package functions
	- Previously help files contained language noting four methods
	- Now help files correctly reference five methods, including RDA

3.) Added plotting to main package function 'cpfa'
	- Previously function 'cpfa' contained no plotting capabilities
	- Now box plots of performance measures can be produced as output

----------------

Changes:  version 1.0-7  (2023-10-07)

1.) Added regularized discriminant analysis (RDA) as a classifier
	- Previously used four classification methods
	- Now adds RDA as a new classification method

2.) Added new references to help files for RDA

----------------

Changes:  version 1.0-6  (2023-09-07)

1.) Added Parallel Factor Analysis-2 (Parafac2) as a component model
	- Previously used only Parallel Factor Analysis-1 (Parafac)
	- Now includes functionality for Parafac2 and for irregular tensors

2.) Added new references for Parafac2 (e.g., Harshman, 1972)

----------------

Changes:  version 1.0-5  (2023-08-07)

1.) Added new function 'cpfa' as a wrapper function to implement method
	- Previously package functions were not united 
	- Now new wrapper function unites package functions

2.) Improvements to help files
	- Previously help files contained language errors and typos
	- Now help files correctly use proper language

----------------

Changes:  version 1.0-4  (2022-06-20)

1.) Removed package vignette due to vignette still containing key errors
	- Previously provided a vignette describing package use
	- Now removes vignette due to major errors; will add at later date

----------------

Changes:  version 1.0-3  (2022-06-16)

1.) Added an updated package vignette 
	- Previously vignette contained errors in describing method
	- Now fixes errors and improves presentation in vignette

----------------

Changes:  version 1.0-2  (2022-05-16)

1.) Added a package vignette describing method implemented in package 
	- Previously contained no vignette or description of method
	- Now adds vignette describing package capabilities

----------------

Changes:  version 1.0-1  (2022-04-09)

1.) Added feed-forward neural network (NN) as a classifier
	- Previously used three classification methods
	- Now adds NN as a fourth classification method

2.) Added new references to help files for NN

----------------

Changes:  version 1.0-0  (2022-03-09)

1.) Submitted to CRAN a new package called 'cpfa'

----------------