Я пытаюсь получить значение cp
, для которого xerror
является наименьшим.Я установил модель, как показано ниже, и напечатал cptable.Поскольку список очень длинный, я отобразил только первые 20 строк.
>printcp(RT_model)
Regression tree:
rpart(formula = BW ~ ., data = train, method = "anova",
control = rpart.control(minsplit = 0, minbucket = 1, cp = -1))
Variables actually used in tree construction:
[1] age black boy cigar collgrad hsgrad married
natal2 natal3 nosmoke novisit somecoll wtgain
Root node error: 5.2267e+10/159689 = 327304
n= 159689
CP nsplit rel error xerror xstd
1 4.3760e-02 0 1.00000 1.00001 0.0054277
2 1.6392e-02 1 0.95624 0.95661 0.0050844
3 1.1851e-02 2 0.93985 0.94067 0.0049671
4 1.1133e-02 3 0.92800 0.92446 0.0049150
5 1.0735e-02 4 0.91686 0.91709 0.0048956
6 6.1850e-03 5 0.90613 0.90692 0.0048695
7 3.3414e-03 6 0.89994 0.90054 0.0048561
8 2.6481e-03 7 0.89660 0.89680 0.0048502
9 2.4185e-03 8 0.89395 0.89441 0.0048449
10 2.1499e-03 9 0.89154 0.89232 0.0048248
11 2.0960e-03 10 0.88939 0.88993 0.0048055
12 1.3600e-03 11 0.88729 0.88822 0.0048031
13 1.3513e-03 12 0.88593 0.88616 0.0047898
14 1.2209e-03 13 0.88458 0.88600 0.0047862
15 9.2359e-04 14 0.88336 0.88454 0.0047731
16 9.1119e-04 15 0.88243 0.88364 0.0047679
17 7.8948e-04 16 0.88152 0.88300 0.0047662
18 7.4059e-04 17 0.88073 0.88221 0.0047638
19 6.8623e-04 18 0.87999 0.88142 0.0047610
20 6.7196e-04 19 0.87931 0.88077 0.0047620
...
[ erreichte getOption("max.print") -- 25545 Zeilen ausgelassen ]
Поскольку существует так много значений:
Чтобы получить cp
с наименьшими значениями xerror
,Я использую следующий код:
minCP <- RT_model$cptable[which.min(RT_model$cptable[,"xerror"]), "CP"]
Соответствующий xerror
из minCP
равен: 0.8690961 xerror
Теперь я хочу применить правило под названием "минимальный ксеррор+ стандартное отклонение "
Соответствующее стандартное отклонение minCP
равно 0.004700524 xstd
Мне нужно наибольшее значение в таблице, равное или меньшее, чем новое xerror
называется xerror_new (0.8690961 xerror + 0.004700524 xstd = 0.8737966
).Поэтому мне нужно наибольшее значение столбца xerror
в cptable, которое меньше или равно 0,8737966
Как получить значение cp
в cptable, в котором ксеррор меньше или равенxerror_new
значение 0,8737966?
Я попробовал следующее, но это не удалось.
min_xerror <- RT_model$cptable[which.min(RT_model$cptable[,"xerror"]),
"xerror"]
это дало мне минимальный xerror
в таблице.И следующее дает мне соответствующий минимальный xstd
min_xstd <- RT_model$cptable[which.min(RT_model$cptable[,"xerror"]), "xstd"]
здесь я применяю правило "минимального ксеррор + стандартное отклонение":
xerror_new <- min_xerror + min_xstd
до здесь я получаю значения и всеЭто хорошо.Отсюда я борюсь:
xerror_plus_xstd <- RT_model$cptable[which.max(RT_model$cptable["xerror"<=
min_xerror_xstd] & RT_model$cptable["xerror" >= min_xerror]), "xerror"]
или я попробовал это:
xerror_plus_xstd <- RT_model$cptable[which.max(RT_model$cptable["xerror"<= min_xerror_xstd]), "xerror"]
Оба не дают результата.
Как я могу получить это значение?Спасибо.