R 中重复中断循环的问题
Issue with repeat break loop in R
我正在进行 arima 建模,需要通过移除最低 运行ked(最高 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
但是,重复循环应该删除 Easter 并重新 运行 模型和输出,并在 min$运行k != 1 时中断,因此所有 NA 的 运行k 列.
非常感谢
我认为您的 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)
}
我正在进行 arima 建模,需要通过移除最低 运行ked(最高 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
但是,重复循环应该删除 Easter 并重新 运行 模型和输出,并在 min$运行k != 1 时中断,因此所有 NA 的 运行k 列.
非常感谢
我认为您的 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)
}