An open API service indexing awesome lists of open source software.

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

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("[![R-CMD-CHECK](https://github.com/bertcarnell/tornado/actions/workflows/r-cmd-check.yml/badge.svg)](https://github.com/bertcarnell/tornado/actions/workflows/r-cmd-check.yml)",
"[![Coverage status](https://codecov.io/gh/bertcarnell/tornado/branch/master/graph/badge.svg)](https://codecov.io/github/bertcarnell/tornado?branch=master)",
"[![](https://img.shields.io/badge/pkgdown-tornado-blue.svg)](https://bertcarnell.github.io/tornado/)",
"[![](https://cranlogs.r-pkg.org/badges/tornado)](https://cran.r-project.org/package=tornado)",
"[![CRAN status](https://www.r-pkg.org/badges/version/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)
```