将大型 XTS 对象转换为数组以计算特征值和特征向量
Convert large XTS object to array to calculate Eignevalues and Eigenvectors
我有一个大的 XTS 对象,它是使用滑动 window 跨 1343 个数据点的 12 x 12 变量的 XTS ZOO 对象进行相关计算的结果。
我的大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
如果我错了请纠正我,但我相信 R 中的 eigen()
函数需要一个方阵来计算矩阵 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 对象并计算特征值?
出于演示目的,我只return使用最大的特征值集,但您可以将代码修改为return任何您需要的内容。
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
我有一个大的 XTS 对象,它是使用滑动 window 跨 1343 个数据点的 12 x 12 变量的 XTS ZOO 对象进行相关计算的结果。
我的大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
如果我错了请纠正我,但我相信 R 中的 eigen()
函数需要一个方阵来计算矩阵 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 对象并计算特征值?
出于演示目的,我只return使用最大的特征值集,但您可以将代码修改为return任何您需要的内容。
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