https://github.com/bertcarnell/tornado
tornado plots for model sensitivity analysis
https://github.com/bertcarnell/tornado
explanability regression sensitivity-analysis
Last synced: 3 months ago
JSON representation
tornado plots for model sensitivity analysis
- Host: GitHub
- URL: https://github.com/bertcarnell/tornado
- Owner: bertcarnell
- License: gpl-3.0
- Created: 2019-02-17T02:31:51.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-08-03T20:35:42.000Z (10 months ago)
- Last Synced: 2025-02-10T21:48:18.550Z (3 months ago)
- Topics: explanability, regression, sensitivity-analysis
- Language: R
- Homepage: https://bertcarnell.github.io/tornado/
- Size: 10 MB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.Rmd
- Changelog: ChangeLog
- License: LICENSE
Awesome Lists containing this project
README
---
title: "tornado"
output:
md_document:
variant: gfm
---
![]()
© Copyright 2024 Robert Carnell```{r setup, echo=FALSE, include=FALSE}
require(knitr)
require(survival)
require(caret)
require(randomForest)
require(tornado)
knitr::opts_chunk$set(fig.path = "man/figures/")
``````{r badges, echo=FALSE, results="asis"}
cat(paste0("|",
paste0(
c("Actions", "Code Coverage", "Website", "Downloads", "CRAN"),
collapse="|"),
"|\n"))
cat(paste0("|", paste0(rep(":---:", 5), collapse="|"), "|\n"))
cat(paste0("|",
paste0(c("[](https://github.com/bertcarnell/tornado/actions/workflows/r-cmd-check.yml)",
"[](https://codecov.io/github/bertcarnell/tornado?branch=master)",
"[](https://bertcarnell.github.io/tornado/)",
"[](https://cran.r-project.org/package=tornado)",
"[](https://cran.r-project.org/package=tornado)"),
collapse="|"),
"|"))
```# tornado
`tornado` plots for model sensitivity analysis.
[website](https://bertcarnell.github.io/tornado/)
## Installation
You can also install the development version of `tornado` from github with:
```{r install2, echo=TRUE, eval=FALSE}
if (!require(devtools)) install.packages("devtools")
devtools::install_github("bertcarnell/tornado")
```## Quick Start - Torndao Plots
### Linear Models
```{r random, echo=TRUE}
lm1 <- lm(mpg ~ cyl*wt*hp, data = mtcars)
torn1 <- tornado(lm1, type = "PercentChange", alpha = 0.10)
plot(torn1, xlabel = "MPG", geom_bar_control = list(width = 0.5))
```### Generalized Linear Models
Plots can also be created for the range of the input data
```{r glm_section, echo=TRUE}
glm2 <- glm(vs ~ wt + disp + cyl, data = mtcars, family = binomial(link = "logit"))
torn2 <- tornado(glm2, type = "ranges", alpha = 0.10)
plot(torn2, xlabel = "Probability of Straight Engine", geom_bar_control = list(width = 0.5))
```Plots can include factors and percentiles of the data as well.
```{r glm_factor_section, echo=TRUE}
mydata <- mtcars
mydata$am <- factor(mtcars$am)
mydata$vs <- factor(mtcars$vs)
glm2 <- glm(mpg ~ wt + cyl + am + vs, data = mydata, family = gaussian)
torn2 <- tornado(glm2, type = "percentiles", alpha = 0.10)
plot(torn2, xlabel = "MPG",
geom_bar_control = list(width = 0.5),
sensitivity_colors = c("#E41A1C", "#377EB8"),
geom_point_control = list(fill = "red", col = "red", size = 3))
```### Censored Data
Accelerated Failure Model
```{r censored_section, echo=TRUE}
survreg3 <- survival::survreg(survival::Surv(futime, fustat) ~ ecog.ps + rx + age + resid.ds,
survival::ovarian, dist = 'weibull', scale = 1)
torn3 <- tornado(survreg3, modeldata = survival::ovarian, type = "PercentChange", alpha = 0.10)
plot(torn3, xlabel = "Survival Time", geom_bar_control = list(width = 0.5))
```Cox Proportional Hazard Model with 2 Standard Deviation bars
```{r censored_coxph_setion, echo=TRUE}
coxph4 <- survival::coxph(survival::Surv(stop, event) ~ rx + size + number,
survival::bladder)
torn4 <- tornado(coxph4, modeldata = survival::bladder, type = "StdDev",
alpha = 2)
plot(torn4, xlabel = "Risk", geom_bar_control = list(width = 0.5))
```### Machine Learning Models from caret::train
The `plot` method can also return a ggplot object
```{r train_section, echo = TRUE}
mydat <- mtcars
mydat$am <- factor(mydat$am, labels = c("A", "M"))
mydat$vs <- factor(mydat$vs, labels = c("V", "S"))
mydat$cyl <- factor(mydat$cyl)
mydat$gear <- factor(mydat$gear)
mydat$carb <- factor(mydat$carb)gtest <- caret::train(x = subset(mydat, select = -vs), y = mydat$vs, method = "rf")
torn <- tornado(gtest, type = "percentiles", alpha = 0.10, class_number = 1)
g <- plot(torn, plot = FALSE, xlabel = "Probability of Class V-shaped Engine", geom_bar_control = list(width = 0.5))
g <- g + ggtitle("Classifier caret::train randomforest, 90-110% of the mean in each variable")
plot(g)
```