我想将单变量时间序列(14139个观测值)分成训练和测试集,分别为60%和40% . 我输入命令 splits (APILts, c(rep("train", 8483), "test")) 然后R结果: Error: is.timeSeries(x) is not TRUE
2 回答
1
要拆分时间序列,您需要一个时间序列的向量 .
该错误表明您的APILts不是ts对象:
Error: is.timeSeries(x) is not TRUE
这里有一个关于如何使用ts对象拆分时间序列的示例:
data(AirPassengers)
将数据分配给方便的载体
这是避免每次更改代码的简单方法
series <- AirPassengers
绘制系列
plot(series, col="darkblue", ylab="Passegners on airplanes")
绘制该系列的季节性分布
windows(width=800,height=350) # set the window with the dimensions you need
boxplot(split(series, cycle(series)), names = month.abb, col = "gold")
测试集的大小通常约为总样本的40%
因此,我们将在训练集和测试集中拆分该系列
# Training set
# Use data from 1949 to 1955 for forecasting
sr = window(series, start=1949, end=c(1955,12))
# Test set
# Use remaining data from 1956 to 1960 to test accuracy
ser = window(series, start=1956, end=c(1960,12))
现在我们准备开始了 .
将数据转换为时间序列
# Data
dat <- c(27, 28, 25, 22, 19, 21, 24, 24, 22, 16, 27, 41, 29, 24, 15, 27, 25, 21, 15, 41, 19, 24, 34, 20, 25, 34, 31, 29, 38, 36, 27, 37, 31, 28, 25, 34, 40, 36, 39, 19, 40, 31, 29, 39, 29, 40, 34, 31)
# Convert the data to time series
series <- ts(dat, frequency = 12, start = c(1969, 1))
# Inspect the series
series
plot(series)
请注意,有时,如果您已将数据作为数据框上载,则必须精确指定列:
# In this example, the data you want to convert into a ts object are in the first column
series <- ts(dat[[1]], frequency = 12, start = c(1969, 1))
0
Rob Hyndman的forecast软件包支持自版本8.0 head 和 tail 的时间序列 . 这样就可以在没有 window 或 subset 功能的情况下创建训练和测试集的非常方便的机制 . 您所要做的就是提供训练集的大小,如下面的代码所示 .
library(forecast)
train <- head(AirPassengers, round(length(AirPassengers) * 0.6))
h <- length(AirPassengers) - length(train)
test <- tail(AirPassengers, h)
2 回答
要拆分时间序列,您需要一个时间序列的向量 .
该错误表明您的APILts不是ts对象:
这里有一个关于如何使用ts对象拆分时间序列的示例:
将数据分配给方便的载体
这是避免每次更改代码的简单方法
绘制系列
绘制该系列的季节性分布
测试集的大小通常约为总样本的40%
因此,我们将在训练集和测试集中拆分该系列
现在我们准备开始了 .
将数据转换为时间序列
请注意,有时,如果您已将数据作为数据框上载,则必须精确指定列:
Rob Hyndman的forecast软件包支持自版本8.0
head
和tail
的时间序列 . 这样就可以在没有window
或subset
功能的情况下创建训练和测试集的非常方便的机制 . 您所要做的就是提供训练集的大小,如下面的代码所示 .或者,您可以提供预测范围的长度:
测试它们是否相同:
检查火车:
检查测试:
情节火车和测试: