【问题标题】:Extrapolating time series外推时间序列
【发布时间】:2016-04-25 18:41:29
【问题描述】:

我下载了 Google 过去 4 年的年收入:

library(quantmod)
getFinancials(GOOG)
df<-viewFinancials(GOOG.f, type='IS', period='A',subset = NULL)['Net Income',]
df<-(as.data.frame(df))

以下是数据的显示方式:

2015-12-31 16348
2014-12-31 14136
2013-12-31 12733
2012-12-31 10737

我想将此数据“推断”为未来 10 年的平均线性增长,以这种方式:

在 Excel 中,我只需要粘贴上述数据,从最旧到最新排序,选择它,然后将选择“拉伸”超过 10 行,结果如下:

12/31/2012  10737
12/31/2013  12733
12/31/2014  14136
12/31/2015  16348
12/31/2016  18048
12/31/2017  19871
12/31/2018  21695
12/31/2019  23518
12/31/2020  25342
12/31/2021  27166
12/31/2022  28989
12/31/2023  30813
12/31/2024  32636
12/31/2025  34460

我怎样才能在 R 中做同样的事情(或类似的事情)?

【问题讨论】:

    标签: r time-series extrapolation


    【解决方案1】:

    在 R 中需要一些额外的步骤。这是您的示例数据:

    date<-as.Date(c("2015-12-31", "2014-12-31", "2013-12-31", "2012-12-31"))
    value<-c(16348, 14136, 12733, 10737)
    

    假设未来线性增长。使用 lm 命令执行线性回归。变量“模型”存储拟合。

    #fit linear regression
    model<-lm(value~date)
    

    展望未来 10 年,创建未来 10 年的日期序列并存储为数据框(预测命令所需)

    #build predict dataframe
    dfuture<-data.frame(date=seq(as.Date("2016-12-31"), by="1 year", length.out = 10))
    #predict the futurne
    predict(model, dfuture, interval = "prediction")
    

    上述模型假设线性增长。如果对增长的预测不同,则需要修改 lm 公式或使用 nlm 方程。 我将省略有关在可用数据范围之外进行预测的警告。

    【讨论】:

    • 就是这样。它适用于“GOOG”,但当我将其应用于“TSLA”时,它只预测了 4 年而不是 10 年。你知道为什么吗?太不可预测了?
    • 预测函数应该为传递给它的数据帧中的每一行生成一个估计值。确保数据框中的列名称与模型中的因变量名称匹配!在上面的例子中,lm 模型是 value vs "date",因此 dfuture 数据框中的列名也被命名为 "date"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2013-03-10
    • 2017-07-08
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多