You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ARIMA预测泰铢兑美元汇率遇报错:'ts'对象需至少一个观测值

问题解决:ARIMA预测泰铢兑美元汇率时触发'ts' object must have one or more observations错误

错误根源

  1. 时间序列参数格式错误:使用ts()创建序列时,frequency=12代表月度频率,但你传入的start=c(2010,01,01)和end=c(2021,12,31)是年-月-日格式,R无法正确识别月度时间戳,导致生成的a.dfts序列存在观测数异常。
  2. 差分后序列无效:原始序列格式错误导致diff(log(a.dfts))生成的loga序列观测数不足(甚至为空),后续拟合ARIMA模型后,预测时因无有效观测触发报错。

修复步骤

1. 修正时间序列创建逻辑

将ts()的start和end改为c(年, 月)格式,同时先清理原始数据中的缺失值:

library(priceR)
library(forecast)

# 导入数据
a <- historical_exchange_rates("THB", to = "USD", start_date = "2010-01-01", end_date = "2021-12-31")
# 清理缺失值
a_clean <- a[!is.na(a$one_THB_equivalent_to_x_USD), ]
# 创建月度时间序列(注意start/end为年+月)
a.dfts <- ts(a_clean$one_THB_equivalent_to_x_USD, frequency=12, start=c(2010, 1), end=c(2021, 12))

2. 检查差分后序列有效性

执行差分操作后,务必确认序列长度大于1:

loga <- diff(log(a.dfts))
# 查看差分后序列长度,需大于1
length(loga)

如果长度不足,说明原始日度数据需先聚合为月度数据(因为frequency=12对应月度,直接用日度数据会导致时间戳混乱):

library(dplyr)
# 转换日期并提取年月
a$date <- as.Date(a$date)
a$year_month <- format(a$date, "%Y-%m")
# 聚合为月度平均汇率
a_monthly <- a %>%
  group_by(year_month) %>%
  summarise(avg_rate = mean(one_THB_equivalent_to_x_USD, na.rm=TRUE))
# 重新创建月度时间序列
a.dfts <- ts(a_monthly$avg_rate, frequency=12, start=c(2010, 1), end=c(2021, 12))

3. 重新拟合模型并预测

确保loga有足够观测值后,重新执行模型拟合与预测:

library(TSA)
library(forecast)

loga <- diff(log(a.dfts))
finala.arma <- arima(loga, order = c(0,0,2))
forca.ARIMA <- forecast(finala.arma, h=24, level=c(80,95))
# 绘制预测结果
plot(forca.ARIMA)

内容的提问来源于stack exchange,提问作者Napat Viseshsin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:24:13