首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确设置R中时间序列的问题

正确设置R中时间序列的问题
EN

Stack Overflow用户
提问于 2015-06-16 21:28:53
回答 3查看 4.7K关注 0票数 3

我一直试图对一些时间序列数据做一些基本分析。然而,我一直在试图做的任何事情上都会犯这个错误。

代码语言:javascript
运行
复制
Error in decompose(data_ts, type = c("additive")) : 
 time series has no or less than 2 periods

我认为问题在于,我没有为时间序列分析正确地设置数据。我正在处理运行M大约一年的数据。下面是我用来将序列转换为时间序列的代码

代码语言:javascript
运行
复制
train=xts(data$x,as.Date(data$Date,format='%m/%d/%Y'),frequency=365)
data_ts=as.ts(train)
attributes(data_ts)
$tsp
[1]   1 277   1
$class
[1] "ts" 

但是,当我试图对时间序列数据进行任何类型的分析时,我会得到以下信息:

代码语言:javascript
运行
复制
dcomp=decompose(data_ts,type=c('additive'))
Error in decompose(data_ts, type = c("additive")) : 
time series has no or less than 2 periods

我设置的时间序列不正确吗?是否有一个更好的时期,我应该选择频率,因为技术上,我没有一整年的数据价值?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-16 22:19:18

我不认为xts频率参数做与ts频率参数相同的事情。

因此,我假设您需要在使用ts之前将数据转换为decompose对象。我让它工作的方法如下:

使用下列数据:

代码语言:javascript
运行
复制
data(sample_matrix)
df <- as.data.frame(sample_matrix )
df$date <- as.Date(row.names(df))

如果我这样做的话:

代码语言:javascript
运行
复制
dfxts <- xts(df[1:4], order.by=df$date, frequency=12)
decompose(dfts)
Error in decompose(dfts) : time series has no or less than 2 periods

我和你犯了同样的错误。

但是,如果我将其转换为ts对象并使用该频率参数:

代码语言:javascript
运行
复制
#use as.ts to convert into ts
#make sure your data frame consists of numeric columns otherwise it will fail
#drop all the others
#in my case df[1:4] has numeric values. I use the date as a separate vector.
dfts <- as.ts(xts(df[1:4], order.by=df$date))
#I guess splitting by month would make sense in your case.
#I think ts works with frequency 4 (quarterly) or 12 (monthly)
#If you see your dfts now you ll see the difference
dfts <- ts(dfts, frequency=12)

然后它起作用了:

代码语言:javascript
运行
复制
dcomp <- decompose(dfts) 

输出:

代码语言:javascript
运行
复制
> str(dcomp)
List of 6
 $ x       : mts [1:180, 1:4] 50 50.2 50.4 50.4 50.2 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:4] "Open" "High" "Low" "Close"
  ..- attr(*, "tsp")= num [1:3] 1 15.9 12
  ..- attr(*, "class")= chr [1:3] "mts" "ts" "matrix"
 $ seasonal: Time-Series [1:720] from 1 to 60.9: -0.00961 0.02539 0.06149 0.01773 -0.00958 ...
 $ trend   : mts [1:180, 1:4] NA NA NA NA NA ...
  ..- attr(*, "tsp")= num [1:3] 1 15.9 12
  ..- attr(*, "class")= chr [1:2] "mts" "ts"
 $ random  : mts [1:180, 1:4] NA NA NA NA NA ...
  ..- attr(*, "tsp")= num [1:3] 1 15.9 12
  ..- attr(*, "class")= chr [1:3] "mts" "ts" "matrix"
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:4] "x - seasonal.x.Open" "x - seasonal.x.High" "x - seasonal.x.Low" "x - seasonal.x.Close"
 $ figure  : num [1:12] -0.00961 0.02539 0.06149 0.01773 -0.00958 ...
 $ type    : chr "additive"
 - attr(*, "class")= chr "decomposed.ts"
票数 3
EN

Stack Overflow用户

发布于 2015-06-16 22:18:58

你改变频率是对的。现在,你说每个周期有365个观测,所以你有不到一个周期的数据。你可以调整它,将频率设置为5,因为你每周得到5次观测。这不是唯一的选择,只是一个应该有效的例子:)

票数 0
EN

Stack Overflow用户

发布于 2019-12-13 04:06:02

使用您的数据集尝试以下一般方法:

代码语言:javascript
运行
复制
# Pre-loading the data
library(TSA)
library(mgcv)
#Choose the 'Temp Monthly.csv' dataset, wherever it is located on your computer
#Additionally, just skip this step and replace ‘fname’ with the files direct location
fname <- file.choose()
#Load Data
data <- read.csv(fname)
data <- data[,2]
#Convert to TS data in proper frame
temp <- ts(data,start=c(1950,1),freq=12)
# Plotting Time Plots
ts.plot(temp,ylab="Temperature")
abline(a=mean(temp),b=0,col='red')

这可能会有帮助。关于R中时间序列的更多细节,本文在介质中可能会有所帮助:https://medium.com/analytics-vidhya/time-series-analysis-101-in-r-and-python-1e1a7f7c3e51

如果您需要任何帮助,请随时发表评论。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30878556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档