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
您的第二个示例之所以有效,是因为您创建了足够多的变体。
我想知道线性回归函数 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
您的第二个示例之所以有效,是因为您创建了足够多的变体。