r - R中重复中断循环的问题
问题描述
我正在进行 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
但是,重复循环应该删除 Easter 并重新运行模型和输出并在 min$rank != 1 时中断,因此是所有 NA 的排名列。
非常感谢
解决方案
我相信你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)
}
推荐阅读
- spring-boot - 我无法使用 Spring Boot 2.2.8 和 Undertow 加载 keystore.p12 或 .jks
- php - 在 PHP 中总是获得德语月份名称
- kotlin - 如何将 1 默认设置为 001
- docker - Compose 文件 '.\docker-compose.yml' 无效,因为:services.web.build 包含无效类型,它应该是字符串或对象
- c# - 如何在实体框架中创建对象列表作为外键并填充数据库
- windows - SignTool 报告的 Windows 10 驱动程序没有签名,但已签名
- vb.net - VB.NET 远程服务器返回错误:(403) Forbidden A FILE DOWNLOAD APP
- amazon-web-services - AWS 应用程序负载均衡器 - 将非 www 重定向到 https://www
- css - 使用css在react中单击时如何更改按钮的样式?
- javascript - 如何从服务器下载 js 文件并运行它?