
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
