FFTrees version 1.7.5 was released on CRAN [on 2022-09-15]. This version contains mostly bug fixes, but also improves and revises existing functionality.
Changes since last release:
-
Added distinctions between FFTs that "decide" vs. "predict" by using corresponding labels in plots and verbal descriptions.
-
Improved plotting and printing FFTs (with
plot.FFTrees()
andprint.FFTrees()
):- Added new plotting options (e.g.,
what = 'all'
vs.what = 'tree'
andwhat = 'icontree'
). - Added distinction in header of icon guide between FFTs that "decide" (for training data) vs. "predict" (for test data).
- Enabled applying a tree to new test data when providing a data frame as
data
. - Enabled passing some graphical parameters (e.g.,
col
,font
,adj
) to text of panel titles. - Return an invisible
FFTrees
objectx
(to allow re-assigning to globalx
when using new test data).
- Added new plotting options (e.g.,
-
Added
wacc
to measures computed for competing algorithms. -
Plotting with
plot.FFTrees()
:- Adjusted space for title to width of
main
argument. - Deprecated
stats
argument. - Moved utility functions to
helper_plot.R
.
- Adjusted space for title to width of
- Revised documentation and vignettes.
- Renamed internal functions and variables.
The current development version of FFTrees is available at https://github.com/ndphillips/FFTrees.
FFTrees version 1.7.0 was released on CRAN [on 2022-08-31]. This version contains numerous bug fixes and improves or revises existing functionality.
Changes since last release:
- Improved functionality of
print.FFTrees()
:- Added
data
argument to print an FFT's training performance (by default) or prediction performance (when test data is available). - Enabled setting
tree
to"best.train"
or"best.test"
(as when plotting FFTs). - Reporting
bacc
orwacc
in Accuracy section (andsens.w
, if deviating from the default of 0.50). - Improved readability of 2x2 confusion table (by right-justifying digits).
- Moved expected cost information from Accuracy to Speed, Frugality, and Cost section.
- Added
- Fixed bugs and improved functionality of
plot.FFTrees()
:- Improved plot for
what = 'ROC'
analogous towhat = 'cues'
. - Reporting
bacc
orwacc
in Accuracy section (andsens.w
value, if deviating from the default of 0.50). - Fixed bug to re-enable setting
tree
to"best.train"
or"best.test"
. - Fixed bug to show correct point labels in ROC curve panel.
- Improved plot for
- Fixed bugs and improved functionality of
showcues()
:- Using current goal of object
x
as cue ranking criterion (rather than always usingwacc
). - Subtitle now shows
sens.w
value whengoal == 'wacc'
. - Cue legend now accommodates 0 <
top
< 10. - Removed redundant
data
argument (asFFTrees
objects only contain cue training data). - Added
alt.goal
argument (to allow ranking cue accuracies by alternative goals). - Added
quiet
argument (to hide feedback messages). - Added subtitle (to signal current cue accuracy ranking criterion).
- Using current goal of object
- Improved version of
summary.FFTrees()
:- Print tree performance summary and goal information (on the console).
- Return tree
definitions
andstats
(as a list).
- Fixed a bug that forced reversals of final exits in the final node when manually creating FFTs with
my.tree
orfftrees_wordstofftrees()
.
- Changed tree statistics for test data from data frames to tibbles.
- Improved feedback on missing decision labels when creating FFTs from descriptions with
my.tree
orfftrees_wordstofftrees()
. - Deprecated
store.data
argument ofFFTrees()
.
- Changed primary package maintainer to Hansjoerg Neth, but Nathaniel Phillips is still on board.
- Revised text, examples, and links in vignettes.
- Reduced clutter by recycling code and combining files.
- Cleanup of code and documentation.
FFTrees version 1.6.6 was released on CRAN [on 2022-07-18].
Changes since last release:
- Fixed bug causing
plot.FFTrees()
to not display plots properly.
- Cleanup to get package back on CRAN after failed submission on July 17, 2022.
- Cleanup to get package back on CRAN after failed submission on July 16, 2022.
- Additional cleanup to get package back on CRAN after failed submission on July 12, 2022.
- Internal cleanup to get package back on CRAN.
plot.FFTrees()
no longer saves graphic params changed inpar()
.plot.FFTRrees()
: Whentest = 'best.test'
and no test data are provided, the information text is no returned withmessage()
rather thanprint()
.- Deprecation notes of
plot.FFTrees()
are now returned as warnings, not messages.
- Officially deprecated "max" and "zigzag" algorithms.
- Minor cleanup throughout.
- Fixed warnings for CRAN submission.
- FFTrees objects have a nicer internal structure.
- Added tests throughout (finally).
- Extensive code cleanup, which should speed things up.
- New print method includes an ASCII confusion matrix.
- Big under the hood changes to make code more efficient (and prepare for C++). Code should be ~50% faster.
- Many inputs such as
cost.cues
andcost.outcomes
are now specified as named lists to avoid confusion. - New cost outputs separate costs from cues, outcomes, and total costs.
- Changes to input defaults for
goal
andgoal.chase
.
- Bug fixes.
- Bug fixes.
-
Added class probability predictions with
predict.FFTrees(type = "prob")
. -
Updated
print.FFTrees()
to display FFT #1 'in words' (from theinwords(x)
function).
-
Added
show.X
arguments toplot.FFTrees()
that allow you to selectively turn on or turn off elements when plotting anFFTrees
object. -
Added
label.tree
,label.performance
arguments toplot.FFTrees()
that allow you to specify plot (sub) labels. -
Bug fixes:
- Issues when passing an existing
FFTrees
object to a new call toFFTrees()
.
- Issues when passing an existing
-
Many additional vignettes (e.g.; Accuracy Statistics and Heart Disease Tutorial) and updates to existing vignettes.
-
Added
cost.outcomes
andcost.cues
to allow the user to specify specify the cost of outcomes and cues. Also added acost
statistic throughout outputs. -
Added
inwords()
, a function that converts anFFTrees
object to words. -
Added
my.tree
argument toFFTrees()
that allows the user to specify an FFT verbally.
E.g.,my.tree = 'If age > 30, predict True. If sex = {m}, predict False. Otherwise, predict True'
. -
Added positive predictive value
ppv
, negative predictive valuenpv
and balanced predictive valuebpv
, as primary accuracy statistics throughout. -
Added support for two FFT construction algorithms from Martignon et al. (2008):
"zigzag"
and"max"
. The algorithms are contained in the fileheuristic_algorithm.R
and can be implemented inFFTrees()
as arguments toalgorithm
.
-
Added
sens.w
argument to allow differential weighting of sensitivities and specificities when selecting and applying trees. -
Fixed bug in calculating importance weightings from
FFForest()
outputs.
-
Changed wording of statistics throughout package.
hr
(hit rate) andfar
(false alarm rate) are nowsens
for sensitivity, andspec
for specificity ($1 - $false alarm rate). -
The
rank.method
argument is now deprecated. Usealgorithm
instead. -
Added
stats
argument toplot.FFTrees()
. Whenstats = FALSE
, only the tree will be plotted without reference to any statistical output. -
Grouped all competitive algorithm results (regression, cart, random forests, support vector machines) to the new
x.fft$comp
slot rather than a separate first level list for each algorithm. Also replaced separate algorithm wrappers with one generalcomp_pred()
wrapper function. -
Added
FFForest()
, a function for creating forests of FFTs, andplot.FFForest()
, for visualizing forests of FFTs. This function is very much still in development. -
Added random forests and support vector machines for comparison in
FFTrees()
using the randomForest and e1071 packages. -
Changed logistic regression algorithm from the default
glm()
version toglmnet()
for a regularized version. -
predict.FFTrees()
now returns a vector of predictions for a specific tree rather than creating an entirely newFFTrees
object. -
You can now plot cue accuracies within the
plot.FFTrees()
function by including theplot.FFTrees(what = 'cues')
argument. This replaces the formershowcues()
function. -
Many cosmetic changes to
plot.FFTrees()
(e.g.; gray levels, more distinct classification balls). You can also control whether the results from competing algorithms are displayed or not with thecomp
argument. -
Bug-fixes:
- Fixed a bug where levels with no classifications are not plotted correctly.
-
Trees can now use the same cue multiple times within a tree. To do this, set
rank.method = "c"
andrepeat.cues = TRUE
. -
Bug-fixes:
- You can (and should!) now have a column of NAs for the criterion in test datasets to represent data where the criterion is unknown.
FFTrees()
now supports a single predictor (e.g.;formula = diagnosis ~ age
) which previously did not work.
-
Streamlined code to improve cohesion between functions. This may cause issues with
FFTrees
objects created with earlier versions of the package. They will need to be re-created. -
Updated, clearer
print.FFTrees()
method to see important info about anFFTrees
object in matrix format. -
Training and testing statistics are now in separate objects (e.g.,
data$train
vs.data$test
) to avoid confusion. -
Bug-fixes:
predict.FFTrees()
now works much better by passing a new dataset (data.test
) as a test dataset for an existingFFTrees
object.
- Bug-fixes:
- Plotting parameters
mar
andlayout
are now reset after runningplot.FFTrees()
- Plotting parameters
-
Bug-fixes:
- Plotting no longer fails when there is only one branch in the tree.
- Changed
which.tree
argument inplot.FFTrees()
totree
to conform to blog posts. predict.FFTrees()
now works better withtibble
inputs.
-
Changed the
fft
label toFFTrees
throughout the package to avoid confusion with fast fourier transform. Thus, the main tree building function is nowFFTrees()
and the new tree object class isFFTrees
.
[File NEWS.md
last updated on 2022-09-15.]