plot.FFTrees()
now has agrayscale
argument which, if TRUE, creates a grayscale plot- Added support for handling NA values.
- Increased value of
cost_cues_default
from 0 to 1, so that default cue costs correspond tomcu
. - Added
@aliases FFTrees-package
to documentation mainFFTrees()
function.
FFTrees version 2.0.0 was released on CRAN [on 2023-06-06]. This version adds functionality, improves consistency, and increases robustness.
Changes since last release:
- Enabled conversions between tree definition formats and manipulating FFT definitions:
- tree definition and conversion functions:
get_fft_df
,read_fft_df
,write_fft_df
,add_fft_df
- tree trimming functions:
add_nodes
,drop_nodes
,edit_nodes
,flip_exits
,reorder_nodes
,select_nodes
- tree definition and conversion functions:
- Growing FFTs:
- enabled
stopping.rule = "statdelta"
- fixed a bug in
fftrees_grow_fan()
that preventedifan
algorithm from stopping when finding a perfect FFT (given the currentgoal.chase
parameter)
- enabled
- Handling missing inputs (
NA
values) in data:NA
values in categorical (i.e., character/factor/logical) predictors are treated as<NA>
factor levelsNA
values in numeric predictors are either ignored (by default) or imputed (as the mean of the corresponding predictor) when creating and using FFTs to decide/predict (if possible)NA
values in the criterion variable are yet to be dealt with
-
Added utility functions (and corresponding verification functions):
get_best_tree()
retrieves the ID of the best tree in anFFTrees
object (givengoal
)get_exit_type()
converts a vector of exit descriptions into FFT exits (givenexit_types
)get_fft_df()
retrieves the tree definitions of anFFTrees
object
-
Added cost information when printing FFTs (with
print.FFTrees()
). -
Improved user feedback (by making
quiet
a list with four options). -
Increased vocabulary for interpreting verbal FFT descriptions (using
my.tree
). -
Improved documentation of included data (e.g., in
FFTrees.guide()
).
- Added global constants and utility functions.
- Added progress bar of cli package (removing dependency on progress).
- Added
exit_types
as global constant. - Improved data cleaning (consistent for training and test data).
- Revised documentation, vignettes, and tests.
The current development version of FFTrees is available at https://github.com/ndphillips/FFTrees.
FFTrees version 1.9.0 was released on CRAN [on 2023-02-08]. Apart from adding functionality and fixing minor bugs, this version improves consistency, robustness, and transparency.
Changes since last release:
- Enabled optimizing for a user-defined
my.goal
on cue and tree levels (as defined bymy.goal.fun
). - Enabled optimizing for
dprime
on cue and tree levels (by using"dprime"
asgoal.threshold
,goal.chase
, orgoal
values). - Increased vocabulary for interpreting verbal FFT descriptions (using
my.tree
). - Improved
summary.FFTrees()
function:- Included current goal and cost values (if
"cost"
occurs in goals). - Included criterion base rates (in performance statistics on train and test data).
- Included current goal and cost values (if
- Included
dprime
values in cue level statistics (x$cues$thresholds
andx$cues$stats
). - Included
dprime
values in competition statistics (x$competition$train
andx$competition$test
). - Improved user feedback on combinations of goal and cost values.
- Prepared for modular tree translation and editing functions (
util_gfft.R
). - Prepared for global tree notation separator (
fft_node_sep
). - Added decision outcome and cue costs to
asif_results
(infftrees_grow_fan()
).
- Added verification functions (for checking integrity of objects and validity of inputs).
- Deprecated the
rounding
argument ofFFTrees()
. - Re-arranged arguments of key functions (
FFTrees()
andfftrees_create()
) by functionality. - Re-arranged and cleaned code (in main and helper functions).
- Re-defined local constants as global constants (in
util_const.R
). - Revised status badges in
README
. - Tweaked plotting parameters.
- Fixed bugs and revised vignettes.
FFTrees version 1.8.0 was released on CRAN [on 2023-01-06]. This version mostly extends and improves existing functionality.
Changes since last release:
- Enabled manually defining FFTs with
tree.definitions
or using FFTs ofobject
inFFTrees()
. - Enabled setting
goal = 'dprime'
to select FFTs inFFTrees()
. - Added and improved user feedback (when
quiet = FALSE
).
- Plotting FFTs with
plot.FFTrees()
:- Show
n.per.icon
legend whenwhat = 'icontree'
. - Bug fix: Removed clipping of titles and labels.
- Tweaked spacing parameters.
- Show
-
Trimmed white space from elements in tree definitions (in
fftrees_apply.R
). -
Added check that cues occur in current data (in
verify_all_cues_in_data()
).
- Removed
anova
from stats imports. - Replaced
expect_is()
by more precise testthat inheritance functions. - Replaced crayon package by cli package.
- Revised documentation and vignettes.
- Fixed bugs and revised code to increase robustness.
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 the
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.
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 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 the
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 the
"max"
and"zigzag"
algorithms. - Minor cleanup throughout.
- Fixed warnings for CRAN submission.
FFTrees
objects now 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) (based on the classification frequency values\hi
and\fa
), are nowsens
for sensitivity andspec
for specificity (1$-$ far
), respectively. -
The
rank.method
argument is now deprecated. Usealgorithm
instead. -
Added a
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 experimental and 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 2023-09-05.]