1 分钟 xts 时间序列上的 lm 函数

lm function on 1min xts time series

我想知道线性回归函数 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) ) 按预期工作并且 returns 斜率为 4.839e-3

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

我是否误解了 lm 函数的工作原理?或者有人可以评论这种行为吗?有没有其他函数可以计算 1min 系列的斜率?

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

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

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

但如果降低公差,它会 "work",但这会牺牲数值稳定性。

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

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