R中重复中断循环的问题

问题描述 投票:0回答:1

我正在进行arima建模,需要通过删除最低排名(最高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的排名列。

非常感谢

r loops break repeat
1个回答
1
投票

我相信你的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)

}
© www.soinside.com 2019 - 2024. All rights reserved.