【问题标题】:lm function on 1min xts time series1min xts 时间序列上的 lm 函数
【发布时间】:2017-01-08 06:48:45
【问题描述】:

我想知道线性回归函数lm 是否应该完全适用于 1 分钟间隔的时间序列。我希望是的,但在这种情况下似乎不是。我有以下 xts 时间序列z

                         mean
    2016-03-11 08:37:00  10
    2016-03-11 08:38:00  11
    2016-03-11 08:39:00  12

申请lm( z ~ index(z) ) 给予

Coefficients:
(Intercept)     index(z)  
         11           NA  

所以回归的斜率是 NA。我想知道为什么?我看不出有任何数学原因无法计算。

如果我将第一行的时间更改为 5 分钟间隔,那么z 等于

                      mean
2016-03-11 08:33:00   10
2016-03-11 08:38:00   11
2016-03-11 08:39:00   12

然后lm( z ~ index(z) ) 按预期工作并返回 4.839e-3 的斜率

Coefficients:
(Intercept)     index(z)  
 -7.053e+06    4.839e-03  

我对@9​​87654330@ 函数应该如何工作有任何误解吗?或者有人可以评论这种行为吗?有没有其他函数可以计算1min系列的斜率?

【问题讨论】:

  • 好问题!你有任何可重现的例子吗?

标签: r xts lm


【解决方案1】:

这并不特定于 xts 或 lm 函数。一般来说,这是估计线性回归系数的问题。您无法使用有效不变的数据(在浮点算术精度范围内)来估计数据系列中的变化。

您可以看到您的第一个示例在计算上是奇异的:

lm(z ~ index(z), singular.ok=FALSE)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  singular fit encountered

但如果您降低容差,它会“起作用”,但这会牺牲数值稳定性。

lm(z ~ index(z), singular.ok=FALSE, tol=1e-8)

Call:
lm(formula = z ~ index(z), singular.ok = FALSE, tol = 1e-08)

Coefficients:
(Intercept)     index(z)  
 -2.430e+07    1.667e-02

您的第二个示例之所以有效,是因为您创建了足够多的变体。

【讨论】:

  • 谢谢,降低容差解决了我的问题,对我来说效果很好。我只想知道这些点的斜率,它们来自另一个回归计算,因此应该足够显着。但我想我还应该阅读更多有关数学背景的信息。
  • Joshua,是否会事先扩大索引,得到与设置tol 相同的结果?例如。 ix <- as.numeric(index(z))*10;lm(z ~ ix)(然后缩放 ix 系数,以进行补偿)。
  • @DarrenCook:是的,应该可以。如果您经常遇到这个问题,那么在估计线性模型时使用支持更高精度的包可能是值得的。我不知道,但如果不存在,我会感到惊讶。
猜你喜欢
  • 2012-03-11
  • 2014-05-08
  • 2021-03-03
  • 1970-01-01
  • 2023-03-17
  • 2014-09-29
  • 1970-01-01
  • 2019-12-23
  • 2019-07-05
相关资源
最近更新 更多