Проблема с повторным разрывом цикла в R - PullRequest
0 голосов
/ 03 апреля 2019

Я занимаюсь моделированием арима, и мне нужно выполнить пошаговое обратное удаление переменных, удалив член (переменную) с наименьшим ранжированием (наивысшее p_value), а затем повторно запустив моделирование и выходные данные.

Я написал 6функции и использовать их все в функции под названием backward_stepwise.Где два входа: x = объект временного ряда и y = кадр данных (те же данные, что и для x, столбцы которого будут удалены, а затем преобразованы в объект временного ряда).

Если я отключу функцию изапускать каждую строку отдельно, она работает как положено, однако при запуске внутри функции это не так.

Я полагаю, что проблема заключается в том, где x изначально вводится как объект временного ряда.Далее в функции x переопределено x<-cond_select(x = y, y = remove_num_one)

Как мне переопределить x, поскольку текущий подход не работает?

backward_stepwise<-function(x, y){
 repeat{
  arima_result<-auto_arima(x)
  arima_pvals<-p_calc(arima_result)
  arima_outputs<-run_outputs(arima_result, arima_pvals)
  arima_ranked<-rank_pval(arima_outputs)
  remove_num_one<-remove_one(arima_ranked)
  x<-cond_select(x = y, y = remove_num_one)

  if(min(arima_ranked$rank, na.rm = TRUE) != 1){

  }

  break
 }

  return(arima_ranked)

}

Вывод представляет собой df следующим образом:

term        coef        pval   rank
intercept   1813100.88  0.000  NA
Price.Diff  -70754.08   0.015  NA
School      19136.72    0.091  NA
Easter      -56811.50   0.469  1
Christmas   -53763.55   0.046  NA
High.Week   -436343.74  0.000  NA
Low.Week    187945.17   0.005  NA

Тем не менее, цикл повторения должен удалить Пасху и повторно запустить модель и выходные данные и прерваться, когда min $ rank! = 1, поэтому столбец ранга всех NA.

Большое спасибо

1 Ответ

1 голос
/ 03 апреля 2019

Я считаю, что ваш break неуместен. Попробуйте

if(min(arima_ranked$rank, na.rm = TRUE) != 1){
  break
}

И удалите break, который находится ниже.

Итого:

backward_stepwise<-function(x, y){
  repeat{
    arima_result<-auto_arima(x)
    arima_pvals<-p_calc(arima_result)
    arima_outputs<-run_outputs(arima_result, arima_pvals)
    arima_ranked<-rank_pval(arima_outputs)
    remove_num_one<-remove_one(arima_ranked)
    x<-cond_select(x = y, y = remove_num_one)

    if(min(arima_ranked$rank, na.rm = TRUE) != 1){
      break
    }
  }

  return(arima_ranked)

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