Skip to content

Instantly share code, notes, and snippets.

@ribsy
ribsy / htma_cyberfunctions
Created April 5, 2023 09:15
R Code For Chapter 10 HTMA Cybersecurity Risk v 2
library(tidyverse)
library(bayestestR)
library(bayesAB)
# See Manifesto Functions at www.themetricsmanifesto.com
# Put in your same working director
source("manifesto_functions.R")
bayesPhishArrive <- function(prior_vals = c(5,1), total_vals = c(87,12)){
# Package names
packages <- c("readr", "tidyverse", "lubridate", "survival", "survminer", "shiny", "shinydashboard","reactable","shinyalert")
# Install packages not yet installed
installed_packages <- packages %in% rownames(installed.packages())
if (any(installed_packages == FALSE)) {
install.packages(packages[!installed_packages])
}
source("helper_functions.R")
#30MB File Upload
options(shiny.maxRequestSize = 30*1024^2)
ui <- dashboardPage(
title="Vuln Burndown",
dashboardHeader(title = "Vulnerability Burndown"),
source("manifesto_functions.R")
################
### Introduction
patches <- 0:20
average <- 23/4
plot(p, dpois(patches, average), type="h", lwd=3,
ylab="Probability Of Emergency Patch",
xlab="Count Of Emergency Patches")
source("manifesto_functions.R")
### OPTIONAL A/B Case Study
### Code Slide #1
# Declare list to hold configurations
base_configs <- list()
# Amount of simulation
base_configs["n_draws"] <- 100000
source("manifesto_functions.R")
#########################
### Beta-Binomial Example
# Make grid of 10K sequential possibilities between 0 to 1
plausible_rates <- data.frame(
possible_grid = seq(from = 0, to = 1, length = 10000))
source("manifesto_functions.R")
######################
### Naive Escape Rates
MakeBetaGraph(10, 100, xlab = "Rate", ylab = "Strength",
tlab = "January Escape Rates",
slab = "Mean and Highest Density Interval", xadj = .001)
source("manifesto_functions.R")
###########################
### Non-Bayesian Wait Times
# Number of product teams
group_count = 10
# Empty Data Frame to hold results
dt <- tibble()
source("manifesto_functions.R")
##############################################
### Introduction: Random Bombs and Horse Kicks
# Bomb Narrative
bombs <- tibble(hits = c(0,1,2,3,4,5),
frequency = c(229, 211, 93, 35, 7, 1),
ratio = frequency/sum(frequency))
bombs
source("manifesto_functions.R")
##################
### Get Small Data
#Engineer One and Two Remediation Rate Beliefs
eng_one <- c(4,7) #Median and 90% Stretch
eng_two <- c(2,4)