2013-03-20 51 views
1

我有過去20年的時間序列數據。這個變量每年都被測量過,所以我有20個值。我有一個製表符分隔的文件,第一列代表年份和第二列的值。 這裏是什麼樣子:在R中外推時間序列數據

 
1991 438 
1992 408 
1993 381 
1994 361 
1995 338 
1996 315 
1997 289 
1998 261 
1999 229 
2000 206 
2001 190 
2002 173 
2003 151 
2004 141 
2005 126 
2006 108 
2007 99 
2008 93 
2009 85 
2010 77 
2011 71 
2012 67 

我想推斷第二列的值了未來幾年。第二列數值下降的速度也在下降,所以我認爲我們不能使用線性迴歸。我想知道第二列哪一年會接近零值。我從來沒有使用R,所以如果你甚至可以幫助我使用代碼來讀取製表符分隔的文件中的數據,那麼這將是非常棒的。

感謝

+0

-1。有成千上萬的資源如何將數據讀入R.問題的另一部分更適合於stats.stackexchange.com。 – EDi 2013-03-20 22:34:01

+0

更不用提[數據輸入/輸出的整個手冊](http://cran.r-project.org/doc/manuals/R-data.html) – 2013-03-20 22:47:28

+4

試試這個:'library(zoo);庫(預測); z < - read.zoo(「file.dat」); f < - 預測(z);印刷(F);繪製(f)'並在這裏閱讀5個小插曲(PDF文檔):http://cran.r-project.org/web/packages/zoo/index.html – 2013-03-20 23:08:51

回答

5

爲了從格式化文件中的數據讀取:

require(utils) # (make sure you have 'utils' package installed!) 
data <- read.table('<filename>', header=FALSE, colnames=c('Year','Value')) 

,看read.table manpage

來推斷數據:

EDiDirk SA你需要做一些閱讀。決定你想要什麼樣的外推:線性(Hmisc::approxExtrap線性外推; approxfun做內插但不外推),樣條(stats::splinefunsplines包)等。splinefun可能適合您的情況。 專門用於預測時間序列,請參見forecast(您還應該瀏覽相關的SO問題)。 在您瀏覽這些手冊頁之後,嘗試一些內容,發佈一些代碼並告訴我們您卡在哪裏,可以做出更多回應。否則,你會無情地惹火,你的問題可能會被關閉,因爲'Give me teh codez' ;-)

+0

感謝smci指出我在正確的方向。讓我繼續研究並提出一個代碼。非常感謝。 – user1985425 2013-03-20 23:01:56

+1

小修正:'approxfun'線性內插,但不是線性外推 - 而是返回NA或「最接近數據極值的值」。 – jbaums 2014-04-11 10:14:03

+1

@jbaums true,但'Hmisc :: approxExtrap' does – RockScience 2014-10-15 08:10:54

6

以下是可幫助您入門的草圖。

## get the data 
tmp <- read.table(text="1991 438 
1992 408 
1993 381 
1994 361 
1995 338 
1996 315 
1997 289 
1998 261 
1999 229 
2000 206 
2001 190 
2002 173 
2003 151 
2004 141 
2005 126 
2006 108 
2007 99 
2008 93 
2009 85 
2010 77 
2011 71 
2012 67", col.names=c("Year", "value")) 

library(ggplot2) 

## develop a model 
tmp$pred1 <- predict(lm(value ~ poly(Year, 2), data=tmp)) 

## look at the data 
p1 <- ggplot(tmp, aes(x = Year, y=value)) + 
    geom_line() + 
    geom_point() + 
    geom_hline(aes(yintercept=0)) 

print(p1) 

## check the model 
p1 + 
    geom_line(aes(y = pred1), color="red") 

## extrapolate based on model 
pred <- data.frame(Year=1990:2050) 
pred$value <- predict(lm(value ~ poly(Year, 2), data=tmp),newdata=pred) 

p1 + 
    geom_line(color="red", data=pred) 

在這種情況下,我們的模型表示該線不會過零。如果這沒有意義,那麼你會想要選擇一個不同的模型。無論您選擇哪種模型,都要將結果與數據一起繪製,以便您可以看到自己的表現。

+0

我認爲在第40行中應該是geom_line(aes(y = tmp $ pred1),color =「red」)而不是geom_line(aes(y = pred1),顏色=「紅色」) – Tungurahua 2015-01-14 19:04:32

+0

@Tungurahua在創建p1之前或者定義'tmp $ pred1',或者使geom_line再次用'geom_line(aes(y = pred1),color =「red」,data = tmp)' – Ista 2015-01-15 20:20:49

+0

@Tungurahua我編輯了答案,首先定義了'tmp $ pred1'。 – Ista 2015-01-15 20:28:08