R语言ts对象拆分训练测试集后格式异常致tslm报错问题
问题解决:时间序列拆分与tslm报错处理
问题1:subset函数报错"argument 'subset' is missing, with no default"
直接用subset()函数的start和end参数拆分时间序列时,不符合subset()函数的语法要求——该函数第一个必填参数是subset,用于指定筛选条件,而非直接传递时间序列的起止位置。即便添加subset=TRUE能让代码运行,也会导致返回结果丢失时间序列属性。
问题2:tslm报错"Not time series data, use lm()"
添加subset=TRUE后,subset()返回的是普通数值向量,不再是带时间属性的ts对象,而tslm()要求输入必须为时间序列类型,因此触发报错。
正确解决方案
拆分时间序列无需使用subset(),推荐用专门的window()函数或直接索引,两种方式都能保留ts对象属性:
方式1:使用window()函数(推荐,更贴合时间序列操作)
train.ts <- window(TorontoTempts, start = 1, end = 176) testing.ts <- window(TorontoTempts, start = 177, end = 200)
方式2:直接索引
train.ts <- TorontoTempts[1:176] testing.ts <- TorontoTempts[177:200]
处理后再调用tslm()即可正常运行:
regModel <- tslm(train.ts ~ trend + season)
内容的提问来源于stack exchange,提问作者user3425989
相关产品推荐
相关产品推荐

