R语言创建向量存预测值及SARIMA多步预测存储异常问题
解决sarima.for多步预测值存入向量的问题
我猜你大概率是只提取了预测结果的第一个元素导致的!当用sarima.for()设置n.ahead>1时,它返回的$pred是一个长度等于预测步数的向量,而不是单个值。如果你的代码里只取了$pred[1],那自然只会把第一个预测值存入向量,第二个就丢了。
给你两种靠谱的解决方式:
方式1:动态追加预测向量
如果你不确定总预测步数,或者想灵活追加,可以用c()直接把每次的完整预测向量拼到结果里:
# 初始化空向量 pred_vector <- numeric() # 假设这是你的预测循环 for (i in 1:your_loop_times) { # 这里替换成你的数据和SARIMA参数 forecast_result <- sarima.for(your_data, n.ahead=2, p=1, d=1, q=1, P=0, D=0, Q=0, S=12) # 把本次所有预测值追加到向量中,而不是只取第一个 pred_vector <- c(pred_vector, forecast_result$pred) }
方式2:预先分配向量(更高效)
如果知道总预测次数(比如循环次数×每次预测步数),预先分配向量会比动态拼接更高效,尤其当循环次数很多时:
# 计算总预测值数量:循环次数 × 每次预测步数 total_preds <- your_loop_times * 2 pred_vector <- numeric(total_preds) for (i in 1:your_loop_times) { forecast_result <- sarima.for(your_data, n.ahead=2, p=1, d=1, q=1, P=0, D=0, Q=0, S=12) # 计算本次预测值在向量中的位置范围 start_pos <- (i - 1) * 2 + 1 end_pos <- i * 2 # 把完整的预测向量填充到对应位置 pred_vector[start_pos:end_pos] <- forecast_result$pred }
你可以检查下sarima.for()的返回结构,用str(forecast_result)就能看到:$pred是一个数值向量,长度正好是你设置的n.ahead值,只要把这个向量完整存入结果就没问题啦!
内容的提问来源于stack exchange,提问作者GABRIEL BALBINO
相关产品推荐
相关产品推荐

