【问题标题】:exponential time series for multiple time series data多个时间序列数据的指数时间序列
【发布时间】:2018-11-12 14:46:36
【问题描述】:

我的数据有不同的起点和终点。

structure(list(item = c("Card", "Card", "Card", "Card", "Card", 
"Card", "Card", "Card", "battery", "battery", "battery", "battery", 
"battery", "laptop", "laptop", "laptop", "laptop", "laptop", 
"laptop", "laptop"), sales = c(20.4, 29, 26, 40, 35, 36, 28, 
41, 70, 75, 78, 99, 40, 100, 132, 123, 145, 125, 145, 124), Date = structure(c(17784, 
17791, 17798, 17805, 17812, 17819, 17826, 17833, 17608, 17615, 
17622, 17629, 17636, 17713, 17726, 17739, 17752, 17765, 17778, 
17791), class = "Date")), row.names = c(NA, -20L), class = "data.frame")

我试过了

ts_test <- ts(multiple_ts, frequency=52)

转换为时间序列但失败

structure(c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 20.4, 29, 26, 40, 35, 36, 28, 41, 
70, 75, 78, 99, 40, 100, 132, 123, 145, 125, 145, 124, 17784, 
17791, 17798, 17805, 17812, 17819, 17826, 17833, 17608, 17615, 
17622, 17629, 17636, 17713, 17726, 17739, 17752, 17765, 17778, 
17791), .Dim = c(20L, 3L), .Dimnames = list(NULL, c("item", "sales", 
"Date")), .Tsp = c(1, 1.36538461538462, 52), class = c("mts", 
"ts", "matrix"))

有人可以帮助我如何逐项转换为时间序列并对每个项目应用指数平滑。 提前致谢!

【问题讨论】:

    标签: r time-series smoothing exponential holtwinters


    【解决方案1】:

    将数据框转换为 3 列动物园对象z,并从z 创建ts 对象L 的列表。对L 的每个分量应用指数平滑,得到HW。然后绘制每一个。注意ts对象不能直接代表Date类,所以我们省略了X轴,在pltHW中自己绘制。

    library(zoo)
    
    z <- read.zoo(multiple_ts, index = "Date", split = "item")
    L <- lapply(as.list(z), function(x) as.ts(na.omit(x)))
    HW <- lapply(L, HoltWinters, beta = FALSE, gamma = FALSE)
    
    # given HoltWinters object x get fitted values as zooreg object
    fitHW <- function(x) {
      fitted <- fitted(x)
      zooreg(fitted[, 1], as.Date(start(fitted)), frequency = frequency(fit))
    }
    
    # plot
    pltHW <- function(x, sub) {
      plot(x, sub = sub, xaxt = "n")
      fit <- fit(x)
      Axis(time(fit), side = 1)
      invisible(x)
    }
    
    par.old <- par(mfrow = c(3, 1))
    junk <- Map(pltHW, HW, names(HW))
    par(par.old)
    

    【讨论】:

    • 我试过这种方式,但是对于junk &lt;- Map(pltHW, HW, names(HW)),我得到了以下错误`plot.new() 中的错误:数字边距太大`。有没有办法取消列出并进入 ts我们可以在同一帧@G 中看到拟合值和实际值的模型。格洛腾迪克
    • 使用问题中的数据我无法重现该错误。它为我提供了显示的输出。已在答案中排除了fitHW,因此do.call("merge", lapply(HW, fitHW)) 给出了拟合值。
    • 当我实际应用到我的整个数据集并read.zoo(multiple_ts, index = "Date", split = "item") 运行此代码时。我得到的错误是Error in merge.zoo series cannot be merged with non-unique index entries in a series
    • 您需要提供可重现的代码和数据。
    • 我们如何取消嵌套长度不同的数据@G.Grothendieck
    猜你喜欢
    • 2011-09-30
    • 2014-02-11
    • 2019-08-10
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多