Как получить конкретное значение из кадра данных в R - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь получить значение 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"]

Оба не дают результата.

Как я могу получить это значение?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...