在R中推断出时间序列数据

时间:2013-03-20 22:18:23

标签: r time-series extrapolation

我有过去20年的时间序列数据。这个变量每年都有测量,所以我有20个值。我有一个制表符分隔的文件,第一列代表年份和第二列的值。 这是它的样子:

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,所以如果你能帮助我使用用于从制表符分隔文件中读取数据的代码,那将会很棒。

由于

2 个答案:

答案 0 :(得分:7)

以下是可以帮助您入门的草图。

## 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)

在这种情况下,我们的模型表示该线永远不会过零。如果这没有意义那么你会想要选择一个不同的模型。无论您选择哪种模型,都可以将结果与数据一起绘制,以便您可以看到自己的表现如何。

答案 1 :(得分:5)

从格式化文件中读取数据:

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

并查看read.table manpage

要推断数据:

EDiDirk表示你需要做一些阅读。决定你想要什么样的外推:线性(Hmisc::approxExtrap用于线性外推; approxfun进行插值但不进行外推),样条(stats::splinefunsplines包)等。 splinefun可能适用于您的情况。 特别是对于预测时间序列,请参阅forecast(您还应该浏览相关的SO问题)。 浏览这些联机帮助页后,尝试一些内容,发布一些代码并告诉我们您遇到的问题,可以做出更多响应。否则你会被无情地焚烧,你的问题可能会被关闭,因为'给我代码'; - )