inst/rmd/AmuaExample/DraculaParty_Export/main.R

"
This code was auto-generated by Amua (https://github.com/zward/Amua)
Code generated: Wed Mar 11 14:09:06 CDT 2020
Model name: DraculaParty
Model type: Decision Tree
Simulation type: Cohort
Created by: szu-yukao
Created: Wed Mar 11 11:22:40 CDT 2020
Version created: 0.2.8
Modified by: szu-yukao
Modified: Wed Mar 11 14:08:23 CDT 2020
Version modified: null
"

### Define Node Class
setRefClass("Node",
  fields = list(name="character", prob="numeric", 
             costCost="numeric", payoffCost="numeric", expectedCost="numeric", 
             costBlood="numeric", payoffBlood="numeric", expectedBlood="numeric", 
             costHospitalization="numeric", payoffHospitalization="numeric", expectedHospitalization="numeric", 
             children="vector")
)

### Define Run tree
evaluateNode <- function(curNode) {
  # Recursive function to average and roll-back tree
  #
  # Args:
  #   curNode: Current node.  Children will be evaluated recursively.

  numChildren <- length(curNode$children)
  if (numChildren == 0) {
    curNode$expectedCost <- curNode$payoffCost + curNode$costCost
    curNode$expectedBlood <- curNode$payoffBlood + curNode$costBlood
    curNode$expectedHospitalization <- curNode$payoffHospitalization + curNode$costHospitalization
  } else {  # Evaluate children
    curNode$expectedCost <- curNode$costCost
    curNode$expectedBlood <- curNode$costBlood
    curNode$expectedHospitalization <- curNode$costHospitalization
    for (i in 1:numChildren) {
      child <- tree[[curNode$children[i]]]  # Get child
      evaluateNode(child)
      curNode$expectedCost <- curNode$expectedCost + (child$prob * child$expectedCost)
      curNode$expectedBlood <- curNode$expectedBlood + (child$prob * child$expectedBlood)
      curNode$expectedHospitalization <- curNode$expectedHospitalization + (child$prob * child$expectedHospitalization)
    }
  }
}

### Define display results
displayEV <- function(curNode) {
  # Recursive function to display results
  #
  # Args:
  #   curNode: Current node.  Child results will be displayed recursively.
  numChildren <- length(curNode$children)
  if (numChildren > 0) {
    for(i in 1:numChildren) {
      curChild <- tree[[curNode$children[i]]]
      print(paste(curChild$name, curChild$expectedCost, curChild$expectedBlood, curChild$expectedHospitalization))
      displayEV(curChild)
    }
  }
}


### Define parameters
p_bite <- 0.25  # Expression: 0.25
p_inf_bitten <- 0.5  # Expression: 0.5
p_inf_not_allergic <- 0.4  # Expression: 0.4
p_inf_bitten_UA <- 0.05  # Expression: 0.05
C_hospital <- 500.0  # Expression: 500
C_donothing <- 5.0  # Expression: 5
C_drug <- 10.0  # Expression: 10
C_drug_UA <- 0.5  # Expression: 0.5
p_hospital <- 0.66  # Expression: 0.66
p_not_allergic <- 0.95  # Expression: 0.95
red_blood <- 0.1  # Expression: 0.1
val_blood <- 470.0  # Expression: 470

### Create tree
Root <- new("Node", name="Root", children=c(2, 3, 4))
Donothing <- new("Node", name="Donothing", prob=0, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(5, 6))
Targetedantibiotics <- new("Node", name="Targetedantibiotics", prob=0, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(11, 12))
Universalantibiotics <- new("Node", name="Universalantibiotics", prob=0, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(19, 20))
Bitten <- new("Node", name="Bitten", prob=p_bite, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(7, 8))
Notbitten <- new("Node", name="Notbitten", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing, payoffBlood=0, payoffHospitalization=0)
Infection <- new("Node", name="Infection", prob=p_inf_bitten, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(9, 10))
Noinfection <- new("Node", name="Noinfection", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing, payoffBlood=val_blood, payoffHospitalization=0)
Hospitalization <- new("Node", name="Hospitalization", prob=p_hospital, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_hospital+C_donothing, payoffBlood=val_blood*(1-red_blood), payoffHospitalization=1)
Nohospitalization <- new("Node", name="Nohospitalization", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing, payoffBlood=val_blood, payoffHospitalization=0)
Bitten1 <- new("Node", name="Bitten1", prob=p_bite, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(13, 14))
Notbitten1 <- new("Node", name="Notbitten1", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing, payoffBlood=0, payoffHospitalization=0)
Notallergic <- new("Node", name="Notallergic", prob=p_not_allergic, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(15, 16))
Allergic <- new("Node", name="Allergic", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_hospital+C_donothing+C_drug, payoffBlood=0, payoffHospitalization=1)
Infection1 <- new("Node", name="Infection1", prob=p_inf_not_allergic, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(17, 18))
Noinfection1 <- new("Node", name="Noinfection1", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing+C_drug, payoffBlood=val_blood, payoffHospitalization=0)
Hospitalization1 <- new("Node", name="Hospitalization1", prob=p_hospital, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_hospital+C_donothing+C_drug, payoffBlood=val_blood*(1-red_blood), payoffHospitalization=1)
Nohospitalization1 <- new("Node", name="Nohospitalization1", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing+C_drug, payoffBlood=val_blood, payoffHospitalization=0)
Notallergic1 <- new("Node", name="Notallergic1", prob=p_not_allergic, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(21, 22))
Allergic1 <- new("Node", name="Allergic1", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_hospital+C_donothing+C_drug_UA, payoffBlood=0, payoffHospitalization=1)
Bitten2 <- new("Node", name="Bitten2", prob=p_bite, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(23, 24))
Notbitten2 <- new("Node", name="Notbitten2", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing+C_drug_UA, payoffBlood=0, payoffHospitalization=0)
Infection2 <- new("Node", name="Infection2", prob=p_inf_bitten_UA, costCost=0, costBlood=0, costHospitalization=0, payoffCost=0, payoffBlood=0, payoffHospitalization=0, children=c(25, 26))
Noinfection2 <- new("Node", name="Noinfection2", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing+C_drug_UA, payoffBlood=val_blood, payoffHospitalization=0)
Hospitalization2 <- new("Node", name="Hospitalization2", prob=p_hospital, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_hospital+C_donothing+C_drug_UA, payoffBlood=val_blood*(1-red_blood), payoffHospitalization=1)
Nohospitalization2 <- new("Node", name="Nohospitalization2", prob=-1, costCost=0, costBlood=0, costHospitalization=0, payoffCost=C_donothing+C_drug_UA, payoffBlood=val_blood, payoffHospitalization=0)
tree <- c(Root, Donothing, Targetedantibiotics, Universalantibiotics, Bitten, Notbitten, Infection, Noinfection, Hospitalization, Nohospitalization, Bitten1, Notbitten1, Notallergic, Allergic, Infection1, Noinfection1, Hospitalization1, Nohospitalization1, Notallergic1, Allergic1, Bitten2, Notbitten2, Infection2, Noinfection2, Hospitalization2, Nohospitalization2)

### Define complementary probs
Notbitten$prob <- 1.0 - Bitten$prob
Noinfection$prob <- 1.0 - Infection$prob
Nohospitalization$prob <- 1.0 - Hospitalization$prob
Notbitten1$prob <- 1.0 - Bitten1$prob
Allergic$prob <- 1.0 - Notallergic$prob
Noinfection1$prob <- 1.0 - Infection1$prob
Nohospitalization1$prob <- 1.0 - Hospitalization1$prob
Allergic1$prob <- 1.0 - Notallergic1$prob
Notbitten2$prob <- 1.0 - Bitten2$prob
Noinfection2$prob <- 1.0 - Infection2$prob
Nohospitalization2$prob <- 1.0 - Hospitalization2$prob

### Run tree
evaluateNode(tree[[1]])

### Display output for each strategy
numStrategies <- length(Root$children)
for(i in 1:numStrategies) {
  curNode <- tree[[Root$children[i]]]
  print(paste("Strategy:", curNode$name, curNode$expectedCost, curNode$expectedBlood, curNode$expectedHospitalization))
	 print("Children...")
	 displayEV(curNode)
}
syzoekao/CEAutil documentation built on Oct. 31, 2021, 12:29 a.m.