FFTrees version 2.1.0 was released on CRAN [on 2025-09-03]. This version reduces non-essential functionality, increases robustness, and fixes some bugs.
Plotting:
plot.FFTrees() now labels row of 2x2 confusion matrix
as “Prediction” when using “test” data.plot.FFTrees() now has a truth.labels
argument which, if set, distinguishes labels of true (signal vs. noise)
cases from decision outcomes.plot.FFTrees() now has a grayscale
argument which, if TRUE, creates a gray scale plot.Decision costs:
cost_cues_default from 0 to 1, so
that default cue costs correspond to mcu.@aliases FFTrees-package to documentation of main
FFTrees() function.data_old folder.The current development version of FFTrees is available at https://github.com/ndphillips/FFTrees.
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:
get_fft_df,
read_fft_df, write_fft_df,
add_fft_dfadd_nodes,
drop_nodes, edit_nodes,
flip_exits, reorder_nodes,
select_nodesstopping.rule = "statdelta"fftrees_grow_fan() that prevented
ifan algorithm from stopping when finding a perfect FFT
(given the current goal.chase parameter)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
withget_best_tree() retrieves the ID of the best tree in an
FFTrees object (given goal)get_exit_type() converts a vector of exit descriptions
into FFT exits (given exit_types)get_fft_df() retrieves the tree definitions of an
FFTrees objectprint.FFTrees()).quiet a list with
four options).my.tree).FFTrees.guide()).exit_types as global constant.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:
my.goal on cue
and tree levels (as defined by my.goal.fun).dprime on cue and tree levels
(by using "dprime" as goal.threshold,
goal.chase, or goal values).my.tree).summary.FFTrees() function:
"cost" occurs
in goals).dprime values in cue level statistics
(x$cues$thresholds and x$cues$stats).dprime values in competition statistics
(x$competition$train and
x$competition$test).util_gfft.R).fft_node_sep).asif_results
(in fftrees_grow_fan()).rounding argument of
FFTrees().FFTrees() and
fftrees_create()) by functionality.util_const.R).README.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:
tree.definitions or
using FFTs of object in FFTrees().goal = 'dprime' to select FFTs in
FFTrees().quiet = FALSE).plot.FFTrees():
n.per.icon legend when
what = 'icontree'.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()).
anova from stats
imports.expect_is() by more precise
testthat inheritance functions.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() and print.FFTrees()):
what = 'all'
vs. what = 'tree' and what = 'icontree').data.col,
font, adj) to text of panel titles.FFTrees object x (to
allow re-assigning to global x when using new test
data).Added wacc to measures computed for competing
algorithms.
Plotting with plot.FFTrees():
main
argument.stats argument.helper_plot.R.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:
print.FFTrees():
data argument to print an FFT’s training
performance (by default) or prediction performance (when test data is
available).tree to "best.train" or
"best.test" (as when plotting FFTs).bacc or wacc in
Accuracy section (and sens.w, if deviating from
the default of 0.50).plot.FFTrees():
what = 'ROC' analogous to
what = 'cues'.bacc or wacc in
Accuracy section (and sens.w value, if deviating
from the default of 0.50).tree to
"best.train" or "best.test".showcues():
x as cue ranking criterion
(rather than always using wacc).sens.w value when
goal == 'wacc'.top < 10.data argument (as
FFTrees objects only contain cue training data).alt.goal argument (to allow ranking cue
accuracies by alternative goals).quiet argument (to hide feedback messages).summary.FFTrees():
definitions and stats (as a
list).my.tree or
fftrees_wordstofftrees().my.tree or
fftrees_wordstofftrees().store.data argument of
FFTrees().FFTrees version 1.6.6 was released on CRAN [on 2022-07-18].
Changes since last release:
plot.FFTrees() to not display plots
properly.plot.FFTrees() no longer saves graphic params changed
in par().plot.FFTRrees(): When test = 'best.test'
and no test data are provided, the information text is no returned with
message() rather than print().plot.FFTrees() are now returned as
warnings, not messages."max" and
"zigzag" algorithms.FFTrees objects now have a nicer internal
structure.cost.cues and
cost.outcomes are now specified as named lists to avoid
confusion.goal and
goal.chase.Added class probability predictions with
predict.FFTrees(type = "prob").
Updated print.FFTrees() to display FFT #1 ‘in words’
(from the inwords(x) function).
Added show.X arguments to
plot.FFTrees() that allow you to selectively turn on or
turn off elements when plotting an FFTrees object.
Added label.tree, label.performance
arguments to plot.FFTrees() that allow you to specify plot
(sub) labels.
Bug fixes:
FFTrees object to a new
call to FFTrees().Many additional vignettes (e.g.; Accuracy Statistics and Heart Disease Tutorial) and updates to existing vignettes.
Added cost.outcomes and cost.cues to
allow the user to specify specify the cost of outcomes and cues. Also
added a cost statistic throughout outputs.
Added inwords(), a function that converts an
FFTrees object to words.
Added my.tree argument to FFTrees()
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 value npv and balanced predictive value
bpv, 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 file heuristic_algorithm.R
and can be implemented in FFTrees() as arguments to
algorithm.
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) and far (false alarm rate)
(based on the classification frequency values hi
and fa), are now sens for sensitivity
and spec for specificity (1 \(-\) far),
respectively.
The rank.method argument is now deprecated. Use
algorithm instead.
Added a stats argument to
plot.FFTrees(). When stats = 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
general comp_pred() wrapper function.
Added FFForest(), a function for creating forests of
FFTs, and plot.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 to glmnet() for a regularized
version.
predict.FFTrees() now returns a vector of
predictions for a specific tree rather than creating an entirely new
FFTrees object.
You can now plot cue accuracies within the
plot.FFTrees() function by including the
plot.FFTrees(what = 'cues') argument. (This replaces the
former showcues() 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
the comp argument.
Bug-fixes:
Trees can now use the same cue multiple times within a tree. To
do this, set rank.method = "c" and
repeat.cues = TRUE.
Bug-fixes:
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 an FFTrees 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 existing
FFTrees object.mar and layout are now
reset after running plot.FFTrees()which.tree argument in
plot.FFTrees() to tree to conform to blog
posts.predict.FFTrees() now works better with
tibble inputs.fft label to FFTrees
throughout the package to avoid confusion with fast fourier transform.
Thus, the main tree building function is now FFTrees() and
the new tree object class is FFTrees.[File NEWS.md last updated on 2025-09-03.]