Version 0.3 (2024-02-20) 1) Added orthogonalization option to grpnet * Use 'orthogonalize = TRUE' to groupwise orthogonalize design matrices * Default is still 'standardize = TRUE' (and 'orthogonalize = FALSE') * Now three possible options: unstandardized, standardized, orthogonalized 2) Improvement to rk() and rk.model.matrix for periodic splines * Periodicity is specified via a named list with T/F for each entry * Previously it was necessary to include all variables in list * Now any variable excluded from the list automatically gets F entry 3) Additional output included for grpnet() function * New returned value: "xsd" gives the groupwise standard deviation of 'x' * The "xsd" values are used to standardize 'x' (when standardize = TRUE) * The "xsd" values are used by predict.grpnet() when type = "znorm" 4) Expanded functionality for predict.grpnet() and predict.cv.grpnet() * New prediction type: "znorm" gives L2 norm of standardized coefs * Equivalent to multiplying the "norm" type prediction by "xsd" * "znorm" should be preferred over "norm" when predictor metrics differ 5) Inconsequential updates to underlying Fortran code * Previously the "pw" argument was only used to input penalty weights * Now the "pw" argument is used to output "xsd" (x standard deviation) * This output is now returned as a part of grpnet objects ($xsd) 6) Additional option ("znorm") for plot.grpnet() function 7) Slight update to package title and description. 8) Added an additional reference to rk() and rk.model.matrix() help files Version 0.2 (2023-09-08) 1) Bug Fix (penalty.factor) * In ver 0.1 penalty.factor was not being passed to internal Fortran routines * In the Fortran code, the penalty.factor was hard-coded as sqrt(grpsize) * Now the penalty.factor argument is appropriately passed to internal code 2) Bug Fix (ridge solution) * In ver 0.1 the ridge solution was computed at alpha = 0.001 for the first entry * Now alpha = 0.001 is used to compute the lambda sequence but not the solution * In ver 0.2 the ridge solution is computed at alpha = 0 (using lambda[1] from alpha = 0.001) 3) Expanded functionality of predict.grpnet and predict.cv.grpnet functions * Previously only offered predictions of type "link", "response", and "class" * Now offers 11 kinds of predictions (although some are not actually predictions) * Additions include "terms", "importance", and 6 options for extracting coefficient info 4) Expanded functionality of plot.grpnet function * Previously only offered plot of coefficient values (colored by group) * Now offers three types: coef, norm, imp (obtained via predict.grpnet) * The "type" option controls the type of plot that is produced 5) Improvements to grpnet and cv.grpnet outputs for multinomial responses * Previously factor levels were internally replaced with y1,...,ym * Resulted in coef names that differed from original factor levels * Now original factor levels are retained and used for coef names 6) Improvements to the formula methods for grpnet and cv.grpnet * Previously used model.matrix() to build (parametric) design matrix * New argument: "use.rk" controls whether to use model.matrix() or rk.model.matrix() * New default: "use.rk = TRUE" uses rk.model.matrix() to build (nonparametric) design matrix 7) Intercept is now accounted for in "group" that is output of grpnet (and cv.grpnet) * Previously the returned "group" was the same regardless of the intercept * Now the group vector contains "0" as the first element if an intercept was used * Updated behavior is similar to behavior of model.matrix and rk.model.matrix 8) rk.model.matrix * New function for forming model (design) matrices using the rk() function * Designed to be a more flexible (nonparametric) alternative to model.matrix * Interactions of any order are formed via the row.kronecker function 9) rk * New function for forming a reproducing kernel (smoothing spline) basis * Designed to be an improvement of the bs() function in the "stats" package * Computes nominal, ordinal, and polynomial (linear, cubic, quintic) splines 10) row.kronecker * New function for computing the row-wise Kronecker product between X and Y * Note that X and Y are two matrices with the same number of rows * Used by the rk.model.matrix() function to form bases for interaction effects