【问题标题】:time series format not accepted by my algorithm我的算法不接受时间序列格式
【发布时间】:2020-07-25 19:52:09
【问题描述】:

我需要使用一种不太流行的算法 (GMDH) 进行一些预测,该算法本质上是多项式神经网络。我找到了算法并且示例运行良好,当我尝试应用自己的数据集时出现问题。

所以我的数据是由 7 个值(5、5、6、7、8、9、18)组成的每日数据集,要将其转换为时间序列,我使用以下代码: ts = ts(test, start=decimal_date(as.Date("2020-01-01")), frequency=365.25) test 是保存数据的df。

现在,当我将 ts 对象传递给算法时,我得到一个错误,指出 维数不正确,在调查基本上将我的数据集与示例数据(data(cancer))进行比较时,我看到我转换的 ts 对象与示例使用的 ts 对象不同,如下所示:

我想我的问题是如何将我的初始数据转换为我假设算法会接受的相同格式,甚至可能将我的 ts 对象转换或修改为与数据相同的格式(癌症)。如果您看不到差异,我的数据似乎在行中,而癌症数据值都在列中。对不起,我是 r 新手,我的术语不是很好。

您要求的有关数据的信息: dput(head(cancer)) 结构(c(100.4, 105.1, 109.4, 110.5, 116.9, 118.2), .Tsp = c(1930, 1935, 1), class= "ts") dput(head(ts)) 结构(c(5L,5L,6L,7L,8L,9L),.Dim = c(6L,1L),.Dimnames = 列表( NULL, "V1"), .Tsp = c(2020, 2020.01368925394, 365.25), class= "ts"

我希望这是你要求的再次道歉

【问题讨论】:

  • 你试过dim(ts) <- NULL吗?此外,为了将来参考,而不是显示数据的屏幕截图,首选方法是通过 dput(your_data)(或 dput(head(your_data)))的输出;这对于那些试图提供帮助的人来说会提供更多信息。此外,虽然这不是当您谈论像 cancer 这样的包数据集时,这是绝对必要的,只有当我们知道数据集来自哪个包时,这部分才真正有帮助。
  • dim(ts) 和 dim(cancer) 都返回 null
  • 如果这是真的,那么 真的 强调了我的观点,即您应该 edit 您的问题包括 R 命令 dput(ts)dput(cancer) 的输出(如果您告诉我们cancer 数据来自哪个包,则不需要最后一个)。数据的dput() 表示会自动为我提供该信息。
  • 癌症数据来自 GMDH 包。 install.packages("GMDH") 库("GMDH") 数据(癌症)
  • 谢谢;现在,minimal reproducible example 剩下的唯一问题是edit,您的问题是 (1) 包括 R 命令的输出 dput(ts),或 (2) 包括 您使用的完整代码 构造ts。您使用ts = ts(test, start=decimal_date(as.Date("2020-01-01")), frequency=365.25) 接近第二个,但在不知道test确切 结构的情况下,我们仍然不知道test 的某些事情可能会影响您的问题的答案。

标签: r


【解决方案1】:

所以我们可以通过设置dim(ts) <- NULL 来解决tsn 矩阵而不是像cancer 这样的向量的问题。首先,观察使用您新发布的数据,我们实际上具有相同的数据结构:

cancer <- structure(c(100.4, 105.1, 109.4, 110.5, 116.9, 118.2),
                    .Tsp = c(1930, 1935, 1), class = "ts")

ts <- structure(c(5L, 5L, 6L, 7L, 8L, 9L), .Dim = c(6L, 1L),
                .Dimnames = list( NULL, "V1"),
                .Tsp = c(2020, 2020.01368925394, 365.25), class = "ts")

ts
# Time Series:
# Start = 2020 
# End = 2020.01368925394 
# Frequency = 365.25 
#      V1
# [1,]  5
# [2,]  5
# [3,]  6
# [4,]  7
# [5,]  8
# [6,]  9
cancer
# Time Series:
# Start = 1930 
# End = 1935 
# Frequency = 1 
# [1] 100.4 105.1 109.4 110.5 116.9 118.2

现在检查ts 的副本,其中dim() 设置为NULL

ts2 <- ts
dim(ts2) <- NULL
ts2
# Time Series:
# Start = 2020 
# End = 2020.01368925394 
# Frequency = 365.25 
# [1] 5 5 6 7 8 9

这应该可以防止您的incorrect number of dimensions 错误

【讨论】:

  • 感谢它解决了尺寸问题。你能帮我一个忙并运行以下ts &lt;- structure(c(5L, 5L, 6L, 7L, 8L, 9L), .Dim = c(6L, 1L), .Dimnames = list( NULL, "V1"), .Tsp = c(2020, 2020.01368925394, 365.25), class = "ts")install.packages("GMDH")library("GMDH")out = fcast(ts, method = "GMDH", input = 6, layer = 30, f.number = 3, level = 95, tf = "polynomial", weight = 0.70)
  • 嗯...看起来你有一个 new 错误@Olayemi。我的建议是提出一个新问题。首先显示您使用cancer 运行的代码。然后为您遇到问题的新数据发布dput(),以及您运行导致新错误的代码。这个错误似乎不是一个简单的维度问题,而是可能需要对特定问题进行一些更深入的检查,对此提出一个新问题是合适的。
猜你喜欢
  • 2021-02-15
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2011-07-24
  • 2021-10-01
相关资源
最近更新 更多