初学者用tsclean清洗ARIMA时间序列遇‘仅允许单变量序列’报错求助
解决tsclean函数报错:only univariate series are allowed
我来帮你理清这个问题的根源,以及快速解决的办法:
报错原因分析
你看到的这个错误,本质是tsclean()函数只能处理单变量时间序列,但你生成的mydata2其实是一个多变量时间序列对象——哪怕你的CSV只有一列数据,用read.csv()读进来的结果是data.frame类型,直接用ts()转换后,会默认把data.frame的每一列都当作一个变量,哪怕只有一列,生成的也是多变量的ts对象。
你可以用这个命令验证一下:
is.univariate(mydata2)
运行后应该会返回FALSE,这就证实了它是多变量序列。
修正方案
有两种简单的方式可以解决这个问题:
方案1:读取数据时直接提取单向量
在读入数据的时候,直接把单列数据提取成向量,再转换为单变量时间序列:
# 读入数据并提取第一列(如果你的列有名字,也可以用$列名) mydata <- read.csv("FILENAME.csv")[, 1] # 转换为单变量时间序列 mydata2 <- ts(mydata, freq=12, start=c(2011,1)) # 现在可以正常使用tsclean mydataclean <- tsclean(mydata2)
方案2:转换已有多变量ts为单变量
如果你已经有了mydata2这个对象,直接提取其中的唯一变量即可:
# 提取第一列转为单变量时间序列 mydata2_univar <- mydata2[, 1] # 执行清洗 mydataclean <- tsclean(mydata2_univar)
验证修正结果
修正后可以再用is.univariate(mydata2)(或is.univariate(mydata2_univar))检查,返回TRUE就说明是单变量序列,tsclean()就能正常运行了。
内容的提问来源于stack exchange,提问作者BigMadAndy
相关产品推荐
相关产品推荐

