[英]Conditional execution in R based on decision tree
我有一個CSV文件,其中包含預測變量,例如血壓(BP),心率(HR),體重,體表面積(BSA),體重指數(BMI),年齡和性別。
對於這些變量,有一種基於決策樹的算法,可將這些患者分為高風險是/否類別。 因此,HIGH_RISK是CSV中的最后一列,當前為空。 現在,即使我可以對單個主題(CSV文件中的單個行)使用該算法來填充HIGH_RISK列,但由於行數太多,因此手動進行操作是不切實際的。
如果它是簡單的加法,減法,乘法等,那么我將在R甚至Excel中完成它。 但是由於該算法涉及分支決策樹,因此我不確定該如何做。 但是我可以肯定,因為R非常強大。 有什么建議么?
決策樹與此類似: http : //www.scielo.br/img/revistas/sa/v70n6/a01fig04.jpg
您可以使用我為您編寫的此輔助函數:
decisionTree <- function(dataframe, lst) {
if (!is.recursive(lst)) return(lst)
values <- numeric(nrow(dataframe))
indices <- eval(parse(text = names(lst)[1]), dataframe)
values[indices] <- decisionTree(dataframe[indices, ], lst[[1]])
values[!indices] <- decisionTree(dataframe[!indices, ], lst[[2]])
values
}
通用格式是將data.frame
作為第一個參數傳遞, data.frame
表示決策樹的嵌套列表作為第二個參數傳遞,格式如下:
list("first_variable > 0.3" =
list("second_variable > 0.5" = 1,
"second_variable <= 0.5" = list(
"third_variable > 0.3" = 0,
1) # naming the negated condition is optional
),
"first_variable <= 0.3" = 0)
iris$foo <- decisionTree(iris, list("Sepal.Length > 5" = list("Petal.Length > 1.3" = 1, 0), 0))
head(iris) # All entries with Sepal.Length > 5 and Petal.Length > 1.3 will contain a 1.
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species foo
# 1 5.1 3.5 1.4 0.2 setosa 1
# 2 4.9 3.0 1.4 0.2 setosa 0
# 3 4.7 3.2 1.3 0.2 setosa 0
# 4 4.6 3.1 1.5 0.2 setosa 0
# 5 5.0 3.6 1.4 0.2 setosa 0
# 6 5.4 3.9 1.7 0.4 setosa 1
對於您提供的圖形,第二個參數如下所示:
list("Ts_Armpit > 35.1" = 1,
list("Ts_Breast <= 0.39" = list("Ts_Croup <= 28.9" = 1, 0),
list("Ts_Groin <= 35.1" = 1, list("Ts_Armpit <= 33.7" = 1, 0))))
其中1
表示不適, 0
表示舒適。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.