Как использовать функцию partysplit из библиотеки partykit для разделения с несколькими уровнями факторов в одном дочернем узле

Я делаю ручной инструмент дерева решений в R и испытываю проблемы с категориальными разбиениями.

Для стола df ниже я хочу сделать разделение на переменную cat1 такие, что уровни 1, 2 и 5 находятся у ребенка 1, а уровни 3 и 4 - у ребенка 2

Есть ли способ использовать partysplit указать это?

df <- data.frame(cat1 = rep(c('A','B','C','D','E'), times = 100))

# This will give 5 child nodes with one level in each node
split1 <- partysplit(varid = 1L, index = 1:5)

# This gives an error because you have to specify index numbers from 1:number of child nodes

split2 <- partysplit(varid = 1L, index = c(1, 2, 5))

1 ответ

Решение

Для категориальных переменных проще всего установить index к вектору идентификаторов узлов каждый из уровней должен идти. В твоем случае:

split3 <- partysplit(varid = 1L, index = c(1L, 1L, 2L, 2L, 1L))

Функция character_split() затем можно использовать для извлечения имени переменной и создания подходящих меток. Это удобно для проверки правильности разделения:

character_split(split3, data = df)
## $name
## [1] "cat1"
## 
## $levels
## [1] "A, B, E" "C, D"   
Другие вопросы по тегам