2010-10-09 44 views
9

將不規則時間序列轉換爲常規時間序列時出現問題。下面一個簡單的例子可以發現:將不規則時間序列轉換爲常規時間序列

require(zoo) 
t <- as.character(c(1981,1984,1985)) 
d <- c(1,3,6) 
dt <- data.frame(d,t) 
t <- as.Date(t,"%Y") 
z <- zoo(d,t) 
plot(z) 
ts.d <- as.ts(as.zooreg(z,freq=1)) # create a regular ts object 
ts.d # regular time series 

我想創建一個常規時間序列ts.d看起來像這樣C(1981年,NA,NA,1984,1985)。

令人驚訝的是,我第一次運行它:它的工作原理!但是當我想再次運行或重複它(as.ts()線)停止運作並且我得到了很長的時間序列:

ts.d # regular time series 
Time Series: 
Start = 4299 
End = 5760 
Frequency = 1 
    [1] 1 NA NA NA NA NA NA NA NA NA NA NA NA NA 
[15] NA NA NA NA NA NA NA NA 

到底哪裏出問題了?

回答

6

正如已指出as.Date(as.character(t), "%Y")是不正確的,它沒有得到期望的月和日。如果我們想將年數轉換爲"Date"班,我們可以使用動物園的as.yearmon來做到這一點as.Date(as.yearmon(t));然而,那麼我們會遇到另一個問題,即不同的年份有不同的天數,所以沒有辦法使用日期來表示幾年的常規系列。

真的,我們不希望日期在第一位。我們只是想在這種情況下,簡化爲僅僅憑藉多年的工作:

> z <- zoo(c(1, 3, 6), c(1981, 1984, 1985)) 
> 
> as.ts(z) 
Time Series: 
Start = 1981 
End = 1985 
Frequency = 1 
[1] 1 NA NA 3 6 

,或者如果我們想成爲安全的,我們能做到這一點,這將迫使它是即使輸入具有年,一次偶然的機會,一個較低的頻率:frequency(z) <- 1; as.ts(z)或只是定義了原動物園系列具有1的頻率從一開始:

> z <- zoo(c(1, 3, 6), c(1981, 1984, 1985), frequency = 1) 
> as.ts(z) 
Time Series: 
Start = 1981 
End = 1985 
Frequency = 1 
[1] 1 NA NA 3 6 

有了這個例子不有所作爲,但在這種情況下z <- zoo(c(1, 3, 6), c(1981, 1983, 1985), frequency = 1)明確frequency將需要防止其發生頻率爲0.5

3

這不是一個錯誤。在你的時間系列的四年中有1,461天。我第一次運行它時不起作用。 as.Date(t,"%Y")不知道用哪個月/日來製作日期,所以它使用今天的月/日。這不適用於可重複的分析。試試這個:

t <- c(1981,1984,1985) 
d <- c(1,3,6) 
z <- zoo(d,t) 
z <- merge(z,zoo(,c(1981,1982,1983,1984,1985))) 
ts.d <- as.ts(z) 

其中產量:

> ts.d 
Time Series: 
Start = 1981 
End = 1985 
Frequency = 1 
[1] 1 NA NA 3 6 
相關問題