Return 列表中具有最低值的模型
Return Model with lowest value from list
我有下面的代码,我认为它会为给定范围内的一组参数创建每个组合,然后为这些顺序参数组合创建所有 Arima 模型,然后为所有模型创建预测,然后计算 mape, (这是一个误差度量),对于每个预测。
我很好奇我是否正确使用 lapply 来预测模型并计算每个模型的地图?我没怎么用过lapply。
对于最后一步,我想 return 创建具有最低 mape 的预测的模型或订单参数。如果有人可以建议如何做到这一点,或者指出一个类似的例子,我将不胜感激。
代码:
library("fpp")
## Partition Data
tsTrain <- window(hsales,end=1989.99)
tsTest <- window(hsales,start=1990)
## Set Ranges for parameters
pvar<-1:10
dvar<-1:2
qvar<-1:7
## Create all combinations of parameters
OrderGrid<-expand.grid(pvar,dvar,qvar)
## Create model for each combination of parameters
aFit <- function(a,b,c) {Arima(tsTrain, order=c(a,b,c),method="ML")}
ModFit <- do.call(Vectorize(aFit, SIMPLIFY=FALSE), unname(OrderGrid))
## Forecast Models
funcCast<-function(x){forecast(x,h=71)$mean}
ModCast<-lapply(ModFit,funcCast)
## Calculate Mape for Models
ModAcc<-function(x){accuracy(x,tsTest)[1,5]}
TestAcc<-lapply(ModCast,ModAcc)
您可以通过以下方式return您的模型
Acc_res<-do.call(rbind,TestAcc)
res_num <- which(Acc_res==min(Acc_res))
res_model<-ModFit[[res_num]]
class(res_model)
让我知道这是否是您所需要的。最后一行只是为了验证确实是对的 class.
我有下面的代码,我认为它会为给定范围内的一组参数创建每个组合,然后为这些顺序参数组合创建所有 Arima 模型,然后为所有模型创建预测,然后计算 mape, (这是一个误差度量),对于每个预测。
我很好奇我是否正确使用 lapply 来预测模型并计算每个模型的地图?我没怎么用过lapply。
对于最后一步,我想 return 创建具有最低 mape 的预测的模型或订单参数。如果有人可以建议如何做到这一点,或者指出一个类似的例子,我将不胜感激。
代码:
library("fpp")
## Partition Data
tsTrain <- window(hsales,end=1989.99)
tsTest <- window(hsales,start=1990)
## Set Ranges for parameters
pvar<-1:10
dvar<-1:2
qvar<-1:7
## Create all combinations of parameters
OrderGrid<-expand.grid(pvar,dvar,qvar)
## Create model for each combination of parameters
aFit <- function(a,b,c) {Arima(tsTrain, order=c(a,b,c),method="ML")}
ModFit <- do.call(Vectorize(aFit, SIMPLIFY=FALSE), unname(OrderGrid))
## Forecast Models
funcCast<-function(x){forecast(x,h=71)$mean}
ModCast<-lapply(ModFit,funcCast)
## Calculate Mape for Models
ModAcc<-function(x){accuracy(x,tsTest)[1,5]}
TestAcc<-lapply(ModCast,ModAcc)
您可以通过以下方式return您的模型
Acc_res<-do.call(rbind,TestAcc)
res_num <- which(Acc_res==min(Acc_res))
res_model<-ModFit[[res_num]]
class(res_model)
让我知道这是否是您所需要的。最后一行只是为了验证确实是对的 class.