2

我有过去 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,所以如果您能帮助我编写用于从制表符分隔的文件中读取数据的代码,那就太好了。

谢谢

4

2 回答 2

9

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

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

在这种情况下,我们的模型说这条线永远不会过零。如果这没有意义,那么您将需要选择不同的模型。无论您选择哪种模型,将结果与数据一起绘制成图表,以便您了解自己的表现。

于 2013-03-20T23:09:16.580 回答
5

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

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

并查看read.table 手册页

要推断数据:

正如EDiDirk所说,您需要做一些阅读。决定你想要什么样的外推 fn:线性(Hmisc::approxExtrap用于线性外推;approxfun进行插值但不进行外推),样条线(stats::splinefunsplines包)等splinefun可能适合您的情况。专门用于预测时间序列,请参阅预测(您还应该浏览相关的 SO 问题)。在您浏览这些联机帮助页后,尝试一下,发布一些代码并告诉我们您遇到的问题,可以做出更多回应。否则你会被无情地激怒,你的问题很可能会被关闭为“给我密码”;-)

于 2013-03-20T22:47:38.787 回答