-
FFTrees is an R package to create and visualize fast-and-frugal decision trees (FFTs) like the one below that predicts heart disease.
-
Additional information about FFTs, and the FFTrees package can be found at Phillips, Neth, Woike & Gaissmaier, 2017. For seminal papers on FFTs, consult Martignon, Katsikopoulos & Woike, 2008 and Martignon, Vitouch, Takezawa & Forster, 2003
# Install FFTrees from CRAN
install.packages("FFTrees")
# Load package
library(FFTrees)
# Create an FFTrees object from the heartdisease data
heart.fft <- FFTrees(formula = diagnosis ~.,
data = heart.train,
data.test = heart.test)
# Plot the best tree applied to the test data
plot(heart.fft,
data = "test",
main = "Heart Disease",
decision.labels = c("Healthy", "Disease"))
1.4.0
- 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
.
1.3.6
- Bug fixes.
1.3.5
- Bug fixes.
1.3.4
-
Added class probability predictions with
predict.FFTrees(type = "prob")
-
Updated
print.FFTrees()
to display FFT #1 'in words' (from theinwords(x)
function)
1.3.3
-
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 to FFTrees().
1.3.0
-
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 a newcost
statistic throughout outputs. -
Added
inwords()
, a function that converts an FFTrees 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
.
1.2.3
-
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.
1.2.0
-
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 therandomForest
ande1071
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 new FFTrees 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.
1.1.7
-
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.
1.1.6
-
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 always in seperate objects (e.g.;
data$train
,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.
1.1.5
- Bug-fixes
- Plotting parameters
mar
andlayout
are now reset after runningplot.FFTrees()
- Plotting parameters
1.1.4
-
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