2

我有一个大型 XTS 对象,它是使用跨 XTS ZOO 对象的滑动窗口进行相关计算的结果,该对象包含 12 x 12 个变量,用于 1343 个时间点。

我的大型 XTS 对象的结构如下,行代表时间,列代表相关组合。一个简化的例子如下所示:

    AA  BA  CA   AB  BB  CB   AC  BC  CC
t1  1   .1  -.4  .1  1   .3  -.4  .3   1
t2  1   .4  .8   .4  1   .2   .8  .2   1
t3  1   .5  .5   .5  1   .3   .5  .3   1
t4  1   .6  .1   .6  1   .7   .1  .7  .1

如果我错了,请纠正我,但我相信eigen()R 中的函数需要一个方阵来计算矩阵 lambda 1,2 和 3 的特征值?

如何对上面的 xts 对象求平方以找到每个矩阵随时间变化的特征值和向量?

我猜我将在上面的 XTS 对象中为每个时间段 (1-4) 生成一个矩阵,并且应该通过取前 3 个值 (1 .1 -.4) 并将它们放入第一个值来构造矩阵列,接下来的三个值 (.1 1 .3) 进入第二列,最后第一行的最后三个值 (-.4 .3 1) 进入最后一列以组成 3 x 3矩阵如下所示:

t1 的矩阵

   A   B   C
A   1 .1 -.4
B  .1  1  .3
C -.4 .3   1

也许 XTS 对象的转换不需要计算特征值,但如果我在脑海中逐步完成它,这些是计算 XTS 对象的特征值所需的步骤。

理想情况下,每个矩阵的特征值将存储在数据框或矩阵中,在上述情况下,我将有一个包含 3 个变量的 12 个观测值的数据框或 3 x 4 的矩阵。

谁能告诉我我是否以错误的方式进行此操作,以及是否eigen()可以采用当前形式的 XTS 对象并计算特征值?

输入

4

1 回答 1

2

出于演示目的,我只返回最大的特征值集,但您可以修改代码以返回您需要的任何内容。

library(xts)
dfx <- structure(c(1, 1, 1, 1, 0.1, 0.4, 0.5, 0.6, -0.4, 0.8, 0.5, 0.1, 
0.1, 0.4, 0.5, 0.6, 1, 1, 1, 1, 0.3, 0.2, 0.3, 0.7, -0.4, 0.8, 
0.5, 0.1, 0.3, 0.2, 0.3, 0.7, 1, 1, 1, 1), .Dim = c(4L, 9L), .Dimnames = list(
    NULL, c("AA", "BA", "CA", "AB", "BB", "CB", "AC", "BC", "CC"
    )), index = structure(c(1167685200, 1167771600, 1167858000, 
1167944400), tzone = "", tclass = c("POSIXct", "POSIXt")), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "", class = c("xts", 
"zoo"))

apply.daily(dfx, function(x) eigen(matrix(x, nrow = sqrt(length(x))))$values[1])
#               [,1]
#2007-01-02 1.455287
#2007-01-03 1.984869
#2007-01-04 1.872842
#2007-01-05 1.972804
于 2017-03-10T13:24:48.833 回答