如何循环获取最小RMSE值,并在每列中使用 "应用 "进行预测。

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

谁能给我提供指导,告诉我如何使用for循环来查找最小RMSE值,并使用 "应用函数 "在每一列中进行预测?下面是数据集。

T 6753 6763 6803 6806 6777 6799 6809 6832 6838 6831 6838 6807 6782 6809 6785 6766 6788 6704 6656 7093 7091 7100 7074 7047 7063 7070 7068 7054 7056 7067 7040 7027 7032 7055 7058 7051 7074 7109 7103 7127 7121 7111 7123 7147 7119 7106 7103 7091 7097 7103 7086 7099 7094 7139 7186 7198 7248 7274 7319 7329 7384 7410 7479

C 2307 2296 2297 2287 2273 2259 2246 2230 2215 2194 2175 2110 2098 2074 2070 2107 2117 2128 2106 1687 1674 1664 1638 1641 1672 1679 1677 1675 1681 1675 1665 1697 1694 1693 1693 1691 1703 1706 1700 1695 1698 1712 1688 1701 1693 1674 1690 1688 1710 1711 1692 1688 1700 1684 1755 1744 1764 1762 1753 1753 1768 1763 1788

我一共有2列需要在R中进行预测,我打算用 "Holt "来预测未来的数值。Holt中的一个变量是输入β。我不知道如何写一个函数来给每个列分配β。

以下是我计算RMSE值的方法。如果我只有一列,这很容易。但是现在我有两列或更多列。

beta<-seq(.05,.9,by=0.001)
RMSE<-NULL
for (i in seq_along(beta)){
  fit<-holt(cretrain, beta=beta[i],h = length(cretest))
  RMSE[i]<-accuracy(fit,cretest)[2,2]
}

beta.fit<-data_frame(beta,RMSE)
beta.min<-filter(beta.fit,RMSE==min(RMSE))

下面是我如何使用apply进行预测。理想情况下,我希望β值是基于从代码的第一块出来的值。

list<-apply(df,2,function(x)holt(ts(x,start = c(2015,1),end = c(2020,1),frequency = 12),h=2,beta=.5))

谢谢你的帮助

r
1个回答
1
投票

我们可以在列上循环使用 lapply,然后在 "β "值上循环,应用 holt, rbindaccuracy 衡量每个'beta'('beta.fit')。subset RMSE "的行数。minimum。 这将返回数据集中每一列的子集。

beta <- seq(.05, .9,by=0.001)
out <- lapply(df, function(x) {
         beta.fit <- do.call(rbind, lapply(beta, function(b) {
             fit <- holt(x, beta = b, h = length(x))
             print(head(fit$mean))
               data.frame(beta = b, RMSE =  accuracy(fit, x)[2,2])
             }))
       subset(beta.fit, RMSE == min(RMSE))
     })
© www.soinside.com 2019 - 2024. All rights reserved.