我有过去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,所以如果你能帮助我使用用于从制表符分隔文件中读取数据的代码,那将会很棒。
由于
答案 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'))
要推断数据:
EDi和Dirk表示你需要做一些阅读。决定你想要什么样的外推:线性(Hmisc::approxExtrap用于线性外推; approxfun进行插值但不进行外推),样条(stats::splinefun或splines包)等。 splinefun
可能适用于您的情况。
特别是对于预测时间序列,请参阅forecast(您还应该浏览相关的SO问题)。
浏览这些联机帮助页后,尝试一些内容,发布一些代码并告诉我们您遇到的问题,可以做出更多响应。否则你会被无情地焚烧,你的问题可能会被关闭,因为'给我代码'; - )