2015-04-05 10 views
0

Я сохранил модели, созданные с помощью пакета rpart в R. Я пытаюсь получить некоторую информацию из этих сохраненных моделей; в частности от rpart.object. Хотя в документации - rpart doc - это полезно есть несколько вещей, которые не понятно о:Возврат оригинальных имен из rpart.object

  1. Как узнать, какие переменные являются категориальными и которые являются числами? В настоящее время то, что я делаю, относится к столбцу «индекс» в таблице с разбивкой. Я заметил, что только для числовых переменных запись не является целым числом. Есть ли более чистый способ сделать это?
  2. csplit матрица относится к различным значениям, которые категориальная переменная может принимать с использованием целых чисел, то есть R сопоставляет исходные имена целым числам. Есть ли способ получить доступ к этому сопоставлению? Напр. если моя исходная переменная, скажем, Country, может принимать любые значения France, Germany, Japan и т. д., матрица csplit позволяет мне знать, что определенный раскол основан на Country == 1, 2. Здесь rpart заменил ссылки на France, Germany на 1, 2 соответственно. Как получить исходные имена - France, Germany, Japan - вернуться из файла модели? Кроме того, как мне узнать, что такое сопоставление между именами и целыми числами?

ответ

2

Обычно это компонент terms, который будет иметь такую ​​информацию. See ?rpart::rpart.object.

fit <- rpart::rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) 
fit$terms # notice that the attribute dataClasses has the information 
attr(fit$terms, "dataClasses") 
#------------ 
Kyphosis  Age Number  Start 
"factor" "numeric" "numeric" "numeric" 

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

> fit <- rpart::rpart(Kyphosis ~ Age + factor(findInterval(Number,c(0,4,6,Inf))) + Start, data = kyphosis) 
> fit$csplit 
    [,1] [,2] [,3] 
[1,] 1 1 3 
[2,] 1 1 3 
[3,] 3 1 3 
[4,] 1 3 3 
[5,] 3 1 3 
[6,] 3 3 1 
[7,] 3 1 3 
[8,] 1 1 3 
> attr(fit$terms, "dataClasses") 
            Kyphosis 
            "factor" 
              Age 
            "numeric" 
factor(findInterval(Number, c(0, 4, 6, Inf))) 
            "factor" 
             Start 
            "numeric" 

Целые являются только значения переменных факторов, так что «отображение» является так же, как это было бы с as.numeric() к levels() фактора. Если бы я пытался построить матрицу символов версии fit$csplit -матрица, что заменить имена уровней в факторной переменной, это будет один путь к успеху:

> kyphosis$Numlev <- factor(findInterval(kyphosis$Number, c(0, 4, 6, Inf)), labels=c("low","med","high")) 
> str(kyphosis) 
'data.frame': 81 obs. of 5 variables: 
$ Kyphosis: Factor w/ 2 levels "absent","present": 1 1 2 1 1 1 1 1 1 2 ... 
$ Age  : int 71 158 128 2 1 1 61 37 113 59 ... 
$ Number : int 3 3 4 5 4 2 2 3 2 6 ... 
$ Start : int 5 14 5 1 15 16 17 16 16 12 ... 
$ Numlev : Factor w/ 3 levels "low","med","high": 1 1 2 2 2 1 1 1 1 3 ... 
> fit <- rpart::rpart(Kyphosis ~ Age +Numlev + Start, data = kyphosis) 
> Levels <- fit$csplit 
> Levels[] <- levels(kyphosis$Numlev)[Levels] 
> Levels 
    [,1] [,2] [,3] 
[1,] "low" "low" "high" 
[2,] "low" "low" "high" 
[3,] "high" "low" "high" 
[4,] "low" "high" "high" 
[5,] "high" "low" "high" 
[6,] "high" "high" "low" 
[7,] "high" "low" "high" 
[8,] "low" "low" "high" 

Ответ на комментарий: Если у вас есть только затем модель использует str(), чтобы посмотреть на нее. Я вижу «упорядоченный» лист в примере, который я создал, который имеет метки факторов, хранящиеся в атрибуте с именем «xlevels»:

$ ordered   : Named logi [1:3] FALSE FALSE FALSE 
    ..- attr(*, "names")= chr [1:3] "Age" "Numlev" "Start" 
- attr(*, "xlevels")=List of 1 
    ..$ Numlev: chr [1:3] "low" "med" "high" 
- attr(*, "ylevels")= chr [1:2] "absent" "present" 
- attr(*, "class")= chr "rpart" 
+0

Спасибо! - термин компонент явно дает мне типы переменных. Есть ли способ получить доступ к имени для целочисленного отображения? – abhgh

+0

Вам нужно будет понять, что вы подразумеваете под этой фразой. –

+0

Добавление деталей к вопросу. – abhgh