-
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.cuesandcost.outcomesare now specified as named lists to avoid confusion. - New cost outputs separate costs from cues, outcomes, and total costs.
- Changes to input defaults for
goalandgoal.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.Xarguments toplot.FFTrees()that allow you to selectively turn on or turn off elements when plotting anFFTreesobject. -
Added
label.tree,label.performancearguments 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.outcomesandcost.cuesto allow the user to specify specify the cost of outcomes and cues. Also added a newcoststatistic throughout outputs. -
Added
inwords(), a function that converts an FFTrees object to words. -
Added
my.treeargument 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 valuenpvand balanced predictive valuebpvas 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.Rand can be implemented inFFTrees()as arguments toalgorithm.
1.2.3
-
Added
sens.wargument 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 nowsensfor sensitivity, andspecfor specificity (1 - false alarm rate) -
The
rank.methodargument is now deprecated. Usealgorithminstead. -
Added
statsargument 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$compslot 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 therandomForestande1071packages. -
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 thecompargument. -
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
marandlayoutare 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.treeargument inplot.FFTrees()totreeto conform to blog posts. predict.FFTrees()now works better withtibbleinputs.
-
Changed the
fftlabel toFFTreesthroughout the package to avoid confusion with fast fourier transform. Thus, the main tree building function is nowFFTrees()and the new tree object class isFFTrees
